]> source.dussan.org Git - archiva.git/blob
0b13f8b1ad602956c6187518be896b5f0fc62f8e
[archiva.git] /
1 package org.apache.maven.archiva.consumers.database;
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 org.apache.commons.lang.StringUtils;
23 import org.apache.maven.archiva.configuration.ArchivaConfiguration;
24 import org.apache.maven.archiva.configuration.RepositoryConfiguration;
25 import org.apache.maven.archiva.consumers.AbstractMonitoredConsumer;
26 import org.apache.maven.archiva.consumers.ConsumerException;
27 import org.apache.maven.archiva.consumers.DatabaseUnprocessedArtifactConsumer;
28 import org.apache.maven.archiva.database.ArchivaDAO;
29 import org.apache.maven.archiva.database.ArchivaDatabaseException;
30 import org.apache.maven.archiva.model.ArchivaArtifact;
31 import org.apache.maven.archiva.model.ArchivaProjectModel;
32 import org.apache.maven.archiva.model.RepositoryURL;
33 import org.apache.maven.archiva.repository.layout.BidirectionalRepositoryLayout;
34 import org.apache.maven.archiva.repository.layout.BidirectionalRepositoryLayoutFactory;
35 import org.apache.maven.archiva.repository.layout.LayoutException;
36 import org.apache.maven.archiva.repository.project.ProjectModelException;
37 import org.apache.maven.archiva.repository.project.ProjectModelReader;
38
39 import java.io.File;
40 import java.util.ArrayList;
41 import java.util.Date;
42 import java.util.List;
43
44 /**
45  * ProjectModelToDatabaseConsumer 
46  *
47  * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
48  * @version $Id$
49  * 
50  * @plexus.component role="org.apache.maven.archiva.consumers.DatabaseUnprocessedArtifactConsumer"
51  *                   role-hint="update-db-project"
52  *                   instantiation-strategy="per-lookup"
53  */
54 public class ProjectModelToDatabaseConsumer
55     extends AbstractMonitoredConsumer
56     implements DatabaseUnprocessedArtifactConsumer
57 {
58     /**
59      * @plexus.configuration default-value="update-db-project"
60      */
61     private String id;
62
63     /**
64      * @plexus.configuration default-value="Update database with project model information."
65      */
66     private String description;
67
68     /**
69      * @plexus.requirement role-hint="jdo"
70      */
71     private ArchivaDAO dao;
72
73     /**
74      * @plexus.requirement
75      */
76     private ArchivaConfiguration archivaConfiguration;
77
78     /**
79      * @plexus.requirement
80      */
81     private BidirectionalRepositoryLayoutFactory layoutFactory;
82
83     /**
84      * @plexus.requirement role-hint="model400"
85      */
86     private ProjectModelReader project400Reader;
87
88     /**
89      * @plexus.requirement role-hint="model300"
90      */
91     private ProjectModelReader project300Reader;
92
93     private List includes;
94
95     public ProjectModelToDatabaseConsumer()
96     {
97         includes = new ArrayList();
98         includes.add( "pom" );
99     }
100
101     public void beginScan()
102     {
103         // TODO Auto-generated method stub
104
105     }
106
107     public void completeScan()
108     {
109         // TODO Auto-generated method stub
110
111     }
112
113     public List getIncludedTypes()
114     {
115         return includes;
116     }
117
118     public void processArchivaArtifact( ArchivaArtifact artifact )
119         throws ConsumerException
120     {
121         if ( !StringUtils.equals( "pom", artifact.getType() ) )
122         {
123             return;
124         }
125
126         File artifactFile = toFile( artifact );
127         RepositoryConfiguration repo = getRepository( artifact );
128
129         if ( StringUtils.equals( "default", repo.getLayout() ) )
130         {
131             try
132             {
133                 ArchivaProjectModel model = project400Reader.read( artifactFile );
134                 
135                 model.setOrigin( "filesystem" );
136                 
137                 dao.getProjectModelDAO().saveProjectModel( model );
138             }
139             catch ( ProjectModelException e )
140             {
141                 getLogger().warn( "Unable to read project model " + artifactFile + " : " + e.getMessage(), e );
142             }
143             catch ( ArchivaDatabaseException e )
144             {
145                 getLogger().warn(
146                                   "Unable to save project model " + artifactFile + " to the database : "
147                                       + e.getMessage(), e );
148             }
149         }
150     }
151
152     private RepositoryConfiguration getRepository( ArchivaArtifact artifact )
153     {
154         String repoId = artifact.getModel().getRepositoryId();
155         return archivaConfiguration.getConfiguration().findRepositoryById( repoId );
156     }
157
158     private File toFile( ArchivaArtifact artifact )
159     {
160         RepositoryConfiguration repoConfig = getRepository( artifact );
161
162         BidirectionalRepositoryLayout layout = null;
163
164         try
165         {
166             layout = layoutFactory.getLayout( artifact );
167         }
168         catch ( LayoutException e )
169         {
170             getLogger().warn( "Unable to determine layout of " + artifact + ": " + e.getMessage(), e );
171             return null;
172         }
173
174         String path = layout.toPath( artifact );
175         RepositoryURL url = new RepositoryURL( repoConfig.getUrl() );
176         return new File( url.getPath(), path );
177     }
178
179     public String getDescription()
180     {
181         return description;
182     }
183
184     public String getId()
185     {
186         return id;
187     }
188
189     public boolean isPermanent()
190     {
191         return true;
192     }
193
194 }