]> source.dussan.org Git - archiva.git/blob
47962ba43016185e46577e4cd75149c01a52f435
[archiva.git] /
1 package org.apache.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.beans.ManagedRepository;
26 import org.apache.commons.lang.StringUtils;
27 import org.apache.archiva.redback.components.scheduler.CronExpressionValidator;
28 import org.springframework.context.annotation.Scope;
29 import org.springframework.stereotype.Controller;
30
31 import java.io.File;
32
33 /**
34  * AddManagedRepositoryAction
35  *
36  *
37  */
38 @Controller( "editManagedRepositoryAction" )
39 @Scope( "prototype" )
40 public class EditManagedRepositoryAction
41     extends AbstractManagedRepositoriesAction
42     implements Preparable, Validateable
43 {
44
45     private ManagedRepository repository;
46
47     private ManagedRepository stagingRepository;
48
49     private String repoid;
50
51     private final String action = "editRepository";
52
53     private boolean stageNeeded;
54
55
56     // FIXME better error message
57     public void prepare()
58         throws RepositoryAdminException
59     {
60         if ( StringUtils.isNotBlank( repoid ) )
61         {
62             repository = getManagedRepositoryAdmin().getManagedRepository( repoid );
63             stagingRepository = getManagedRepositoryAdmin().getManagedRepository( repoid + "-stage" );
64         }
65         else if ( repository != null )
66         {
67             repository.setReleases( false );
68             repository.setScanned( false );
69         }
70     }
71
72     public String input()
73     {
74         if ( repository == null )
75         {
76             addActionError( "Edit failure, unable to edit a repository with a blank repository id." );
77             return ERROR;
78         }
79
80         return INPUT;
81     }
82
83     public String confirmUpdate()
84     {
85         // location was changed
86         return save( true );
87     }
88
89     public String commit()
90         throws RepositoryAdminException
91     {
92         ManagedRepository existingConfig = getManagedRepositoryAdmin().getManagedRepository( repository.getId() );
93         boolean resetStats = false;
94
95         // check if the location was changed
96         repository.setLocation( getRepositoryCommonValidator().removeExpressions( repository.getLocation() ) );
97
98         if ( !StringUtils.equalsIgnoreCase( existingConfig.getLocation().trim(), repository.getLocation().trim() ) )
99         {
100             resetStats = true;
101
102             File dir = new File( repository.getLocation() );
103             if ( dir.exists() )
104             {
105                 return CONFIRM;
106             }
107         }
108
109         return save( resetStats );
110     }
111
112     private String save( boolean resetStats )
113     {
114
115         String result = SUCCESS;
116         try
117         {
118             getManagedRepositoryAdmin().updateManagedRepository( repository, stageNeeded, getAuditInformation(),
119                                                                  resetStats );
120         }
121         catch ( RepositoryAdminException e )
122         {
123             addActionError( "Repository Administration Exception: " + e.getMessage() );
124             result = ERROR;
125         }
126
127         return result;
128     }
129
130
131     @Override
132     public void validate()
133     {
134         CronExpressionValidator validator = new CronExpressionValidator();
135
136         if ( !validator.validate( repository.getCronExpression() ) )
137         {
138             addFieldError( "repository.cronExpression", "Invalid cron expression." );
139         }
140
141         trimAllRequestParameterValues();
142     }
143
144     private void trimAllRequestParameterValues()
145     {
146         if ( StringUtils.isNotEmpty( repository.getId() ) )
147         {
148             repository.setId( repository.getId().trim() );
149         }
150
151         if ( StringUtils.isNotEmpty( repository.getName() ) )
152         {
153             repository.setName( repository.getName().trim() );
154         }
155
156         if ( StringUtils.isNotEmpty( repository.getLocation() ) )
157         {
158             repository.setLocation( repository.getLocation().trim() );
159         }
160
161         if ( StringUtils.isNotEmpty( repository.getIndexDirectory() ) )
162         {
163             repository.setIndexDirectory( repository.getIndexDirectory().trim() );
164         }
165     }
166
167     public String getRepoid()
168     {
169         return repoid;
170     }
171
172     public void setRepoid( String repoid )
173     {
174         this.repoid = repoid;
175     }
176
177
178     public boolean isStageNeeded()
179     {
180         return stageNeeded;
181     }
182
183     public void setStageNeeded( boolean stageNeeded )
184     {
185
186         this.stageNeeded = stageNeeded;
187     }
188
189     public String getAction()
190     {
191         return action;
192     }
193
194     public ManagedRepository getRepository()
195     {
196         return repository;
197     }
198
199     public void setRepository( ManagedRepository repository )
200     {
201         this.repository = repository;
202     }
203
204     public ManagedRepository getStagingRepository()
205     {
206         return stagingRepository;
207     }
208
209     public void setStagingRepository( ManagedRepository stagingRepository )
210     {
211         this.stagingRepository = stagingRepository;
212     }
213 }