]> source.dussan.org Git - archiva.git/blob
24e9714f032bad8f4025d7a1348c2b7da64d2cbc
[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 import org.apache.archiva.admin.model.RepositoryAdminException;
25 import org.apache.archiva.admin.model.managed.ManagedRepository;
26 import org.apache.commons.lang.StringUtils;
27 import org.apache.maven.archiva.configuration.Configuration;
28 import org.codehaus.redback.components.scheduler.CronExpressionValidator;
29 import org.springframework.context.annotation.Scope;
30 import org.springframework.stereotype.Controller;
31
32 import java.io.File;
33
34 /**
35  * AddManagedRepositoryAction
36  *
37  * @version $Id$
38  */
39 @Controller( "addManagedRepositoryAction" )
40 @Scope( "prototype" )
41 public class AddManagedRepositoryAction
42     extends AbstractManagedRepositoriesAction
43     implements Preparable, Validateable
44 {
45
46     private ManagedRepository repository;
47
48     private boolean stageNeeded;
49
50     private String action = "addRepository";
51
52     public void prepare()
53     {
54         this.repository = new ManagedRepository();
55         this.repository.setReleases( false );
56         this.repository.setScanned( false );
57         this.repository.setBlockRedeployments( false );
58     }
59
60     public String input()
61     {
62         this.repository.setReleases( true );
63         this.repository.setScanned( true );
64         this.repository.setBlockRedeployments( true );
65
66         return INPUT;
67     }
68
69     public String confirmAdd()
70     {
71         return save();
72     }
73
74     public String commit()
75     {
76         repository.setLocation( getRepositoryCommonValidator().removeExpressions( repository.getLocation() ) );
77
78         File location = new File( repository.getLocation() );
79         if ( location.exists() )
80         {
81             return CONFIRM;
82         }
83
84         return save();
85     }
86
87     private String save()
88     {
89         String result = SUCCESS;
90         try
91         {
92             getManagedRepositoryAdmin().addManagedRepository( repository, stageNeeded, getAuditInformation() );
93         }
94         catch ( RepositoryAdminException e )
95         {
96             log.error( e.getMessage(), e );
97             addActionError( "Check your server logs, Repository Administration Exception: " + e.getMessage() );
98             result = INPUT;
99         }
100
101         return result;
102     }
103
104     // FIXME olamy dupe with admin repo component
105     @Override
106     public void validate()
107     {
108         Configuration config = archivaConfiguration.getConfiguration();
109
110         CronExpressionValidator validator = new CronExpressionValidator();
111         String repoId = repository.getId();
112
113         if ( config.getManagedRepositoriesAsMap().containsKey( repoId ) )
114         {
115             addFieldError( "repository.id", "Unable to add new repository with id [" + repoId
116                 + "], that id already exists as a managed repository." );
117         }
118         else if ( config.getRemoteRepositoriesAsMap().containsKey( repoId ) )
119         {
120             addFieldError( "repository.id", "Unable to add new repository with id [" + repoId
121                 + "], that id already exists as a remote repository." );
122         }
123         else if ( config.getRepositoryGroupsAsMap().containsKey( repoId ) )
124         {
125             addFieldError( "repository.id", "Unable to add new repository with id [" + repoId
126                 + "], that id already exists as a repository group." );
127         }
128         else if ( repoId.toLowerCase().contains( "stage" ) )
129         {
130             addFieldError( "repository.id", "Unable to add new repository with id [" + repoId
131                 + "], repository id cannot contains word stage" );
132         }
133
134         if ( !validator.validate( repository.getCronExpression() ) )
135         {
136             addFieldError( "repository.refreshCronExpression", "Invalid cron expression." );
137         }
138
139         // trim all unecessary trailing/leading white-spaces; always put this statement before the closing braces(after all validation).
140         trimAllRequestParameterValues();
141     }
142
143     private void trimAllRequestParameterValues()
144     {
145         if ( StringUtils.isNotEmpty( repository.getId() ) )
146         {
147             repository.setId( repository.getId().trim() );
148         }
149
150         if ( StringUtils.isNotEmpty( repository.getName() ) )
151         {
152             repository.setName( repository.getName().trim() );
153         }
154
155         if ( StringUtils.isNotEmpty( repository.getLocation() ) )
156         {
157             repository.setLocation( repository.getLocation().trim() );
158         }
159
160         if ( StringUtils.isNotEmpty( repository.getIndexDirectory() ) )
161         {
162             repository.setIndexDirectory( repository.getIndexDirectory().trim() );
163         }
164     }
165
166     public ManagedRepository getRepository()
167     {
168         return repository;
169     }
170
171     public void setRepository( ManagedRepository repository )
172     {
173         this.repository = repository;
174     }
175
176
177     public void setStageNeeded( boolean stageNeeded )
178     {
179         this.stageNeeded = stageNeeded;
180     }
181
182     public String getAction()
183     {
184         return action;
185     }
186 }