]> source.dussan.org Git - archiva.git/blob
2f3ed62b9d52f40c2dc82c27283a3ec96785c2dd
[archiva.git] /
1 package org.apache.maven.archiva.indexer.bytecode;
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.maven.archiva.model.ArchivaArtifact;
23 import org.apache.maven.archiva.model.ArchivaArtifactJavaDetails;
24 import org.apache.maven.archiva.model.platform.JavaArtifactHelper;
25 import org.codehaus.plexus.util.IOUtil;
26
27 import java.io.BufferedReader;
28 import java.io.File;
29 import java.io.FileReader;
30 import java.io.IOException;
31 import java.util.ArrayList;
32 import java.util.HashMap;
33 import java.util.Map;
34
35 import junit.framework.AssertionFailedError;
36
37 /**
38  * BytecodeRecordLoader - Utility method for loading dump files into BytecordRecords. 
39  *
40  * @author <a href="mailto:joakime@apache.org">Joakim Erdfelt</a>
41  * @version $Id$
42  */
43 public class BytecodeRecordLoader
44 {
45     private static Map cache = new HashMap();
46
47     public static BytecodeRecord loadRecord( File dumpFile, ArchivaArtifact artifact )
48     {
49         BytecodeRecord record = (BytecodeRecord) cache.get( artifact );
50         if ( record != null )
51         {
52             return record;
53         }
54
55         record = new BytecodeRecord();
56         record.setArtifact( artifact );
57
58         record.setClasses( new ArrayList() );
59         record.setMethods( new ArrayList() );
60         record.setFiles( new ArrayList() );
61
62         FileReader freader = null;
63         BufferedReader reader = null;
64
65         try
66         {
67             freader = new FileReader( dumpFile );
68             reader = new BufferedReader( freader );
69
70             String line = reader.readLine();
71             while ( line != null )
72             {
73                 if ( line.startsWith( "FILENAME|" ) )
74                 {
75                     String filename = line.substring( "FILENAME|".length() );
76                     record.setFilename( filename );
77                 }
78                 else if ( line.startsWith( "SIZE|" ) )
79                 {
80                     String size = line.substring( "SIZE|".length() );
81                     record.getArtifact().getModel().setSize( Long.parseLong( size ) );
82                 }
83                 else if ( line.startsWith( "HASH_MD5|" ) )
84                 {
85                     String md5 = line.substring( "HASH_MD5|".length() );
86                     record.getArtifact().getModel().setChecksumMD5( md5 );
87                 }
88                 else if ( line.startsWith( "HASH_SHA1|" ) )
89                 {
90                     String sha1 = line.substring( "HASH_SHA1|".length() );
91                     record.getArtifact().getModel().setChecksumSHA1( sha1 );
92                 }
93                 else if ( line.startsWith( "HASH_BYTECODE|" ) )
94                 {
95                     String hash = line.substring( "HASH_BYTECODE|".length() );
96                     ArchivaArtifactJavaDetails javaDetails = JavaArtifactHelper.getJavaDetails( record.getArtifact() );
97                     javaDetails.setChecksumBytecode( hash );
98                 }
99                 else if ( line.startsWith( "JDK|" ) )
100                 {
101                     String jdk = line.substring( "JDK|".length() );
102                     ArchivaArtifactJavaDetails javaDetails = JavaArtifactHelper.getJavaDetails( record.getArtifact() );
103                     javaDetails.setJdk( jdk );
104                 }
105                 else if ( line.startsWith( "CLASS|" ) )
106                 {
107                     String classname = line.substring( "CLASS|".length() );
108                     record.getClasses().add( classname );
109                 }
110                 else if ( line.startsWith( "METHOD|" ) )
111                 {
112                     String methodName = line.substring( "METHOD|".length() );
113                     record.getMethods().add( methodName );
114                 }
115                 else if ( line.startsWith( "FILE|" ) )
116                 {
117                     String fileentry = line.substring( "FILE|".length() );
118                     record.getFiles().add( fileentry );
119                 }
120
121                 line = reader.readLine();
122             }
123         }
124         catch ( IOException e )
125         {
126             throw new AssertionFailedError( "Unable to load record " + dumpFile + " from disk: " + e.getMessage() );
127         }
128         finally
129         {
130             IOUtil.close( reader );
131             IOUtil.close( freader );
132         }
133
134         cache.put( artifact, record );
135
136         return record;
137     }
138 }