]> source.dussan.org Git - archiva.git/blob
223136b749d292f6979e1361d0fe0736f45a6d38
[archiva.git] /
1 package org.apache.maven.repository.manager.web.action.admin;
2
3 /*
4  * Copyright 2005-2006 The Apache Software Foundation.
5  *
6  * Licensed under the Apache License, Version 2.0 (the "License");
7  * you may not use this file except in compliance with the License.
8  * You may obtain a copy of the License at
9  *
10  *    http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing, software
13  * distributed under the License is distributed on an "AS IS" BASIS,
14  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  * See the License for the specific language governing permissions and
16  * limitations under the License.
17  */
18
19 import com.opensymphony.xwork.ActionSupport;
20 import com.opensymphony.xwork.ModelDriven;
21 import com.opensymphony.xwork.Preparable;
22 import org.apache.maven.repository.configuration.AbstractRepositoryConfiguration;
23 import org.apache.maven.repository.configuration.Configuration;
24 import org.apache.maven.repository.configuration.ConfigurationChangeException;
25 import org.apache.maven.repository.configuration.ConfigurationStore;
26 import org.apache.maven.repository.configuration.ConfigurationStoreException;
27 import org.apache.maven.repository.configuration.InvalidConfigurationException;
28
29 import java.io.IOException;
30
31 /**
32  * Base action for repository configuration actions.
33  *
34  * @author <a href="mailto:brett@apache.org">Brett Porter</a>
35  */
36 public abstract class AbstractConfigureRepositoryAction
37     extends ActionSupport
38     implements ModelDriven, Preparable
39 {
40     /**
41      * @plexus.requirement
42      */
43     private ConfigurationStore configurationStore;
44
45     /**
46      * The repository.
47      */
48     private AbstractRepositoryConfiguration repository;
49
50     /**
51      * The repository ID to lookup when editing a repository.
52      */
53     private String repoId;
54
55     /**
56      * The previously read configuration.
57      */
58     protected Configuration configuration;
59
60     public String add()
61         throws IOException, ConfigurationStoreException, InvalidConfigurationException, ConfigurationChangeException
62     {
63         // TODO: if this didn't come from the form, go to configure.action instead of going through with re-saving what was just loaded
64
65         AbstractRepositoryConfiguration existingRepository = getRepository( repository.getId() );
66         if ( existingRepository != null )
67         {
68             addFieldError( "id", "A repository with that id already exists" );
69             return INPUT;
70         }
71
72         return saveConfiguration();
73     }
74
75     public String edit()
76         throws IOException, ConfigurationStoreException, InvalidConfigurationException, ConfigurationChangeException
77     {
78         // TODO: if this didn't come from the form, go to configure.action instead of going through with re-saving what was just loaded
79
80         AbstractRepositoryConfiguration existingRepository = getRepository( repository.getId() );
81         removeRepository( existingRepository );
82
83         return saveConfiguration();
84     }
85
86     protected abstract void removeRepository( AbstractRepositoryConfiguration existingRepository );
87
88     protected abstract AbstractRepositoryConfiguration getRepository( String id );
89
90     private String saveConfiguration()
91         throws IOException, ConfigurationStoreException, InvalidConfigurationException, ConfigurationChangeException
92     {
93         addRepository();
94
95         configurationStore.storeConfiguration( configuration );
96
97         // TODO: do we need to check if indexing is needed?
98
99         addActionMessage( "Successfully saved configuration" );
100
101         return SUCCESS;
102     }
103
104     protected abstract void addRepository()
105         throws IOException;
106
107     public String input()
108     {
109         return INPUT;
110     }
111
112     public Object getModel()
113     {
114         return repository;
115     }
116
117     protected abstract AbstractRepositoryConfiguration createRepository();
118
119     public void prepare()
120         throws ConfigurationStoreException
121     {
122         configuration = configurationStore.getConfigurationFromStore();
123
124         if ( repository == null )
125         {
126             repository = getRepository( repoId );
127         }
128         if ( repository == null )
129         {
130             repository = createRepository();
131         }
132     }
133
134     public String getRepoId()
135     {
136         return repoId;
137     }
138
139     public void setRepoId( String repoId )
140     {
141         this.repoId = repoId;
142     }
143
144     protected AbstractRepositoryConfiguration getRepository()
145     {
146         return repository;
147     }
148
149     public Configuration getConfiguration()
150     {
151         return configuration;
152     }
153 }