]> source.dussan.org Git - archiva.git/blob
0c6c0b41f3917b7410e4aacd3d2464789f57b77f
[archiva.git] /
1 package org.apache.maven.archiva.indexer.record;
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 org.apache.maven.artifact.Artifact;
20 import org.codehaus.plexus.digest.Digester;
21
22 import java.io.File;
23 import java.io.IOException;
24 import java.util.ArrayList;
25 import java.util.Arrays;
26 import java.util.HashSet;
27 import java.util.Iterator;
28 import java.util.List;
29 import java.util.Set;
30
31 /**
32  * An index record type for the minimal index.
33  *
34  * @author Edwin Punzalan
35  * @author Brett Porter
36  * @plexus.component role="org.apache.maven.archiva.indexer.record.RepositoryIndexRecordFactory" role-hint="minimal"
37  */
38 public class MinimalArtifactIndexRecordFactory
39     extends AbstractArtifactIndexRecordFactory
40 {
41     /* List of types to index. */
42     private static final Set INDEXED_TYPES = new HashSet( Arrays.asList( new String[]{"jar", "maven-plugin"} ) );
43
44     /**
45      * @plexus.requirement role-hint="sha1"
46      */
47     protected Digester sha1Digester;
48
49     /**
50      * @plexus.requirement role-hint="md5"
51      */
52     protected Digester md5Digester;
53
54     public RepositoryIndexRecord createRecord( Artifact artifact )
55     {
56         MinimalArtifactIndexRecord record = null;
57
58         File file = artifact.getFile();
59         if ( file != null && INDEXED_TYPES.contains( artifact.getType() ) && file.exists() )
60         {
61             String md5 = readChecksum( file, md5Digester );
62
63             List files = null;
64             try
65             {
66                 files = readFilesInArchive( file );
67             }
68             catch ( IOException e )
69             {
70                 getLogger().error( "Error reading artifact file, omitting from index: " + e.getMessage() );
71             }
72
73             if ( files != null )
74             {
75                 record = new MinimalArtifactIndexRecord();
76                 record.setMd5Checksum( md5 );
77                 record.setFilename( artifact.getRepository().pathOf( artifact ) );
78                 record.setLastModified( file.lastModified() );
79                 record.setSize( file.length() );
80                 record.setClasses( getClassesFromFiles( files ) );
81             }
82         }
83         return record;
84     }
85
86     private List getClassesFromFiles( List files )
87     {
88         List classes = new ArrayList();
89
90         for ( Iterator i = files.iterator(); i.hasNext(); )
91         {
92             String name = (String) i.next();
93
94             if ( isClass( name ) )
95             {
96                 classes.add( name.substring( 0, name.length() - 6 ).replace( '/', '.' ) );
97             }
98         }
99
100         return classes;
101     }
102 }