]> source.dussan.org Git - archiva.git/blob
a1d4ceebd18e4324ab65c9a76e13ce4b71e9e74b
[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 targetRepoId;
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         targetRepoId = repoid + "-stage";
82         Configuration config = configuration.getConfiguration();
83         ManagedRepositoryConfiguration targetRepoConfig = config.findManagedRepositoryById( targetRepoId );
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( targetRepoId );
102             repositoryMerger.merge( targetRepoId, repoid );
103             triggerAuditEvent( targetRepoId, "file-eshan", AuditEvent.MERGING_REPOSITORIES );
104
105             for ( ArtifactMetadata metadata : sourceArtifacts )
106             {
107                 triggerAuditEvent( repoid, metadata.getId(), AuditEvent.MERGING_REPOSITORIES );
108             }
109             return SUCCESS;
110         }
111         catch ( Exception ex )
112         {
113             return ERROR;
114         }
115     }
116
117     public String mergeBySkippingConflicts()
118     {
119         try
120         {
121             List<ArtifactMetadata> sourceArtifacts = metadataRepository.getArtifacts( targetRepoId );
122             sourceArtifacts.removeAll( conflictSourceArtifacts );
123             Filter<ArtifactMetadata> artifactsWithOutConflicts =
124                 new IncludesFilter<ArtifactMetadata>( sourceArtifacts );
125             repositoryMerger.merge( targetRepoId, repoid, artifactsWithOutConflicts );
126
127             for ( ArtifactMetadata metadata : sourceArtifacts )
128             {
129                 triggerAuditEvent( repoid, metadata.getId(), AuditEvent.MERGING_REPOSITORIES );
130             }
131             return SUCCESS;
132
133         }
134         catch ( Exception ex )
135         {
136             return ERROR;
137         }
138     }
139
140     public String mergeWithOutConlficts()
141     {
142
143         targetRepoId = repoid + "-stage";
144
145         try
146         {
147             conflictSourceArtifacts = repositoryMerger.getConflictsartifacts( targetRepoId, repoid );
148         }
149         catch ( Exception e )
150         {
151             return ERROR;
152         }
153         
154         return SUCCESS;
155     }
156
157     public ManagedRepositoryConfiguration getRepository()
158     {
159         return repository;
160     }
161
162     public void setRepository( ManagedRepositoryConfiguration repository )
163     {
164         this.repository = repository;
165     }
166
167     public void prepare()
168         throws Exception
169     {
170         targetRepoId = repoid + "-stage";
171         conflictSourceArtifacts = repositoryMerger.getConflictsartifacts( targetRepoId, repoid );
172         this.repository = new ManagedRepositoryConfiguration();
173         setConflictSourceArtifactsToBeDisplayed( conflictSourceArtifacts );
174     }
175
176     public String getTargetRepoId()
177     {
178         return targetRepoId;
179     }
180
181     public void setTargetRepoId( String targetRepoId )
182     {
183         this.targetRepoId = targetRepoId;
184     }
185
186     public String getRepoid()
187     {
188         return repoid;
189     }
190
191     public void setRepoid( String repoid )
192     {
193         this.repoid = repoid;
194     }
195
196     public List<ArtifactMetadata> getConflictSourceArtifacts()
197     {
198         return conflictSourceArtifacts;
199     }
200
201     public void setConflictSourceArtifacts( List<ArtifactMetadata> conflictSourceArtifacts )
202     {
203         this.conflictSourceArtifacts = conflictSourceArtifacts;
204     }
205
206       public  List<ArtifactMetadata> getConflictSourceArtifactsToBeDisplayed()
207     {
208         return conflictSourceArtifactsToBeDisplayed;
209     }
210
211     public void setConflictSourceArtifactsToBeDisplayed( List<ArtifactMetadata> conflictSourceArtifacts )
212         throws Exception
213     {
214         this.conflictSourceArtifactsToBeDisplayed = new ArrayList<ArtifactMetadata>();
215        HashMap<String, ArtifactMetadata> map = new HashMap<String, ArtifactMetadata>();
216         for ( ArtifactMetadata metadata : conflictSourceArtifacts )
217         {
218                 String metadataId = metadata.getNamespace() + metadata.getProject() + metadata.getProjectVersion() + metadata.getVersion();
219                 map.put( metadataId, metadata );
220         }
221         Iterator iterator = map.keySet().iterator();
222
223         while ( iterator.hasNext() )
224         {
225             conflictSourceArtifactsToBeDisplayed.add( map.get(iterator.next() ));
226         }
227
228     }
229 }
230