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