]> source.dussan.org Git - archiva.git/blob
97151c8163fbbb7f33bd7d9804933930bf482258
[archiva.git] /
1 package org.apache.maven.archiva.web.action.admin.repositories;
2
3 /*
4  * Licensed to the Apache Software Foundation (ASF) under one
5  * or more contributor license agreements.  See the NOTICE file
6  * distributed with this work for additional information
7  * regarding copyright ownership.  The ASF licenses this file
8  * to you under the Apache License, Version 2.0 (the
9  * "License"); you may not use this file except in compliance
10  * with the License.  You may obtain a copy of the License at
11  *
12  *  http://www.apache.org/licenses/LICENSE-2.0
13  *
14  * Unless required by applicable law or agreed to in writing,
15  * software distributed under the License is distributed on an
16  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17  * KIND, either express or implied.  See the License for the
18  * specific language governing permissions and limitations
19  * under the License.
20  */
21
22 import com.opensymphony.xwork2.Preparable;
23 import com.opensymphony.xwork2.Validateable;
24
25 import org.apache.maven.archiva.configuration.Configuration;
26 import org.apache.maven.archiva.configuration.ManagedRepositoryConfiguration;
27 import org.apache.maven.archiva.repository.audit.AuditEvent;
28 import org.codehaus.plexus.redback.role.RoleManagerException;
29 import org.codehaus.plexus.scheduler.CronExpressionValidator;
30 import java.io.File;
31 import java.io.IOException;
32
33 /**
34  * AddManagedRepositoryAction 
35  *
36  * @version $Id$
37  * 
38  * @plexus.component role="com.opensymphony.xwork2.Action" role-hint="addManagedRepositoryAction" instantiation-strategy="per-lookup"
39  */
40 public class AddManagedRepositoryAction
41     extends AbstractManagedRepositoriesAction
42     implements Preparable, Validateable
43 {
44     /**
45      * The model for this action.
46      */
47     private ManagedRepositoryConfiguration repository;
48     
49     private String action = "addRepository";
50
51     public void prepare()
52     {
53         this.repository = new ManagedRepositoryConfiguration();
54         this.repository.setReleases( false );
55         this.repository.setScanned( false );      
56         this.repository.setBlockRedeployments( false );
57     }
58
59     public String input()
60     {
61         this.repository.setReleases( true );
62         this.repository.setScanned( true );
63         this.repository.setBlockRedeployments( true );
64
65         return INPUT;
66     }
67      
68     public String confirmAdd()
69     {
70         return save();
71     }
72     
73     public String commit()
74     {
75         File location = new File( repository.getLocation() );
76         if( location.exists() )
77         {   
78             return CONFIRM;
79         }
80         
81         return save();
82     }
83     
84     private String save()
85     {
86         Configuration configuration = archivaConfiguration.getConfiguration();
87                 
88         String result;
89         try
90         {
91             addRepository( repository, configuration );
92             triggerAuditEvent( repository.getId(), null, AuditEvent.ADD_MANAGED_REPO );
93             addRepositoryRoles( repository );
94             result = saveConfiguration( configuration );
95         }
96         catch ( RoleManagerException e )
97         {            
98             addActionError( "Role Manager Exception: " + e.getMessage() );
99             result = INPUT;
100         }
101         catch ( IOException e )
102         {         
103             addActionError( "Role Manager Exception: " + e.getMessage() );
104             result = INPUT;
105         }
106
107         return result;
108     }
109
110     @Override
111     public void validate()
112     {
113         Configuration config = archivaConfiguration.getConfiguration();
114
115         CronExpressionValidator validator = new CronExpressionValidator();
116         String repoId = repository.getId();
117
118         if ( config.getManagedRepositoriesAsMap().containsKey( repoId ) )
119         {
120             addFieldError( "repository.id", "Unable to add new repository with id [" + repoId
121                 + "], that id already exists as a managed repository." );
122         }
123         else if ( config.getRemoteRepositoriesAsMap().containsKey( repoId ) )
124         {
125             addFieldError( "repository.id", "Unable to add new repository with id [" + repoId
126                 + "], that id already exists as a remote repository." );
127         }
128         else if( config.getRepositoryGroupsAsMap().containsKey( repoId ) )
129         {
130             addFieldError( "repository.id", "Unable to add new repository with id [" + repoId
131                + "], that id already exists as a repository group." );
132         }
133         
134         if ( !validator.validate( repository.getRefreshCronExpression() ) )
135         {
136             addFieldError( "repository.refreshCronExpression", "Invalid cron expression." );
137         }
138     }
139
140     public ManagedRepositoryConfiguration getRepository()
141     {
142         return repository;
143     }
144
145     public void setRepository( ManagedRepositoryConfiguration repository )
146     {
147         this.repository = repository;
148     }
149     
150     public String getAction()
151     {
152         return action;
153     }
154 }