]> source.dussan.org Git - archiva.git/blob
4a9019df546e0dd3b86162921d4dabd60c1aa707
[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.codehaus.plexus.digest.Digester;
20 import org.codehaus.plexus.digest.DigesterException;
21 import org.codehaus.plexus.logging.AbstractLogEnabled;
22
23 import java.io.File;
24 import java.io.IOException;
25 import java.util.ArrayList;
26 import java.util.Enumeration;
27 import java.util.List;
28 import java.util.zip.ZipEntry;
29 import java.util.zip.ZipFile;
30
31 /**
32  * Base class for the index record factories.
33  *
34  * @author <a href="mailto:brett@apache.org">Brett Porter</a>
35  */
36 public abstract class AbstractArtifactIndexRecordFactory
37     extends AbstractLogEnabled
38     implements RepositoryIndexRecordFactory
39 {
40     protected String readChecksum( File file, Digester digester )
41     {
42         String checksum;
43         try
44         {
45             checksum = digester.calc( file ).toLowerCase();
46         }
47         catch ( DigesterException e )
48         {
49             getLogger().error( "Error getting checksum for artifact file, leaving empty in index: " + e.getMessage() );
50             checksum = null;
51         }
52         return checksum;
53     }
54
55     protected List readFilesInArchive( File file )
56         throws IOException
57     {
58         ZipFile zipFile = new ZipFile( file );
59         List files;
60         try
61         {
62             files = new ArrayList( zipFile.size() );
63
64             for ( Enumeration entries = zipFile.entries(); entries.hasMoreElements(); )
65             {
66                 ZipEntry entry = (ZipEntry) entries.nextElement();
67
68                 files.add( entry.getName() );
69             }
70         }
71         finally
72         {
73             closeQuietly( zipFile );
74         }
75         return files;
76     }
77
78     protected static boolean isClass( String name )
79     {
80         // TODO: verify if class is public or protected (this might require the original ZipEntry)
81         return name.endsWith( ".class" ) && name.lastIndexOf( "$" ) < 0;
82     }
83
84     protected static void closeQuietly( ZipFile zipFile )
85     {
86         try
87         {
88             if ( zipFile != null )
89             {
90                 zipFile.close();
91             }
92         }
93         catch ( IOException e )
94         {
95             // ignored
96         }
97     }
98 }