]> source.dussan.org Git - archiva.git/blob
5c2cf7a0052883295d878a1c77f1c4c32cd6634b
[archiva.git] /
1 package org.apache.maven.archiva.web.action;
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.Validateable;
23 import com.opensymphony.xwork2.Preparable;
24 import org.apache.archiva.audit.Auditable;
25 import org.apache.archiva.audit.AuditEvent;
26 import org.apache.archiva.stagerepository.merge.Maven2RepositoryMerger;
27 import org.apache.archiva.metadata.model.ArtifactMetadata;
28 import org.apache.archiva.metadata.repository.filter.Filter;
29 import org.apache.archiva.metadata.repository.filter.IncludesFilter;
30 import org.apache.archiva.metadata.repository.MetadataRepository;
31 import org.apache.maven.archiva.configuration.ManagedRepositoryConfiguration;
32 import org.apache.maven.archiva.configuration.Configuration;
33 import org.apache.maven.archiva.configuration.ArchivaConfiguration;
34
35 import java.util.List;
36 import java.util.ArrayList;
37 import java.util.HashMap;
38 import java.util.Iterator;
39
40 /**
41  * @plexus.component role="com.opensymphony.xwork2.Action" role-hint="mergeAction" instantiation-strategy="per-lookup"
42  */
43 public class MergeAction
44     extends PlexusActionSupport
45     implements Validateable, Preparable, Auditable
46
47 {
48     /**
49      * @plexus.requirement role="org.apache.archiva.stagerepository.merge.RepositoryMerger" role-hint="maven2"
50      */
51     private Maven2RepositoryMerger repositoryMerger;
52
53     /**
54      * @plexus.requirement role-hint="default"
55      */
56     private ArchivaConfiguration configuration;
57
58     /**
59      * @plexus.requirement role-hint="default"
60      */
61     private MetadataRepository metadataRepository;
62
63     private ManagedRepositoryConfiguration repository;
64
65     private String repoid;
66
67     private String sourceRepoId;
68
69     private final String action = "merge";
70
71     private final String noConflicts = "NO CONFLICTS";
72
73     private final String hasConflicts = "CONFLICTS";
74
75     private List<ArtifactMetadata> conflictSourceArtifacts;
76
77     private List<ArtifactMetadata> conflictSourceArtifactsToBeDisplayed;
78
79     public String getConflicts()
80     {
81         sourceRepoId = repoid + "-stage";
82         Configuration config = configuration.getConfiguration();
83         ManagedRepositoryConfiguration targetRepoConfig = config.findManagedRepositoryById( sourceRepoId );
84
85         if ( targetRepoConfig != null )
86         {
87             return hasConflicts;
88
89         }
90         else
91         {
92             return ERROR;
93         }
94     }
95
96     public String doMerge()
97         throws Exception
98     {
99         try
100         {
101             List<ArtifactMetadata> sourceArtifacts = metadataRepository.getArtifacts( sourceRepoId );
102             repositoryMerger.merge( sourceRepoId, repoid );
103             triggerAuditEvent( sourceRepoId, "file-eshan", AuditEvent.MERGING_REPOSITORIES );
104
105             for ( ArtifactMetadata metadata : sourceArtifacts )
106             {
107                 triggerAuditEvent( repoid, metadata.getId(), AuditEvent.MERGING_REPOSITORIES );
108             }
109
110             addActionMessage( "Repository '" + sourceRepoId + "' successfully merged to '" + repoid + "'." );
111             
112             return SUCCESS;
113         }
114         catch ( Exception ex )
115         {
116             addActionError( "Error occurred while merging the repositories." );
117             return ERROR;
118         }
119     }
120
121     public String mergeBySkippingConflicts()
122     {
123         try
124         {
125             List<ArtifactMetadata> sourceArtifacts = metadataRepository.getArtifacts( sourceRepoId );
126             sourceArtifacts.removeAll( conflictSourceArtifacts );
127             Filter<ArtifactMetadata> artifactsWithOutConflicts =
128                 new IncludesFilter<ArtifactMetadata>( sourceArtifacts );
129             repositoryMerger.merge( sourceRepoId, repoid, artifactsWithOutConflicts );
130
131             for ( ArtifactMetadata metadata : sourceArtifacts )
132             {
133                 triggerAuditEvent( repoid, metadata.getId(), AuditEvent.MERGING_REPOSITORIES );
134             }
135
136             addActionMessage( "Repository '" + sourceRepoId + "' successfully merged to '" + repoid + "'." );
137
138             return SUCCESS;
139         }
140         catch ( Exception ex )
141         {
142             addActionError( "Error occurred while merging the repositories." );
143             return ERROR;
144         }
145     }
146
147     public String mergeWithOutConlficts()
148     {
149
150         sourceRepoId = repoid + "-stage";
151
152         try
153         {
154             conflictSourceArtifacts = repositoryMerger.getConflictsartifacts( sourceRepoId, repoid );
155         }
156         catch ( Exception e )
157         {
158             addActionError( "Error occurred while merging the repositories." );
159             return ERROR;
160         }
161
162         addActionMessage( "Repository '" + sourceRepoId + "' successfully merged to '" + repoid + "'." );
163         
164         return SUCCESS;
165     }
166
167     public ManagedRepositoryConfiguration getRepository()
168     {
169         return repository;
170     }
171
172     public void setRepository( ManagedRepositoryConfiguration repository )
173     {
174         this.repository = repository;
175     }
176
177     public void prepare()
178         throws Exception
179     {
180         sourceRepoId = repoid + "-stage";
181         conflictSourceArtifacts = repositoryMerger.getConflictsartifacts( sourceRepoId, repoid );
182         this.repository = new ManagedRepositoryConfiguration();
183         setConflictSourceArtifactsToBeDisplayed( conflictSourceArtifacts );
184     }
185
186     public String getSourceRepoId()
187     {
188         return sourceRepoId;
189     }
190
191     public void setSourceRepoId( String sourceRepoId )
192     {
193         this.sourceRepoId = sourceRepoId;
194     }
195
196     public String getRepoid()
197     {
198         return repoid;
199     }
200
201     public void setRepoid( String repoid )
202     {
203         this.repoid = repoid;
204     }
205
206     public List<ArtifactMetadata> getConflictSourceArtifacts()
207     {
208         return conflictSourceArtifacts;
209     }
210
211     public void setConflictSourceArtifacts( List<ArtifactMetadata> conflictSourceArtifacts )
212     {
213         this.conflictSourceArtifacts = conflictSourceArtifacts;
214     }
215
216       public  List<ArtifactMetadata> getConflictSourceArtifactsToBeDisplayed()
217     {
218         return conflictSourceArtifactsToBeDisplayed;
219     }
220
221     public void setConflictSourceArtifactsToBeDisplayed( List<ArtifactMetadata> conflictSourceArtifacts )
222         throws Exception
223     {
224         this.conflictSourceArtifactsToBeDisplayed = new ArrayList<ArtifactMetadata>();
225         HashMap<String, ArtifactMetadata> map = new HashMap<String, ArtifactMetadata>();
226         for ( ArtifactMetadata metadata : conflictSourceArtifacts )
227         {
228                 String metadataId = metadata.getNamespace() + metadata.getProject() + metadata.getProjectVersion() + metadata.getVersion();
229                 map.put( metadataId, metadata );
230         }
231         Iterator iterator = map.keySet().iterator();
232
233         while ( iterator.hasNext() )
234         {
235             conflictSourceArtifactsToBeDisplayed.add( map.get(iterator.next() ));
236         }
237     }
238 }
239