summaryrefslogtreecommitdiffstats
path: root/archiva-base
diff options
context:
space:
mode:
authorJoakim Erdfelt <joakime@apache.org>2007-04-03 15:21:33 +0000
committerJoakim Erdfelt <joakime@apache.org>2007-04-03 15:21:33 +0000
commit74cb10586cf7f1c415930d5ab1d59a6e44b253ee (patch)
treea6c5079ac724479adc4d6eabfb7144e38f713732 /archiva-base
parent54e1d8c6083cd552d9b8d3ee2d2ced20e9a6f460 (diff)
downloadarchiva-74cb10586cf7f1c415930d5ab1d59a6e44b253ee.tar.gz
archiva-74cb10586cf7f1c415930d5ab1d59a6e44b253ee.zip
Updating branch with latest work towards database refactor.
git-svn-id: https://svn.apache.org/repos/asf/maven/archiva/branches/archiva-jpox-database-refactor@525176 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'archiva-base')
-rw-r--r--archiva-base/archiva-common/pom.xml2
-rw-r--r--archiva-base/archiva-common/src/main/java/org/apache/maven/archiva/common/artifact/builder/AbstractLayoutArtifactBuilder.java55
-rw-r--r--archiva-base/archiva-common/src/main/java/org/apache/maven/archiva/common/artifact/builder/DefaultLayoutArtifactBuilder.java218
-rw-r--r--archiva-base/archiva-common/src/main/java/org/apache/maven/archiva/common/artifact/builder/LegacyLayoutArtifactBuilder.java303
-rw-r--r--archiva-base/archiva-common/src/main/java/org/apache/maven/archiva/common/artifact/managed/ManagedArtifact.java76
-rw-r--r--archiva-base/archiva-common/src/main/java/org/apache/maven/archiva/common/artifact/managed/ManagedArtifactTypes.java81
-rw-r--r--archiva-base/archiva-common/src/main/java/org/apache/maven/archiva/common/artifact/managed/ManagedEjbArtifact.java49
-rw-r--r--archiva-base/archiva-common/src/main/java/org/apache/maven/archiva/common/artifact/managed/ManagedJavaArtifact.java62
-rw-r--r--archiva-base/archiva-common/src/main/java/org/apache/maven/archiva/common/utils/VersionUtil.java (renamed from archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/version/VersionUtil.java)2
-rw-r--r--archiva-base/archiva-common/src/test/java/org/apache/maven/archiva/common/AbstractArchivaCommonTestCase.java146
-rw-r--r--archiva-base/archiva-common/src/test/java/org/apache/maven/archiva/common/AllTests.java1
-rw-r--r--archiva-base/archiva-common/src/test/java/org/apache/maven/archiva/common/artifact/builder/AbstractLayoutArtifactBuilderTestCase.java51
-rw-r--r--archiva-base/archiva-common/src/test/java/org/apache/maven/archiva/common/artifact/builder/DefaultLayoutArtifactBuilderTest.java206
-rw-r--r--archiva-base/archiva-common/src/test/java/org/apache/maven/archiva/common/artifact/builder/LegacyLayoutArtifactBuilderTest.java160
-rw-r--r--archiva-base/archiva-configuration/src/main/mdo/configuration.mdo214
-rw-r--r--archiva-base/archiva-configuration/src/main/resources/org/apache/maven/archiva/configuration/default-archiva.xml252
-rw-r--r--archiva-base/archiva-configuration/src/test/conf/repository-manager.xml252
-rw-r--r--archiva-base/archiva-configuration/src/test/java/org/apache/maven/archiva/configuration/ArchivaConfigurationTest.java22
-rw-r--r--archiva-base/archiva-consumers/archiva-consumer-api/pom.xml5
-rw-r--r--archiva-base/archiva-consumers/archiva-consumer-api/src/main/java/org/apache/maven/archiva/consumers/AbstractMonitoredConsumer.java93
-rw-r--r--archiva-base/archiva-consumers/archiva-consumer-api/src/main/java/org/apache/maven/archiva/consumers/ArchivaArtifactConsumer.java81
-rw-r--r--archiva-base/archiva-consumers/archiva-consumer-api/src/main/java/org/apache/maven/archiva/consumers/BaseConsumer.java64
-rw-r--r--archiva-base/archiva-consumers/archiva-consumer-api/src/main/java/org/apache/maven/archiva/consumers/ConsumerException.java (renamed from archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/consumer/ConsumerException.java)16
-rw-r--r--archiva-base/archiva-consumers/archiva-consumer-api/src/main/java/org/apache/maven/archiva/consumers/ConsumerMonitor.java55
-rw-r--r--archiva-base/archiva-consumers/archiva-consumer-api/src/main/java/org/apache/maven/archiva/consumers/RepositoryContentConsumer.java91
-rw-r--r--archiva-base/archiva-consumers/archiva-core-consumers/pom.xml17
-rw-r--r--archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/maven/archiva/consumers/core/ArtifactMissingChecksumsConsumer.java236
-rw-r--r--archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/maven/archiva/consumers/core/ValidateChecksumConsumer.java158
-rw-r--r--archiva-base/archiva-consumers/archiva-database-consumers/pom.xml17
-rw-r--r--archiva-base/archiva-consumers/archiva-database-consumers/src/main/java/org/apache/maven/archiva/consumers/database/ArtifactUpdateDatabaseConsumer.java213
-rw-r--r--archiva-base/archiva-consumers/archiva-lucene-consumers/pom.xml17
-rw-r--r--archiva-base/archiva-consumers/archiva-lucene-consumers/src/main/java/org/apache/maven/archiva/consumers/lucene/IndexArtifactConsumer.java98
-rw-r--r--archiva-base/archiva-consumers/archiva-lucene-consumers/src/main/java/org/apache/maven/archiva/consumers/lucene/IndexContentConsumer.java153
-rw-r--r--archiva-base/archiva-consumers/pom.xml2
-rw-r--r--archiva-base/archiva-indexer/pom.xml26
-rw-r--r--archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/ArtifactKeys.java20
-rw-r--r--archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/RepositoryContentIndex.java (renamed from archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/RepositoryArtifactIndex.java)96
-rw-r--r--archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/RepositoryContentIndexFactory.java54
-rw-r--r--archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/bytecode/BytecodeAnalyzer.java73
-rw-r--r--archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/bytecode/BytecodeEntryConverter.java112
-rw-r--r--archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/bytecode/BytecodeHandlers.java53
-rw-r--r--archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/bytecode/BytecodeKeys.java (renamed from archiva-base/archiva-common/src/main/java/org/apache/maven/archiva/common/artifact/builder/LayoutArtifactBuilder.java)21
-rw-r--r--archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/bytecode/BytecodeRecord.java164
-rw-r--r--archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/filecontent/FileContentAnalyzer.java48
-rw-r--r--archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/filecontent/FileContentConverter.java67
-rw-r--r--archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/filecontent/FileContentHandlers.java45
-rw-r--r--archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/filecontent/FileContentKeys.java33
-rw-r--r--archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/filecontent/FileContentRecord.java104
-rw-r--r--archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/hashcodes/HashcodesAnalyzer.java63
-rw-r--r--archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/hashcodes/HashcodesEntryConverter.java89
-rw-r--r--archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/hashcodes/HashcodesHandlers.java53
-rw-r--r--archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/hashcodes/HashcodesKeys.java35
-rw-r--r--archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/hashcodes/HashcodesRecord.java126
-rw-r--r--archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/lucene/LuceneDocumentMaker.java114
-rw-r--r--archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/lucene/LuceneEntryConverter.java (renamed from archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/lucene/LuceneIndexRecordConverter.java)9
-rw-r--r--archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/lucene/LuceneIndexHandlers.java45
-rw-r--r--archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/lucene/LuceneMinimalIndexRecordConverter.java87
-rw-r--r--archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/lucene/LuceneRepositoryArtifactIndex.java604
-rw-r--r--archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/lucene/LuceneRepositoryArtifactIndexFactory.java45
-rw-r--r--archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/lucene/LuceneRepositoryContentIndex.java469
-rw-r--r--archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/lucene/LuceneRepositoryContentIndexFactory.java99
-rw-r--r--archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/lucene/LuceneRepositoryContentRecord.java (renamed from archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/record/RepositoryIndexRecord.java)8
-rw-r--r--archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/lucene/LuceneStandardIndexRecordConverter.java167
-rw-r--r--archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/lucene/analyzers/ClassnameTokenizer.java59
-rw-r--r--archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/lucene/analyzers/FilenamesTokenizer.java52
-rw-r--r--archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/lucene/analyzers/GroupIdTokenizer.java52
-rw-r--r--archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/lucene/analyzers/VersionTokenizer.java51
-rw-r--r--archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/record/AbstractArtifactIndexRecordFactory.java101
-rw-r--r--archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/record/IndexRecordExistsArtifactFilter.java47
-rw-r--r--archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/record/MinimalArtifactIndexRecord.java173
-rw-r--r--archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/record/MinimalArtifactIndexRecordFactory.java105
-rw-r--r--archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/record/RepositoryIndexRecordFactory.java47
-rw-r--r--archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/record/StandardArtifactIndexRecord.java412
-rw-r--r--archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/record/StandardArtifactIndexRecordFactory.java373
-rw-r--r--archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/record/StandardIndexRecordFields.java84
-rw-r--r--archiva-base/archiva-indexer/src/test/artifact-dumps/archiva-common-1.0.jar.txt56
-rw-r--r--archiva-base/archiva-indexer/src/test/artifact-dumps/continuum-webapp-1.0.3-SNAPSHOT.war.txt1492
-rw-r--r--archiva-base/archiva-indexer/src/test/artifact-dumps/daytrader-ear-1.1.ear.txt18
-rw-r--r--archiva-base/archiva-indexer/src/test/artifact-dumps/maven-archetype-simple-1.0-alpha-4.jar.txt19
-rw-r--r--archiva-base/archiva-indexer/src/test/artifact-dumps/maven-help-plugin-2.0.2-20070119.121239-2.jar.txt88
-rw-r--r--archiva-base/archiva-indexer/src/test/artifact-dumps/redback-authorization-open-1.0-alpha-1-SNAPSHOT.jar.txt26
-rw-r--r--archiva-base/archiva-indexer/src/test/artifact-dumps/testng-5.1-jdk15.jar.txt4789
-rw-r--r--archiva-base/archiva-indexer/src/test/artifact-dumps/wagon-provider-api-1.0-beta-3-20070209.213958-2.jar.txt435
-rw-r--r--archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/AbstractIndexCreationTestCase.java188
-rw-r--r--archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/AbstractIndexerTestCase.java208
-rw-r--r--archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/AbstractSearchTestCase.java163
-rw-r--r--archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/AllTests.java45
-rw-r--r--archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/MockConfiguration.java54
-rw-r--r--archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/bytecode/AllTests.java (renamed from archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/AllTests.java)8
-rw-r--r--archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/bytecode/BytecodeIndexTest.java64
-rw-r--r--archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/bytecode/BytecodeRecordLoader.java138
-rw-r--r--archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/bytecode/BytecodeSearchTest.java330
-rw-r--r--archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/hashcodes/AllTests.java44
-rw-r--r--archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/hashcodes/HashcodesIndexTest.java65
-rw-r--r--archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/hashcodes/HashcodesRecordLoader.java106
-rw-r--r--archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/hashcodes/HashcodesSearchTest.java290
-rw-r--r--archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/lucene/LuceneMinimalArtifactIndexSearchTest.java231
-rw-r--r--archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/lucene/LuceneMinimalArtifactIndexTest.java353
-rw-r--r--archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/lucene/LuceneStandardArtifactIndexSearchTest.java790
-rw-r--r--archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/lucene/LuceneStandardArtifactIndexTest.java409
-rw-r--r--archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/query/AllTests.java43
-rw-r--r--archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/record/MinimalArtifactIndexRecordFactoryTest.java249
-rw-r--r--archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/record/StandardArtifactIndexRecordFactoryTest.java446
-rw-r--r--archiva-base/archiva-indexer/src/test/resources/META-INF/plexus/components.xml22
-rw-r--r--archiva-base/archiva-indexer/src/test/resources/org/apache/maven/archiva/indexer/bytecode/BytecodeIndexTest.xml22
-rw-r--r--archiva-base/archiva-indexer/src/test/resources/org/apache/maven/archiva/indexer/bytecode/BytecodeSearchTest.xml22
-rw-r--r--archiva-base/archiva-indexer/src/test/resources/org/apache/maven/archiva/indexer/hashcodes/HashcodesIndexTest.xml22
-rw-r--r--archiva-base/archiva-indexer/src/test/resources/org/apache/maven/archiva/indexer/hashcodes/HashcodesSearchTest.xml22
-rw-r--r--archiva-base/archiva-model/src/main/java/org/apache/maven/archiva/model/ArchivaArtifact.java (renamed from archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/ArchivaArtifact.java)115
-rw-r--r--archiva-base/archiva-model/src/main/java/org/apache/maven/archiva/model/ArchivaArtifactPlatformDetails.java (renamed from archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/layer/DefaultRepositoryQueryLayerTest.java)21
-rw-r--r--archiva-base/archiva-model/src/main/java/org/apache/maven/archiva/model/ArchivaRepository.java (renamed from archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/ArchivaRepository.java)51
-rw-r--r--archiva-base/archiva-model/src/main/java/org/apache/maven/archiva/model/DependencyScope.java46
-rw-r--r--archiva-base/archiva-model/src/main/java/org/apache/maven/archiva/model/RepositoryURL.java (renamed from archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/RepositoryURL.java)2
-rw-r--r--archiva-base/archiva-model/src/main/java/org/apache/maven/archiva/model/platform/JavaArtifactHelper.java44
-rw-r--r--archiva-base/archiva-model/src/main/mdo/archiva-base.xml153
-rw-r--r--archiva-base/archiva-repository-layer/pom.xml10
-rw-r--r--archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/layer/CachedRepositoryQueryLayer.java98
-rw-r--r--archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/layer/DefaultRepositoryQueryLayer.java105
-rw-r--r--archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/layer/DefaultRepositoryQueryLayerFactory.java38
-rw-r--r--archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/layer/RepositoryQueryLayer.java40
-rw-r--r--archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/layer/RepositoryQueryLayerFactory.java41
-rw-r--r--archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/connector/RepositoryConnector.java2
-rw-r--r--archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/consumer/Consumer.java91
-rw-r--r--archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/consumer/ConsumerFactory.java70
-rw-r--r--archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/AbstractArtifactExtensionMapping.java4
-rw-r--r--archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/ArtifactExtensionMapping.java2
-rw-r--r--archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/layout/BidirectionalRepositoryLayout.java2
-rw-r--r--archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/layout/DefaultBidirectionalRepositoryLayout.java30
-rw-r--r--archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/layout/FilenameParts.java73
-rw-r--r--archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/layout/LegacyBidirectionalRepositoryLayout.java27
-rw-r--r--archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/layout/RepositoryLayoutUtils.java36
-rw-r--r--archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/metadata/RepositoryMetadataException.java52
-rw-r--r--archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/metadata/RepositoryMetadataReader.java73
-rw-r--r--archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/project/ProjectModel300Reader.java42
-rw-r--r--archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/project/ProjectModel400Reader.java405
-rw-r--r--archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/project/ProjectModelException.java (renamed from archiva-base/archiva-common/src/main/java/org/apache/maven/archiva/common/artifact/builder/BuilderException.java)14
-rw-r--r--archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/project/ProjectModelReader.java35
-rw-r--r--archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/scanner/RepositoryScanner.java8
-rw-r--r--archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/scanner/RepositoryScannerInstance.java53
-rw-r--r--archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/layer/AbstractRepositoryQueryLayerTestCase.java116
-rw-r--r--archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/layer/CachedRepositoryQueryLayerTest.java56
-rw-r--r--archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/AllTests.java4
-rw-r--r--archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/RepositoryURLTest.java2
-rw-r--r--archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/layout/AbstractBidirectionalRepositoryLayoutTestCase.java4
-rw-r--r--archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/layout/AllTests.java45
-rw-r--r--archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/layout/DefaultBidirectionalRepositoryLayoutTest.java97
-rw-r--r--archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/layout/LegacyBidirectionalRepositoryLayoutTest.java51
-rw-r--r--archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/layout/RepositoryLayoutUtilsTest.java88
-rw-r--r--archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/metadata/AllTests.java (renamed from archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/layer/AllTests.java)7
-rw-r--r--archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/metadata/RepositoryMetadataReaderTest.java52
-rw-r--r--archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/project/AllTests.java (renamed from archiva-base/archiva-common/src/test/java/org/apache/maven/archiva/common/artifact/builder/AllTests.java)7
-rw-r--r--archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/project/ProjectModel400ReaderTest.java53
-rw-r--r--archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/scanner/AllTests.java41
-rw-r--r--archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/scanner/CentralScannerTiming.java143
-rw-r--r--archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/scanner/RepositoryScannerTest.java196
-rw-r--r--archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/scanner/ScanConsumer.java50
-rw-r--r--archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.0/maven-downloader-1.0-javadoc.jarbin0 -> 38527 bytes
-rw-r--r--archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.0/maven-downloader-1.0-javadoc.jar.md51
-rw-r--r--archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.0/maven-downloader-1.0-javadoc.jar.sha11
-rw-r--r--archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.0/maven-downloader-1.0-sources.jarbin0 -> 2819 bytes
-rw-r--r--archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.0/maven-downloader-1.0-sources.jar.md51
-rw-r--r--archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.0/maven-downloader-1.0-sources.jar.sha11
-rw-r--r--archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.0/maven-downloader-1.0.jarbin0 -> 6480 bytes
-rw-r--r--archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.0/maven-downloader-1.0.jar.md51
-rw-r--r--archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.0/maven-downloader-1.0.jar.sha11
-rw-r--r--archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.0/maven-downloader-1.0.pom56
-rw-r--r--archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.0/maven-downloader-1.0.pom.md51
-rw-r--r--archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.0/maven-downloader-1.0.pom.sha11
-rw-r--r--archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.1/maven-downloader-1.1-javadoc.jarbin0 -> 38215 bytes
-rw-r--r--archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.1/maven-downloader-1.1-javadoc.jar.md51
-rw-r--r--archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.1/maven-downloader-1.1-javadoc.jar.sha11
-rw-r--r--archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.1/maven-downloader-1.1-sources.jarbin0 -> 2822 bytes
-rw-r--r--archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.1/maven-downloader-1.1-sources.jar.md51
-rw-r--r--archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.1/maven-downloader-1.1-sources.jar.sha11
-rw-r--r--archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.1/maven-downloader-1.1.jarbin0 -> 6478 bytes
-rw-r--r--archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.1/maven-downloader-1.1.jar.md51
-rw-r--r--archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.1/maven-downloader-1.1.jar.sha11
-rw-r--r--archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.1/maven-downloader-1.1.pom56
-rw-r--r--archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.1/maven-downloader-1.1.pom.md51
-rw-r--r--archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.1/maven-downloader-1.1.pom.sha11
-rw-r--r--archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/maven-metadata.xml13
-rw-r--r--archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/maven-metadata.xml.md51
-rw-r--r--archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/maven-metadata.xml.sha11
-rw-r--r--archiva-base/archiva-scheduled/pom.xml67
-rw-r--r--archiva-base/archiva-scheduled/src/main/java/org/apache/maven/archiva/scheduled/DefaultRepositoryTaskScheduler.java210
-rw-r--r--archiva-base/archiva-scheduled/src/main/java/org/apache/maven/archiva/scheduled/RepositoryTaskJob.java85
-rw-r--r--archiva-base/archiva-scheduled/src/main/java/org/apache/maven/archiva/scheduled/RepositoryTaskScheduler.java (renamed from archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/record/MinimalIndexRecordFields.java)29
-rw-r--r--archiva-base/archiva-scheduled/src/main/java/org/apache/maven/archiva/scheduled/executors/DataRefreshConsumers.java61
-rw-r--r--archiva-base/archiva-scheduled/src/main/java/org/apache/maven/archiva/scheduled/executors/DataRefreshExecutor.java191
-rw-r--r--archiva-base/archiva-scheduled/src/main/java/org/apache/maven/archiva/scheduled/tasks/DataRefreshTask.java41
-rw-r--r--archiva-base/archiva-scheduled/src/main/java/org/apache/maven/archiva/scheduled/tasks/RepositoryTask.java (renamed from archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/RepositoryArtifactIndexFactory.java)36
-rw-r--r--archiva-base/archiva-scheduled/src/test/java/org/apache/maven/archiva/scheduled/executors/DataRefreshExecutorTest.java75
-rw-r--r--archiva-base/archiva-xml-tools/pom.xml79
-rw-r--r--archiva-base/archiva-xml-tools/src/main/java/org/apache/maven/archiva/xml/LatinEntities.java309
-rw-r--r--archiva-base/archiva-xml-tools/src/main/java/org/apache/maven/archiva/xml/LatinEntityResolutionReader.java60
-rw-r--r--archiva-base/archiva-xml-tools/src/main/java/org/apache/maven/archiva/xml/XMLException.java (renamed from archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/layer/RepositoryQueryLayerException.java)16
-rw-r--r--archiva-base/archiva-xml-tools/src/main/java/org/apache/maven/archiva/xml/XMLReader.java262
-rw-r--r--archiva-base/archiva-xml-tools/src/test/examples/no-prolog-basic.xml14
-rw-r--r--archiva-base/archiva-xml-tools/src/test/examples/no-prolog-with-entities.xml6
-rw-r--r--archiva-base/archiva-xml-tools/src/test/examples/no-prolog-with-utf8.xml6
-rw-r--r--archiva-base/archiva-xml-tools/src/test/examples/prolog-with-utf8.xml7
-rw-r--r--archiva-base/archiva-xml-tools/src/test/java/org/apache/maven/archiva/xml/XMLReaderTest.java113
-rw-r--r--archiva-base/pom.xml3
203 files changed, 16291 insertions, 7527 deletions
diff --git a/archiva-base/archiva-common/pom.xml b/archiva-base/archiva-common/pom.xml
index 263206850..17a20abd5 100644
--- a/archiva-base/archiva-common/pom.xml
+++ b/archiva-base/archiva-common/pom.xml
@@ -39,6 +39,7 @@
<groupId>org.codehaus.plexus</groupId>
<artifactId>plexus-component-api</artifactId>
</dependency>
+ <!--
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-artifact-manager</artifactId>
@@ -47,6 +48,7 @@
<groupId>org.apache.maven</groupId>
<artifactId>maven-project</artifactId>
</dependency>
+ -->
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
diff --git a/archiva-base/archiva-common/src/main/java/org/apache/maven/archiva/common/artifact/builder/AbstractLayoutArtifactBuilder.java b/archiva-base/archiva-common/src/main/java/org/apache/maven/archiva/common/artifact/builder/AbstractLayoutArtifactBuilder.java
deleted file mode 100644
index b77826ad1..000000000
--- a/archiva-base/archiva-common/src/main/java/org/apache/maven/archiva/common/artifact/builder/AbstractLayoutArtifactBuilder.java
+++ /dev/null
@@ -1,55 +0,0 @@
-package org.apache.maven.archiva.common.artifact.builder;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import org.apache.maven.artifact.factory.ArtifactFactory;
-
-/**
- * AbstractLayoutArtifactBuilder
- *
- * @author <a href="mailto:joakime@apache.org">Joakim Erdfelt</a>
- * @version $Id$
- */
-public abstract class AbstractLayoutArtifactBuilder
- implements LayoutArtifactBuilder
-{
- /**
- * @plexus.requirement
- */
- protected ArtifactFactory artifactFactory;
-
- /**
- * Constructor used by plexus
- */
- public AbstractLayoutArtifactBuilder()
- {
-
- }
-
- /**
- * Constructor used by manual process.
- *
- * @param artifactFactory the artifact factory to use.
- */
- public AbstractLayoutArtifactBuilder( ArtifactFactory artifactFactory )
- {
- this.artifactFactory = artifactFactory;
- }
-}
diff --git a/archiva-base/archiva-common/src/main/java/org/apache/maven/archiva/common/artifact/builder/DefaultLayoutArtifactBuilder.java b/archiva-base/archiva-common/src/main/java/org/apache/maven/archiva/common/artifact/builder/DefaultLayoutArtifactBuilder.java
deleted file mode 100644
index bfee01508..000000000
--- a/archiva-base/archiva-common/src/main/java/org/apache/maven/archiva/common/artifact/builder/DefaultLayoutArtifactBuilder.java
+++ /dev/null
@@ -1,218 +0,0 @@
-package org.apache.maven.archiva.common.artifact.builder;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import org.apache.maven.artifact.Artifact;
-import org.apache.maven.artifact.factory.ArtifactFactory;
-import org.codehaus.plexus.util.StringUtils;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.StringTokenizer;
-
-/**
- * DefaultLayoutArtifactBuilder - artifact builder for default layout repositories.
- *
- * @author <a href="mailto:brett@apache.org">Brett Porter</a>
- * @author <a href="mailto:joakime@apache.org">Joakim Erdfelt</a>
- * @version $Id$
- *
- * @plexus.component role="org.apache.maven.archiva.common.artifact.builder.LayoutArtifactBuilder"
- * role-hint="default"
- */
-public class DefaultLayoutArtifactBuilder
- extends AbstractLayoutArtifactBuilder
- implements LayoutArtifactBuilder
-{
- public DefaultLayoutArtifactBuilder()
- {
- super();
- }
-
- public DefaultLayoutArtifactBuilder( ArtifactFactory artifactFactory )
- {
- super( artifactFactory );
- }
-
- public Artifact build( String pathToArtifact )
- throws BuilderException
- {
- if( artifactFactory == null )
- {
- throw new IllegalStateException( "Unable to build artifact with a null artifactFactory." );
- }
-
- List pathParts = new ArrayList();
- StringTokenizer st = new StringTokenizer( pathToArtifact, "/\\" );
- while ( st.hasMoreTokens() )
- {
- pathParts.add( st.nextToken() );
- }
-
- Collections.reverse( pathParts );
-
- Artifact artifact;
- if ( pathParts.size() >= 4 )
- {
- // maven 2.x path
-
- // the actual artifact filename.
- String filename = (String) pathParts.remove( 0 );
-
- // the next one is the version.
- String version = (String) pathParts.remove( 0 );
-
- // the next one is the artifactId.
- String artifactId = (String) pathParts.remove( 0 );
-
- // the remaining are the groupId.
- Collections.reverse( pathParts );
- String groupId = StringUtils.join( pathParts.iterator(), "." );
-
- String remainingFilename = filename;
- if ( remainingFilename.startsWith( artifactId + "-" ) )
- {
- remainingFilename = remainingFilename.substring( artifactId.length() + 1 );
-
- String classifier = null;
-
- // TODO: use artifact handler, share with legacy discoverer
- String type;
- if ( remainingFilename.endsWith( ".tar.gz" ) )
- {
- type = "distribution-tgz";
- remainingFilename = remainingFilename
- .substring( 0, remainingFilename.length() - ".tar.gz".length() );
- }
- else if ( remainingFilename.endsWith( ".zip" ) )
- {
- type = "distribution-zip";
- remainingFilename = remainingFilename.substring( 0, remainingFilename.length() - ".zip".length() );
- }
- else if ( remainingFilename.endsWith( "-test-sources.jar" ) )
- {
- type = "java-source";
- classifier = "test-sources";
- remainingFilename = remainingFilename.substring( 0, remainingFilename.length()
- - "-test-sources.jar".length() );
- }
- else if ( remainingFilename.endsWith( "-sources.jar" ) )
- {
- type = "java-source";
- classifier = "sources";
- remainingFilename = remainingFilename.substring( 0, remainingFilename.length()
- - "-sources.jar".length() );
- }
- else
- {
- int index = remainingFilename.lastIndexOf( "." );
- if ( index >= 0 )
- {
- type = remainingFilename.substring( index + 1 );
- remainingFilename = remainingFilename.substring( 0, index );
- }
- else
- {
- throw new BuilderException( "Path filename does not have an extension." );
- }
- }
-
- Artifact result;
- if ( classifier == null )
- {
- result = artifactFactory
- .createArtifact( groupId, artifactId, version, Artifact.SCOPE_RUNTIME, type );
- }
- else
- {
- result = artifactFactory.createArtifactWithClassifier( groupId, artifactId, version, type,
- classifier );
- }
-
- if ( result.isSnapshot() )
- {
- // version is *-SNAPSHOT, filename is *-yyyyMMdd.hhmmss-b
- int classifierIndex = remainingFilename.indexOf( '-', version.length() + 8 );
- if ( classifierIndex >= 0 )
- {
- classifier = remainingFilename.substring( classifierIndex + 1 );
- remainingFilename = remainingFilename.substring( 0, classifierIndex );
- result = artifactFactory.createArtifactWithClassifier( groupId, artifactId, remainingFilename,
- type, classifier );
- }
- else
- {
- result = artifactFactory.createArtifact( groupId, artifactId, remainingFilename,
- Artifact.SCOPE_RUNTIME, type );
- }
-
- // poor encapsulation requires we do this to populate base version
- if ( !result.isSnapshot() )
- {
- throw new BuilderException( "Failed to create a snapshot artifact: " + result );
- }
- else if ( !result.getBaseVersion().equals( version ) )
- {
- throw new BuilderException(
- "Built snapshot artifact base version does not match path version: "
- + result.getBaseVersion() + "; should have been version: "
- + version );
- }
- else
- {
- artifact = result;
- }
- }
- else if ( !remainingFilename.startsWith( version ) )
- {
- throw new BuilderException( "Built artifact version does not match path version" );
- }
- else if ( !remainingFilename.equals( version ) )
- {
- if ( remainingFilename.charAt( version.length() ) == '-' )
- {
- classifier = remainingFilename.substring( version.length() + 1 );
- artifact = artifactFactory.createArtifactWithClassifier( groupId, artifactId, version, type,
- classifier );
- }
- else
- {
- throw new BuilderException( "Path version does not corresspond to an artifact version" );
- }
- }
- else
- {
- artifact = result;
- }
- }
- else
- {
- throw new BuilderException( "Path filename does not correspond to an artifact." );
- }
- }
- else
- {
- throw new BuilderException( "Path is too short to build an artifact from." );
- }
-
- return artifact;
- }
-}
diff --git a/archiva-base/archiva-common/src/main/java/org/apache/maven/archiva/common/artifact/builder/LegacyLayoutArtifactBuilder.java b/archiva-base/archiva-common/src/main/java/org/apache/maven/archiva/common/artifact/builder/LegacyLayoutArtifactBuilder.java
deleted file mode 100644
index e3436e966..000000000
--- a/archiva-base/archiva-common/src/main/java/org/apache/maven/archiva/common/artifact/builder/LegacyLayoutArtifactBuilder.java
+++ /dev/null
@@ -1,303 +0,0 @@
-package org.apache.maven.archiva.common.artifact.builder;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import org.apache.maven.artifact.Artifact;
-import org.apache.maven.artifact.factory.ArtifactFactory;
-
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.StringTokenizer;
-
-/**
- * LegacyLayoutArtifactBuilder
- *
- * @author <a href="mailto:joakime@apache.org">Joakim Erdfelt</a>
- * @version $Id$
- *
- * @plexus.component role="org.apache.maven.archiva.common.artifact.builder.LayoutArtifactBuilder"
- * role-hint="legacy"
- */
-public class LegacyLayoutArtifactBuilder
- extends AbstractLayoutArtifactBuilder
- implements LayoutArtifactBuilder
-{
- public LegacyLayoutArtifactBuilder()
- {
- super();
- }
-
- public LegacyLayoutArtifactBuilder( ArtifactFactory artifactFactory )
- {
- super( artifactFactory );
- }
-
- public Artifact build( String pathToArtifact )
- throws BuilderException
- {
- if( artifactFactory == null )
- {
- throw new IllegalStateException( "Unable to build legacy artifact with a null artifactFactory." );
- }
-
- StringTokenizer tokens = new StringTokenizer( pathToArtifact, "/\\" );
-
- Artifact result;
-
- int numberOfTokens = tokens.countTokens();
-
- if ( numberOfTokens == 3 )
- {
- String groupId = tokens.nextToken();
-
- String type = tokens.nextToken();
-
- if ( type.endsWith( "s" ) )
- {
- type = type.substring( 0, type.length() - 1 );
-
- // contains artifactId, version, classifier, and extension.
- String avceGlob = tokens.nextToken();
-
- //noinspection CollectionDeclaredAsConcreteClass
- LinkedList avceTokenList = new LinkedList();
-
- StringTokenizer avceTokenizer = new StringTokenizer( avceGlob, "-" );
- while ( avceTokenizer.hasMoreTokens() )
- {
- avceTokenList.addLast( avceTokenizer.nextToken() );
- }
-
- String lastAvceToken = (String) avceTokenList.removeLast();
-
- // TODO: share with other discoverer, use artifact handlers instead
- if ( lastAvceToken.endsWith( ".tar.gz" ) )
- {
- type = "distribution-tgz";
-
- lastAvceToken = lastAvceToken.substring( 0, lastAvceToken.length() - ".tar.gz".length() );
-
- avceTokenList.addLast( lastAvceToken );
- }
- else if ( lastAvceToken.endsWith( "sources.jar" ) )
- {
- type = "java-source";
-
- lastAvceToken = lastAvceToken.substring( 0, lastAvceToken.length() - ".jar".length() );
-
- avceTokenList.addLast( lastAvceToken );
- }
- else if ( lastAvceToken.endsWith( "javadoc.jar" ) )
- {
- type = "javadoc.jar";
-
- lastAvceToken = lastAvceToken.substring( 0, lastAvceToken.length() - ".jar".length() );
-
- avceTokenList.addLast( lastAvceToken );
- }
- else if ( lastAvceToken.endsWith( ".zip" ) )
- {
- type = "distribution-zip";
-
- lastAvceToken = lastAvceToken.substring( 0, lastAvceToken.length() - ".zip".length() );
-
- avceTokenList.addLast( lastAvceToken );
- }
- else
- {
- int extPos = lastAvceToken.lastIndexOf( '.' );
-
- if ( extPos > 0 )
- {
- String ext = lastAvceToken.substring( extPos + 1 );
- if ( type.equals( ext ) || "plugin".equals( type ) )
- {
- lastAvceToken = lastAvceToken.substring( 0, extPos );
-
- avceTokenList.addLast( lastAvceToken );
- }
- else
- {
- throw new BuilderException( "Path type does not match the extension" );
- }
- }
- else
- {
- throw new BuilderException( "Path filename does not have an extension" );
- }
- }
-
- // let's discover the version, and whatever's leftover will be either
- // a classifier, or part of the artifactId, depending on position.
- // Since version is at the end, we have to move in from the back.
- Collections.reverse( avceTokenList );
-
- // TODO: this is obscene - surely a better way?
- String validVersionParts = "([Dd][Ee][Vv][_.0-9]*)|" + "([Ss][Nn][Aa][Pp][Ss][Hh][Oo][Tt])|"
- + "([0-9][_.0-9a-zA-Z]*)|" + "([Gg]?[_.0-9ab]*([Pp][Rr][Ee]|[Rr][Cc]|[Gg]|[Mm])[_.0-9]*)|"
- + "([Aa][Ll][Pp][Hh][Aa][_.0-9]*)|" + "([Bb][Ee][Tt][Aa][_.0-9]*)|" + "([Rr][Cc][_.0-9]*)|"
- + "([Tt][Ee][Ss][Tt][_.0-9]*)|" + "([Dd][Ee][Bb][Uu][Gg][_.0-9]*)|"
- + "([Uu][Nn][Oo][Ff][Ff][Ii][Cc][Ii][Aa][Ll][_.0-9]*)|" + "([Cc][Uu][Rr][Rr][Ee][Nn][Tt])|"
- + "([Ll][Aa][Tt][Ee][Ss][Tt])|" + "([Ff][Cc][Ss])|" + "([Rr][Ee][Ll][Ee][Aa][Ss][Ee][_.0-9]*)|"
- + "([Nn][Ii][Gg][Hh][Tt][Ll][Yy])|" + "[Ff][Ii][Nn][Aa][Ll]|" + "([AaBb][_.0-9]*)";
-
- StringBuffer classifierBuffer = new StringBuffer();
- StringBuffer versionBuffer = new StringBuffer();
-
- boolean firstVersionTokenEncountered = false;
- boolean firstToken = true;
-
- int tokensIterated = 0;
- for ( Iterator it = avceTokenList.iterator(); it.hasNext(); )
- {
- String token = (String) it.next();
-
- boolean tokenIsVersionPart = token.matches( validVersionParts );
-
- StringBuffer bufferToUpdate;
-
- // NOTE: logic in code is reversed, since we're peeling off the back
- // Any token after the last versionPart will be in the classifier.
- // Any token UP TO first non-versionPart is part of the version.
- if ( !tokenIsVersionPart )
- {
- if ( firstVersionTokenEncountered )
- {
- //noinspection BreakStatement
- break;
- }
- else
- {
- bufferToUpdate = classifierBuffer;
- }
- }
- else
- {
- firstVersionTokenEncountered = true;
-
- bufferToUpdate = versionBuffer;
- }
-
- if ( firstToken )
- {
- firstToken = false;
- }
- else
- {
- bufferToUpdate.insert( 0, '-' );
- }
-
- bufferToUpdate.insert( 0, token );
-
- tokensIterated++;
- }
-
- // Now, restore the proper ordering so we can build the artifactId.
- Collections.reverse( avceTokenList );
-
- // if we didn't find a version, then punt. Use the last token
- // as the version, and set the classifier empty.
- if ( versionBuffer.length() < 1 )
- {
- if ( avceTokenList.size() > 1 )
- {
- int lastIdx = avceTokenList.size() - 1;
-
- versionBuffer.append( avceTokenList.get( lastIdx ) );
- avceTokenList.remove( lastIdx );
- }
-
- classifierBuffer.setLength( 0 );
- }
- else
- {
- // if everything is kosher, then pop off all the classifier and
- // version tokens, leaving the naked artifact id in the list.
- avceTokenList = new LinkedList( avceTokenList.subList( 0, avceTokenList.size() - tokensIterated ) );
- }
-
- StringBuffer artifactIdBuffer = new StringBuffer();
-
- firstToken = true;
- for ( Iterator it = avceTokenList.iterator(); it.hasNext(); )
- {
- String token = (String) it.next();
-
- if ( firstToken )
- {
- firstToken = false;
- }
- else
- {
- artifactIdBuffer.append( '-' );
- }
-
- artifactIdBuffer.append( token );
- }
-
- String artifactId = artifactIdBuffer.toString();
-
- if ( artifactId.length() > 0 )
- {
- int lastVersionCharIdx = versionBuffer.length() - 1;
- if ( lastVersionCharIdx > -1 && versionBuffer.charAt( lastVersionCharIdx ) == '-' )
- {
- versionBuffer.setLength( lastVersionCharIdx );
- }
-
- String version = versionBuffer.toString();
-
- if ( version.length() > 0 )
- {
- if ( classifierBuffer.length() > 0 )
- {
- result = artifactFactory.createArtifactWithClassifier( groupId, artifactId, version, type,
- classifierBuffer.toString() );
- }
- else
- {
- result = artifactFactory.createArtifact( groupId, artifactId, version,
- Artifact.SCOPE_RUNTIME, type );
- }
- }
- else
- {
- throw new BuilderException( "Path filename version is empty" );
- }
- }
- else
- {
- throw new BuilderException( "Path filename artifactId is empty" );
- }
- }
- else
- {
- throw new BuilderException( "Path artifact type does not corresspond to an artifact type" );
- }
- }
- else
- {
- throw new BuilderException( "Path does not match a legacy repository path for an artifact" );
- }
-
- return result;
- }
-}
diff --git a/archiva-base/archiva-common/src/main/java/org/apache/maven/archiva/common/artifact/managed/ManagedArtifact.java b/archiva-base/archiva-common/src/main/java/org/apache/maven/archiva/common/artifact/managed/ManagedArtifact.java
deleted file mode 100644
index 8e3c67838..000000000
--- a/archiva-base/archiva-common/src/main/java/org/apache/maven/archiva/common/artifact/managed/ManagedArtifact.java
+++ /dev/null
@@ -1,76 +0,0 @@
-package org.apache.maven.archiva.common.artifact.managed;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import org.apache.maven.artifact.Artifact;
-
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * ManagedArtifact
- *
- * @author <a href="mailto:joakime@apache.org">Joakim Erdfelt</a>
- * @version $Id$
- */
-public class ManagedArtifact
-{
- private String repositoryId;
-
- private Artifact artifact;
-
- private String path;
-
- protected Map attached;
-
- public ManagedArtifact( String repoId, Artifact artifact, String path )
- {
- super();
- this.repositoryId = repoId;
- this.artifact = artifact;
- this.path = path;
- this.attached = new HashMap();
- }
-
- public Artifact getArtifact()
- {
- return artifact;
- }
-
- public String getPath()
- {
- return path;
- }
-
- public String getRepositoryId()
- {
- return repositoryId;
- }
-
- public Map getAttached()
- {
- return attached;
- }
-
- public void setAttached( Map attached )
- {
- this.attached = attached;
- }
-}
diff --git a/archiva-base/archiva-common/src/main/java/org/apache/maven/archiva/common/artifact/managed/ManagedArtifactTypes.java b/archiva-base/archiva-common/src/main/java/org/apache/maven/archiva/common/artifact/managed/ManagedArtifactTypes.java
deleted file mode 100644
index b653d160a..000000000
--- a/archiva-base/archiva-common/src/main/java/org/apache/maven/archiva/common/artifact/managed/ManagedArtifactTypes.java
+++ /dev/null
@@ -1,81 +0,0 @@
-package org.apache.maven.archiva.common.artifact.managed;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import org.apache.commons.lang.StringUtils;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * ManagedArtifactTypes - provides place to test an unknown artifact type.
- *
- * @author <a href="mailto:joakime@apache.org">Joakim Erdfelt</a>
- * @version $Id$
- */
-public class ManagedArtifactTypes
-{
- public static final int GENERIC = 0;
-
- public static final int JAVA = 1;
-
- public static final int EJB = 2;
-
- private static List javaArtifacts;
-
- private static List ejbArtifacts;
-
- static
- {
- javaArtifacts = new ArrayList();
- javaArtifacts.add( "jar" );
- javaArtifacts.add( "war" );
- javaArtifacts.add( "sar" );
- javaArtifacts.add( "rar" );
- javaArtifacts.add( "ear" );
-
- ejbArtifacts = new ArrayList();
- ejbArtifacts.add( "ejb" );
- ejbArtifacts.add( "ejb-client" );
- }
-
- public static int whichType( String type )
- {
- if ( StringUtils.isBlank( type ) )
- {
- // TODO: is an empty type even possible?
- return GENERIC;
- }
-
- type = type.toLowerCase();
-
- if ( ejbArtifacts.contains( type ) )
- {
- return EJB;
- }
-
- if ( javaArtifacts.contains( type ) )
- {
- return JAVA;
- }
-
- return GENERIC;
- }
-}
diff --git a/archiva-base/archiva-common/src/main/java/org/apache/maven/archiva/common/artifact/managed/ManagedEjbArtifact.java b/archiva-base/archiva-common/src/main/java/org/apache/maven/archiva/common/artifact/managed/ManagedEjbArtifact.java
deleted file mode 100644
index 1759df2db..000000000
--- a/archiva-base/archiva-common/src/main/java/org/apache/maven/archiva/common/artifact/managed/ManagedEjbArtifact.java
+++ /dev/null
@@ -1,49 +0,0 @@
-package org.apache.maven.archiva.common.artifact.managed;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import org.apache.maven.artifact.Artifact;
-
-/**
- * ManagedEjbArtifact - adds the ability to reference the ejb-client jar too.
- *
- * @author <a href="mailto:joakime@apache.org">Joakim Erdfelt</a>
- * @version $Id$
- */
-public class ManagedEjbArtifact
- extends ManagedJavaArtifact
-{
- public static final String CLIENT = "client";
-
- public ManagedEjbArtifact( String repoId, Artifact artifact, String path )
- {
- super( repoId, artifact, path );
- }
-
- public String getClientPath()
- {
- return (String) super.attached.get( CLIENT );
- }
-
- public void setClientPath( String clientPath )
- {
- super.attached.put( CLIENT, clientPath );
- }
-}
diff --git a/archiva-base/archiva-common/src/main/java/org/apache/maven/archiva/common/artifact/managed/ManagedJavaArtifact.java b/archiva-base/archiva-common/src/main/java/org/apache/maven/archiva/common/artifact/managed/ManagedJavaArtifact.java
deleted file mode 100644
index 203234b06..000000000
--- a/archiva-base/archiva-common/src/main/java/org/apache/maven/archiva/common/artifact/managed/ManagedJavaArtifact.java
+++ /dev/null
@@ -1,62 +0,0 @@
-package org.apache.maven.archiva.common.artifact.managed;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import org.apache.maven.artifact.Artifact;
-
-/**
- * ManagedJavaArtifact - a ManagedArtifact with optional javadoc and source
- * reference jars.
- *
- * @author <a href="mailto:joakime@apache.org">Joakim Erdfelt</a>
- * @version $Id$
- */
-public class ManagedJavaArtifact
- extends ManagedArtifact
-{
- public static final String JAVADOC = "javadoc";
-
- public static final String SOURCES = "sources";
-
- public ManagedJavaArtifact( String repoId, Artifact artifact, String path )
- {
- super( repoId, artifact, path );
- }
-
- public String getJavadocPath()
- {
- return (String) super.attached.get( JAVADOC );
- }
-
- public void setJavadocPath( String javadocPath )
- {
- super.attached.put( JAVADOC, javadocPath );
- }
-
- public String getSourcesPath()
- {
- return (String) super.attached.get( SOURCES );
- }
-
- public void setSourcesPath( String sourcesPath )
- {
- super.attached.put( SOURCES, sourcesPath );
- }
-}
diff --git a/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/version/VersionUtil.java b/archiva-base/archiva-common/src/main/java/org/apache/maven/archiva/common/utils/VersionUtil.java
index c8ce3716f..91111e82c 100644
--- a/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/version/VersionUtil.java
+++ b/archiva-base/archiva-common/src/main/java/org/apache/maven/archiva/common/utils/VersionUtil.java
@@ -1,4 +1,4 @@
-package org.apache.maven.archiva.repository.version;
+package org.apache.maven.archiva.common.utils;
/*
* Licensed to the Apache Software Foundation (ASF) under one
diff --git a/archiva-base/archiva-common/src/test/java/org/apache/maven/archiva/common/AbstractArchivaCommonTestCase.java b/archiva-base/archiva-common/src/test/java/org/apache/maven/archiva/common/AbstractArchivaCommonTestCase.java
deleted file mode 100644
index 4ee9785d0..000000000
--- a/archiva-base/archiva-common/src/test/java/org/apache/maven/archiva/common/AbstractArchivaCommonTestCase.java
+++ /dev/null
@@ -1,146 +0,0 @@
-package org.apache.maven.archiva.common;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import org.apache.maven.artifact.repository.ArtifactRepository;
-import org.apache.maven.artifact.repository.ArtifactRepositoryFactory;
-import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout;
-import org.codehaus.plexus.PlexusTestCase;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * AbstractArchivaCommonTestCase
- *
- * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
- * @version $Id$
- */
-public abstract class AbstractArchivaCommonTestCase
- extends PlexusTestCase
-{
- protected ArtifactRepository createRepository( File basedir, String layout )
- throws Exception
- {
- ArtifactRepositoryFactory factory = (ArtifactRepositoryFactory) lookup( ArtifactRepositoryFactory.ROLE );
-
- ArtifactRepositoryLayout repoLayout = (ArtifactRepositoryLayout) lookup( ArtifactRepositoryLayout.ROLE, layout );
-
- return factory.createArtifactRepository( "discoveryRepo", "file://" + basedir, repoLayout, null, null );
- }
-
- public List getLegacyLayoutArtifactPaths()
- {
- List files = new ArrayList();
-
- files.add( "invalid/jars/1.0/invalid-1.0.jar" );
- files.add( "invalid/jars/invalid-1.0.rar" );
- files.add( "invalid/jars/invalid.jar" );
- files.add( "invalid/invalid-1.0.jar" );
- files.add( "javax.sql/jars/jdbc-2.0.jar" );
- files.add( "org.apache.maven/jars/some-ejb-1.0-client.jar" );
- files.add( "org.apache.maven/jars/testing-1.0.jar" );
- files.add( "org.apache.maven/jars/testing-1.0-sources.jar" );
- files.add( "org.apache.maven/jars/testing-UNKNOWN.jar" );
- files.add( "org.apache.maven/jars/testing-1.0.zip" );
- files.add( "org.apache.maven/jars/testing-1.0-20050611.112233-1.jar" );
- files.add( "org.apache.maven/jars/testing-1.0.tar.gz" );
- files.add( "org.apache.maven.update/jars/test-not-updated-1.0.jar" );
- files.add( "org.apache.maven.update/jars/test-updated-1.0.jar" );
-
- return files;
- }
-
- public List getDefaultLayoutArtifactPaths()
- {
- List files = new ArrayList();
-
- files.add( "invalid/invalid/1.0-20050611.123456-1/invalid-1.0-20050611.123456-1.jar" );
- files.add( "invalid/invalid/1.0-SNAPSHOT/invalid-1.0.jar" );
- files.add( "invalid/invalid/1.0/invalid-1.0b.jar" );
- files.add( "invalid/invalid/1.0/invalid-2.0.jar" );
- files.add( "invalid/invalid-1.0.jar" );
- files.add( "org/apache/maven/test/1.0-SNAPSHOT/wrong-artifactId-1.0-20050611.112233-1.jar" );
- files.add( "org/apache/maven/test/1.0-SNAPSHOT/test-1.0-20050611.112233-1-javadoc.jar" );
- files.add( "org/apache/maven/test/1.0-SNAPSHOT/test-1.0-20050611.112233-1.jar" );
- files.add( "org/apache/maven/A/1.0/A-1.0.war" );
- files.add( "org/apache/maven/A/1.0/A-1.0.pom" );
- files.add( "org/apache/maven/B/2.0/B-2.0.pom" );
- files.add( "org/apache/maven/B/1.0/B-1.0.pom" );
- files.add( "org/apache/maven/some-ejb/1.0/some-ejb-1.0-client.jar" );
- files.add( "org/apache/maven/C/1.0/C-1.0.war" );
- files.add( "org/apache/maven/C/1.0/C-1.0.pom" );
- files.add( "org/apache/maven/update/test-not-updated/1.0/test-not-updated-1.0.pom" );
- files.add( "org/apache/maven/update/test-not-updated/1.0/test-not-updated-1.0.jar" );
- files.add( "org/apache/maven/update/test-updated/1.0/test-updated-1.0.pom" );
- files.add( "org/apache/maven/update/test-updated/1.0/test-updated-1.0.jar" );
- files.add( "org/apache/maven/discovery/1.0/discovery-1.0.pom" );
- files.add( "org/apache/maven/testing/1.0/testing-1.0-test-sources.jar" );
- files.add( "org/apache/maven/testing/1.0/testing-1.0.jar" );
- files.add( "org/apache/maven/testing/1.0/testing-1.0-sources.jar" );
- files.add( "org/apache/maven/testing/1.0/testing-1.0.zip" );
- files.add( "org/apache/maven/testing/1.0/testing-1.0.tar.gz" );
- files.add( "org/apache/maven/samplejar/2.0/samplejar-2.0.pom" );
- files.add( "org/apache/maven/samplejar/2.0/samplejar-2.0.jar" );
- files.add( "org/apache/maven/samplejar/1.0/samplejar-1.0.pom" );
- files.add( "org/apache/maven/samplejar/1.0/samplejar-1.0.jar" );
- files.add( "org/apache/testgroup/discovery/1.0/discovery-1.0.pom" );
- files.add( "javax/sql/jdbc/2.0/jdbc-2.0.jar" );
-
- return files;
- }
-
- public List getDefaultLayoutMetadataPaths()
- {
- List files = new ArrayList();
-
- files.add( "org/apache/maven/some-ejb/1.0/maven-metadata.xml" );
- files.add( "org/apache/maven/update/test-not-updated/maven-metadata.xml" );
- files.add( "org/apache/maven/update/test-updated/maven-metadata.xml" );
- files.add( "org/apache/maven/maven-metadata.xml" );
- files.add( "org/apache/testgroup/discovery/1.0/maven-metadata.xml" );
- files.add( "org/apache/testgroup/discovery/maven-metadata.xml" );
- files.add( "javax/sql/jdbc/2.0/maven-metadata-repository.xml" );
- files.add( "javax/sql/jdbc/maven-metadata-repository.xml" );
- files.add( "javax/sql/maven-metadata-repository.xml" );
- files.add( "javax/maven-metadata.xml" );
-
- return files;
- }
-
- public List getDefaultLayoutModelPaths()
- {
- List files = new ArrayList();
-
- files.add( "org/apache/maven/A/1.0/A-1.0.pom" );
- files.add( "org/apache/maven/B/2.0/B-2.0.pom" );
- files.add( "org/apache/maven/B/1.0/B-1.0.pom" );
- files.add( "org/apache/maven/C/1.0/C-1.0.pom" );
- files.add( "org/apache/maven/update/test-not-updated/1.0/test-not-updated-1.0.pom" );
- files.add( "org/apache/maven/update/test-updated/1.0/test-updated-1.0.pom" );
- files.add( "org/apache/maven/discovery/1.0/discovery-1.0.pom" );
- files.add( "org/apache/maven/samplejar/2.0/samplejar-2.0.pom" );
- files.add( "org/apache/maven/samplejar/1.0/samplejar-1.0.pom" );
- files.add( "org/apache/testgroup/discovery/1.0/discovery-1.0.pom" );
-
- return files;
- }
-}
diff --git a/archiva-base/archiva-common/src/test/java/org/apache/maven/archiva/common/AllTests.java b/archiva-base/archiva-common/src/test/java/org/apache/maven/archiva/common/AllTests.java
index b6bde475a..58848a134 100644
--- a/archiva-base/archiva-common/src/test/java/org/apache/maven/archiva/common/AllTests.java
+++ b/archiva-base/archiva-common/src/test/java/org/apache/maven/archiva/common/AllTests.java
@@ -35,7 +35,6 @@ public class AllTests
{
TestSuite suite = new TestSuite( "Test for org.apache.maven.archiva.common" );
//$JUnit-BEGIN$
- suite.addTest( org.apache.maven.archiva.common.artifact.builder.AllTests.suite() );
suite.addTest( org.apache.maven.archiva.common.utils.AllTests.suite() );
//$JUnit-END$
return suite;
diff --git a/archiva-base/archiva-common/src/test/java/org/apache/maven/archiva/common/artifact/builder/AbstractLayoutArtifactBuilderTestCase.java b/archiva-base/archiva-common/src/test/java/org/apache/maven/archiva/common/artifact/builder/AbstractLayoutArtifactBuilderTestCase.java
deleted file mode 100644
index 9d9b55df0..000000000
--- a/archiva-base/archiva-common/src/test/java/org/apache/maven/archiva/common/artifact/builder/AbstractLayoutArtifactBuilderTestCase.java
+++ /dev/null
@@ -1,51 +0,0 @@
-package org.apache.maven.archiva.common.artifact.builder;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import org.apache.commons.lang.StringUtils;
-import org.apache.maven.artifact.Artifact;
-import org.codehaus.plexus.PlexusTestCase;
-
-/**
- * AbstractLayoutArtifactBuilderTestCase
- *
- * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
- * @version $Id$
- */
-public abstract class AbstractLayoutArtifactBuilderTestCase
-extends PlexusTestCase
-{
-
- protected void assertArtifact( String groupId, String artifactId, String version, String type, String classifier, Artifact artifact )
- {
- assertNotNull( "Artifact cannot be null.", artifact );
-
- assertEquals( "Artifact groupId", groupId, artifact.getGroupId() );
- assertEquals( "Artifact artifactId", artifactId, artifact.getArtifactId() );
- assertEquals( "Artifact version", version, artifact.getVersion() );
- assertEquals( "Artifact type", type, artifact.getType() );
-
- if ( StringUtils.isNotBlank( classifier ) )
- {
- assertEquals( "Artifact classifier", classifier, artifact.getClassifier() );
- }
- }
-
-}
diff --git a/archiva-base/archiva-common/src/test/java/org/apache/maven/archiva/common/artifact/builder/DefaultLayoutArtifactBuilderTest.java b/archiva-base/archiva-common/src/test/java/org/apache/maven/archiva/common/artifact/builder/DefaultLayoutArtifactBuilderTest.java
deleted file mode 100644
index 954a5bb68..000000000
--- a/archiva-base/archiva-common/src/test/java/org/apache/maven/archiva/common/artifact/builder/DefaultLayoutArtifactBuilderTest.java
+++ /dev/null
@@ -1,206 +0,0 @@
-package org.apache.maven.archiva.common.artifact.builder;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-/**
- * DefaultLayoutArtifactBuilderTest
- *
- * @author <a href="mailto:brett@apache.org">Brett Porter</a>
- * @author <a href="mailto:joakime@apache.org">Joakim Erdfelt</a>
- * @version $Id$
- */
-public class DefaultLayoutArtifactBuilderTest
- extends AbstractLayoutArtifactBuilderTestCase
-{
- LayoutArtifactBuilder builder;
-
- protected void setUp()
- throws Exception
- {
- super.setUp();
-
- builder = (LayoutArtifactBuilder) lookup( LayoutArtifactBuilder.class.getName(), "default" );
- assertNotNull( builder );
- }
-
- protected void tearDown()
- throws Exception
- {
- if ( builder != null )
- {
- release( builder );
- }
- super.tearDown();
- }
-
- public void testPathDistributionArtifacts()
- throws BuilderException
- {
- assertArtifact( "org.apache.maven", "testing", "1.0", "distribution-tgz", null, builder
- .build( "org/apache/maven/testing/1.0/testing-1.0.tar.gz" ) );
-
- assertArtifact( "org.apache.maven", "testing", "1.0", "distribution-zip", null, builder
- .build( "org/apache/maven/testing/1.0/testing-1.0.zip" ) );
- }
-
- public void testPathNormal()
- throws BuilderException
- {
- assertArtifact( "org.apache.maven.wagon", "wagon", "1.0", "jar", null, builder
- .build( "/org/apache/maven/wagon/wagon/1.0/wagon-1.0.jar" ) );
-
- assertArtifact( "org.apache.maven.wagon", "wagon", "1.0", "jar", null, builder
- .build( "org/apache/maven/wagon/wagon/1.0/wagon-1.0.jar" ) );
-
- assertArtifact( "javax.sql", "jdbc", "2.0", "jar", null, builder.build( "javax/sql/jdbc/2.0/jdbc-2.0.jar" ) );
-
- }
-
- public void testPathSnapshots()
- throws BuilderException
- {
- assertArtifact( "org.apache.maven", "test", "1.0-SNAPSHOT", "jar", null, builder
- .build( "org/apache/maven/test/1.0-SNAPSHOT/test-1.0-SNAPSHOT.jar" ) );
-
- assertArtifact( "org.apache.maven", "test", "1.0-20050611.112233-1", "jar", null, builder
- .build( "org/apache/maven/test/1.0-SNAPSHOT/test-1.0-20050611.112233-1.jar" ) );
- }
-
- public void testPathSnapshotWithClassifier()
- throws BuilderException
- {
- assertArtifact( "org.apache.maven", "test", "1.0-20050611.112233-1", "jar", "javadoc", builder
- .build( "org/apache/maven/test/1.0-SNAPSHOT/test-1.0-20050611.112233-1-javadoc.jar" ) );
- }
-
- public void testPathWithClassifier()
- throws BuilderException
- {
- assertArtifact( "org.apache.maven", "some-ejb", "1.0", "jar", "client", builder
- .build( "org/apache/maven/some-ejb/1.0/some-ejb-1.0-client.jar" ) );
- }
-
- public void testPathWithJavaSourceInclusion()
- throws BuilderException
- {
- assertArtifact( "org.apache.maven", "testing", "1.0", "java-source", "sources", builder
- .build( "org/apache/maven/testing/1.0/testing-1.0-sources.jar" ) );
- }
-
- public void testProblemMissingType()
- {
- try
- {
- builder.build( "invalid/invalid/1/invalid-1" );
- fail( "Should have detected missing type." );
- }
- catch ( BuilderException e )
- {
- /* expected path */
- assertEquals( "Path filename does not have an extension.", e.getMessage() );
- }
- }
-
- public void testProblemNonSnapshotInSnapshotDir()
- {
- try
- {
- builder.build( "invalid/invalid/1.0-SNAPSHOT/invalid-1.0.jar" );
- fail( "Non Snapshot artifact inside of an Snapshot dir is invalid." );
- }
- catch ( BuilderException e )
- {
- /* expected path */
- assertEquals( "Failed to create a snapshot artifact: invalid:invalid:jar:1.0:runtime", e.getMessage() );
- }
- }
-
- public void testProblemPathTooShort()
- {
- try
- {
- builder.build( "invalid/invalid-1.0.jar" );
- fail( "Should have detected that path is too short." );
- }
- catch ( BuilderException e )
- {
- /* expected path */
- assertEquals( "Path is too short to build an artifact from.", e.getMessage() );
- }
- }
-
- public void testProblemTimestampSnapshotNotInSnapshotDir()
- {
- try
- {
- builder.build( "invalid/invalid/1.0-20050611.123456-1/invalid-1.0-20050611.123456-1.jar" );
- fail( "Timestamped Snapshot artifact not inside of an Snapshot dir is invalid." );
- }
- catch ( BuilderException e )
- {
- /* expected path */
- // TODO: Is this really the right thing to do for this kind of artifact??
- assertEquals( "Built snapshot artifact base version does not match path version: 1.0-SNAPSHOT; "
- + "should have been version: 1.0-20050611.123456-1", e.getMessage() );
- }
- }
-
- public void testProblemVersionPathMismatch()
- {
- try
- {
- builder.build( "invalid/invalid/1.0/invalid-2.0.jar" );
- fail( "Should have detected version mismatch between path and artifact." );
- }
- catch ( BuilderException e )
- {
- /* expected path */
- assertEquals( "Built artifact version does not match path version", e.getMessage() );
- }
- }
-
- public void testProblemVersionPathMismatchAlt()
- {
- try
- {
- builder.build( "invalid/invalid/1.0/invalid-1.0b.jar" );
- fail( "Should have version mismatch between directory and artifact." );
- }
- catch ( BuilderException e )
- {
- /* expected path */
- assertEquals( "Path version does not corresspond to an artifact version", e.getMessage() );
- }
- }
-
- public void testProblemWrongArtifactId()
- {
- try
- {
- builder.build( "org/apache/maven/test/1.0-SNAPSHOT/wrong-artifactId-1.0-20050611.112233-1.jar" );
- fail( "Should have detected wrong artifact Id." );
- }
- catch ( BuilderException e )
- {
- /* expected path */
- assertEquals( "Path filename does not correspond to an artifact.", e.getMessage() );
- }
- }
-}
diff --git a/archiva-base/archiva-common/src/test/java/org/apache/maven/archiva/common/artifact/builder/LegacyLayoutArtifactBuilderTest.java b/archiva-base/archiva-common/src/test/java/org/apache/maven/archiva/common/artifact/builder/LegacyLayoutArtifactBuilderTest.java
deleted file mode 100644
index 2fdae4a14..000000000
--- a/archiva-base/archiva-common/src/test/java/org/apache/maven/archiva/common/artifact/builder/LegacyLayoutArtifactBuilderTest.java
+++ /dev/null
@@ -1,160 +0,0 @@
-package org.apache.maven.archiva.common.artifact.builder;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import org.apache.maven.artifact.Artifact;
-import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
-
-/**
- * LegacyLayoutArtifactBuilderTest
- *
- * @author <a href="mailto:joakime@apache.org">Joakim Erdfelt</a>
- * @version $Id$
- */
-public class LegacyLayoutArtifactBuilderTest
- extends AbstractLayoutArtifactBuilderTestCase
-{
- LayoutArtifactBuilder builder;
-
- protected void setUp()
- throws Exception
- {
- super.setUp();
-
- builder = (LayoutArtifactBuilder) lookup( LayoutArtifactBuilder.class.getName(), "legacy" );
- assertNotNull( builder );
- }
-
- protected void tearDown()
- throws Exception
- {
- if ( builder != null )
- {
- release( builder );
- }
- super.tearDown();
- }
-
- public void testPathNormal()
- throws BuilderException
- {
- Artifact artifact = builder.build( "javax.sql/jars/jdbc-2.0.jar" );
-
- assertArtifact( "javax.sql", "jdbc", "2.0", "jar", null, artifact );
- }
-
- public void testPathFinal()
- throws BuilderException
- {
- Artifact artifact = builder.build( "org.apache.maven.test/jars/maven-model-1.0-final-20060606.jar" );
-
- assertArtifact( "org.apache.maven.test", "maven-model", "1.0-final-20060606", "jar", null, artifact );
- }
-
- public void testPathSnapshot()
- throws BuilderException
- {
- Artifact artifact = builder.build( "org.apache.maven.test/jars/maven-model-1.0-SNAPSHOT.jar" );
-
- assertArtifact( "org.apache.maven.test", "maven-model", "1.0-SNAPSHOT", "jar", null, artifact );
- }
-
- public void testPathJavadoc()
- throws BuilderException
- {
- Artifact artifact = builder.build( "javax.sql/javadoc.jars/jdbc-2.0-javadoc.jar" );
-
- assertArtifact( "javax.sql", "jdbc", "2.0", "javadoc.jar", "javadoc", artifact );
- }
-
- public void testPathSources()
- throws BuilderException
- {
- Artifact artifact = builder.build( "javax.sql/java-sources/jdbc-2.0-sources.jar" );
-
- assertArtifact( "javax.sql", "jdbc", "2.0", "java-source", "sources", artifact );
- }
-
- public void testPathPlugin()
- throws BuilderException
- {
- Artifact artifact = builder.build( "maven/plugins/maven-test-plugin-1.8.jar" );
-
- assertArtifact( "maven", "maven-test-plugin", "1.8", "plugin", null, artifact );
- }
-
- public void testProblemNoType()
- {
- try
- {
- builder.build( "invalid/invalid/1/invalid-1" );
-
- fail( "Should have detected no type." );
- }
- catch ( BuilderException e )
- {
- /* expected path */
- assertEquals( "Path does not match a legacy repository path for an artifact", e.getMessage() );
- }
- }
-
- public void testProblemWrongArtifactPackaging()
- throws ComponentLookupException
- {
- try
- {
- builder.build( "org.apache.maven.test/jars/artifactId-1.0.jar.md5" );
-
- fail( "Should have detected wrong package extension." );
- }
- catch ( BuilderException e )
- {
- /* expected path */
- assertEquals( "Path type does not match the extension", e.getMessage() );
- }
- }
-
- public void testProblemNoArtifactId()
- {
- try
- {
- builder.build( "groupId/jars/-1.0.jar" );
-
- fail( "Should have detected artifactId is missing" );
- }
- catch ( BuilderException e )
- {
- /* expected path */
- assertEquals( "Path filename artifactId is empty", e.getMessage() );
- }
-
- try
- {
- builder.build( "groupId/jars/1.0.jar" );
-
- fail( "Should have detected artifactId is missing" );
- }
- catch ( BuilderException e )
- {
- /* expected path */
- assertEquals( "Path filename artifactId is empty", e.getMessage() );
- }
- }
-}
diff --git a/archiva-base/archiva-configuration/src/main/mdo/configuration.mdo b/archiva-base/archiva-configuration/src/main/mdo/configuration.mdo
index 75ba48c53..5bf26e4ba 100644
--- a/archiva-base/archiva-configuration/src/main/mdo/configuration.mdo
+++ b/archiva-base/archiva-configuration/src/main/mdo/configuration.mdo
@@ -75,17 +75,80 @@
</description>
</field>
<field>
- <name>fileProcessors</name>
+ <name>repositoryScanning</name>
<version>1.0.0+</version>
<association>
- <type>FileProcessor</type>
- <multiplicity>*</multiplicity>
+ <type>RepositoryScanningConfiguration</type>
+ <multiplicity>1</multiplicity>
</association>
<description>
- The file processors setup.
+ The repository scanning configuration.
</description>
</field>
- </fields>
+ <field>
+ <name>databaseScanning</name>
+ <version>1.0.0+</version>
+ <association>
+ <type>DatabaseScanningConfiguration</type>
+ <multiplicity>1</multiplicity>
+ </association>
+ <description>
+ The database scanning configuration.
+ </description>
+ </field>
+ </fields>
+ <codeSegments>
+ <codeSegment>
+ <version>1.0.0+</version>
+ <code><![CDATA[
+ /**
+ * Find {@link RepositoryConfiguration} with specified Id.
+ *
+ * @param id the id of the repository to find.
+ * @return the repository configuration.
+ */
+ public RepositoryConfiguration findRepositoryById( String id )
+ {
+ // null id = null repo config.
+ if ( id == null )
+ {
+ return null;
+ }
+
+ // empty id = null repo config.
+ if ( id.trim().length() <= 0 )
+ {
+ return null;
+ }
+
+ // null repository list = null repo config.
+ if ( getRepositories() == null )
+ {
+ return null;
+ }
+
+ // empty repository list == null repo config.
+ if ( getRepositories().isEmpty() )
+ {
+ return null;
+ }
+
+ // find the repository
+ java.util.Iterator it = getRepositories().iterator();
+ while ( it.hasNext() )
+ {
+ RepositoryConfiguration repoConfig = (RepositoryConfiguration) it.next();
+ if ( id.equals( repoConfig.getId() ) )
+ {
+ return repoConfig;
+ }
+ }
+
+ return null;
+ }
+ ]]></code>
+ </codeSegment>
+ </codeSegments>
</class>
<!--
@@ -162,6 +225,14 @@
<defaultValue>true</defaultValue>
</field>
<field>
+ <name>indexDir</name>
+ <version>1.0.0+</version>
+ <type>String</type>
+ <description>
+ The directory for the indexes of this repository.
+ </description>
+ </field>
+ <field>
<name>refreshCronExpression</name>
<version>1.0.0+</version>
<type>String</type>
@@ -426,28 +497,32 @@
</class>
<!--
- _____ _ _ ____
- | ___(_) | ___| _ \ _ __ ___ ___ ___ ___ ___ ___ _ __
- | |_ | | |/ _ \ |_) | '__/ _ \ / __/ _ \/ __/ __|/ _ \| '__|
- | _| | | | __/ __/| | | (_) | (_| __/\__ \__ \ (_) | |
- |_| |_|_|\___|_| |_| \___/ \___\___||___/___/\___/|_|
+ ____ _
+ / ___| ___ __ _ _ __ _ __ (_)_ __ __ _
+ \___ \ / __/ _` | '_ \| '_ \| | '_ \ / _` |
+ ___) | (_| (_| | | | | | | | | | | | (_| |
+ |____/ \___\__,_|_| |_|_| |_|_|_| |_|\__, |
+ |___/
-->
<class>
- <name>FileProcessor</name>
+ <name>RepositoryScanningConfiguration</name>
<version>1.0.0+</version>
<fields>
<field>
- <name>id</name>
+ <name>fileTypes</name>
<version>1.0.0+</version>
<required>true</required>
- <type>String</type>
+ <association>
+ <type>FileType</type>
+ <multiplicity>*</multiplicity>
+ </association>
<description>
- The ID for this file processor
+ The FileTypes for the repository scanning configuration.
</description>
</field>
<field>
- <name>patterns</name>
+ <name>goodConsumers</name>
<version>1.0.0+</version>
<required>true</required>
<association>
@@ -455,11 +530,11 @@
<multiplicity>*</multiplicity>
</association>
<description>
- The list of patterns for this processor.
+ The list of consumers for good content.
</description>
</field>
<field>
- <name>consumers</name>
+ <name>badConsumers</name>
<version>1.0.0+</version>
<required>true</required>
<association>
@@ -471,6 +546,111 @@
</description>
</field>
</fields>
+ <codeSegments>
+ <codeSegment>
+ <version>1.0.0+</version>
+ <code><![CDATA[
+ /**
+ * Get a specific file type by ID.
+ *
+ * @param id the id of the filetype to get. (null or empty will result in null return)
+ * @return the {@link FileType} or null if the id is not found.
+ */
+ public FileType getFileTypeById( String id )
+ {
+ if ( id == null )
+ {
+ return null;
+ }
+
+ if ( id.trim().length() <= 0 )
+ {
+ return null;
+ }
+
+ java.util.List types = getFileTypes();
+ if ( types == null )
+ {
+ return null;
+ }
+
+ java.util.Iterator it = types.iterator();
+ while ( it.hasNext() )
+ {
+ FileType filetype = (FileType) it.next();
+ if ( id.equals( filetype.getId() ) )
+ {
+ return filetype;
+ }
+ }
+
+ return null;
+ }
+ ]]></code>
+ </codeSegment>
+ </codeSegments>
+ </class>
+ <class>
+ <name>FileType</name>
+ <version>1.0.0+</version>
+ <description>The FileType object</description>
+ <fields>
+ <field>
+ <name>id</name>
+ <version>1.0.0+</version>
+ <required>true</required>
+ <type>String</type>
+ </field>
+ <field>
+ <name>patterns</name>
+ <version>1.0.0+</version>
+ <required>true</required>
+ <association>
+ <type>String</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
+ </fields>
+ </class>
+ <class>
+ <name>DatabaseScanningConfiguration</name>
+ <version>1.0.0+</version>
+ <description>
+ The scanning configuration for unprocessed ArchivaArtifact database objects.
+ </description>
+ <fields>
+ <field>
+ <name>cronExpression</name>
+ <version>1.0.0+</version>
+ <type>String</type>
+ <description>When to run the database scanning mechanism. Default is every hour on the hour.</description>
+ <defaultValue>0 0 * * * ?</defaultValue>
+ </field>
+ <field>
+ <name>unprocessedConsumers</name>
+ <version>1.0.0+</version>
+ <required>true</required>
+ <association>
+ <type>String</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ <description>
+ The list of consumers for the unprocessed ArchivaArtifact database objects.
+ </description>
+ </field>
+ <field>
+ <name>processedConsumers</name>
+ <version>1.0.0+</version>
+ <required>true</required>
+ <association>
+ <type>String</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ <description>
+ The list of consumers for previously processed ArchivaArtifact database objects.
+ </description>
+ </field>
+ </fields>
</class>
</classes>
diff --git a/archiva-base/archiva-configuration/src/main/resources/org/apache/maven/archiva/configuration/default-archiva.xml b/archiva-base/archiva-configuration/src/main/resources/org/apache/maven/archiva/configuration/default-archiva.xml
index 4c48beb5d..ba150b058 100644
--- a/archiva-base/archiva-configuration/src/main/resources/org/apache/maven/archiva/configuration/default-archiva.xml
+++ b/archiva-base/archiva-configuration/src/main/resources/org/apache/maven/archiva/configuration/default-archiva.xml
@@ -40,6 +40,7 @@
<indexed>false</indexed>
</repository>
</repositories>
+
<proxyConnectors>
<proxyConnector>
<sourceRepoId>internal</sourceRepoId>
@@ -57,163 +58,106 @@
<releasePolicy>never</releasePolicy>
<failurePolicy>not-found</failurePolicy>
<whiteListPatterns>
- <whileListPattern>javax/**</whileListPattern>
+ <whiteListPattern>javax/**</whiteListPattern>
</whiteListPatterns>
</proxyConnector>
</proxyConnectors>
+
<networkProxies>
+ <networkProxy>
+ <id>example</id>
+ <protocol>http</protocol>
+ <host>proxy.mycompany.com</host>
+ <port>8080</port>
+ <username>myself</username>
+ <password>mypass</password>
+ </networkProxy>
</networkProxies>
- <fileProcessors>
- <fileProcessor>
- <id>artifacts</id>
- <patterns>
- <pattern>**/*.pom</pattern>
- <pattern>**/*.jar</pattern>
- <pattern>**/*.ear</pattern>
- <pattern>**/*.war</pattern>
- <pattern>**/*.car</pattern>
- <pattern>**/*.sar</pattern>
- <pattern>**/*.mar</pattern>
- <pattern>**/*.rar</pattern>
- <pattern>**/*.dtd</pattern>
- <pattern>**/*.tld</pattern>
- <pattern>**/*.tar.gz</pattern>
- <pattern>**/*.tar.bz2</pattern>
- <pattern>**/*.zip</pattern>
- </patterns>
- <consumers>
- <consumer>artifact-to-db</consumer>
- <consumer>artifact-to-lucene</consumer>
- <consumer>artifact-create-missing-checksums</consumer>
- </consumers>
- </fileProcessor>
- <fileProcessor>
- <id>projects</id>
- <patterns>
- <pattern>**/*.pom</pattern>
- </patterns>
- <consumers>
- <consumer>project-to-db</consumer>
- </consumers>
- </fileProcessor>
- <fileProcessor>
- <id>repository-metadata</id>
- <patterns>
- <pattern>**/maven-metadata.xml</pattern>
- </patterns>
- <consumers>
- <consumer>repository-metadata-to-db</consumer>
- <consumer>repository-metadata-version-mismatch</consumer>
- </consumers>
- </fileProcessor>
- <fileProcessor>
- <id>checksums</id>
- <patterns>
- <pattern>**/*.sha1</pattern>
- <pattern>**/*.md5</pattern>
- </patterns>
- <consumers>
- <consumer>checksum-validate</consumer>
- </consumers>
- </fileProcessor>
- <fileProcessor>
- <id>signatures</id>
- <patterns>
- <pattern>**/*.asc</pattern>
- </patterns>
- <consumers>
- <consumer>signature-validate</consumer>
- </consumers>
- </fileProcessor>
- <fileProcessor>
- <id>archives</id>
- <patterns>
- <pattern>**/*.jar</pattern>
- <pattern>**/*.ear</pattern>
- <pattern>**/*.war</pattern>
- <pattern>**/*.car</pattern>
- <pattern>**/*.sar</pattern>
- <pattern>**/*.mar</pattern>
- <pattern>**/*.rar</pattern>
- <pattern>**/*.tar.gz</pattern>
- <pattern>**/*.tar.bz2</pattern>
- <pattern>**/*.zip</pattern>
- <pattern>**/*.nbm</pattern>
- </patterns>
- <consumers>
- <consumer>archive-toc-to-lucene</consumer>
- </consumers>
- </fileProcessor>
- <fileProcessor>
- <id>bytecode</id>
- <patterns>
- <pattern>**/*.jar</pattern>
- <pattern>**/*.war</pattern>
- <pattern>**/*.car</pattern>
- <pattern>**/*.sar</pattern>
- <pattern>**/*.mar</pattern>
- <pattern>**/*.rar</pattern>
- </patterns>
- <consumers>
- <consumer>bytecode-to-db</consumer>
- <consumer>bytecode-to-lucene</consumer>
- </consumers>
- </fileProcessor>
- <fileProcessor>
- <id>xmls</id>
- <patterns>
- <pattern>**/*.pom</pattern>
- <pattern>**/*.xml</pattern>
- <pattern>**/*.xsd</pattern>
- </patterns>
- <consumers>
- <consumer>xml-to-lucene</consumer>
- </consumers>
- </fileProcessor>
- <fileProcessor>
- <id>text</id>
- <patterns>
- <pattern>**/*.txt</pattern>
- <pattern>**/*.TXT</pattern>
- <pattern>**/*.block</pattern>
- <pattern>**/*.config</pattern>
- </patterns>
- </fileProcessor>
- <fileProcessor>
- <id>ignored</id>
- <patterns>
- <pattern>**/.htaccess</pattern>
- <pattern>**/KEYS</pattern>
- <pattern>**/*.rb</pattern>
- <pattern>**/*.sh</pattern>
- <pattern>**/.svn/**</pattern>
- <pattern>**/.DAV/**</pattern>
- </patterns>
- <consumers>
- <consumer>ignored</consumer>
- </consumers>
- </fileProcessor>
- <fileProcessor>
- <id>auto-remove</id>
- <patterns>
- <pattern>**/*.bak</pattern>
- <pattern>**/*~</pattern>
- <pattern>**/*-</pattern>
- </patterns>
- <consumers>
- <consumer>auto-remove</consumer>
- </consumers>
- </fileProcessor>
- <fileProcessor>
- <id>auto-rename</id>
- <patterns>
- <pattern>**/*.distribution-tgz</pattern>
- <pattern>**/*.distribution-zip</pattern>
- <pattern>**/*.plugin</pattern>
- </patterns>
- <consumers>
- <consumer>auto-rename</consumer>
- </consumers>
- </fileProcessor>
- </fileProcessors>
+
+ <repositoryScanning>
+ <fileTypes>
+ <fileType>
+ <id>artifacts</id>
+ <patterns>
+ <pattern>**/*.pom</pattern>
+ <pattern>**/*.jar</pattern>
+ <pattern>**/*.ear</pattern>
+ <pattern>**/*.war</pattern>
+ <pattern>**/*.car</pattern>
+ <pattern>**/*.sar</pattern>
+ <pattern>**/*.mar</pattern>
+ <pattern>**/*.rar</pattern>
+ <pattern>**/*.dtd</pattern>
+ <pattern>**/*.tld</pattern>
+ <pattern>**/*.tar.gz</pattern>
+ <pattern>**/*.tar.bz2</pattern>
+ <pattern>**/*.zip</pattern>
+ </patterns>
+ </fileType>
+ <fileType>
+ <id>indexable-content</id>
+ <patterns>
+ <pattern>**/*.txt</pattern>
+ <pattern>**/*.TXT</pattern>
+ <pattern>**/*.block</pattern>
+ <pattern>**/*.config</pattern>
+ <pattern>**/*.pom</pattern>
+ <pattern>**/*.xml</pattern>
+ <pattern>**/*.xsd</pattern>
+ <pattern>**/*.dtd</pattern>
+ <pattern>**/*.tld</pattern>
+ </patterns>
+ </fileType>
+ <fileType>
+ <id>auto-remove</id>
+ <patterns>
+ <pattern>**/*.bak</pattern>
+ <pattern>**/*~</pattern>
+ <pattern>**/*-</pattern>
+ </patterns>
+ </fileType>
+ <fileType>
+ <id>ignored</id>
+ <patterns>
+ <pattern>**/.htaccess</pattern>
+ <pattern>**/KEYS</pattern>
+ <pattern>**/*.rb</pattern>
+ <pattern>**/*.sh</pattern>
+ <pattern>**/.svn/**</pattern>
+ <pattern>**/.DAV/**</pattern>
+ </patterns>
+ </fileType>
+ </fileTypes>
+ <goodConsumers>
+ <goodConsumer>update-db-artifact</goodConsumer>
+ <goodConsumer>create-missing-checksums</goodConsumer>
+ <goodConsumer>update-db-repository-metadata</goodConsumer>
+ <goodConsumer>validate-checksum</goodConsumer>
+ <goodConsumer>validate-signature</goodConsumer>
+ <goodConsumer>index-content</goodConsumer>
+ <goodConsumer>auto-remove</goodConsumer>
+ <goodConsumer>auto-rename</goodConsumer>
+ </goodConsumers>
+ <badConsumers>
+ <badConsumer>update-db-bad-content</badConsumer>
+ </badConsumers>
+ </repositoryScanning>
+
+ <databaseScanning>
+ <cronExpression>0 0 * * ?</cronExpression>
+ <unprocessedConsumers>
+ <unprocessedConsumer>index-artifact</unprocessedConsumer>
+ <unprocessedConsumer>update-db-project</unprocessedConsumer>
+ <unprocessedConsumer>validate-repository-metadata</unprocessedConsumer>
+ <unprocessedConsumer>index-archive-toc</unprocessedConsumer>
+ <unprocessedConsumer>update-db-bytecode-stats</unprocessedConsumer>
+ <unprocessedConsumer>index-public-methods</unprocessedConsumer>
+ </unprocessedConsumers>
+ <processedConsumers>
+ <processedConsumer>not-present-remove-db-artifact</processedConsumer>
+ <processedConsumer>not-present-remove-db-project</processedConsumer>
+ <processedConsumer>not-present-remove-indexed</processedConsumer>
+ </processedConsumers>
+ </databaseScanning>
+
</configuration>
diff --git a/archiva-base/archiva-configuration/src/test/conf/repository-manager.xml b/archiva-base/archiva-configuration/src/test/conf/repository-manager.xml
index 44e7fc155..07e9f969b 100644
--- a/archiva-base/archiva-configuration/src/test/conf/repository-manager.xml
+++ b/archiva-base/archiva-configuration/src/test/conf/repository-manager.xml
@@ -59,6 +59,7 @@
<indexed>false</indexed>
</repository>
</repositories>
+
<proxyConnectors>
<proxyConnector>
<sourceRepoId>internal</sourceRepoId>
@@ -76,163 +77,106 @@
<releasePolicy>never</releasePolicy>
<failurePolicy>not-found</failurePolicy>
<whiteListPatterns>
- <whileListPattern>javax/**</whileListPattern>
+ <whiteListPattern>javax/**</whiteListPattern>
</whiteListPatterns>
</proxyConnector>
</proxyConnectors>
+
<networkProxies>
+ <networkProxy>
+ <id>example</id>
+ <protocol>http</protocol>
+ <host>proxy.mycompany.com</host>
+ <port>8080</port>
+ <username>myself</username>
+ <password>mypass</password>
+ </networkProxy>
</networkProxies>
- <fileProcessors>
- <fileProcessor>
- <id>artifacts</id>
- <patterns>
- <pattern>**/*.pom</pattern>
- <pattern>**/*.jar</pattern>
- <pattern>**/*.ear</pattern>
- <pattern>**/*.war</pattern>
- <pattern>**/*.car</pattern>
- <pattern>**/*.sar</pattern>
- <pattern>**/*.mar</pattern>
- <pattern>**/*.rar</pattern>
- <pattern>**/*.dtd</pattern>
- <pattern>**/*.tld</pattern>
- <pattern>**/*.tar.gz</pattern>
- <pattern>**/*.tar.bz2</pattern>
- <pattern>**/*.zip</pattern>
- </patterns>
- <consumers>
- <consumer>artifact-to-db</consumer>
- <consumer>artifact-to-lucene</consumer>
- <consumer>artifact-create-missing-checksums</consumer>
- </consumers>
- </fileProcessor>
- <fileProcessor>
- <id>projects</id>
- <patterns>
- <pattern>**/*.pom</pattern>
- </patterns>
- <consumers>
- <consumer>project-to-db</consumer>
- </consumers>
- </fileProcessor>
- <fileProcessor>
- <id>repository-metadata</id>
- <patterns>
- <pattern>**/maven-metadata.xml</pattern>
- </patterns>
- <consumers>
- <consumer>repository-metadata-to-db</consumer>
- <consumer>repository-metadata-version-mismatch</consumer>
- </consumers>
- </fileProcessor>
- <fileProcessor>
- <id>checksums</id>
- <patterns>
- <pattern>**/*.sha1</pattern>
- <pattern>**/*.md5</pattern>
- </patterns>
- <consumers>
- <consumer>checksum-validate</consumer>
- </consumers>
- </fileProcessor>
- <fileProcessor>
- <id>signatures</id>
- <patterns>
- <pattern>**/*.asc</pattern>
- </patterns>
- <consumers>
- <consumer>signature-validate</consumer>
- </consumers>
- </fileProcessor>
- <fileProcessor>
- <id>archives</id>
- <patterns>
- <pattern>**/*.jar</pattern>
- <pattern>**/*.ear</pattern>
- <pattern>**/*.war</pattern>
- <pattern>**/*.car</pattern>
- <pattern>**/*.sar</pattern>
- <pattern>**/*.mar</pattern>
- <pattern>**/*.rar</pattern>
- <pattern>**/*.tar.gz</pattern>
- <pattern>**/*.tar.bz2</pattern>
- <pattern>**/*.zip</pattern>
- <pattern>**/*.nbm</pattern>
- </patterns>
- <consumers>
- <consumer>archive-toc-to-lucene</consumer>
- </consumers>
- </fileProcessor>
- <fileProcessor>
- <id>bytecode</id>
- <patterns>
- <pattern>**/*.jar</pattern>
- <pattern>**/*.war</pattern>
- <pattern>**/*.car</pattern>
- <pattern>**/*.sar</pattern>
- <pattern>**/*.mar</pattern>
- <pattern>**/*.rar</pattern>
- </patterns>
- <consumers>
- <consumer>bytecode-to-db</consumer>
- <consumer>bytecode-to-lucene</consumer>
- </consumers>
- </fileProcessor>
- <fileProcessor>
- <id>xmls</id>
- <patterns>
- <pattern>**/*.pom</pattern>
- <pattern>**/*.xml</pattern>
- <pattern>**/*.xsd</pattern>
- </patterns>
- <consumers>
- <consumer>xml-to-lucene</consumer>
- </consumers>
- </fileProcessor>
- <fileProcessor>
- <id>text</id>
- <patterns>
- <pattern>**/*.txt</pattern>
- <pattern>**/*.TXT</pattern>
- <pattern>**/*.block</pattern>
- <pattern>**/*.config</pattern>
- </patterns>
- </fileProcessor>
- <fileProcessor>
- <id>ignored</id>
- <patterns>
- <pattern>**/.htaccess</pattern>
- <pattern>**/KEYS</pattern>
- <pattern>**/*.rb</pattern>
- <pattern>**/*.sh</pattern>
- <pattern>**/.svn/**</pattern>
- <pattern>**/.DAV/**</pattern>
- </patterns>
- <consumers>
- <consumer>ignored</consumer>
- </consumers>
- </fileProcessor>
- <fileProcessor>
- <id>auto-remove</id>
- <patterns>
- <pattern>**/*.bak</pattern>
- <pattern>**/*~</pattern>
- <pattern>**/*-</pattern>
- </patterns>
- <consumers>
- <consumer>auto-remove</consumer>
- </consumers>
- </fileProcessor>
- <fileProcessor>
- <id>auto-rename</id>
- <patterns>
- <pattern>**/*.distribution-tgz</pattern>
- <pattern>**/*.distribution-zip</pattern>
- <pattern>**/*.plugin</pattern>
- </patterns>
- <consumers>
- <consumer>auto-rename</consumer>
- </consumers>
- </fileProcessor>
- </fileProcessors>
+
+ <repositoryScanning>
+ <fileTypes>
+ <fileType>
+ <id>artifacts</id>
+ <patterns>
+ <pattern>**/*.pom</pattern>
+ <pattern>**/*.jar</pattern>
+ <pattern>**/*.ear</pattern>
+ <pattern>**/*.war</pattern>
+ <pattern>**/*.car</pattern>
+ <pattern>**/*.sar</pattern>
+ <pattern>**/*.mar</pattern>
+ <pattern>**/*.rar</pattern>
+ <pattern>**/*.dtd</pattern>
+ <pattern>**/*.tld</pattern>
+ <pattern>**/*.tar.gz</pattern>
+ <pattern>**/*.tar.bz2</pattern>
+ <pattern>**/*.zip</pattern>
+ </patterns>
+ </fileType>
+ <fileType>
+ <id>indexable-content</id>
+ <patterns>
+ <pattern>**/*.txt</pattern>
+ <pattern>**/*.TXT</pattern>
+ <pattern>**/*.block</pattern>
+ <pattern>**/*.config</pattern>
+ <pattern>**/*.pom</pattern>
+ <pattern>**/*.xml</pattern>
+ <pattern>**/*.xsd</pattern>
+ <pattern>**/*.dtd</pattern>
+ <pattern>**/*.tld</pattern>
+ </patterns>
+ </fileType>
+ <fileType>
+ <id>auto-remove</id>
+ <patterns>
+ <pattern>**/*.bak</pattern>
+ <pattern>**/*~</pattern>
+ <pattern>**/*-</pattern>
+ </patterns>
+ </fileType>
+ <fileType>
+ <id>ignored</id>
+ <patterns>
+ <pattern>**/.htaccess</pattern>
+ <pattern>**/KEYS</pattern>
+ <pattern>**/*.rb</pattern>
+ <pattern>**/*.sh</pattern>
+ <pattern>**/.svn/**</pattern>
+ <pattern>**/.DAV/**</pattern>
+ </patterns>
+ </fileType>
+ </fileTypes>
+ <goodConsumers>
+ <goodConsumer>update-db-artifact</goodConsumer>
+ <goodConsumer>create-missing-checksums</goodConsumer>
+ <goodConsumer>update-db-repository-metadata</goodConsumer>
+ <goodConsumer>validate-checksum</goodConsumer>
+ <goodConsumer>validate-signature</goodConsumer>
+ <goodConsumer>index-content</goodConsumer>
+ <goodConsumer>auto-remove</goodConsumer>
+ <goodConsumer>auto-rename</goodConsumer>
+ </goodConsumers>
+ <badConsumers>
+ <badConsumer>update-db-bad-content</badConsumer>
+ </badConsumers>
+ </repositoryScanning>
+
+ <databaseScanning>
+ <cronExpression>0 0 * * ?</cronExpression>
+ <unprocessedConsumers>
+ <unprocessedConsumer>index-artifact</unprocessedConsumer>
+ <unprocessedConsumer>update-db-project</unprocessedConsumer>
+ <unprocessedConsumer>validate-repository-metadata</unprocessedConsumer>
+ <unprocessedConsumer>index-archive-toc</unprocessedConsumer>
+ <unprocessedConsumer>update-db-bytecode-stats</unprocessedConsumer>
+ <unprocessedConsumer>index-public-methods</unprocessedConsumer>
+ </unprocessedConsumers>
+ <processedConsumers>
+ <processedConsumer>not-present-remove-db-artifact</processedConsumer>
+ <processedConsumer>not-present-remove-db-project</processedConsumer>
+ <processedConsumer>not-present-remove-indexed</processedConsumer>
+ </processedConsumers>
+ </databaseScanning>
+
</configuration>
diff --git a/archiva-base/archiva-configuration/src/test/java/org/apache/maven/archiva/configuration/ArchivaConfigurationTest.java b/archiva-base/archiva-configuration/src/test/java/org/apache/maven/archiva/configuration/ArchivaConfigurationTest.java
index 8f4243c27..b893fcc79 100644
--- a/archiva-base/archiva-configuration/src/test/java/org/apache/maven/archiva/configuration/ArchivaConfigurationTest.java
+++ b/archiva-base/archiva-configuration/src/test/java/org/apache/maven/archiva/configuration/ArchivaConfigurationTest.java
@@ -23,7 +23,6 @@ import org.apache.commons.io.FileUtils;
import org.codehaus.plexus.PlexusTestCase;
import java.io.File;
-import java.util.Properties;
/**
* Test the configuration store.
@@ -53,13 +52,28 @@ public class ArchivaConfigurationTest extends PlexusTestCase
assertEquals( "check repositories", 4, configuration.getRepositories().size() );
assertEquals( "check proxy connectors", 2, configuration.getProxyConnectors().size() );
- assertEquals( "check network proxies", 0, configuration.getNetworkProxies().size() );
- assertEquals( "check file processors", 12, configuration.getFileProcessors().size() );
+ assertEquals( "check network proxies", 1, configuration.getNetworkProxies().size() );
+
+ RepositoryScanningConfiguration repoScanning = configuration.getRepositoryScanning();
+ assertNotNull( "check repository scanning", repoScanning );
+ assertEquals( "check file types", 4, repoScanning.getFileTypes().size() );
+ assertEquals( "check good consumers", 8, repoScanning.getGoodConsumers().size() );
+ assertEquals( "check bad consumers", 1, repoScanning.getBadConsumers().size() );
+
+ FileType artifactTypes = repoScanning.getFileTypeById( "artifacts" );
+ assertNotNull( "check 'artifacts' file type", artifactTypes );
+ assertEquals( "check 'artifacts' patterns", 13, artifactTypes.getPatterns().size() );
+
+ DatabaseScanningConfiguration dbScanning = configuration.getDatabaseScanning();
+ assertNotNull( "check database scanning", dbScanning );
+ assertEquals( "check unprocessed consumers", 6, dbScanning.getUnprocessedConsumers().size() );
+ assertEquals( "check processed consumers", 3, dbScanning.getProcessedConsumers().size() );
RepositoryConfiguration repository =
(RepositoryConfiguration) configuration.getRepositories().iterator().next();
- assertEquals( "check managed repositories", "file://${appserver.home}/repositories/internal", repository.getUrl() );
+ assertEquals( "check managed repositories", "file://${appserver.home}/repositories/internal",
+ repository.getUrl() );
assertEquals( "check managed repositories", "Archiva Managed Internal Repository", repository.getName() );
assertEquals( "check managed repositories", "internal", repository.getId() );
assertEquals( "check managed repositories", "default", repository.getLayout() );
diff --git a/archiva-base/archiva-consumers/archiva-consumer-api/pom.xml b/archiva-base/archiva-consumers/archiva-consumer-api/pom.xml
index d5665dbd2..f331ed074 100644
--- a/archiva-base/archiva-consumers/archiva-consumer-api/pom.xml
+++ b/archiva-base/archiva-consumers/archiva-consumer-api/pom.xml
@@ -30,6 +30,9 @@
<packaging>jar</packaging>
<dependencies>
-
+ <dependency>
+ <groupId>org.apache.maven.archiva</groupId>
+ <artifactId>archiva-model</artifactId>
+ </dependency>
</dependencies>
</project>
diff --git a/archiva-base/archiva-consumers/archiva-consumer-api/src/main/java/org/apache/maven/archiva/consumers/AbstractMonitoredConsumer.java b/archiva-base/archiva-consumers/archiva-consumer-api/src/main/java/org/apache/maven/archiva/consumers/AbstractMonitoredConsumer.java
new file mode 100644
index 000000000..9523caef1
--- /dev/null
+++ b/archiva-base/archiva-consumers/archiva-consumer-api/src/main/java/org/apache/maven/archiva/consumers/AbstractMonitoredConsumer.java
@@ -0,0 +1,93 @@
+package org.apache.maven.archiva.consumers;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Set;
+
+/**
+ * AbstractMonitoredConsumer
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public abstract class AbstractMonitoredConsumer implements BaseConsumer
+{
+ private Set monitors = new HashSet();
+
+ public void addConsumerMonitor( ConsumerMonitor monitor )
+ {
+ monitors.add( monitor );
+ }
+
+ public void removeConsumerMonitor( ConsumerMonitor monitor )
+ {
+ monitors.remove( monitor );
+ }
+
+ protected void triggerConsumerError( String type, String message )
+ {
+ for ( Iterator itmonitors = monitors.iterator(); itmonitors.hasNext(); )
+ {
+ ConsumerMonitor monitor = (ConsumerMonitor) itmonitors.next();
+ try
+ {
+ monitor.consumerError( this, type, message );
+ }
+ catch ( Throwable t )
+ {
+ /* discard error */
+ }
+ }
+ }
+
+ protected void triggerConsumerWarning( String type, String message )
+ {
+ for ( Iterator itmonitors = monitors.iterator(); itmonitors.hasNext(); )
+ {
+ ConsumerMonitor monitor = (ConsumerMonitor) itmonitors.next();
+ try
+ {
+ monitor.consumerWarning( this, type, message );
+ }
+ catch ( Throwable t )
+ {
+ /* discard error */
+ }
+ }
+ }
+
+ protected void triggerConsumerInfo( String message )
+ {
+ for ( Iterator itmonitors = monitors.iterator(); itmonitors.hasNext(); )
+ {
+ ConsumerMonitor monitor = (ConsumerMonitor) itmonitors.next();
+ try
+ {
+ monitor.consumerInfo( this, message );
+ }
+ catch ( Throwable t )
+ {
+ /* discard error */
+ }
+ }
+ }
+}
diff --git a/archiva-base/archiva-consumers/archiva-consumer-api/src/main/java/org/apache/maven/archiva/consumers/ArchivaArtifactConsumer.java b/archiva-base/archiva-consumers/archiva-consumer-api/src/main/java/org/apache/maven/archiva/consumers/ArchivaArtifactConsumer.java
new file mode 100644
index 000000000..74ebdcd9b
--- /dev/null
+++ b/archiva-base/archiva-consumers/archiva-consumer-api/src/main/java/org/apache/maven/archiva/consumers/ArchivaArtifactConsumer.java
@@ -0,0 +1,81 @@
+package org.apache.maven.archiva.consumers;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.archiva.model.ArchivaArtifact;
+
+import java.util.List;
+
+/**
+ * ArchivaArtifactConsumer - consumer for ArchivaArtifact objects.
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public interface ArchivaArtifactConsumer extends BaseConsumer
+{
+ /**
+ * Get the list of included file patterns for this consumer.
+ *
+ * @return the list of ({@link String}) artifact types to process.
+ */
+ public List getIncludedTypes();
+
+ /**
+ * <p>
+ * Event that triggers at the beginning of a scan.
+ * </p>
+ *
+ * <p>
+ * NOTE: This would be a good place to initialize the consumer, to lock any resources, and to
+ * generally start tracking the scan as a whole.
+ * </p>
+ */
+ public void beginScan();
+
+ /**
+ * <p>
+ * Event indicating an {@link ArchivaArtifact} is to be processed by this consumer.
+ * </p>
+ *
+ * <p>
+ * NOTE: The consumer does not need to process the artifact immediately, can can opt to queue and/or track
+ * the artifact to be processed in batch. Just be sure to complete the processing by the {@link #completeScan()}
+ * event.
+ * </p>
+ *
+ * @param file the file to process.
+ * @throws ConsumerException if there was a problem processing this file.
+ */
+ public void processArchivaArtifact( ArchivaArtifact artifact ) throws ConsumerException;
+
+ /**
+ * <p>
+ * Event that triggers on the completion of a scan.
+ * </p>
+ *
+ * <p>
+ * NOTE: If the consumer opted to batch up processing requests in the
+ * {@link #processArchivaArtifact(ArchivaArtifact)} event this would be the last opportunity to drain
+ * any processing queue's.
+ * </p>
+ */
+ public void completeScan();
+}
diff --git a/archiva-base/archiva-consumers/archiva-consumer-api/src/main/java/org/apache/maven/archiva/consumers/BaseConsumer.java b/archiva-base/archiva-consumers/archiva-consumer-api/src/main/java/org/apache/maven/archiva/consumers/BaseConsumer.java
new file mode 100644
index 000000000..2c076b187
--- /dev/null
+++ b/archiva-base/archiva-consumers/archiva-consumer-api/src/main/java/org/apache/maven/archiva/consumers/BaseConsumer.java
@@ -0,0 +1,64 @@
+package org.apache.maven.archiva.consumers;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * BaseConsumer - the base set of methods for a consumer.
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public abstract interface BaseConsumer
+{
+ /**
+ * This is the id for the consumer.
+ *
+ * @return the consumer id.
+ */
+ public String getId();
+
+ /**
+ * The human readable description for this consumer.
+ *
+ * @return the human readable description for this consumer.
+ */
+ public String getDescription();
+
+ /**
+ * Flag indicating permanance of consumer. (if it can be disabled or not)
+ *
+ * @return true indicating that consumer is permanent and cannot be disabled.
+ */
+ public boolean isPermanent();
+
+ /**
+ * Add a consumer monitor to the consumer.
+ *
+ * @param monitor the monitor to add.
+ */
+ public void addConsumerMonitor( ConsumerMonitor monitor );
+
+ /**
+ * Remove a consumer monitor.
+ *
+ * @param monitor the monitor to remove.
+ */
+ public void removeConsumerMonitor( ConsumerMonitor monitor );
+}
diff --git a/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/consumer/ConsumerException.java b/archiva-base/archiva-consumers/archiva-consumer-api/src/main/java/org/apache/maven/archiva/consumers/ConsumerException.java
index 709be8e6d..8f78e7475 100644
--- a/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/consumer/ConsumerException.java
+++ b/archiva-base/archiva-consumers/archiva-consumer-api/src/main/java/org/apache/maven/archiva/consumers/ConsumerException.java
@@ -1,4 +1,4 @@
-package org.apache.maven.archiva.repository.consumer;
+package org.apache.maven.archiva.consumers;
/*
* Licensed to the Apache Software Foundation (ASF) under one
@@ -20,7 +20,6 @@ package org.apache.maven.archiva.repository.consumer;
*/
import org.apache.maven.archiva.common.ArchivaException;
-import org.apache.maven.archiva.common.utils.BaseFile;
/**
* ConsumerException - details about the failure of a consumer.
@@ -31,22 +30,13 @@ import org.apache.maven.archiva.common.utils.BaseFile;
public class ConsumerException
extends ArchivaException
{
- private BaseFile file;
-
- public ConsumerException( BaseFile file, String message, Throwable cause )
+ public ConsumerException( String message, Throwable cause )
{
super( message, cause );
- this.file = file;
}
- public ConsumerException( BaseFile file, String message )
+ public ConsumerException( String message )
{
super( message );
- this.file = file;
- }
-
- public BaseFile getFile()
- {
- return file;
}
}
diff --git a/archiva-base/archiva-consumers/archiva-consumer-api/src/main/java/org/apache/maven/archiva/consumers/ConsumerMonitor.java b/archiva-base/archiva-consumers/archiva-consumer-api/src/main/java/org/apache/maven/archiva/consumers/ConsumerMonitor.java
new file mode 100644
index 000000000..d2a34cb82
--- /dev/null
+++ b/archiva-base/archiva-consumers/archiva-consumer-api/src/main/java/org/apache/maven/archiva/consumers/ConsumerMonitor.java
@@ -0,0 +1,55 @@
+package org.apache.maven.archiva.consumers;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * ConsumerMonitor - a monitor for consumers.
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public interface ConsumerMonitor
+{
+ /**
+ * A consumer error event.
+ *
+ * @param consumer the consumer that caused the error.
+ * @param type the type of error.
+ * @param message the message about the error.
+ */
+ public void consumerError( BaseConsumer consumer, String type, String message );
+
+ /**
+ * A consumer warning event.
+ *
+ * @param consumer the consumer that caused the warning.
+ * @param type the type of warning.
+ * @param message the message about the warning.
+ */
+ public void consumerWarning( BaseConsumer consumer, String type, String message );
+
+ /**
+ * A consumer informational event.
+ *
+ * @param consumer the consumer that caused the informational message.
+ * @param message the message.
+ */
+ public void consumerInfo( BaseConsumer consumer, String message );
+}
diff --git a/archiva-base/archiva-consumers/archiva-consumer-api/src/main/java/org/apache/maven/archiva/consumers/RepositoryContentConsumer.java b/archiva-base/archiva-consumers/archiva-consumer-api/src/main/java/org/apache/maven/archiva/consumers/RepositoryContentConsumer.java
new file mode 100644
index 000000000..60748c052
--- /dev/null
+++ b/archiva-base/archiva-consumers/archiva-consumer-api/src/main/java/org/apache/maven/archiva/consumers/RepositoryContentConsumer.java
@@ -0,0 +1,91 @@
+package org.apache.maven.archiva.consumers;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.archiva.common.utils.BaseFile;
+import org.apache.maven.archiva.model.ArchivaRepository;
+
+import java.util.List;
+
+/**
+ * A consumer of content (files) in the repository.
+ *
+ * @author <a href="mailto:joakime@apache.org">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public interface RepositoryContentConsumer extends BaseConsumer
+{
+ /**
+ * Get the list of included file patterns for this consumer.
+ *
+ * @return the list of {@link String} patterns. (example: <code>"**<span />/*.pom"</code>)
+ */
+ public List getIncludes();
+
+ /**
+ * Get the list of excluded file patterns for this consumer.
+ *
+ * @return the list of {@link String} patterns. (example: <code>"**<span />/*.pom"</code>) - (can be null for no exclusions)
+ */
+ public List getExcludes();
+
+ /**
+ * <p>
+ * Event that triggers at the beginning of a scan.
+ * </p>
+ *
+ * <p>
+ * NOTE: This would be a good place to initialize the consumer, to lock any resources, and to
+ * generally start tracking the scan as a whole.
+ * </p>
+ *
+ * @param repository the repository that this consumer is being used for.
+ * @throws ConsumerException if there was a problem with using the provided repository with the consumer.
+ */
+ public void beginScan( ArchivaRepository repository ) throws ConsumerException;
+
+ /**
+ * <p>
+ * Event indicating a file is to be processed by this consumer.
+ * </p>
+ *
+ * <p>
+ * NOTE: The consumer does not need to process the file immediately, can can opt to queue and/or track
+ * the files to be processed in batch. Just be sure to complete the processing by the {@link #completeScan()}
+ * event.
+ * </p>
+ *
+ * @param path the relative file path (in the repository) to process.
+ * @throws ConsumerException if there was a problem processing this file.
+ */
+ public void processFile( String path ) throws ConsumerException;
+
+ /**
+ * <p>
+ * Event that triggers on the completion of a scan.
+ * </p>
+ *
+ * <p>
+ * NOTE: If the consumer opted to batch up processing requests in the {@link #processFile(BaseFile)} event
+ * this would be the last opportunity to drain any processing queue's.
+ * </p>
+ */
+ public void completeScan();
+}
diff --git a/archiva-base/archiva-consumers/archiva-core-consumers/pom.xml b/archiva-base/archiva-consumers/archiva-core-consumers/pom.xml
index 7054e549d..182578f57 100644
--- a/archiva-base/archiva-consumers/archiva-core-consumers/pom.xml
+++ b/archiva-base/archiva-consumers/archiva-core-consumers/pom.xml
@@ -30,6 +30,21 @@
<packaging>jar</packaging>
<dependencies>
-
+ <dependency>
+ <groupId>org.apache.maven.archiva</groupId>
+ <artifactId>archiva-configuration</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.archiva</groupId>
+ <artifactId>archiva-consumer-api</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.archiva</groupId>
+ <artifactId>archiva-repository-layer</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-digest</artifactId>
+ </dependency>
</dependencies>
</project>
diff --git a/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/maven/archiva/consumers/core/ArtifactMissingChecksumsConsumer.java b/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/maven/archiva/consumers/core/ArtifactMissingChecksumsConsumer.java
new file mode 100644
index 000000000..eeebd5cac
--- /dev/null
+++ b/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/maven/archiva/consumers/core/ArtifactMissingChecksumsConsumer.java
@@ -0,0 +1,236 @@
+package org.apache.maven.archiva.consumers.core;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.lang.StringUtils;
+import org.apache.maven.archiva.configuration.ArchivaConfiguration;
+import org.apache.maven.archiva.configuration.FileType;
+import org.apache.maven.archiva.configuration.RepositoryScanningConfiguration;
+import org.apache.maven.archiva.consumers.AbstractMonitoredConsumer;
+import org.apache.maven.archiva.consumers.ConsumerException;
+import org.apache.maven.archiva.consumers.RepositoryContentConsumer;
+import org.apache.maven.archiva.model.ArchivaRepository;
+import org.apache.maven.archiva.repository.layout.BidirectionalRepositoryLayout;
+import org.codehaus.plexus.digest.ChecksumFile;
+import org.codehaus.plexus.digest.Digester;
+import org.codehaus.plexus.digest.DigesterException;
+import org.codehaus.plexus.personality.plexus.lifecycle.phase.Initializable;
+import org.codehaus.plexus.personality.plexus.lifecycle.phase.InitializationException;
+import org.codehaus.plexus.registry.Registry;
+import org.codehaus.plexus.registry.RegistryListener;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * ArtifactMissingChecksumsConsumer - Create missing checksums for the artifact.
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ * @plexus.component role-hint="create-missing-checksums"
+ * instantiation-strategy="per-lookup"
+ */
+public class ArtifactMissingChecksumsConsumer extends AbstractMonitoredConsumer
+ implements RepositoryContentConsumer, RegistryListener, Initializable
+{
+ /**
+ * @plexus.configuration default-value="create-missing-checksums"
+ */
+ private String id;
+
+ /**
+ * @plexus.configuration default-value="Create Missing Checksums (.sha1 & .md5)"
+ */
+ private String description;
+
+ /**
+ * @plexus.requirement
+ */
+ private ArchivaConfiguration configuration;
+
+ /**
+ * @plexus.requirement role="org.apache.maven.archiva.repository.layout.BidirectionalRepositoryLayout"
+ */
+ private Map bidirectionalLayoutMap;
+
+ /**
+ * @plexus.requirement role-hint="sha1"
+ */
+ private Digester digestSha1;
+
+ /**
+ * @plexus.requirement role-hint="md5";
+ */
+ private Digester digestMd5;
+
+ /**
+ * @plexus.requirement
+ */
+ private ChecksumFile checksum;
+
+ private static final String TYPE_CHECKSUM_NOT_FILE = "checksum-bad-not-file";
+
+ private static final String TYPE_CHECKSUM_CANNOT_CALC = "checksum-calc-failure";
+
+ private static final String TYPE_CHECKSUM_CANNOT_CREATE = "checksum-create-failure";
+
+ private ArchivaRepository repository;
+
+ private File repositoryDir;
+
+ private BidirectionalRepositoryLayout layout;
+
+ private List propertyNameTriggers = new ArrayList();
+
+ private List includes = new ArrayList();
+
+ public String getId()
+ {
+ return this.id;
+ }
+
+ public String getDescription()
+ {
+ return this.description;
+ }
+
+ public boolean isPermanent()
+ {
+ return false;
+ }
+
+ public void beginScan( ArchivaRepository repository ) throws ConsumerException
+ {
+ if ( !repository.isManaged() )
+ {
+ throw new ConsumerException( "Consumer requires managed repository." );
+ }
+
+ this.repository = repository;
+ this.repositoryDir = new File( repository.getUrl().getPath() );
+
+ String layoutName = repository.getModel().getLayoutName();
+ if ( !bidirectionalLayoutMap.containsKey( layoutName ) )
+ {
+ throw new ConsumerException( "Unable to process repository with layout [" + layoutName
+ + "] as there is no coresponding " + BidirectionalRepositoryLayout.class.getName()
+ + " implementation available." );
+ }
+
+ this.layout = (BidirectionalRepositoryLayout) bidirectionalLayoutMap.get( layoutName );
+ }
+
+ public void completeScan()
+ {
+ /* do nothing */
+ }
+
+ public List getExcludes()
+ {
+ return null;
+ }
+
+ public List getIncludes()
+ {
+ return includes;
+ }
+
+ public void processFile( String path ) throws ConsumerException
+ {
+ createIfMissing( path, digestSha1 );
+ createIfMissing( path, digestMd5 );
+ }
+
+ private void createIfMissing( String path, Digester digester )
+ {
+ File checksumFile = new File( this.repositoryDir, path + digester.getFilenameExtension() );
+ if ( !checksumFile.exists() )
+ {
+ try
+ {
+ checksum.createChecksum( new File( this.repositoryDir, path ), digester );
+ triggerConsumerInfo( "Created missing checksum file " + checksumFile.getAbsolutePath() );
+ }
+ catch ( DigesterException e )
+ {
+ triggerConsumerError( TYPE_CHECKSUM_CANNOT_CALC, "Cannot calculate checksum for file " + checksumFile
+ + ": " + e.getMessage() );
+ }
+ catch ( IOException e )
+ {
+ triggerConsumerError( TYPE_CHECKSUM_CANNOT_CREATE, "Cannot create checksum for file " + checksumFile
+ + ": " + e.getMessage() );
+ }
+ }
+ else if ( !checksumFile.isFile() )
+ {
+ triggerConsumerWarning( TYPE_CHECKSUM_NOT_FILE, "Checksum file " + checksumFile.getAbsolutePath()
+ + " is not a file." );
+ }
+
+ }
+
+ public void afterConfigurationChange( Registry registry, String propertyName, Object propertyValue )
+ {
+ if ( propertyNameTriggers.contains( propertyName ) )
+ {
+ initIncludes();
+ }
+ }
+
+ public void beforeConfigurationChange( Registry registry, String propertyName, Object propertyValue )
+ {
+ /* do nothing */
+ }
+
+ private void initIncludes()
+ {
+ includes.clear();
+
+ FileType artifactTypes = configuration.getConfiguration().getRepositoryScanning().getFileTypeById( "artifacts" );
+ if ( artifactTypes != null )
+ {
+ includes.addAll( artifactTypes.getPatterns() );
+ }
+ }
+
+ public void initialize() throws InitializationException
+ {
+ propertyNameTriggers = new ArrayList();
+ propertyNameTriggers.add( "repositoryScanning" );
+ propertyNameTriggers.add( "fileTypes" );
+ propertyNameTriggers.add( "fileType" );
+ propertyNameTriggers.add( "patterns" );
+ propertyNameTriggers.add( "pattern" );
+
+ configuration.addChangeListener( this );
+
+ initIncludes();
+
+ if ( includes.isEmpty() )
+ {
+ throw new InitializationException( "Unable to use " + getId() + " due to empty includes list." );
+ }
+ }
+}
diff --git a/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/maven/archiva/consumers/core/ValidateChecksumConsumer.java b/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/maven/archiva/consumers/core/ValidateChecksumConsumer.java
new file mode 100644
index 000000000..1fb5a60c2
--- /dev/null
+++ b/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/maven/archiva/consumers/core/ValidateChecksumConsumer.java
@@ -0,0 +1,158 @@
+package org.apache.maven.archiva.consumers.core;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.archiva.consumers.AbstractMonitoredConsumer;
+import org.apache.maven.archiva.consumers.ConsumerException;
+import org.apache.maven.archiva.consumers.RepositoryContentConsumer;
+import org.apache.maven.archiva.model.ArchivaRepository;
+import org.codehaus.plexus.digest.ChecksumFile;
+import org.codehaus.plexus.digest.Digester;
+import org.codehaus.plexus.digest.DigesterException;
+import org.codehaus.plexus.personality.plexus.lifecycle.phase.Initializable;
+import org.codehaus.plexus.personality.plexus.lifecycle.phase.InitializationException;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+/**
+ * ValidateChecksumConsumer - validate the provided checksum against the file it represents.
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ *
+ * @plexus.component role-hint="validate-checksums"
+ * instantiation-strategy="per-lookup"
+ */
+public class ValidateChecksumConsumer extends AbstractMonitoredConsumer
+ implements RepositoryContentConsumer, Initializable
+{
+ private static final String NOT_VALID_CHECKSUM = "checksum-not-valid";
+
+ private static final String CHECKSUM_NOT_FOUND = "checksum-not-found";
+
+ private static final String CHECKSUM_DIGESTER_FAILURE = "checksum-digester-failure";
+
+ private static final String CHECKSUM_IO_ERROR = "checksum-io-error";
+
+ /**
+ * @plexus.configuration default-value="validate-checksums"
+ */
+ private String id;
+
+ /**
+ * @plexus.configuration default-value="Validate checksums against file."
+ */
+ private String description;
+
+ /**
+ * @plexus.requirement
+ */
+ private ChecksumFile checksum;
+
+ /**
+ * @plexus.requirement role="org.codehaus.plexus.digest.Digester"
+ */
+ private List digesterList;
+
+ private ArchivaRepository repository;
+
+ private File repositoryDir;
+
+ private List includes = new ArrayList();
+
+ public String getId()
+ {
+ return this.id;
+ }
+
+ public String getDescription()
+ {
+ return this.description;
+ }
+
+ public boolean isPermanent()
+ {
+ return false;
+ }
+
+ public void beginScan( ArchivaRepository repository ) throws ConsumerException
+ {
+ if ( !repository.isManaged() )
+ {
+ throw new ConsumerException( "Consumer requires managed repository." );
+ }
+
+ this.repository = repository;
+ this.repositoryDir = new File( repository.getUrl().getPath() );
+ }
+
+ public void completeScan()
+ {
+ /* nothing to do */
+ }
+
+ public List getExcludes()
+ {
+ return null;
+ }
+
+ public List getIncludes()
+ {
+ return this.includes;
+ }
+
+ public void processFile( String path ) throws ConsumerException
+ {
+ File checksumFile = new File( this.repositoryDir, path );
+ try
+ {
+ if ( !checksum.isValidChecksum( checksumFile ) )
+ {
+ triggerConsumerWarning( NOT_VALID_CHECKSUM, "The checksum for " + checksumFile + " is invalid." );
+ }
+ }
+ catch ( FileNotFoundException e )
+ {
+ triggerConsumerError( CHECKSUM_NOT_FOUND, "File not found during checksum validation: " + e.getMessage() );
+ }
+ catch ( DigesterException e )
+ {
+ triggerConsumerError( CHECKSUM_DIGESTER_FAILURE, "Digester failure during checksum validation on " + checksumFile );
+ }
+ catch ( IOException e )
+ {
+ triggerConsumerError( CHECKSUM_IO_ERROR, "Checksum I/O error during validation on " + checksumFile );
+ }
+ }
+
+ public void initialize() throws InitializationException
+ {
+ for ( Iterator itDigesters = digesterList.iterator(); itDigesters.hasNext(); )
+ {
+ Digester digester = (Digester) itDigesters.next();
+ includes.add( "**/*" + digester.getFilenameExtension() );
+ }
+ }
+}
diff --git a/archiva-base/archiva-consumers/archiva-database-consumers/pom.xml b/archiva-base/archiva-consumers/archiva-database-consumers/pom.xml
index b708f6641..15df257bd 100644
--- a/archiva-base/archiva-consumers/archiva-database-consumers/pom.xml
+++ b/archiva-base/archiva-consumers/archiva-database-consumers/pom.xml
@@ -30,6 +30,21 @@
<packaging>jar</packaging>
<dependencies>
-
+ <dependency>
+ <groupId>org.apache.maven.archiva</groupId>
+ <artifactId>archiva-database</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.archiva</groupId>
+ <artifactId>archiva-configuration</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.archiva</groupId>
+ <artifactId>archiva-consumer-api</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.archiva</groupId>
+ <artifactId>archiva-repository-layer</artifactId>
+ </dependency>
</dependencies>
</project>
diff --git a/archiva-base/archiva-consumers/archiva-database-consumers/src/main/java/org/apache/maven/archiva/consumers/database/ArtifactUpdateDatabaseConsumer.java b/archiva-base/archiva-consumers/archiva-database-consumers/src/main/java/org/apache/maven/archiva/consumers/database/ArtifactUpdateDatabaseConsumer.java
new file mode 100644
index 000000000..0ad7448bb
--- /dev/null
+++ b/archiva-base/archiva-consumers/archiva-database-consumers/src/main/java/org/apache/maven/archiva/consumers/database/ArtifactUpdateDatabaseConsumer.java
@@ -0,0 +1,213 @@
+package org.apache.maven.archiva.consumers.database;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.archiva.configuration.ArchivaConfiguration;
+import org.apache.maven.archiva.configuration.FileType;
+import org.apache.maven.archiva.consumers.AbstractMonitoredConsumer;
+import org.apache.maven.archiva.consumers.ConsumerException;
+import org.apache.maven.archiva.consumers.RepositoryContentConsumer;
+import org.apache.maven.archiva.database.ArchivaDAO;
+import org.apache.maven.archiva.database.ArchivaDatabaseException;
+import org.apache.maven.archiva.model.ArchivaArtifact;
+import org.apache.maven.archiva.model.ArchivaRepository;
+import org.apache.maven.archiva.model.RepositoryContent;
+import org.apache.maven.archiva.repository.layout.BidirectionalRepositoryLayout;
+import org.apache.maven.archiva.repository.layout.LayoutException;
+import org.codehaus.plexus.personality.plexus.lifecycle.phase.Initializable;
+import org.codehaus.plexus.personality.plexus.lifecycle.phase.InitializationException;
+import org.codehaus.plexus.registry.Registry;
+import org.codehaus.plexus.registry.RegistryListener;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * ArtifactUpdateDatabaseConsumer - Take an artifact off of disk and put it into the repository.
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ *
+ * @plexus.component role-hint="update-db-artifact"
+ * instantiation-strategy="per-lookup"
+ */
+public class ArtifactUpdateDatabaseConsumer extends AbstractMonitoredConsumer
+ implements RepositoryContentConsumer, RegistryListener, Initializable
+{
+ private static final String TYPE_NOT_ARTIFACT = "file-not-artifact";
+
+ private static final String DB_ERROR = "db-error";
+
+ /**
+ * @plexus.configuration default-value="update-db-artifact"
+ */
+ private String id;
+
+ /**
+ * @plexus.configuration default-value="Update the Artifact in the Database"
+ */
+ private String description;
+
+ /**
+ * @plexus.requirement role-hint="jdo"
+ */
+ private ArchivaDAO dao;
+
+ /**
+ * @plexus.requirement
+ */
+ private ArchivaConfiguration configuration;
+
+ /**
+ * @plexus.requirement role="org.apache.maven.archiva.repository.layout.BidirectionalRepositoryLayout"
+ */
+ private Map bidirectionalLayoutMap;
+
+ private ArchivaRepository repository;
+
+ private File repositoryDir;
+
+ private BidirectionalRepositoryLayout layout;
+
+ private List propertyNameTriggers = new ArrayList();
+
+ private List includes = new ArrayList();
+
+ public String getId()
+ {
+ return this.id;
+ }
+
+ public String getDescription()
+ {
+ return this.description;
+ }
+
+ public boolean isPermanent()
+ {
+ return true;
+ }
+
+ public List getExcludes()
+ {
+ return null;
+ }
+
+ public List getIncludes()
+ {
+ return this.includes;
+ }
+
+ public void beginScan( ArchivaRepository repository ) throws ConsumerException
+ {
+ if ( !repository.isManaged() )
+ {
+ throw new ConsumerException( "Consumer requires managed repository." );
+ }
+
+ this.repository = repository;
+ this.repositoryDir = new File( repository.getUrl().getPath() );
+
+ String layoutName = repository.getModel().getLayoutName();
+ if ( !bidirectionalLayoutMap.containsKey( layoutName ) )
+ {
+ throw new ConsumerException( "Unable to process repository with layout [" + layoutName
+ + "] as there is no coresponding " + BidirectionalRepositoryLayout.class.getName()
+ + " implementation available." );
+ }
+
+ this.layout = (BidirectionalRepositoryLayout) bidirectionalLayoutMap.get( layoutName );
+ }
+
+ public void processFile( String path ) throws ConsumerException
+ {
+ try
+ {
+ ArchivaArtifact artifact = layout.toArtifact( path );
+
+ RepositoryContent repoContent = artifact.getModel().getContentKey();
+ repoContent.setRepositoryId( this.repository.getId() );
+
+ // Calculate the hashcodes.
+
+
+ dao.saveArtifact( artifact.getModel() );
+ }
+ catch ( LayoutException e )
+ {
+ triggerConsumerError( TYPE_NOT_ARTIFACT, "Path " + path + " cannot be converted to artifact: "
+ + e.getMessage() );
+ }
+ catch ( ArchivaDatabaseException e )
+ {
+ triggerConsumerError( DB_ERROR, "Unable to save artifact to database: " + e.getMessage() );
+ }
+ }
+
+ public void completeScan()
+ {
+ /* do nothing */
+ }
+
+ public void afterConfigurationChange( Registry registry, String propertyName, Object propertyValue )
+ {
+ if ( propertyNameTriggers.contains( propertyName ) )
+ {
+ initIncludes();
+ }
+ }
+
+ public void beforeConfigurationChange( Registry registry, String propertyName, Object propertyValue )
+ {
+ /* do nothing */
+ }
+
+ private void initIncludes()
+ {
+ includes.clear();
+
+ FileType artifactTypes = configuration.getConfiguration().getRepositoryScanning().getFileTypeById( "artifacts" );
+ if ( artifactTypes != null )
+ {
+ includes.addAll( artifactTypes.getPatterns() );
+ }
+ }
+
+ public void initialize() throws InitializationException
+ {
+ propertyNameTriggers = new ArrayList();
+ propertyNameTriggers.add( "repositoryScanning" );
+ propertyNameTriggers.add( "fileTypes" );
+ propertyNameTriggers.add( "fileType" );
+ propertyNameTriggers.add( "patterns" );
+ propertyNameTriggers.add( "pattern" );
+
+ configuration.addChangeListener( this );
+
+ initIncludes();
+
+ if ( includes.isEmpty() )
+ {
+ throw new InitializationException( "Unable to use " + getId() + " due to empty includes list." );
+ }
+ }
+}
diff --git a/archiva-base/archiva-consumers/archiva-lucene-consumers/pom.xml b/archiva-base/archiva-consumers/archiva-lucene-consumers/pom.xml
index 3ed2a36bf..ae5761b2a 100644
--- a/archiva-base/archiva-consumers/archiva-lucene-consumers/pom.xml
+++ b/archiva-base/archiva-consumers/archiva-lucene-consumers/pom.xml
@@ -30,6 +30,21 @@
<packaging>jar</packaging>
<dependencies>
-
+ <dependency>
+ <groupId>org.apache.maven.archiva</groupId>
+ <artifactId>archiva-indexer</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.archiva</groupId>
+ <artifactId>archiva-configuration</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.archiva</groupId>
+ <artifactId>archiva-consumer-api</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.archiva</groupId>
+ <artifactId>archiva-repository-layer</artifactId>
+ </dependency>
</dependencies>
</project>
diff --git a/archiva-base/archiva-consumers/archiva-lucene-consumers/src/main/java/org/apache/maven/archiva/consumers/lucene/IndexArtifactConsumer.java b/archiva-base/archiva-consumers/archiva-lucene-consumers/src/main/java/org/apache/maven/archiva/consumers/lucene/IndexArtifactConsumer.java
new file mode 100644
index 000000000..444be00f7
--- /dev/null
+++ b/archiva-base/archiva-consumers/archiva-lucene-consumers/src/main/java/org/apache/maven/archiva/consumers/lucene/IndexArtifactConsumer.java
@@ -0,0 +1,98 @@
+package org.apache.maven.archiva.consumers.lucene;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.archiva.common.utils.BaseFile;
+import org.apache.maven.archiva.configuration.ArchivaConfiguration;
+import org.apache.maven.archiva.configuration.Configuration;
+import org.apache.maven.archiva.indexer.RepositoryArtifactIndex;
+import org.apache.maven.archiva.indexer.RepositoryArtifactIndexFactory;
+import org.apache.maven.archiva.indexer.RepositoryIndexException;
+import org.apache.maven.archiva.indexer.record.RepositoryIndexRecordFactory;
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+
+import java.io.File;
+
+/**
+ * IndexArtifactConsumer
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ *
+ * @plexus.component role="org.apache.maven.archiva.common.consumers.Consumer"
+ * role-hint="index-artifact"
+ * instantiation-strategy="per-lookup"
+ */
+public class IndexArtifactConsumer
+ extends GenericArtifactConsumer
+{
+ /**
+ * @plexus.requirement
+ */
+ private RepositoryArtifactIndexFactory indexFactory;
+
+ /**
+ * @plexus.requirement role-hint="standard"
+ */
+ private RepositoryIndexRecordFactory recordFactory;
+
+ /**
+ * Configuration store.
+ *
+ * @plexus.requirement
+ */
+ private ArchivaConfiguration archivaConfiguration;
+
+ private RepositoryArtifactIndex index;
+
+ public boolean init( ArtifactRepository repository )
+ {
+ Configuration configuration = archivaConfiguration.getConfiguration();
+
+ File indexPath = new File( configuration.getIndexPath() );
+
+ index = indexFactory.createStandardIndex( indexPath );
+
+ return super.init( repository );
+ }
+
+ public void processArtifact( Artifact artifact, BaseFile file )
+ {
+ try
+ {
+ index.indexArtifact( artifact, recordFactory );
+ }
+ catch ( RepositoryIndexException e )
+ {
+ getLogger().warn( "Unable to index artifact " + artifact, e );
+ }
+ }
+
+ public void processFileProblem( BaseFile path, String message )
+ {
+
+ }
+
+ public String getName()
+ {
+ return "Index Artifact Consumer";
+ }
+}
diff --git a/archiva-base/archiva-consumers/archiva-lucene-consumers/src/main/java/org/apache/maven/archiva/consumers/lucene/IndexContentConsumer.java b/archiva-base/archiva-consumers/archiva-lucene-consumers/src/main/java/org/apache/maven/archiva/consumers/lucene/IndexContentConsumer.java
new file mode 100644
index 000000000..4ed012aa2
--- /dev/null
+++ b/archiva-base/archiva-consumers/archiva-lucene-consumers/src/main/java/org/apache/maven/archiva/consumers/lucene/IndexContentConsumer.java
@@ -0,0 +1,153 @@
+package org.apache.maven.archiva.consumers.lucene;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.archiva.configuration.ArchivaConfiguration;
+import org.apache.maven.archiva.configuration.FileType;
+import org.apache.maven.archiva.consumers.AbstractMonitoredConsumer;
+import org.apache.maven.archiva.consumers.ConsumerException;
+import org.apache.maven.archiva.consumers.RepositoryContentConsumer;
+import org.apache.maven.archiva.model.ArchivaRepository;
+import org.codehaus.plexus.personality.plexus.lifecycle.phase.Initializable;
+import org.codehaus.plexus.personality.plexus.lifecycle.phase.InitializationException;
+import org.codehaus.plexus.registry.Registry;
+import org.codehaus.plexus.registry.RegistryListener;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * IndexContentConsumer - generic full file content indexing consumer.
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ *
+ * @plexus.component role-hint="index-content"
+ * instantiation-strategy="per-lookup"
+ */
+public class IndexContentConsumer extends AbstractMonitoredConsumer
+ implements RepositoryContentConsumer, RegistryListener, Initializable
+{
+ /**
+ * @plexus.configuration default-value="index-content"
+ */
+ private String id;
+
+ /**
+ * @plexus.configuration default-value="Text and XML file contents indexing"
+ */
+ private String description;
+
+ /**
+ * @plexus.requirement
+ */
+ private ArchivaConfiguration configuration;
+
+ private List propertyNameTriggers = new ArrayList();
+
+ private List includes = new ArrayList();
+
+ public String getId()
+ {
+ return this.id;
+ }
+
+ public String getDescription()
+ {
+ return this.description;
+ }
+
+ public boolean isPermanent()
+ {
+ return false;
+ }
+
+ public List getExcludes()
+ {
+ return null;
+ }
+
+ public List getIncludes()
+ {
+ return this.includes;
+ }
+
+ public void beginScan( ArchivaRepository repository ) throws ConsumerException
+ {
+ if ( !repository.isManaged() )
+ {
+ throw new ConsumerException( "Consumer requires managed repository." );
+ }
+ }
+
+ public void processFile( String path ) throws ConsumerException
+ {
+
+ }
+
+ public void completeScan()
+ {
+ /* do nothing */
+ }
+
+ public void afterConfigurationChange( Registry registry, String propertyName, Object propertyValue )
+ {
+ if ( propertyNameTriggers.contains( propertyName ) )
+ {
+ initIncludes();
+ }
+ }
+
+ public void beforeConfigurationChange( Registry registry, String propertyName, Object propertyValue )
+ {
+ /* do nothing */
+ }
+
+ private void initIncludes()
+ {
+ includes.clear();
+
+ FileType artifactTypes =
+ configuration.getConfiguration().getRepositoryScanning().getFileTypeById( "indexable-content" );
+ if ( artifactTypes != null )
+ {
+ includes.addAll( artifactTypes.getPatterns() );
+ }
+ }
+
+ public void initialize() throws InitializationException
+ {
+ propertyNameTriggers = new ArrayList();
+ propertyNameTriggers.add( "repositoryScanning" );
+ propertyNameTriggers.add( "fileTypes" );
+ propertyNameTriggers.add( "fileType" );
+ propertyNameTriggers.add( "patterns" );
+ propertyNameTriggers.add( "pattern" );
+
+ configuration.addChangeListener( this );
+
+ initIncludes();
+
+ if ( includes.isEmpty() )
+ {
+ throw new InitializationException( "Unable to use " + getId() + " due to empty includes list." );
+ }
+ }
+}
diff --git a/archiva-base/archiva-consumers/pom.xml b/archiva-base/archiva-consumers/pom.xml
index 8f1ab174f..8969b9ed3 100644
--- a/archiva-base/archiva-consumers/pom.xml
+++ b/archiva-base/archiva-consumers/pom.xml
@@ -32,8 +32,10 @@
<modules>
<module>archiva-consumer-api</module>
<module>archiva-core-consumers</module>
+ <!--
<module>archiva-database-consumers</module>
<module>archiva-lucene-consumers</module>
<module>archiva-signature-consumers</module>
+ -->
</modules>
</project>
diff --git a/archiva-base/archiva-indexer/pom.xml b/archiva-base/archiva-indexer/pom.xml
index 9b514134a..7d77d445f 100644
--- a/archiva-base/archiva-indexer/pom.xml
+++ b/archiva-base/archiva-indexer/pom.xml
@@ -30,26 +30,12 @@
<name>Archiva Base :: Indexer</name>
<dependencies>
<dependency>
- <groupId>org.apache.maven</groupId>
- <artifactId>maven-artifact</artifactId>
+ <groupId>org.apache.maven.archiva</groupId>
+ <artifactId>archiva-configuration</artifactId>
</dependency>
<dependency>
- <groupId>org.apache.maven</groupId>
- <artifactId>maven-artifact-manager</artifactId>
- </dependency>
- <dependency>
- <groupId>org.apache.maven</groupId>
- <artifactId>maven-project</artifactId>
- <exclusions>
- <exclusion>
- <groupId>org.codehaus.plexus.cache</groupId>
- <artifactId>plexus-cache-hashmap</artifactId>
- </exclusion>
- </exclusions>
- </dependency>
- <dependency>
- <groupId>org.apache.maven</groupId>
- <artifactId>maven-model</artifactId>
+ <groupId>org.apache.maven.archiva</groupId>
+ <artifactId>archiva-model</artifactId>
</dependency>
<dependency>
<groupId>org.apache.lucene</groupId>
@@ -69,10 +55,6 @@
<artifactId>plexus-digest</artifactId>
</dependency>
<dependency>
- <groupId>org.apache.maven</groupId>
- <artifactId>maven-repository-metadata</artifactId>
- </dependency>
- <dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
</dependency>
diff --git a/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/ArtifactKeys.java b/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/ArtifactKeys.java
new file mode 100644
index 000000000..b86e51d59
--- /dev/null
+++ b/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/ArtifactKeys.java
@@ -0,0 +1,20 @@
+package org.apache.maven.archiva.indexer;
+
+public class ArtifactKeys
+{
+ public static final String GROUPID = "groupId";
+
+ public static final String GROUPID_EXACT = GROUPID + "_u";
+
+ public static final String ARTIFACTID = "artifactId";
+
+ public static final String ARTIFACTID_EXACT = ARTIFACTID + "_u";
+
+ public static final String VERSION = "version";
+
+ public static final String VERSION_EXACT = VERSION + "_u";
+
+ public static final String TYPE = "type";
+
+ public static final String CLASSIFIER = "classifier";
+}
diff --git a/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/RepositoryArtifactIndex.java b/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/RepositoryContentIndex.java
index b4bdbd4f7..414bdc51d 100644
--- a/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/RepositoryArtifactIndex.java
+++ b/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/RepositoryContentIndex.java
@@ -19,29 +19,46 @@ package org.apache.maven.archiva.indexer;
* under the License.
*/
+import org.apache.maven.archiva.indexer.lucene.LuceneRepositoryContentRecord;
import org.apache.maven.archiva.indexer.query.Query;
-import org.apache.maven.archiva.indexer.record.RepositoryIndexRecordFactory;
-import org.apache.maven.artifact.Artifact;
+import java.io.File;
import java.util.Collection;
import java.util.List;
/**
- * Maintain an artifact index on the repository.
+ * Common access methods for a Repository Content index.
*
* @author <a href="mailto:brett@apache.org">Brett Porter</a>
*/
-public interface RepositoryArtifactIndex
+public interface RepositoryContentIndex
{
/**
- * Indexes the artifacts found within the specified list of index records. If the artifacts are already in the
- * repository they are updated.
+ * Indexes the records.
*
- * @param records the records to index
- * @throws RepositoryIndexException if there is a problem indexing the records
+ * @param records list of {@link LuceneRepositoryContentRecord} objects.
+ * @throws RepositoryIndexException if there is a problem indexing the records.
*/
void indexRecords( Collection records )
throws RepositoryIndexException;
+
+ /**
+ * Modify (potentially) existing records in the index.
+ *
+ * @param records the collection of {@link LuceneRepositoryContentRecord} objects to modify in the index.
+ * @throws RepositoryIndexException if there is a problem modifying the records.
+ */
+ public void modifyRecords( Collection records )
+ throws RepositoryIndexException;
+
+ /**
+ * Modify an existing (potential) record in the index.
+ *
+ * @param record the record to modify.
+ * @throws RepositoryIndexException if there is a problem modifying the record.
+ */
+ public void modifyRecord( LuceneRepositoryContentRecord record )
+ throws RepositoryIndexException;
/**
* Search the index based on the search criteria specified. Returns a list of index records.
@@ -75,7 +92,7 @@ public interface RepositoryArtifactIndex
/**
* Retrieve all records in the index.
*
- * @return the records
+ * @return the collection of {@link LuceneRepositoryContentRecord} objects.
* @throws RepositoryIndexSearchException if there was an error searching the index
*/
Collection getAllRecords()
@@ -89,64 +106,11 @@ public interface RepositoryArtifactIndex
*/
Collection getAllRecordKeys()
throws RepositoryIndexException;
-
- /**
- * Indexes the artifact specified. If the artifact is already in the repository they it is updated.
- * This method should use less memory than indexRecords as the records can be created and disposed of on the fly.
- *
- * @param artifact the artifact to index
- * @param factory the artifact to record factory
- * @throws RepositoryIndexException if there is a problem indexing the artifacts
- */
- void indexArtifact( Artifact artifact, RepositoryIndexRecordFactory factory )
- throws RepositoryIndexException;
/**
- * Indexes the artifacts found within the specified list. If the artifacts are already in the
- * repository they are updated. This method should use less memory than indexRecords as the records can be
- * created and disposed of on the fly.
- *
- * @param artifacts the artifacts to index
- * @param factory the artifact to record factory
- * @throws RepositoryIndexException if there is a problem indexing the artifacts
- */
- void indexArtifacts( List artifacts, RepositoryIndexRecordFactory factory )
- throws RepositoryIndexException;
-
- /**
- * Get all the group IDs in the index.
- *
- * @return list of groups as strings
- * @throws RepositoryIndexException if there is a problem searching for the group ID
- */
- List getAllGroupIds()
- throws RepositoryIndexException;
-
- /**
- * Get the list of artifact IDs in a group in the index.
- *
- * @param groupId the group ID to search
- * @return the list of artifact ID strings
- * @throws RepositoryIndexSearchException if there is a problem searching for the group ID
- */
- List getArtifactIds( String groupId )
- throws RepositoryIndexSearchException;
-
- /**
- * Get the list of available versions for a given artifact.
- *
- * @param groupId the group ID to search for
- * @param artifactId the artifact ID to search for
- * @return the list of version strings
- * @throws RepositoryIndexSearchException if there is a problem searching for the artifact
- */
- List getVersions( String groupId, String artifactId )
- throws RepositoryIndexSearchException;
-
- /**
- * Get the time when the index was last updated. Note that this does not monitor external processes.
- *
- * @return the last updated time, or 0 if it has not been updated since the class was instantiated.
+ * Get the index directory.
+ *
+ * @return the index directory.
*/
- long getLastUpdatedTime();
+ File getIndexDirectory();
}
diff --git a/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/RepositoryContentIndexFactory.java b/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/RepositoryContentIndexFactory.java
new file mode 100644
index 000000000..fa80e2d8d
--- /dev/null
+++ b/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/RepositoryContentIndexFactory.java
@@ -0,0 +1,54 @@
+package org.apache.maven.archiva.indexer;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.archiva.model.ArchivaRepository;
+
+/**
+ * Obtain an index instance.
+ *
+ * @author <a href="mailto:brett@apache.org">Brett Porter</a>
+ */
+public interface RepositoryContentIndexFactory
+{
+ /**
+ * Method to create an instance of the bytecode index.
+ *
+ * @param repository the repository to create the content index from.
+ * @return the index instance
+ */
+ RepositoryContentIndex createBytecodeIndex( ArchivaRepository repository );
+
+ /**
+ * Method to create an instance of the file content index.
+ *
+ * @param repository the repository to create the file content index from.
+ * @return the index instance
+ */
+ RepositoryContentIndex createFileContentIndex( ArchivaRepository repository );
+
+ /**
+ * Method to create an instance of the hashcode index.
+ *
+ * @param repository the repository to create the content index from.
+ * @return the index instance
+ */
+ RepositoryContentIndex createHashcodeIndex( ArchivaRepository repository );
+}
diff --git a/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/bytecode/BytecodeAnalyzer.java b/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/bytecode/BytecodeAnalyzer.java
new file mode 100644
index 000000000..c3b45b11d
--- /dev/null
+++ b/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/bytecode/BytecodeAnalyzer.java
@@ -0,0 +1,73 @@
+package org.apache.maven.archiva.indexer.bytecode;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.lucene.analysis.Analyzer;
+import org.apache.lucene.analysis.LowerCaseFilter;
+import org.apache.lucene.analysis.StopAnalyzer;
+import org.apache.lucene.analysis.StopFilter;
+import org.apache.lucene.analysis.TokenStream;
+import org.apache.lucene.analysis.standard.StandardAnalyzer;
+import org.apache.maven.archiva.indexer.ArtifactKeys;
+import org.apache.maven.archiva.indexer.lucene.analyzers.ClassnameTokenizer;
+import org.apache.maven.archiva.indexer.lucene.analyzers.FilenamesTokenizer;
+import org.apache.maven.archiva.indexer.lucene.analyzers.GroupIdTokenizer;
+import org.apache.maven.archiva.indexer.lucene.analyzers.VersionTokenizer;
+
+import java.io.Reader;
+
+/**
+ * BytecodeAnalyzer
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class BytecodeAnalyzer extends Analyzer
+{
+ private static final Analyzer STANDARD = new StandardAnalyzer();
+
+ public TokenStream tokenStream( String field, Reader reader )
+ {
+ TokenStream tokenStream = null;
+
+ if ( BytecodeKeys.CLASSES.equals( field ) )
+ {
+ tokenStream = new ClassnameTokenizer( reader );
+ }
+ else if ( BytecodeKeys.FILES.equals( field ) )
+ {
+ tokenStream = new FilenamesTokenizer( reader );
+ }
+ else if ( ArtifactKeys.GROUPID.equals( field ) )
+ {
+ tokenStream = new GroupIdTokenizer( reader );
+ }
+ else if ( ArtifactKeys.VERSION.equals( field ) )
+ {
+ tokenStream = new VersionTokenizer( reader );
+ }
+ else
+ {
+ tokenStream = STANDARD.tokenStream( field, reader );
+ }
+
+ return new LowerCaseFilter( new StopFilter( tokenStream, StopAnalyzer.ENGLISH_STOP_WORDS ) );
+ }
+}
diff --git a/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/bytecode/BytecodeEntryConverter.java b/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/bytecode/BytecodeEntryConverter.java
new file mode 100644
index 000000000..c0a8ad6ac
--- /dev/null
+++ b/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/bytecode/BytecodeEntryConverter.java
@@ -0,0 +1,112 @@
+package org.apache.maven.archiva.indexer.bytecode;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.lucene.document.Document;
+import org.apache.maven.archiva.indexer.ArtifactKeys;
+import org.apache.maven.archiva.indexer.lucene.LuceneDocumentMaker;
+import org.apache.maven.archiva.indexer.lucene.LuceneEntryConverter;
+import org.apache.maven.archiva.indexer.lucene.LuceneRepositoryContentRecord;
+import org.apache.maven.archiva.model.ArchivaArtifact;
+import org.apache.maven.archiva.model.platform.JavaArtifactHelper;
+
+import java.text.ParseException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * Converter for Bytecode records and documents.
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class BytecodeEntryConverter implements LuceneEntryConverter
+{
+
+ public Document convert( LuceneRepositoryContentRecord record )
+ {
+ if ( !( record instanceof BytecodeRecord ) )
+ {
+ throw new ClassCastException( "Unable to convert type " + record.getClass().getName() + " to "
+ + BytecodeRecord.class.getName() + "." );
+ }
+
+ BytecodeRecord bytecode = (BytecodeRecord) record;
+
+ LuceneDocumentMaker doc = new LuceneDocumentMaker( bytecode );
+
+ // Artifact Reference
+ doc.addFieldTokenized( ArtifactKeys.GROUPID, bytecode.getArtifact().getGroupId() );
+ doc.addFieldExact( ArtifactKeys.GROUPID_EXACT, bytecode.getArtifact().getGroupId() );
+ doc.addFieldTokenized( ArtifactKeys.ARTIFACTID, bytecode.getArtifact().getArtifactId() );
+ doc.addFieldExact( ArtifactKeys.ARTIFACTID_EXACT, bytecode.getArtifact().getArtifactId() );
+ doc.addFieldTokenized( ArtifactKeys.VERSION, bytecode.getArtifact().getVersion() );
+ doc.addFieldExact( ArtifactKeys.VERSION_EXACT, bytecode.getArtifact().getVersion() );
+ doc.addFieldTokenized( ArtifactKeys.TYPE, bytecode.getArtifact().getType() );
+ doc.addFieldUntokenized( ArtifactKeys.CLASSIFIER, bytecode.getArtifact().getClassifier() );
+
+ // Bytecode Specifics
+ doc.addFieldExact( BytecodeKeys.JDK, JavaArtifactHelper.getJavaDetails( bytecode.getArtifact() ).getJdk() );
+ doc.addFieldTokenized( BytecodeKeys.CLASSES, bytecode.getClasses() );
+ doc.addFieldTokenized( BytecodeKeys.METHODS, bytecode.getMethods() );
+ doc.addFieldTokenized( BytecodeKeys.FILES, bytecode.getFiles() );
+
+ return doc.getDocument();
+ }
+
+ public LuceneRepositoryContentRecord convert( Document document ) throws ParseException
+ {
+ BytecodeRecord record = new BytecodeRecord();
+
+ // Artifact Reference
+ String groupId = document.get( ArtifactKeys.GROUPID );
+ String artifactId = document.get( ArtifactKeys.ARTIFACTID );
+ String version = document.get( ArtifactKeys.VERSION );
+ String classifier = document.get( ArtifactKeys.CLASSIFIER );
+ String type = document.get( ArtifactKeys.TYPE );
+
+ ArchivaArtifact artifact = new ArchivaArtifact( groupId, artifactId, version, classifier, type );
+ record.setArtifact( artifact );
+
+ // Bytecode Specifics
+ JavaArtifactHelper.getJavaDetails( record.getArtifact() ).setJdk( document.get( BytecodeKeys.JDK ) );
+ record.setClasses( getList( document, BytecodeKeys.CLASSES ) );
+ record.setMethods( getList( document, BytecodeKeys.METHODS ) );
+ record.setFiles( getList( document, BytecodeKeys.FILES ) );
+
+ return record;
+ }
+
+ public List getList( Document document, String key )
+ {
+ String rawlist = document.get( key );
+
+ if ( rawlist == null )
+ {
+ return null;
+ }
+
+ List ret = new ArrayList();
+ ret.addAll( Arrays.asList( rawlist.split( "\n" ) ) );
+
+ return ret;
+ }
+}
diff --git a/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/bytecode/BytecodeHandlers.java b/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/bytecode/BytecodeHandlers.java
new file mode 100644
index 000000000..b78f9bf7f
--- /dev/null
+++ b/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/bytecode/BytecodeHandlers.java
@@ -0,0 +1,53 @@
+package org.apache.maven.archiva.indexer.bytecode;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.lucene.analysis.Analyzer;
+import org.apache.maven.archiva.indexer.lucene.LuceneEntryConverter;
+import org.apache.maven.archiva.indexer.lucene.LuceneIndexHandlers;
+
+/**
+ * BytecodeHandlers
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class BytecodeHandlers implements LuceneIndexHandlers
+{
+ private BytecodeAnalyzer analyzer;
+
+ private BytecodeEntryConverter converter;
+
+ public BytecodeHandlers()
+ {
+ converter = new BytecodeEntryConverter();
+ analyzer = new BytecodeAnalyzer();
+ }
+
+ public Analyzer getAnalyzer()
+ {
+ return analyzer;
+ }
+
+ public LuceneEntryConverter getConverter()
+ {
+ return converter;
+ }
+}
diff --git a/archiva-base/archiva-common/src/main/java/org/apache/maven/archiva/common/artifact/builder/LayoutArtifactBuilder.java b/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/bytecode/BytecodeKeys.java
index 494a4a7c1..5150d24f3 100644
--- a/archiva-base/archiva-common/src/main/java/org/apache/maven/archiva/common/artifact/builder/LayoutArtifactBuilder.java
+++ b/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/bytecode/BytecodeKeys.java
@@ -1,4 +1,4 @@
-package org.apache.maven.archiva.common.artifact.builder;
+package org.apache.maven.archiva.indexer.bytecode;
/*
* Licensed to the Apache Software Foundation (ASF) under one
@@ -19,18 +19,21 @@ package org.apache.maven.archiva.common.artifact.builder;
* under the License.
*/
-import org.apache.maven.artifact.Artifact;
-import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout;
+import org.apache.maven.archiva.indexer.ArtifactKeys;
/**
- * LayoutArtifactBuilder
+ * BytecodeKeys
*
- * @author <a href="mailto:joakime@apache.org">Joakim Erdfelt</a>
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
* @version $Id$
- *
- * @todo this concept should really exist inside of the {@link ArtifactRepositoryLayout} object in maven itself.
*/
-public interface LayoutArtifactBuilder
+public class BytecodeKeys extends ArtifactKeys
{
- public Artifact build( String pathToArtifact ) throws BuilderException;
+ public static final String CLASSES = "classes";
+
+ public static final String METHODS = "methods";
+
+ public static final String FILES = "files";
+
+ public static final String JDK = "jdk";
}
diff --git a/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/bytecode/BytecodeRecord.java b/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/bytecode/BytecodeRecord.java
new file mode 100644
index 000000000..b23cdb6d0
--- /dev/null
+++ b/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/bytecode/BytecodeRecord.java
@@ -0,0 +1,164 @@
+package org.apache.maven.archiva.indexer.bytecode;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.archiva.indexer.lucene.LuceneRepositoryContentRecord;
+import org.apache.maven.archiva.model.ArchivaArtifact;
+
+import java.util.List;
+
+/**
+ * Lucene Record for Bytecode information.
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class BytecodeRecord implements LuceneRepositoryContentRecord
+{
+ private ArchivaArtifact artifact;
+
+ private String filename;
+
+ private List classes;
+
+ private List methods;
+
+ private List files;
+
+ public ArchivaArtifact getArtifact()
+ {
+ return artifact;
+ }
+
+ public List getClasses()
+ {
+ return classes;
+ }
+
+ public List getFiles()
+ {
+ return files;
+ }
+
+ public List getMethods()
+ {
+ return methods;
+ }
+
+ public String getPrimaryKey()
+ {
+ StringBuffer id = new StringBuffer();
+ id.append( artifact.getGroupId() ).append( ":" );
+ id.append( artifact.getArtifactId() ).append( ":" );
+ id.append( artifact.getVersion() );
+
+ if ( artifact.getClassifier() != null )
+ {
+ id.append( ":" ).append( artifact.getClassifier() );
+ }
+
+ id.append( ":" ).append( artifact.getType() );
+
+ return id.toString();
+ }
+
+ public void setArtifact( ArchivaArtifact artifact )
+ {
+ this.artifact = artifact;
+ }
+
+ public void setClasses( List classes )
+ {
+ this.classes = classes;
+ }
+
+ public void setFiles( List files )
+ {
+ this.files = files;
+ }
+
+ public void setMethods( List methods )
+ {
+ this.methods = methods;
+ }
+
+ public int hashCode()
+ {
+ final int PRIME = 31;
+ int result = 1;
+ result = PRIME * result + ( ( artifact == null ) ? 0 : artifact.hashCode() );
+ return result;
+ }
+
+ public boolean equals( Object obj )
+ {
+ if ( this == obj )
+ {
+ return true;
+ }
+
+ if ( obj == null )
+ {
+ return false;
+ }
+
+ if ( getClass() != obj.getClass() )
+ {
+ return false;
+ }
+
+ final BytecodeRecord other = (BytecodeRecord) obj;
+
+ if ( artifact == null )
+ {
+ if ( other.artifact != null )
+ {
+ return false;
+ }
+ }
+ else if ( !artifact.equals( other.artifact ) )
+ {
+ return false;
+ }
+
+ return true;
+ }
+
+ public String getFilename()
+ {
+ return filename;
+ }
+
+ public void setFilename( String filename )
+ {
+ this.filename = filename;
+ }
+
+ public String toString()
+ {
+ StringBuffer sb = new StringBuffer();
+
+ sb.append( "BytecodeRecord[" );
+ sb.append( "artifact=" ).append( artifact );
+ sb.append( ",filename=" ).append( filename );
+ sb.append( "]" );
+ return sb.toString();
+ }
+}
diff --git a/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/filecontent/FileContentAnalyzer.java b/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/filecontent/FileContentAnalyzer.java
new file mode 100644
index 000000000..84bfcddda
--- /dev/null
+++ b/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/filecontent/FileContentAnalyzer.java
@@ -0,0 +1,48 @@
+package org.apache.maven.archiva.indexer.filecontent;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.lucene.analysis.Analyzer;
+import org.apache.lucene.analysis.TokenStream;
+import org.apache.lucene.analysis.standard.StandardAnalyzer;
+import org.apache.maven.archiva.indexer.lucene.analyzers.FilenamesTokenizer;
+
+import java.io.Reader;
+
+/**
+ * FileContentAnalyzer
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class FileContentAnalyzer extends Analyzer
+{
+ private static final Analyzer STANDARD = new StandardAnalyzer();
+
+ public TokenStream tokenStream( String field, Reader reader )
+ {
+ if ( FileContentKeys.FILENAME.equals( field ) )
+ {
+ return new FilenamesTokenizer( reader );
+ }
+
+ return STANDARD.tokenStream( field, reader );
+ }
+}
diff --git a/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/filecontent/FileContentConverter.java b/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/filecontent/FileContentConverter.java
new file mode 100644
index 000000000..d948048cf
--- /dev/null
+++ b/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/filecontent/FileContentConverter.java
@@ -0,0 +1,67 @@
+package org.apache.maven.archiva.indexer.filecontent;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.lucene.document.Document;
+import org.apache.maven.archiva.indexer.lucene.LuceneDocumentMaker;
+import org.apache.maven.archiva.indexer.lucene.LuceneEntryConverter;
+import org.apache.maven.archiva.indexer.lucene.LuceneRepositoryContentRecord;
+
+import java.io.File;
+import java.text.ParseException;
+
+/**
+ * FileContentConverter
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class FileContentConverter implements LuceneEntryConverter
+{
+
+ public Document convert( LuceneRepositoryContentRecord record )
+ {
+ if ( !( record instanceof FileContentRecord ) )
+ {
+ throw new ClassCastException( "Unable to convert type " + record.getClass().getName() + " to "
+ + FileContentRecord.class.getName() + "." );
+ }
+
+ FileContentRecord filecontent = (FileContentRecord) record;
+
+ LuceneDocumentMaker doc = new LuceneDocumentMaker( filecontent );
+
+ doc.addFieldTokenized( FileContentKeys.FILENAME, filecontent.getFile().getAbsolutePath() );
+ doc.addFieldTokenized( FileContentKeys.CONTENT, filecontent.getContents() );
+
+ return doc.getDocument();
+ }
+
+ public LuceneRepositoryContentRecord convert( Document document ) throws ParseException
+ {
+ FileContentRecord record = new FileContentRecord();
+
+ record.setFile( new File( document.get( FileContentKeys.FILENAME ) ) );
+ record.setContents( document.get( FileContentKeys.CONTENT ) );
+
+ return record;
+ }
+
+}
diff --git a/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/filecontent/FileContentHandlers.java b/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/filecontent/FileContentHandlers.java
new file mode 100644
index 000000000..1a3e5b40f
--- /dev/null
+++ b/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/filecontent/FileContentHandlers.java
@@ -0,0 +1,45 @@
+package org.apache.maven.archiva.indexer.filecontent;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.lucene.analysis.Analyzer;
+import org.apache.maven.archiva.indexer.lucene.LuceneEntryConverter;
+import org.apache.maven.archiva.indexer.lucene.LuceneIndexHandlers;
+
+/**
+ * FileContentHandlers
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class FileContentHandlers implements LuceneIndexHandlers
+{
+ private FileContentAnalyzer analyzer;
+
+ public Analyzer getAnalyzer()
+ {
+ return analyzer;
+ }
+
+ public LuceneEntryConverter getConverter()
+ {
+ return null;
+ }
+}
diff --git a/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/filecontent/FileContentKeys.java b/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/filecontent/FileContentKeys.java
new file mode 100644
index 000000000..e354a4464
--- /dev/null
+++ b/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/filecontent/FileContentKeys.java
@@ -0,0 +1,33 @@
+package org.apache.maven.archiva.indexer.filecontent;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * Lucene Index Keys for the various fields in the FileContent index.
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class FileContentKeys
+{
+ public static final String FILENAME = "filename";
+
+ public static final String CONTENT = "content";
+}
diff --git a/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/filecontent/FileContentRecord.java b/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/filecontent/FileContentRecord.java
new file mode 100644
index 000000000..799078605
--- /dev/null
+++ b/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/filecontent/FileContentRecord.java
@@ -0,0 +1,104 @@
+package org.apache.maven.archiva.indexer.filecontent;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.archiva.indexer.lucene.LuceneRepositoryContentRecord;
+
+import java.io.File;
+
+/**
+ * Lucene record for {@link File} contents.
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class FileContentRecord implements LuceneRepositoryContentRecord
+{
+ private File file;
+
+ private String contents;
+
+ public String getContents()
+ {
+ return contents;
+ }
+
+ public void setContents( String contents )
+ {
+ this.contents = contents;
+ }
+
+ public File getFile()
+ {
+ return file;
+ }
+
+ public void setFile( File file )
+ {
+ this.file = file;
+ }
+
+ public String getPrimaryKey()
+ {
+ return file.getAbsolutePath();
+ }
+
+ public int hashCode()
+ {
+ final int PRIME = 31;
+ int result = 1;
+ result = PRIME * result + ( ( file == null ) ? 0 : file.hashCode() );
+ return result;
+ }
+
+ public boolean equals( Object obj )
+ {
+ if ( this == obj )
+ {
+ return true;
+ }
+
+ if ( obj == null )
+ {
+ return false;
+ }
+
+ if ( getClass() != obj.getClass() )
+ {
+ return false;
+ }
+
+ final FileContentRecord other = (FileContentRecord) obj;
+
+ if ( file == null )
+ {
+ if ( other.file != null )
+ {
+ return false;
+ }
+ }
+ else if ( !file.equals( other.file ) )
+ {
+ return false;
+ }
+ return true;
+ }
+
+}
diff --git a/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/hashcodes/HashcodesAnalyzer.java b/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/hashcodes/HashcodesAnalyzer.java
new file mode 100644
index 000000000..ed45d8e9d
--- /dev/null
+++ b/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/hashcodes/HashcodesAnalyzer.java
@@ -0,0 +1,63 @@
+package org.apache.maven.archiva.indexer.hashcodes;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.lucene.analysis.Analyzer;
+import org.apache.lucene.analysis.LowerCaseFilter;
+import org.apache.lucene.analysis.StopAnalyzer;
+import org.apache.lucene.analysis.StopFilter;
+import org.apache.lucene.analysis.TokenStream;
+import org.apache.lucene.analysis.standard.StandardAnalyzer;
+import org.apache.maven.archiva.indexer.ArtifactKeys;
+import org.apache.maven.archiva.indexer.lucene.analyzers.GroupIdTokenizer;
+import org.apache.maven.archiva.indexer.lucene.analyzers.VersionTokenizer;
+
+import java.io.Reader;
+
+/**
+ * HashcodesAnalyzer
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class HashcodesAnalyzer extends Analyzer
+{
+ private static final Analyzer STANDARD = new StandardAnalyzer();
+
+ public TokenStream tokenStream( String field, Reader reader )
+ {
+ TokenStream tokenStream = null;
+
+ if ( ArtifactKeys.GROUPID.equals( field ) )
+ {
+ tokenStream = new GroupIdTokenizer( reader );
+ }
+ else if ( ArtifactKeys.VERSION.equals( field ) )
+ {
+ tokenStream = new VersionTokenizer( reader );
+ }
+ else
+ {
+ tokenStream = STANDARD.tokenStream( field, reader );
+ }
+
+ return new LowerCaseFilter( new StopFilter( tokenStream, StopAnalyzer.ENGLISH_STOP_WORDS ) );
+ }
+}
diff --git a/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/hashcodes/HashcodesEntryConverter.java b/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/hashcodes/HashcodesEntryConverter.java
new file mode 100644
index 000000000..6df3d2b87
--- /dev/null
+++ b/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/hashcodes/HashcodesEntryConverter.java
@@ -0,0 +1,89 @@
+package org.apache.maven.archiva.indexer.hashcodes;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.lucene.document.Document;
+import org.apache.maven.archiva.indexer.ArtifactKeys;
+import org.apache.maven.archiva.indexer.lucene.LuceneDocumentMaker;
+import org.apache.maven.archiva.indexer.lucene.LuceneEntryConverter;
+import org.apache.maven.archiva.indexer.lucene.LuceneRepositoryContentRecord;
+import org.apache.maven.archiva.model.ArchivaArtifact;
+
+import java.text.ParseException;
+
+/**
+ * Converter for Hashcode records and documents.
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class HashcodesEntryConverter implements LuceneEntryConverter
+{
+
+ public Document convert( LuceneRepositoryContentRecord record )
+ {
+ if ( !( record instanceof HashcodesRecord ) )
+ {
+ throw new ClassCastException( "Unable to convert type " + record.getClass().getName() + " to "
+ + HashcodesRecord.class.getName() + "." );
+ }
+
+ HashcodesRecord hashcodes = (HashcodesRecord) record;
+
+ LuceneDocumentMaker doc = new LuceneDocumentMaker( hashcodes );
+
+ // Artifact Reference
+ doc.addFieldTokenized( ArtifactKeys.GROUPID, hashcodes.getArtifact().getGroupId() );
+ doc.addFieldExact( ArtifactKeys.GROUPID_EXACT, hashcodes.getArtifact().getGroupId() );
+ doc.addFieldTokenized( ArtifactKeys.ARTIFACTID, hashcodes.getArtifact().getArtifactId() );
+ doc.addFieldExact( ArtifactKeys.ARTIFACTID_EXACT, hashcodes.getArtifact().getArtifactId() );
+ doc.addFieldTokenized( ArtifactKeys.VERSION, hashcodes.getArtifact().getVersion() );
+ doc.addFieldExact( ArtifactKeys.VERSION_EXACT, hashcodes.getArtifact().getVersion() );
+ doc.addFieldTokenized( ArtifactKeys.TYPE, hashcodes.getArtifact().getType() );
+ doc.addFieldUntokenized( ArtifactKeys.CLASSIFIER, hashcodes.getArtifact().getClassifier() );
+
+ // Hashcode Specifics
+ doc.addFieldUntokenized( HashcodesKeys.MD5, hashcodes.getArtifact().getModel().getChecksumMD5() );
+ doc.addFieldUntokenized( HashcodesKeys.SHA1, hashcodes.getArtifact().getModel().getChecksumSHA1() );
+
+ return doc.getDocument();
+ }
+
+ public LuceneRepositoryContentRecord convert( Document document ) throws ParseException
+ {
+ HashcodesRecord record = new HashcodesRecord();
+
+ // Artifact Reference
+ String groupId = document.get( ArtifactKeys.GROUPID );
+ String artifactId = document.get( ArtifactKeys.ARTIFACTID );
+ String version = document.get( ArtifactKeys.VERSION );
+ String classifier = document.get( ArtifactKeys.CLASSIFIER );
+ String type = document.get( ArtifactKeys.TYPE );
+
+ ArchivaArtifact artifact = new ArchivaArtifact( groupId, artifactId, version, classifier, type );
+ record.setArtifact( artifact );
+
+ // Hashcode Specifics
+ record.getArtifact().getModel().setChecksumMD5( document.get( HashcodesKeys.MD5 ) );
+ record.getArtifact().getModel().setChecksumSHA1( document.get( HashcodesKeys.SHA1 ) );
+
+ return record;
+ }
+}
diff --git a/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/hashcodes/HashcodesHandlers.java b/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/hashcodes/HashcodesHandlers.java
new file mode 100644
index 000000000..fb23f0489
--- /dev/null
+++ b/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/hashcodes/HashcodesHandlers.java
@@ -0,0 +1,53 @@
+package org.apache.maven.archiva.indexer.hashcodes;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.lucene.analysis.Analyzer;
+import org.apache.maven.archiva.indexer.lucene.LuceneEntryConverter;
+import org.apache.maven.archiva.indexer.lucene.LuceneIndexHandlers;
+
+/**
+ * HashcodesHandlers
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class HashcodesHandlers implements LuceneIndexHandlers
+{
+ private HashcodesAnalyzer analyzer;
+
+ private HashcodesEntryConverter converter;
+
+ public HashcodesHandlers()
+ {
+ converter = new HashcodesEntryConverter();
+ analyzer = new HashcodesAnalyzer();
+ }
+
+ public Analyzer getAnalyzer()
+ {
+ return analyzer;
+ }
+
+ public LuceneEntryConverter getConverter()
+ {
+ return converter;
+ }
+}
diff --git a/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/hashcodes/HashcodesKeys.java b/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/hashcodes/HashcodesKeys.java
new file mode 100644
index 000000000..72f620aad
--- /dev/null
+++ b/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/hashcodes/HashcodesKeys.java
@@ -0,0 +1,35 @@
+package org.apache.maven.archiva.indexer.hashcodes;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.archiva.indexer.ArtifactKeys;
+
+/**
+ * Lucene Index Keys for the various fields in the Hashcodes Index.
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class HashcodesKeys extends ArtifactKeys
+{
+ public static final String MD5 = "md5";
+
+ public static final String SHA1 = "sha1";
+}
diff --git a/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/hashcodes/HashcodesRecord.java b/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/hashcodes/HashcodesRecord.java
new file mode 100644
index 000000000..21a13bdae
--- /dev/null
+++ b/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/hashcodes/HashcodesRecord.java
@@ -0,0 +1,126 @@
+package org.apache.maven.archiva.indexer.hashcodes;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.archiva.indexer.lucene.LuceneRepositoryContentRecord;
+import org.apache.maven.archiva.model.ArchivaArtifact;
+
+/**
+ * Lucene record for {@link ArchivaArtifact} hashcodes information.
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class HashcodesRecord implements LuceneRepositoryContentRecord
+{
+ private ArchivaArtifact artifact;
+
+ private String filename;
+
+ public ArchivaArtifact getArtifact()
+ {
+ return artifact;
+ }
+
+ public void setArtifact( ArchivaArtifact artifact )
+ {
+ this.artifact = artifact;
+ }
+
+ public String getPrimaryKey()
+ {
+ StringBuffer id = new StringBuffer();
+ id.append( artifact.getGroupId() ).append( ":" );
+ id.append( artifact.getArtifactId() ).append( ":" );
+ id.append( artifact.getVersion() );
+
+ if ( artifact.getClassifier() != null )
+ {
+ id.append( ":" ).append( artifact.getClassifier() );
+ }
+
+ id.append( ":" ).append( artifact.getType() );
+
+ return id.toString();
+ }
+
+ public int hashCode()
+ {
+ final int PRIME = 31;
+ int result = 1;
+ result = PRIME * result + ( ( artifact == null ) ? 0 : artifact.hashCode() );
+ return result;
+ }
+
+ public boolean equals( Object obj )
+ {
+ if ( this == obj )
+ {
+ return true;
+ }
+
+ if ( obj == null )
+ {
+ return false;
+ }
+
+ if ( getClass() != obj.getClass() )
+ {
+ return false;
+ }
+
+ final HashcodesRecord other = (HashcodesRecord) obj;
+
+ if ( artifact == null )
+ {
+ if ( other.artifact != null )
+ {
+ return false;
+ }
+ }
+ else if ( !artifact.equals( other.artifact ) )
+ {
+ return false;
+ }
+
+ return true;
+ }
+
+ public String getFilename()
+ {
+ return filename;
+ }
+
+ public void setFilename( String filename )
+ {
+ this.filename = filename;
+ }
+
+ public String toString()
+ {
+ StringBuffer sb = new StringBuffer();
+
+ sb.append( "HashcodesRecord[" );
+ sb.append( "artifact=" ).append( artifact );
+ sb.append( ",filename=" ).append( filename );
+ sb.append( "]" );
+ return sb.toString();
+ }
+}
diff --git a/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/lucene/LuceneDocumentMaker.java b/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/lucene/LuceneDocumentMaker.java
new file mode 100644
index 000000000..795b2c94a
--- /dev/null
+++ b/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/lucene/LuceneDocumentMaker.java
@@ -0,0 +1,114 @@
+package org.apache.maven.archiva.indexer.lucene;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.lang.StringUtils;
+import org.apache.lucene.document.Document;
+import org.apache.lucene.document.Field;
+
+import java.util.List;
+
+/**
+ * LuceneDocumentMaker - a utility class for making lucene documents.
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class LuceneDocumentMaker
+{
+ public static final String PRIMARY_KEY = "pk";
+
+ private Document document;
+
+ /**
+ * Construct a LuceneDocumentMaker based on the record provider.
+ *
+ * @param record the record.
+ * @throws IllegalArgumentException if the primary key is invalid.
+ */
+ public LuceneDocumentMaker( LuceneRepositoryContentRecord record ) throws IllegalArgumentException
+ {
+ if ( record == null )
+ {
+ throw new IllegalArgumentException( "Not allowed to have a null record provider." );
+ }
+
+ String primaryKey = record.getPrimaryKey();
+
+ if ( primaryKey == null )
+ {
+ throw new IllegalArgumentException( "Not allowed to have a null primary key." );
+ }
+
+ if ( primaryKey.trim().length() <= 0 )
+ {
+ throw new IllegalArgumentException( "Not allowed to have an empty primary key." );
+ }
+
+ document = new Document();
+
+ document.add( new Field( PRIMARY_KEY, primaryKey, Field.Store.NO, Field.Index.UN_TOKENIZED ) );
+ }
+
+ public LuceneDocumentMaker addFieldTokenized( String key, String value )
+ {
+ if ( value != null )
+ {
+ document.add( new Field( key, value, Field.Store.YES, Field.Index.TOKENIZED ) );
+ }
+
+ return this;
+ }
+
+ public LuceneDocumentMaker addFieldTokenized( String key, List list )
+ {
+ if ( ( list != null ) && ( !list.isEmpty() ) )
+ {
+ return addFieldTokenized( key, StringUtils.join( list.iterator(), "\n" ) );
+ }
+
+ return this;
+ }
+
+ public LuceneDocumentMaker addFieldUntokenized( String name, String value )
+ {
+ if ( value != null )
+ {
+ document.add( new Field( name, value, Field.Store.YES, Field.Index.UN_TOKENIZED ) );
+ }
+
+ return this;
+ }
+
+ public LuceneDocumentMaker addFieldExact( String name, String value )
+ {
+ if ( value != null )
+ {
+ document.add( new Field( name, value, Field.Store.NO, Field.Index.UN_TOKENIZED ) );
+ }
+
+ return this;
+ }
+
+ public Document getDocument()
+ {
+ return this.document;
+ }
+}
diff --git a/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/lucene/LuceneIndexRecordConverter.java b/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/lucene/LuceneEntryConverter.java
index 4f67b7006..6b6437063 100644
--- a/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/lucene/LuceneIndexRecordConverter.java
+++ b/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/lucene/LuceneEntryConverter.java
@@ -20,16 +20,15 @@ package org.apache.maven.archiva.indexer.lucene;
*/
import org.apache.lucene.document.Document;
-import org.apache.maven.archiva.indexer.record.RepositoryIndexRecord;
import java.text.ParseException;
/**
- * Converts repository records to Lucene documents.
+ * A converter for {@link LuceneRepositoryContentRecord} to Lucene {@link Document} objects and back.
*
* @author <a href="mailto:brett@apache.org">Brett Porter</a>
*/
-public interface LuceneIndexRecordConverter
+public interface LuceneEntryConverter
{
/**
* Convert an index record to a Lucene document.
@@ -37,7 +36,7 @@ public interface LuceneIndexRecordConverter
* @param record the record
* @return the document
*/
- Document convert( RepositoryIndexRecord record );
+ Document convert( LuceneRepositoryContentRecord record );
/**
* Convert a Lucene document to an index record.
@@ -46,6 +45,6 @@ public interface LuceneIndexRecordConverter
* @return the record
* @throws java.text.ParseException if there is a problem parsing a field (specifically, dates)
*/
- RepositoryIndexRecord convert( Document document )
+ LuceneRepositoryContentRecord convert( Document document )
throws ParseException;
}
diff --git a/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/lucene/LuceneIndexHandlers.java b/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/lucene/LuceneIndexHandlers.java
new file mode 100644
index 000000000..4dd25c316
--- /dev/null
+++ b/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/lucene/LuceneIndexHandlers.java
@@ -0,0 +1,45 @@
+package org.apache.maven.archiva.indexer.lucene;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.lucene.analysis.Analyzer;
+
+/**
+ * The important bits and pieces for handling a specific lucene index
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public interface LuceneIndexHandlers
+{
+ /**
+ * Get the converter to use with this index.
+ *
+ * @return the converter to use.
+ */
+ public LuceneEntryConverter getConverter();
+
+ /**
+ * Get the analyzer to user with this index.
+ *
+ * @return the analzer to use.
+ */
+ public Analyzer getAnalyzer();
+}
diff --git a/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/lucene/LuceneMinimalIndexRecordConverter.java b/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/lucene/LuceneMinimalIndexRecordConverter.java
deleted file mode 100644
index 6130e888e..000000000
--- a/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/lucene/LuceneMinimalIndexRecordConverter.java
+++ /dev/null
@@ -1,87 +0,0 @@
-package org.apache.maven.archiva.indexer.lucene;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import org.apache.commons.lang.StringUtils;
-import org.apache.lucene.document.DateTools;
-import org.apache.lucene.document.Document;
-import org.apache.lucene.document.Field;
-import org.apache.lucene.document.NumberTools;
-import org.apache.maven.archiva.indexer.record.MinimalArtifactIndexRecord;
-import org.apache.maven.archiva.indexer.record.MinimalIndexRecordFields;
-import org.apache.maven.archiva.indexer.record.RepositoryIndexRecord;
-
-import java.text.ParseException;
-import java.util.Arrays;
-
-/**
- * Convert the minimal index record to a Lucene document.
- *
- * @author <a href="mailto:brett@apache.org">Brett Porter</a>
- */
-public class LuceneMinimalIndexRecordConverter
- implements LuceneIndexRecordConverter
-{
- public Document convert( RepositoryIndexRecord record )
- {
- MinimalArtifactIndexRecord rec = (MinimalArtifactIndexRecord) record;
-
- Document document = new Document();
- addTokenizedField( document, MinimalIndexRecordFields.FILENAME, rec.getFilename() );
- addUntokenizedField( document, MinimalIndexRecordFields.LAST_MODIFIED,
- DateTools.timeToString( rec.getLastModified(), DateTools.Resolution.SECOND ) );
- addUntokenizedField( document, MinimalIndexRecordFields.FILE_SIZE, NumberTools.longToString( rec.getSize() ) );
- addUntokenizedField( document, MinimalIndexRecordFields.MD5, rec.getMd5Checksum() );
- addTokenizedField( document, MinimalIndexRecordFields.CLASSES,
- StringUtils.join( rec.getClasses().iterator(), "\n" ) );
-
- return document;
- }
-
- public RepositoryIndexRecord convert( Document document )
- throws ParseException
- {
- MinimalArtifactIndexRecord record = new MinimalArtifactIndexRecord();
-
- record.setFilename( document.get( MinimalIndexRecordFields.FILENAME ) );
- record.setLastModified( DateTools.stringToTime( document.get( MinimalIndexRecordFields.LAST_MODIFIED ) ) );
- record.setSize( NumberTools.stringToLong( document.get( MinimalIndexRecordFields.FILE_SIZE ) ) );
- record.setMd5Checksum( document.get( MinimalIndexRecordFields.MD5 ) );
- record.setClasses( Arrays.asList( document.get( MinimalIndexRecordFields.CLASSES ).split( "\n" ) ) );
-
- return record;
- }
-
- private static void addUntokenizedField( Document document, String name, String value )
- {
- if ( value != null )
- {
- document.add( new Field( name, value, Field.Store.YES, Field.Index.UN_TOKENIZED ) );
- }
- }
-
- private static void addTokenizedField( Document document, String name, String value )
- {
- if ( value != null )
- {
- document.add( new Field( name, value, Field.Store.YES, Field.Index.TOKENIZED ) );
- }
- }
-}
diff --git a/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/lucene/LuceneRepositoryArtifactIndex.java b/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/lucene/LuceneRepositoryArtifactIndex.java
deleted file mode 100644
index c0a02935d..000000000
--- a/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/lucene/LuceneRepositoryArtifactIndex.java
+++ /dev/null
@@ -1,604 +0,0 @@
-package org.apache.maven.archiva.indexer.lucene;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import org.apache.lucene.analysis.Analyzer;
-import org.apache.lucene.analysis.CharTokenizer;
-import org.apache.lucene.analysis.TokenStream;
-import org.apache.lucene.analysis.standard.StandardAnalyzer;
-import org.apache.lucene.document.Document;
-import org.apache.lucene.document.Field;
-import org.apache.lucene.index.IndexModifier;
-import org.apache.lucene.index.IndexReader;
-import org.apache.lucene.index.IndexWriter;
-import org.apache.lucene.index.Term;
-import org.apache.lucene.index.TermEnum;
-import org.apache.lucene.search.BooleanClause;
-import org.apache.lucene.search.BooleanQuery;
-import org.apache.lucene.search.Hits;
-import org.apache.lucene.search.IndexSearcher;
-import org.apache.lucene.search.MatchAllDocsQuery;
-import org.apache.lucene.search.TermQuery;
-import org.apache.maven.archiva.indexer.RepositoryArtifactIndex;
-import org.apache.maven.archiva.indexer.RepositoryIndexException;
-import org.apache.maven.archiva.indexer.RepositoryIndexSearchException;
-import org.apache.maven.archiva.indexer.query.Query;
-import org.apache.maven.archiva.indexer.record.MinimalIndexRecordFields;
-import org.apache.maven.archiva.indexer.record.RepositoryIndexRecord;
-import org.apache.maven.archiva.indexer.record.RepositoryIndexRecordFactory;
-import org.apache.maven.archiva.indexer.record.StandardIndexRecordFields;
-import org.apache.maven.artifact.Artifact;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.Reader;
-import java.text.ParseException;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.LinkedHashSet;
-import java.util.List;
-import java.util.Set;
-
-/**
- * Lucene implementation of a repository index.
- *
- * @author <a href="mailto:brett@apache.org">Brett Porter</a>
- */
-public class LuceneRepositoryArtifactIndex
- implements RepositoryArtifactIndex
-{
- /**
- * The location of the index on the file system.
- */
- private File indexLocation;
-
- /**
- * Convert repository records to Lucene documents.
- */
- private LuceneIndexRecordConverter converter;
-
- private static final String FLD_PK = "pk";
-
- private static Analyzer luceneAnalyzer = new LuceneAnalyzer();
-
- private static long lastUpdatedTime = 0;
-
- public LuceneRepositoryArtifactIndex( File indexPath, LuceneIndexRecordConverter converter )
- {
- this.indexLocation = indexPath;
- this.converter = converter;
- }
-
- public void indexRecords( Collection records )
- throws RepositoryIndexException
- {
- deleteRecords( records );
-
- addRecords( records );
- }
-
- private void addRecords( Collection records )
- throws RepositoryIndexException
- {
- IndexWriter indexWriter;
- try
- {
- indexWriter = new IndexWriter( indexLocation, getAnalyzer(), !exists() );
- }
- catch ( IOException e )
- {
- throw new RepositoryIndexException( "Unable to open index", e );
- }
-
- try
- {
- for ( Iterator i = records.iterator(); i.hasNext(); )
- {
- RepositoryIndexRecord record = (RepositoryIndexRecord) i.next();
-
- if ( record != null )
- {
- Document document = converter.convert( record );
- document.add(
- new Field( FLD_PK, record.getPrimaryKey(), Field.Store.NO, Field.Index.UN_TOKENIZED ) );
-
- indexWriter.addDocument( document );
- }
- }
-
- indexWriter.optimize();
- }
- catch ( IOException e )
- {
- throw new RepositoryIndexException( "Failed to add an index document", e );
- }
- finally
- {
- closeQuietly( indexWriter );
- lastUpdatedTime = System.currentTimeMillis();
- }
- }
-
- public static Analyzer getAnalyzer()
- {
- return luceneAnalyzer;
- }
-
- private static class LuceneAnalyzer
- extends Analyzer
- {
- private static final Analyzer STANDARD = new StandardAnalyzer();
-
- public TokenStream tokenStream( String field, final Reader reader )
- {
- // do not tokenize field called 'element'
- if ( StandardIndexRecordFields.DEPENDENCIES.equals( field ) )
- {
- return new CharTokenizer( reader )
- {
- protected boolean isTokenChar( char c )
- {
- return c != '\n';
- }
- };
- }
- else if ( StandardIndexRecordFields.FILES.equals( field ) )
- {
- return new CharTokenizer( reader )
- {
- protected boolean isTokenChar( char c )
- {
- return c != '\n' && c != '/';
- }
- };
- }
- else
- if ( StandardIndexRecordFields.CLASSES.equals( field ) || MinimalIndexRecordFields.CLASSES.equals( field ) )
- {
- return new CharTokenizer( reader )
- {
- protected boolean isTokenChar( char c )
- {
- return c != '\n' && c != '.';
- }
-
- protected char normalize( char c )
- {
- return Character.toLowerCase( c );
- }
- };
- }
- else if ( StandardIndexRecordFields.GROUPID.equals( field ) )
- {
- return new CharTokenizer( reader )
- {
- protected boolean isTokenChar( char c )
- {
- return c != '.';
- }
-
- protected char normalize( char c )
- {
- return Character.toLowerCase( c );
- }
- };
- }
- else if ( StandardIndexRecordFields.VERSION.equals( field ) ||
- StandardIndexRecordFields.BASE_VERSION.equals( field ) )
- {
- return new CharTokenizer( reader )
- {
- protected boolean isTokenChar( char c )
- {
- return c != '-';
- }
- };
- }
- else if ( StandardIndexRecordFields.FILENAME.equals( field ) ||
- MinimalIndexRecordFields.FILENAME.equals( field ) )
- {
- return new CharTokenizer( reader )
- {
- protected boolean isTokenChar( char c )
- {
- return c != '-' && c != '.' && c != '/';
- }
- };
- }
- else
- {
- // use standard analyzer
- return STANDARD.tokenStream( field, reader );
- }
- }
- }
-
- public void deleteRecords( Collection records )
- throws RepositoryIndexException
- {
- if ( exists() )
- {
- IndexReader indexReader = null;
- try
- {
- indexReader = IndexReader.open( indexLocation );
-
- for ( Iterator i = records.iterator(); i.hasNext(); )
- {
- RepositoryIndexRecord record = (RepositoryIndexRecord) i.next();
-
- if ( record != null )
- {
- Term term = new Term( FLD_PK, record.getPrimaryKey() );
-
- indexReader.deleteDocuments( term );
- }
- }
- }
- catch ( IOException e )
- {
- throw new RepositoryIndexException( "Error deleting document: " + e.getMessage(), e );
- }
- finally
- {
- closeQuietly( indexReader );
- }
- }
- }
-
- public Collection getAllRecords()
- throws RepositoryIndexSearchException
- {
- return search( new LuceneQuery( new MatchAllDocsQuery() ) );
- }
-
- public Collection getAllRecordKeys()
- throws RepositoryIndexException
- {
- return getAllFieldValues( FLD_PK );
- }
-
- private List getAllFieldValues( String fieldName )
- throws RepositoryIndexException
- {
- List keys = new ArrayList();
-
- if ( exists() )
- {
- IndexReader indexReader = null;
- TermEnum terms = null;
- try
- {
- indexReader = IndexReader.open( indexLocation );
-
- terms = indexReader.terms( new Term( fieldName, "" ) );
- while ( fieldName.equals( terms.term().field() ) )
- {
- keys.add( terms.term().text() );
-
- if ( !terms.next() )
- {
- break;
- }
- }
- }
- catch ( IOException e )
- {
- throw new RepositoryIndexException( "Error deleting document: " + e.getMessage(), e );
- }
- finally
- {
- closeQuietly( indexReader );
- closeQuietly( terms );
- }
- }
- return keys;
- }
-
- public void indexArtifacts( List artifacts, RepositoryIndexRecordFactory factory )
- throws RepositoryIndexException
- {
- IndexModifier indexModifier = null;
- try
- {
- indexModifier = new IndexModifier( indexLocation, getAnalyzer(), !exists() );
-
- for ( Iterator i = artifacts.iterator(); i.hasNext(); )
- {
- Artifact artifact = (Artifact) i.next();
- RepositoryIndexRecord record = factory.createRecord( artifact );
-
- if ( record != null )
- {
- Term term = new Term( FLD_PK, record.getPrimaryKey() );
-
- indexModifier.deleteDocuments( term );
-
- Document document = converter.convert( record );
- document.add(
- new Field( FLD_PK, record.getPrimaryKey(), Field.Store.NO, Field.Index.UN_TOKENIZED ) );
-
- indexModifier.addDocument( document );
- }
- }
- indexModifier.optimize();
- }
- catch ( IOException e )
- {
- throw new RepositoryIndexException( "Error updating index: " + e.getMessage(), e );
- }
- finally
- {
- closeQuietly( indexModifier );
- lastUpdatedTime = System.currentTimeMillis();
- }
- }
-
- public void indexArtifact( Artifact artifact, RepositoryIndexRecordFactory factory )
- throws RepositoryIndexException
- {
- IndexModifier indexModifier = null;
- try
- {
- indexModifier = new IndexModifier( indexLocation, getAnalyzer(), !exists() );
-
- RepositoryIndexRecord record = factory.createRecord( artifact );
-
- if ( record != null )
- {
- Term term = new Term( FLD_PK, record.getPrimaryKey() );
-
- indexModifier.deleteDocuments( term );
-
- Document document = converter.convert( record );
- document.add( new Field( FLD_PK, record.getPrimaryKey(), Field.Store.NO, Field.Index.UN_TOKENIZED ) );
-
- indexModifier.addDocument( document );
- }
- indexModifier.optimize();
- }
- catch ( IOException e )
- {
- throw new RepositoryIndexException( "Error updating index: " + e.getMessage(), e );
- }
- finally
- {
- closeQuietly( indexModifier );
- lastUpdatedTime = System.currentTimeMillis();
- }
- }
-
- public List getAllGroupIds()
- throws RepositoryIndexException
- {
- return getAllFieldValues( StandardIndexRecordFields.GROUPID_EXACT );
- }
-
- public List getArtifactIds( String groupId )
- throws RepositoryIndexSearchException
- {
- return searchField( new TermQuery( new Term( StandardIndexRecordFields.GROUPID_EXACT, groupId ) ),
- StandardIndexRecordFields.ARTIFACTID );
- }
-
- public List getVersions( String groupId, String artifactId )
- throws RepositoryIndexSearchException
- {
- BooleanQuery query = new BooleanQuery();
- query.add( new TermQuery( new Term( StandardIndexRecordFields.GROUPID_EXACT, groupId ) ),
- BooleanClause.Occur.MUST );
- query.add( new TermQuery( new Term( StandardIndexRecordFields.ARTIFACTID_EXACT, artifactId ) ),
- BooleanClause.Occur.MUST );
-
- return searchField( query, StandardIndexRecordFields.VERSION );
- }
-
- public long getLastUpdatedTime()
- {
- return lastUpdatedTime;
- }
-
- private List searchField( org.apache.lucene.search.Query luceneQuery, String fieldName )
- throws RepositoryIndexSearchException
- {
- Set results = new LinkedHashSet();
-
- IndexSearcher searcher;
- try
- {
- searcher = new IndexSearcher( indexLocation.getAbsolutePath() );
- }
- catch ( IOException e )
- {
- throw new RepositoryIndexSearchException( "Unable to open index: " + e.getMessage(), e );
- }
-
- try
- {
- Hits hits = searcher.search( luceneQuery );
- for ( int i = 0; i < hits.length(); i++ )
- {
- Document doc = hits.doc( i );
-
- results.add( doc.get( fieldName ) );
- }
- }
- catch ( IOException e )
- {
- throw new RepositoryIndexSearchException( "Unable to search index: " + e.getMessage(), e );
- }
- finally
- {
- closeQuietly( searcher );
- }
- return new ArrayList( results );
- }
-
- public boolean exists()
- throws RepositoryIndexException
- {
- if ( IndexReader.indexExists( indexLocation ) )
- {
- return true;
- }
- else if ( !indexLocation.exists() )
- {
- return false;
- }
- else if ( indexLocation.isDirectory() )
- {
- if ( indexLocation.listFiles().length > 1 )
- {
- throw new RepositoryIndexException( indexLocation + " is not a valid index directory." );
- }
- else
- {
- return false;
- }
- }
- else
- {
- throw new RepositoryIndexException( indexLocation + " is not a directory." );
- }
- }
-
- public List search( Query query )
- throws RepositoryIndexSearchException
- {
- LuceneQuery lQuery = (LuceneQuery) query;
-
- org.apache.lucene.search.Query luceneQuery = lQuery.getLuceneQuery();
-
- IndexSearcher searcher;
- try
- {
- searcher = new IndexSearcher( indexLocation.getAbsolutePath() );
- }
- catch ( IOException e )
- {
- throw new RepositoryIndexSearchException( "Unable to open index: " + e.getMessage(), e );
- }
-
- List records = new ArrayList();
- try
- {
- Hits hits = searcher.search( luceneQuery );
- for ( int i = 0; i < hits.length(); i++ )
- {
- Document doc = hits.doc( i );
-
- records.add( converter.convert( doc ) );
- }
- }
- catch ( IOException e )
- {
- throw new RepositoryIndexSearchException( "Unable to search index: " + e.getMessage(), e );
- }
- catch ( ParseException e )
- {
- throw new RepositoryIndexSearchException( "Unable to search index: " + e.getMessage(), e );
- }
- finally
- {
- closeQuietly( searcher );
- }
-
- return records;
- }
-
- private static void closeQuietly( IndexSearcher searcher )
- {
- try
- {
- if ( searcher != null )
- {
- searcher.close();
- }
- }
- catch ( IOException e )
- {
- // ignore
- }
- }
-
- private static void closeQuietly( TermEnum terms )
- throws RepositoryIndexException
- {
- if ( terms != null )
- {
- try
- {
- terms.close();
- }
- catch ( IOException e )
- {
- // ignore
- }
- }
- }
-
- private static void closeQuietly( IndexWriter indexWriter )
- throws RepositoryIndexException
- {
- try
- {
- if ( indexWriter != null )
- {
- indexWriter.close();
- }
- }
- catch ( IOException e )
- {
- // write should compain if it can't be closed, data probably not persisted
- throw new RepositoryIndexException( e.getMessage(), e );
- }
- }
-
- private static void closeQuietly( IndexModifier indexModifier )
- {
- if ( indexModifier != null )
- {
- try
- {
- indexModifier.close();
- }
- catch ( IOException e )
- {
- // ignore
- }
- }
- }
-
- private static void closeQuietly( IndexReader reader )
- {
- try
- {
- if ( reader != null )
- {
- reader.close();
- }
- }
- catch ( IOException e )
- {
- // ignore
- }
- }
-}
diff --git a/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/lucene/LuceneRepositoryArtifactIndexFactory.java b/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/lucene/LuceneRepositoryArtifactIndexFactory.java
deleted file mode 100644
index fae73a535..000000000
--- a/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/lucene/LuceneRepositoryArtifactIndexFactory.java
+++ /dev/null
@@ -1,45 +0,0 @@
-package org.apache.maven.archiva.indexer.lucene;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import org.apache.maven.archiva.indexer.RepositoryArtifactIndex;
-import org.apache.maven.archiva.indexer.RepositoryArtifactIndexFactory;
-
-import java.io.File;
-
-/**
- * Factory for Lucene artifact index instances.
- *
- * @author <a href="mailto:brett@apache.org">Brett Porter</a>
- * @plexus.component role="org.apache.maven.archiva.indexer.RepositoryArtifactIndexFactory" role-hint="lucene"
- */
-public class LuceneRepositoryArtifactIndexFactory
- implements RepositoryArtifactIndexFactory
-{
- public RepositoryArtifactIndex createStandardIndex( File indexPath )
- {
- return new LuceneRepositoryArtifactIndex( indexPath, new LuceneStandardIndexRecordConverter() );
- }
-
- public RepositoryArtifactIndex createMinimalIndex( File indexPath )
- {
- return new LuceneRepositoryArtifactIndex( indexPath, new LuceneMinimalIndexRecordConverter() );
- }
-}
diff --git a/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/lucene/LuceneRepositoryContentIndex.java b/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/lucene/LuceneRepositoryContentIndex.java
new file mode 100644
index 000000000..143525ccf
--- /dev/null
+++ b/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/lucene/LuceneRepositoryContentIndex.java
@@ -0,0 +1,469 @@
+package org.apache.maven.archiva.indexer.lucene;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.lucene.document.Document;
+import org.apache.lucene.index.IndexModifier;
+import org.apache.lucene.index.IndexReader;
+import org.apache.lucene.index.IndexWriter;
+import org.apache.lucene.index.Term;
+import org.apache.lucene.index.TermEnum;
+import org.apache.lucene.search.Hits;
+import org.apache.lucene.search.IndexSearcher;
+import org.apache.lucene.search.MatchAllDocsQuery;
+import org.apache.maven.archiva.indexer.RepositoryContentIndex;
+import org.apache.maven.archiva.indexer.RepositoryIndexException;
+import org.apache.maven.archiva.indexer.RepositoryIndexSearchException;
+import org.apache.maven.archiva.indexer.query.Query;
+
+import java.io.File;
+import java.io.IOException;
+import java.text.ParseException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+
+/**
+ * Lucene implementation of a repository index.
+ *
+ * @author <a href="mailto:brett@apache.org">Brett Porter</a>
+ */
+public class LuceneRepositoryContentIndex implements RepositoryContentIndex
+{
+ /**
+ * The max field length for a field in a document.
+ */
+ private static final int MAX_FIELD_LENGTH = 40000;
+
+ /**
+ * The location of the index on the file system.
+ */
+ private File indexLocation;
+
+ /**
+ * The Lucene Index Handlers
+ */
+ private LuceneIndexHandlers indexHandlers;
+
+ public LuceneRepositoryContentIndex( File indexDir, LuceneIndexHandlers handlers )
+ {
+ this.indexLocation = indexDir;
+ this.indexHandlers = handlers;
+ }
+
+ public void indexRecords( Collection records ) throws RepositoryIndexException
+ {
+ deleteRecords( records );
+
+ addRecords( records );
+ }
+
+ public void modifyRecords( Collection records ) throws RepositoryIndexException
+ {
+ IndexModifier indexModifier = null;
+ try
+ {
+ indexModifier = new IndexModifier( indexLocation, indexHandlers.getAnalyzer(), !exists() );
+ indexModifier.setMaxFieldLength( MAX_FIELD_LENGTH );
+
+ for ( Iterator i = records.iterator(); i.hasNext(); )
+ {
+ LuceneRepositoryContentRecord record = (LuceneRepositoryContentRecord) i.next();
+
+ if ( record != null )
+ {
+ Term term = new Term( LuceneDocumentMaker.PRIMARY_KEY, record.getPrimaryKey() );
+
+ indexModifier.deleteDocuments( term );
+
+ Document document = indexHandlers.getConverter().convert( record );
+
+ indexModifier.addDocument( document );
+ }
+ }
+ indexModifier.optimize();
+ }
+ catch ( IOException e )
+ {
+ throw new RepositoryIndexException( "Error updating index: " + e.getMessage(), e );
+ }
+ finally
+ {
+ closeQuietly( indexModifier );
+ }
+ }
+
+ public void modifyRecord( LuceneRepositoryContentRecord record ) throws RepositoryIndexException
+ {
+ IndexModifier indexModifier = null;
+ try
+ {
+ indexModifier = new IndexModifier( indexLocation, indexHandlers.getAnalyzer(), !exists() );
+ indexModifier.setMaxFieldLength( MAX_FIELD_LENGTH );
+
+ if ( record != null )
+ {
+ Term term = new Term( LuceneDocumentMaker.PRIMARY_KEY, record.getPrimaryKey() );
+
+ indexModifier.deleteDocuments( term );
+
+ Document document = indexHandlers.getConverter().convert( record );
+
+ indexModifier.addDocument( document );
+ }
+ indexModifier.optimize();
+ }
+ catch ( IOException e )
+ {
+ throw new RepositoryIndexException( "Error updating index: " + e.getMessage(), e );
+ }
+ finally
+ {
+ closeQuietly( indexModifier );
+ }
+ }
+
+ private void addRecords( Collection records ) throws RepositoryIndexException
+ {
+ IndexWriter indexWriter;
+ try
+ {
+ indexWriter = new IndexWriter( indexLocation, indexHandlers.getAnalyzer(), !exists() );
+ indexWriter.setMaxFieldLength( MAX_FIELD_LENGTH );
+ }
+ catch ( IOException e )
+ {
+ throw new RepositoryIndexException( "Unable to open index", e );
+ }
+
+ try
+ {
+ for ( Iterator i = records.iterator(); i.hasNext(); )
+ {
+ LuceneRepositoryContentRecord record = (LuceneRepositoryContentRecord) i.next();
+
+ if ( record != null )
+ {
+ Document document = indexHandlers.getConverter().convert( record );
+
+ indexWriter.addDocument( document );
+ }
+ }
+
+ indexWriter.optimize();
+ }
+ catch ( IOException e )
+ {
+ throw new RepositoryIndexException( "Failed to add an index document", e );
+ }
+ finally
+ {
+ closeQuietly( indexWriter );
+ }
+ }
+
+ public void deleteRecords( Collection records ) throws RepositoryIndexException
+ {
+ if ( exists() )
+ {
+ IndexReader indexReader = null;
+ try
+ {
+ indexReader = IndexReader.open( indexLocation );
+
+ for ( Iterator i = records.iterator(); i.hasNext(); )
+ {
+ LuceneRepositoryContentRecord record = (LuceneRepositoryContentRecord) i.next();
+
+ if ( record != null )
+ {
+ Term term = new Term( LuceneDocumentMaker.PRIMARY_KEY, record.getPrimaryKey() );
+
+ indexReader.deleteDocuments( term );
+ }
+ }
+ }
+ catch ( IOException e )
+ {
+ throw new RepositoryIndexException( "Error deleting document: " + e.getMessage(), e );
+ }
+ finally
+ {
+ closeQuietly( indexReader );
+ }
+ }
+ }
+
+ public Collection getAllRecords() throws RepositoryIndexSearchException
+ {
+ return search( new LuceneQuery( new MatchAllDocsQuery() ) );
+ }
+
+ public Collection getAllRecordKeys() throws RepositoryIndexException
+ {
+ return getAllFieldValues( LuceneDocumentMaker.PRIMARY_KEY );
+ }
+
+ private List getAllFieldValues( String fieldName ) throws RepositoryIndexException
+ {
+ List keys = new ArrayList();
+
+ if ( exists() )
+ {
+ IndexReader indexReader = null;
+ TermEnum terms = null;
+ try
+ {
+ indexReader = IndexReader.open( indexLocation );
+
+ terms = indexReader.terms( new Term( fieldName, "" ) );
+ while ( fieldName.equals( terms.term().field() ) )
+ {
+ keys.add( terms.term().text() );
+
+ if ( !terms.next() )
+ {
+ break;
+ }
+ }
+ }
+ catch ( IOException e )
+ {
+ throw new RepositoryIndexException( "Error deleting document: " + e.getMessage(), e );
+ }
+ finally
+ {
+ closeQuietly( indexReader );
+ closeQuietly( terms );
+ }
+ }
+ return keys;
+ }
+
+// public List getAllGroupIds() throws RepositoryIndexException
+// {
+// return getAllFieldValues( StandardIndexRecordFields.GROUPID_EXACT );
+// }
+//
+// public List getArtifactIds( String groupId ) throws RepositoryIndexSearchException
+// {
+// return searchField( new TermQuery( new Term( StandardIndexRecordFields.GROUPID_EXACT, groupId ) ),
+// StandardIndexRecordFields.ARTIFACTID );
+// }
+//
+// public List getVersions( String groupId, String artifactId ) throws RepositoryIndexSearchException
+// {
+// BooleanQuery query = new BooleanQuery();
+// query.add( new TermQuery( new Term( StandardIndexRecordFields.GROUPID_EXACT, groupId ) ),
+// BooleanClause.Occur.MUST );
+// query.add( new TermQuery( new Term( StandardIndexRecordFields.ARTIFACTID_EXACT, artifactId ) ),
+// BooleanClause.Occur.MUST );
+//
+// return searchField( query, StandardIndexRecordFields.VERSION );
+// }
+
+// private List searchField( org.apache.lucene.search.Query luceneQuery, String fieldName )
+// throws RepositoryIndexSearchException
+// {
+// Set results = new LinkedHashSet();
+//
+// IndexSearcher searcher;
+// try
+// {
+// searcher = new IndexSearcher( indexLocation.getAbsolutePath() );
+// }
+// catch ( IOException e )
+// {
+// throw new RepositoryIndexSearchException( "Unable to open index: " + e.getMessage(), e );
+// }
+//
+// try
+// {
+// Hits hits = searcher.search( luceneQuery );
+// for ( int i = 0; i < hits.length(); i++ )
+// {
+// Document doc = hits.doc( i );
+//
+// results.add( doc.get( fieldName ) );
+// }
+// }
+// catch ( IOException e )
+// {
+// throw new RepositoryIndexSearchException( "Unable to search index: " + e.getMessage(), e );
+// }
+// finally
+// {
+// closeQuietly( searcher );
+// }
+// return new ArrayList( results );
+// }
+
+ public boolean exists() throws RepositoryIndexException
+ {
+ if ( IndexReader.indexExists( indexLocation ) )
+ {
+ return true;
+ }
+ else if ( !indexLocation.exists() )
+ {
+ return false;
+ }
+ else if ( indexLocation.isDirectory() )
+ {
+ if ( indexLocation.listFiles().length > 1 )
+ {
+ throw new RepositoryIndexException( indexLocation + " is not a valid index directory." );
+ }
+ else
+ {
+ return false;
+ }
+ }
+ else
+ {
+ throw new RepositoryIndexException( indexLocation + " is not a directory." );
+ }
+ }
+
+ public List search( Query query ) throws RepositoryIndexSearchException
+ {
+ LuceneQuery lQuery = (LuceneQuery) query;
+
+ org.apache.lucene.search.Query luceneQuery = lQuery.getLuceneQuery();
+
+ IndexSearcher searcher;
+ try
+ {
+ searcher = new IndexSearcher( indexLocation.getAbsolutePath() );
+ }
+ catch ( IOException e )
+ {
+ throw new RepositoryIndexSearchException( "Unable to open index: " + e.getMessage(), e );
+ }
+
+ List records = new ArrayList();
+ try
+ {
+ Hits hits = searcher.search( luceneQuery );
+ for ( int i = 0; i < hits.length(); i++ )
+ {
+ Document doc = hits.doc( i );
+
+ records.add( indexHandlers.getConverter().convert( doc ) );
+ }
+ }
+ catch ( IOException e )
+ {
+ throw new RepositoryIndexSearchException( "Unable to search index: " + e.getMessage(), e );
+ }
+ catch ( ParseException e )
+ {
+ throw new RepositoryIndexSearchException( "Unable to search index: " + e.getMessage(), e );
+ }
+ finally
+ {
+ closeQuietly( searcher );
+ }
+
+ return records;
+ }
+
+ private static void closeQuietly( IndexSearcher searcher )
+ {
+ try
+ {
+ if ( searcher != null )
+ {
+ searcher.close();
+ }
+ }
+ catch ( IOException e )
+ {
+ // ignore
+ }
+ }
+
+ private static void closeQuietly( TermEnum terms ) throws RepositoryIndexException
+ {
+ if ( terms != null )
+ {
+ try
+ {
+ terms.close();
+ }
+ catch ( IOException e )
+ {
+ // ignore
+ }
+ }
+ }
+
+ private static void closeQuietly( IndexWriter indexWriter ) throws RepositoryIndexException
+ {
+ try
+ {
+ if ( indexWriter != null )
+ {
+ indexWriter.close();
+ }
+ }
+ catch ( IOException e )
+ {
+ // write should compain if it can't be closed, data probably not persisted
+ throw new RepositoryIndexException( e.getMessage(), e );
+ }
+ }
+
+ private static void closeQuietly( IndexModifier indexModifier )
+ {
+ if ( indexModifier != null )
+ {
+ try
+ {
+ indexModifier.close();
+ }
+ catch ( IOException e )
+ {
+ // ignore
+ }
+ }
+ }
+
+ private static void closeQuietly( IndexReader reader )
+ {
+ try
+ {
+ if ( reader != null )
+ {
+ reader.close();
+ }
+ }
+ catch ( IOException e )
+ {
+ // ignore
+ }
+ }
+
+ public File getIndexDirectory()
+ {
+ return this.indexLocation;
+ }
+}
diff --git a/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/lucene/LuceneRepositoryContentIndexFactory.java b/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/lucene/LuceneRepositoryContentIndexFactory.java
new file mode 100644
index 000000000..f029cabdf
--- /dev/null
+++ b/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/lucene/LuceneRepositoryContentIndexFactory.java
@@ -0,0 +1,99 @@
+package org.apache.maven.archiva.indexer.lucene;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.archiva.configuration.ArchivaConfiguration;
+import org.apache.maven.archiva.configuration.RepositoryConfiguration;
+import org.apache.maven.archiva.indexer.RepositoryContentIndex;
+import org.apache.maven.archiva.indexer.RepositoryContentIndexFactory;
+import org.apache.maven.archiva.indexer.bytecode.BytecodeHandlers;
+import org.apache.maven.archiva.indexer.filecontent.FileContentHandlers;
+import org.apache.maven.archiva.indexer.hashcodes.HashcodesHandlers;
+import org.apache.maven.archiva.model.ArchivaRepository;
+
+import java.io.File;
+
+/**
+ * Factory for Lucene repository content index instances.
+ *
+ * @author <a href="mailto:brett@apache.org">Brett Porter</a>
+ * @author <a href="mailto:joakime@apache.org">Joakim Erdfelt</a>
+ *
+ * @plexus.component role="org.apache.maven.archiva.indexer.RepositoryContentIndexFactory" role-hint="lucene"
+ */
+public class LuceneRepositoryContentIndexFactory implements RepositoryContentIndexFactory
+{
+ /**
+ * @plexus.requirement
+ */
+ private ArchivaConfiguration configuration;
+
+ public RepositoryContentIndex createBytecodeIndex( ArchivaRepository repository )
+ {
+ File indexDir = toIndexDir( repository, "bytecode" );
+ return new LuceneRepositoryContentIndex( indexDir, new BytecodeHandlers() );
+ }
+
+ public RepositoryContentIndex createFileContentIndex( ArchivaRepository repository )
+ {
+ File indexDir = toIndexDir( repository, "filecontent" );
+ return new LuceneRepositoryContentIndex( indexDir, new FileContentHandlers() );
+ }
+
+ public RepositoryContentIndex createHashcodeIndex( ArchivaRepository repository )
+ {
+ File indexDir = toIndexDir( repository, "hashcodes" );
+ return new LuceneRepositoryContentIndex( indexDir, new HashcodesHandlers() );
+ }
+
+ /**
+ * Obtain the index directory for the provided repository.
+ *
+ * @param repository the repository to obtain the index directory from.
+ * @param indexId the id of the index
+ * @return the directory to put the index into.
+ */
+ private File toIndexDir( ArchivaRepository repository, String indexId )
+ {
+ if ( !repository.isManaged() )
+ {
+ throw new IllegalArgumentException( "Only supports managed repositories." );
+ }
+
+ // Attempt to get the specified indexDir in the configuration first.
+ RepositoryConfiguration repoConfig = configuration.getConfiguration().findRepositoryById( repository.getId() );
+ File indexDir;
+
+ if ( repoConfig == null )
+ {
+ // No configured index dir, use the repository path instead.
+ String repoPath = repository.getUrl().getPath();
+ indexDir = new File( repoPath, ".index/" + indexId + "/" );
+ }
+ else
+ {
+ // Use configured index dir.
+ String repoPath = repoConfig.getIndexDir();
+ indexDir = new File( repoPath, "/" + indexId + "/" );
+ }
+
+ return indexDir;
+ }
+}
diff --git a/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/record/RepositoryIndexRecord.java b/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/lucene/LuceneRepositoryContentRecord.java
index f7d61a6b7..73852bc5c 100644
--- a/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/record/RepositoryIndexRecord.java
+++ b/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/lucene/LuceneRepositoryContentRecord.java
@@ -1,4 +1,4 @@
-package org.apache.maven.archiva.indexer.record;
+package org.apache.maven.archiva.indexer.lucene;
/*
* Licensed to the Apache Software Foundation (ASF) under one
@@ -20,16 +20,16 @@ package org.apache.maven.archiva.indexer.record;
*/
/**
- * A repository index record.
+ * A repository content index record.
*
* @author <a href="mailto:brett@apache.org">Brett Porter</a>
*/
-public interface RepositoryIndexRecord
+public interface LuceneRepositoryContentRecord
{
/**
* Get the primary key used to identify the record uniquely in the index.
*
* @return the primary key
*/
- String getPrimaryKey();
+ public String getPrimaryKey();
}
diff --git a/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/lucene/LuceneStandardIndexRecordConverter.java b/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/lucene/LuceneStandardIndexRecordConverter.java
deleted file mode 100644
index 34b1214c7..000000000
--- a/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/lucene/LuceneStandardIndexRecordConverter.java
+++ /dev/null
@@ -1,167 +0,0 @@
-package org.apache.maven.archiva.indexer.lucene;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import org.apache.commons.lang.StringUtils;
-import org.apache.lucene.document.DateTools;
-import org.apache.lucene.document.Document;
-import org.apache.lucene.document.Field;
-import org.apache.lucene.document.NumberTools;
-import org.apache.maven.archiva.indexer.record.RepositoryIndexRecord;
-import org.apache.maven.archiva.indexer.record.StandardArtifactIndexRecord;
-import org.apache.maven.archiva.indexer.record.StandardIndexRecordFields;
-
-import java.text.ParseException;
-import java.util.Arrays;
-
-/**
- * Convert the standard index record to a Lucene document.
- *
- * @author <a href="mailto:brett@apache.org">Brett Porter</a>
- */
-public class LuceneStandardIndexRecordConverter
- implements LuceneIndexRecordConverter
-{
- public Document convert( RepositoryIndexRecord record )
- {
- StandardArtifactIndexRecord rec = (StandardArtifactIndexRecord) record;
-
- Document document = new Document();
- addTokenizedField( document, StandardIndexRecordFields.FILENAME, rec.getFilename() );
- addTokenizedField( document, StandardIndexRecordFields.GROUPID, rec.getGroupId() );
- addExactField( document, StandardIndexRecordFields.GROUPID_EXACT, rec.getGroupId() );
- addTokenizedField( document, StandardIndexRecordFields.ARTIFACTID, rec.getArtifactId() );
- addExactField( document, StandardIndexRecordFields.ARTIFACTID_EXACT, rec.getArtifactId() );
- addTokenizedField( document, StandardIndexRecordFields.VERSION, rec.getVersion() );
- addExactField( document, StandardIndexRecordFields.VERSION_EXACT, rec.getVersion() );
- addTokenizedField( document, StandardIndexRecordFields.BASE_VERSION, rec.getBaseVersion() );
- addExactField( document, StandardIndexRecordFields.BASE_VERSION_EXACT, rec.getBaseVersion() );
- addUntokenizedField( document, StandardIndexRecordFields.TYPE, rec.getType() );
- addTokenizedField( document, StandardIndexRecordFields.CLASSIFIER, rec.getClassifier() );
- addUntokenizedField( document, StandardIndexRecordFields.PACKAGING, rec.getPackaging() );
- addUntokenizedField( document, StandardIndexRecordFields.REPOSITORY, rec.getRepository() );
- addUntokenizedField( document, StandardIndexRecordFields.LAST_MODIFIED,
- DateTools.timeToString( rec.getLastModified(), DateTools.Resolution.SECOND ) );
- addUntokenizedField( document, StandardIndexRecordFields.FILE_SIZE, NumberTools.longToString( rec.getSize() ) );
- addUntokenizedField( document, StandardIndexRecordFields.MD5, rec.getMd5Checksum() );
- addUntokenizedField( document, StandardIndexRecordFields.SHA1, rec.getSha1Checksum() );
- if ( rec.getClasses() != null )
- {
- addTokenizedField( document, StandardIndexRecordFields.CLASSES,
- StringUtils.join( rec.getClasses().iterator(), "\n" ) );
- }
- if ( rec.getFiles() != null )
- {
- addTokenizedField( document, StandardIndexRecordFields.FILES,
- StringUtils.join( rec.getFiles().iterator(), "\n" ) );
- }
- addUntokenizedField( document, StandardIndexRecordFields.PLUGIN_PREFIX, rec.getPluginPrefix() );
- addUntokenizedField( document, StandardIndexRecordFields.INCEPTION_YEAR, rec.getInceptionYear() );
- addTokenizedField( document, StandardIndexRecordFields.PROJECT_NAME, rec.getProjectName() );
- addTokenizedField( document, StandardIndexRecordFields.PROJECT_DESCRIPTION, rec.getProjectDescription() );
- if ( rec.getDependencies() != null )
- {
- addTokenizedField( document, StandardIndexRecordFields.DEPENDENCIES,
- StringUtils.join( rec.getDependencies().iterator(), "\n" ) );
- }
- if ( rec.getDevelopers() != null )
- {
- addTokenizedField( document, StandardIndexRecordFields.DEVELOPERS,
- StringUtils.join( rec.getDevelopers().iterator(), "\n" ) );
- }
-/* TODO: add later
- document.add( Field.Keyword( StandardIndexRecordFields.FLD_LICENSE_URLS, "" ) );
- document.add( Field.Keyword( StandardIndexRecordFields.FLD_PLUGINS_REPORT, "" ) );
- document.add( Field.Keyword( StandardIndexRecordFields.FLD_PLUGINS_BUILD, "" ) );
-*/
-
- return document;
- }
-
- public RepositoryIndexRecord convert( Document document )
- throws ParseException
- {
- StandardArtifactIndexRecord record = new StandardArtifactIndexRecord();
-
- record.setFilename( document.get( StandardIndexRecordFields.FILENAME ) );
- record.setGroupId( document.get( StandardIndexRecordFields.GROUPID ) );
- record.setArtifactId( document.get( StandardIndexRecordFields.ARTIFACTID ) );
- record.setVersion( document.get( StandardIndexRecordFields.VERSION ) );
- record.setBaseVersion( document.get( StandardIndexRecordFields.BASE_VERSION ) );
- record.setType( document.get( StandardIndexRecordFields.TYPE ) );
- record.setClassifier( document.get( StandardIndexRecordFields.CLASSIFIER ) );
- record.setPackaging( document.get( StandardIndexRecordFields.PACKAGING ) );
- record.setRepository( document.get( StandardIndexRecordFields.REPOSITORY ) );
- record.setLastModified( DateTools.stringToTime( document.get( StandardIndexRecordFields.LAST_MODIFIED ) ) );
- record.setSize( NumberTools.stringToLong( document.get( StandardIndexRecordFields.FILE_SIZE ) ) );
- record.setMd5Checksum( document.get( StandardIndexRecordFields.MD5 ) );
- record.setSha1Checksum( document.get( StandardIndexRecordFields.SHA1 ) );
- String classes = document.get( StandardIndexRecordFields.CLASSES );
- if ( classes != null )
- {
- record.setClasses( Arrays.asList( classes.split( "\n" ) ) );
- }
- String files = document.get( StandardIndexRecordFields.FILES );
- if ( files != null )
- {
- record.setFiles( Arrays.asList( files.split( "\n" ) ) );
- }
- String dependencies = document.get( StandardIndexRecordFields.DEPENDENCIES );
- if ( dependencies != null )
- {
- record.setDependencies( Arrays.asList( dependencies.split( "\n" ) ) );
- }
- String developers = document.get( StandardIndexRecordFields.DEVELOPERS );
- if ( developers != null )
- {
- record.setDevelopers( Arrays.asList( developers.split( "\n" ) ) );
- }
- record.setPluginPrefix( document.get( StandardIndexRecordFields.PLUGIN_PREFIX ) );
- record.setInceptionYear( document.get( StandardIndexRecordFields.INCEPTION_YEAR ) );
- record.setProjectName( document.get( StandardIndexRecordFields.PROJECT_NAME ) );
- record.setProjectDescription( document.get( StandardIndexRecordFields.PROJECT_DESCRIPTION ) );
-
- return record;
- }
-
- private static void addUntokenizedField( Document document, String name, String value )
- {
- if ( value != null )
- {
- document.add( new Field( name, value, Field.Store.YES, Field.Index.UN_TOKENIZED ) );
- }
- }
-
- private static void addExactField( Document document, String name, String value )
- {
- if ( value != null )
- {
- document.add( new Field( name, value, Field.Store.NO, Field.Index.UN_TOKENIZED ) );
- }
- }
-
- private static void addTokenizedField( Document document, String name, String value )
- {
- if ( value != null )
- {
- document.add( new Field( name, value, Field.Store.YES, Field.Index.TOKENIZED ) );
- }
- }
-}
diff --git a/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/lucene/analyzers/ClassnameTokenizer.java b/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/lucene/analyzers/ClassnameTokenizer.java
new file mode 100644
index 000000000..37736aa78
--- /dev/null
+++ b/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/lucene/analyzers/ClassnameTokenizer.java
@@ -0,0 +1,59 @@
+package org.apache.maven.archiva.indexer.lucene.analyzers;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.lucene.analysis.CharTokenizer;
+import org.apache.maven.archiva.indexer.bytecode.BytecodeKeys;
+
+import java.io.Reader;
+
+/**
+ * Lucene Tokenizer for {@link BytecodeKeys#CLASSES} fields.
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class ClassnameTokenizer extends CharTokenizer
+{
+ public ClassnameTokenizer( Reader reader )
+ {
+ super( reader );
+ }
+
+ /**
+ * Determine Token Character.
+ *
+ * The field is a list of full classnames "com.foo.Object" seperated by
+ * newline characters. "\n".
+ *
+ * Identify newline "\n" and "." as the token delimiters.
+ */
+ protected boolean isTokenChar( char c )
+ {
+ return ( ( c != '\n' ) && ( c != '.' ) );
+ }
+
+ /*
+ protected char normalize( char c )
+ {
+ return Character.toLowerCase( c );
+ }
+ */
+}
diff --git a/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/lucene/analyzers/FilenamesTokenizer.java b/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/lucene/analyzers/FilenamesTokenizer.java
new file mode 100644
index 000000000..191694914
--- /dev/null
+++ b/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/lucene/analyzers/FilenamesTokenizer.java
@@ -0,0 +1,52 @@
+package org.apache.maven.archiva.indexer.lucene.analyzers;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.lucene.analysis.CharTokenizer;
+import org.apache.maven.archiva.indexer.bytecode.BytecodeKeys;
+
+import java.io.Reader;
+
+/**
+ * Lucene Tokenizer for {@link BytecodeKeys#FILES} fields.
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class FilenamesTokenizer extends CharTokenizer
+{
+ public FilenamesTokenizer( Reader reader )
+ {
+ super( reader );
+ }
+
+ /**
+ * Determine Token Character.
+ *
+ * The field is a list of full filenames "/home/archiva/foo/readme.txt" seperated by
+ * newline characters. "\n".
+ *
+ * Identify newline "\n" and "/" as the token delimiters.
+ */
+ protected boolean isTokenChar( char c )
+ {
+ return ( ( c != '\n' ) && ( c != '/' ) );
+ }
+}
diff --git a/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/lucene/analyzers/GroupIdTokenizer.java b/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/lucene/analyzers/GroupIdTokenizer.java
new file mode 100644
index 000000000..c56d51009
--- /dev/null
+++ b/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/lucene/analyzers/GroupIdTokenizer.java
@@ -0,0 +1,52 @@
+package org.apache.maven.archiva.indexer.lucene.analyzers;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.lucene.analysis.CharTokenizer;
+import org.apache.maven.archiva.indexer.ArtifactKeys;
+
+import java.io.Reader;
+
+/**
+ * Lucene Tokenizer for {@link ArtifactKeys#GROUPID} fields.
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class GroupIdTokenizer extends CharTokenizer
+{
+ public GroupIdTokenizer( Reader reader )
+ {
+ super( reader );
+ }
+
+ /**
+ * Determine Token Character.
+ *
+ * The field is a groupId "com.foo.project".
+ *
+ * Identify "." as the token delimiter.
+ */
+ protected boolean isTokenChar( char c )
+ {
+ return ( c != '.' );
+ }
+
+}
diff --git a/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/lucene/analyzers/VersionTokenizer.java b/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/lucene/analyzers/VersionTokenizer.java
new file mode 100644
index 000000000..31eec4d07
--- /dev/null
+++ b/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/lucene/analyzers/VersionTokenizer.java
@@ -0,0 +1,51 @@
+package org.apache.maven.archiva.indexer.lucene.analyzers;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.lucene.analysis.CharTokenizer;
+import org.apache.maven.archiva.indexer.ArtifactKeys;
+
+import java.io.Reader;
+
+/**
+ * Lucene Tokenizer for {@link ArtifactKeys#VERSION} fields.
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class VersionTokenizer extends CharTokenizer
+{
+ public VersionTokenizer( Reader reader )
+ {
+ super( reader );
+ }
+
+ /**
+ * Determine Token Character.
+ *
+ * The field is a version id in the form "1.0-alpha-4-SNAPSHOT".
+ *
+ * Identify "-" as the token delimiter.
+ */
+ protected boolean isTokenChar( char c )
+ {
+ return ( c != '.' ) && ( c != '-' );
+ }
+}
diff --git a/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/record/AbstractArtifactIndexRecordFactory.java b/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/record/AbstractArtifactIndexRecordFactory.java
deleted file mode 100644
index 80ba7bf1d..000000000
--- a/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/record/AbstractArtifactIndexRecordFactory.java
+++ /dev/null
@@ -1,101 +0,0 @@
-package org.apache.maven.archiva.indexer.record;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import org.codehaus.plexus.digest.Digester;
-import org.codehaus.plexus.digest.DigesterException;
-import org.codehaus.plexus.logging.AbstractLogEnabled;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Enumeration;
-import java.util.List;
-import java.util.zip.ZipEntry;
-import java.util.zip.ZipFile;
-
-/**
- * Base class for the index record factories.
- *
- * @author <a href="mailto:brett@apache.org">Brett Porter</a>
- */
-public abstract class AbstractArtifactIndexRecordFactory
- extends AbstractLogEnabled
- implements RepositoryIndexRecordFactory
-{
- protected String readChecksum( File file, Digester digester )
- {
- String checksum;
- try
- {
- checksum = digester.calc( file ).toLowerCase();
- }
- catch ( DigesterException e )
- {
- getLogger().error( "Error getting checksum for artifact file, leaving empty in index: " + e.getMessage() );
- checksum = null;
- }
- return checksum;
- }
-
- protected List readFilesInArchive( File file )
- throws IOException
- {
- ZipFile zipFile = new ZipFile( file );
- List files;
- try
- {
- files = new ArrayList( zipFile.size() );
-
- for ( Enumeration entries = zipFile.entries(); entries.hasMoreElements(); )
- {
- ZipEntry entry = (ZipEntry) entries.nextElement();
-
- files.add( entry.getName() );
- }
- }
- finally
- {
- closeQuietly( zipFile );
- }
- return files;
- }
-
- protected static boolean isClass( String name )
- {
- // TODO: verify if class is public or protected (this might require the original ZipEntry)
- return name.endsWith( ".class" ) && name.lastIndexOf( "$" ) < 0;
- }
-
- protected static void closeQuietly( ZipFile zipFile )
- {
- try
- {
- if ( zipFile != null )
- {
- zipFile.close();
- }
- }
- catch ( IOException e )
- {
- // ignored
- }
- }
-}
diff --git a/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/record/IndexRecordExistsArtifactFilter.java b/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/record/IndexRecordExistsArtifactFilter.java
deleted file mode 100644
index 717be53c1..000000000
--- a/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/record/IndexRecordExistsArtifactFilter.java
+++ /dev/null
@@ -1,47 +0,0 @@
-package org.apache.maven.archiva.indexer.record;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import org.apache.maven.artifact.Artifact;
-import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
-
-import java.util.Collection;
-
-/**
- * Filter that removes artifacts already in the index.
- * TODO: we could do timestamp comparisons here
- */
-public class IndexRecordExistsArtifactFilter
- implements ArtifactFilter
-{
- private final Collection keys;
-
- public IndexRecordExistsArtifactFilter( Collection keys )
- {
- this.keys = keys;
- }
-
- public boolean include( Artifact artifact )
- {
- String artifactKey = artifact.getGroupId() + ":" + artifact.getArtifactId() + ":" + artifact.getVersion() +
- ( artifact.getClassifier() != null ? ":" + artifact.getClassifier() : "" );
- return !keys.contains( artifactKey );
- }
-}
diff --git a/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/record/MinimalArtifactIndexRecord.java b/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/record/MinimalArtifactIndexRecord.java
deleted file mode 100644
index 3bde1daa3..000000000
--- a/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/record/MinimalArtifactIndexRecord.java
+++ /dev/null
@@ -1,173 +0,0 @@
-package org.apache.maven.archiva.indexer.record;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import java.util.Date;
-import java.util.List;
-
-/**
- * The a record with the fields in the minimal index.
- *
- * @author <a href="mailto:brett@apache.org">Brett Porter</a>
- */
-public class MinimalArtifactIndexRecord
- implements RepositoryIndexRecord
-{
- /**
- * The classes in the archive for the artifact, if it is a JAR.
- */
- private List classes;
-
- /**
- * The MD5 checksum of the artifact file.
- */
- private String md5Checksum;
-
- /**
- * The filename of the artifact file (no path).
- */
- private String filename;
-
- /**
- * The timestamp that the artifact file was last modified. Granularity is seconds.
- */
- private long lastModified;
-
- /**
- * The size of the artifact file in bytes.
- */
- private long size;
-
- private static final int MS_PER_SEC = 1000;
-
- public void setClasses( List classes )
- {
- this.classes = classes;
- }
-
- public void setMd5Checksum( String md5Checksum )
- {
- this.md5Checksum = md5Checksum;
- }
-
- public void setFilename( String filename )
- {
- this.filename = filename;
- }
-
- public void setLastModified( long lastModified )
- {
- this.lastModified = lastModified - lastModified % MS_PER_SEC;
- }
-
- public void setSize( long size )
- {
- this.size = size;
- }
-
- public List getClasses()
- {
- return classes;
- }
-
- public String getMd5Checksum()
- {
- return md5Checksum;
- }
-
- public String getFilename()
- {
- return filename;
- }
-
- public long getLastModified()
- {
- return lastModified;
- }
-
- public long getSize()
- {
- return size;
- }
-
- /**
- * @noinspection RedundantIfStatement
- */
- public boolean equals( Object obj )
- {
- if ( this == obj )
- {
- return true;
- }
- if ( obj == null || getClass() != obj.getClass() )
- {
- return false;
- }
-
- MinimalArtifactIndexRecord that = (MinimalArtifactIndexRecord) obj;
-
- if ( lastModified != that.lastModified )
- {
- return false;
- }
- if ( size != that.size )
- {
- return false;
- }
- if ( classes != null ? !classes.equals( that.classes ) : that.classes != null )
- {
- return false;
- }
- if ( !filename.equals( that.filename ) )
- {
- return false;
- }
- if ( md5Checksum != null ? !md5Checksum.equals( that.md5Checksum ) : that.md5Checksum != null )
- {
- return false;
- }
-
- return true;
- }
-
- /**
- * @noinspection UnnecessaryParentheses
- */
- public int hashCode()
- {
- int result = classes != null ? classes.hashCode() : 0;
- result = 31 * result + ( md5Checksum != null ? md5Checksum.hashCode() : 0 );
- result = 31 * result + filename.hashCode();
- result = 31 * result + (int) ( lastModified ^ ( lastModified >>> 32 ) );
- result = 31 * result + (int) ( size ^ ( size >>> 32 ) );
- return result;
- }
-
- public String toString()
- {
- return "Filename: " + filename + "; checksum: " + md5Checksum + "; size: " + size + "; lastModified: " +
- new Date( lastModified ) + "; classes: " + classes;
- }
-
- public String getPrimaryKey()
- {
- return filename;
- }
-}
diff --git a/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/record/MinimalArtifactIndexRecordFactory.java b/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/record/MinimalArtifactIndexRecordFactory.java
deleted file mode 100644
index e22d03abf..000000000
--- a/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/record/MinimalArtifactIndexRecordFactory.java
+++ /dev/null
@@ -1,105 +0,0 @@
-package org.apache.maven.archiva.indexer.record;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import org.apache.maven.artifact.Artifact;
-import org.codehaus.plexus.digest.Digester;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Set;
-
-/**
- * An index record type for the minimal index.
- *
- * @author Edwin Punzalan
- * @author Brett Porter
- * @plexus.component role="org.apache.maven.archiva.indexer.record.RepositoryIndexRecordFactory" role-hint="minimal"
- */
-public class MinimalArtifactIndexRecordFactory
- extends AbstractArtifactIndexRecordFactory
-{
- /* List of types to index. */
- private static final Set INDEXED_TYPES = new HashSet( Arrays.asList( new String[]{"jar", "maven-plugin"} ) );
-
- /**
- * @plexus.requirement role-hint="sha1"
- */
- protected Digester sha1Digester;
-
- /**
- * @plexus.requirement role-hint="md5"
- */
- protected Digester md5Digester;
-
- public RepositoryIndexRecord createRecord( Artifact artifact )
- {
- MinimalArtifactIndexRecord record = null;
-
- File file = artifact.getFile();
- if ( file != null && INDEXED_TYPES.contains( artifact.getType() ) && file.exists() )
- {
- String md5 = readChecksum( file, md5Digester );
-
- List files = null;
- try
- {
- files = readFilesInArchive( file );
- }
- catch ( IOException e )
- {
- getLogger().error( "Error reading artifact file, omitting from index: " + e.getMessage() );
- }
-
- if ( files != null )
- {
- record = new MinimalArtifactIndexRecord();
- record.setMd5Checksum( md5 );
- record.setFilename( artifact.getRepository().pathOf( artifact ) );
- record.setLastModified( file.lastModified() );
- record.setSize( file.length() );
- record.setClasses( getClassesFromFiles( files ) );
- }
- }
- return record;
- }
-
- private List getClassesFromFiles( List files )
- {
- List classes = new ArrayList();
-
- for ( Iterator i = files.iterator(); i.hasNext(); )
- {
- String name = (String) i.next();
-
- if ( isClass( name ) )
- {
- classes.add( name.substring( 0, name.length() - 6 ).replace( '/', '.' ) );
- }
- }
-
- return classes;
- }
-}
diff --git a/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/record/RepositoryIndexRecordFactory.java b/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/record/RepositoryIndexRecordFactory.java
deleted file mode 100644
index e7474a159..000000000
--- a/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/record/RepositoryIndexRecordFactory.java
+++ /dev/null
@@ -1,47 +0,0 @@
-package org.apache.maven.archiva.indexer.record;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import org.apache.maven.archiva.indexer.RepositoryIndexException;
-import org.apache.maven.artifact.Artifact;
-
-/**
- * The layout of a record in a repository index.
- *
- * @author <a href="mailto:brett@apache.org">Brett Porter</a>
- */
-public interface RepositoryIndexRecordFactory
-{
- /**
- * The Plexus role.
- */
- String ROLE = RepositoryIndexRecordFactory.class.getName();
-
- /**
- * Create an index record from an artifact.
- *
- * @param artifact the artifact
- * @return the index record
- * @throws RepositoryIndexException if there is a problem constructing the record (due to not being able to read the artifact file as a POM)
- */
- RepositoryIndexRecord createRecord( Artifact artifact )
- throws RepositoryIndexException;
-
-}
diff --git a/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/record/StandardArtifactIndexRecord.java b/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/record/StandardArtifactIndexRecord.java
deleted file mode 100644
index 5395c419b..000000000
--- a/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/record/StandardArtifactIndexRecord.java
+++ /dev/null
@@ -1,412 +0,0 @@
-package org.apache.maven.archiva.indexer.record;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
-/**
- * The a record with the fields in the standard index.
- *
- * @author <a href="mailto:brett@apache.org">Brett Porter</a>
- */
-public class StandardArtifactIndexRecord
- extends MinimalArtifactIndexRecord
-{
- /**
- * The SHA-1 checksum of the artifact file.
- */
- private String sha1Checksum;
-
- /**
- * The artifact's group.
- */
- private String groupId;
-
- /**
- * The artifact's identifier within the group.
- */
- private String artifactId;
-
- /**
- * The artifact's version.
- */
- private String version;
-
- /**
- * The classifier, if there is one.
- */
- private String classifier;
-
- /**
- * The artifact type (from the file).
- */
- private String type;
-
- /**
- * A list of files (separated by '\n') in the artifact if it is an archive.
- */
- private List files;
-
- /**
- * The identifier of the repository that the artifact came from.
- */
- private String repository;
-
- /**
- * The packaging specified in the POM for this artifact.
- */
- private String packaging;
-
- /**
- * The plugin prefix specified in the metadata if the artifact is a plugin.
- */
- private String pluginPrefix;
-
- /**
- * The year the project was started.
- */
- private String inceptionYear;
-
- /**
- * The description of the project.
- */
- private String projectDescription;
-
- /**
- * The name of the project.
- */
- private String projectName;
-
- /**
- * The base version (before the snapshot is determined).
- */
- private String baseVersion;
-
- /**
- * A list of dependencies for the artifact, each a string of the form <code>groupId:artifactId:version</code>.
- */
- private List dependencies;
-
- /**
- * A list of developers in the POM, each a string of the form <code>id:name:email</code>.
- */
- private List developers;
-
- public void setSha1Checksum( String sha1Checksum )
- {
- this.sha1Checksum = sha1Checksum;
- }
-
- public void setGroupId( String groupId )
- {
- this.groupId = groupId;
- }
-
- public void setArtifactId( String artifactId )
- {
- this.artifactId = artifactId;
- }
-
- public void setVersion( String version )
- {
- this.version = version;
- }
-
- public void setClassifier( String classifier )
- {
- this.classifier = classifier;
- }
-
- public void setType( String type )
- {
- this.type = type;
- }
-
- public void setFiles( List files )
- {
- this.files = files;
- }
-
- public void setRepository( String repository )
- {
- this.repository = repository;
- }
-
- /**
- * @noinspection RedundantIfStatement
- */
- public boolean equals( Object obj )
- {
- if ( this == obj )
- {
- return true;
- }
- if ( obj == null || getClass() != obj.getClass() )
- {
- return false;
- }
- if ( !super.equals( obj ) )
- {
- return false;
- }
-
- StandardArtifactIndexRecord that = (StandardArtifactIndexRecord) obj;
-
- if ( !artifactId.equals( that.artifactId ) )
- {
- return false;
- }
- if ( classifier != null ? !classifier.equals( that.classifier ) : that.classifier != null )
- {
- return false;
- }
-
- if ( dependencies != null && that.dependencies != null )
- {
- List sorted = new ArrayList( dependencies );
- Collections.sort( sorted );
-
- List sortedOther = new ArrayList( that.dependencies );
- Collections.sort( sortedOther );
-
- if ( !sorted.equals( sortedOther ) )
- {
- return false;
- }
- }
- else if ( !( dependencies == null && that.dependencies == null ) )
- {
- return false;
- }
-
- if ( developers != null ? !developers.equals( that.developers ) : that.developers != null )
- {
- return false;
- }
- if ( files != null ? !files.equals( that.files ) : that.files != null )
- {
- return false;
- }
- if ( !groupId.equals( that.groupId ) )
- {
- return false;
- }
- if ( repository != null ? !repository.equals( that.repository ) : that.repository != null )
- {
- return false;
- }
- if ( sha1Checksum != null ? !sha1Checksum.equals( that.sha1Checksum ) : that.sha1Checksum != null )
- {
- return false;
- }
- if ( type != null ? !type.equals( that.type ) : that.type != null )
- {
- return false;
- }
- if ( !version.equals( that.version ) )
- {
- return false;
- }
- if ( !baseVersion.equals( that.baseVersion ) )
- {
- return false;
- }
- if ( packaging != null ? !packaging.equals( that.packaging ) : that.packaging != null )
- {
- return false;
- }
- if ( pluginPrefix != null ? !pluginPrefix.equals( that.pluginPrefix ) : that.pluginPrefix != null )
- {
- return false;
- }
- if ( projectName != null ? !projectName.equals( that.projectName ) : that.projectName != null )
- {
- return false;
- }
- if ( inceptionYear != null ? !inceptionYear.equals( that.inceptionYear ) : that.inceptionYear != null )
- {
- return false;
- }
- if ( projectDescription != null ? !projectDescription.equals( that.projectDescription )
- : that.projectDescription != null )
- {
- return false;
- }
-
- return true;
- }
-
- public int hashCode()
- {
- int result = super.hashCode();
- result = 31 * result + ( sha1Checksum != null ? sha1Checksum.hashCode() : 0 );
- result = 31 * result + groupId.hashCode();
- result = 31 * result + artifactId.hashCode();
- result = 31 * result + version.hashCode();
- result = 31 * result + baseVersion.hashCode();
- result = 31 * result + ( classifier != null ? classifier.hashCode() : 0 );
- result = 31 * result + ( type != null ? type.hashCode() : 0 );
- result = 31 * result + ( files != null ? files.hashCode() : 0 );
- result = 31 * result + ( developers != null ? developers.hashCode() : 0 );
-
- if ( dependencies != null )
- {
- List sorted = new ArrayList( dependencies );
- Collections.sort( sorted );
-
- result = 31 * result + sorted.hashCode();
- }
-
- result = 31 * result + ( repository != null ? repository.hashCode() : 0 );
- result = 31 * result + ( packaging != null ? packaging.hashCode() : 0 );
- result = 31 * result + ( pluginPrefix != null ? pluginPrefix.hashCode() : 0 );
- result = 31 * result + ( inceptionYear != null ? inceptionYear.hashCode() : 0 );
- result = 31 * result + ( projectName != null ? projectName.hashCode() : 0 );
- result = 31 * result + ( projectDescription != null ? projectDescription.hashCode() : 0 );
- return result;
- }
-
- public String getSha1Checksum()
- {
- return sha1Checksum;
- }
-
- public String getGroupId()
- {
- return groupId;
- }
-
- public String getArtifactId()
- {
- return artifactId;
- }
-
- public String getVersion()
- {
- return version;
- }
-
- public String getClassifier()
- {
- return classifier;
- }
-
- public String getType()
- {
- return type;
- }
-
- public List getFiles()
- {
- return files;
- }
-
- public String getRepository()
- {
- return repository;
- }
-
- public String getPackaging()
- {
- return packaging;
- }
-
- public String getPluginPrefix()
- {
- return pluginPrefix;
- }
-
- public void setPackaging( String packaging )
- {
- this.packaging = packaging;
- }
-
- public void setPluginPrefix( String pluginPrefix )
- {
- this.pluginPrefix = pluginPrefix;
- }
-
- public void setInceptionYear( String inceptionYear )
- {
- this.inceptionYear = inceptionYear;
- }
-
- public void setProjectDescription( String description )
- {
- this.projectDescription = description;
- }
-
- public void setProjectName( String projectName )
- {
- this.projectName = projectName;
- }
-
- public String getInceptionYear()
- {
- return inceptionYear;
- }
-
- public String getProjectDescription()
- {
- return projectDescription;
- }
-
- public String getProjectName()
- {
- return projectName;
- }
-
- public void setBaseVersion( String baseVersion )
- {
- this.baseVersion = baseVersion;
- }
-
- public String getBaseVersion()
- {
- return baseVersion;
- }
-
- public void setDependencies( List dependencies )
- {
- this.dependencies = dependencies;
- }
-
- public void setDevelopers( List developers )
- {
- this.developers = developers;
- }
-
- public List getDevelopers()
- {
- return developers;
- }
-
- public List getDependencies()
- {
- return dependencies;
- }
-
- public String getPrimaryKey()
- {
- return groupId + ":" + artifactId + ":" + version + ( classifier != null ? ":" + classifier : "" );
- }
-}
diff --git a/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/record/StandardArtifactIndexRecordFactory.java b/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/record/StandardArtifactIndexRecordFactory.java
deleted file mode 100644
index 219b6691e..000000000
--- a/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/record/StandardArtifactIndexRecordFactory.java
+++ /dev/null
@@ -1,373 +0,0 @@
-package org.apache.maven.archiva.indexer.record;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import org.apache.maven.archiva.indexer.RepositoryIndexException;
-import org.apache.maven.artifact.Artifact;
-import org.apache.maven.artifact.InvalidArtifactRTException;
-import org.apache.maven.artifact.factory.ArtifactFactory;
-import org.apache.maven.artifact.repository.ArtifactRepository;
-import org.apache.maven.model.Dependency;
-import org.apache.maven.model.Developer;
-import org.apache.maven.model.Model;
-import org.apache.maven.project.MavenProject;
-import org.apache.maven.project.MavenProjectBuilder;
-import org.apache.maven.project.ProjectBuildingException;
-import org.codehaus.plexus.digest.Digester;
-import org.codehaus.plexus.util.xml.Xpp3Dom;
-import org.codehaus.plexus.util.xml.Xpp3DomBuilder;
-import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Set;
-import java.util.zip.ZipEntry;
-import java.util.zip.ZipException;
-import java.util.zip.ZipFile;
-
-/**
- * An index record type for the standard index.
- *
- * @author Edwin Punzalan
- * @author Brett Porter
- * @plexus.component role="org.apache.maven.archiva.indexer.record.RepositoryIndexRecordFactory" role-hint="standard"
- */
-public class StandardArtifactIndexRecordFactory
- extends AbstractArtifactIndexRecordFactory
-{
- /**
- * A list of artifact types to treat as a zip archive.
- *
- * @todo this should be smarter (perhaps use plexus archiver to look for an unarchiver, and make the ones for zip configurable since sar, par, etc can be added at random.
- */
- private static final Set ARCHIVE_TYPES =
- new HashSet( Arrays.asList( new String[]{"jar", "ejb", "par", "sar", "war", "ear", "rar"} ) );
-
- /**
- * @plexus.requirement
- */
- private ArtifactFactory artifactFactory;
-
- /**
- * @plexus.requirement
- */
- private MavenProjectBuilder projectBuilder;
-
- /**
- * @plexus.requirement role-hint="sha1"
- */
- protected Digester sha1Digester;
-
- /**
- * @plexus.requirement role-hint="md5"
- */
- protected Digester md5Digester;
-
- private static final String SITE_TEMPLATE_NAME = "META-INF/maven/site.vm";
-
- private static final String SITE_CSS_NAME = "css/maven-theme.css";
-
- private static final String PLUGIN_METADATA_NAME = "META-INF/maven/plugin.xml";
-
- private static final String ARCHETYPE_METADATA_NAME = "META-INF/maven/archetype.xml";
-
- // some current/old archetypes have the archetype.xml at different location.
- private static final String ARCHETYPE_METADATA_NAME_OLD = "META-INF/archetype.xml";
-
- public RepositoryIndexRecord createRecord( Artifact artifact )
- throws RepositoryIndexException
- {
- StandardArtifactIndexRecord record = null;
-
- File file = artifact.getFile();
-
- // TODO: is this condition really a possibility?
- if ( file != null && file.exists() )
- {
- String md5 = readChecksum( file, md5Digester );
- String sha1 = readChecksum( file, sha1Digester );
-
- List files = null;
- boolean archive = ARCHIVE_TYPES.contains( artifact.getType() );
- try
- {
- if ( archive )
- {
- files = readFilesInArchive( file );
- }
- }
- catch ( IOException e )
- {
- getLogger().error( "Error reading artifact file, omitting from index: " + e.getMessage() );
- }
-
- // If it's an archive with no files, don't create a record
- if ( !archive || files != null )
- {
- record = new StandardArtifactIndexRecord();
-
- record.setGroupId( artifact.getGroupId() );
- record.setArtifactId( artifact.getArtifactId() );
- record.setBaseVersion( artifact.getBaseVersion() );
- record.setVersion( artifact.getVersion() );
- record.setClassifier( artifact.getClassifier() );
- record.setType( artifact.getType() );
- record.setMd5Checksum( md5 );
- record.setSha1Checksum( sha1 );
- record.setFilename( artifact.getRepository().pathOf( artifact ) );
- record.setLastModified( file.lastModified() );
- record.setSize( file.length() );
- record.setRepository( artifact.getRepository().getId() );
-
- if ( files != null )
- {
- populateArchiveEntries( files, record, artifact.getFile() );
- }
-
- if ( !"pom".equals( artifact.getType() ) )
- {
- Artifact pomArtifact = artifactFactory.createProjectArtifact( artifact.getGroupId(),
- artifact.getArtifactId(),
- artifact.getVersion() );
- pomArtifact.isSnapshot(); // gross hack around bug in maven-artifact
- File pomFile = new File( artifact.getRepository().getBasedir(),
- artifact.getRepository().pathOf( pomArtifact ) );
- if ( pomFile.exists() )
- {
- try
- {
- populatePomEntries( readPom( pomArtifact, artifact.getRepository() ), record );
- }
- catch ( ProjectBuildingException e )
- {
- getLogger().error( "Error reading POM file [" + pomFile + "] for " + artifact +
- ", not populating in index: " + e.getMessage() );
- }
- }
- }
- else
- {
- Model model;
- try
- {
- model = readPom( artifact, artifact.getRepository() );
-
- if ( !"pom".equals( model.getPackaging() ) )
- {
- // Don't return a record for a POM that is does not belong on its own
- record = null;
- }
- else
- {
- populatePomEntries( model, record );
- }
- }
- catch ( ProjectBuildingException e )
- {
- getLogger().error(
- "Error reading POM file for " + artifact + ", not populating in index: " + e.getMessage() );
- }
- }
- }
- }
-
- return record;
- }
-
- private void populatePomEntries( Model pom, StandardArtifactIndexRecord record )
- {
- record.setPackaging( pom.getPackaging() );
- record.setProjectName( pom.getName() );
- record.setProjectDescription( pom.getDescription() );
- record.setInceptionYear( pom.getInceptionYear() );
-
- List dependencies = populateDependencies( pom.getDependencies() );
- if ( !dependencies.isEmpty() )
- {
- record.setDependencies( dependencies );
- }
- List developers = populateDevelopers( pom.getDevelopers() );
- if ( !developers.isEmpty() )
- {
- record.setDevelopers( developers );
- }
-
-/* TODO: fields for later
- indexPlugins( doc, FLD_PLUGINS_BUILD, pom.getBuild().getPlugins().iterator() );
- indexReportPlugins( doc, FLD_PLUGINS_REPORT, pom.getReporting().getPlugins().iterator() );
- record.setLicenses( licenses );
-*/
- }
-
- private List populateDependencies( List dependencies )
- {
- List convertedDependencies = new ArrayList();
-
- for ( Iterator i = dependencies.iterator(); i.hasNext(); )
- {
- Dependency dependency = (Dependency) i.next();
-
- convertedDependencies.add(
- dependency.getGroupId() + ":" + dependency.getArtifactId() + ":" + dependency.getVersion() );
- }
-
- return convertedDependencies;
- }
-
- private List populateDevelopers( List developers )
- {
- List convertedDevelopers = new ArrayList();
-
- for ( Iterator i = developers.iterator(); i.hasNext(); )
- {
- Developer developer = (Developer) i.next();
-
- convertedDevelopers.add( developer.getId() + ":" + developer.getName() + ":" + developer.getEmail() );
- }
-
- return convertedDevelopers;
- }
-
- private Model readPom( Artifact artifact, ArtifactRepository repository )
- throws RepositoryIndexException, ProjectBuildingException
- {
- // TODO: this can create a -SNAPSHOT.pom when it didn't exist and a timestamped one did. This is harmless, but should be avoided
- // TODO: will this pollute with local repo metadata?
-
- try
- {
- MavenProject project = projectBuilder.buildFromRepository( artifact, Collections.EMPTY_LIST, repository );
- return project.getModel();
- }
- catch ( InvalidArtifactRTException e )
- {
- throw new ProjectBuildingException( artifact.getId(),
- "Unable to build project from invalid artifact [" + artifact + "]", e );
- }
- }
-
- private void populateArchiveEntries( List files, StandardArtifactIndexRecord record, File artifactFile )
- throws RepositoryIndexException
- {
- List classes = new ArrayList();
- List fileList = new ArrayList();
-
- for ( Iterator i = files.iterator(); i.hasNext(); )
- {
- String name = (String) i.next();
-
- // ignore directories
- if ( !name.endsWith( "/" ) )
- {
- fileList.add( name );
-
- if ( isClass( name ) )
- {
- classes.add( name.substring( 0, name.length() - 6 ).replace( '/', '.' ) );
- }
- else if ( PLUGIN_METADATA_NAME.equals( name ) )
- {
- populatePluginEntries( readXmlMetadataFileInJar( artifactFile, PLUGIN_METADATA_NAME ), record );
- }
- else if ( ARCHETYPE_METADATA_NAME.equals( name ) || ARCHETYPE_METADATA_NAME_OLD.equals( name ) )
- {
- populateArchetypeEntries( record );
- }
- else if ( SITE_TEMPLATE_NAME.equals( name ) || SITE_CSS_NAME.equals( name ) )
- {
- populateSkinEntries( record );
- }
- }
- }
-
- if ( !classes.isEmpty() )
- {
- record.setClasses( classes );
- }
- if ( !fileList.isEmpty() )
- {
- record.setFiles( fileList );
- }
- }
-
- private void populateArchetypeEntries( StandardArtifactIndexRecord record )
- {
- // Typically discovered as a JAR
- record.setType( "maven-archetype" );
- }
-
- private void populateSkinEntries( StandardArtifactIndexRecord record )
- {
- // Typically discovered as a JAR
- record.setType( "maven-skin" );
- }
-
- private Xpp3Dom readXmlMetadataFileInJar( File file, String name )
- throws RepositoryIndexException
- {
- // TODO: would be more efficient with original ZipEntry still around
-
- Xpp3Dom xpp3Dom;
- ZipFile zipFile = null;
- try
- {
- zipFile = new ZipFile( file );
- ZipEntry entry = zipFile.getEntry( name );
- xpp3Dom = Xpp3DomBuilder.build( new InputStreamReader( zipFile.getInputStream( entry ) ) );
- }
- catch ( ZipException e )
- {
- throw new RepositoryIndexException( "Unable to read plugin metadata: " + e.getMessage(), e );
- }
- catch ( IOException e )
- {
- throw new RepositoryIndexException( "Unable to read plugin metadata: " + e.getMessage(), e );
- }
- catch ( XmlPullParserException e )
- {
- throw new RepositoryIndexException( "Unable to read plugin metadata: " + e.getMessage(), e );
- }
- finally
- {
- closeQuietly( zipFile );
- }
- return xpp3Dom;
- }
-
- public void populatePluginEntries( Xpp3Dom metadata, StandardArtifactIndexRecord record )
- {
- // Typically discovered as a JAR
- record.setType( "maven-plugin" );
-
- Xpp3Dom prefix = metadata.getChild( "goalPrefix" );
-
- if ( prefix != null )
- {
- record.setPluginPrefix( prefix.getValue() );
- }
- }
-}
diff --git a/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/record/StandardIndexRecordFields.java b/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/record/StandardIndexRecordFields.java
deleted file mode 100644
index d80e60cfc..000000000
--- a/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/record/StandardIndexRecordFields.java
+++ /dev/null
@@ -1,84 +0,0 @@
-package org.apache.maven.archiva.indexer.record;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-/**
- * The fields in a minimal artifact index record.
- *
- * @author <a href="mailto:brett@apache.org">Brett Porter</a>
- * @todo should be an enum
- */
-public class StandardIndexRecordFields
-{
- public static final String FILENAME = "filename";
-
- public static final String GROUPID = "groupId";
-
- public static final String GROUPID_EXACT = GROUPID + "_u";
-
- public static final String ARTIFACTID = "artifactId";
-
- public static final String ARTIFACTID_EXACT = ARTIFACTID + "_u";
-
- public static final String VERSION = "version";
-
- public static final String VERSION_EXACT = VERSION + "_u";
-
- public static final String BASE_VERSION = "baseVersion";
-
- public static final String BASE_VERSION_EXACT = BASE_VERSION + "_u";
-
- public static final String TYPE = "type";
-
- public static final String CLASSIFIER = "classifier";
-
- public static final String PACKAGING = "packaging";
-
- public static final String REPOSITORY = "repo";
-
- public static final String LAST_MODIFIED = "lastModified";
-
- public static final String FILE_SIZE = "fileSize";
-
- public static final String MD5 = "md5";
-
- public static final String SHA1 = "sha1";
-
- public static final String CLASSES = "classes";
-
- public static final String PLUGIN_PREFIX = "pluginPrefix";
-
- public static final String FILES = "files";
-
- public static final String INCEPTION_YEAR = "inceptionYear";
-
- public static final String PROJECT_NAME = "projectName";
-
- public static final String PROJECT_DESCRIPTION = "projectDesc";
-
- public static final String DEVELOPERS = "developers";
-
- public static final String DEPENDENCIES = "dependencies";
-
- private StandardIndexRecordFields()
- {
- // No touchy!
- }
-}
diff --git a/archiva-base/archiva-indexer/src/test/artifact-dumps/archiva-common-1.0.jar.txt b/archiva-base/archiva-indexer/src/test/artifact-dumps/archiva-common-1.0.jar.txt
new file mode 100644
index 000000000..1897823ee
--- /dev/null
+++ b/archiva-base/archiva-indexer/src/test/artifact-dumps/archiva-common-1.0.jar.txt
@@ -0,0 +1,56 @@
+FILENAME|archiva-common-1.0-SNAPSHOT.jar
+SIZE|8516
+HASH_MD5|a5d0d280ce83133432d8fed8f2ce3474
+HASH_SHA1|c2635a1b38bd4520a6604664c04b2b3c32330864
+HASH_BYTECODE|2868f6661c55afda5a3b62859fbc8b1beb021b6e
+JDK|1.4
+CLASS|org.apache.maven.archiva.common.ArchivaException
+CLASS|org.apache.maven.archiva.common.utils.BaseFile
+CLASS|org.apache.maven.archiva.common.utils.DateUtil
+CLASS|org.apache.maven.archiva.common.utils.PathUtil
+CLASS|org.apache.maven.archiva.common.utils.VersionUtil
+METHOD|org.apache.maven.archiva.common.ArchivaException.<init>(Ljava/lang/String;Ljava/lang/Throwable;)V
+METHOD|org.apache.maven.archiva.common.ArchivaException.<init>(Ljava/lang/String;)V
+METHOD|org.apache.maven.archiva.common.utils.BaseFile.<init>(Ljava/io/File;)V
+METHOD|org.apache.maven.archiva.common.utils.BaseFile.<init>(Ljava/io/File;Ljava/io/File;)V
+METHOD|org.apache.maven.archiva.common.utils.BaseFile.<init>(Ljava/io/File;Ljava/lang/String;)V
+METHOD|org.apache.maven.archiva.common.utils.BaseFile.<init>(Ljava/lang/String;)V
+METHOD|org.apache.maven.archiva.common.utils.BaseFile.<init>(Ljava/lang/String;Ljava/io/File;)V
+METHOD|org.apache.maven.archiva.common.utils.BaseFile.<init>(Ljava/lang/String;Ljava/lang/String;)V
+METHOD|org.apache.maven.archiva.common.utils.BaseFile.<init>(Ljava/net/URI;)V
+METHOD|org.apache.maven.archiva.common.utils.BaseFile.getBaseDir()Ljava/io/File;
+METHOD|org.apache.maven.archiva.common.utils.BaseFile.getRelativePath()Ljava/lang/String;
+METHOD|org.apache.maven.archiva.common.utils.BaseFile.setBaseDir(Ljava/io/File;)V
+METHOD|org.apache.maven.archiva.common.utils.BaseFile.setBaseDir(Ljava/lang/String;)V
+METHOD|org.apache.maven.archiva.common.utils.BaseFile.class$(Ljava/lang/String;)Ljava/lang/Class;
+METHOD|org.apache.maven.archiva.common.utils.DateUtil.<init>()V
+METHOD|org.apache.maven.archiva.common.utils.DateUtil.getDuration(J)Ljava/lang/String;
+METHOD|org.apache.maven.archiva.common.utils.DateUtil.getDuration(JJ)Ljava/lang/String;
+METHOD|org.apache.maven.archiva.common.utils.DateUtil.getDuration(Ljava/util/Date;Ljava/util/Date;)Ljava/lang/String;
+METHOD|org.apache.maven.archiva.common.utils.DateUtil.getDuration(Ljava/util/Calendar;Ljava/util/Calendar;)Ljava/lang/String;
+METHOD|org.apache.maven.archiva.common.utils.DateUtil.appendInterval(Ljava/lang/StringBuffer;ILjava/lang/String;)V
+METHOD|org.apache.maven.archiva.common.utils.PathUtil.<init>()V
+METHOD|org.apache.maven.archiva.common.utils.PathUtil.getRelative(Ljava/lang/String;Ljava/io/File;)Ljava/lang/String;
+METHOD|org.apache.maven.archiva.common.utils.PathUtil.getRelative(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+METHOD|org.apache.maven.archiva.common.utils.VersionUtil.<init>()V
+METHOD|org.apache.maven.archiva.common.utils.VersionUtil.isSnapshot(Ljava/lang/String;)Z
+METHOD|org.apache.maven.archiva.common.utils.VersionUtil.getBaseVersion(Ljava/lang/String;)Ljava/lang/String;
+METHOD|org.apache.maven.archiva.common.utils.VersionUtil.<clinit>()V
+FILE|META-INF/
+FILE|META-INF/MANIFEST.MF
+FILE|META-INF/maven/
+FILE|META-INF/maven/org.apache.maven.archiva/
+FILE|META-INF/maven/org.apache.maven.archiva/archiva-common/
+FILE|META-INF/maven/org.apache.maven.archiva/archiva-common/pom.properties
+FILE|META-INF/maven/org.apache.maven.archiva/archiva-common/pom.xml
+FILE|org/
+FILE|org/apache/
+FILE|org/apache/maven/
+FILE|org/apache/maven/archiva/
+FILE|org/apache/maven/archiva/common/
+FILE|org/apache/maven/archiva/common/ArchivaException.class
+FILE|org/apache/maven/archiva/common/utils/
+FILE|org/apache/maven/archiva/common/utils/BaseFile.class
+FILE|org/apache/maven/archiva/common/utils/DateUtil.class
+FILE|org/apache/maven/archiva/common/utils/PathUtil.class
+FILE|org/apache/maven/archiva/common/utils/VersionUtil.class
diff --git a/archiva-base/archiva-indexer/src/test/artifact-dumps/continuum-webapp-1.0.3-SNAPSHOT.war.txt b/archiva-base/archiva-indexer/src/test/artifact-dumps/continuum-webapp-1.0.3-SNAPSHOT.war.txt
new file mode 100644
index 000000000..c27604795
--- /dev/null
+++ b/archiva-base/archiva-indexer/src/test/artifact-dumps/continuum-webapp-1.0.3-SNAPSHOT.war.txt
@@ -0,0 +1,1492 @@
+FILENAME|continuum-webapp-1.0.3-SNAPSHOT.war
+SIZE|12014375
+HASH_MD5|72bd7b7c170a8a6404b1d28c5244837a
+HASH_SHA1|1b8e405f706abd47a324e68f0962ade82809ec02
+HASH_BYTECODE|5339229350071bf5d84e6520308515af3220eb2c
+JDK|1.1
+CLASS|org.apache.maven.continuum.web.action.AboutAction
+CLASS|org.apache.maven.continuum.web.action.AddMavenOneProjectAction
+CLASS|org.apache.maven.continuum.web.action.AddMavenProjectAction
+CLASS|org.apache.maven.continuum.web.action.AddMavenTwoProjectAction
+CLASS|org.apache.maven.continuum.web.action.AddProjectAction
+CLASS|org.apache.maven.continuum.web.action.BuildDefinitionAction
+CLASS|org.apache.maven.continuum.web.action.BuildProjectAction
+CLASS|org.apache.maven.continuum.web.action.BuildResultAction
+CLASS|org.apache.maven.continuum.web.action.BuildResultsListAction
+CLASS|org.apache.maven.continuum.web.action.CancelBuildAction
+CLASS|org.apache.maven.continuum.web.action.CheckConfigurationAction
+CLASS|org.apache.maven.continuum.web.action.ContinuumActionSupport
+CLASS|org.apache.maven.continuum.web.action.ContinuumConfirmAction
+CLASS|org.apache.maven.continuum.web.action.DeleteProjectAction
+CLASS|org.apache.maven.continuum.web.action.GroupSummaryAction
+CLASS|org.apache.maven.continuum.web.action.ProjectEditAction
+CLASS|org.apache.maven.continuum.web.action.ProjectGroupAction
+CLASS|org.apache.maven.continuum.web.action.ProjectViewAction
+CLASS|org.apache.maven.continuum.web.action.ReleaseCleanupAction
+CLASS|org.apache.maven.continuum.web.action.ReleaseInProgressAction
+CLASS|org.apache.maven.continuum.web.action.ReleasePerformAction
+CLASS|org.apache.maven.continuum.web.action.ReleasePrepareAction
+CLASS|org.apache.maven.continuum.web.action.ReleaseProjectAction
+CLASS|org.apache.maven.continuum.web.action.ReleaseProjectGoalAction
+CLASS|org.apache.maven.continuum.web.action.ScheduleAction
+CLASS|org.apache.maven.continuum.web.action.SummaryAction
+CLASS|org.apache.maven.continuum.web.action.SurefireReportAction$1
+CLASS|org.apache.maven.continuum.web.action.SurefireReportAction$ReportTest
+CLASS|org.apache.maven.continuum.web.action.SurefireReportAction$ReportTestCase
+CLASS|org.apache.maven.continuum.web.action.SurefireReportAction$ReportTestSuite
+CLASS|org.apache.maven.continuum.web.action.SurefireReportAction
+CLASS|org.apache.maven.continuum.web.action.UserGroupManagementAction
+CLASS|org.apache.maven.continuum.web.action.UserManagementAction
+CLASS|org.apache.maven.continuum.web.action.WorkingCopyAction
+CLASS|org.apache.maven.continuum.web.action.admin.ConfigurationAction
+CLASS|org.apache.maven.continuum.web.action.component.BuildDefinitionSummaryAction
+CLASS|org.apache.maven.continuum.web.action.component.ContinuumTabAction
+CLASS|org.apache.maven.continuum.web.action.component.NotifierSummaryAction
+CLASS|org.apache.maven.continuum.web.action.notifier.AbstractGroupNotifierEditAction
+CLASS|org.apache.maven.continuum.web.action.notifier.AbstractNotifierEditActionSupport
+CLASS|org.apache.maven.continuum.web.action.notifier.AbstractProjectNotifierEditAction
+CLASS|org.apache.maven.continuum.web.action.notifier.AddGroupNotifierAction
+CLASS|org.apache.maven.continuum.web.action.notifier.AddProjectNotifierAction
+CLASS|org.apache.maven.continuum.web.action.notifier.DeleteGroupNotifierAction
+CLASS|org.apache.maven.continuum.web.action.notifier.DeleteProjectNotifierAction
+CLASS|org.apache.maven.continuum.web.action.notifier.IrcGroupNotifierEditAction
+CLASS|org.apache.maven.continuum.web.action.notifier.IrcProjectNotifierEditAction
+CLASS|org.apache.maven.continuum.web.action.notifier.JabberGroupNotifierEditAction
+CLASS|org.apache.maven.continuum.web.action.notifier.JabberProjectNotifierEditAction
+CLASS|org.apache.maven.continuum.web.action.notifier.MailGroupNotifierEditAction
+CLASS|org.apache.maven.continuum.web.action.notifier.MailProjectNotifierEditAction
+CLASS|org.apache.maven.continuum.web.action.notifier.MsnGroupNotifierEditAction
+CLASS|org.apache.maven.continuum.web.action.notifier.MsnProjectNotifierEditAction
+CLASS|org.apache.maven.continuum.web.checks.security.RoleProfileEnvironmentCheck
+CLASS|org.apache.maven.continuum.web.components.Data
+CLASS|org.apache.maven.continuum.web.components.SubmitCancel
+CLASS|org.apache.maven.continuum.web.exception.ContinuumActionException
+CLASS|org.apache.maven.continuum.web.filter.FilterToComponentProxy
+CLASS|org.apache.maven.continuum.web.interceptor.ForceContinuumConfigurationInterceptor
+CLASS|org.apache.maven.continuum.web.model.BuildDefinitionSummary
+CLASS|org.apache.maven.continuum.web.model.ContinuumViewModels
+CLASS|org.apache.maven.continuum.web.model.GroupSummary
+CLASS|org.apache.maven.continuum.web.model.NotifierSummary
+CLASS|org.apache.maven.continuum.web.model.ProjectSummary
+CLASS|org.apache.maven.continuum.web.model.Session
+CLASS|org.apache.maven.continuum.web.model.SessionUser
+CLASS|org.apache.maven.continuum.web.util.StateGenerator
+CLASS|org.apache.maven.continuum.web.util.WorkingCopyContentGenerator
+CLASS|org.apache.maven.continuum.web.view.BuildCell
+CLASS|org.apache.maven.continuum.web.view.BuildNowCell
+CLASS|org.apache.maven.continuum.web.view.BuildStatusCell
+CLASS|org.apache.maven.continuum.web.view.StateCell
+CLASS|org.apache.maven.continuum.web.view.buildresults.StateCell
+CLASS|org.apache.maven.continuum.web.view.commons.DateCell
+CLASS|org.apache.maven.continuum.web.view.jsp.ui.DataTag
+CLASS|org.apache.maven.continuum.web.view.jsp.ui.DateTag
+CLASS|org.apache.maven.continuum.web.view.jsp.ui.SubmitCancelTag
+CLASS|org.apache.maven.continuum.web.view.projectview.NotifierEventCell
+CLASS|org.apache.maven.continuum.web.view.projectview.NotifierFromCell
+CLASS|org.apache.maven.continuum.web.view.projectview.NotifierRecipientCell
+CLASS|org.apache.maven.continuum.web.xmlrpc.DefaultXmlRpcService
+CLASS|org.apache.maven.continuum.web.xmlrpc.XmlRpcService$1
+CLASS|org.apache.maven.continuum.web.xmlrpc.XmlRpcService
+METHOD|org.apache.maven.continuum.web.action.AboutAction.<init>()V
+METHOD|org.apache.maven.continuum.web.action.AboutAction.doDefault()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.AddMavenOneProjectAction.<init>()V
+METHOD|org.apache.maven.continuum.web.action.AddMavenOneProjectAction.doExecute(Ljava/lang/String;)Lorg/apache/maven/continuum/project/builder/ContinuumProjectBuildingResult;
+METHOD|org.apache.maven.continuum.web.action.AddMavenOneProjectAction.getM1Pom()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.AddMavenOneProjectAction.setM1Pom(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.AddMavenOneProjectAction.getM1PomFile()Ljava/io/File;
+METHOD|org.apache.maven.continuum.web.action.AddMavenOneProjectAction.setM1PomFile(Ljava/io/File;)V
+METHOD|org.apache.maven.continuum.web.action.AddMavenOneProjectAction.getM1PomUrl()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.AddMavenOneProjectAction.setM1PomUrl(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.AddMavenProjectAction.<init>()V
+METHOD|org.apache.maven.continuum.web.action.AddMavenProjectAction.execute()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.AddMavenProjectAction.doExecute(Ljava/lang/String;)Lorg/apache/maven/continuum/project/builder/ContinuumProjectBuildingResult;
+METHOD|org.apache.maven.continuum.web.action.AddMavenProjectAction.doDefault()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.AddMavenProjectAction.getPom()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.AddMavenProjectAction.setPom(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.AddMavenProjectAction.getPomFile()Ljava/io/File;
+METHOD|org.apache.maven.continuum.web.action.AddMavenProjectAction.setPomFile(Ljava/io/File;)V
+METHOD|org.apache.maven.continuum.web.action.AddMavenProjectAction.getPomUrl()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.AddMavenProjectAction.setPomUrl(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.AddMavenTwoProjectAction.<init>()V
+METHOD|org.apache.maven.continuum.web.action.AddMavenTwoProjectAction.doExecute(Ljava/lang/String;)Lorg/apache/maven/continuum/project/builder/ContinuumProjectBuildingResult;
+METHOD|org.apache.maven.continuum.web.action.AddMavenTwoProjectAction.doDefault()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.AddMavenTwoProjectAction.getM2PomFile()Ljava/io/File;
+METHOD|org.apache.maven.continuum.web.action.AddMavenTwoProjectAction.setM2PomFile(Ljava/io/File;)V
+METHOD|org.apache.maven.continuum.web.action.AddMavenTwoProjectAction.getM2PomUrl()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.AddMavenTwoProjectAction.setM2PomUrl(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.AddProjectAction.<init>()V
+METHOD|org.apache.maven.continuum.web.action.AddProjectAction.validate()V
+METHOD|org.apache.maven.continuum.web.action.AddProjectAction.add()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.AddProjectAction.input()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.AddProjectAction.getProjectName()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.AddProjectAction.setProjectName(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.AddProjectAction.getProjectScmPassword()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.AddProjectAction.setProjectScmPassword(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.AddProjectAction.getProjectScmTag()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.AddProjectAction.setProjectScmTag(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.AddProjectAction.getProjectScmUrl()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.AddProjectAction.setProjectScmUrl(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.AddProjectAction.getProjectScmUsername()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.AddProjectAction.setProjectScmUsername(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.AddProjectAction.getProjectType()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.AddProjectAction.setProjectType(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.AddProjectAction.getProjectVersion()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.AddProjectAction.setProjectVersion(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.BuildDefinitionAction.<init>()V
+METHOD|org.apache.maven.continuum.web.action.BuildDefinitionAction.prepare()V
+METHOD|org.apache.maven.continuum.web.action.BuildDefinitionAction.input()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.BuildDefinitionAction.saveToProject()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.BuildDefinitionAction.saveToGroup()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.BuildDefinitionAction.removeFromProject()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.BuildDefinitionAction.removeFromProjectGroup()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.BuildDefinitionAction.getBuildDefinitionFromInput()Lorg/apache/maven/continuum/model/project/BuildDefinition;
+METHOD|org.apache.maven.continuum.web.action.BuildDefinitionAction.getBuildDefinitionId()I
+METHOD|org.apache.maven.continuum.web.action.BuildDefinitionAction.setBuildDefinitionId(I)V
+METHOD|org.apache.maven.continuum.web.action.BuildDefinitionAction.getProjectId()I
+METHOD|org.apache.maven.continuum.web.action.BuildDefinitionAction.setProjectId(I)V
+METHOD|org.apache.maven.continuum.web.action.BuildDefinitionAction.getProjectGroupId()I
+METHOD|org.apache.maven.continuum.web.action.BuildDefinitionAction.setProjectGroupId(I)V
+METHOD|org.apache.maven.continuum.web.action.BuildDefinitionAction.getScheduleId()I
+METHOD|org.apache.maven.continuum.web.action.BuildDefinitionAction.setScheduleId(I)V
+METHOD|org.apache.maven.continuum.web.action.BuildDefinitionAction.isDefaultBuildDefinition()Z
+METHOD|org.apache.maven.continuum.web.action.BuildDefinitionAction.setDefaultBuildDefinition(Z)V
+METHOD|org.apache.maven.continuum.web.action.BuildDefinitionAction.isConfirmed()Z
+METHOD|org.apache.maven.continuum.web.action.BuildDefinitionAction.setConfirmed(Z)V
+METHOD|org.apache.maven.continuum.web.action.BuildDefinitionAction.getExecutor()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.BuildDefinitionAction.setExecutor(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.BuildDefinitionAction.getGoals()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.BuildDefinitionAction.setGoals(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.BuildDefinitionAction.getArguments()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.BuildDefinitionAction.setArguments(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.BuildDefinitionAction.getBuildFile()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.BuildDefinitionAction.setBuildFile(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.BuildDefinitionAction.isBuildFresh()Z
+METHOD|org.apache.maven.continuum.web.action.BuildDefinitionAction.setBuildFresh(Z)V
+METHOD|org.apache.maven.continuum.web.action.BuildDefinitionAction.getSchedules()Ljava/util/Map;
+METHOD|org.apache.maven.continuum.web.action.BuildDefinitionAction.setSchedules(Ljava/util/Map;)V
+METHOD|org.apache.maven.continuum.web.action.BuildDefinitionAction.getProfiles()Ljava/util/Map;
+METHOD|org.apache.maven.continuum.web.action.BuildDefinitionAction.setProfiles(Ljava/util/Map;)V
+METHOD|org.apache.maven.continuum.web.action.BuildProjectAction.<init>()V
+METHOD|org.apache.maven.continuum.web.action.BuildProjectAction.execute()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.BuildProjectAction.setProjectId(I)V
+METHOD|org.apache.maven.continuum.web.action.BuildProjectAction.getProjectId()I
+METHOD|org.apache.maven.continuum.web.action.BuildResultAction.<init>()V
+METHOD|org.apache.maven.continuum.web.action.BuildResultAction.execute()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.BuildResultAction.getBuildId()I
+METHOD|org.apache.maven.continuum.web.action.BuildResultAction.setBuildId(I)V
+METHOD|org.apache.maven.continuum.web.action.BuildResultAction.getProjectId()I
+METHOD|org.apache.maven.continuum.web.action.BuildResultAction.setProjectId(I)V
+METHOD|org.apache.maven.continuum.web.action.BuildResultAction.getProjectName()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.BuildResultAction.setProjectName(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.BuildResultAction.getBuildResult()Lorg/apache/maven/continuum/model/project/BuildResult;
+METHOD|org.apache.maven.continuum.web.action.BuildResultAction.getChangesSinceLastSuccess()Ljava/util/List;
+METHOD|org.apache.maven.continuum.web.action.BuildResultAction.isHasSurefireResults()Z
+METHOD|org.apache.maven.continuum.web.action.BuildResultAction.setHasSurefireResults(Z)V
+METHOD|org.apache.maven.continuum.web.action.BuildResultAction.getBuildOutput()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.BuildResultAction.getState()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.BuildResultsListAction.<init>()V
+METHOD|org.apache.maven.continuum.web.action.BuildResultsListAction.execute()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.BuildResultsListAction.getProjectId()I
+METHOD|org.apache.maven.continuum.web.action.BuildResultsListAction.setProjectId(I)V
+METHOD|org.apache.maven.continuum.web.action.BuildResultsListAction.getBuildResults()Ljava/util/Collection;
+METHOD|org.apache.maven.continuum.web.action.BuildResultsListAction.getProjectName()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.BuildResultsListAction.setProjectName(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.CancelBuildAction.<init>()V
+METHOD|org.apache.maven.continuum.web.action.CancelBuildAction.execute()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.CancelBuildAction.setProjectId(I)V
+METHOD|org.apache.maven.continuum.web.action.CheckConfigurationAction.<init>()V
+METHOD|org.apache.maven.continuum.web.action.CheckConfigurationAction.execute()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.ContinuumActionSupport.<init>()V
+METHOD|org.apache.maven.continuum.web.action.ContinuumActionSupport.prepare()V
+METHOD|org.apache.maven.continuum.web.action.ContinuumActionSupport.getContinuum()Lorg/apache/maven/continuum/Continuum;
+METHOD|org.apache.maven.continuum.web.action.ContinuumActionSupport.setContinuum(Lorg/apache/maven/continuum/Continuum;)V
+METHOD|org.apache.maven.continuum.web.action.ContinuumConfirmAction.<init>()V
+METHOD|org.apache.maven.continuum.web.action.ContinuumConfirmAction.setConfirmationInfo(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.ContinuumConfirmAction.setConfirmedName(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.ContinuumConfirmAction.getConfirmedName()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.ContinuumConfirmAction.setConfirmedValue(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.ContinuumConfirmAction.getConfirmedValue()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.ContinuumConfirmAction.setConfirmationTitle(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.ContinuumConfirmAction.getConfirmationTitle()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.ContinuumConfirmAction.setConfirmedDisplay(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.ContinuumConfirmAction.getConfirmedDisplay()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.ContinuumConfirmAction.setConfirmed(Z)V
+METHOD|org.apache.maven.continuum.web.action.ContinuumConfirmAction.getConfirmed()Z
+METHOD|org.apache.maven.continuum.web.action.ContinuumConfirmAction.setAction(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.ContinuumConfirmAction.getAction()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.DeleteProjectAction.<init>()V
+METHOD|org.apache.maven.continuum.web.action.DeleteProjectAction.execute()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.DeleteProjectAction.doDefault()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.DeleteProjectAction.setProjectId(I)V
+METHOD|org.apache.maven.continuum.web.action.DeleteProjectAction.getProjectId()I
+METHOD|org.apache.maven.continuum.web.action.DeleteProjectAction.setProjectName(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.DeleteProjectAction.getProjectName()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.GroupSummaryAction.<init>()V
+METHOD|org.apache.maven.continuum.web.action.GroupSummaryAction.execute()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.GroupSummaryAction.getGroups()Ljava/util/List;
+METHOD|org.apache.maven.continuum.web.action.GroupSummaryAction.getInfoMessage()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.GroupSummaryAction.setInfoMessage(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.ProjectEditAction.<init>()V
+METHOD|org.apache.maven.continuum.web.action.ProjectEditAction.save()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.ProjectEditAction.edit()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.ProjectEditAction.getProject(I)Lorg/apache/maven/continuum/model/project/Project;
+METHOD|org.apache.maven.continuum.web.action.ProjectEditAction.getProjectId()I
+METHOD|org.apache.maven.continuum.web.action.ProjectEditAction.setProjectId(I)V
+METHOD|org.apache.maven.continuum.web.action.ProjectEditAction.getName()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.ProjectEditAction.setName(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.ProjectEditAction.getVersion()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.ProjectEditAction.setVersion(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.ProjectEditAction.getScmUrl()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.ProjectEditAction.setScmUrl(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.ProjectEditAction.getScmUsername()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.ProjectEditAction.setScmUsername(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.ProjectEditAction.getScmPassword()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.ProjectEditAction.setScmPassword(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.ProjectEditAction.getScmTag()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.ProjectEditAction.setScmTag(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.ProjectEditAction.getProject()Lorg/apache/maven/continuum/model/project/Project;
+METHOD|org.apache.maven.continuum.web.action.ProjectGroupAction.<init>()V
+METHOD|org.apache.maven.continuum.web.action.ProjectGroupAction.summary()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.ProjectGroupAction.members()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.ProjectGroupAction.buildDefinitions()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.ProjectGroupAction.notifiers()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.ProjectGroupAction.remove()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.ProjectGroupAction.build()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.ProjectGroupAction.getProjectGroupId()I
+METHOD|org.apache.maven.continuum.web.action.ProjectGroupAction.setProjectGroupId(I)V
+METHOD|org.apache.maven.continuum.web.action.ProjectGroupAction.getProjectGroup()Lorg/apache/maven/continuum/model/project/ProjectGroup;
+METHOD|org.apache.maven.continuum.web.action.ProjectGroupAction.setProjectGroup(Lorg/apache/maven/continuum/model/project/ProjectGroup;)V
+METHOD|org.apache.maven.continuum.web.action.ProjectGroupAction.isConfirmed()Z
+METHOD|org.apache.maven.continuum.web.action.ProjectGroupAction.setConfirmed(Z)V
+METHOD|org.apache.maven.continuum.web.action.ProjectViewAction.<init>()V
+METHOD|org.apache.maven.continuum.web.action.ProjectViewAction.execute()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.ProjectViewAction.setProjectId(I)V
+METHOD|org.apache.maven.continuum.web.action.ProjectViewAction.getProject()Lorg/apache/maven/continuum/model/project/Project;
+METHOD|org.apache.maven.continuum.web.action.ProjectViewAction.getProjectId()I
+METHOD|org.apache.maven.continuum.web.action.ProjectViewAction.getProjectGroupId()I
+METHOD|org.apache.maven.continuum.web.action.ProjectViewAction.setProjectGroupId(I)V
+METHOD|org.apache.maven.continuum.web.action.ProjectViewAction.getProjectGroup()Lorg/apache/maven/continuum/model/project/ProjectGroup;
+METHOD|org.apache.maven.continuum.web.action.ReleaseCleanupAction.<init>()V
+METHOD|org.apache.maven.continuum.web.action.ReleaseCleanupAction.execute()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.ReleaseCleanupAction.getReleaseId()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.ReleaseCleanupAction.setReleaseId(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.ReleaseCleanupAction.getProjectId()I
+METHOD|org.apache.maven.continuum.web.action.ReleaseCleanupAction.setProjectId(I)V
+METHOD|org.apache.maven.continuum.web.action.ReleaseInProgressAction.<init>()V
+METHOD|org.apache.maven.continuum.web.action.ReleaseInProgressAction.execute()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.ReleaseInProgressAction.viewResult()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.ReleaseInProgressAction.getReleaseId()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.ReleaseInProgressAction.setReleaseId(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.ReleaseInProgressAction.getListener()Lorg/apache/maven/continuum/release/ContinuumReleaseManagerListener;
+METHOD|org.apache.maven.continuum.web.action.ReleaseInProgressAction.setListener(Lorg/apache/maven/continuum/release/ContinuumReleaseManagerListener;)V
+METHOD|org.apache.maven.continuum.web.action.ReleaseInProgressAction.getResult()Lorg/apache/maven/shared/release/ReleaseResult;
+METHOD|org.apache.maven.continuum.web.action.ReleaseInProgressAction.setResult(Lorg/apache/maven/shared/release/ReleaseResult;)V
+METHOD|org.apache.maven.continuum.web.action.ReleaseInProgressAction.getProjectId()I
+METHOD|org.apache.maven.continuum.web.action.ReleaseInProgressAction.setProjectId(I)V
+METHOD|org.apache.maven.continuum.web.action.ReleasePerformAction.<init>()V
+METHOD|org.apache.maven.continuum.web.action.ReleasePerformAction.inputFromScm()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.ReleasePerformAction.input()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.ReleasePerformAction.execute()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.ReleasePerformAction.executeFromScm()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.ReleasePerformAction.populateFromProject()V
+METHOD|org.apache.maven.continuum.web.action.ReleasePerformAction.getReleaseId()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.ReleasePerformAction.setReleaseId(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.ReleasePerformAction.getScmUrl()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.ReleasePerformAction.setScmUrl(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.ReleasePerformAction.getScmUsername()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.ReleasePerformAction.setScmUsername(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.ReleasePerformAction.getScmPassword()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.ReleasePerformAction.setScmPassword(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.ReleasePerformAction.getScmTag()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.ReleasePerformAction.setScmTag(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.ReleasePerformAction.getScmTagBase()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.ReleasePerformAction.setScmTagBase(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.ReleasePerformAction.getGoals()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.ReleasePerformAction.setGoals(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.ReleasePerformAction.isUseReleaseProfile()Z
+METHOD|org.apache.maven.continuum.web.action.ReleasePerformAction.setUseReleaseProfile(Z)V
+METHOD|org.apache.maven.continuum.web.action.ReleasePerformAction.getListener()Lorg/apache/maven/continuum/release/ContinuumReleaseManagerListener;
+METHOD|org.apache.maven.continuum.web.action.ReleasePerformAction.setListener(Lorg/apache/maven/continuum/release/ContinuumReleaseManagerListener;)V
+METHOD|org.apache.maven.continuum.web.action.ReleasePerformAction.getResult()Lorg/apache/maven/shared/release/ReleaseResult;
+METHOD|org.apache.maven.continuum.web.action.ReleasePerformAction.setResult(Lorg/apache/maven/shared/release/ReleaseResult;)V
+METHOD|org.apache.maven.continuum.web.action.ReleasePerformAction.getProjectId()I
+METHOD|org.apache.maven.continuum.web.action.ReleasePerformAction.setProjectId(I)V
+METHOD|org.apache.maven.continuum.web.action.ReleasePrepareAction.<init>()V
+METHOD|org.apache.maven.continuum.web.action.ReleasePrepareAction.input()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.ReleasePrepareAction.getReleasePluginParameters(Ljava/lang/String;Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.ReleasePrepareAction.execute()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.ReleasePrepareAction.viewResult()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.ReleasePrepareAction.checkProgress()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.ReleasePrepareAction.processProject(Ljava/lang/String;Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.ReleasePrepareAction.setProperties(Lorg/apache/maven/model/Model;)V
+METHOD|org.apache.maven.continuum.web.action.ReleasePrepareAction.getDevVersionMap()Ljava/util/Map;
+METHOD|org.apache.maven.continuum.web.action.ReleasePrepareAction.getRelVersionMap()Ljava/util/Map;
+METHOD|org.apache.maven.continuum.web.action.ReleasePrepareAction.getVersionMap(Ljava/util/List;Ljava/util/List;)Ljava/util/Map;
+METHOD|org.apache.maven.continuum.web.action.ReleasePrepareAction.getReleaseProperties()Ljava/util/Properties;
+METHOD|org.apache.maven.continuum.web.action.ReleasePrepareAction.getProjectKeys()Ljava/util/List;
+METHOD|org.apache.maven.continuum.web.action.ReleasePrepareAction.setProjectKeys(Ljava/util/List;)V
+METHOD|org.apache.maven.continuum.web.action.ReleasePrepareAction.getDevVersions()Ljava/util/List;
+METHOD|org.apache.maven.continuum.web.action.ReleasePrepareAction.setDevVersions(Ljava/util/List;)V
+METHOD|org.apache.maven.continuum.web.action.ReleasePrepareAction.getRelVersions()Ljava/util/List;
+METHOD|org.apache.maven.continuum.web.action.ReleasePrepareAction.setRelVersions(Ljava/util/List;)V
+METHOD|org.apache.maven.continuum.web.action.ReleasePrepareAction.getProjectId()I
+METHOD|org.apache.maven.continuum.web.action.ReleasePrepareAction.setProjectId(I)V
+METHOD|org.apache.maven.continuum.web.action.ReleasePrepareAction.getScmUsername()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.ReleasePrepareAction.setScmUsername(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.ReleasePrepareAction.getScmPassword()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.ReleasePrepareAction.setScmPassword(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.ReleasePrepareAction.getScmTag()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.ReleasePrepareAction.setScmTag(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.ReleasePrepareAction.getScmTagBase()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.ReleasePrepareAction.setScmTagBase(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.ReleasePrepareAction.getProjects()Ljava/util/List;
+METHOD|org.apache.maven.continuum.web.action.ReleasePrepareAction.setProjects(Ljava/util/List;)V
+METHOD|org.apache.maven.continuum.web.action.ReleasePrepareAction.getListener()Lorg/apache/maven/continuum/release/ContinuumReleaseManagerListener;
+METHOD|org.apache.maven.continuum.web.action.ReleasePrepareAction.setListener(Lorg/apache/maven/continuum/release/DefaultReleaseManagerListener;)V
+METHOD|org.apache.maven.continuum.web.action.ReleasePrepareAction.getName()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.ReleasePrepareAction.setName(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.ReleasePrepareAction.getReleaseId()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.ReleasePrepareAction.setReleaseId(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.ReleasePrepareAction.getResult()Lorg/apache/maven/shared/release/ReleaseResult;
+METHOD|org.apache.maven.continuum.web.action.ReleasePrepareAction.setResult(Lorg/apache/maven/shared/release/ReleaseResult;)V
+METHOD|org.apache.maven.continuum.web.action.ReleasePrepareAction.getPrepareGoals()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.ReleasePrepareAction.setPrepareGoals(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.ReleaseProjectAction.<init>()V
+METHOD|org.apache.maven.continuum.web.action.ReleaseProjectAction.promptReleaseGoal()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.ReleaseProjectAction.execute()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.ReleaseProjectAction.getProjectId()I
+METHOD|org.apache.maven.continuum.web.action.ReleaseProjectAction.setProjectId(I)V
+METHOD|org.apache.maven.continuum.web.action.ReleaseProjectAction.getPreparedReleaseName()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.ReleaseProjectAction.setPreparedReleaseName(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.ReleaseProjectAction.getGoal()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.ReleaseProjectAction.setGoal(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.ReleaseProjectAction.getProject()Lorg/apache/maven/continuum/model/project/Project;
+METHOD|org.apache.maven.continuum.web.action.ReleaseProjectAction.setProject(Lorg/apache/maven/continuum/model/project/Project;)V
+METHOD|org.apache.maven.continuum.web.action.ReleaseProjectAction.getScmUrl()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.ReleaseProjectAction.setScmUrl(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.ReleaseProjectAction.getReleaseList()Ljava/util/List;
+METHOD|org.apache.maven.continuum.web.action.ReleaseProjectAction.setReleaseList(Ljava/util/List;)V
+METHOD|org.apache.maven.continuum.web.action.ReleaseProjectAction.getPreparedReleaseId()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.ReleaseProjectAction.setPreparedReleaseId(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.ReleaseProjectAction.getProjectName()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.ReleaseProjectAction.setProjectName(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.ReleaseProjectGoalAction.<init>()V
+METHOD|org.apache.maven.continuum.web.action.ReleaseProjectGoalAction.execute()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.ReleaseProjectGoalAction.getProjectId()I
+METHOD|org.apache.maven.continuum.web.action.ReleaseProjectGoalAction.setProjectId(I)V
+METHOD|org.apache.maven.continuum.web.action.ReleaseProjectGoalAction.getProjectGroupId()I
+METHOD|org.apache.maven.continuum.web.action.ReleaseProjectGoalAction.setProjectGroupId(I)V
+METHOD|org.apache.maven.continuum.web.action.ReleaseProjectGoalAction.getProjectName()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.ReleaseProjectGoalAction.setProjectName(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.ReleaseProjectGoalAction.getPreparedReleaseName()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.ReleaseProjectGoalAction.setPreparedReleaseName(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.ReleaseProjectGoalAction.getPreparedReleaseId()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.ReleaseProjectGoalAction.setPreparedReleaseId(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.ScheduleAction.<init>()V
+METHOD|org.apache.maven.continuum.web.action.ScheduleAction.summary()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.ScheduleAction.input()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.ScheduleAction.save()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.ScheduleAction.setFields(Lorg/apache/maven/continuum/model/project/Schedule;)Lorg/apache/maven/continuum/model/project/Schedule;
+METHOD|org.apache.maven.continuum.web.action.ScheduleAction.confirm()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.ScheduleAction.remove()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.ScheduleAction.getSchedules()Ljava/util/Collection;
+METHOD|org.apache.maven.continuum.web.action.ScheduleAction.getId()I
+METHOD|org.apache.maven.continuum.web.action.ScheduleAction.setId(I)V
+METHOD|org.apache.maven.continuum.web.action.ScheduleAction.isActive()Z
+METHOD|org.apache.maven.continuum.web.action.ScheduleAction.setActive(Z)V
+METHOD|org.apache.maven.continuum.web.action.ScheduleAction.getDelay()I
+METHOD|org.apache.maven.continuum.web.action.ScheduleAction.setDelay(I)V
+METHOD|org.apache.maven.continuum.web.action.ScheduleAction.getDescription()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.ScheduleAction.setDescription(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.ScheduleAction.getName()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.ScheduleAction.setName(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.ScheduleAction.getSchedule()Lorg/apache/maven/continuum/model/project/Schedule;
+METHOD|org.apache.maven.continuum.web.action.ScheduleAction.setSchedule(Lorg/apache/maven/continuum/model/project/Schedule;)V
+METHOD|org.apache.maven.continuum.web.action.ScheduleAction.isConfirmed()Z
+METHOD|org.apache.maven.continuum.web.action.ScheduleAction.setConfirmed(Z)V
+METHOD|org.apache.maven.continuum.web.action.ScheduleAction.getMaxJobExecutionTime()I
+METHOD|org.apache.maven.continuum.web.action.ScheduleAction.setMaxJobExecutionTime(I)V
+METHOD|org.apache.maven.continuum.web.action.ScheduleAction.getSecond()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.ScheduleAction.setSecond(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.ScheduleAction.getMinute()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.ScheduleAction.setMinute(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.ScheduleAction.getHour()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.ScheduleAction.setHour(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.ScheduleAction.getDayOfMonth()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.ScheduleAction.setDayOfMonth(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.ScheduleAction.getYear()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.ScheduleAction.setYear(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.ScheduleAction.getMonth()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.ScheduleAction.setMonth(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.ScheduleAction.getDayOfWeek()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.ScheduleAction.setDayOfWeek(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.ScheduleAction.getCronExpression()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.SummaryAction.<init>()V
+METHOD|org.apache.maven.continuum.web.action.SummaryAction.execute()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.SummaryAction.getNbSuccesses()I
+METHOD|org.apache.maven.continuum.web.action.SummaryAction.getNbFailures()I
+METHOD|org.apache.maven.continuum.web.action.SummaryAction.getNbErrors()I
+METHOD|org.apache.maven.continuum.web.action.SummaryAction.getProjects()Ljava/util/List;
+METHOD|org.apache.maven.continuum.web.action.SummaryAction.getProjectGroupId()I
+METHOD|org.apache.maven.continuum.web.action.SummaryAction.setProjectGroupId(I)V
+METHOD|org.apache.maven.continuum.web.action.SummaryAction.getProjectGroupName()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.SummaryAction.setProjectGroupName(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.SurefireReportAction$ReportTest.<init>(Lorg/apache/maven/continuum/web/action/SurefireReportAction;)V
+METHOD|org.apache.maven.continuum.web.action.SurefireReportAction$ReportTest.getName()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.SurefireReportAction$ReportTest.setName(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.SurefireReportAction$ReportTest.getTests()I
+METHOD|org.apache.maven.continuum.web.action.SurefireReportAction$ReportTest.setTests(I)V
+METHOD|org.apache.maven.continuum.web.action.SurefireReportAction$ReportTest.getErrors()I
+METHOD|org.apache.maven.continuum.web.action.SurefireReportAction$ReportTest.setErrors(I)V
+METHOD|org.apache.maven.continuum.web.action.SurefireReportAction$ReportTest.getFailures()I
+METHOD|org.apache.maven.continuum.web.action.SurefireReportAction$ReportTest.setFailures(I)V
+METHOD|org.apache.maven.continuum.web.action.SurefireReportAction$ReportTest.getSuccessRate()F
+METHOD|org.apache.maven.continuum.web.action.SurefireReportAction$ReportTest.getElapsedTime()F
+METHOD|org.apache.maven.continuum.web.action.SurefireReportAction$ReportTest.setElapsedTime(F)V
+METHOD|org.apache.maven.continuum.web.action.SurefireReportAction$ReportTest.getChildren()Ljava/util/List;
+METHOD|org.apache.maven.continuum.web.action.SurefireReportAction$ReportTest.setChildren(Ljava/util/List;)V
+METHOD|org.apache.maven.continuum.web.action.SurefireReportAction$ReportTest.getId()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.SurefireReportAction$ReportTest.setId(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.SurefireReportAction$ReportTestCase.<init>(Lorg/apache/maven/continuum/web/action/SurefireReportAction;)V
+METHOD|org.apache.maven.continuum.web.action.SurefireReportAction$ReportTestCase.getName()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.SurefireReportAction$ReportTestCase.setName(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.SurefireReportAction$ReportTestCase.getFullClassName()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.SurefireReportAction$ReportTestCase.setFullClassName(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.SurefireReportAction$ReportTestCase.getClassName()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.SurefireReportAction$ReportTestCase.setClassName(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.SurefireReportAction$ReportTestCase.getTime()F
+METHOD|org.apache.maven.continuum.web.action.SurefireReportAction$ReportTestCase.setTime(F)V
+METHOD|org.apache.maven.continuum.web.action.SurefireReportAction$ReportTestCase.getFullName()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.SurefireReportAction$ReportTestCase.setFullName(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.SurefireReportAction$ReportTestCase.getFailureType()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.SurefireReportAction$ReportTestCase.setFailureType(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.SurefireReportAction$ReportTestCase.getFailureMessage()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.SurefireReportAction$ReportTestCase.setFailureMessage(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.SurefireReportAction$ReportTestCase.getFailureDetails()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.SurefireReportAction$ReportTestCase.setFailureDetails(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.SurefireReportAction$ReportTestSuite.<init>(Lorg/apache/maven/continuum/web/action/SurefireReportAction;)V
+METHOD|org.apache.maven.continuum.web.action.SurefireReportAction$ReportTestSuite.parse(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.SurefireReportAction$ReportTestSuite.startElement(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lorg/xml/sax/Attributes;)V
+METHOD|org.apache.maven.continuum.web.action.SurefireReportAction$ReportTestSuite.endElement(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.SurefireReportAction$ReportTestSuite.characters([CII)V
+METHOD|org.apache.maven.continuum.web.action.SurefireReportAction$ReportTestSuite.getTestCases()Ljava/util/List;
+METHOD|org.apache.maven.continuum.web.action.SurefireReportAction$ReportTestSuite.getNumberOfErrors()I
+METHOD|org.apache.maven.continuum.web.action.SurefireReportAction$ReportTestSuite.setNumberOfErrors(I)V
+METHOD|org.apache.maven.continuum.web.action.SurefireReportAction$ReportTestSuite.getNumberOfFailures()I
+METHOD|org.apache.maven.continuum.web.action.SurefireReportAction$ReportTestSuite.setNumberOfFailures(I)V
+METHOD|org.apache.maven.continuum.web.action.SurefireReportAction$ReportTestSuite.getNumberOfTests()I
+METHOD|org.apache.maven.continuum.web.action.SurefireReportAction$ReportTestSuite.setNumberOfTests(I)V
+METHOD|org.apache.maven.continuum.web.action.SurefireReportAction$ReportTestSuite.getName()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.SurefireReportAction$ReportTestSuite.setName(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.SurefireReportAction$ReportTestSuite.getFName()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.SurefireReportAction$ReportTestSuite.setFName(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.SurefireReportAction$ReportTestSuite.getPackageName()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.SurefireReportAction$ReportTestSuite.setPackageName(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.SurefireReportAction$ReportTestSuite.getTimeElapsed()F
+METHOD|org.apache.maven.continuum.web.action.SurefireReportAction$ReportTestSuite.setTimeElapsed(F)V
+METHOD|org.apache.maven.continuum.web.action.SurefireReportAction$ReportTestSuite.parseCause(Ljava/lang/String;)Ljava/util/List;
+METHOD|org.apache.maven.continuum.web.action.SurefireReportAction$ReportTestSuite.parseCause(Ljava/lang/String;Ljava/lang/String;)Ljava/util/List;
+METHOD|org.apache.maven.continuum.web.action.SurefireReportAction$ReportTestSuite.setTestCases(Ljava/util/List;)V
+METHOD|org.apache.maven.continuum.web.action.SurefireReportAction$ReportTestSuite.<init>(Lorg/apache/maven/continuum/web/action/SurefireReportAction;Lorg/apache/maven/continuum/web/action/SurefireReportAction$1;)V
+METHOD|org.apache.maven.continuum.web.action.SurefireReportAction.<init>()V
+METHOD|org.apache.maven.continuum.web.action.SurefireReportAction.execute()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.SurefireReportAction.parseReports(Ljava/io/File;)V
+METHOD|org.apache.maven.continuum.web.action.SurefireReportAction.getSummary(Ljava/util/List;)V
+METHOD|org.apache.maven.continuum.web.action.SurefireReportAction.getDetails(Ljava/util/List;)V
+METHOD|org.apache.maven.continuum.web.action.SurefireReportAction.getBuildId()I
+METHOD|org.apache.maven.continuum.web.action.SurefireReportAction.setBuildId(I)V
+METHOD|org.apache.maven.continuum.web.action.SurefireReportAction.getProjectId()I
+METHOD|org.apache.maven.continuum.web.action.SurefireReportAction.setProjectId(I)V
+METHOD|org.apache.maven.continuum.web.action.SurefireReportAction.getIncludedFiles(Ljava/io/File;Ljava/lang/String;Ljava/lang/String;)[Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.SurefireReportAction.getTestSuites()Ljava/util/List;
+METHOD|org.apache.maven.continuum.web.action.SurefireReportAction.setTestSuites(Ljava/util/List;)V
+METHOD|org.apache.maven.continuum.web.action.SurefireReportAction.getProjectName()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.SurefireReportAction.setProjectName(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.SurefireReportAction.getTestSummaryList()Ljava/util/List;
+METHOD|org.apache.maven.continuum.web.action.SurefireReportAction.setTestSummaryList(Ljava/util/List;)V
+METHOD|org.apache.maven.continuum.web.action.SurefireReportAction.getTestPackageList()Ljava/util/List;
+METHOD|org.apache.maven.continuum.web.action.SurefireReportAction.setTestPackageList(Ljava/util/List;)V
+METHOD|org.apache.maven.continuum.web.action.UserGroupManagementAction.<init>()V
+METHOD|org.apache.maven.continuum.web.action.UserGroupManagementAction.summary()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.UserGroupManagementAction.input()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.UserGroupManagementAction.save()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.UserGroupManagementAction.remove()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.UserGroupManagementAction.getUserGroupId()I
+METHOD|org.apache.maven.continuum.web.action.UserGroupManagementAction.setUserGroupId(I)V
+METHOD|org.apache.maven.continuum.web.action.UserGroupManagementAction.getDescription()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.UserGroupManagementAction.setDescription(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.UserGroupManagementAction.getName()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.UserGroupManagementAction.setName(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.UserGroupManagementAction.getUserGroups()Ljava/util/List;
+METHOD|org.apache.maven.continuum.web.action.UserGroupManagementAction.setUserGroups(Ljava/util/List;)V
+METHOD|org.apache.maven.continuum.web.action.UserManagementAction.<init>()V
+METHOD|org.apache.maven.continuum.web.action.UserManagementAction.prepare()V
+METHOD|org.apache.maven.continuum.web.action.UserManagementAction.summary()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.UserManagementAction.input()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.UserManagementAction.save()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.UserManagementAction.remove()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.UserManagementAction.getUserId()I
+METHOD|org.apache.maven.continuum.web.action.UserManagementAction.setUserId(I)V
+METHOD|org.apache.maven.continuum.web.action.UserManagementAction.getUsername()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.UserManagementAction.setUsername(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.UserManagementAction.getFullName()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.UserManagementAction.setFullName(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.UserManagementAction.getEmail()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.UserManagementAction.setEmail(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.UserManagementAction.getPassword()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.UserManagementAction.setPassword(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.UserManagementAction.getPasswordTwo()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.UserManagementAction.setPasswordTwo(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.UserManagementAction.getUsers()Ljava/util/List;
+METHOD|org.apache.maven.continuum.web.action.UserManagementAction.setUsers(Ljava/util/List;)V
+METHOD|org.apache.maven.continuum.web.action.UserManagementAction.getUserGroupId()I
+METHOD|org.apache.maven.continuum.web.action.UserManagementAction.setUserGroupId(I)V
+METHOD|org.apache.maven.continuum.web.action.UserManagementAction.getUserGroups()Ljava/util/Map;
+METHOD|org.apache.maven.continuum.web.action.UserManagementAction.setUserGroups(Ljava/util/Map;)V
+METHOD|org.apache.maven.continuum.web.action.WorkingCopyAction.<init>()V
+METHOD|org.apache.maven.continuum.web.action.WorkingCopyAction.execute()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.WorkingCopyAction.getProjectId()I
+METHOD|org.apache.maven.continuum.web.action.WorkingCopyAction.setProjectId(I)V
+METHOD|org.apache.maven.continuum.web.action.WorkingCopyAction.getProjectName()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.WorkingCopyAction.getUserDirectory()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.WorkingCopyAction.setUserDirectory(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.WorkingCopyAction.setFile(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.WorkingCopyAction.getFiles()Ljava/util/List;
+METHOD|org.apache.maven.continuum.web.action.WorkingCopyAction.getOutput()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.WorkingCopyAction.getFileContent()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.WorkingCopyAction.getInputStream()Ljava/io/InputStream;
+METHOD|org.apache.maven.continuum.web.action.WorkingCopyAction.getFileLength()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.WorkingCopyAction.getDownloadFilename()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.WorkingCopyAction.getMimeType()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.WorkingCopyAction.<clinit>()V
+METHOD|org.apache.maven.continuum.web.action.admin.ConfigurationAction.<init>()V
+METHOD|org.apache.maven.continuum.web.action.admin.ConfigurationAction.prepare()V
+METHOD|org.apache.maven.continuum.web.action.admin.ConfigurationAction.save()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.admin.ConfigurationAction.resolveGuestAccountLockingStatus()V
+METHOD|org.apache.maven.continuum.web.action.admin.ConfigurationAction.getGuestAccountLockingStatus()Z
+METHOD|org.apache.maven.continuum.web.action.admin.ConfigurationAction.isGuestAccountEnabled()Z
+METHOD|org.apache.maven.continuum.web.action.admin.ConfigurationAction.setGuestAccountEnabled(Z)V
+METHOD|org.apache.maven.continuum.web.action.admin.ConfigurationAction.getWorkingDirectory()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.admin.ConfigurationAction.setWorkingDirectory(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.admin.ConfigurationAction.getDeploymentRepositoryDirectory()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.admin.ConfigurationAction.setDeploymentRepositoryDirectory(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.admin.ConfigurationAction.getBuildOutputDirectory()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.admin.ConfigurationAction.setBuildOutputDirectory(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.admin.ConfigurationAction.getBaseUrl()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.admin.ConfigurationAction.setBaseUrl(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.admin.ConfigurationAction.getSecureActionBundle()Lorg/codehaus/plexus/security/ui/web/interceptor/SecureActionBundle;
+METHOD|org.apache.maven.continuum.web.action.component.BuildDefinitionSummaryAction.<init>()V
+METHOD|org.apache.maven.continuum.web.action.component.BuildDefinitionSummaryAction.summarizeForProject()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.component.BuildDefinitionSummaryAction.summarizeForGroup()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.component.BuildDefinitionSummaryAction.gatherProjectBuildDefinitionSummaries(I)Ljava/util/List;
+METHOD|org.apache.maven.continuum.web.action.component.BuildDefinitionSummaryAction.gatherGroupBuildDefinitionSummaries(I)Ljava/util/List;
+METHOD|org.apache.maven.continuum.web.action.component.BuildDefinitionSummaryAction.generateBuildDefinitionSummary(Lorg/apache/maven/continuum/model/project/BuildDefinition;)Lorg/apache/maven/continuum/web/model/BuildDefinitionSummary;
+METHOD|org.apache.maven.continuum.web.action.component.BuildDefinitionSummaryAction.getProjectId()I
+METHOD|org.apache.maven.continuum.web.action.component.BuildDefinitionSummaryAction.setProjectId(I)V
+METHOD|org.apache.maven.continuum.web.action.component.BuildDefinitionSummaryAction.getProjectGroupId()I
+METHOD|org.apache.maven.continuum.web.action.component.BuildDefinitionSummaryAction.setProjectGroupId(I)V
+METHOD|org.apache.maven.continuum.web.action.component.BuildDefinitionSummaryAction.getProjectGroupName()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.component.BuildDefinitionSummaryAction.setProjectGroupName(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.component.BuildDefinitionSummaryAction.getProjectBuildDefinitionSummaries()Ljava/util/List;
+METHOD|org.apache.maven.continuum.web.action.component.BuildDefinitionSummaryAction.setProjectBuildDefinitionSummaries(Ljava/util/List;)V
+METHOD|org.apache.maven.continuum.web.action.component.BuildDefinitionSummaryAction.getGroupBuildDefinitionSummaries()Ljava/util/List;
+METHOD|org.apache.maven.continuum.web.action.component.BuildDefinitionSummaryAction.setGroupBuildDefinitionSummaries(Ljava/util/List;)V
+METHOD|org.apache.maven.continuum.web.action.component.BuildDefinitionSummaryAction.getAllBuildDefinitionSummaries()Ljava/util/List;
+METHOD|org.apache.maven.continuum.web.action.component.BuildDefinitionSummaryAction.setAllBuildDefinitionSummaries(Ljava/util/List;)V
+METHOD|org.apache.maven.continuum.web.action.component.BuildDefinitionSummaryAction.getProjectGroup()Lorg/apache/maven/continuum/model/project/ProjectGroup;
+METHOD|org.apache.maven.continuum.web.action.component.BuildDefinitionSummaryAction.setProjectGroup(Lorg/apache/maven/continuum/model/project/ProjectGroup;)V
+METHOD|org.apache.maven.continuum.web.action.component.ContinuumTabAction.<init>()V
+METHOD|org.apache.maven.continuum.web.action.component.ContinuumTabAction.getTabName()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.component.ContinuumTabAction.setTabName(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.component.NotifierSummaryAction.<init>()V
+METHOD|org.apache.maven.continuum.web.action.component.NotifierSummaryAction.summarizeForProject()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.component.NotifierSummaryAction.summarizeForProjectGroup()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.component.NotifierSummaryAction.gatherGroupNotifierSummaries(I)Ljava/util/List;
+METHOD|org.apache.maven.continuum.web.action.component.NotifierSummaryAction.generateNotifierSummary(Lorg/apache/maven/continuum/model/project/ProjectNotifier;)Lorg/apache/maven/continuum/web/model/NotifierSummary;
+METHOD|org.apache.maven.continuum.web.action.component.NotifierSummaryAction.getProjectGroupId()I
+METHOD|org.apache.maven.continuum.web.action.component.NotifierSummaryAction.setProjectGroupId(I)V
+METHOD|org.apache.maven.continuum.web.action.component.NotifierSummaryAction.getProjectGroupName()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.component.NotifierSummaryAction.setProjectGroupName(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.component.NotifierSummaryAction.getProjectId()I
+METHOD|org.apache.maven.continuum.web.action.component.NotifierSummaryAction.setProjectId(I)V
+METHOD|org.apache.maven.continuum.web.action.component.NotifierSummaryAction.getProjectGroup()Lorg/apache/maven/continuum/model/project/ProjectGroup;
+METHOD|org.apache.maven.continuum.web.action.component.NotifierSummaryAction.setProjectGroup(Lorg/apache/maven/continuum/model/project/ProjectGroup;)V
+METHOD|org.apache.maven.continuum.web.action.component.NotifierSummaryAction.getProjectGroupNotifierSummaries()Ljava/util/List;
+METHOD|org.apache.maven.continuum.web.action.component.NotifierSummaryAction.setProjectGroupNotifierSummaries(Ljava/util/List;)V
+METHOD|org.apache.maven.continuum.web.action.notifier.AbstractGroupNotifierEditAction.<init>()V
+METHOD|org.apache.maven.continuum.web.action.notifier.AbstractGroupNotifierEditAction.saveNotifier(Lorg/apache/maven/continuum/model/project/ProjectNotifier;)V
+METHOD|org.apache.maven.continuum.web.action.notifier.AbstractGroupNotifierEditAction.getNotifier()Lorg/apache/maven/continuum/model/project/ProjectNotifier;
+METHOD|org.apache.maven.continuum.web.action.notifier.AbstractGroupNotifierEditAction.getProjectGroupId()I
+METHOD|org.apache.maven.continuum.web.action.notifier.AbstractGroupNotifierEditAction.setProjectGroupId(I)V
+METHOD|org.apache.maven.continuum.web.action.notifier.AbstractNotifierEditActionSupport.<init>()V
+METHOD|org.apache.maven.continuum.web.action.notifier.AbstractNotifierEditActionSupport.getNotifier()Lorg/apache/maven/continuum/model/project/ProjectNotifier;
+METHOD|org.apache.maven.continuum.web.action.notifier.AbstractNotifierEditActionSupport.saveNotifier(Lorg/apache/maven/continuum/model/project/ProjectNotifier;)V
+METHOD|org.apache.maven.continuum.web.action.notifier.AbstractNotifierEditActionSupport.save()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.notifier.AbstractNotifierEditActionSupport.edit()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.notifier.AbstractNotifierEditActionSupport.getNotifierId()I
+METHOD|org.apache.maven.continuum.web.action.notifier.AbstractNotifierEditActionSupport.getNotifierType()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.notifier.AbstractNotifierEditActionSupport.setNotifierType(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.notifier.AbstractNotifierEditActionSupport.isSendOnSuccess()Z
+METHOD|org.apache.maven.continuum.web.action.notifier.AbstractNotifierEditActionSupport.setSendOnSuccess(Z)V
+METHOD|org.apache.maven.continuum.web.action.notifier.AbstractNotifierEditActionSupport.isSendOnFailure()Z
+METHOD|org.apache.maven.continuum.web.action.notifier.AbstractNotifierEditActionSupport.setSendOnFailure(Z)V
+METHOD|org.apache.maven.continuum.web.action.notifier.AbstractNotifierEditActionSupport.isSendOnError()Z
+METHOD|org.apache.maven.continuum.web.action.notifier.AbstractNotifierEditActionSupport.setSendOnError(Z)V
+METHOD|org.apache.maven.continuum.web.action.notifier.AbstractNotifierEditActionSupport.isSendOnWarning()Z
+METHOD|org.apache.maven.continuum.web.action.notifier.AbstractNotifierEditActionSupport.setSendOnWarning(Z)V
+METHOD|org.apache.maven.continuum.web.action.notifier.AbstractNotifierEditActionSupport.setNotifierId(I)V
+METHOD|org.apache.maven.continuum.web.action.notifier.AbstractNotifierEditActionSupport.initConfiguration(Ljava/util/Map;)V
+METHOD|org.apache.maven.continuum.web.action.notifier.AbstractNotifierEditActionSupport.setNotifierConfiguration(Lorg/apache/maven/continuum/model/project/ProjectNotifier;)V
+METHOD|org.apache.maven.continuum.web.action.notifier.AbstractProjectNotifierEditAction.<init>()V
+METHOD|org.apache.maven.continuum.web.action.notifier.AbstractProjectNotifierEditAction.saveNotifier(Lorg/apache/maven/continuum/model/project/ProjectNotifier;)V
+METHOD|org.apache.maven.continuum.web.action.notifier.AbstractProjectNotifierEditAction.getNotifier()Lorg/apache/maven/continuum/model/project/ProjectNotifier;
+METHOD|org.apache.maven.continuum.web.action.notifier.AbstractProjectNotifierEditAction.getProjectId()I
+METHOD|org.apache.maven.continuum.web.action.notifier.AbstractProjectNotifierEditAction.setProjectId(I)V
+METHOD|org.apache.maven.continuum.web.action.notifier.AddGroupNotifierAction.<init>()V
+METHOD|org.apache.maven.continuum.web.action.notifier.AddGroupNotifierAction.execute()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.notifier.AddGroupNotifierAction.doDefault()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.notifier.AddGroupNotifierAction.getNotifierType()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.notifier.AddGroupNotifierAction.setNotifierType(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.notifier.AddGroupNotifierAction.getProjectGroupId()I
+METHOD|org.apache.maven.continuum.web.action.notifier.AddGroupNotifierAction.setProjectGroupId(I)V
+METHOD|org.apache.maven.continuum.web.action.notifier.AddProjectNotifierAction.<init>()V
+METHOD|org.apache.maven.continuum.web.action.notifier.AddProjectNotifierAction.execute()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.notifier.AddProjectNotifierAction.doDefault()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.notifier.AddProjectNotifierAction.getNotifierType()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.notifier.AddProjectNotifierAction.setNotifierType(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.notifier.AddProjectNotifierAction.getProjectId()I
+METHOD|org.apache.maven.continuum.web.action.notifier.AddProjectNotifierAction.setProjectId(I)V
+METHOD|org.apache.maven.continuum.web.action.notifier.DeleteGroupNotifierAction.<init>()V
+METHOD|org.apache.maven.continuum.web.action.notifier.DeleteGroupNotifierAction.execute()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.notifier.DeleteGroupNotifierAction.doDefault()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.notifier.DeleteGroupNotifierAction.setNotifierId(I)V
+METHOD|org.apache.maven.continuum.web.action.notifier.DeleteGroupNotifierAction.getNotifierId()I
+METHOD|org.apache.maven.continuum.web.action.notifier.DeleteGroupNotifierAction.setNotifierType(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.notifier.DeleteGroupNotifierAction.getNotifierType()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.notifier.DeleteGroupNotifierAction.getProjectGroupId()I
+METHOD|org.apache.maven.continuum.web.action.notifier.DeleteGroupNotifierAction.setProjectGroupId(I)V
+METHOD|org.apache.maven.continuum.web.action.notifier.DeleteProjectNotifierAction.<init>()V
+METHOD|org.apache.maven.continuum.web.action.notifier.DeleteProjectNotifierAction.execute()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.notifier.DeleteProjectNotifierAction.doDefault()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.notifier.DeleteProjectNotifierAction.setProjectId(I)V
+METHOD|org.apache.maven.continuum.web.action.notifier.DeleteProjectNotifierAction.getProjectId()I
+METHOD|org.apache.maven.continuum.web.action.notifier.DeleteProjectNotifierAction.setNotifierId(I)V
+METHOD|org.apache.maven.continuum.web.action.notifier.DeleteProjectNotifierAction.getNotifierId()I
+METHOD|org.apache.maven.continuum.web.action.notifier.DeleteProjectNotifierAction.setNotifierType(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.notifier.DeleteProjectNotifierAction.getNotifierType()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.notifier.IrcGroupNotifierEditAction.<init>()V
+METHOD|org.apache.maven.continuum.web.action.notifier.IrcGroupNotifierEditAction.initConfiguration(Ljava/util/Map;)V
+METHOD|org.apache.maven.continuum.web.action.notifier.IrcGroupNotifierEditAction.setNotifierConfiguration(Lorg/apache/maven/continuum/model/project/ProjectNotifier;)V
+METHOD|org.apache.maven.continuum.web.action.notifier.IrcGroupNotifierEditAction.getHost()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.notifier.IrcGroupNotifierEditAction.setHost(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.notifier.IrcGroupNotifierEditAction.getPort()I
+METHOD|org.apache.maven.continuum.web.action.notifier.IrcGroupNotifierEditAction.setPort(I)V
+METHOD|org.apache.maven.continuum.web.action.notifier.IrcGroupNotifierEditAction.getChannel()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.notifier.IrcGroupNotifierEditAction.setChannel(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.notifier.IrcGroupNotifierEditAction.getNick()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.notifier.IrcGroupNotifierEditAction.setNick(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.notifier.IrcGroupNotifierEditAction.getFullName()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.notifier.IrcGroupNotifierEditAction.setFullName(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.notifier.IrcGroupNotifierEditAction.getPassword()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.notifier.IrcGroupNotifierEditAction.setPassword(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.notifier.IrcProjectNotifierEditAction.<init>()V
+METHOD|org.apache.maven.continuum.web.action.notifier.IrcProjectNotifierEditAction.initConfiguration(Ljava/util/Map;)V
+METHOD|org.apache.maven.continuum.web.action.notifier.IrcProjectNotifierEditAction.setNotifierConfiguration(Lorg/apache/maven/continuum/model/project/ProjectNotifier;)V
+METHOD|org.apache.maven.continuum.web.action.notifier.IrcProjectNotifierEditAction.getHost()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.notifier.IrcProjectNotifierEditAction.setHost(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.notifier.IrcProjectNotifierEditAction.getPort()I
+METHOD|org.apache.maven.continuum.web.action.notifier.IrcProjectNotifierEditAction.setPort(I)V
+METHOD|org.apache.maven.continuum.web.action.notifier.IrcProjectNotifierEditAction.getChannel()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.notifier.IrcProjectNotifierEditAction.setChannel(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.notifier.IrcProjectNotifierEditAction.getNick()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.notifier.IrcProjectNotifierEditAction.setNick(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.notifier.IrcProjectNotifierEditAction.getFullName()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.notifier.IrcProjectNotifierEditAction.setFullName(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.notifier.IrcProjectNotifierEditAction.getPassword()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.notifier.IrcProjectNotifierEditAction.setPassword(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.notifier.JabberGroupNotifierEditAction.<init>()V
+METHOD|org.apache.maven.continuum.web.action.notifier.JabberGroupNotifierEditAction.initConfiguration(Ljava/util/Map;)V
+METHOD|org.apache.maven.continuum.web.action.notifier.JabberGroupNotifierEditAction.setNotifierConfiguration(Lorg/apache/maven/continuum/model/project/ProjectNotifier;)V
+METHOD|org.apache.maven.continuum.web.action.notifier.JabberGroupNotifierEditAction.getHost()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.notifier.JabberGroupNotifierEditAction.setHost(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.notifier.JabberGroupNotifierEditAction.getPort()I
+METHOD|org.apache.maven.continuum.web.action.notifier.JabberGroupNotifierEditAction.setPort(I)V
+METHOD|org.apache.maven.continuum.web.action.notifier.JabberGroupNotifierEditAction.getLogin()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.notifier.JabberGroupNotifierEditAction.setLogin(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.notifier.JabberGroupNotifierEditAction.getPassword()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.notifier.JabberGroupNotifierEditAction.setPassword(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.notifier.JabberGroupNotifierEditAction.getDomainName()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.notifier.JabberGroupNotifierEditAction.setDomainName(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.notifier.JabberGroupNotifierEditAction.getAddress()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.notifier.JabberGroupNotifierEditAction.setAddress(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.notifier.JabberGroupNotifierEditAction.isSslConnection()Z
+METHOD|org.apache.maven.continuum.web.action.notifier.JabberGroupNotifierEditAction.setSslConnection(Z)V
+METHOD|org.apache.maven.continuum.web.action.notifier.JabberGroupNotifierEditAction.isGroup()Z
+METHOD|org.apache.maven.continuum.web.action.notifier.JabberGroupNotifierEditAction.setGroup(Z)V
+METHOD|org.apache.maven.continuum.web.action.notifier.JabberProjectNotifierEditAction.<init>()V
+METHOD|org.apache.maven.continuum.web.action.notifier.JabberProjectNotifierEditAction.initConfiguration(Ljava/util/Map;)V
+METHOD|org.apache.maven.continuum.web.action.notifier.JabberProjectNotifierEditAction.setNotifierConfiguration(Lorg/apache/maven/continuum/model/project/ProjectNotifier;)V
+METHOD|org.apache.maven.continuum.web.action.notifier.JabberProjectNotifierEditAction.getHost()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.notifier.JabberProjectNotifierEditAction.setHost(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.notifier.JabberProjectNotifierEditAction.getPort()I
+METHOD|org.apache.maven.continuum.web.action.notifier.JabberProjectNotifierEditAction.setPort(I)V
+METHOD|org.apache.maven.continuum.web.action.notifier.JabberProjectNotifierEditAction.getLogin()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.notifier.JabberProjectNotifierEditAction.setLogin(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.notifier.JabberProjectNotifierEditAction.getPassword()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.notifier.JabberProjectNotifierEditAction.setPassword(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.notifier.JabberProjectNotifierEditAction.getDomainName()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.notifier.JabberProjectNotifierEditAction.setDomainName(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.notifier.JabberProjectNotifierEditAction.getAddress()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.notifier.JabberProjectNotifierEditAction.setAddress(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.notifier.JabberProjectNotifierEditAction.isSslConnection()Z
+METHOD|org.apache.maven.continuum.web.action.notifier.JabberProjectNotifierEditAction.setSslConnection(Z)V
+METHOD|org.apache.maven.continuum.web.action.notifier.JabberProjectNotifierEditAction.isGroup()Z
+METHOD|org.apache.maven.continuum.web.action.notifier.JabberProjectNotifierEditAction.setGroup(Z)V
+METHOD|org.apache.maven.continuum.web.action.notifier.MailGroupNotifierEditAction.<init>()V
+METHOD|org.apache.maven.continuum.web.action.notifier.MailGroupNotifierEditAction.initConfiguration(Ljava/util/Map;)V
+METHOD|org.apache.maven.continuum.web.action.notifier.MailGroupNotifierEditAction.setNotifierConfiguration(Lorg/apache/maven/continuum/model/project/ProjectNotifier;)V
+METHOD|org.apache.maven.continuum.web.action.notifier.MailGroupNotifierEditAction.getAddress()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.notifier.MailGroupNotifierEditAction.setAddress(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.notifier.MailProjectNotifierEditAction.<init>()V
+METHOD|org.apache.maven.continuum.web.action.notifier.MailProjectNotifierEditAction.initConfiguration(Ljava/util/Map;)V
+METHOD|org.apache.maven.continuum.web.action.notifier.MailProjectNotifierEditAction.setNotifierConfiguration(Lorg/apache/maven/continuum/model/project/ProjectNotifier;)V
+METHOD|org.apache.maven.continuum.web.action.notifier.MailProjectNotifierEditAction.getAddress()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.notifier.MailProjectNotifierEditAction.setAddress(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.notifier.MsnGroupNotifierEditAction.<init>()V
+METHOD|org.apache.maven.continuum.web.action.notifier.MsnGroupNotifierEditAction.initConfiguration(Ljava/util/Map;)V
+METHOD|org.apache.maven.continuum.web.action.notifier.MsnGroupNotifierEditAction.setNotifierConfiguration(Lorg/apache/maven/continuum/model/project/ProjectNotifier;)V
+METHOD|org.apache.maven.continuum.web.action.notifier.MsnGroupNotifierEditAction.getLogin()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.notifier.MsnGroupNotifierEditAction.setLogin(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.notifier.MsnGroupNotifierEditAction.getPassword()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.notifier.MsnGroupNotifierEditAction.setPassword(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.notifier.MsnGroupNotifierEditAction.getAddress()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.notifier.MsnGroupNotifierEditAction.setAddress(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.notifier.MsnProjectNotifierEditAction.<init>()V
+METHOD|org.apache.maven.continuum.web.action.notifier.MsnProjectNotifierEditAction.initConfiguration(Ljava/util/Map;)V
+METHOD|org.apache.maven.continuum.web.action.notifier.MsnProjectNotifierEditAction.setNotifierConfiguration(Lorg/apache/maven/continuum/model/project/ProjectNotifier;)V
+METHOD|org.apache.maven.continuum.web.action.notifier.MsnProjectNotifierEditAction.getLogin()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.notifier.MsnProjectNotifierEditAction.setLogin(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.notifier.MsnProjectNotifierEditAction.getPassword()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.notifier.MsnProjectNotifierEditAction.setPassword(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.action.notifier.MsnProjectNotifierEditAction.getAddress()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.action.notifier.MsnProjectNotifierEditAction.setAddress(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.checks.security.RoleProfileEnvironmentCheck.<init>()V
+METHOD|org.apache.maven.continuum.web.checks.security.RoleProfileEnvironmentCheck.validateEnvironment(Ljava/util/List;)V
+METHOD|org.apache.maven.continuum.web.components.Data.<init>(Lcom/opensymphony/xwork/util/OgnlValueStack;Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;)V
+METHOD|org.apache.maven.continuum.web.components.Data.getDefaultTemplate()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.components.Data.setValueLink(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.components.Data.getValueLink()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.components.Data.evaluateExtraParams()V
+METHOD|org.apache.maven.continuum.web.components.SubmitCancel.<init>(Lcom/opensymphony/xwork/util/OgnlValueStack;Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;)V
+METHOD|org.apache.maven.continuum.web.components.SubmitCancel.getDefaultTemplate()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.components.SubmitCancel.evaluateParams()V
+METHOD|org.apache.maven.continuum.web.components.SubmitCancel.setCancel(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.exception.ContinuumActionException.<init>(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.exception.ContinuumActionException.<init>(Ljava/lang/String;Ljava/lang/Throwable;)V
+METHOD|org.apache.maven.continuum.web.filter.FilterToComponentProxy.<init>()V
+METHOD|org.apache.maven.continuum.web.interceptor.ForceContinuumConfigurationInterceptor.<init>()V
+METHOD|org.apache.maven.continuum.web.interceptor.ForceContinuumConfigurationInterceptor.destroy()V
+METHOD|org.apache.maven.continuum.web.interceptor.ForceContinuumConfigurationInterceptor.init()V
+METHOD|org.apache.maven.continuum.web.interceptor.ForceContinuumConfigurationInterceptor.intercept(Lcom/opensymphony/xwork/ActionInvocation;)Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.interceptor.ForceContinuumConfigurationInterceptor.<clinit>()V
+METHOD|org.apache.maven.continuum.web.model.BuildDefinitionSummary.<init>()V
+METHOD|org.apache.maven.continuum.web.model.BuildDefinitionSummary.getArguments()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.model.BuildDefinitionSummary.getBuildFile()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.model.BuildDefinitionSummary.getFrom()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.model.BuildDefinitionSummary.getGoals()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.model.BuildDefinitionSummary.getId()I
+METHOD|org.apache.maven.continuum.web.model.BuildDefinitionSummary.getProfileName()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.model.BuildDefinitionSummary.getProjectGroupId()I
+METHOD|org.apache.maven.continuum.web.model.BuildDefinitionSummary.getProjectId()I
+METHOD|org.apache.maven.continuum.web.model.BuildDefinitionSummary.getProjectName()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.model.BuildDefinitionSummary.getScheduleName()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.model.BuildDefinitionSummary.isIsDefault()Z
+METHOD|org.apache.maven.continuum.web.model.BuildDefinitionSummary.setArguments(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.model.BuildDefinitionSummary.setBuildFile(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.model.BuildDefinitionSummary.setFrom(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.model.BuildDefinitionSummary.setGoals(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.model.BuildDefinitionSummary.setId(I)V
+METHOD|org.apache.maven.continuum.web.model.BuildDefinitionSummary.setIsDefault(Z)V
+METHOD|org.apache.maven.continuum.web.model.BuildDefinitionSummary.setProfileName(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.model.BuildDefinitionSummary.setProjectGroupId(I)V
+METHOD|org.apache.maven.continuum.web.model.BuildDefinitionSummary.setProjectId(I)V
+METHOD|org.apache.maven.continuum.web.model.BuildDefinitionSummary.setProjectName(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.model.BuildDefinitionSummary.setScheduleName(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.model.BuildDefinitionSummary.setModelEncoding(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.model.BuildDefinitionSummary.getModelEncoding()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.model.ContinuumViewModels.<init>()V
+METHOD|org.apache.maven.continuum.web.model.ContinuumViewModels.addBuildDefinitionSummary(Lorg/apache/maven/continuum/web/model/BuildDefinitionSummary;)V
+METHOD|org.apache.maven.continuum.web.model.ContinuumViewModels.addGroupSummary(Lorg/apache/maven/continuum/web/model/GroupSummary;)V
+METHOD|org.apache.maven.continuum.web.model.ContinuumViewModels.addNotifierSummary(Lorg/apache/maven/continuum/web/model/NotifierSummary;)V
+METHOD|org.apache.maven.continuum.web.model.ContinuumViewModels.addProjectSummary(Lorg/apache/maven/continuum/web/model/ProjectSummary;)V
+METHOD|org.apache.maven.continuum.web.model.ContinuumViewModels.getBuildDefinitionSummarys()Ljava/util/List;
+METHOD|org.apache.maven.continuum.web.model.ContinuumViewModels.getGroupSummarys()Ljava/util/List;
+METHOD|org.apache.maven.continuum.web.model.ContinuumViewModels.getNotifierSummarys()Ljava/util/List;
+METHOD|org.apache.maven.continuum.web.model.ContinuumViewModels.getProjectSummarys()Ljava/util/List;
+METHOD|org.apache.maven.continuum.web.model.ContinuumViewModels.removeBuildDefinitionSummary(Lorg/apache/maven/continuum/web/model/BuildDefinitionSummary;)V
+METHOD|org.apache.maven.continuum.web.model.ContinuumViewModels.removeGroupSummary(Lorg/apache/maven/continuum/web/model/GroupSummary;)V
+METHOD|org.apache.maven.continuum.web.model.ContinuumViewModels.removeNotifierSummary(Lorg/apache/maven/continuum/web/model/NotifierSummary;)V
+METHOD|org.apache.maven.continuum.web.model.ContinuumViewModels.removeProjectSummary(Lorg/apache/maven/continuum/web/model/ProjectSummary;)V
+METHOD|org.apache.maven.continuum.web.model.ContinuumViewModels.setBuildDefinitionSummarys(Ljava/util/List;)V
+METHOD|org.apache.maven.continuum.web.model.ContinuumViewModels.setGroupSummarys(Ljava/util/List;)V
+METHOD|org.apache.maven.continuum.web.model.ContinuumViewModels.setNotifierSummarys(Ljava/util/List;)V
+METHOD|org.apache.maven.continuum.web.model.ContinuumViewModels.setProjectSummarys(Ljava/util/List;)V
+METHOD|org.apache.maven.continuum.web.model.ContinuumViewModels.setModelEncoding(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.model.ContinuumViewModels.getModelEncoding()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.model.ContinuumViewModels.class$(Ljava/lang/String;)Ljava/lang/Class;
+METHOD|org.apache.maven.continuum.web.model.GroupSummary.<init>()V
+METHOD|org.apache.maven.continuum.web.model.GroupSummary.addProject(Lorg/apache/maven/continuum/web/model/ProjectSummary;)V
+METHOD|org.apache.maven.continuum.web.model.GroupSummary.getDescription()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.model.GroupSummary.getGroupId()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.model.GroupSummary.getId()I
+METHOD|org.apache.maven.continuum.web.model.GroupSummary.getName()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.model.GroupSummary.getNextScheduledBuild()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.model.GroupSummary.getNumErrors()I
+METHOD|org.apache.maven.continuum.web.model.GroupSummary.getNumFailures()I
+METHOD|org.apache.maven.continuum.web.model.GroupSummary.getNumProjects()I
+METHOD|org.apache.maven.continuum.web.model.GroupSummary.getNumSuccesses()I
+METHOD|org.apache.maven.continuum.web.model.GroupSummary.getProjectType()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.model.GroupSummary.getProjects()Ljava/util/List;
+METHOD|org.apache.maven.continuum.web.model.GroupSummary.getStatusMessage()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.model.GroupSummary.removeProject(Lorg/apache/maven/continuum/web/model/ProjectSummary;)V
+METHOD|org.apache.maven.continuum.web.model.GroupSummary.setDescription(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.model.GroupSummary.setGroupId(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.model.GroupSummary.setId(I)V
+METHOD|org.apache.maven.continuum.web.model.GroupSummary.setName(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.model.GroupSummary.setNextScheduledBuild(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.model.GroupSummary.setNumErrors(I)V
+METHOD|org.apache.maven.continuum.web.model.GroupSummary.setNumFailures(I)V
+METHOD|org.apache.maven.continuum.web.model.GroupSummary.setNumProjects(I)V
+METHOD|org.apache.maven.continuum.web.model.GroupSummary.setNumSuccesses(I)V
+METHOD|org.apache.maven.continuum.web.model.GroupSummary.setProjectType(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.model.GroupSummary.setProjects(Ljava/util/List;)V
+METHOD|org.apache.maven.continuum.web.model.GroupSummary.setStatusMessage(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.model.GroupSummary.setModelEncoding(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.model.GroupSummary.getModelEncoding()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.model.GroupSummary.class$(Ljava/lang/String;)Ljava/lang/Class;
+METHOD|org.apache.maven.continuum.web.model.NotifierSummary.<init>()V
+METHOD|org.apache.maven.continuum.web.model.NotifierSummary.getEvents()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.model.NotifierSummary.getId()I
+METHOD|org.apache.maven.continuum.web.model.NotifierSummary.getProjectGroupId()I
+METHOD|org.apache.maven.continuum.web.model.NotifierSummary.getProjectId()I
+METHOD|org.apache.maven.continuum.web.model.NotifierSummary.getRecipient()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.model.NotifierSummary.getSender()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.model.NotifierSummary.getType()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.model.NotifierSummary.isEnabled()Z
+METHOD|org.apache.maven.continuum.web.model.NotifierSummary.setEnabled(Z)V
+METHOD|org.apache.maven.continuum.web.model.NotifierSummary.setEvents(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.model.NotifierSummary.setId(I)V
+METHOD|org.apache.maven.continuum.web.model.NotifierSummary.setProjectGroupId(I)V
+METHOD|org.apache.maven.continuum.web.model.NotifierSummary.setProjectId(I)V
+METHOD|org.apache.maven.continuum.web.model.NotifierSummary.setRecipient(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.model.NotifierSummary.setSender(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.model.NotifierSummary.setType(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.model.NotifierSummary.setModelEncoding(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.model.NotifierSummary.getModelEncoding()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.model.ProjectSummary.<init>()V
+METHOD|org.apache.maven.continuum.web.model.ProjectSummary.getBuildInSuccessId()I
+METHOD|org.apache.maven.continuum.web.model.ProjectSummary.getBuildNumber()I
+METHOD|org.apache.maven.continuum.web.model.ProjectSummary.getId()I
+METHOD|org.apache.maven.continuum.web.model.ProjectSummary.getLatestBuildId()I
+METHOD|org.apache.maven.continuum.web.model.ProjectSummary.getName()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.model.ProjectSummary.getProjectGroupName()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.model.ProjectSummary.getState()I
+METHOD|org.apache.maven.continuum.web.model.ProjectSummary.getVersion()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.model.ProjectSummary.isInQueue()Z
+METHOD|org.apache.maven.continuum.web.model.ProjectSummary.setBuildInSuccessId(I)V
+METHOD|org.apache.maven.continuum.web.model.ProjectSummary.setBuildNumber(I)V
+METHOD|org.apache.maven.continuum.web.model.ProjectSummary.setId(I)V
+METHOD|org.apache.maven.continuum.web.model.ProjectSummary.setInQueue(Z)V
+METHOD|org.apache.maven.continuum.web.model.ProjectSummary.setLatestBuildId(I)V
+METHOD|org.apache.maven.continuum.web.model.ProjectSummary.setName(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.model.ProjectSummary.setProjectGroupName(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.model.ProjectSummary.setState(I)V
+METHOD|org.apache.maven.continuum.web.model.ProjectSummary.setVersion(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.model.ProjectSummary.setModelEncoding(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.model.ProjectSummary.getModelEncoding()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.model.Session.<init>()V
+METHOD|org.apache.maven.continuum.web.model.Session.addSessionUser(Lorg/apache/maven/continuum/web/model/SessionUser;)V
+METHOD|org.apache.maven.continuum.web.model.Session.getSessionUsers()Ljava/util/List;
+METHOD|org.apache.maven.continuum.web.model.Session.removeSessionUser(Lorg/apache/maven/continuum/web/model/SessionUser;)V
+METHOD|org.apache.maven.continuum.web.model.Session.setSessionUsers(Ljava/util/List;)V
+METHOD|org.apache.maven.continuum.web.model.Session.setModelEncoding(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.model.Session.getModelEncoding()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.model.Session.class$(Ljava/lang/String;)Ljava/lang/Class;
+METHOD|org.apache.maven.continuum.web.model.SessionUser.<init>()V
+METHOD|org.apache.maven.continuum.web.model.SessionUser.getEmail()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.model.SessionUser.getFullName()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.model.SessionUser.getId()I
+METHOD|org.apache.maven.continuum.web.model.SessionUser.getUserGroupId()I
+METHOD|org.apache.maven.continuum.web.model.SessionUser.getUsername()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.model.SessionUser.isLoggedIn()Z
+METHOD|org.apache.maven.continuum.web.model.SessionUser.setEmail(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.model.SessionUser.setFullName(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.model.SessionUser.setId(I)V
+METHOD|org.apache.maven.continuum.web.model.SessionUser.setLoggedIn(Z)V
+METHOD|org.apache.maven.continuum.web.model.SessionUser.setUserGroupId(I)V
+METHOD|org.apache.maven.continuum.web.model.SessionUser.setUsername(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.model.SessionUser.setModelEncoding(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.model.SessionUser.getModelEncoding()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.util.StateGenerator.<init>()V
+METHOD|org.apache.maven.continuum.web.util.StateGenerator.generate(ILjava/lang/String;)Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.util.WorkingCopyContentGenerator.<init>()V
+METHOD|org.apache.maven.continuum.web.util.WorkingCopyContentGenerator.generate(Ljava/lang/Object;Ljava/lang/String;Ljava/io/File;)Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.util.WorkingCopyContentGenerator.print(Ljava/util/List;Ljava/lang/String;Ljava/lang/String;Ljava/lang/StringBuffer;)V
+METHOD|org.apache.maven.continuum.web.util.WorkingCopyContentGenerator.print(Ljava/lang/Object;Ljava/lang/String;Ljava/lang/String;Ljava/lang/StringBuffer;)V
+METHOD|org.apache.maven.continuum.web.view.BuildCell.<init>()V
+METHOD|org.apache.maven.continuum.web.view.BuildCell.getCellValue(Lorg/extremecomponents/table/core/TableModel;Lorg/extremecomponents/table/bean/Column;)Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.view.BuildCell.isAuthorized(Lorg/apache/maven/continuum/web/model/ProjectSummary;)Z
+METHOD|org.apache.maven.continuum.web.view.BuildNowCell.<init>()V
+METHOD|org.apache.maven.continuum.web.view.BuildNowCell.getCellValue(Lorg/extremecomponents/table/core/TableModel;Lorg/extremecomponents/table/bean/Column;)Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.view.BuildNowCell.createActionLink(Ljava/lang/String;Lorg/apache/maven/continuum/web/model/ProjectSummary;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.view.BuildNowCell.image(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.view.BuildStatusCell.<init>()V
+METHOD|org.apache.maven.continuum.web.view.BuildStatusCell.getCellValue(Lorg/extremecomponents/table/core/TableModel;Lorg/extremecomponents/table/bean/Column;)Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.view.StateCell.<init>()V
+METHOD|org.apache.maven.continuum.web.view.StateCell.getCellValue(Lorg/extremecomponents/table/core/TableModel;Lorg/extremecomponents/table/bean/Column;)Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.view.StateCell.createActionLink(Ljava/lang/String;Lorg/apache/maven/continuum/web/model/ProjectSummary;Ljava/lang/String;)Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.view.buildresults.StateCell.<init>()V
+METHOD|org.apache.maven.continuum.web.view.buildresults.StateCell.getCellValue(Lorg/extremecomponents/table/core/TableModel;Lorg/extremecomponents/table/bean/Column;)Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.view.commons.DateCell.<init>()V
+METHOD|org.apache.maven.continuum.web.view.commons.DateCell.getCellValue(Lorg/extremecomponents/table/core/TableModel;Lorg/extremecomponents/table/bean/Column;)Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.view.jsp.ui.DataTag.<init>()V
+METHOD|org.apache.maven.continuum.web.view.jsp.ui.DataTag.getBean(Lcom/opensymphony/xwork/util/OgnlValueStack;Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;)Lcom/opensymphony/webwork/components/Component;
+METHOD|org.apache.maven.continuum.web.view.jsp.ui.DataTag.setValueLink(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.view.jsp.ui.DataTag.populateParams()V
+METHOD|org.apache.maven.continuum.web.view.jsp.ui.DateTag.<init>()V
+METHOD|org.apache.maven.continuum.web.view.jsp.ui.DateTag.doEndTag()I
+METHOD|org.apache.maven.continuum.web.view.jsp.ui.DateTag.findProviderInStack()Lcom/opensymphony/xwork/TextProvider;
+METHOD|org.apache.maven.continuum.web.view.jsp.ui.DateTag.formatTime(Ljava/util/Date;)Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.view.jsp.ui.DateTag.doStartTag()I
+METHOD|org.apache.maven.continuum.web.view.jsp.ui.DateTag.setName(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.view.jsp.ui.DateTag.getFormat()Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.view.jsp.ui.DateTag.setFormat(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.view.jsp.ui.DateTag.isNice()Z
+METHOD|org.apache.maven.continuum.web.view.jsp.ui.DateTag.setNice(Z)V
+METHOD|org.apache.maven.continuum.web.view.jsp.ui.SubmitCancelTag.<init>()V
+METHOD|org.apache.maven.continuum.web.view.jsp.ui.SubmitCancelTag.getBean(Lcom/opensymphony/xwork/util/OgnlValueStack;Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;)Lcom/opensymphony/webwork/components/Component;
+METHOD|org.apache.maven.continuum.web.view.jsp.ui.SubmitCancelTag.populateParams()V
+METHOD|org.apache.maven.continuum.web.view.jsp.ui.SubmitCancelTag.setCancel(Ljava/lang/String;)V
+METHOD|org.apache.maven.continuum.web.view.projectview.NotifierEventCell.<init>()V
+METHOD|org.apache.maven.continuum.web.view.projectview.NotifierEventCell.getCellValue(Lorg/extremecomponents/table/core/TableModel;Lorg/extremecomponents/table/bean/Column;)Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.view.projectview.NotifierFromCell.<init>()V
+METHOD|org.apache.maven.continuum.web.view.projectview.NotifierFromCell.getCellValue(Lorg/extremecomponents/table/core/TableModel;Lorg/extremecomponents/table/bean/Column;)Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.view.projectview.NotifierRecipientCell.<init>()V
+METHOD|org.apache.maven.continuum.web.view.projectview.NotifierRecipientCell.getCellValue(Lorg/extremecomponents/table/core/TableModel;Lorg/extremecomponents/table/bean/Column;)Ljava/lang/String;
+METHOD|org.apache.maven.continuum.web.xmlrpc.DefaultXmlRpcService.<init>()V
+METHOD|org.apache.maven.continuum.web.xmlrpc.DefaultXmlRpcService.start()V
+METHOD|org.apache.maven.continuum.web.xmlrpc.DefaultXmlRpcService.stop()V
+METHOD|org.apache.maven.continuum.web.xmlrpc.XmlRpcService$1.class$(Ljava/lang/String;)Ljava/lang/Class;
+METHOD|org.apache.maven.continuum.web.xmlrpc.XmlRpcService.<clinit>()V
+FILE|META-INF/
+FILE|META-INF/MANIFEST.MF
+FILE|META-INF/maven/
+FILE|META-INF/maven/org.apache.maven.continuum/
+FILE|META-INF/maven/org.apache.maven.continuum/continuum-webapp/
+FILE|META-INF/maven/org.apache.maven.continuum/continuum-webapp/pom.properties
+FILE|META-INF/maven/org.apache.maven.continuum/continuum-webapp/pom.xml
+FILE|WEB-INF/
+FILE|WEB-INF/classes/
+FILE|WEB-INF/classes/META-INF/
+FILE|WEB-INF/classes/META-INF/plexus/
+FILE|WEB-INF/classes/META-INF/plexus/application.xml
+FILE|WEB-INF/classes/META-INF/plexus/components.xml
+FILE|WEB-INF/classes/extremecomponents.properties
+FILE|WEB-INF/classes/localization/
+FILE|WEB-INF/classes/localization/Continuum.properties
+FILE|WEB-INF/classes/org/
+FILE|WEB-INF/classes/org/apache/
+FILE|WEB-INF/classes/org/apache/maven/
+FILE|WEB-INF/classes/org/apache/maven/continuum/
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/action/
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/action/AboutAction.class
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/action/AddMavenOneProjectAction.class
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/action/AddMavenProjectAction.class
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/action/AddMavenTwoProjectAction.class
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/action/AddProjectAction-addProject-validation.xml
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/action/AddProjectAction.class
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/action/AddProjectAction.properties
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/action/BuildDefinitionAction-saveGroupBuildDefinition-validation.xml
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/action/BuildDefinitionAction-saveProjectBuildDefinition-validation.xml
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/action/BuildDefinitionAction.class
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/action/BuildDefinitionAction.properties
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/action/BuildDefinitionEditAction-buildDefinitionSave-validation.xml
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/action/BuildDefinitionEditAction.properties
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/action/BuildProjectAction.class
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/action/BuildResultAction.class
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/action/BuildResultsListAction.class
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/action/CancelBuildAction.class
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/action/CheckConfigurationAction.class
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/action/ContinuumActionSupport.class
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/action/ContinuumConfirmAction.class
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/action/DeleteProjectAction.class
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/action/GroupSummaryAction.class
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/action/IrcNotifierEditAction-ircNotifierSave-validation.xml
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/action/IrcNotifierEditAction.properties
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/action/JabberNotifierEditAction-jabberNotifierSave-validation.xml
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/action/JabberNotifierEditAction.properties
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/action/LoginAction-validation.xml
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/action/LoginAction.properties
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/action/MailNotifierEditAction-mailNotifierSave-validation.xml
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/action/MailNotifierEditAction.properties
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/action/MsnNotifierEditAction-msnNotifierSave-validation.xml
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/action/MsnNotifierEditAction.properties
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/action/ProjectEditAction-projectSave-validation.xml
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/action/ProjectEditAction.class
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/action/ProjectEditAction.properties
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/action/ProjectGroupAction.class
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/action/ProjectViewAction.class
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/action/ReleaseCleanupAction.class
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/action/ReleaseInProgressAction.class
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/action/ReleasePerformAction-releasePerform-validation.xml
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/action/ReleasePerformAction-releasePerformFromScm-validation.xml
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/action/ReleasePerformAction.class
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/action/ReleasePerformAction.properties
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/action/ReleasePrepareAction-releasePrepare-validation.xml
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/action/ReleasePrepareAction.class
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/action/ReleasePrepareAction.properties
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/action/ReleaseProjectAction.class
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/action/ReleaseProjectGoalAction.class
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/action/ScheduleAction-saveSchedule-validation.xml
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/action/ScheduleAction.class
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/action/SummaryAction.class
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/action/SurefireReportAction$1.class
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/action/SurefireReportAction$ReportTest.class
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/action/SurefireReportAction$ReportTestCase.class
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/action/SurefireReportAction$ReportTestSuite.class
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/action/SurefireReportAction.class
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/action/UserGroupManagementAction-saveUserGroup-validation.xml
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/action/UserGroupManagementAction.class
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/action/UserGroupManagementAction.properties
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/action/UserManagementAction-saveUser-validation.xml
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/action/UserManagementAction.class
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/action/UserManagementAction.properties
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/action/WorkingCopyAction.class
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/action/admin/
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/action/admin/ConfigurationAction-configuration-validation.xml
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/action/admin/ConfigurationAction.class
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/action/admin/ConfigurationAction.properties
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/action/component/
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/action/component/BuildDefinitionSummaryAction.class
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/action/component/ContinuumTabAction.class
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/action/component/NotifierSummaryAction.class
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/action/notifier/
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/action/notifier/AbstractGroupNotifierEditAction.class
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/action/notifier/AbstractNotifierEditActionSupport.class
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/action/notifier/AbstractProjectNotifierEditAction.class
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/action/notifier/AddGroupNotifierAction.class
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/action/notifier/AddProjectNotifierAction.class
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/action/notifier/DeleteGroupNotifierAction.class
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/action/notifier/DeleteProjectNotifierAction.class
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/action/notifier/IrcGroupNotifierEditAction-ircProjectGroupNotifierSave-validation.xml
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/action/notifier/IrcGroupNotifierEditAction.class
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/action/notifier/IrcGroupNotifierEditAction.properties
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/action/notifier/IrcProjectNotifierEditAction-ircProjectNotifierSave-validation.xml
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/action/notifier/IrcProjectNotifierEditAction.class
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/action/notifier/IrcProjectNotifierEditAction.properties
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/action/notifier/JabberGroupNotifierEditAction-jabberProjectGroupNotifierSave-validation.xml
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/action/notifier/JabberGroupNotifierEditAction.class
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/action/notifier/JabberGroupNotifierEditAction.properties
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/action/notifier/JabberProjectNotifierEditAction-jabberProjectNotifierSave-validation.xml
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/action/notifier/JabberProjectNotifierEditAction.class
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/action/notifier/JabberProjectNotifierEditAction.properties
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/action/notifier/MailGroupNotifierEditAction-mailProjectGroupNotifierSave-validation.xml
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/action/notifier/MailGroupNotifierEditAction.class
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/action/notifier/MailGroupNotifierEditAction.properties
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/action/notifier/MailProjectNotifierEditAction-mailProjectNotifierSave-validation.xml
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/action/notifier/MailProjectNotifierEditAction.class
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/action/notifier/MailProjectNotifierEditAction.properties
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/action/notifier/MsnGroupNotifierEditAction-msnProjectGroupNotifierSave-validation.xml
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/action/notifier/MsnGroupNotifierEditAction.class
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/action/notifier/MsnGroupNotifierEditAction.properties
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/action/notifier/MsnProjectNotifierEditAction-msnProjectNotifierSave-validation.xml
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/action/notifier/MsnProjectNotifierEditAction.class
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/action/notifier/MsnProjectNotifierEditAction.properties
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/action/scheduleAction.properties
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/checks/
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/checks/security/
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/checks/security/RoleProfileEnvironmentCheck.class
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/components/
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/components/Data.class
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/components/SubmitCancel.class
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/exception/
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/exception/ContinuumActionException.class
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/filter/
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/filter/FilterToComponentProxy.class
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/interceptor/
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/interceptor/ForceContinuumConfigurationInterceptor.class
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/model/
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/model/BuildDefinitionSummary.class
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/model/ContinuumViewModels.class
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/model/GroupSummary.class
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/model/NotifierSummary.class
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/model/ProjectSummary.class
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/model/Session.class
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/model/SessionUser.class
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/util/
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/util/StateGenerator.class
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/util/WorkingCopyContentGenerator.class
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/view/
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/view/BuildCell.class
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/view/BuildNowCell.class
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/view/BuildStatusCell.class
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/view/StateCell.class
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/view/buildresults/
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/view/buildresults/StateCell.class
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/view/commons/
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/view/commons/DateCell.class
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/view/jsp/
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/view/jsp/ui/
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/view/jsp/ui/DataTag.class
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/view/jsp/ui/DateTag.class
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/view/jsp/ui/SubmitCancelTag.class
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/view/projectview/
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/view/projectview/NotifierEventCell.class
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/view/projectview/NotifierFromCell.class
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/view/projectview/NotifierRecipientCell.class
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/xmlrpc/
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/xmlrpc/DefaultXmlRpcService.class
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/xmlrpc/XmlRpcService$1.class
+FILE|WEB-INF/classes/org/apache/maven/continuum/web/xmlrpc/XmlRpcService.class
+FILE|WEB-INF/classes/osuser.xml
+FILE|WEB-INF/classes/template/
+FILE|WEB-INF/classes/template/default/
+FILE|WEB-INF/classes/template/default/checkbox.ftl
+FILE|WEB-INF/classes/template/default/checkboxlist.ftl
+FILE|WEB-INF/classes/template/default/combobox.ftl
+FILE|WEB-INF/classes/template/default/controlfooter.ftl
+FILE|WEB-INF/classes/template/default/controlheader-core.ftl
+FILE|WEB-INF/classes/template/default/controlheader.ftl
+FILE|WEB-INF/classes/template/default/data.ftl
+FILE|WEB-INF/classes/template/default/datepicker.ftl
+FILE|WEB-INF/classes/template/default/debug.ftl
+FILE|WEB-INF/classes/template/default/doubleselect.ftl
+FILE|WEB-INF/classes/template/default/empty.ftl
+FILE|WEB-INF/classes/template/default/file.ftl
+FILE|WEB-INF/classes/template/default/form-close-validate.ftl
+FILE|WEB-INF/classes/template/default/form-close.ftl
+FILE|WEB-INF/classes/template/default/form-validate.ftl
+FILE|WEB-INF/classes/template/default/form.ftl
+FILE|WEB-INF/classes/template/default/head.ftl
+FILE|WEB-INF/classes/template/default/hidde.ftl
+FILE|WEB-INF/classes/template/default/label.ftl
+FILE|WEB-INF/classes/template/default/optiontransferselect.ftl
+FILE|WEB-INF/classes/template/default/password.ftl
+FILE|WEB-INF/classes/template/default/radiomap.ftl
+FILE|WEB-INF/classes/template/default/reset.ftl
+FILE|WEB-INF/classes/template/default/richtexteditor.ftl
+FILE|WEB-INF/classes/template/default/select.ftl
+FILE|WEB-INF/classes/template/default/styles.css
+FILE|WEB-INF/classes/template/default/submit.ftl
+FILE|WEB-INF/classes/template/default/submitCancel.ftl
+FILE|WEB-INF/classes/template/default/text.ftl
+FILE|WEB-INF/classes/template/default/textarea.ftl
+FILE|WEB-INF/classes/template/default/theme.properties
+FILE|WEB-INF/classes/template/default/tooltip.ftl
+FILE|WEB-INF/classes/template/default/updownselect.ftl
+FILE|WEB-INF/classes/template/default/validation.js
+FILE|WEB-INF/classes/validators.xml
+FILE|WEB-INF/classes/webwork.properties
+FILE|WEB-INF/classes/xwork-security.xml
+FILE|WEB-INF/classes/xwork.xml
+FILE|WEB-INF/continuum.tld
+FILE|WEB-INF/decorators.xml
+FILE|WEB-INF/jsp/
+FILE|WEB-INF/jsp/about.jsp
+FILE|WEB-INF/jsp/addMavenOneProject.jsp
+FILE|WEB-INF/jsp/addMavenTwoProject.jsp
+FILE|WEB-INF/jsp/addProject.jsp
+FILE|WEB-INF/jsp/admin/
+FILE|WEB-INF/jsp/admin/configuration.jsp
+FILE|WEB-INF/jsp/admin/configurationEdit.jsp
+FILE|WEB-INF/jsp/buildDefinitionEdit.jsp
+FILE|WEB-INF/jsp/buildResult.jsp
+FILE|WEB-INF/jsp/buildResults.jsp
+FILE|WEB-INF/jsp/components/
+FILE|WEB-INF/jsp/components/buildDefinitionGroupSummaryComponent.jsp
+FILE|WEB-INF/jsp/components/buildDefinitionSummaryComponent.jsp
+FILE|WEB-INF/jsp/components/buildNowCell.jsp
+FILE|WEB-INF/jsp/components/companyLogo.jsp
+FILE|WEB-INF/jsp/components/failureComponent.jsp
+FILE|WEB-INF/jsp/components/projectGroupNotifierSummaryComponent.jsp
+FILE|WEB-INF/jsp/components/projectGroupTabComponent.jsp
+FILE|WEB-INF/jsp/components/projectNotifierSummaryComponent.jsp
+FILE|WEB-INF/jsp/components/projectSummaryComponent.jsp
+FILE|WEB-INF/jsp/confirmBuildDefinitionRemoval.jsp
+FILE|WEB-INF/jsp/confirmGroupRemoval.jsp
+FILE|WEB-INF/jsp/confirmScheduleRemoval.jsp
+FILE|WEB-INF/jsp/confirmation.jsp
+FILE|WEB-INF/jsp/decorators/
+FILE|WEB-INF/jsp/decorators/default.jsp
+FILE|WEB-INF/jsp/decorators/none.jsp
+FILE|WEB-INF/jsp/deleteBuildDefinition.jsp
+FILE|WEB-INF/jsp/deleteNotifier.jsp
+FILE|WEB-INF/jsp/deleteProject.jsp
+FILE|WEB-INF/jsp/editSchedule.jsp
+FILE|WEB-INF/jsp/error/
+FILE|WEB-INF/jsp/error/error.jsp
+FILE|WEB-INF/jsp/groupSummary.jsp
+FILE|WEB-INF/jsp/navigations/
+FILE|WEB-INF/jsp/navigations/DefaultBottom.jsp
+FILE|WEB-INF/jsp/navigations/DefaultTop.jsp
+FILE|WEB-INF/jsp/navigations/Menu.jsp
+FILE|WEB-INF/jsp/navigations/ProjectGroupMenu.jsp
+FILE|WEB-INF/jsp/navigations/ProjectMenu.jsp
+FILE|WEB-INF/jsp/notifierIrc.jsp
+FILE|WEB-INF/jsp/notifierJabber.jsp
+FILE|WEB-INF/jsp/notifierMail.jsp
+FILE|WEB-INF/jsp/notifierMsn.jsp
+FILE|WEB-INF/jsp/notifierSelectType.jsp
+FILE|WEB-INF/jsp/projectEdit.jsp
+FILE|WEB-INF/jsp/projectGroupBuildDefinition.jsp
+FILE|WEB-INF/jsp/projectGroupMembers.jsp
+FILE|WEB-INF/jsp/projectGroupNotifier.jsp
+FILE|WEB-INF/jsp/projectGroupSummary.jsp
+FILE|WEB-INF/jsp/projectView.jsp
+FILE|WEB-INF/jsp/pss/
+FILE|WEB-INF/jsp/pss/accessDenied.jsp
+FILE|WEB-INF/jsp/pss/account.jsp
+FILE|WEB-INF/jsp/pss/admin/
+FILE|WEB-INF/jsp/pss/admin/adminConsole.jsp
+FILE|WEB-INF/jsp/pss/admin/console.jsp
+FILE|WEB-INF/jsp/pss/admin/createAdmin.jsp
+FILE|WEB-INF/jsp/pss/admin/operationList.jsp
+FILE|WEB-INF/jsp/pss/admin/permissionList.jsp
+FILE|WEB-INF/jsp/pss/admin/resourceList.jsp
+FILE|WEB-INF/jsp/pss/admin/role.jsp
+FILE|WEB-INF/jsp/pss/admin/roleCreate.jsp
+FILE|WEB-INF/jsp/pss/admin/roleList.jsp
+FILE|WEB-INF/jsp/pss/admin/roleSummary.jsp
+FILE|WEB-INF/jsp/pss/admin/systemInformation.jsp
+FILE|WEB-INF/jsp/pss/admin/userCreate.jsp
+FILE|WEB-INF/jsp/pss/admin/userDelete.jsp
+FILE|WEB-INF/jsp/pss/admin/userEdit.jsp
+FILE|WEB-INF/jsp/pss/admin/userFind.jsp
+FILE|WEB-INF/jsp/pss/admin/userList.jsp
+FILE|WEB-INF/jsp/pss/alert.jsp
+FILE|WEB-INF/jsp/pss/generalError.jsp
+FILE|WEB-INF/jsp/pss/include/
+FILE|WEB-INF/jsp/pss/include/assignments.jsp
+FILE|WEB-INF/jsp/pss/include/error.jsp
+FILE|WEB-INF/jsp/pss/include/formValidationResults.jsp
+FILE|WEB-INF/jsp/pss/include/grantRoles.jsp
+FILE|WEB-INF/jsp/pss/include/rbacListNavigation.jsp
+FILE|WEB-INF/jsp/pss/include/removeRoles.jsp
+FILE|WEB-INF/jsp/pss/include/roleRow.jsp
+FILE|WEB-INF/jsp/pss/include/securityLinks.jsp
+FILE|WEB-INF/jsp/pss/include/userCredentials.jsp
+FILE|WEB-INF/jsp/pss/login.jsp
+FILE|WEB-INF/jsp/pss/password.jsp
+FILE|WEB-INF/jsp/pss/register.jsp
+FILE|WEB-INF/jsp/pss/requestPasswordReset.jsp
+FILE|WEB-INF/jsp/pss/requiresAuthentication.jsp
+FILE|WEB-INF/jsp/pss/statusline.jsp
+FILE|WEB-INF/jsp/pss/validate.jsp
+FILE|WEB-INF/jsp/pss/validationNotification.jsp
+FILE|WEB-INF/jsp/releaseFinished.jsp
+FILE|WEB-INF/jsp/releaseInProgress.jsp
+FILE|WEB-INF/jsp/releaseInitialized.jsp
+FILE|WEB-INF/jsp/releasePerform.jsp
+FILE|WEB-INF/jsp/releasePerformFromScm.jsp
+FILE|WEB-INF/jsp/releasePrepare.jsp
+FILE|WEB-INF/jsp/releaseProject.jsp
+FILE|WEB-INF/jsp/releaseViewResult.jsp
+FILE|WEB-INF/jsp/schedules.jsp
+FILE|WEB-INF/jsp/summary.jsp
+FILE|WEB-INF/jsp/surefireReport.jsp
+FILE|WEB-INF/jsp/workingCopy.jsp
+FILE|WEB-INF/lib/
+FILE|WEB-INF/lib/backport-util-concurrent-2.2.jar
+FILE|WEB-INF/lib/commons-beanutils-1.7.0.jar
+FILE|WEB-INF/lib/commons-cli-1.0.jar
+FILE|WEB-INF/lib/commons-codec-1.3.jar
+FILE|WEB-INF/lib/commons-collections-2.0.jar
+FILE|WEB-INF/lib/commons-collections-3.0.jar
+FILE|WEB-INF/lib/commons-fileupload-1.1.jar
+FILE|WEB-INF/lib/commons-httpclient-2.0.2.jar
+FILE|WEB-INF/lib/commons-io-1.1.jar
+FILE|WEB-INF/lib/commons-lang-2.0.jar
+FILE|WEB-INF/lib/commons-logging-1.0.4.jar
+FILE|WEB-INF/lib/commons-logging-api-1.0.4.jar
+FILE|WEB-INF/lib/continuum-api-1.0.3-maestro-1.2-SNAPSHOT.jar
+FILE|WEB-INF/lib/continuum-core-1.0.3-maestro-1.2-SNAPSHOT.jar
+FILE|WEB-INF/lib/continuum-model-1.0.3-maestro-1.2-SNAPSHOT.jar
+FILE|WEB-INF/lib/continuum-notifier-api-1.0.3-maestro-1.2-SNAPSHOT.jar
+FILE|WEB-INF/lib/continuum-notifier-irc-1.0.3-maestro-1.2-SNAPSHOT.jar
+FILE|WEB-INF/lib/continuum-notifier-jabber-1.0.3-maestro-1.2-SNAPSHOT.jar
+FILE|WEB-INF/lib/continuum-notifier-msn-1.0.3-maestro-1.2-SNAPSHOT.jar
+FILE|WEB-INF/lib/continuum-release-1.0.3-maestro-1.2-SNAPSHOT.jar
+FILE|WEB-INF/lib/continuum-security-1.0.3-maestro-1.2-SNAPSHOT.jar
+FILE|WEB-INF/lib/continuum-store-1.0.3-maestro-1.2-SNAPSHOT.jar
+FILE|WEB-INF/lib/continuum-xmlrpc-1.0.3-maestro-1.2-SNAPSHOT.jar
+FILE|WEB-INF/lib/derby-10.1.3.1.jar
+FILE|WEB-INF/lib/doxia-sink-api-1.0-alpha-7.jar
+FILE|WEB-INF/lib/extremecomponents-1.0.1.jar
+FILE|WEB-INF/lib/freemarker-2.3.4.jar
+FILE|WEB-INF/lib/geronimo-spec-jta-1.0.1B-rc2.jar
+FILE|WEB-INF/lib/jaxen-1.1-beta-8.jar
+FILE|WEB-INF/lib/jdom-1.0.jar
+FILE|WEB-INF/lib/jsch-0.1.24.jar
+FILE|WEB-INF/lib/jstl-1.1.2.jar
+FILE|WEB-INF/lib/maestro-projectserver-store-1.2-SNAPSHOT.jar
+FILE|WEB-INF/lib/maven-artifact-2.0.4-maestro-1.2-SNAPSHOT.jar
+FILE|WEB-INF/lib/maven-artifact-manager-2.0.4-maestro-1.2-SNAPSHOT.jar
+FILE|WEB-INF/lib/maven-core-2.0.4-maestro-1.2-SNAPSHOT.jar
+FILE|WEB-INF/lib/maven-error-diagnostics-2.0.4-maestro-1.2-SNAPSHOT.jar
+FILE|WEB-INF/lib/maven-model-2.0.4-maestro-1.2-SNAPSHOT.jar
+FILE|WEB-INF/lib/maven-monitor-2.0.4-maestro-1.2-SNAPSHOT.jar
+FILE|WEB-INF/lib/maven-plugin-api-2.0.4-maestro-1.2-SNAPSHOT.jar
+FILE|WEB-INF/lib/maven-plugin-descriptor-2.0.4-maestro-1.2-SNAPSHOT.jar
+FILE|WEB-INF/lib/maven-plugin-parameter-documenter-2.0.4-maestro-1.2-SNAPSHOT.jar
+FILE|WEB-INF/lib/maven-plugin-registry-2.0.4-maestro-1.2-SNAPSHOT.jar
+FILE|WEB-INF/lib/maven-profile-2.0.4-maestro-1.2-SNAPSHOT.jar
+FILE|WEB-INF/lib/maven-project-2.0.4-maestro-1.2-SNAPSHOT.jar
+FILE|WEB-INF/lib/maven-release-manager-1.0-20061027.091829-1.jar
+FILE|WEB-INF/lib/maven-reporting-api-2.0.4-maestro-1.2-SNAPSHOT.jar
+FILE|WEB-INF/lib/maven-repository-metadata-2.0.4-maestro-1.2-SNAPSHOT.jar
+FILE|WEB-INF/lib/maven-scm-api-1.0-maestro-1.2-SNAPSHOT.jar
+FILE|WEB-INF/lib/maven-scm-manager-plexus-1.0-maestro-1.2-SNAPSHOT.jar
+FILE|WEB-INF/lib/maven-scm-provider-bazaar-1.0-maestro-1.2-SNAPSHOT.jar
+FILE|WEB-INF/lib/maven-scm-provider-clearcase-1.0-maestro-1.2-SNAPSHOT.jar
+FILE|WEB-INF/lib/maven-scm-provider-cvs-commons-1.0-maestro-1.2-SNAPSHOT.jar
+FILE|WEB-INF/lib/maven-scm-provider-cvsexe-1.0-maestro-1.2-SNAPSHOT.jar
+FILE|WEB-INF/lib/maven-scm-provider-local-1.0-maestro-1.2-SNAPSHOT.jar
+FILE|WEB-INF/lib/maven-scm-provider-perforce-1.0-maestro-1.2-SNAPSHOT.jar
+FILE|WEB-INF/lib/maven-scm-provider-starteam-1.0-maestro-1.2-SNAPSHOT.jar
+FILE|WEB-INF/lib/maven-scm-provider-svn-commons-1.0-maestro-1.2-SNAPSHOT.jar
+FILE|WEB-INF/lib/maven-scm-provider-svnexe-1.0-maestro-1.2-SNAPSHOT.jar
+FILE|WEB-INF/lib/maven-settings-2.0.4-maestro-1.2-SNAPSHOT.jar
+FILE|WEB-INF/lib/msnmlib-1.4-20050613.jar
+FILE|WEB-INF/lib/ognl-2.6.7.jar
+FILE|WEB-INF/lib/oro-2.0.6.jar
+FILE|WEB-INF/lib/oscore-2.2.4.jar
+FILE|WEB-INF/lib/plexus-action-1.0-alpha-6.jar
+FILE|WEB-INF/lib/plexus-command-line-1.0-alpha-2.jar
+FILE|WEB-INF/lib/plexus-formica-1.0-beta-11.jar
+FILE|WEB-INF/lib/plexus-i18n-1.0-beta-6.jar
+FILE|WEB-INF/lib/plexus-interactivity-api-1.0-alpha-4.jar
+FILE|WEB-INF/lib/plexus-ircbot-1.1-alpha-6.jar
+FILE|WEB-INF/lib/plexus-jabber-1.0-alpha-4.jar
+FILE|WEB-INF/lib/plexus-jdo2-1.0-alpha-7.jar
+FILE|WEB-INF/lib/plexus-log4j-logging-1.1-alpha-2.jar
+FILE|WEB-INF/lib/plexus-mail-sender-api-1.0-alpha-3.jar
+FILE|WEB-INF/lib/plexus-mail-sender-javamail-1.0-alpha-3.jar
+FILE|WEB-INF/lib/plexus-msn-1.0-alpha-2.jar
+FILE|WEB-INF/lib/plexus-notification-1.0-alpha-5.jar
+FILE|WEB-INF/lib/plexus-quartz-1.0-alpha-3.jar
+FILE|WEB-INF/lib/plexus-security-authentication-api-1.0-alpha-6-20061027.200547-2.jar
+FILE|WEB-INF/lib/plexus-security-authentication-api-1.0-alpha-6-SNAPSHOT.jar
+FILE|WEB-INF/lib/plexus-security-authentication-provider-keystore-1.0-alpha-6-20061027.200547-2.jar
+FILE|WEB-INF/lib/plexus-security-authentication-provider-user-manager-1.0-alpha-6-20061027.200547-2.jar
+FILE|WEB-INF/lib/plexus-security-authorization-api-1.0-alpha-6-SNAPSHOT.jar
+FILE|WEB-INF/lib/plexus-security-authorization-rbac-authorizer-1.0-alpha-6-20061027.200547-2.jar
+FILE|WEB-INF/lib/plexus-security-authorization-rbac-model-1.0-alpha-6-20061027.200547-2.jar
+FILE|WEB-INF/lib/plexus-security-authorization-rbac-model-1.0-alpha-6-SNAPSHOT.jar
+FILE|WEB-INF/lib/plexus-security-authorization-rbac-store-jdo-1.0-alpha-6-20061027.200547-2.jar
+FILE|WEB-INF/lib/plexus-security-keys-api-1.0-alpha-6-20061027.200547-2.jar
+FILE|WEB-INF/lib/plexus-security-keys-api-1.0-alpha-6-SNAPSHOT.jar
+FILE|WEB-INF/lib/plexus-security-keys-jdo-1.0-alpha-6-20061027.200547-2.jar
+FILE|WEB-INF/lib/plexus-security-policy-1.0-alpha-6-20061027.200547-2.jar
+FILE|WEB-INF/lib/plexus-security-policy-1.0-alpha-6-SNAPSHOT.jar
+FILE|WEB-INF/lib/plexus-security-rbac-profile-1.0-alpha-6-20061027.200547-2.jar
+FILE|WEB-INF/lib/plexus-security-rbac-profile-1.0-alpha-6-SNAPSHOT.jar
+FILE|WEB-INF/lib/plexus-security-system-1.0-alpha-6-SNAPSHOT.jar
+FILE|WEB-INF/lib/plexus-security-ui-web-integration-1.0-alpha-6-SNAPSHOT.jar
+FILE|WEB-INF/lib/plexus-security-ui-web-taglib-1.0-alpha-6-20061027.200547-2.jar
+FILE|WEB-INF/lib/plexus-security-ui-web-taglib-1.0-alpha-6-SNAPSHOT.jar
+FILE|WEB-INF/lib/plexus-security-user-management-api-1.0-alpha-6-SNAPSHOT.jar
+FILE|WEB-INF/lib/plexus-security-user-management-provider-jdo-1.0-alpha-6-20061027.200547-2.jar
+FILE|WEB-INF/lib/plexus-taskqueue-1.0-alpha-4.jar
+FILE|WEB-INF/lib/plexus-utils-1.2.jar
+FILE|WEB-INF/lib/plexus-utils-1.3.jar
+FILE|WEB-INF/lib/plexus-velocity-1.1.2.jar
+FILE|WEB-INF/lib/plexus-xmlrpc-1.0-beta-4.jar
+FILE|WEB-INF/lib/plexus-xwork-integration-1.0-alpha-2.jar
+FILE|WEB-INF/lib/quartz-1.4.5.jar
+FILE|WEB-INF/lib/regexp-1.3.jar
+FILE|WEB-INF/lib/rife-continuations-0.0.2.jar
+FILE|WEB-INF/lib/sitemesh-2.2.1.jar
+FILE|WEB-INF/lib/smack-2.0.0.jar
+FILE|WEB-INF/lib/smackx-2.0.0.jar
+FILE|WEB-INF/lib/standard-1.1.2.jar
+FILE|WEB-INF/lib/velocity-1.4.jar
+FILE|WEB-INF/lib/wagon-file-1.0-alpha-7.jar
+FILE|WEB-INF/lib/wagon-http-lightweight-1.0-alpha-6.jar
+FILE|WEB-INF/lib/wagon-provider-api-1.0-alpha-6.jar
+FILE|WEB-INF/lib/wagon-ssh-1.0-alpha-7.jar
+FILE|WEB-INF/lib/wagon-ssh-external-1.0-alpha-6.jar
+FILE|WEB-INF/lib/webwork-2.2.4.jar
+FILE|WEB-INF/lib/xmlrpc-1.2.jar
+FILE|WEB-INF/lib/xwork-1.2.1.jar
+FILE|WEB-INF/sitemesh.xml
+FILE|WEB-INF/web.xml
+FILE|css/
+FILE|css/extremecomponents.css
+FILE|css/print.css
+FILE|css/tigris.css
+FILE|favicon.ico
+FILE|images/
+FILE|images/arrow.gif
+FILE|images/asf_logo_wide.gif
+FILE|images/bg_warning.gif
+FILE|images/buildhistory.gif
+FILE|images/buildhistory_disabled.gif
+FILE|images/building.gif
+FILE|images/buildnow.gif
+FILE|images/buildnow_disabled.gif
+FILE|images/cancelbuild.gif
+FILE|images/checkingout.gif
+FILE|images/continuum_logo_75.gif
+FILE|images/delete.gif
+FILE|images/delete_disabled.gif
+FILE|images/edit.gif
+FILE|images/edit_disabled.gif
+FILE|images/file.gif
+FILE|images/folder-closed.gif
+FILE|images/folder-open.gif
+FILE|images/footerborder.gif
+FILE|images/icon_arrowfolder1_sml.gif
+FILE|images/icon_arrowfolder2_sml.gif
+FILE|images/icon_arrowfolderclosed1_sml.gif
+FILE|images/icon_arrowfolderopen2_sml.gif
+FILE|images/icon_error_lrg.gif
+FILE|images/icon_error_sml.gif
+FILE|images/icon_sortdown.gif
+FILE|images/icon_sortleft.gif
+FILE|images/icon_sortright.gif
+FILE|images/icon_sortup.gif
+FILE|images/icon_success_sml.gif
+FILE|images/icon_warning_sml.gif
+FILE|images/inqueue.gif
+FILE|images/legendbg.gif
+FILE|images/legendbg2.gif
+FILE|images/link.gif
+FILE|images/linkover.gif
+FILE|images/maestro_logo.gif
+FILE|images/mergere-small.gif
+FILE|images/nw_maj.gif
+FILE|images/nw_maj_hi.gif
+FILE|images/nw_maj_rond.gif
+FILE|images/nw_med.gif
+FILE|images/nw_med_hi.gif
+FILE|images/nw_med_rond.gif
+FILE|images/nw_min.gif
+FILE|images/nw_min_036.gif
+FILE|images/nw_min_hi.gif
+FILE|images/releaseproject.gif
+FILE|images/releaseproject_disabled.gif
+FILE|images/se_maj_rond.gif
+FILE|images/strich.gif
+FILE|images/super.gif
+FILE|images/sw_maj_rond.gif
+FILE|images/sw_med_rond.gif
+FILE|images/sw_min.gif
+FILE|images/workingcopy.gif
+FILE|images/workingcopy_disabled.gif
+FILE|index.jsp
+FILE|scripts/
+FILE|scripts/tigris.js
+FILE|template/
+FILE|template/pss/
+FILE|template/pss/checkboxlist.ftl
diff --git a/archiva-base/archiva-indexer/src/test/artifact-dumps/daytrader-ear-1.1.ear.txt b/archiva-base/archiva-indexer/src/test/artifact-dumps/daytrader-ear-1.1.ear.txt
new file mode 100644
index 000000000..875ffdf51
--- /dev/null
+++ b/archiva-base/archiva-indexer/src/test/artifact-dumps/daytrader-ear-1.1.ear.txt
@@ -0,0 +1,18 @@
+FILENAME|daytrader-ear-1.1.ear
+SIZE|1005420
+HASH_MD5|4d677e8e95fb342512e3d05ea68a501d
+HASH_SHA1|58f1e8ae41f12747947c947437e262d9f3bd3ce7
+HASH_BYTECODE|
+JDK|1.0
+FILE|META-INF/
+FILE|META-INF/MANIFEST.MF
+FILE|META-INF/application.xml
+FILE|META-INF/maven/
+FILE|META-INF/maven/geronimo/
+FILE|META-INF/maven/geronimo/daytrader-ear/
+FILE|META-INF/maven/geronimo/daytrader-ear/pom.properties
+FILE|META-INF/maven/geronimo/daytrader-ear/pom.xml
+FILE|dt-ejb.jar
+FILE|streamer.jar
+FILE|web.war
+FILE|wsappclient.jar
diff --git a/archiva-base/archiva-indexer/src/test/artifact-dumps/maven-archetype-simple-1.0-alpha-4.jar.txt b/archiva-base/archiva-indexer/src/test/artifact-dumps/maven-archetype-simple-1.0-alpha-4.jar.txt
new file mode 100644
index 000000000..7b7cbd491
--- /dev/null
+++ b/archiva-base/archiva-indexer/src/test/artifact-dumps/maven-archetype-simple-1.0-alpha-4.jar.txt
@@ -0,0 +1,19 @@
+FILENAME|maven-archetype-simple-1.0-alpha-4.jar
+SIZE|4451
+HASH_MD5|446c23f1e3f88f2dd2d490f8492f65dc
+HASH_SHA1|a9a5b26651836425dacd77fa3646701dff648e14
+HASH_BYTECODE|734edd1419ea3e792e7c15b22b1d823947c43e5a
+JDK|1.1
+CLASS|archetype.App
+METHOD|archetype.App.<init>()V
+METHOD|archetype.App.main([Ljava/lang/String;)V
+FILE|META-INF/
+FILE|META-INF/MANIFEST.MF
+FILE|META-INF/maven/
+FILE|META-INF/maven/org.apache.maven.archetypes/
+FILE|META-INF/maven/org.apache.maven.archetypes/maven-archetype-simple/
+FILE|META-INF/maven/org.apache.maven.archetypes/maven-archetype-simple/pom.properties
+FILE|META-INF/maven/org.apache.maven.archetypes/maven-archetype-simple/pom.xml
+FILE|app.properties
+FILE|archetype/
+FILE|archetype/App.class
diff --git a/archiva-base/archiva-indexer/src/test/artifact-dumps/maven-help-plugin-2.0.2-20070119.121239-2.jar.txt b/archiva-base/archiva-indexer/src/test/artifact-dumps/maven-help-plugin-2.0.2-20070119.121239-2.jar.txt
new file mode 100644
index 000000000..e8572febd
--- /dev/null
+++ b/archiva-base/archiva-indexer/src/test/artifact-dumps/maven-help-plugin-2.0.2-20070119.121239-2.jar.txt
@@ -0,0 +1,88 @@
+FILENAME|maven-help-plugin-2.0.2-20070119.121239-2.jar
+SIZE|20741
+HASH_MD5|16b9374e2f36e42978880b62dce34a0a
+HASH_SHA1|dc87f75ac4ba9c63066372ffae9830e42648f829
+HASH_BYTECODE|c4495d02a84259a458b13023d935efd8c33fcf33
+JDK|1.1
+CLASS|org.apache.maven.plugins.help.ActiveProfilesMojo
+CLASS|org.apache.maven.plugins.help.DependenciesMojo
+CLASS|org.apache.maven.plugins.help.DescribeMojo$1
+CLASS|org.apache.maven.plugins.help.DescribeMojo$PluginInfo
+CLASS|org.apache.maven.plugins.help.DescribeMojo
+CLASS|org.apache.maven.plugins.help.EffectivePomMojo
+CLASS|org.apache.maven.plugins.help.EffectiveSettingsMojo
+METHOD|org.apache.maven.plugins.help.ActiveProfilesMojo.<init>()V
+METHOD|org.apache.maven.plugins.help.ActiveProfilesMojo.execute()V
+METHOD|org.apache.maven.plugins.help.ActiveProfilesMojo.writeFile(Ljava/lang/StringBuffer;)V
+METHOD|org.apache.maven.plugins.help.ActiveProfilesMojo.getActiveProfileStatement(Lorg/apache/maven/project/MavenProject;Ljava/lang/StringBuffer;)V
+METHOD|org.apache.maven.plugins.help.ActiveProfilesMojo.setProjects(Ljava/util/List;)V
+METHOD|org.apache.maven.plugins.help.DependenciesMojo.<init>()V
+METHOD|org.apache.maven.plugins.help.DependenciesMojo.execute()V
+METHOD|org.apache.maven.plugins.help.DependenciesMojo.serialiseDependencyTree(Lorg/apache/maven/shared/dependency/tree/DependencyTree;)Ljava/lang/String;
+METHOD|org.apache.maven.plugins.help.DependenciesMojo.serialiseDependencyNode(Lorg/apache/maven/shared/dependency/tree/DependencyNode;Ljava/lang/StringBuffer;)V
+METHOD|org.apache.maven.plugins.help.DependenciesMojo.write(Ljava/lang/String;Ljava/io/File;)V
+METHOD|org.apache.maven.plugins.help.DependenciesMojo.log(Ljava/lang/String;)V
+METHOD|org.apache.maven.plugins.help.DependenciesMojo.<clinit>()V
+METHOD|org.apache.maven.plugins.help.DescribeMojo$PluginInfo.<init>()V
+METHOD|org.apache.maven.plugins.help.DescribeMojo$PluginInfo.<init>(Lorg/apache/maven/plugins/help/DescribeMojo$1;)V
+METHOD|org.apache.maven.plugins.help.DescribeMojo.<init>()V
+METHOD|org.apache.maven.plugins.help.DescribeMojo.execute()V
+METHOD|org.apache.maven.plugins.help.DescribeMojo.writeDescription(Ljava/lang/StringBuffer;)V
+METHOD|org.apache.maven.plugins.help.DescribeMojo.lookupPluginDescriptor(Lorg/apache/maven/plugins/help/DescribeMojo$PluginInfo;)Lorg/apache/maven/plugin/descriptor/PluginDescriptor;
+METHOD|org.apache.maven.plugins.help.DescribeMojo.parsePluginLookupInfo(Lorg/apache/maven/plugins/help/DescribeMojo$PluginInfo;)V
+METHOD|org.apache.maven.plugins.help.DescribeMojo.describePlugin(Lorg/apache/maven/plugin/descriptor/PluginDescriptor;Ljava/lang/StringBuffer;)V
+METHOD|org.apache.maven.plugins.help.DescribeMojo.formatDescription(Ljava/lang/String;)Ljava/lang/String;
+METHOD|org.apache.maven.plugins.help.DescribeMojo.prettyAppend(Ljava/lang/String;Ljava/lang/StringBuffer;)V
+METHOD|org.apache.maven.plugins.help.DescribeMojo.describeMojo(Lorg/apache/maven/plugin/descriptor/MojoDescriptor;Ljava/lang/StringBuffer;)V
+METHOD|org.apache.maven.plugins.help.DescribeMojo.describeMojoGuts(Lorg/apache/maven/plugin/descriptor/MojoDescriptor;Ljava/lang/StringBuffer;Z)V
+METHOD|org.apache.maven.plugins.help.DescribeMojo.describeMojoRequirements(Lorg/apache/maven/plugin/descriptor/MojoDescriptor;Ljava/lang/StringBuffer;)V
+METHOD|org.apache.maven.plugins.help.DescribeMojo.describeMojoParameters(Lorg/apache/maven/plugin/descriptor/MojoDescriptor;Ljava/lang/StringBuffer;)V
+METHOD|org.apache.maven.plugins.help.DescribeMojo.getPlugin()Ljava/lang/String;
+METHOD|org.apache.maven.plugins.help.DescribeMojo.setPlugin(Ljava/lang/String;)V
+METHOD|org.apache.maven.plugins.help.DescribeMojo.getPluginManager()Lorg/apache/maven/plugin/PluginManager;
+METHOD|org.apache.maven.plugins.help.DescribeMojo.setPluginManager(Lorg/apache/maven/plugin/PluginManager;)V
+METHOD|org.apache.maven.plugins.help.DescribeMojo.getArtifactId()Ljava/lang/String;
+METHOD|org.apache.maven.plugins.help.DescribeMojo.setArtifactId(Ljava/lang/String;)V
+METHOD|org.apache.maven.plugins.help.DescribeMojo.getGroupId()Ljava/lang/String;
+METHOD|org.apache.maven.plugins.help.DescribeMojo.setGroupId(Ljava/lang/String;)V
+METHOD|org.apache.maven.plugins.help.DescribeMojo.getLocalRepository()Lorg/apache/maven/artifact/repository/ArtifactRepository;
+METHOD|org.apache.maven.plugins.help.DescribeMojo.setLocalRepository(Lorg/apache/maven/artifact/repository/ArtifactRepository;)V
+METHOD|org.apache.maven.plugins.help.DescribeMojo.getMojo()Ljava/lang/String;
+METHOD|org.apache.maven.plugins.help.DescribeMojo.setMojo(Ljava/lang/String;)V
+METHOD|org.apache.maven.plugins.help.DescribeMojo.getOutput()Ljava/io/File;
+METHOD|org.apache.maven.plugins.help.DescribeMojo.setOutput(Ljava/io/File;)V
+METHOD|org.apache.maven.plugins.help.DescribeMojo.getProject()Lorg/apache/maven/project/MavenProject;
+METHOD|org.apache.maven.plugins.help.DescribeMojo.setProject(Lorg/apache/maven/project/MavenProject;)V
+METHOD|org.apache.maven.plugins.help.DescribeMojo.getSettings()Lorg/apache/maven/settings/Settings;
+METHOD|org.apache.maven.plugins.help.DescribeMojo.setSettings(Lorg/apache/maven/settings/Settings;)V
+METHOD|org.apache.maven.plugins.help.DescribeMojo.getVersion()Ljava/lang/String;
+METHOD|org.apache.maven.plugins.help.DescribeMojo.setVersion(Ljava/lang/String;)V
+METHOD|org.apache.maven.plugins.help.EffectivePomMojo.<init>()V
+METHOD|org.apache.maven.plugins.help.EffectivePomMojo.execute()V
+METHOD|org.apache.maven.plugins.help.EffectivePomMojo.getEffectivePom(Lorg/apache/maven/project/MavenProject;Ljava/lang/StringBuffer;)V
+METHOD|org.apache.maven.plugins.help.EffectivePomMojo.setOutput(Ljava/io/File;)V
+METHOD|org.apache.maven.plugins.help.EffectivePomMojo.setProjects(Ljava/util/List;)V
+METHOD|org.apache.maven.plugins.help.EffectiveSettingsMojo.<init>()V
+METHOD|org.apache.maven.plugins.help.EffectiveSettingsMojo.execute()V
+METHOD|org.apache.maven.plugins.help.EffectiveSettingsMojo.setOutput(Ljava/lang/String;)V
+METHOD|org.apache.maven.plugins.help.EffectiveSettingsMojo.setSettings(Lorg/apache/maven/settings/Settings;)V
+FILE|META-INF/
+FILE|META-INF/MANIFEST.MF
+FILE|META-INF/maven/
+FILE|META-INF/maven/org.apache.maven.plugins/
+FILE|META-INF/maven/org.apache.maven.plugins/maven-help-plugin/
+FILE|META-INF/maven/org.apache.maven.plugins/maven-help-plugin/pom.properties
+FILE|META-INF/maven/org.apache.maven.plugins/maven-help-plugin/pom.xml
+FILE|META-INF/maven/plugin.xml
+FILE|org/
+FILE|org/apache/
+FILE|org/apache/maven/
+FILE|org/apache/maven/plugins/
+FILE|org/apache/maven/plugins/help/
+FILE|org/apache/maven/plugins/help/ActiveProfilesMojo.class
+FILE|org/apache/maven/plugins/help/DependenciesMojo.class
+FILE|org/apache/maven/plugins/help/DescribeMojo$1.class
+FILE|org/apache/maven/plugins/help/DescribeMojo$PluginInfo.class
+FILE|org/apache/maven/plugins/help/DescribeMojo.class
+FILE|org/apache/maven/plugins/help/EffectivePomMojo.class
+FILE|org/apache/maven/plugins/help/EffectiveSettingsMojo.class
diff --git a/archiva-base/archiva-indexer/src/test/artifact-dumps/redback-authorization-open-1.0-alpha-1-SNAPSHOT.jar.txt b/archiva-base/archiva-indexer/src/test/artifact-dumps/redback-authorization-open-1.0-alpha-1-SNAPSHOT.jar.txt
new file mode 100644
index 000000000..bbad7a8a2
--- /dev/null
+++ b/archiva-base/archiva-indexer/src/test/artifact-dumps/redback-authorization-open-1.0-alpha-1-SNAPSHOT.jar.txt
@@ -0,0 +1,26 @@
+FILENAME|redback-authorization-open-1.0-alpha-1-SNAPSHOT.jar
+SIZE|4080
+HASH_MD5|f42047fe2e177ac04d0df7aa44d408be
+HASH_SHA1|2bb14b388973351b0a4dfe11d171965f59cc61a1
+HASH_BYTECODE|817c08abe3d48d67a5c49c13e7c5497da7bd5e8e
+JDK|1.4
+CLASS|org.codehaus.plexus.redback.authorization.open.OpenAuthorizer
+METHOD|org.codehaus.plexus.redback.authorization.open.OpenAuthorizer.<init>()V
+METHOD|org.codehaus.plexus.redback.authorization.open.OpenAuthorizer.getId()Ljava/lang/String;
+METHOD|org.codehaus.plexus.redback.authorization.open.OpenAuthorizer.isAuthorized(Lorg/codehaus/plexus/redback/authorization/AuthorizationDataSource;)Lorg/codehaus/plexus/redback/authorization/AuthorizationResult;
+FILE|META-INF/
+FILE|META-INF/MANIFEST.MF
+FILE|META-INF/maven/
+FILE|META-INF/maven/org.codehaus.plexus.redback/
+FILE|META-INF/maven/org.codehaus.plexus.redback/redback-authorization-open/
+FILE|META-INF/maven/org.codehaus.plexus.redback/redback-authorization-open/pom.properties
+FILE|META-INF/maven/org.codehaus.plexus.redback/redback-authorization-open/pom.xml
+FILE|META-INF/plexus/
+FILE|META-INF/plexus/components.xml
+FILE|org/
+FILE|org/codehaus/
+FILE|org/codehaus/plexus/
+FILE|org/codehaus/plexus/redback/
+FILE|org/codehaus/plexus/redback/authorization/
+FILE|org/codehaus/plexus/redback/authorization/open/
+FILE|org/codehaus/plexus/redback/authorization/open/OpenAuthorizer.class
diff --git a/archiva-base/archiva-indexer/src/test/artifact-dumps/testng-5.1-jdk15.jar.txt b/archiva-base/archiva-indexer/src/test/artifact-dumps/testng-5.1-jdk15.jar.txt
new file mode 100644
index 000000000..2e5f53abc
--- /dev/null
+++ b/archiva-base/archiva-indexer/src/test/artifact-dumps/testng-5.1-jdk15.jar.txt
@@ -0,0 +1,4789 @@
+FILENAME|testng-5.1-jdk15.jar
+SIZE|692505
+HASH_MD5|3345656c1bf32a45e9546d69e35a21d4
+HASH_SHA1|7a0d2b8239517c561aefe2fa2971db522a3e3a47
+HASH_BYTECODE|0ea3f1aa7fc9725958af443f2e4ca13bd7d60968
+JDK|1.5
+CLASS|bsh.BSHAllocationExpression
+CLASS|bsh.BSHAmbiguousName
+CLASS|bsh.BSHArguments
+CLASS|bsh.BSHArrayDimensions
+CLASS|bsh.BSHArrayInitializer
+CLASS|bsh.BSHAssignment
+CLASS|bsh.BSHBinaryExpression
+CLASS|bsh.BSHBlock$NodeFilter
+CLASS|bsh.BSHBlock
+CLASS|bsh.BSHCastExpression
+CLASS|bsh.BSHClassDeclaration
+CLASS|bsh.BSHEnhancedForStatement
+CLASS|bsh.BSHForStatement
+CLASS|bsh.BSHFormalComment
+CLASS|bsh.BSHFormalParameter
+CLASS|bsh.BSHFormalParameters
+CLASS|bsh.BSHIfStatement
+CLASS|bsh.BSHImportDeclaration
+CLASS|bsh.BSHLiteral
+CLASS|bsh.BSHMethodDeclaration
+CLASS|bsh.BSHMethodInvocation
+CLASS|bsh.BSHPackageDeclaration
+CLASS|bsh.BSHPrimaryExpression
+CLASS|bsh.BSHPrimarySuffix
+CLASS|bsh.BSHPrimitiveType
+CLASS|bsh.BSHReturnStatement
+CLASS|bsh.BSHReturnType
+CLASS|bsh.BSHStatementExpressionList
+CLASS|bsh.BSHSwitchLabel
+CLASS|bsh.BSHSwitchStatement
+CLASS|bsh.BSHTernaryExpression
+CLASS|bsh.BSHThrowStatement
+CLASS|bsh.BSHTryStatement
+CLASS|bsh.BSHType
+CLASS|bsh.BSHTypedVariableDeclaration
+CLASS|bsh.BSHUnaryExpression
+CLASS|bsh.BSHVariableDeclarator
+CLASS|bsh.BSHWhileStatement
+CLASS|bsh.BlockNameSpace
+CLASS|bsh.BshClassManager$Listener
+CLASS|bsh.BshClassManager$SignatureKey
+CLASS|bsh.BshClassManager
+CLASS|bsh.BshIterator
+CLASS|bsh.BshMethod
+CLASS|bsh.CallStack
+CLASS|bsh.Capabilities$Unavailable
+CLASS|bsh.Capabilities
+CLASS|bsh.ClassGenerator
+CLASS|bsh.ClassGeneratorImpl$ClassNodeFilter
+CLASS|bsh.ClassGeneratorImpl
+CLASS|bsh.ClassGeneratorUtil$ConstructorArgs
+CLASS|bsh.ClassGeneratorUtil
+CLASS|bsh.ClassIdentifier
+CLASS|bsh.ClassPathException
+CLASS|bsh.CollectionManager$1
+CLASS|bsh.CollectionManager$BasicBshIterator
+CLASS|bsh.CollectionManager
+CLASS|bsh.CommandLineReader
+CLASS|bsh.Console
+CLASS|bsh.ConsoleInterface
+CLASS|bsh.DelayedEvalBshMethod
+CLASS|bsh.EvalError
+CLASS|bsh.ExternalNameSpace
+CLASS|bsh.Interpreter$1
+CLASS|bsh.Interpreter
+CLASS|bsh.InterpreterError
+CLASS|bsh.JJTParserState
+CLASS|bsh.JavaCharStream
+CLASS|bsh.LHS
+CLASS|bsh.Modifiers
+CLASS|bsh.Name
+CLASS|bsh.NameSource$Listener
+CLASS|bsh.NameSource
+CLASS|bsh.NameSpace
+CLASS|bsh.Node
+CLASS|bsh.ParseException
+CLASS|bsh.Parser$1
+CLASS|bsh.Parser$LookaheadSuccess
+CLASS|bsh.Parser
+CLASS|bsh.ParserConstants
+CLASS|bsh.ParserTokenManager
+CLASS|bsh.ParserTreeConstants
+CLASS|bsh.Primitive$Special
+CLASS|bsh.Primitive
+CLASS|bsh.Reflect
+CLASS|bsh.ReflectError
+CLASS|bsh.ReflectManager
+CLASS|bsh.Remote
+CLASS|bsh.ReturnControl
+CLASS|bsh.SimpleNode$1
+CLASS|bsh.SimpleNode
+CLASS|bsh.StringUtil
+CLASS|bsh.TargetError
+CLASS|bsh.This
+CLASS|bsh.Token
+CLASS|bsh.TokenMgrError
+CLASS|bsh.Types
+CLASS|bsh.UtilEvalError
+CLASS|bsh.UtilTargetError
+CLASS|bsh.Variable
+CLASS|bsh.XThis$Handler
+CLASS|bsh.XThis
+CLASS|bsh.classpath.BshClassLoader
+CLASS|bsh.classpath.BshClassPath$AmbiguousName
+CLASS|bsh.classpath.BshClassPath$ClassSource
+CLASS|bsh.classpath.BshClassPath$DirClassSource
+CLASS|bsh.classpath.BshClassPath$GeneratedClassSource
+CLASS|bsh.classpath.BshClassPath$JarClassSource
+CLASS|bsh.classpath.BshClassPath$MappingFeedback
+CLASS|bsh.classpath.BshClassPath$UnqualifiedNameTable
+CLASS|bsh.classpath.BshClassPath
+CLASS|bsh.classpath.ClassManagerImpl
+CLASS|bsh.classpath.ClassPathListener
+CLASS|bsh.classpath.DiscreteFilesClassLoader$ClassSourceMap
+CLASS|bsh.classpath.DiscreteFilesClassLoader
+CLASS|bsh.collection.CollectionIterator
+CLASS|bsh.collection.CollectionManagerImpl
+CLASS|bsh.commands.dir
+CLASS|bsh.org.objectweb.asm.ByteVector
+CLASS|bsh.org.objectweb.asm.ClassVisitor
+CLASS|bsh.org.objectweb.asm.ClassWriter
+CLASS|bsh.org.objectweb.asm.CodeVisitor
+CLASS|bsh.org.objectweb.asm.CodeWriter
+CLASS|bsh.org.objectweb.asm.Constants
+CLASS|bsh.org.objectweb.asm.Edge
+CLASS|bsh.org.objectweb.asm.Item
+CLASS|bsh.org.objectweb.asm.Label
+CLASS|bsh.org.objectweb.asm.Type
+CLASS|bsh.reflect.ReflectManagerImpl
+CLASS|bsh.servlet.BshServlet
+CLASS|bsh.servlet.SimpleTemplate
+CLASS|bsh.util.AWTConsole$1
+CLASS|bsh.util.AWTConsole
+CLASS|bsh.util.AWTDemoApplet
+CLASS|bsh.util.AWTRemoteApplet
+CLASS|bsh.util.BeanShellBSFEngine
+CLASS|bsh.util.BshCanvas
+CLASS|bsh.util.ClassBrowser$1
+CLASS|bsh.util.ClassBrowser$2
+CLASS|bsh.util.ClassBrowser$PackageTree
+CLASS|bsh.util.ClassBrowser
+CLASS|bsh.util.GUIConsoleInterface
+CLASS|bsh.util.Httpd
+CLASS|bsh.util.HttpdConnection
+CLASS|bsh.util.JConsole$1
+CLASS|bsh.util.JConsole$2
+CLASS|bsh.util.JConsole$3
+CLASS|bsh.util.JConsole$4
+CLASS|bsh.util.JConsole$5
+CLASS|bsh.util.JConsole$BlockingPipedInputStream
+CLASS|bsh.util.JConsole
+CLASS|bsh.util.JDemoApplet
+CLASS|bsh.util.JRemoteApplet
+CLASS|bsh.util.NameCompletion
+CLASS|bsh.util.NameCompletionTable
+CLASS|bsh.util.Sessiond
+CLASS|bsh.util.SessiondConnection
+CLASS|bsh.util.Util
+CLASS|com.beust.testng.TestNG
+CLASS|com.beust.testng.TestNGAntTask
+CLASS|com.thoughtworks.qdox.JavaDocBuilder$1
+CLASS|com.thoughtworks.qdox.JavaDocBuilder
+CLASS|com.thoughtworks.qdox.Searcher
+CLASS|com.thoughtworks.qdox.ant.AbstractQdoxTask
+CLASS|com.thoughtworks.qdox.directorywalker.DirectoryScanner$1
+CLASS|com.thoughtworks.qdox.directorywalker.DirectoryScanner
+CLASS|com.thoughtworks.qdox.directorywalker.FileVisitor
+CLASS|com.thoughtworks.qdox.directorywalker.Filter
+CLASS|com.thoughtworks.qdox.directorywalker.SuffixFilter
+CLASS|com.thoughtworks.qdox.junit.APITestCase$1
+CLASS|com.thoughtworks.qdox.junit.APITestCase
+CLASS|com.thoughtworks.qdox.model.AbstractInheritableJavaEntity
+CLASS|com.thoughtworks.qdox.model.AbstractJavaEntity
+CLASS|com.thoughtworks.qdox.model.BeanProperty
+CLASS|com.thoughtworks.qdox.model.ClassLibrary
+CLASS|com.thoughtworks.qdox.model.DefaultDocletTag
+CLASS|com.thoughtworks.qdox.model.DefaultDocletTagFactory
+CLASS|com.thoughtworks.qdox.model.DocletTag
+CLASS|com.thoughtworks.qdox.model.DocletTagFactory
+CLASS|com.thoughtworks.qdox.model.IndentBuffer
+CLASS|com.thoughtworks.qdox.model.JavaClass
+CLASS|com.thoughtworks.qdox.model.JavaClassCache
+CLASS|com.thoughtworks.qdox.model.JavaClassParent
+CLASS|com.thoughtworks.qdox.model.JavaField
+CLASS|com.thoughtworks.qdox.model.JavaMethod
+CLASS|com.thoughtworks.qdox.model.JavaParameter
+CLASS|com.thoughtworks.qdox.model.JavaSource
+CLASS|com.thoughtworks.qdox.model.Member
+CLASS|com.thoughtworks.qdox.model.ModelBuilder
+CLASS|com.thoughtworks.qdox.model.Type
+CLASS|com.thoughtworks.qdox.model.util.TagParser
+CLASS|com.thoughtworks.qdox.parser.Builder
+CLASS|com.thoughtworks.qdox.parser.Lexer
+CLASS|com.thoughtworks.qdox.parser.ParseException
+CLASS|com.thoughtworks.qdox.parser.impl.JFlexLexer
+CLASS|com.thoughtworks.qdox.parser.impl.Parser$1
+CLASS|com.thoughtworks.qdox.parser.impl.Parser$Value
+CLASS|com.thoughtworks.qdox.parser.impl.Parser
+CLASS|com.thoughtworks.qdox.parser.structs.ClassDef
+CLASS|com.thoughtworks.qdox.parser.structs.FieldDef
+CLASS|com.thoughtworks.qdox.parser.structs.LocatedDef
+CLASS|com.thoughtworks.qdox.parser.structs.MethodDef
+CLASS|com.thoughtworks.qdox.parser.structs.TagDef
+CLASS|com.thoughtworks.qdox.parser.structs.TypeDef
+CLASS|org.testng.Assert
+CLASS|org.testng.AssertJUnit
+CLASS|org.testng.ClassMethodMap
+CLASS|org.testng.IClass
+CLASS|org.testng.IExtraOutput
+CLASS|org.testng.IHookCallBack
+CLASS|org.testng.IHookable
+CLASS|org.testng.IInstanceInfo
+CLASS|org.testng.IMethodSelector
+CLASS|org.testng.IReporter
+CLASS|org.testng.IResultMap
+CLASS|org.testng.ISuite
+CLASS|org.testng.ISuiteListener
+CLASS|org.testng.ISuiteResult
+CLASS|org.testng.ITest
+CLASS|org.testng.ITestClass
+CLASS|org.testng.ITestClassFinder
+CLASS|org.testng.ITestContext
+CLASS|org.testng.ITestListener
+CLASS|org.testng.ITestMethodFinder
+CLASS|org.testng.ITestNGMethod
+CLASS|org.testng.ITestResult
+CLASS|org.testng.ITestRunnerFactory
+CLASS|org.testng.JUnitConverter
+CLASS|org.testng.JUnitConverterTask
+CLASS|org.testng.Reporter
+CLASS|org.testng.SuiteResult$1
+CLASS|org.testng.SuiteResult
+CLASS|org.testng.SuiteRunner$DefaultTestRunnerFactory
+CLASS|org.testng.SuiteRunner$ProxyTestRunnerFactory
+CLASS|org.testng.SuiteRunner
+CLASS|org.testng.TestClass
+CLASS|org.testng.TestException
+CLASS|org.testng.TestListenerAdapter
+CLASS|org.testng.TestNG
+CLASS|org.testng.TestNGAntTask
+CLASS|org.testng.TestNGCommandLineArgs
+CLASS|org.testng.TestNGException
+CLASS|org.testng.TestRunner
+CLASS|org.testng.annotations.AfterClass
+CLASS|org.testng.annotations.AfterGroups
+CLASS|org.testng.annotations.AfterMethod
+CLASS|org.testng.annotations.AfterSuite
+CLASS|org.testng.annotations.AfterTest
+CLASS|org.testng.annotations.BeforeClass
+CLASS|org.testng.annotations.BeforeGroups
+CLASS|org.testng.annotations.BeforeMethod
+CLASS|org.testng.annotations.BeforeSuite
+CLASS|org.testng.annotations.BeforeTest
+CLASS|org.testng.annotations.Configuration
+CLASS|org.testng.annotations.DataProvider
+CLASS|org.testng.annotations.ExpectedExceptions
+CLASS|org.testng.annotations.Factory
+CLASS|org.testng.annotations.Parameters
+CLASS|org.testng.annotations.Test
+CLASS|org.testng.internal.ArrayIterator
+CLASS|org.testng.internal.BaseClassFinder
+CLASS|org.testng.internal.BaseTestMethod$1
+CLASS|org.testng.internal.BaseTestMethod
+CLASS|org.testng.internal.ClassHelper
+CLASS|org.testng.internal.ClassImpl
+CLASS|org.testng.internal.ConfigurationGroupMethods
+CLASS|org.testng.internal.ConfigurationMethod
+CLASS|org.testng.internal.Constants
+CLASS|org.testng.internal.ExtraOutput
+CLASS|org.testng.internal.FactoryMethod
+CLASS|org.testng.internal.Graph$Node
+CLASS|org.testng.internal.Graph
+CLASS|org.testng.internal.HostFile
+CLASS|org.testng.internal.IInvoker
+CLASS|org.testng.internal.ITestResultNotifier
+CLASS|org.testng.internal.InstanceInfo
+CLASS|org.testng.internal.InvokeMethodRunnable$TestNGRuntimeException
+CLASS|org.testng.internal.InvokeMethodRunnable
+CLASS|org.testng.internal.InvokedMethod
+CLASS|org.testng.internal.Invoker$1
+CLASS|org.testng.internal.Invoker
+CLASS|org.testng.internal.JUnitUtils
+CLASS|org.testng.internal.MethodHelper
+CLASS|org.testng.internal.MethodInheritance
+CLASS|org.testng.internal.MethodSelectorDescriptor
+CLASS|org.testng.internal.PackageUtils$1
+CLASS|org.testng.internal.PackageUtils
+CLASS|org.testng.internal.Parameters
+CLASS|org.testng.internal.ResultMap
+CLASS|org.testng.internal.RunInfo
+CLASS|org.testng.internal.TestMethodWorker
+CLASS|org.testng.internal.TestNGClassFinder
+CLASS|org.testng.internal.TestNGMethod$1
+CLASS|org.testng.internal.TestNGMethod
+CLASS|org.testng.internal.TestNGMethodFinder
+CLASS|org.testng.internal.TestNGProperty
+CLASS|org.testng.internal.TestResult
+CLASS|org.testng.internal.Utils
+CLASS|org.testng.internal.XmlMethodSelector
+CLASS|org.testng.internal.annotations.AfterSuiteAnnotation
+CLASS|org.testng.internal.annotations.AnnotationConfiguration
+CLASS|org.testng.internal.annotations.AnnotationHelper
+CLASS|org.testng.internal.annotations.BaseBeforeAfter
+CLASS|org.testng.internal.annotations.BeforeSuiteAnnotation
+CLASS|org.testng.internal.annotations.ConfigurationAnnotation
+CLASS|org.testng.internal.annotations.Converter
+CLASS|org.testng.internal.annotations.DataProviderAnnotation
+CLASS|org.testng.internal.annotations.ExpectedExceptionsAnnotation
+CLASS|org.testng.internal.annotations.FactoryAnnotation
+CLASS|org.testng.internal.annotations.IAfterClass
+CLASS|org.testng.internal.annotations.IAfterGroups
+CLASS|org.testng.internal.annotations.IAfterMethod
+CLASS|org.testng.internal.annotations.IAfterSuite
+CLASS|org.testng.internal.annotations.IAfterTest
+CLASS|org.testng.internal.annotations.IAfterTests
+CLASS|org.testng.internal.annotations.IAnnotation
+CLASS|org.testng.internal.annotations.IAnnotationFinder
+CLASS|org.testng.internal.annotations.IBaseBeforeAfter
+CLASS|org.testng.internal.annotations.IBeforeClass
+CLASS|org.testng.internal.annotations.IBeforeGroups
+CLASS|org.testng.internal.annotations.IBeforeMethod
+CLASS|org.testng.internal.annotations.IBeforeSuite
+CLASS|org.testng.internal.annotations.IBeforeTest
+CLASS|org.testng.internal.annotations.IConfiguration
+CLASS|org.testng.internal.annotations.IDataProvider
+CLASS|org.testng.internal.annotations.IExpectedExceptions
+CLASS|org.testng.internal.annotations.IFactory
+CLASS|org.testng.internal.annotations.IParameterizable
+CLASS|org.testng.internal.annotations.IParameters
+CLASS|org.testng.internal.annotations.ITest
+CLASS|org.testng.internal.annotations.ITestOrConfiguration
+CLASS|org.testng.internal.annotations.JDK14AnnotationFinder$1
+CLASS|org.testng.internal.annotations.JDK14AnnotationFinder
+CLASS|org.testng.internal.annotations.JDK14TagFactory
+CLASS|org.testng.internal.annotations.JDK15AnnotationFinder
+CLASS|org.testng.internal.annotations.JDK15TagFactory
+CLASS|org.testng.internal.annotations.ParametersAnnotation
+CLASS|org.testng.internal.annotations.TestAnnotation
+CLASS|org.testng.internal.annotations.TestOrConfiguration
+CLASS|org.testng.internal.remote.SlavePool
+CLASS|org.testng.internal.thread.CountDownAdapter
+CLASS|org.testng.internal.thread.ExecutorAdapter
+CLASS|org.testng.internal.thread.FutureResultAdapter
+CLASS|org.testng.internal.thread.ICountDown
+CLASS|org.testng.internal.thread.IExecutor
+CLASS|org.testng.internal.thread.IFutureResult
+CLASS|org.testng.internal.thread.IPooledExecutor
+CLASS|org.testng.internal.thread.IThreadFactory
+CLASS|org.testng.internal.thread.PooledExecutorAdapter
+CLASS|org.testng.internal.thread.TestNGThread
+CLASS|org.testng.internal.thread.ThreadExecutionException
+CLASS|org.testng.internal.thread.ThreadTimeoutException
+CLASS|org.testng.internal.thread.ThreadUtil$ThreadFactoryImpl
+CLASS|org.testng.internal.thread.ThreadUtil
+CLASS|org.testng.junit.INameFilter
+CLASS|org.testng.junit.JUnitClassFinder
+CLASS|org.testng.junit.JUnitDirectoryConverter
+CLASS|org.testng.junit.JUnitMethodFinder$1
+CLASS|org.testng.junit.JUnitMethodFinder$2
+CLASS|org.testng.junit.JUnitMethodFinder$3
+CLASS|org.testng.junit.JUnitMethodFinder
+CLASS|org.testng.junit.JUnitTestConverter
+CLASS|org.testng.log.TextFormatter
+CLASS|org.testng.log4testng.Logger
+CLASS|org.testng.remote.ConnectionInfo
+CLASS|org.testng.remote.RemoteSuiteWorker
+CLASS|org.testng.remote.RemoteTestWorker
+CLASS|org.testng.remote.RemoteWorker
+CLASS|org.testng.remote.strprotocol.AbstractRemoteTestRunnerClient$ServerConnection
+CLASS|org.testng.remote.strprotocol.AbstractRemoteTestRunnerClient
+CLASS|org.testng.remote.strprotocol.GenericMessage
+CLASS|org.testng.remote.strprotocol.IMessage
+CLASS|org.testng.remote.strprotocol.IRemoteSuiteListener
+CLASS|org.testng.remote.strprotocol.IRemoteTestListener
+CLASS|org.testng.remote.strprotocol.IStringMessage
+CLASS|org.testng.remote.strprotocol.MessageHelper
+CLASS|org.testng.remote.strprotocol.RemoteMessageSenderTestListener
+CLASS|org.testng.remote.strprotocol.StringMessageSenderHelper$ReaderThread
+CLASS|org.testng.remote.strprotocol.StringMessageSenderHelper
+CLASS|org.testng.remote.strprotocol.SuiteMessage
+CLASS|org.testng.remote.strprotocol.TestMessage
+CLASS|org.testng.remote.strprotocol.TestResultMessage
+CLASS|org.testng.reporters.DotTestListener
+CLASS|org.testng.reporters.ExitCodeListener
+CLASS|org.testng.reporters.FailedReporter
+CLASS|org.testng.reporters.HtmlHelper
+CLASS|org.testng.reporters.JUnitXMLReporter
+CLASS|org.testng.reporters.SuiteHTMLReporter$1
+CLASS|org.testng.reporters.SuiteHTMLReporter
+CLASS|org.testng.reporters.Tag
+CLASS|org.testng.reporters.TestHTMLReporter$1
+CLASS|org.testng.reporters.TestHTMLReporter
+CLASS|org.testng.reporters.TextReporter
+CLASS|org.testng.reporters.XMLConstants
+CLASS|org.testng.reporters.XMLReporter
+CLASS|org.testng.reporters.XMLStringBuffer
+CLASS|org.testng.reporters.XMLUtils
+CLASS|org.testng.xml.ClassSuite
+CLASS|org.testng.xml.LaunchSuite$1
+CLASS|org.testng.xml.LaunchSuite$ClassListSuite
+CLASS|org.testng.xml.LaunchSuite$CustomizedSuite
+CLASS|org.testng.xml.LaunchSuite$ExistingSuite
+CLASS|org.testng.xml.LaunchSuite$MethodsSuite
+CLASS|org.testng.xml.LaunchSuite
+CLASS|org.testng.xml.Parser
+CLASS|org.testng.xml.SuiteGenerator
+CLASS|org.testng.xml.TestNGContentHandler
+CLASS|org.testng.xml.XmlClass
+CLASS|org.testng.xml.XmlMethodSelector
+CLASS|org.testng.xml.XmlPackage
+CLASS|org.testng.xml.XmlSuite
+CLASS|org.testng.xml.XmlTest
+METHOD|bsh.BSHAllocationExpression.<init>(I)V
+METHOD|bsh.BSHAllocationExpression.eval(Lbsh/CallStack;Lbsh/Interpreter;)Ljava/lang/Object;
+METHOD|bsh.BSHAllocationExpression.objectAllocation(Lbsh/BSHAmbiguousName;Lbsh/BSHArguments;Lbsh/CallStack;Lbsh/Interpreter;)Ljava/lang/Object;
+METHOD|bsh.BSHAllocationExpression.constructObject(Ljava/lang/Class;[Ljava/lang/Object;Lbsh/CallStack;)Ljava/lang/Object;
+METHOD|bsh.BSHAllocationExpression.constructWithClassBody(Ljava/lang/Class;[Ljava/lang/Object;Lbsh/BSHBlock;Lbsh/CallStack;Lbsh/Interpreter;)Ljava/lang/Object;
+METHOD|bsh.BSHAllocationExpression.constructWithInterfaceBody(Ljava/lang/Class;[Ljava/lang/Object;Lbsh/BSHBlock;Lbsh/CallStack;Lbsh/Interpreter;)Ljava/lang/Object;
+METHOD|bsh.BSHAllocationExpression.objectArrayAllocation(Lbsh/BSHAmbiguousName;Lbsh/BSHArrayDimensions;Lbsh/CallStack;Lbsh/Interpreter;)Ljava/lang/Object;
+METHOD|bsh.BSHAllocationExpression.primitiveArrayAllocation(Lbsh/BSHPrimitiveType;Lbsh/BSHArrayDimensions;Lbsh/CallStack;Lbsh/Interpreter;)Ljava/lang/Object;
+METHOD|bsh.BSHAllocationExpression.arrayAllocation(Lbsh/BSHArrayDimensions;Ljava/lang/Class;Lbsh/CallStack;Lbsh/Interpreter;)Ljava/lang/Object;
+METHOD|bsh.BSHAllocationExpression.arrayNewInstance(Ljava/lang/Class;Lbsh/BSHArrayDimensions;Lbsh/CallStack;)Ljava/lang/Object;
+METHOD|bsh.BSHAllocationExpression.<clinit>()V
+METHOD|bsh.BSHAmbiguousName.<init>(I)V
+METHOD|bsh.BSHAmbiguousName.getName(Lbsh/NameSpace;)Lbsh/Name;
+METHOD|bsh.BSHAmbiguousName.toObject(Lbsh/CallStack;Lbsh/Interpreter;)Ljava/lang/Object;
+METHOD|bsh.BSHAmbiguousName.toObject(Lbsh/CallStack;Lbsh/Interpreter;Z)Ljava/lang/Object;
+METHOD|bsh.BSHAmbiguousName.toClass(Lbsh/CallStack;Lbsh/Interpreter;)Ljava/lang/Class;
+METHOD|bsh.BSHAmbiguousName.toLHS(Lbsh/CallStack;Lbsh/Interpreter;)Lbsh/LHS;
+METHOD|bsh.BSHAmbiguousName.eval(Lbsh/CallStack;Lbsh/Interpreter;)Ljava/lang/Object;
+METHOD|bsh.BSHAmbiguousName.toString()Ljava/lang/String;
+METHOD|bsh.BSHArguments.<init>(I)V
+METHOD|bsh.BSHArguments.getArguments(Lbsh/CallStack;Lbsh/Interpreter;)[Ljava/lang/Object;
+METHOD|bsh.BSHArrayDimensions.<init>(I)V
+METHOD|bsh.BSHArrayDimensions.addDefinedDimension()V
+METHOD|bsh.BSHArrayDimensions.addUndefinedDimension()V
+METHOD|bsh.BSHArrayDimensions.eval(Ljava/lang/Class;Lbsh/CallStack;Lbsh/Interpreter;)Ljava/lang/Object;
+METHOD|bsh.BSHArrayDimensions.eval(Lbsh/CallStack;Lbsh/Interpreter;)Ljava/lang/Object;
+METHOD|bsh.BSHArrayInitializer.<init>(I)V
+METHOD|bsh.BSHArrayInitializer.eval(Lbsh/CallStack;Lbsh/Interpreter;)Ljava/lang/Object;
+METHOD|bsh.BSHArrayInitializer.eval(Ljava/lang/Class;ILbsh/CallStack;Lbsh/Interpreter;)Ljava/lang/Object;
+METHOD|bsh.BSHArrayInitializer.throwTypeError(Ljava/lang/Class;Ljava/lang/Object;ILbsh/CallStack;)V
+METHOD|bsh.BSHAssignment.<init>(I)V
+METHOD|bsh.BSHAssignment.eval(Lbsh/CallStack;Lbsh/Interpreter;)Ljava/lang/Object;
+METHOD|bsh.BSHAssignment.operation(Ljava/lang/Object;Ljava/lang/Object;I)Ljava/lang/Object;
+METHOD|bsh.BSHBinaryExpression.<init>(I)V
+METHOD|bsh.BSHBinaryExpression.eval(Lbsh/CallStack;Lbsh/Interpreter;)Ljava/lang/Object;
+METHOD|bsh.BSHBinaryExpression.isPrimitiveValue(Ljava/lang/Object;)Z
+METHOD|bsh.BSHBinaryExpression.isWrapper(Ljava/lang/Object;)Z
+METHOD|bsh.BSHBinaryExpression.class$(Ljava/lang/String;)Ljava/lang/Class;
+METHOD|bsh.BSHBlock$NodeFilter.isVisible(Lbsh/SimpleNode;)Z
+METHOD|bsh.BSHBlock.<init>(I)V
+METHOD|bsh.BSHBlock.eval(Lbsh/CallStack;Lbsh/Interpreter;)Ljava/lang/Object;
+METHOD|bsh.BSHBlock.eval(Lbsh/CallStack;Lbsh/Interpreter;Z)Ljava/lang/Object;
+METHOD|bsh.BSHBlock.evalBlock(Lbsh/CallStack;Lbsh/Interpreter;ZLbsh/BSHBlock$NodeFilter;)Ljava/lang/Object;
+METHOD|bsh.BSHCastExpression.<init>(I)V
+METHOD|bsh.BSHCastExpression.eval(Lbsh/CallStack;Lbsh/Interpreter;)Ljava/lang/Object;
+METHOD|bsh.BSHClassDeclaration.<init>(I)V
+METHOD|bsh.BSHClassDeclaration.eval(Lbsh/CallStack;Lbsh/Interpreter;)Ljava/lang/Object;
+METHOD|bsh.BSHClassDeclaration.toString()Ljava/lang/String;
+METHOD|bsh.BSHEnhancedForStatement.<init>(I)V
+METHOD|bsh.BSHEnhancedForStatement.eval(Lbsh/CallStack;Lbsh/Interpreter;)Ljava/lang/Object;
+METHOD|bsh.BSHForStatement.<init>(I)V
+METHOD|bsh.BSHForStatement.eval(Lbsh/CallStack;Lbsh/Interpreter;)Ljava/lang/Object;
+METHOD|bsh.BSHFormalComment.<init>(I)V
+METHOD|bsh.BSHFormalParameter.<init>(I)V
+METHOD|bsh.BSHFormalParameter.getTypeDescriptor(Lbsh/CallStack;Lbsh/Interpreter;Ljava/lang/String;)Ljava/lang/String;
+METHOD|bsh.BSHFormalParameter.eval(Lbsh/CallStack;Lbsh/Interpreter;)Ljava/lang/Object;
+METHOD|bsh.BSHFormalParameter.<clinit>()V
+METHOD|bsh.BSHFormalParameters.<init>(I)V
+METHOD|bsh.BSHFormalParameters.insureParsed()V
+METHOD|bsh.BSHFormalParameters.getParamNames()[Ljava/lang/String;
+METHOD|bsh.BSHFormalParameters.getTypeDescriptors(Lbsh/CallStack;Lbsh/Interpreter;Ljava/lang/String;)[Ljava/lang/String;
+METHOD|bsh.BSHFormalParameters.eval(Lbsh/CallStack;Lbsh/Interpreter;)Ljava/lang/Object;
+METHOD|bsh.BSHIfStatement.<init>(I)V
+METHOD|bsh.BSHIfStatement.eval(Lbsh/CallStack;Lbsh/Interpreter;)Ljava/lang/Object;
+METHOD|bsh.BSHIfStatement.evaluateCondition(Lbsh/SimpleNode;Lbsh/CallStack;Lbsh/Interpreter;)Z
+METHOD|bsh.BSHImportDeclaration.<init>(I)V
+METHOD|bsh.BSHImportDeclaration.eval(Lbsh/CallStack;Lbsh/Interpreter;)Ljava/lang/Object;
+METHOD|bsh.BSHLiteral.<init>(I)V
+METHOD|bsh.BSHLiteral.eval(Lbsh/CallStack;Lbsh/Interpreter;)Ljava/lang/Object;
+METHOD|bsh.BSHLiteral.getEscapeChar(C)C
+METHOD|bsh.BSHLiteral.charSetup(Ljava/lang/String;)V
+METHOD|bsh.BSHLiteral.stringSetup(Ljava/lang/String;)V
+METHOD|bsh.BSHMethodDeclaration.<init>(I)V
+METHOD|bsh.BSHMethodDeclaration.insureNodesParsed()V
+METHOD|bsh.BSHMethodDeclaration.evalReturnType(Lbsh/CallStack;Lbsh/Interpreter;)Ljava/lang/Class;
+METHOD|bsh.BSHMethodDeclaration.getReturnTypeDescriptor(Lbsh/CallStack;Lbsh/Interpreter;Ljava/lang/String;)Ljava/lang/String;
+METHOD|bsh.BSHMethodDeclaration.getReturnTypeNode()Lbsh/BSHReturnType;
+METHOD|bsh.BSHMethodDeclaration.eval(Lbsh/CallStack;Lbsh/Interpreter;)Ljava/lang/Object;
+METHOD|bsh.BSHMethodDeclaration.evalNodes(Lbsh/CallStack;Lbsh/Interpreter;)V
+METHOD|bsh.BSHMethodDeclaration.toString()Ljava/lang/String;
+METHOD|bsh.BSHMethodInvocation.<init>(I)V
+METHOD|bsh.BSHMethodInvocation.getNameNode()Lbsh/BSHAmbiguousName;
+METHOD|bsh.BSHMethodInvocation.getArgsNode()Lbsh/BSHArguments;
+METHOD|bsh.BSHMethodInvocation.eval(Lbsh/CallStack;Lbsh/Interpreter;)Ljava/lang/Object;
+METHOD|bsh.BSHPackageDeclaration.<init>(I)V
+METHOD|bsh.BSHPackageDeclaration.eval(Lbsh/CallStack;Lbsh/Interpreter;)Ljava/lang/Object;
+METHOD|bsh.BSHPrimaryExpression.<init>(I)V
+METHOD|bsh.BSHPrimaryExpression.eval(Lbsh/CallStack;Lbsh/Interpreter;)Ljava/lang/Object;
+METHOD|bsh.BSHPrimaryExpression.toLHS(Lbsh/CallStack;Lbsh/Interpreter;)Lbsh/LHS;
+METHOD|bsh.BSHPrimaryExpression.eval(ZLbsh/CallStack;Lbsh/Interpreter;)Ljava/lang/Object;
+METHOD|bsh.BSHPrimarySuffix.<init>(I)V
+METHOD|bsh.BSHPrimarySuffix.doSuffix(Ljava/lang/Object;ZLbsh/CallStack;Lbsh/Interpreter;)Ljava/lang/Object;
+METHOD|bsh.BSHPrimarySuffix.doName(Ljava/lang/Object;ZLbsh/CallStack;Lbsh/Interpreter;)Ljava/lang/Object;
+METHOD|bsh.BSHPrimarySuffix.getIndexAux(Ljava/lang/Object;Lbsh/CallStack;Lbsh/Interpreter;Lbsh/SimpleNode;)I
+METHOD|bsh.BSHPrimarySuffix.doIndex(Ljava/lang/Object;ZLbsh/CallStack;Lbsh/Interpreter;)Ljava/lang/Object;
+METHOD|bsh.BSHPrimarySuffix.doProperty(ZLjava/lang/Object;Lbsh/CallStack;Lbsh/Interpreter;)Ljava/lang/Object;
+METHOD|bsh.BSHPrimitiveType.<init>(I)V
+METHOD|bsh.BSHPrimitiveType.getType()Ljava/lang/Class;
+METHOD|bsh.BSHReturnStatement.<init>(I)V
+METHOD|bsh.BSHReturnStatement.eval(Lbsh/CallStack;Lbsh/Interpreter;)Ljava/lang/Object;
+METHOD|bsh.BSHReturnType.<init>(I)V
+METHOD|bsh.BSHReturnType.getTypeNode()Lbsh/BSHType;
+METHOD|bsh.BSHReturnType.getTypeDescriptor(Lbsh/CallStack;Lbsh/Interpreter;Ljava/lang/String;)Ljava/lang/String;
+METHOD|bsh.BSHReturnType.evalReturnType(Lbsh/CallStack;Lbsh/Interpreter;)Ljava/lang/Class;
+METHOD|bsh.BSHStatementExpressionList.<init>(I)V
+METHOD|bsh.BSHStatementExpressionList.eval(Lbsh/CallStack;Lbsh/Interpreter;)Ljava/lang/Object;
+METHOD|bsh.BSHSwitchLabel.<init>(I)V
+METHOD|bsh.BSHSwitchLabel.eval(Lbsh/CallStack;Lbsh/Interpreter;)Ljava/lang/Object;
+METHOD|bsh.BSHSwitchStatement.<init>(I)V
+METHOD|bsh.BSHSwitchStatement.eval(Lbsh/CallStack;Lbsh/Interpreter;)Ljava/lang/Object;
+METHOD|bsh.BSHSwitchStatement.primitiveEquals(Ljava/lang/Object;Ljava/lang/Object;Lbsh/CallStack;Lbsh/SimpleNode;)Z
+METHOD|bsh.BSHTernaryExpression.<init>(I)V
+METHOD|bsh.BSHTernaryExpression.eval(Lbsh/CallStack;Lbsh/Interpreter;)Ljava/lang/Object;
+METHOD|bsh.BSHThrowStatement.<init>(I)V
+METHOD|bsh.BSHThrowStatement.eval(Lbsh/CallStack;Lbsh/Interpreter;)Ljava/lang/Object;
+METHOD|bsh.BSHTryStatement.<init>(I)V
+METHOD|bsh.BSHTryStatement.eval(Lbsh/CallStack;Lbsh/Interpreter;)Ljava/lang/Object;
+METHOD|bsh.BSHType.<init>(I)V
+METHOD|bsh.BSHType.addArrayDimension()V
+METHOD|bsh.BSHType.getTypeNode()Lbsh/SimpleNode;
+METHOD|bsh.BSHType.getTypeDescriptor(Lbsh/CallStack;Lbsh/Interpreter;Ljava/lang/String;)Ljava/lang/String;
+METHOD|bsh.BSHType.getType(Lbsh/CallStack;Lbsh/Interpreter;)Ljava/lang/Class;
+METHOD|bsh.BSHType.getBaseType()Ljava/lang/Class;
+METHOD|bsh.BSHType.getArrayDims()I
+METHOD|bsh.BSHType.classLoaderChanged()V
+METHOD|bsh.BSHType.getTypeDescriptor(Ljava/lang/Class;)Ljava/lang/String;
+METHOD|bsh.BSHTypedVariableDeclaration.<init>(I)V
+METHOD|bsh.BSHTypedVariableDeclaration.getTypeNode()Lbsh/BSHType;
+METHOD|bsh.BSHTypedVariableDeclaration.evalType(Lbsh/CallStack;Lbsh/Interpreter;)Ljava/lang/Class;
+METHOD|bsh.BSHTypedVariableDeclaration.getDeclarators()[Lbsh/BSHVariableDeclarator;
+METHOD|bsh.BSHTypedVariableDeclaration.eval(Lbsh/CallStack;Lbsh/Interpreter;)Ljava/lang/Object;
+METHOD|bsh.BSHTypedVariableDeclaration.getTypeDescriptor(Lbsh/CallStack;Lbsh/Interpreter;Ljava/lang/String;)Ljava/lang/String;
+METHOD|bsh.BSHUnaryExpression.<init>(I)V
+METHOD|bsh.BSHUnaryExpression.eval(Lbsh/CallStack;Lbsh/Interpreter;)Ljava/lang/Object;
+METHOD|bsh.BSHUnaryExpression.lhsUnaryOperation(Lbsh/LHS;Z)Ljava/lang/Object;
+METHOD|bsh.BSHUnaryExpression.unaryOperation(Ljava/lang/Object;I)Ljava/lang/Object;
+METHOD|bsh.BSHUnaryExpression.primitiveWrapperUnaryOperation(Ljava/lang/Object;I)Ljava/lang/Object;
+METHOD|bsh.BSHVariableDeclarator.<init>(I)V
+METHOD|bsh.BSHVariableDeclarator.eval(Lbsh/BSHType;Lbsh/CallStack;Lbsh/Interpreter;)Ljava/lang/Object;
+METHOD|bsh.BSHVariableDeclarator.toString()Ljava/lang/String;
+METHOD|bsh.BSHWhileStatement.<init>(I)V
+METHOD|bsh.BSHWhileStatement.eval(Lbsh/CallStack;Lbsh/Interpreter;)Ljava/lang/Object;
+METHOD|bsh.BlockNameSpace.<init>(Lbsh/NameSpace;)V
+METHOD|bsh.BlockNameSpace.setVariable(Ljava/lang/String;Ljava/lang/Object;ZZ)V
+METHOD|bsh.BlockNameSpace.setBlockVariable(Ljava/lang/String;Ljava/lang/Object;)V
+METHOD|bsh.BlockNameSpace.weHaveVar(Ljava/lang/String;)Z
+METHOD|bsh.BlockNameSpace.getNonBlockParent()Lbsh/NameSpace;
+METHOD|bsh.BlockNameSpace.getThis(Lbsh/Interpreter;)Lbsh/This;
+METHOD|bsh.BlockNameSpace.getSuper(Lbsh/Interpreter;)Lbsh/This;
+METHOD|bsh.BlockNameSpace.importClass(Ljava/lang/String;)V
+METHOD|bsh.BlockNameSpace.importPackage(Ljava/lang/String;)V
+METHOD|bsh.BlockNameSpace.setMethod(Ljava/lang/String;Lbsh/BshMethod;)V
+METHOD|bsh.BshClassManager$Listener.classLoaderChanged()V
+METHOD|bsh.BshClassManager$SignatureKey.<init>(Ljava/lang/Class;Ljava/lang/String;[Ljava/lang/Class;)V
+METHOD|bsh.BshClassManager$SignatureKey.hashCode()I
+METHOD|bsh.BshClassManager$SignatureKey.equals(Ljava/lang/Object;)Z
+METHOD|bsh.BshClassManager.<init>()V
+METHOD|bsh.BshClassManager.createClassManager(Lbsh/Interpreter;)Lbsh/BshClassManager;
+METHOD|bsh.BshClassManager.classExists(Ljava/lang/String;)Z
+METHOD|bsh.BshClassManager.classForName(Ljava/lang/String;)Ljava/lang/Class;
+METHOD|bsh.BshClassManager.loadSourceClass(Ljava/lang/String;)Ljava/lang/Class;
+METHOD|bsh.BshClassManager.plainClassForName(Ljava/lang/String;)Ljava/lang/Class;
+METHOD|bsh.BshClassManager.getResource(Ljava/lang/String;)Ljava/net/URL;
+METHOD|bsh.BshClassManager.getResourceAsStream(Ljava/lang/String;)Ljava/io/InputStream;
+METHOD|bsh.BshClassManager.cacheClassInfo(Ljava/lang/String;Ljava/lang/Class;)V
+METHOD|bsh.BshClassManager.cacheResolvedMethod(Ljava/lang/Class;[Ljava/lang/Class;Ljava/lang/reflect/Method;)V
+METHOD|bsh.BshClassManager.getResolvedMethod(Ljava/lang/Class;Ljava/lang/String;[Ljava/lang/Class;Z)Ljava/lang/reflect/Method;
+METHOD|bsh.BshClassManager.clearCaches()V
+METHOD|bsh.BshClassManager.setClassLoader(Ljava/lang/ClassLoader;)V
+METHOD|bsh.BshClassManager.addClassPath(Ljava/net/URL;)V
+METHOD|bsh.BshClassManager.reset()V
+METHOD|bsh.BshClassManager.setClassPath([Ljava/net/URL;)V
+METHOD|bsh.BshClassManager.reloadAllClasses()V
+METHOD|bsh.BshClassManager.reloadClasses([Ljava/lang/String;)V
+METHOD|bsh.BshClassManager.reloadPackage(Ljava/lang/String;)V
+METHOD|bsh.BshClassManager.doSuperImport()V
+METHOD|bsh.BshClassManager.hasSuperImport()Z
+METHOD|bsh.BshClassManager.getClassNameByUnqName(Ljava/lang/String;)Ljava/lang/String;
+METHOD|bsh.BshClassManager.addListener(Lbsh/BshClassManager$Listener;)V
+METHOD|bsh.BshClassManager.removeListener(Lbsh/BshClassManager$Listener;)V
+METHOD|bsh.BshClassManager.dump(Ljava/io/PrintWriter;)V
+METHOD|bsh.BshClassManager.definingClass(Ljava/lang/String;)V
+METHOD|bsh.BshClassManager.isClassBeingDefined(Ljava/lang/String;)Z
+METHOD|bsh.BshClassManager.getClassBeingDefined(Ljava/lang/String;)Ljava/lang/String;
+METHOD|bsh.BshClassManager.doneDefiningClass(Ljava/lang/String;)V
+METHOD|bsh.BshClassManager.defineClass(Ljava/lang/String;[B)Ljava/lang/Class;
+METHOD|bsh.BshClassManager.classLoaderChanged()V
+METHOD|bsh.BshClassManager.noClassDefFound(Ljava/lang/String;Ljava/lang/Error;)Ljava/lang/Error;
+METHOD|bsh.BshClassManager.cmUnavailable()Lbsh/UtilEvalError;
+METHOD|bsh.BshClassManager.class$(Ljava/lang/String;)Ljava/lang/Class;
+METHOD|bsh.BshClassManager.<clinit>()V
+METHOD|bsh.BshIterator.next()Ljava/lang/Object;
+METHOD|bsh.BshIterator.hasNext()Z
+METHOD|bsh.BshMethod.<init>(Lbsh/BSHMethodDeclaration;Lbsh/NameSpace;Lbsh/Modifiers;)V
+METHOD|bsh.BshMethod.<init>(Ljava/lang/String;Ljava/lang/Class;[Ljava/lang/String;[Ljava/lang/Class;Lbsh/BSHBlock;Lbsh/NameSpace;Lbsh/Modifiers;)V
+METHOD|bsh.BshMethod.<init>(Ljava/lang/reflect/Method;Ljava/lang/Object;)V
+METHOD|bsh.BshMethod.getParameterTypes()[Ljava/lang/Class;
+METHOD|bsh.BshMethod.getParameterNames()[Ljava/lang/String;
+METHOD|bsh.BshMethod.getReturnType()Ljava/lang/Class;
+METHOD|bsh.BshMethod.getModifiers()Lbsh/Modifiers;
+METHOD|bsh.BshMethod.getName()Ljava/lang/String;
+METHOD|bsh.BshMethod.invoke([Ljava/lang/Object;Lbsh/Interpreter;)Ljava/lang/Object;
+METHOD|bsh.BshMethod.invoke([Ljava/lang/Object;Lbsh/Interpreter;Lbsh/CallStack;Lbsh/SimpleNode;)Ljava/lang/Object;
+METHOD|bsh.BshMethod.invoke([Ljava/lang/Object;Lbsh/Interpreter;Lbsh/CallStack;Lbsh/SimpleNode;Z)Ljava/lang/Object;
+METHOD|bsh.BshMethod.invokeImpl([Ljava/lang/Object;Lbsh/Interpreter;Lbsh/CallStack;Lbsh/SimpleNode;Z)Ljava/lang/Object;
+METHOD|bsh.BshMethod.hasModifier(Ljava/lang/String;)Z
+METHOD|bsh.BshMethod.toString()Ljava/lang/String;
+METHOD|bsh.CallStack.<init>()V
+METHOD|bsh.CallStack.<init>(Lbsh/NameSpace;)V
+METHOD|bsh.CallStack.clear()V
+METHOD|bsh.CallStack.push(Lbsh/NameSpace;)V
+METHOD|bsh.CallStack.top()Lbsh/NameSpace;
+METHOD|bsh.CallStack.get(I)Lbsh/NameSpace;
+METHOD|bsh.CallStack.set(ILbsh/NameSpace;)V
+METHOD|bsh.CallStack.pop()Lbsh/NameSpace;
+METHOD|bsh.CallStack.swap(Lbsh/NameSpace;)Lbsh/NameSpace;
+METHOD|bsh.CallStack.depth()I
+METHOD|bsh.CallStack.toArray()[Lbsh/NameSpace;
+METHOD|bsh.CallStack.toString()Ljava/lang/String;
+METHOD|bsh.CallStack.copy()Lbsh/CallStack;
+METHOD|bsh.Capabilities$Unavailable.<init>(Ljava/lang/String;)V
+METHOD|bsh.Capabilities.<init>()V
+METHOD|bsh.Capabilities.haveSwing()Z
+METHOD|bsh.Capabilities.canGenerateInterfaces()Z
+METHOD|bsh.Capabilities.haveAccessibility()Z
+METHOD|bsh.Capabilities.setAccessibility(Z)V
+METHOD|bsh.Capabilities.classExists(Ljava/lang/String;)Z
+METHOD|bsh.Capabilities.class$(Ljava/lang/String;)Ljava/lang/Class;
+METHOD|bsh.Capabilities.<clinit>()V
+METHOD|bsh.ClassGenerator.<init>()V
+METHOD|bsh.ClassGenerator.getClassGenerator()Lbsh/ClassGenerator;
+METHOD|bsh.ClassGenerator.generateClass(Ljava/lang/String;Lbsh/Modifiers;[Ljava/lang/Class;Ljava/lang/Class;Lbsh/BSHBlock;ZLbsh/CallStack;Lbsh/Interpreter;)Ljava/lang/Class;
+METHOD|bsh.ClassGenerator.invokeSuperclassMethod(Lbsh/BshClassManager;Ljava/lang/Object;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/Object;
+METHOD|bsh.ClassGenerator.setInstanceNameSpaceParent(Ljava/lang/Object;Ljava/lang/String;Lbsh/NameSpace;)V
+METHOD|bsh.ClassGeneratorImpl$ClassNodeFilter.<init>(I)V
+METHOD|bsh.ClassGeneratorImpl$ClassNodeFilter.isVisible(Lbsh/SimpleNode;)Z
+METHOD|bsh.ClassGeneratorImpl$ClassNodeFilter.isStatic(Lbsh/SimpleNode;)Z
+METHOD|bsh.ClassGeneratorImpl$ClassNodeFilter.<clinit>()V
+METHOD|bsh.ClassGeneratorImpl.<init>()V
+METHOD|bsh.ClassGeneratorImpl.generateClass(Ljava/lang/String;Lbsh/Modifiers;[Ljava/lang/Class;Ljava/lang/Class;Lbsh/BSHBlock;ZLbsh/CallStack;Lbsh/Interpreter;)Ljava/lang/Class;
+METHOD|bsh.ClassGeneratorImpl.invokeSuperclassMethod(Lbsh/BshClassManager;Ljava/lang/Object;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/Object;
+METHOD|bsh.ClassGeneratorImpl.setInstanceNameSpaceParent(Ljava/lang/Object;Ljava/lang/String;Lbsh/NameSpace;)V
+METHOD|bsh.ClassGeneratorImpl.generateClassImpl(Ljava/lang/String;Lbsh/Modifiers;[Ljava/lang/Class;Ljava/lang/Class;Lbsh/BSHBlock;ZLbsh/CallStack;Lbsh/Interpreter;)Ljava/lang/Class;
+METHOD|bsh.ClassGeneratorImpl.getDeclaredVariables(Lbsh/BSHBlock;Lbsh/CallStack;Lbsh/Interpreter;Ljava/lang/String;)[Lbsh/Variable;
+METHOD|bsh.ClassGeneratorImpl.getDeclaredMethods(Lbsh/BSHBlock;Lbsh/CallStack;Lbsh/Interpreter;Ljava/lang/String;)[Lbsh/DelayedEvalBshMethod;
+METHOD|bsh.ClassGeneratorImpl.invokeSuperclassMethodImpl(Lbsh/BshClassManager;Ljava/lang/Object;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/Object;
+METHOD|bsh.ClassGeneratorUtil$ConstructorArgs.<init>()V
+METHOD|bsh.ClassGeneratorUtil$ConstructorArgs.<init>(I[Ljava/lang/Object;)V
+METHOD|bsh.ClassGeneratorUtil$ConstructorArgs.next()Ljava/lang/Object;
+METHOD|bsh.ClassGeneratorUtil$ConstructorArgs.getBoolean()Z
+METHOD|bsh.ClassGeneratorUtil$ConstructorArgs.getByte()B
+METHOD|bsh.ClassGeneratorUtil$ConstructorArgs.getChar()C
+METHOD|bsh.ClassGeneratorUtil$ConstructorArgs.getShort()S
+METHOD|bsh.ClassGeneratorUtil$ConstructorArgs.getInt()I
+METHOD|bsh.ClassGeneratorUtil$ConstructorArgs.getLong()J
+METHOD|bsh.ClassGeneratorUtil$ConstructorArgs.getDouble()D
+METHOD|bsh.ClassGeneratorUtil$ConstructorArgs.getFloat()F
+METHOD|bsh.ClassGeneratorUtil$ConstructorArgs.getObject()Ljava/lang/Object;
+METHOD|bsh.ClassGeneratorUtil$ConstructorArgs.<clinit>()V
+METHOD|bsh.ClassGeneratorUtil.<init>(Lbsh/Modifiers;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Class;[Ljava/lang/Class;[Lbsh/Variable;[Lbsh/DelayedEvalBshMethod;Lbsh/NameSpace;Z)V
+METHOD|bsh.ClassGeneratorUtil.generateClass()[B
+METHOD|bsh.ClassGeneratorUtil.getASMModifiers(Lbsh/Modifiers;)I
+METHOD|bsh.ClassGeneratorUtil.generateField(Ljava/lang/String;Ljava/lang/String;ILbsh/org/objectweb/asm/ClassWriter;)V
+METHOD|bsh.ClassGeneratorUtil.generateMethod(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;ILbsh/org/objectweb/asm/ClassWriter;)V
+METHOD|bsh.ClassGeneratorUtil.generateConstructor(I[Ljava/lang/String;ILbsh/org/objectweb/asm/ClassWriter;)V
+METHOD|bsh.ClassGeneratorUtil.generateConstructorSwitch(IIILbsh/org/objectweb/asm/CodeVisitor;)V
+METHOD|bsh.ClassGeneratorUtil.doSwitchBranch(ILjava/lang/String;[Ljava/lang/String;Lbsh/org/objectweb/asm/Label;[Lbsh/org/objectweb/asm/Label;ILbsh/org/objectweb/asm/CodeVisitor;)V
+METHOD|bsh.ClassGeneratorUtil.getMethodDescriptor(Ljava/lang/String;[Ljava/lang/String;)Ljava/lang/String;
+METHOD|bsh.ClassGeneratorUtil.generateSuperDelegateMethod(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;ILbsh/org/objectweb/asm/ClassWriter;)V
+METHOD|bsh.ClassGeneratorUtil.classContainsMethod(Ljava/lang/Class;Ljava/lang/String;[Ljava/lang/String;)Z
+METHOD|bsh.ClassGeneratorUtil.generatePlainReturnCode(Ljava/lang/String;Lbsh/org/objectweb/asm/CodeVisitor;)V
+METHOD|bsh.ClassGeneratorUtil.generateParameterReifierCode([Ljava/lang/String;ZLbsh/org/objectweb/asm/CodeVisitor;)V
+METHOD|bsh.ClassGeneratorUtil.generateReturnCode(Ljava/lang/String;Lbsh/org/objectweb/asm/CodeVisitor;)V
+METHOD|bsh.ClassGeneratorUtil.getConstructorArgs(Ljava/lang/String;Lbsh/This;[Ljava/lang/Object;I)Lbsh/ClassGeneratorUtil$ConstructorArgs;
+METHOD|bsh.ClassGeneratorUtil.initInstance(Ljava/lang/Object;Ljava/lang/String;[Ljava/lang/Object;)V
+METHOD|bsh.ClassGeneratorUtil.getClassStaticThis(Ljava/lang/Class;Ljava/lang/String;)Lbsh/This;
+METHOD|bsh.ClassGeneratorUtil.getClassInstanceThis(Ljava/lang/Object;Ljava/lang/String;)Lbsh/This;
+METHOD|bsh.ClassGeneratorUtil.isPrimitive(Ljava/lang/String;)Z
+METHOD|bsh.ClassGeneratorUtil.getTypeDescriptors([Ljava/lang/Class;)[Ljava/lang/String;
+METHOD|bsh.ClassGeneratorUtil.descriptorToClassName(Ljava/lang/String;)Ljava/lang/String;
+METHOD|bsh.ClassGeneratorUtil.getBaseName(Ljava/lang/String;)Ljava/lang/String;
+METHOD|bsh.ClassGeneratorUtil.class$(Ljava/lang/String;)Ljava/lang/Class;
+METHOD|bsh.ClassIdentifier.<init>(Ljava/lang/Class;)V
+METHOD|bsh.ClassIdentifier.getTargetClass()Ljava/lang/Class;
+METHOD|bsh.ClassIdentifier.toString()Ljava/lang/String;
+METHOD|bsh.ClassPathException.<init>(Ljava/lang/String;)V
+METHOD|bsh.CollectionManager$1.<init>(Lbsh/CollectionManager$BasicBshIterator;Ljava/lang/Object;)V
+METHOD|bsh.CollectionManager$1.nextElement()Ljava/lang/Object;
+METHOD|bsh.CollectionManager$1.hasMoreElements()Z
+METHOD|bsh.CollectionManager$BasicBshIterator.<init>(Ljava/lang/Object;)V
+METHOD|bsh.CollectionManager$BasicBshIterator.createEnumeration(Ljava/lang/Object;)Ljava/util/Enumeration;
+METHOD|bsh.CollectionManager$BasicBshIterator.next()Ljava/lang/Object;
+METHOD|bsh.CollectionManager$BasicBshIterator.hasNext()Z
+METHOD|bsh.CollectionManager.<init>()V
+METHOD|bsh.CollectionManager.getCollectionManager()Lbsh/CollectionManager;
+METHOD|bsh.CollectionManager.isBshIterable(Ljava/lang/Object;)Z
+METHOD|bsh.CollectionManager.getBshIterator(Ljava/lang/Object;)Lbsh/BshIterator;
+METHOD|bsh.CollectionManager.isMap(Ljava/lang/Object;)Z
+METHOD|bsh.CollectionManager.getFromMap(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+METHOD|bsh.CollectionManager.putInMap(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+METHOD|bsh.CommandLineReader.<init>(Ljava/io/Reader;)V
+METHOD|bsh.CommandLineReader.read()I
+METHOD|bsh.CommandLineReader.read([CII)I
+METHOD|bsh.CommandLineReader.main([Ljava/lang/String;)V
+METHOD|bsh.Console.<init>()V
+METHOD|bsh.Console.main([Ljava/lang/String;)V
+METHOD|bsh.ConsoleInterface.getIn()Ljava/io/Reader;
+METHOD|bsh.ConsoleInterface.getOut()Ljava/io/PrintStream;
+METHOD|bsh.ConsoleInterface.getErr()Ljava/io/PrintStream;
+METHOD|bsh.ConsoleInterface.println(Ljava/lang/Object;)V
+METHOD|bsh.ConsoleInterface.print(Ljava/lang/Object;)V
+METHOD|bsh.ConsoleInterface.error(Ljava/lang/Object;)V
+METHOD|bsh.DelayedEvalBshMethod.<init>(Ljava/lang/String;Ljava/lang/String;Lbsh/BSHReturnType;[Ljava/lang/String;[Ljava/lang/String;Lbsh/BSHFormalParameters;Lbsh/BSHBlock;Lbsh/NameSpace;Lbsh/Modifiers;Lbsh/CallStack;Lbsh/Interpreter;)V
+METHOD|bsh.DelayedEvalBshMethod.getReturnTypeDescriptor()Ljava/lang/String;
+METHOD|bsh.DelayedEvalBshMethod.getReturnType()Ljava/lang/Class;
+METHOD|bsh.DelayedEvalBshMethod.getParamTypeDescriptors()[Ljava/lang/String;
+METHOD|bsh.DelayedEvalBshMethod.getParameterTypes()[Ljava/lang/Class;
+METHOD|bsh.EvalError.<init>(Ljava/lang/String;Lbsh/SimpleNode;Lbsh/CallStack;)V
+METHOD|bsh.EvalError.toString()Ljava/lang/String;
+METHOD|bsh.EvalError.reThrow(Ljava/lang/String;)V
+METHOD|bsh.EvalError.getNode()Lbsh/SimpleNode;
+METHOD|bsh.EvalError.setNode(Lbsh/SimpleNode;)V
+METHOD|bsh.EvalError.getErrorText()Ljava/lang/String;
+METHOD|bsh.EvalError.getErrorLineNumber()I
+METHOD|bsh.EvalError.getErrorSourceFile()Ljava/lang/String;
+METHOD|bsh.EvalError.getScriptStackTrace()Ljava/lang/String;
+METHOD|bsh.EvalError.getMessage()Ljava/lang/String;
+METHOD|bsh.EvalError.setMessage(Ljava/lang/String;)V
+METHOD|bsh.EvalError.prependMessage(Ljava/lang/String;)V
+METHOD|bsh.ExternalNameSpace.<init>()V
+METHOD|bsh.ExternalNameSpace.<init>(Lbsh/NameSpace;Ljava/lang/String;Ljava/util/Map;)V
+METHOD|bsh.ExternalNameSpace.getMap()Ljava/util/Map;
+METHOD|bsh.ExternalNameSpace.setMap(Ljava/util/Map;)V
+METHOD|bsh.ExternalNameSpace.setVariable(Ljava/lang/String;Ljava/lang/Object;ZZ)V
+METHOD|bsh.ExternalNameSpace.unsetVariable(Ljava/lang/String;)V
+METHOD|bsh.ExternalNameSpace.getVariableNames()[Ljava/lang/String;
+METHOD|bsh.ExternalNameSpace.getVariableImpl(Ljava/lang/String;Z)Lbsh/Variable;
+METHOD|bsh.ExternalNameSpace.getDeclaredVariables()[Lbsh/Variable;
+METHOD|bsh.ExternalNameSpace.setTypedVariable(Ljava/lang/String;Ljava/lang/Class;Ljava/lang/Object;Lbsh/Modifiers;)V
+METHOD|bsh.ExternalNameSpace.setMethod(Ljava/lang/String;Lbsh/BshMethod;)V
+METHOD|bsh.ExternalNameSpace.getMethod(Ljava/lang/String;[Ljava/lang/Class;Z)Lbsh/BshMethod;
+METHOD|bsh.ExternalNameSpace.getAllNamesAux(Ljava/util/Vector;)V
+METHOD|bsh.ExternalNameSpace.clear()V
+METHOD|bsh.ExternalNameSpace.putExternalMap(Ljava/lang/String;Ljava/lang/Object;)V
+METHOD|bsh.Interpreter$1.<init>(Ljava/io/InputStream;)V
+METHOD|bsh.Interpreter$1.available()I
+METHOD|bsh.Interpreter.<init>(Ljava/io/Reader;Ljava/io/PrintStream;Ljava/io/PrintStream;ZLbsh/NameSpace;Lbsh/Interpreter;Ljava/lang/String;)V
+METHOD|bsh.Interpreter.<init>(Ljava/io/Reader;Ljava/io/PrintStream;Ljava/io/PrintStream;ZLbsh/NameSpace;)V
+METHOD|bsh.Interpreter.<init>(Ljava/io/Reader;Ljava/io/PrintStream;Ljava/io/PrintStream;Z)V
+METHOD|bsh.Interpreter.<init>(Lbsh/ConsoleInterface;Lbsh/NameSpace;)V
+METHOD|bsh.Interpreter.<init>(Lbsh/ConsoleInterface;)V
+METHOD|bsh.Interpreter.<init>()V
+METHOD|bsh.Interpreter.setConsole(Lbsh/ConsoleInterface;)V
+METHOD|bsh.Interpreter.initRootSystemObject()V
+METHOD|bsh.Interpreter.setNameSpace(Lbsh/NameSpace;)V
+METHOD|bsh.Interpreter.getNameSpace()Lbsh/NameSpace;
+METHOD|bsh.Interpreter.main([Ljava/lang/String;)V
+METHOD|bsh.Interpreter.invokeMain(Ljava/lang/Class;[Ljava/lang/String;)V
+METHOD|bsh.Interpreter.run()V
+METHOD|bsh.Interpreter.source(Ljava/lang/String;Lbsh/NameSpace;)Ljava/lang/Object;
+METHOD|bsh.Interpreter.source(Ljava/lang/String;)Ljava/lang/Object;
+METHOD|bsh.Interpreter.eval(Ljava/io/Reader;Lbsh/NameSpace;Ljava/lang/String;)Ljava/lang/Object;
+METHOD|bsh.Interpreter.eval(Ljava/io/Reader;)Ljava/lang/Object;
+METHOD|bsh.Interpreter.eval(Ljava/lang/String;)Ljava/lang/Object;
+METHOD|bsh.Interpreter.eval(Ljava/lang/String;Lbsh/NameSpace;)Ljava/lang/Object;
+METHOD|bsh.Interpreter.showEvalString(Ljava/lang/String;)Ljava/lang/String;
+METHOD|bsh.Interpreter.error(Ljava/lang/Object;)V
+METHOD|bsh.Interpreter.getIn()Ljava/io/Reader;
+METHOD|bsh.Interpreter.getOut()Ljava/io/PrintStream;
+METHOD|bsh.Interpreter.getErr()Ljava/io/PrintStream;
+METHOD|bsh.Interpreter.println(Ljava/lang/Object;)V
+METHOD|bsh.Interpreter.print(Ljava/lang/Object;)V
+METHOD|bsh.Interpreter.debug(Ljava/lang/String;)V
+METHOD|bsh.Interpreter.get(Ljava/lang/String;)Ljava/lang/Object;
+METHOD|bsh.Interpreter.getu(Ljava/lang/String;)Ljava/lang/Object;
+METHOD|bsh.Interpreter.set(Ljava/lang/String;Ljava/lang/Object;)V
+METHOD|bsh.Interpreter.setu(Ljava/lang/String;Ljava/lang/Object;)V
+METHOD|bsh.Interpreter.set(Ljava/lang/String;J)V
+METHOD|bsh.Interpreter.set(Ljava/lang/String;I)V
+METHOD|bsh.Interpreter.set(Ljava/lang/String;D)V
+METHOD|bsh.Interpreter.set(Ljava/lang/String;F)V
+METHOD|bsh.Interpreter.set(Ljava/lang/String;Z)V
+METHOD|bsh.Interpreter.unset(Ljava/lang/String;)V
+METHOD|bsh.Interpreter.getInterface(Ljava/lang/Class;)Ljava/lang/Object;
+METHOD|bsh.Interpreter.get_jjtree()Lbsh/JJTParserState;
+METHOD|bsh.Interpreter.get_jj_input_stream()Lbsh/JavaCharStream;
+METHOD|bsh.Interpreter.Line()Z
+METHOD|bsh.Interpreter.loadRCFiles()V
+METHOD|bsh.Interpreter.pathToFile(Ljava/lang/String;)Ljava/io/File;
+METHOD|bsh.Interpreter.redirectOutputToFile(Ljava/lang/String;)V
+METHOD|bsh.Interpreter.setClassLoader(Ljava/lang/ClassLoader;)V
+METHOD|bsh.Interpreter.getClassManager()Lbsh/BshClassManager;
+METHOD|bsh.Interpreter.setStrictJava(Z)V
+METHOD|bsh.Interpreter.getStrictJava()Z
+METHOD|bsh.Interpreter.staticInit()V
+METHOD|bsh.Interpreter.getSourceFileInfo()Ljava/lang/String;
+METHOD|bsh.Interpreter.getParent()Lbsh/Interpreter;
+METHOD|bsh.Interpreter.setOut(Ljava/io/PrintStream;)V
+METHOD|bsh.Interpreter.setErr(Ljava/io/PrintStream;)V
+METHOD|bsh.Interpreter.readObject(Ljava/io/ObjectInputStream;)V
+METHOD|bsh.Interpreter.getBshPrompt()Ljava/lang/String;
+METHOD|bsh.Interpreter.setExitOnEOF(Z)V
+METHOD|bsh.Interpreter.setShowResults(Z)V
+METHOD|bsh.Interpreter.getShowResults()Z
+METHOD|bsh.Interpreter.class$(Ljava/lang/String;)Ljava/lang/Class;
+METHOD|bsh.Interpreter.<clinit>()V
+METHOD|bsh.InterpreterError.<init>(Ljava/lang/String;)V
+METHOD|bsh.JJTParserState.<init>()V
+METHOD|bsh.JJTParserState.nodeCreated()Z
+METHOD|bsh.JJTParserState.reset()V
+METHOD|bsh.JJTParserState.rootNode()Lbsh/Node;
+METHOD|bsh.JJTParserState.pushNode(Lbsh/Node;)V
+METHOD|bsh.JJTParserState.popNode()Lbsh/Node;
+METHOD|bsh.JJTParserState.peekNode()Lbsh/Node;
+METHOD|bsh.JJTParserState.nodeArity()I
+METHOD|bsh.JJTParserState.clearNodeScope(Lbsh/Node;)V
+METHOD|bsh.JJTParserState.openNodeScope(Lbsh/Node;)V
+METHOD|bsh.JJTParserState.closeNodeScope(Lbsh/Node;I)V
+METHOD|bsh.JJTParserState.closeNodeScope(Lbsh/Node;Z)V
+METHOD|bsh.JavaCharStream.hexval(C)I
+METHOD|bsh.JavaCharStream.ExpandBuff(Z)V
+METHOD|bsh.JavaCharStream.FillBuff()V
+METHOD|bsh.JavaCharStream.ReadByte()C
+METHOD|bsh.JavaCharStream.BeginToken()C
+METHOD|bsh.JavaCharStream.AdjustBuffSize()V
+METHOD|bsh.JavaCharStream.UpdateLineColumn(C)V
+METHOD|bsh.JavaCharStream.readChar()C
+METHOD|bsh.JavaCharStream.getColumn()I
+METHOD|bsh.JavaCharStream.getLine()I
+METHOD|bsh.JavaCharStream.getEndColumn()I
+METHOD|bsh.JavaCharStream.getEndLine()I
+METHOD|bsh.JavaCharStream.getBeginColumn()I
+METHOD|bsh.JavaCharStream.getBeginLine()I
+METHOD|bsh.JavaCharStream.backup(I)V
+METHOD|bsh.JavaCharStream.<init>(Ljava/io/Reader;III)V
+METHOD|bsh.JavaCharStream.<init>(Ljava/io/Reader;II)V
+METHOD|bsh.JavaCharStream.<init>(Ljava/io/Reader;)V
+METHOD|bsh.JavaCharStream.ReInit(Ljava/io/Reader;III)V
+METHOD|bsh.JavaCharStream.ReInit(Ljava/io/Reader;II)V
+METHOD|bsh.JavaCharStream.ReInit(Ljava/io/Reader;)V
+METHOD|bsh.JavaCharStream.<init>(Ljava/io/InputStream;III)V
+METHOD|bsh.JavaCharStream.<init>(Ljava/io/InputStream;II)V
+METHOD|bsh.JavaCharStream.<init>(Ljava/io/InputStream;)V
+METHOD|bsh.JavaCharStream.ReInit(Ljava/io/InputStream;III)V
+METHOD|bsh.JavaCharStream.ReInit(Ljava/io/InputStream;II)V
+METHOD|bsh.JavaCharStream.ReInit(Ljava/io/InputStream;)V
+METHOD|bsh.JavaCharStream.GetImage()Ljava/lang/String;
+METHOD|bsh.JavaCharStream.GetSuffix(I)[C
+METHOD|bsh.JavaCharStream.Done()V
+METHOD|bsh.JavaCharStream.adjustBeginLineColumn(II)V
+METHOD|bsh.LHS.<init>(Lbsh/NameSpace;Ljava/lang/String;)V
+METHOD|bsh.LHS.<init>(Lbsh/NameSpace;Ljava/lang/String;Z)V
+METHOD|bsh.LHS.<init>(Ljava/lang/reflect/Field;)V
+METHOD|bsh.LHS.<init>(Ljava/lang/Object;Ljava/lang/reflect/Field;)V
+METHOD|bsh.LHS.<init>(Ljava/lang/Object;Ljava/lang/String;)V
+METHOD|bsh.LHS.<init>(Ljava/lang/Object;I)V
+METHOD|bsh.LHS.getValue()Ljava/lang/Object;
+METHOD|bsh.LHS.assign(Ljava/lang/Object;Z)Ljava/lang/Object;
+METHOD|bsh.LHS.toString()Ljava/lang/String;
+METHOD|bsh.Modifiers.<init>()V
+METHOD|bsh.Modifiers.addModifier(ILjava/lang/String;)V
+METHOD|bsh.Modifiers.hasModifier(Ljava/lang/String;)Z
+METHOD|bsh.Modifiers.validateForMethod()V
+METHOD|bsh.Modifiers.validateForField()V
+METHOD|bsh.Modifiers.validateForClass()V
+METHOD|bsh.Modifiers.insureNo(Ljava/lang/String;Ljava/lang/String;)V
+METHOD|bsh.Modifiers.toString()Ljava/lang/String;
+METHOD|bsh.Name.reset()V
+METHOD|bsh.Name.<init>(Lbsh/NameSpace;Ljava/lang/String;)V
+METHOD|bsh.Name.toObject(Lbsh/CallStack;Lbsh/Interpreter;)Ljava/lang/Object;
+METHOD|bsh.Name.toObject(Lbsh/CallStack;Lbsh/Interpreter;Z)Ljava/lang/Object;
+METHOD|bsh.Name.completeRound(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/Object;
+METHOD|bsh.Name.consumeNextObjectField(Lbsh/CallStack;Lbsh/Interpreter;ZZ)Ljava/lang/Object;
+METHOD|bsh.Name.resolveThisFieldReference(Lbsh/CallStack;Lbsh/NameSpace;Lbsh/Interpreter;Ljava/lang/String;Z)Ljava/lang/Object;
+METHOD|bsh.Name.getClassNameSpace(Lbsh/NameSpace;)Lbsh/NameSpace;
+METHOD|bsh.Name.toClass()Ljava/lang/Class;
+METHOD|bsh.Name.toLHS(Lbsh/CallStack;Lbsh/Interpreter;)Lbsh/LHS;
+METHOD|bsh.Name.invokeMethod(Lbsh/Interpreter;[Ljava/lang/Object;Lbsh/CallStack;Lbsh/SimpleNode;)Ljava/lang/Object;
+METHOD|bsh.Name.invokeLocalMethod(Lbsh/Interpreter;[Ljava/lang/Object;Lbsh/CallStack;Lbsh/SimpleNode;)Ljava/lang/Object;
+METHOD|bsh.Name.isCompound(Ljava/lang/String;)Z
+METHOD|bsh.Name.countParts(Ljava/lang/String;)I
+METHOD|bsh.Name.prefix(Ljava/lang/String;)Ljava/lang/String;
+METHOD|bsh.Name.prefix(Ljava/lang/String;I)Ljava/lang/String;
+METHOD|bsh.Name.suffix(Ljava/lang/String;)Ljava/lang/String;
+METHOD|bsh.Name.suffix(Ljava/lang/String;I)Ljava/lang/String;
+METHOD|bsh.Name.toString()Ljava/lang/String;
+METHOD|bsh.Name.<clinit>()V
+METHOD|bsh.NameSource$Listener.nameSourceChanged(Lbsh/NameSource;)V
+METHOD|bsh.NameSource.getAllNames()[Ljava/lang/String;
+METHOD|bsh.NameSource.addNameSourceListener(Lbsh/NameSource$Listener;)V
+METHOD|bsh.NameSpace.setClassStatic(Ljava/lang/Class;)V
+METHOD|bsh.NameSpace.setClassInstance(Ljava/lang/Object;)V
+METHOD|bsh.NameSpace.getClassInstance()Ljava/lang/Object;
+METHOD|bsh.NameSpace.<init>(Lbsh/NameSpace;Ljava/lang/String;)V
+METHOD|bsh.NameSpace.<init>(Lbsh/BshClassManager;Ljava/lang/String;)V
+METHOD|bsh.NameSpace.<init>(Lbsh/NameSpace;Lbsh/BshClassManager;Ljava/lang/String;)V
+METHOD|bsh.NameSpace.setName(Ljava/lang/String;)V
+METHOD|bsh.NameSpace.getName()Ljava/lang/String;
+METHOD|bsh.NameSpace.setNode(Lbsh/SimpleNode;)V
+METHOD|bsh.NameSpace.getNode()Lbsh/SimpleNode;
+METHOD|bsh.NameSpace.get(Ljava/lang/String;Lbsh/Interpreter;)Ljava/lang/Object;
+METHOD|bsh.NameSpace.setVariable(Ljava/lang/String;Ljava/lang/Object;Z)V
+METHOD|bsh.NameSpace.setLocalVariable(Ljava/lang/String;Ljava/lang/Object;Z)V
+METHOD|bsh.NameSpace.setVariable(Ljava/lang/String;Ljava/lang/Object;ZZ)V
+METHOD|bsh.NameSpace.unsetVariable(Ljava/lang/String;)V
+METHOD|bsh.NameSpace.getVariableNames()[Ljava/lang/String;
+METHOD|bsh.NameSpace.getMethodNames()[Ljava/lang/String;
+METHOD|bsh.NameSpace.getMethods()[Lbsh/BshMethod;
+METHOD|bsh.NameSpace.enumerationToStringArray(Ljava/util/Enumeration;)[Ljava/lang/String;
+METHOD|bsh.NameSpace.flattenMethodCollection(Ljava/util/Enumeration;)[Lbsh/BshMethod;
+METHOD|bsh.NameSpace.getParent()Lbsh/NameSpace;
+METHOD|bsh.NameSpace.getSuper(Lbsh/Interpreter;)Lbsh/This;
+METHOD|bsh.NameSpace.getGlobal(Lbsh/Interpreter;)Lbsh/This;
+METHOD|bsh.NameSpace.getThis(Lbsh/Interpreter;)Lbsh/This;
+METHOD|bsh.NameSpace.getClassManager()Lbsh/BshClassManager;
+METHOD|bsh.NameSpace.setClassManager(Lbsh/BshClassManager;)V
+METHOD|bsh.NameSpace.prune()V
+METHOD|bsh.NameSpace.setParent(Lbsh/NameSpace;)V
+METHOD|bsh.NameSpace.getVariable(Ljava/lang/String;)Ljava/lang/Object;
+METHOD|bsh.NameSpace.getVariable(Ljava/lang/String;Z)Ljava/lang/Object;
+METHOD|bsh.NameSpace.getVariableImpl(Ljava/lang/String;Z)Lbsh/Variable;
+METHOD|bsh.NameSpace.getDeclaredVariables()[Lbsh/Variable;
+METHOD|bsh.NameSpace.unwrapVariable(Lbsh/Variable;)Ljava/lang/Object;
+METHOD|bsh.NameSpace.setTypedVariable(Ljava/lang/String;Ljava/lang/Class;Ljava/lang/Object;Z)V
+METHOD|bsh.NameSpace.setTypedVariable(Ljava/lang/String;Ljava/lang/Class;Ljava/lang/Object;Lbsh/Modifiers;)V
+METHOD|bsh.NameSpace.setMethod(Ljava/lang/String;Lbsh/BshMethod;)V
+METHOD|bsh.NameSpace.getMethod(Ljava/lang/String;[Ljava/lang/Class;)Lbsh/BshMethod;
+METHOD|bsh.NameSpace.getMethod(Ljava/lang/String;[Ljava/lang/Class;Z)Lbsh/BshMethod;
+METHOD|bsh.NameSpace.importClass(Ljava/lang/String;)V
+METHOD|bsh.NameSpace.importPackage(Ljava/lang/String;)V
+METHOD|bsh.NameSpace.importCommands(Ljava/lang/String;)V
+METHOD|bsh.NameSpace.getCommand(Ljava/lang/String;[Ljava/lang/Class;Lbsh/Interpreter;)Ljava/lang/Object;
+METHOD|bsh.NameSpace.getImportedMethod(Ljava/lang/String;[Ljava/lang/Class;)Lbsh/BshMethod;
+METHOD|bsh.NameSpace.getImportedVar(Ljava/lang/String;)Lbsh/Variable;
+METHOD|bsh.NameSpace.loadScriptedCommand(Ljava/io/InputStream;Ljava/lang/String;[Ljava/lang/Class;Ljava/lang/String;Lbsh/Interpreter;)Lbsh/BshMethod;
+METHOD|bsh.NameSpace.cacheClass(Ljava/lang/String;Ljava/lang/Class;)V
+METHOD|bsh.NameSpace.getClass(Ljava/lang/String;)Ljava/lang/Class;
+METHOD|bsh.NameSpace.getClassImpl(Ljava/lang/String;)Ljava/lang/Class;
+METHOD|bsh.NameSpace.getImportedClassImpl(Ljava/lang/String;)Ljava/lang/Class;
+METHOD|bsh.NameSpace.classForName(Ljava/lang/String;)Ljava/lang/Class;
+METHOD|bsh.NameSpace.getAllNames()[Ljava/lang/String;
+METHOD|bsh.NameSpace.getAllNamesAux(Ljava/util/Vector;)V
+METHOD|bsh.NameSpace.addNameSourceListener(Lbsh/NameSource$Listener;)V
+METHOD|bsh.NameSpace.doSuperImport()V
+METHOD|bsh.NameSpace.toString()Ljava/lang/String;
+METHOD|bsh.NameSpace.writeObject(Ljava/io/ObjectOutputStream;)V
+METHOD|bsh.NameSpace.invokeMethod(Ljava/lang/String;[Ljava/lang/Object;Lbsh/Interpreter;)Ljava/lang/Object;
+METHOD|bsh.NameSpace.invokeMethod(Ljava/lang/String;[Ljava/lang/Object;Lbsh/Interpreter;Lbsh/CallStack;Lbsh/SimpleNode;)Ljava/lang/Object;
+METHOD|bsh.NameSpace.classLoaderChanged()V
+METHOD|bsh.NameSpace.nameSpaceChanged()V
+METHOD|bsh.NameSpace.loadDefaultImports()V
+METHOD|bsh.NameSpace.getNameResolver(Ljava/lang/String;)Lbsh/Name;
+METHOD|bsh.NameSpace.getInvocationLine()I
+METHOD|bsh.NameSpace.getInvocationText()Ljava/lang/String;
+METHOD|bsh.NameSpace.identifierToClass(Lbsh/ClassIdentifier;)Ljava/lang/Class;
+METHOD|bsh.NameSpace.clear()V
+METHOD|bsh.NameSpace.importObject(Ljava/lang/Object;)V
+METHOD|bsh.NameSpace.importStatic(Ljava/lang/Class;)V
+METHOD|bsh.NameSpace.setPackage(Ljava/lang/String;)V
+METHOD|bsh.NameSpace.getPackage()Ljava/lang/String;
+METHOD|bsh.NameSpace.<clinit>()V
+METHOD|bsh.Node.jjtOpen()V
+METHOD|bsh.Node.jjtClose()V
+METHOD|bsh.Node.jjtSetParent(Lbsh/Node;)V
+METHOD|bsh.Node.jjtGetParent()Lbsh/Node;
+METHOD|bsh.Node.jjtAddChild(Lbsh/Node;I)V
+METHOD|bsh.Node.jjtGetChild(I)Lbsh/Node;
+METHOD|bsh.Node.jjtGetNumChildren()I
+METHOD|bsh.ParseException.setErrorSourceFile(Ljava/lang/String;)V
+METHOD|bsh.ParseException.getErrorSourceFile()Ljava/lang/String;
+METHOD|bsh.ParseException.<init>(Lbsh/Token;[[I[Ljava/lang/String;)V
+METHOD|bsh.ParseException.<init>()V
+METHOD|bsh.ParseException.<init>(Ljava/lang/String;)V
+METHOD|bsh.ParseException.getMessage()Ljava/lang/String;
+METHOD|bsh.ParseException.getMessage(Z)Ljava/lang/String;
+METHOD|bsh.ParseException.add_escapes(Ljava/lang/String;)Ljava/lang/String;
+METHOD|bsh.ParseException.getErrorLineNumber()I
+METHOD|bsh.ParseException.getErrorText()Ljava/lang/String;
+METHOD|bsh.ParseException.toString()Ljava/lang/String;
+METHOD|bsh.Parser$LookaheadSuccess.<init>()V
+METHOD|bsh.Parser$LookaheadSuccess.<init>(Lbsh/Parser$1;)V
+METHOD|bsh.Parser.setRetainComments(Z)V
+METHOD|bsh.Parser.jjtreeOpenNodeScope(Lbsh/Node;)V
+METHOD|bsh.Parser.jjtreeCloseNodeScope(Lbsh/Node;)V
+METHOD|bsh.Parser.reInitInput(Ljava/io/Reader;)V
+METHOD|bsh.Parser.popNode()Lbsh/SimpleNode;
+METHOD|bsh.Parser.reInitTokenInput(Ljava/io/Reader;)V
+METHOD|bsh.Parser.main([Ljava/lang/String;)V
+METHOD|bsh.Parser.isRegularForStatement()Z
+METHOD|bsh.Parser.createParseException(Ljava/lang/String;)Lbsh/ParseException;
+METHOD|bsh.Parser.Line()Z
+METHOD|bsh.Parser.Modifiers(IZ)Lbsh/Modifiers;
+METHOD|bsh.Parser.ClassDeclaration()V
+METHOD|bsh.Parser.MethodDeclaration()V
+METHOD|bsh.Parser.PackageDeclaration()V
+METHOD|bsh.Parser.ImportDeclaration()V
+METHOD|bsh.Parser.VariableDeclarator()V
+METHOD|bsh.Parser.VariableInitializer()V
+METHOD|bsh.Parser.ArrayInitializer()V
+METHOD|bsh.Parser.FormalParameters()V
+METHOD|bsh.Parser.FormalParameter()V
+METHOD|bsh.Parser.Type()V
+METHOD|bsh.Parser.ReturnType()V
+METHOD|bsh.Parser.PrimitiveType()V
+METHOD|bsh.Parser.AmbiguousName()V
+METHOD|bsh.Parser.NameList()I
+METHOD|bsh.Parser.Expression()V
+METHOD|bsh.Parser.Assignment()V
+METHOD|bsh.Parser.AssignmentOperator()I
+METHOD|bsh.Parser.ConditionalExpression()V
+METHOD|bsh.Parser.ConditionalOrExpression()V
+METHOD|bsh.Parser.ConditionalAndExpression()V
+METHOD|bsh.Parser.InclusiveOrExpression()V
+METHOD|bsh.Parser.ExclusiveOrExpression()V
+METHOD|bsh.Parser.AndExpression()V
+METHOD|bsh.Parser.EqualityExpression()V
+METHOD|bsh.Parser.InstanceOfExpression()V
+METHOD|bsh.Parser.RelationalExpression()V
+METHOD|bsh.Parser.ShiftExpression()V
+METHOD|bsh.Parser.AdditiveExpression()V
+METHOD|bsh.Parser.MultiplicativeExpression()V
+METHOD|bsh.Parser.UnaryExpression()V
+METHOD|bsh.Parser.PreIncrementExpression()V
+METHOD|bsh.Parser.PreDecrementExpression()V
+METHOD|bsh.Parser.UnaryExpressionNotPlusMinus()V
+METHOD|bsh.Parser.CastLookahead()V
+METHOD|bsh.Parser.PostfixExpression()V
+METHOD|bsh.Parser.CastExpression()V
+METHOD|bsh.Parser.PrimaryExpression()V
+METHOD|bsh.Parser.MethodInvocation()V
+METHOD|bsh.Parser.PrimaryPrefix()V
+METHOD|bsh.Parser.PrimarySuffix()V
+METHOD|bsh.Parser.Literal()V
+METHOD|bsh.Parser.BooleanLiteral()Z
+METHOD|bsh.Parser.NullLiteral()V
+METHOD|bsh.Parser.VoidLiteral()V
+METHOD|bsh.Parser.Arguments()V
+METHOD|bsh.Parser.ArgumentList()V
+METHOD|bsh.Parser.AllocationExpression()V
+METHOD|bsh.Parser.ArrayDimensions()V
+METHOD|bsh.Parser.Statement()V
+METHOD|bsh.Parser.LabeledStatement()V
+METHOD|bsh.Parser.Block()V
+METHOD|bsh.Parser.BlockStatement()V
+METHOD|bsh.Parser.FormalComment()V
+METHOD|bsh.Parser.EmptyStatement()V
+METHOD|bsh.Parser.StatementExpression()V
+METHOD|bsh.Parser.SwitchStatement()V
+METHOD|bsh.Parser.SwitchLabel()V
+METHOD|bsh.Parser.IfStatement()V
+METHOD|bsh.Parser.WhileStatement()V
+METHOD|bsh.Parser.DoStatement()V
+METHOD|bsh.Parser.ForStatement()V
+METHOD|bsh.Parser.EnhancedForStatement()V
+METHOD|bsh.Parser.ForInit()V
+METHOD|bsh.Parser.TypedVariableDeclaration()V
+METHOD|bsh.Parser.StatementExpressionList()V
+METHOD|bsh.Parser.ForUpdate()V
+METHOD|bsh.Parser.BreakStatement()V
+METHOD|bsh.Parser.ContinueStatement()V
+METHOD|bsh.Parser.ReturnStatement()V
+METHOD|bsh.Parser.SynchronizedStatement()V
+METHOD|bsh.Parser.ThrowStatement()V
+METHOD|bsh.Parser.TryStatement()V
+METHOD|bsh.Parser.jj_2_1(I)Z
+METHOD|bsh.Parser.jj_2_2(I)Z
+METHOD|bsh.Parser.jj_2_3(I)Z
+METHOD|bsh.Parser.jj_2_4(I)Z
+METHOD|bsh.Parser.jj_2_5(I)Z
+METHOD|bsh.Parser.jj_2_6(I)Z
+METHOD|bsh.Parser.jj_2_7(I)Z
+METHOD|bsh.Parser.jj_2_8(I)Z
+METHOD|bsh.Parser.jj_2_9(I)Z
+METHOD|bsh.Parser.jj_2_10(I)Z
+METHOD|bsh.Parser.jj_2_11(I)Z
+METHOD|bsh.Parser.jj_2_12(I)Z
+METHOD|bsh.Parser.jj_2_13(I)Z
+METHOD|bsh.Parser.jj_2_14(I)Z
+METHOD|bsh.Parser.jj_2_15(I)Z
+METHOD|bsh.Parser.jj_2_16(I)Z
+METHOD|bsh.Parser.jj_2_17(I)Z
+METHOD|bsh.Parser.jj_2_18(I)Z
+METHOD|bsh.Parser.jj_2_19(I)Z
+METHOD|bsh.Parser.jj_2_20(I)Z
+METHOD|bsh.Parser.jj_2_21(I)Z
+METHOD|bsh.Parser.jj_2_22(I)Z
+METHOD|bsh.Parser.jj_2_23(I)Z
+METHOD|bsh.Parser.jj_2_24(I)Z
+METHOD|bsh.Parser.jj_2_25(I)Z
+METHOD|bsh.Parser.jj_2_26(I)Z
+METHOD|bsh.Parser.jj_2_27(I)Z
+METHOD|bsh.Parser.jj_2_28(I)Z
+METHOD|bsh.Parser.jj_2_29(I)Z
+METHOD|bsh.Parser.jj_2_30(I)Z
+METHOD|bsh.Parser.jj_2_31(I)Z
+METHOD|bsh.Parser.jj_3R_46()Z
+METHOD|bsh.Parser.jj_3R_28()Z
+METHOD|bsh.Parser.jj_3_23()Z
+METHOD|bsh.Parser.jj_3R_161()Z
+METHOD|bsh.Parser.jj_3R_38()Z
+METHOD|bsh.Parser.jj_3R_158()Z
+METHOD|bsh.Parser.jj_3R_40()Z
+METHOD|bsh.Parser.jj_3R_156()Z
+METHOD|bsh.Parser.jj_3R_165()Z
+METHOD|bsh.Parser.jj_3R_153()Z
+METHOD|bsh.Parser.jj_3R_90()Z
+METHOD|bsh.Parser.jj_3R_89()Z
+METHOD|bsh.Parser.jj_3R_88()Z
+METHOD|bsh.Parser.jj_3R_162()Z
+METHOD|bsh.Parser.jj_3R_87()Z
+METHOD|bsh.Parser.jj_3R_148()Z
+METHOD|bsh.Parser.jj_3R_86()Z
+METHOD|bsh.Parser.jj_3R_85()Z
+METHOD|bsh.Parser.jj_3R_84()Z
+METHOD|bsh.Parser.jj_3R_159()Z
+METHOD|bsh.Parser.jj_3R_83()Z
+METHOD|bsh.Parser.jj_3R_135()Z
+METHOD|bsh.Parser.jj_3R_82()Z
+METHOD|bsh.Parser.jj_3R_81()Z
+METHOD|bsh.Parser.jj_3R_80()Z
+METHOD|bsh.Parser.jj_3R_108()Z
+METHOD|bsh.Parser.jj_3R_79()Z
+METHOD|bsh.Parser.jj_3R_78()Z
+METHOD|bsh.Parser.jj_3_17()Z
+METHOD|bsh.Parser.jj_3R_77()Z
+METHOD|bsh.Parser.jj_3R_45()Z
+METHOD|bsh.Parser.jj_3_22()Z
+METHOD|bsh.Parser.jj_3R_34()Z
+METHOD|bsh.Parser.jj_3R_111()Z
+METHOD|bsh.Parser.jj_3R_160()Z
+METHOD|bsh.Parser.jj_3R_152()Z
+METHOD|bsh.Parser.jj_3R_157()Z
+METHOD|bsh.Parser.jj_3_8()Z
+METHOD|bsh.Parser.jj_3_20()Z
+METHOD|bsh.Parser.jj_3R_151()Z
+METHOD|bsh.Parser.jj_3_19()Z
+METHOD|bsh.Parser.jj_3R_107()Z
+METHOD|bsh.Parser.jj_3_21()Z
+METHOD|bsh.Parser.jj_3R_150()Z
+METHOD|bsh.Parser.jj_3R_71()Z
+METHOD|bsh.Parser.jj_3R_39()Z
+METHOD|bsh.Parser.jj_3R_70()Z
+METHOD|bsh.Parser.jj_3R_145()Z
+METHOD|bsh.Parser.jj_3_18()Z
+METHOD|bsh.Parser.jj_3R_130()Z
+METHOD|bsh.Parser.jj_3R_147()Z
+METHOD|bsh.Parser.jj_3R_76()Z
+METHOD|bsh.Parser.jj_3R_134()Z
+METHOD|bsh.Parser.jj_3R_106()Z
+METHOD|bsh.Parser.jj_3_7()Z
+METHOD|bsh.Parser.jj_3R_69()Z
+METHOD|bsh.Parser.jj_3R_29()Z
+METHOD|bsh.Parser.jj_3R_68()Z
+METHOD|bsh.Parser.jj_3R_67()Z
+METHOD|bsh.Parser.jj_3R_155()Z
+METHOD|bsh.Parser.jj_3R_66()Z
+METHOD|bsh.Parser.jj_3R_65()Z
+METHOD|bsh.Parser.jj_3R_154()Z
+METHOD|bsh.Parser.jj_3R_149()Z
+METHOD|bsh.Parser.jj_3R_64()Z
+METHOD|bsh.Parser.jj_3R_56()Z
+METHOD|bsh.Parser.jj_3R_63()Z
+METHOD|bsh.Parser.jj_3R_62()Z
+METHOD|bsh.Parser.jj_3R_61()Z
+METHOD|bsh.Parser.jj_3R_36()Z
+METHOD|bsh.Parser.jj_3R_144()Z
+METHOD|bsh.Parser.jj_3R_74()Z
+METHOD|bsh.Parser.jj_3R_42()Z
+METHOD|bsh.Parser.jj_3R_73()Z
+METHOD|bsh.Parser.jj_3R_143()Z
+METHOD|bsh.Parser.jj_3_6()Z
+METHOD|bsh.Parser.jj_3R_142()Z
+METHOD|bsh.Parser.jj_3R_55()Z
+METHOD|bsh.Parser.jj_3R_110()Z
+METHOD|bsh.Parser.jj_3R_141()Z
+METHOD|bsh.Parser.jj_3R_32()Z
+METHOD|bsh.Parser.jj_3R_140()Z
+METHOD|bsh.Parser.jj_3R_190()Z
+METHOD|bsh.Parser.jj_3_4()Z
+METHOD|bsh.Parser.jj_3R_189()Z
+METHOD|bsh.Parser.jj_3R_136()Z
+METHOD|bsh.Parser.jj_3_5()Z
+METHOD|bsh.Parser.jj_3R_75()Z
+METHOD|bsh.Parser.jj_3R_109()Z
+METHOD|bsh.Parser.jj_3R_124()Z
+METHOD|bsh.Parser.jj_3R_43()Z
+METHOD|bsh.Parser.jj_3R_163()Z
+METHOD|bsh.Parser.jj_3R_139()Z
+METHOD|bsh.Parser.jj_3R_97()Z
+METHOD|bsh.Parser.jj_3R_30()Z
+METHOD|bsh.Parser.jj_3R_123()Z
+METHOD|bsh.Parser.jj_3R_180()Z
+METHOD|bsh.Parser.jj_3R_54()Z
+METHOD|bsh.Parser.jj_3R_188()Z
+METHOD|bsh.Parser.jj_3R_53()Z
+METHOD|bsh.Parser.jj_3R_31()Z
+METHOD|bsh.Parser.jj_3R_122()Z
+METHOD|bsh.Parser.jj_3R_177()Z
+METHOD|bsh.Parser.jj_3R_210()Z
+METHOD|bsh.Parser.jj_3R_121()Z
+METHOD|bsh.Parser.jj_3R_129()Z
+METHOD|bsh.Parser.jj_3R_138()Z
+METHOD|bsh.Parser.jj_3R_146()Z
+METHOD|bsh.Parser.jj_3R_176()Z
+METHOD|bsh.Parser.jj_3R_105()Z
+METHOD|bsh.Parser.jj_3R_120()Z
+METHOD|bsh.Parser.jj_3R_119()Z
+METHOD|bsh.Parser.jj_3R_195()Z
+METHOD|bsh.Parser.jj_3R_128()Z
+METHOD|bsh.Parser.jj_3R_133()Z
+METHOD|bsh.Parser.jj_3R_205()Z
+METHOD|bsh.Parser.jj_3R_132()Z
+METHOD|bsh.Parser.jj_3_3()Z
+METHOD|bsh.Parser.jj_3R_94()Z
+METHOD|bsh.Parser.jj_3R_93()Z
+METHOD|bsh.Parser.jj_3R_131()Z
+METHOD|bsh.Parser.jj_3R_95()Z
+METHOD|bsh.Parser.jj_3_2()Z
+METHOD|bsh.Parser.jj_3R_175()Z
+METHOD|bsh.Parser.jj_3_16()Z
+METHOD|bsh.Parser.jj_3R_104()Z
+METHOD|bsh.Parser.jj_3R_174()Z
+METHOD|bsh.Parser.jj_3_15()Z
+METHOD|bsh.Parser.jj_3_31()Z
+METHOD|bsh.Parser.jj_3_14()Z
+METHOD|bsh.Parser.jj_3R_126()Z
+METHOD|bsh.Parser.jj_3R_127()Z
+METHOD|bsh.Parser.jj_3R_92()Z
+METHOD|bsh.Parser.jj_3R_204()Z
+METHOD|bsh.Parser.jj_3R_103()Z
+METHOD|bsh.Parser.jj_3R_203()Z
+METHOD|bsh.Parser.jj_3R_194()Z
+METHOD|bsh.Parser.jj_3R_102()Z
+METHOD|bsh.Parser.jj_3R_58()Z
+METHOD|bsh.Parser.jj_3R_125()Z
+METHOD|bsh.Parser.jj_3R_101()Z
+METHOD|bsh.Parser.jj_3R_100()Z
+METHOD|bsh.Parser.jj_3R_99()Z
+METHOD|bsh.Parser.jj_3R_137()Z
+METHOD|bsh.Parser.jj_3R_184()Z
+METHOD|bsh.Parser.jj_3R_173()Z
+METHOD|bsh.Parser.jj_3R_57()Z
+METHOD|bsh.Parser.jj_3R_98()Z
+METHOD|bsh.Parser.jj_3R_172()Z
+METHOD|bsh.Parser.jj_3_30()Z
+METHOD|bsh.Parser.jj_3R_118()Z
+METHOD|bsh.Parser.jj_3R_37()Z
+METHOD|bsh.Parser.jj_3R_185()Z
+METHOD|bsh.Parser.jj_3R_91()Z
+METHOD|bsh.Parser.jj_3_13()Z
+METHOD|bsh.Parser.jj_3R_187()Z
+METHOD|bsh.Parser.jj_3R_186()Z
+METHOD|bsh.Parser.jj_3R_33()Z
+METHOD|bsh.Parser.jj_3R_217()Z
+METHOD|bsh.Parser.jj_3R_216()Z
+METHOD|bsh.Parser.jj_3R_117()Z
+METHOD|bsh.Parser.jj_3R_214()Z
+METHOD|bsh.Parser.jj_3_12()Z
+METHOD|bsh.Parser.jj_3R_219()Z
+METHOD|bsh.Parser.jj_3R_116()Z
+METHOD|bsh.Parser.jj_3_11()Z
+METHOD|bsh.Parser.jj_3R_218()Z
+METHOD|bsh.Parser.jj_3R_215()Z
+METHOD|bsh.Parser.jj_3R_72()Z
+METHOD|bsh.Parser.jj_3R_115()Z
+METHOD|bsh.Parser.jj_3R_60()Z
+METHOD|bsh.Parser.jj_3R_59()Z
+METHOD|bsh.Parser.jj_3_9()Z
+METHOD|bsh.Parser.jj_3_29()Z
+METHOD|bsh.Parser.jj_3R_114()Z
+METHOD|bsh.Parser.jj_3R_41()Z
+METHOD|bsh.Parser.jj_3R_35()Z
+METHOD|bsh.Parser.jj_3_10()Z
+METHOD|bsh.Parser.jj_3R_213()Z
+METHOD|bsh.Parser.jj_3R_212()Z
+METHOD|bsh.Parser.jj_3R_202()Z
+METHOD|bsh.Parser.jj_3R_211()Z
+METHOD|bsh.Parser.jj_3R_208()Z
+METHOD|bsh.Parser.jj_3R_201()Z
+METHOD|bsh.Parser.jj_3R_193()Z
+METHOD|bsh.Parser.jj_3R_183()Z
+METHOD|bsh.Parser.jj_3R_207()Z
+METHOD|bsh.Parser.jj_3_1()Z
+METHOD|bsh.Parser.jj_3R_113()Z
+METHOD|bsh.Parser.jj_3R_209()Z
+METHOD|bsh.Parser.jj_3R_206()Z
+METHOD|bsh.Parser.jj_3R_199()Z
+METHOD|bsh.Parser.jj_3R_198()Z
+METHOD|bsh.Parser.jj_3R_197()Z
+METHOD|bsh.Parser.jj_3R_196()Z
+METHOD|bsh.Parser.jj_3R_191()Z
+METHOD|bsh.Parser.jj_3R_44()Z
+METHOD|bsh.Parser.jj_3R_112()Z
+METHOD|bsh.Parser.jj_3R_181()Z
+METHOD|bsh.Parser.jj_3R_200()Z
+METHOD|bsh.Parser.jj_3R_178()Z
+METHOD|bsh.Parser.jj_3R_96()Z
+METHOD|bsh.Parser.jj_3R_192()Z
+METHOD|bsh.Parser.jj_3R_171()Z
+METHOD|bsh.Parser.jj_3R_170()Z
+METHOD|bsh.Parser.jj_3R_52()Z
+METHOD|bsh.Parser.jj_3R_182()Z
+METHOD|bsh.Parser.jj_3_27()Z
+METHOD|bsh.Parser.jj_3R_51()Z
+METHOD|bsh.Parser.jj_3R_168()Z
+METHOD|bsh.Parser.jj_3R_50()Z
+METHOD|bsh.Parser.jj_3_26()Z
+METHOD|bsh.Parser.jj_3R_179()Z
+METHOD|bsh.Parser.jj_3_28()Z
+METHOD|bsh.Parser.jj_3R_166()Z
+METHOD|bsh.Parser.jj_3_25()Z
+METHOD|bsh.Parser.jj_3R_49()Z
+METHOD|bsh.Parser.jj_3_24()Z
+METHOD|bsh.Parser.jj_3R_167()Z
+METHOD|bsh.Parser.jj_3R_48()Z
+METHOD|bsh.Parser.jj_3R_164()Z
+METHOD|bsh.Parser.jj_3R_47()Z
+METHOD|bsh.Parser.jj_3R_169()Z
+METHOD|bsh.Parser.<init>(Ljava/io/InputStream;)V
+METHOD|bsh.Parser.ReInit(Ljava/io/InputStream;)V
+METHOD|bsh.Parser.<init>(Ljava/io/Reader;)V
+METHOD|bsh.Parser.ReInit(Ljava/io/Reader;)V
+METHOD|bsh.Parser.<init>(Lbsh/ParserTokenManager;)V
+METHOD|bsh.Parser.ReInit(Lbsh/ParserTokenManager;)V
+METHOD|bsh.Parser.jj_consume_token(I)Lbsh/Token;
+METHOD|bsh.Parser.jj_scan_token(I)Z
+METHOD|bsh.Parser.getNextToken()Lbsh/Token;
+METHOD|bsh.Parser.getToken(I)Lbsh/Token;
+METHOD|bsh.Parser.jj_ntk()I
+METHOD|bsh.Parser.generateParseException()Lbsh/ParseException;
+METHOD|bsh.Parser.enable_tracing()V
+METHOD|bsh.Parser.disable_tracing()V
+METHOD|bsh.ParserConstants.<clinit>()V
+METHOD|bsh.ParserTokenManager.setDebugStream(Ljava/io/PrintStream;)V
+METHOD|bsh.ParserTokenManager.jjStopStringLiteralDfa_0(IJJJ)I
+METHOD|bsh.ParserTokenManager.jjStartNfa_0(IJJJ)I
+METHOD|bsh.ParserTokenManager.jjStopAtPos(II)I
+METHOD|bsh.ParserTokenManager.jjStartNfaWithStates_0(III)I
+METHOD|bsh.ParserTokenManager.jjMoveStringLiteralDfa0_0()I
+METHOD|bsh.ParserTokenManager.jjMoveStringLiteralDfa1_0(JJJ)I
+METHOD|bsh.ParserTokenManager.jjMoveStringLiteralDfa2_0(JJJJJJ)I
+METHOD|bsh.ParserTokenManager.jjMoveStringLiteralDfa3_0(JJJJJJ)I
+METHOD|bsh.ParserTokenManager.jjMoveStringLiteralDfa4_0(JJJJJJ)I
+METHOD|bsh.ParserTokenManager.jjMoveStringLiteralDfa5_0(JJJJJJ)I
+METHOD|bsh.ParserTokenManager.jjMoveStringLiteralDfa6_0(JJJJJJ)I
+METHOD|bsh.ParserTokenManager.jjMoveStringLiteralDfa7_0(JJJJJJ)I
+METHOD|bsh.ParserTokenManager.jjMoveStringLiteralDfa8_0(JJJJJJ)I
+METHOD|bsh.ParserTokenManager.jjMoveStringLiteralDfa9_0(JJJJJJ)I
+METHOD|bsh.ParserTokenManager.jjMoveStringLiteralDfa10_0(JJJJJJ)I
+METHOD|bsh.ParserTokenManager.jjMoveStringLiteralDfa11_0(JJJJJJ)I
+METHOD|bsh.ParserTokenManager.jjMoveStringLiteralDfa12_0(JJJJJJ)I
+METHOD|bsh.ParserTokenManager.jjMoveStringLiteralDfa13_0(JJJJ)I
+METHOD|bsh.ParserTokenManager.jjMoveStringLiteralDfa14_0(JJJJ)I
+METHOD|bsh.ParserTokenManager.jjMoveStringLiteralDfa15_0(JJJJ)I
+METHOD|bsh.ParserTokenManager.jjMoveStringLiteralDfa16_0(JJJJ)I
+METHOD|bsh.ParserTokenManager.jjMoveStringLiteralDfa17_0(JJJJ)I
+METHOD|bsh.ParserTokenManager.jjMoveStringLiteralDfa18_0(JJJJ)I
+METHOD|bsh.ParserTokenManager.jjMoveStringLiteralDfa19_0(JJJJ)I
+METHOD|bsh.ParserTokenManager.jjMoveStringLiteralDfa20_0(JJJJ)I
+METHOD|bsh.ParserTokenManager.jjMoveStringLiteralDfa21_0(JJJJ)I
+METHOD|bsh.ParserTokenManager.jjMoveStringLiteralDfa22_0(JJ)I
+METHOD|bsh.ParserTokenManager.jjMoveStringLiteralDfa23_0(JJ)I
+METHOD|bsh.ParserTokenManager.jjMoveStringLiteralDfa24_0(JJ)I
+METHOD|bsh.ParserTokenManager.jjMoveStringLiteralDfa25_0(JJ)I
+METHOD|bsh.ParserTokenManager.jjMoveStringLiteralDfa26_0(JJ)I
+METHOD|bsh.ParserTokenManager.jjMoveStringLiteralDfa27_0(JJ)I
+METHOD|bsh.ParserTokenManager.jjCheckNAdd(I)V
+METHOD|bsh.ParserTokenManager.jjAddStates(II)V
+METHOD|bsh.ParserTokenManager.jjCheckNAddTwoStates(II)V
+METHOD|bsh.ParserTokenManager.jjCheckNAddStates(II)V
+METHOD|bsh.ParserTokenManager.jjCheckNAddStates(I)V
+METHOD|bsh.ParserTokenManager.jjMoveNfa_0(II)I
+METHOD|bsh.ParserTokenManager.jjCanMove_0(IIIJJ)Z
+METHOD|bsh.ParserTokenManager.jjCanMove_1(IIIJJ)Z
+METHOD|bsh.ParserTokenManager.jjCanMove_2(IIIJJ)Z
+METHOD|bsh.ParserTokenManager.<init>(Lbsh/JavaCharStream;)V
+METHOD|bsh.ParserTokenManager.<init>(Lbsh/JavaCharStream;I)V
+METHOD|bsh.ParserTokenManager.ReInit(Lbsh/JavaCharStream;)V
+METHOD|bsh.ParserTokenManager.ReInitRounds()V
+METHOD|bsh.ParserTokenManager.ReInit(Lbsh/JavaCharStream;I)V
+METHOD|bsh.ParserTokenManager.SwitchTo(I)V
+METHOD|bsh.ParserTokenManager.jjFillToken()Lbsh/Token;
+METHOD|bsh.ParserTokenManager.getNextToken()Lbsh/Token;
+METHOD|bsh.ParserTokenManager.<clinit>()V
+METHOD|bsh.ParserTreeConstants.<clinit>()V
+METHOD|bsh.Primitive$Special.<init>()V
+METHOD|bsh.Primitive$Special.<clinit>()V
+METHOD|bsh.Primitive.<init>(Ljava/lang/Object;)V
+METHOD|bsh.Primitive.<init>(Z)V
+METHOD|bsh.Primitive.<init>(B)V
+METHOD|bsh.Primitive.<init>(S)V
+METHOD|bsh.Primitive.<init>(C)V
+METHOD|bsh.Primitive.<init>(I)V
+METHOD|bsh.Primitive.<init>(J)V
+METHOD|bsh.Primitive.<init>(F)V
+METHOD|bsh.Primitive.<init>(D)V
+METHOD|bsh.Primitive.getValue()Ljava/lang/Object;
+METHOD|bsh.Primitive.toString()Ljava/lang/String;
+METHOD|bsh.Primitive.getType()Ljava/lang/Class;
+METHOD|bsh.Primitive.binaryOperation(Ljava/lang/Object;Ljava/lang/Object;I)Ljava/lang/Object;
+METHOD|bsh.Primitive.binaryOperationImpl(Ljava/lang/Object;Ljava/lang/Object;I)Ljava/lang/Object;
+METHOD|bsh.Primitive.booleanBinaryOperation(Ljava/lang/Boolean;Ljava/lang/Boolean;I)Ljava/lang/Boolean;
+METHOD|bsh.Primitive.longBinaryOperation(Ljava/lang/Long;Ljava/lang/Long;I)Ljava/lang/Object;
+METHOD|bsh.Primitive.intBinaryOperation(Ljava/lang/Integer;Ljava/lang/Integer;I)Ljava/lang/Object;
+METHOD|bsh.Primitive.doubleBinaryOperation(Ljava/lang/Double;Ljava/lang/Double;I)Ljava/lang/Object;
+METHOD|bsh.Primitive.floatBinaryOperation(Ljava/lang/Float;Ljava/lang/Float;I)Ljava/lang/Object;
+METHOD|bsh.Primitive.promoteToInteger(Ljava/lang/Object;)Ljava/lang/Object;
+METHOD|bsh.Primitive.promotePrimitives(Ljava/lang/Object;Ljava/lang/Object;)[Ljava/lang/Object;
+METHOD|bsh.Primitive.unaryOperation(Lbsh/Primitive;I)Lbsh/Primitive;
+METHOD|bsh.Primitive.booleanUnaryOperation(Ljava/lang/Boolean;I)Z
+METHOD|bsh.Primitive.intUnaryOperation(Ljava/lang/Integer;I)I
+METHOD|bsh.Primitive.longUnaryOperation(Ljava/lang/Long;I)J
+METHOD|bsh.Primitive.floatUnaryOperation(Ljava/lang/Float;I)F
+METHOD|bsh.Primitive.doubleUnaryOperation(Ljava/lang/Double;I)D
+METHOD|bsh.Primitive.intValue()I
+METHOD|bsh.Primitive.booleanValue()Z
+METHOD|bsh.Primitive.isNumber()Z
+METHOD|bsh.Primitive.numberValue()Ljava/lang/Number;
+METHOD|bsh.Primitive.equals(Ljava/lang/Object;)Z
+METHOD|bsh.Primitive.hashCode()I
+METHOD|bsh.Primitive.unwrap(Ljava/lang/Object;)Ljava/lang/Object;
+METHOD|bsh.Primitive.unwrap([Ljava/lang/Object;)[Ljava/lang/Object;
+METHOD|bsh.Primitive.wrap([Ljava/lang/Object;[Ljava/lang/Class;)[Ljava/lang/Object;
+METHOD|bsh.Primitive.wrap(Ljava/lang/Object;Ljava/lang/Class;)Ljava/lang/Object;
+METHOD|bsh.Primitive.getDefaultValue(Ljava/lang/Class;)Lbsh/Primitive;
+METHOD|bsh.Primitive.boxType(Ljava/lang/Class;)Ljava/lang/Class;
+METHOD|bsh.Primitive.unboxType(Ljava/lang/Class;)Ljava/lang/Class;
+METHOD|bsh.Primitive.castToType(Ljava/lang/Class;I)Lbsh/Primitive;
+METHOD|bsh.Primitive.castPrimitive(Ljava/lang/Class;Ljava/lang/Class;Lbsh/Primitive;ZI)Lbsh/Primitive;
+METHOD|bsh.Primitive.isWrapperType(Ljava/lang/Class;)Z
+METHOD|bsh.Primitive.castWrapper(Ljava/lang/Class;Ljava/lang/Object;)Ljava/lang/Object;
+METHOD|bsh.Primitive.class$(Ljava/lang/String;)Ljava/lang/Class;
+METHOD|bsh.Primitive.<clinit>()V
+METHOD|bsh.Reflect.<init>()V
+METHOD|bsh.Reflect.invokeObjectMethod(Ljava/lang/Object;Ljava/lang/String;[Ljava/lang/Object;Lbsh/Interpreter;Lbsh/CallStack;Lbsh/SimpleNode;)Ljava/lang/Object;
+METHOD|bsh.Reflect.invokeStaticMethod(Lbsh/BshClassManager;Ljava/lang/Class;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/Object;
+METHOD|bsh.Reflect.invokeMethod(Ljava/lang/reflect/Method;Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;
+METHOD|bsh.Reflect.getIndex(Ljava/lang/Object;I)Ljava/lang/Object;
+METHOD|bsh.Reflect.setIndex(Ljava/lang/Object;ILjava/lang/Object;)V
+METHOD|bsh.Reflect.getStaticFieldValue(Ljava/lang/Class;Ljava/lang/String;)Ljava/lang/Object;
+METHOD|bsh.Reflect.getObjectFieldValue(Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object;
+METHOD|bsh.Reflect.getLHSStaticField(Ljava/lang/Class;Ljava/lang/String;)Lbsh/LHS;
+METHOD|bsh.Reflect.getLHSObjectField(Ljava/lang/Object;Ljava/lang/String;)Lbsh/LHS;
+METHOD|bsh.Reflect.getFieldValue(Ljava/lang/Class;Ljava/lang/Object;Ljava/lang/String;Z)Ljava/lang/Object;
+METHOD|bsh.Reflect.resolveJavaField(Ljava/lang/Class;Ljava/lang/String;Z)Ljava/lang/reflect/Field;
+METHOD|bsh.Reflect.resolveExpectedJavaField(Ljava/lang/Class;Ljava/lang/String;Z)Ljava/lang/reflect/Field;
+METHOD|bsh.Reflect.findAccessibleField(Ljava/lang/Class;Ljava/lang/String;)Ljava/lang/reflect/Field;
+METHOD|bsh.Reflect.resolveExpectedJavaMethod(Lbsh/BshClassManager;Ljava/lang/Class;Ljava/lang/Object;Ljava/lang/String;[Ljava/lang/Object;Z)Ljava/lang/reflect/Method;
+METHOD|bsh.Reflect.resolveJavaMethod(Lbsh/BshClassManager;Ljava/lang/Class;Ljava/lang/String;[Ljava/lang/Class;Z)Ljava/lang/reflect/Method;
+METHOD|bsh.Reflect.findOverloadedMethod(Ljava/lang/Class;Ljava/lang/String;[Ljava/lang/Class;Z)Ljava/lang/reflect/Method;
+METHOD|bsh.Reflect.getCandidateMethods(Ljava/lang/Class;Ljava/lang/String;IZ)[Ljava/lang/reflect/Method;
+METHOD|bsh.Reflect.gatherMethodsRecursive(Ljava/lang/Class;Ljava/lang/String;IZLjava/util/Vector;)Ljava/util/Vector;
+METHOD|bsh.Reflect.addCandidates([Ljava/lang/reflect/Method;Ljava/lang/String;IZLjava/util/Vector;)Ljava/util/Vector;
+METHOD|bsh.Reflect.constructObject(Ljava/lang/Class;[Ljava/lang/Object;)Ljava/lang/Object;
+METHOD|bsh.Reflect.findMostSpecificConstructor([Ljava/lang/Class;[Ljava/lang/reflect/Constructor;)Ljava/lang/reflect/Constructor;
+METHOD|bsh.Reflect.findMostSpecificConstructorIndex([Ljava/lang/Class;[Ljava/lang/reflect/Constructor;)I
+METHOD|bsh.Reflect.findMostSpecificMethod([Ljava/lang/Class;[Ljava/lang/reflect/Method;)Ljava/lang/reflect/Method;
+METHOD|bsh.Reflect.findMostSpecificSignature([Ljava/lang/Class;[[Ljava/lang/Class;)I
+METHOD|bsh.Reflect.accessorName(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+METHOD|bsh.Reflect.hasObjectPropertyGetter(Ljava/lang/Class;Ljava/lang/String;)Z
+METHOD|bsh.Reflect.hasObjectPropertySetter(Ljava/lang/Class;Ljava/lang/String;)Z
+METHOD|bsh.Reflect.getObjectProperty(Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object;
+METHOD|bsh.Reflect.setObjectProperty(Ljava/lang/Object;Ljava/lang/String;Ljava/lang/Object;)V
+METHOD|bsh.Reflect.normalizeClassName(Ljava/lang/Class;)Ljava/lang/String;
+METHOD|bsh.Reflect.getArrayDimensions(Ljava/lang/Class;)I
+METHOD|bsh.Reflect.getArrayBaseType(Ljava/lang/Class;)Ljava/lang/Class;
+METHOD|bsh.Reflect.invokeCompiledCommand(Ljava/lang/Class;[Ljava/lang/Object;Lbsh/Interpreter;Lbsh/CallStack;)Ljava/lang/Object;
+METHOD|bsh.Reflect.logInvokeMethod(Ljava/lang/String;Ljava/lang/reflect/Method;[Ljava/lang/Object;)V
+METHOD|bsh.Reflect.checkFoundStaticMethod(Ljava/lang/reflect/Method;ZLjava/lang/Class;)V
+METHOD|bsh.Reflect.cantFindConstructor(Ljava/lang/Class;[Ljava/lang/Class;)Lbsh/ReflectError;
+METHOD|bsh.Reflect.isPublic(Ljava/lang/Class;)Z
+METHOD|bsh.Reflect.isPublic(Ljava/lang/reflect/Method;)Z
+METHOD|bsh.Reflect.isPublic(Ljava/lang/reflect/Constructor;)Z
+METHOD|bsh.Reflect.isStatic(Ljava/lang/reflect/Method;)Z
+METHOD|bsh.ReflectError.<init>()V
+METHOD|bsh.ReflectError.<init>(Ljava/lang/String;)V
+METHOD|bsh.ReflectManager.<init>()V
+METHOD|bsh.ReflectManager.getReflectManager()Lbsh/ReflectManager;
+METHOD|bsh.ReflectManager.RMSetAccessible(Ljava/lang/Object;)Z
+METHOD|bsh.ReflectManager.setAccessible(Ljava/lang/Object;)Z
+METHOD|bsh.Remote.<init>()V
+METHOD|bsh.Remote.main([Ljava/lang/String;)V
+METHOD|bsh.Remote.eval(Ljava/lang/String;Ljava/lang/String;)I
+METHOD|bsh.Remote.doBsh(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+METHOD|bsh.Remote.sendLine(Ljava/lang/String;Ljava/io/OutputStream;)V
+METHOD|bsh.Remote.doHttp(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+METHOD|bsh.Remote.getFile(Ljava/lang/String;)Ljava/lang/String;
+METHOD|bsh.ReturnControl.<init>(ILjava/lang/Object;Lbsh/SimpleNode;)V
+METHOD|bsh.SimpleNode$1.<init>(I)V
+METHOD|bsh.SimpleNode$1.getSourceFile()Ljava/lang/String;
+METHOD|bsh.SimpleNode$1.getLineNumber()I
+METHOD|bsh.SimpleNode$1.getText()Ljava/lang/String;
+METHOD|bsh.SimpleNode.<init>(I)V
+METHOD|bsh.SimpleNode.jjtOpen()V
+METHOD|bsh.SimpleNode.jjtClose()V
+METHOD|bsh.SimpleNode.jjtSetParent(Lbsh/Node;)V
+METHOD|bsh.SimpleNode.jjtGetParent()Lbsh/Node;
+METHOD|bsh.SimpleNode.jjtAddChild(Lbsh/Node;I)V
+METHOD|bsh.SimpleNode.jjtGetChild(I)Lbsh/Node;
+METHOD|bsh.SimpleNode.getChild(I)Lbsh/SimpleNode;
+METHOD|bsh.SimpleNode.jjtGetNumChildren()I
+METHOD|bsh.SimpleNode.toString()Ljava/lang/String;
+METHOD|bsh.SimpleNode.toString(Ljava/lang/String;)Ljava/lang/String;
+METHOD|bsh.SimpleNode.dump(Ljava/lang/String;)V
+METHOD|bsh.SimpleNode.prune()V
+METHOD|bsh.SimpleNode.eval(Lbsh/CallStack;Lbsh/Interpreter;)Ljava/lang/Object;
+METHOD|bsh.SimpleNode.setSourceFile(Ljava/lang/String;)V
+METHOD|bsh.SimpleNode.getSourceFile()Ljava/lang/String;
+METHOD|bsh.SimpleNode.getLineNumber()I
+METHOD|bsh.SimpleNode.getText()Ljava/lang/String;
+METHOD|bsh.SimpleNode.<clinit>()V
+METHOD|bsh.StringUtil.<init>()V
+METHOD|bsh.StringUtil.split(Ljava/lang/String;Ljava/lang/String;)[Ljava/lang/String;
+METHOD|bsh.StringUtil.bubbleSort([Ljava/lang/String;)[Ljava/lang/String;
+METHOD|bsh.StringUtil.maxCommonPrefix(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+METHOD|bsh.StringUtil.methodString(Ljava/lang/String;[Ljava/lang/Class;)Ljava/lang/String;
+METHOD|bsh.StringUtil.normalizeClassName(Ljava/lang/Class;)Ljava/lang/String;
+METHOD|bsh.TargetError.<init>(Ljava/lang/String;Ljava/lang/Throwable;Lbsh/SimpleNode;Lbsh/CallStack;Z)V
+METHOD|bsh.TargetError.<init>(Ljava/lang/Throwable;Lbsh/SimpleNode;Lbsh/CallStack;)V
+METHOD|bsh.TargetError.getTarget()Ljava/lang/Throwable;
+METHOD|bsh.TargetError.toString()Ljava/lang/String;
+METHOD|bsh.TargetError.printStackTrace()V
+METHOD|bsh.TargetError.printStackTrace(Ljava/io/PrintStream;)V
+METHOD|bsh.TargetError.printStackTrace(ZLjava/io/PrintStream;)V
+METHOD|bsh.TargetError.printTargetError(Ljava/lang/Throwable;)Ljava/lang/String;
+METHOD|bsh.TargetError.xPrintTargetError(Ljava/lang/Throwable;)Ljava/lang/String;
+METHOD|bsh.TargetError.inNativeCode()Z
+METHOD|bsh.This.getThis(Lbsh/NameSpace;Lbsh/Interpreter;)Lbsh/This;
+METHOD|bsh.This.getInterface(Ljava/lang/Class;)Ljava/lang/Object;
+METHOD|bsh.This.getInterface([Ljava/lang/Class;)Ljava/lang/Object;
+METHOD|bsh.This.<init>(Lbsh/NameSpace;Lbsh/Interpreter;)V
+METHOD|bsh.This.getNameSpace()Lbsh/NameSpace;
+METHOD|bsh.This.toString()Ljava/lang/String;
+METHOD|bsh.This.run()V
+METHOD|bsh.This.invokeMethod(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/Object;
+METHOD|bsh.This.invokeMethod(Ljava/lang/String;[Ljava/lang/Object;Lbsh/Interpreter;Lbsh/CallStack;Lbsh/SimpleNode;Z)Ljava/lang/Object;
+METHOD|bsh.This.bind(Lbsh/This;Lbsh/NameSpace;Lbsh/Interpreter;)V
+METHOD|bsh.This.isExposedThisMethod(Ljava/lang/String;)Z
+METHOD|bsh.Token.<init>()V
+METHOD|bsh.Token.toString()Ljava/lang/String;
+METHOD|bsh.Token.newToken(I)Lbsh/Token;
+METHOD|bsh.TokenMgrError.addEscapes(Ljava/lang/String;)Ljava/lang/String;
+METHOD|bsh.TokenMgrError.LexicalError(ZIIILjava/lang/String;C)Ljava/lang/String;
+METHOD|bsh.TokenMgrError.getMessage()Ljava/lang/String;
+METHOD|bsh.TokenMgrError.<init>()V
+METHOD|bsh.TokenMgrError.<init>(Ljava/lang/String;I)V
+METHOD|bsh.TokenMgrError.<init>(ZIIILjava/lang/String;CI)V
+METHOD|bsh.Types.<init>()V
+METHOD|bsh.Types.getTypes([Ljava/lang/Object;)[Ljava/lang/Class;
+METHOD|bsh.Types.isSignatureAssignable([Ljava/lang/Class;[Ljava/lang/Class;I)Z
+METHOD|bsh.Types.isSignatureVarargsAssignable([Ljava/lang/Class;[Ljava/lang/Class;)Z
+METHOD|bsh.Types.isJavaAssignable(Ljava/lang/Class;Ljava/lang/Class;)Z
+METHOD|bsh.Types.isJavaBaseAssignable(Ljava/lang/Class;Ljava/lang/Class;)Z
+METHOD|bsh.Types.isJavaBoxTypesAssignable(Ljava/lang/Class;Ljava/lang/Class;)Z
+METHOD|bsh.Types.isBshAssignable(Ljava/lang/Class;Ljava/lang/Class;)Z
+METHOD|bsh.Types.castObject(Ljava/lang/Object;Ljava/lang/Class;I)Ljava/lang/Object;
+METHOD|bsh.Types.castObject(Ljava/lang/Class;Ljava/lang/Class;Ljava/lang/Object;IZ)Ljava/lang/Object;
+METHOD|bsh.Types.castError(Ljava/lang/Class;Ljava/lang/Class;I)Lbsh/UtilEvalError;
+METHOD|bsh.Types.castError(Ljava/lang/String;Ljava/lang/String;I)Lbsh/UtilEvalError;
+METHOD|bsh.Types.class$(Ljava/lang/String;)Ljava/lang/Class;
+METHOD|bsh.Types.<clinit>()V
+METHOD|bsh.UtilEvalError.<init>()V
+METHOD|bsh.UtilEvalError.<init>(Ljava/lang/String;)V
+METHOD|bsh.UtilEvalError.toEvalError(Ljava/lang/String;Lbsh/SimpleNode;Lbsh/CallStack;)Lbsh/EvalError;
+METHOD|bsh.UtilEvalError.toEvalError(Lbsh/SimpleNode;Lbsh/CallStack;)Lbsh/EvalError;
+METHOD|bsh.UtilTargetError.<init>(Ljava/lang/String;Ljava/lang/Throwable;)V
+METHOD|bsh.UtilTargetError.<init>(Ljava/lang/Throwable;)V
+METHOD|bsh.UtilTargetError.toEvalError(Ljava/lang/String;Lbsh/SimpleNode;Lbsh/CallStack;)Lbsh/EvalError;
+METHOD|bsh.Variable.<init>(Ljava/lang/String;Ljava/lang/Class;Lbsh/LHS;)V
+METHOD|bsh.Variable.<init>(Ljava/lang/String;Ljava/lang/Object;Lbsh/Modifiers;)V
+METHOD|bsh.Variable.<init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Object;Lbsh/Modifiers;)V
+METHOD|bsh.Variable.<init>(Ljava/lang/String;Ljava/lang/Class;Ljava/lang/Object;Lbsh/Modifiers;)V
+METHOD|bsh.Variable.setValue(Ljava/lang/Object;I)V
+METHOD|bsh.Variable.getValue()Ljava/lang/Object;
+METHOD|bsh.Variable.getType()Ljava/lang/Class;
+METHOD|bsh.Variable.getTypeDescriptor()Ljava/lang/String;
+METHOD|bsh.Variable.getModifiers()Lbsh/Modifiers;
+METHOD|bsh.Variable.getName()Ljava/lang/String;
+METHOD|bsh.Variable.hasModifier(Ljava/lang/String;)Z
+METHOD|bsh.Variable.toString()Ljava/lang/String;
+METHOD|bsh.XThis$Handler.<init>(Lbsh/XThis;)V
+METHOD|bsh.XThis$Handler.invoke(Ljava/lang/Object;Ljava/lang/reflect/Method;[Ljava/lang/Object;)Ljava/lang/Object;
+METHOD|bsh.XThis$Handler.invokeImpl(Ljava/lang/Object;Ljava/lang/reflect/Method;[Ljava/lang/Object;)Ljava/lang/Object;
+METHOD|bsh.XThis.<init>(Lbsh/NameSpace;Lbsh/Interpreter;)V
+METHOD|bsh.XThis.toString()Ljava/lang/String;
+METHOD|bsh.XThis.getInterface(Ljava/lang/Class;)Ljava/lang/Object;
+METHOD|bsh.XThis.getInterface([Ljava/lang/Class;)Ljava/lang/Object;
+METHOD|bsh.XThis.class$(Ljava/lang/String;)Ljava/lang/Class;
+METHOD|bsh.classpath.BshClassLoader.<init>(Lbsh/BshClassManager;[Ljava/net/URL;)V
+METHOD|bsh.classpath.BshClassLoader.<init>(Lbsh/BshClassManager;Lbsh/classpath/BshClassPath;)V
+METHOD|bsh.classpath.BshClassLoader.<init>(Lbsh/BshClassManager;)V
+METHOD|bsh.classpath.BshClassLoader.addURL(Ljava/net/URL;)V
+METHOD|bsh.classpath.BshClassLoader.loadClass(Ljava/lang/String;Z)Ljava/lang/Class;
+METHOD|bsh.classpath.BshClassLoader.findClass(Ljava/lang/String;)Ljava/lang/Class;
+METHOD|bsh.classpath.BshClassLoader.getClassManager()Lbsh/BshClassManager;
+METHOD|bsh.classpath.BshClassLoader.class$(Ljava/lang/String;)Ljava/lang/Class;
+METHOD|bsh.classpath.BshClassPath$AmbiguousName.<init>()V
+METHOD|bsh.classpath.BshClassPath$AmbiguousName.add(Ljava/lang/String;)V
+METHOD|bsh.classpath.BshClassPath$AmbiguousName.get()Ljava/util/List;
+METHOD|bsh.classpath.BshClassPath$ClassSource.<init>()V
+METHOD|bsh.classpath.BshClassPath$ClassSource.getCode(Ljava/lang/String;)[B
+METHOD|bsh.classpath.BshClassPath$DirClassSource.<init>(Ljava/io/File;)V
+METHOD|bsh.classpath.BshClassPath$DirClassSource.getDir()Ljava/io/File;
+METHOD|bsh.classpath.BshClassPath$DirClassSource.toString()Ljava/lang/String;
+METHOD|bsh.classpath.BshClassPath$DirClassSource.getCode(Ljava/lang/String;)[B
+METHOD|bsh.classpath.BshClassPath$DirClassSource.readBytesFromFile(Ljava/io/File;Ljava/lang/String;)[B
+METHOD|bsh.classpath.BshClassPath$GeneratedClassSource.<init>([B)V
+METHOD|bsh.classpath.BshClassPath$GeneratedClassSource.getCode(Ljava/lang/String;)[B
+METHOD|bsh.classpath.BshClassPath$JarClassSource.<init>(Ljava/net/URL;)V
+METHOD|bsh.classpath.BshClassPath$JarClassSource.getURL()Ljava/net/URL;
+METHOD|bsh.classpath.BshClassPath$JarClassSource.getCode(Ljava/lang/String;)[B
+METHOD|bsh.classpath.BshClassPath$JarClassSource.toString()Ljava/lang/String;
+METHOD|bsh.classpath.BshClassPath$MappingFeedback.startClassMapping()V
+METHOD|bsh.classpath.BshClassPath$MappingFeedback.classMapping(Ljava/lang/String;)V
+METHOD|bsh.classpath.BshClassPath$MappingFeedback.errorWhileMapping(Ljava/lang/String;)V
+METHOD|bsh.classpath.BshClassPath$MappingFeedback.endClassMapping()V
+METHOD|bsh.classpath.BshClassPath$UnqualifiedNameTable.<init>()V
+METHOD|bsh.classpath.BshClassPath$UnqualifiedNameTable.add(Ljava/lang/String;)V
+METHOD|bsh.classpath.BshClassPath.<init>(Ljava/lang/String;)V
+METHOD|bsh.classpath.BshClassPath.<init>(Ljava/lang/String;[Ljava/net/URL;)V
+METHOD|bsh.classpath.BshClassPath.setPath([Ljava/net/URL;)V
+METHOD|bsh.classpath.BshClassPath.addComponent(Lbsh/classpath/BshClassPath;)V
+METHOD|bsh.classpath.BshClassPath.add([Ljava/net/URL;)V
+METHOD|bsh.classpath.BshClassPath.add(Ljava/net/URL;)V
+METHOD|bsh.classpath.BshClassPath.getPathComponents()[Ljava/net/URL;
+METHOD|bsh.classpath.BshClassPath.getClassesForPackage(Ljava/lang/String;)Ljava/util/Set;
+METHOD|bsh.classpath.BshClassPath.getClassSource(Ljava/lang/String;)Lbsh/classpath/BshClassPath$ClassSource;
+METHOD|bsh.classpath.BshClassPath.setClassSource(Ljava/lang/String;Lbsh/classpath/BshClassPath$ClassSource;)V
+METHOD|bsh.classpath.BshClassPath.insureInitialized()V
+METHOD|bsh.classpath.BshClassPath.insureInitialized(Z)V
+METHOD|bsh.classpath.BshClassPath.getFullPath()Ljava/util/List;
+METHOD|bsh.classpath.BshClassPath.getClassNameByUnqName(Ljava/lang/String;)Ljava/lang/String;
+METHOD|bsh.classpath.BshClassPath.getUnqualifiedNameTable()Lbsh/classpath/BshClassPath$UnqualifiedNameTable;
+METHOD|bsh.classpath.BshClassPath.buildUnqualifiedNameTable()Lbsh/classpath/BshClassPath$UnqualifiedNameTable;
+METHOD|bsh.classpath.BshClassPath.getAllNames()[Ljava/lang/String;
+METHOD|bsh.classpath.BshClassPath.map([Ljava/net/URL;)V
+METHOD|bsh.classpath.BshClassPath.map(Ljava/net/URL;)V
+METHOD|bsh.classpath.BshClassPath.map([Ljava/lang/String;Ljava/lang/Object;)V
+METHOD|bsh.classpath.BshClassPath.mapClass(Ljava/lang/String;Ljava/lang/Object;)V
+METHOD|bsh.classpath.BshClassPath.reset()V
+METHOD|bsh.classpath.BshClassPath.clearCachedStructures()V
+METHOD|bsh.classpath.BshClassPath.classPathChanged()V
+METHOD|bsh.classpath.BshClassPath.traverseDirForClasses(Ljava/io/File;)[Ljava/lang/String;
+METHOD|bsh.classpath.BshClassPath.traverseDirForClassesAux(Ljava/io/File;Ljava/io/File;)Ljava/util/List;
+METHOD|bsh.classpath.BshClassPath.searchJarForClasses(Ljava/net/URL;)[Ljava/lang/String;
+METHOD|bsh.classpath.BshClassPath.isClassFileName(Ljava/lang/String;)Z
+METHOD|bsh.classpath.BshClassPath.isArchiveFileName(Ljava/lang/String;)Z
+METHOD|bsh.classpath.BshClassPath.canonicalizeClassName(Ljava/lang/String;)Ljava/lang/String;
+METHOD|bsh.classpath.BshClassPath.splitClassname(Ljava/lang/String;)[Ljava/lang/String;
+METHOD|bsh.classpath.BshClassPath.removeInnerClassNames(Ljava/util/Collection;)Ljava/util/Collection;
+METHOD|bsh.classpath.BshClassPath.getUserClassPathComponents()[Ljava/net/URL;
+METHOD|bsh.classpath.BshClassPath.getPackagesSet()Ljava/util/Set;
+METHOD|bsh.classpath.BshClassPath.addListener(Lbsh/classpath/ClassPathListener;)V
+METHOD|bsh.classpath.BshClassPath.removeListener(Lbsh/classpath/ClassPathListener;)V
+METHOD|bsh.classpath.BshClassPath.notifyListeners()V
+METHOD|bsh.classpath.BshClassPath.getUserClassPath()Lbsh/classpath/BshClassPath;
+METHOD|bsh.classpath.BshClassPath.getBootClassPath()Lbsh/classpath/BshClassPath;
+METHOD|bsh.classpath.BshClassPath.getRTJarPath()Ljava/lang/String;
+METHOD|bsh.classpath.BshClassPath.main([Ljava/lang/String;)V
+METHOD|bsh.classpath.BshClassPath.toString()Ljava/lang/String;
+METHOD|bsh.classpath.BshClassPath.nameSpaceChanged()V
+METHOD|bsh.classpath.BshClassPath.addNameSourceListener(Lbsh/NameSource$Listener;)V
+METHOD|bsh.classpath.BshClassPath.addMappingFeedback(Lbsh/classpath/BshClassPath$MappingFeedback;)V
+METHOD|bsh.classpath.BshClassPath.startClassMapping()V
+METHOD|bsh.classpath.BshClassPath.classMapping(Ljava/lang/String;)V
+METHOD|bsh.classpath.BshClassPath.errorWhileMapping(Ljava/lang/String;)V
+METHOD|bsh.classpath.BshClassPath.endClassMapping()V
+METHOD|bsh.classpath.BshClassPath.class$(Ljava/lang/String;)Ljava/lang/Class;
+METHOD|bsh.classpath.ClassManagerImpl.<init>()V
+METHOD|bsh.classpath.ClassManagerImpl.classForName(Ljava/lang/String;)Ljava/lang/Class;
+METHOD|bsh.classpath.ClassManagerImpl.getResource(Ljava/lang/String;)Ljava/net/URL;
+METHOD|bsh.classpath.ClassManagerImpl.getResourceAsStream(Ljava/lang/String;)Ljava/io/InputStream;
+METHOD|bsh.classpath.ClassManagerImpl.getLoaderForClass(Ljava/lang/String;)Ljava/lang/ClassLoader;
+METHOD|bsh.classpath.ClassManagerImpl.addClassPath(Ljava/net/URL;)V
+METHOD|bsh.classpath.ClassManagerImpl.reset()V
+METHOD|bsh.classpath.ClassManagerImpl.setClassPath([Ljava/net/URL;)V
+METHOD|bsh.classpath.ClassManagerImpl.reloadAllClasses()V
+METHOD|bsh.classpath.ClassManagerImpl.initBaseLoader()V
+METHOD|bsh.classpath.ClassManagerImpl.reloadClasses([Ljava/lang/String;)V
+METHOD|bsh.classpath.ClassManagerImpl.reloadPackage(Ljava/lang/String;)V
+METHOD|bsh.classpath.ClassManagerImpl.getClassPath()Lbsh/classpath/BshClassPath;
+METHOD|bsh.classpath.ClassManagerImpl.doSuperImport()V
+METHOD|bsh.classpath.ClassManagerImpl.hasSuperImport()Z
+METHOD|bsh.classpath.ClassManagerImpl.getClassNameByUnqName(Ljava/lang/String;)Ljava/lang/String;
+METHOD|bsh.classpath.ClassManagerImpl.addListener(Lbsh/BshClassManager$Listener;)V
+METHOD|bsh.classpath.ClassManagerImpl.removeListener(Lbsh/BshClassManager$Listener;)V
+METHOD|bsh.classpath.ClassManagerImpl.getBaseLoader()Ljava/lang/ClassLoader;
+METHOD|bsh.classpath.ClassManagerImpl.defineClass(Ljava/lang/String;[B)Ljava/lang/Class;
+METHOD|bsh.classpath.ClassManagerImpl.classLoaderChanged()V
+METHOD|bsh.classpath.ClassManagerImpl.dump(Ljava/io/PrintWriter;)V
+METHOD|bsh.classpath.ClassManagerImpl.class$(Ljava/lang/String;)Ljava/lang/Class;
+METHOD|bsh.classpath.ClassPathListener.classPathChanged()V
+METHOD|bsh.classpath.DiscreteFilesClassLoader$ClassSourceMap.<init>()V
+METHOD|bsh.classpath.DiscreteFilesClassLoader$ClassSourceMap.put(Ljava/lang/String;Lbsh/classpath/BshClassPath$ClassSource;)V
+METHOD|bsh.classpath.DiscreteFilesClassLoader$ClassSourceMap.get(Ljava/lang/String;)Lbsh/classpath/BshClassPath$ClassSource;
+METHOD|bsh.classpath.DiscreteFilesClassLoader.<init>(Lbsh/BshClassManager;Lbsh/classpath/DiscreteFilesClassLoader$ClassSourceMap;)V
+METHOD|bsh.classpath.DiscreteFilesClassLoader.findClass(Ljava/lang/String;)Ljava/lang/Class;
+METHOD|bsh.classpath.DiscreteFilesClassLoader.toString()Ljava/lang/String;
+METHOD|bsh.collection.CollectionIterator.<init>(Ljava/lang/Object;)V
+METHOD|bsh.collection.CollectionIterator.createIterator(Ljava/lang/Object;)Ljava/util/Iterator;
+METHOD|bsh.collection.CollectionIterator.next()Ljava/lang/Object;
+METHOD|bsh.collection.CollectionIterator.hasNext()Z
+METHOD|bsh.collection.CollectionManagerImpl.<init>()V
+METHOD|bsh.collection.CollectionManagerImpl.getBshIterator(Ljava/lang/Object;)Lbsh/BshIterator;
+METHOD|bsh.collection.CollectionManagerImpl.isMap(Ljava/lang/Object;)Z
+METHOD|bsh.collection.CollectionManagerImpl.getFromMap(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+METHOD|bsh.collection.CollectionManagerImpl.putInMap(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+METHOD|bsh.commands.dir.<init>()V
+METHOD|bsh.commands.dir.usage()Ljava/lang/String;
+METHOD|bsh.commands.dir.invoke(Lbsh/Interpreter;Lbsh/CallStack;)V
+METHOD|bsh.commands.dir.invoke(Lbsh/Interpreter;Lbsh/CallStack;Ljava/lang/String;)V
+METHOD|bsh.commands.dir.<clinit>()V
+METHOD|bsh.org.objectweb.asm.ByteVector.<init>()V
+METHOD|bsh.org.objectweb.asm.ByteVector.<init>(I)V
+METHOD|bsh.org.objectweb.asm.ByteVector.put1(I)Lbsh/org/objectweb/asm/ByteVector;
+METHOD|bsh.org.objectweb.asm.ByteVector.put11(II)Lbsh/org/objectweb/asm/ByteVector;
+METHOD|bsh.org.objectweb.asm.ByteVector.put2(I)Lbsh/org/objectweb/asm/ByteVector;
+METHOD|bsh.org.objectweb.asm.ByteVector.put12(II)Lbsh/org/objectweb/asm/ByteVector;
+METHOD|bsh.org.objectweb.asm.ByteVector.put4(I)Lbsh/org/objectweb/asm/ByteVector;
+METHOD|bsh.org.objectweb.asm.ByteVector.put8(J)Lbsh/org/objectweb/asm/ByteVector;
+METHOD|bsh.org.objectweb.asm.ByteVector.putUTF(Ljava/lang/String;)Lbsh/org/objectweb/asm/ByteVector;
+METHOD|bsh.org.objectweb.asm.ByteVector.putByteArray([BII)Lbsh/org/objectweb/asm/ByteVector;
+METHOD|bsh.org.objectweb.asm.ByteVector.enlarge(I)V
+METHOD|bsh.org.objectweb.asm.ClassVisitor.visit(ILjava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)V
+METHOD|bsh.org.objectweb.asm.ClassVisitor.visitInnerClass(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;I)V
+METHOD|bsh.org.objectweb.asm.ClassVisitor.visitField(ILjava/lang/String;Ljava/lang/String;Ljava/lang/Object;)V
+METHOD|bsh.org.objectweb.asm.ClassVisitor.visitMethod(ILjava/lang/String;Ljava/lang/String;[Ljava/lang/String;)Lbsh/org/objectweb/asm/CodeVisitor;
+METHOD|bsh.org.objectweb.asm.ClassVisitor.visitEnd()V
+METHOD|bsh.org.objectweb.asm.ClassWriter.<init>(Z)V
+METHOD|bsh.org.objectweb.asm.ClassWriter.visit(ILjava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)V
+METHOD|bsh.org.objectweb.asm.ClassWriter.visitInnerClass(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;I)V
+METHOD|bsh.org.objectweb.asm.ClassWriter.visitField(ILjava/lang/String;Ljava/lang/String;Ljava/lang/Object;)V
+METHOD|bsh.org.objectweb.asm.ClassWriter.visitMethod(ILjava/lang/String;Ljava/lang/String;[Ljava/lang/String;)Lbsh/org/objectweb/asm/CodeVisitor;
+METHOD|bsh.org.objectweb.asm.ClassWriter.visitEnd()V
+METHOD|bsh.org.objectweb.asm.ClassWriter.toByteArray()[B
+METHOD|bsh.org.objectweb.asm.ClassWriter.newCst(Ljava/lang/Object;)Lbsh/org/objectweb/asm/Item;
+METHOD|bsh.org.objectweb.asm.ClassWriter.newUTF8(Ljava/lang/String;)Lbsh/org/objectweb/asm/Item;
+METHOD|bsh.org.objectweb.asm.ClassWriter.newClass(Ljava/lang/String;)Lbsh/org/objectweb/asm/Item;
+METHOD|bsh.org.objectweb.asm.ClassWriter.newField(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Lbsh/org/objectweb/asm/Item;
+METHOD|bsh.org.objectweb.asm.ClassWriter.newMethod(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Lbsh/org/objectweb/asm/Item;
+METHOD|bsh.org.objectweb.asm.ClassWriter.newItfMethod(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Lbsh/org/objectweb/asm/Item;
+METHOD|bsh.org.objectweb.asm.ClassWriter.newInteger(I)Lbsh/org/objectweb/asm/Item;
+METHOD|bsh.org.objectweb.asm.ClassWriter.newFloat(F)Lbsh/org/objectweb/asm/Item;
+METHOD|bsh.org.objectweb.asm.ClassWriter.newLong(J)Lbsh/org/objectweb/asm/Item;
+METHOD|bsh.org.objectweb.asm.ClassWriter.newDouble(D)Lbsh/org/objectweb/asm/Item;
+METHOD|bsh.org.objectweb.asm.ClassWriter.newString(Ljava/lang/String;)Lbsh/org/objectweb/asm/Item;
+METHOD|bsh.org.objectweb.asm.ClassWriter.newNameType(Ljava/lang/String;Ljava/lang/String;)Lbsh/org/objectweb/asm/Item;
+METHOD|bsh.org.objectweb.asm.ClassWriter.get(Lbsh/org/objectweb/asm/Item;)Lbsh/org/objectweb/asm/Item;
+METHOD|bsh.org.objectweb.asm.ClassWriter.put(Lbsh/org/objectweb/asm/Item;)V
+METHOD|bsh.org.objectweb.asm.ClassWriter.put122(III)V
+METHOD|bsh.org.objectweb.asm.ClassWriter.<clinit>()V
+METHOD|bsh.org.objectweb.asm.CodeVisitor.visitInsn(I)V
+METHOD|bsh.org.objectweb.asm.CodeVisitor.visitIntInsn(II)V
+METHOD|bsh.org.objectweb.asm.CodeVisitor.visitVarInsn(II)V
+METHOD|bsh.org.objectweb.asm.CodeVisitor.visitTypeInsn(ILjava/lang/String;)V
+METHOD|bsh.org.objectweb.asm.CodeVisitor.visitFieldInsn(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
+METHOD|bsh.org.objectweb.asm.CodeVisitor.visitMethodInsn(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
+METHOD|bsh.org.objectweb.asm.CodeVisitor.visitJumpInsn(ILbsh/org/objectweb/asm/Label;)V
+METHOD|bsh.org.objectweb.asm.CodeVisitor.visitLabel(Lbsh/org/objectweb/asm/Label;)V
+METHOD|bsh.org.objectweb.asm.CodeVisitor.visitLdcInsn(Ljava/lang/Object;)V
+METHOD|bsh.org.objectweb.asm.CodeVisitor.visitIincInsn(II)V
+METHOD|bsh.org.objectweb.asm.CodeVisitor.visitTableSwitchInsn(IILbsh/org/objectweb/asm/Label;[Lbsh/org/objectweb/asm/Label;)V
+METHOD|bsh.org.objectweb.asm.CodeVisitor.visitLookupSwitchInsn(Lbsh/org/objectweb/asm/Label;[I[Lbsh/org/objectweb/asm/Label;)V
+METHOD|bsh.org.objectweb.asm.CodeVisitor.visitMultiANewArrayInsn(Ljava/lang/String;I)V
+METHOD|bsh.org.objectweb.asm.CodeVisitor.visitTryCatchBlock(Lbsh/org/objectweb/asm/Label;Lbsh/org/objectweb/asm/Label;Lbsh/org/objectweb/asm/Label;Ljava/lang/String;)V
+METHOD|bsh.org.objectweb.asm.CodeVisitor.visitMaxs(II)V
+METHOD|bsh.org.objectweb.asm.CodeVisitor.visitLocalVariable(Ljava/lang/String;Ljava/lang/String;Lbsh/org/objectweb/asm/Label;Lbsh/org/objectweb/asm/Label;I)V
+METHOD|bsh.org.objectweb.asm.CodeVisitor.visitLineNumber(ILbsh/org/objectweb/asm/Label;)V
+METHOD|bsh.org.objectweb.asm.CodeWriter.<init>(Lbsh/org/objectweb/asm/ClassWriter;Z)V
+METHOD|bsh.org.objectweb.asm.CodeWriter.init(ILjava/lang/String;Ljava/lang/String;[Ljava/lang/String;)V
+METHOD|bsh.org.objectweb.asm.CodeWriter.visitInsn(I)V
+METHOD|bsh.org.objectweb.asm.CodeWriter.visitIntInsn(II)V
+METHOD|bsh.org.objectweb.asm.CodeWriter.visitVarInsn(II)V
+METHOD|bsh.org.objectweb.asm.CodeWriter.visitTypeInsn(ILjava/lang/String;)V
+METHOD|bsh.org.objectweb.asm.CodeWriter.visitFieldInsn(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
+METHOD|bsh.org.objectweb.asm.CodeWriter.visitMethodInsn(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
+METHOD|bsh.org.objectweb.asm.CodeWriter.visitJumpInsn(ILbsh/org/objectweb/asm/Label;)V
+METHOD|bsh.org.objectweb.asm.CodeWriter.visitLabel(Lbsh/org/objectweb/asm/Label;)V
+METHOD|bsh.org.objectweb.asm.CodeWriter.visitLdcInsn(Ljava/lang/Object;)V
+METHOD|bsh.org.objectweb.asm.CodeWriter.visitIincInsn(II)V
+METHOD|bsh.org.objectweb.asm.CodeWriter.visitTableSwitchInsn(IILbsh/org/objectweb/asm/Label;[Lbsh/org/objectweb/asm/Label;)V
+METHOD|bsh.org.objectweb.asm.CodeWriter.visitLookupSwitchInsn(Lbsh/org/objectweb/asm/Label;[I[Lbsh/org/objectweb/asm/Label;)V
+METHOD|bsh.org.objectweb.asm.CodeWriter.visitMultiANewArrayInsn(Ljava/lang/String;I)V
+METHOD|bsh.org.objectweb.asm.CodeWriter.visitTryCatchBlock(Lbsh/org/objectweb/asm/Label;Lbsh/org/objectweb/asm/Label;Lbsh/org/objectweb/asm/Label;Ljava/lang/String;)V
+METHOD|bsh.org.objectweb.asm.CodeWriter.visitMaxs(II)V
+METHOD|bsh.org.objectweb.asm.CodeWriter.visitLocalVariable(Ljava/lang/String;Ljava/lang/String;Lbsh/org/objectweb/asm/Label;Lbsh/org/objectweb/asm/Label;I)V
+METHOD|bsh.org.objectweb.asm.CodeWriter.visitLineNumber(ILbsh/org/objectweb/asm/Label;)V
+METHOD|bsh.org.objectweb.asm.CodeWriter.getArgumentsAndReturnSizes(Ljava/lang/String;)I
+METHOD|bsh.org.objectweb.asm.CodeWriter.addSuccessor(ILbsh/org/objectweb/asm/Label;)V
+METHOD|bsh.org.objectweb.asm.CodeWriter.getSize()I
+METHOD|bsh.org.objectweb.asm.CodeWriter.put(Lbsh/org/objectweb/asm/ByteVector;)V
+METHOD|bsh.org.objectweb.asm.CodeWriter.resizeInstructions([I[II)[I
+METHOD|bsh.org.objectweb.asm.CodeWriter.readUnsignedShort([BI)I
+METHOD|bsh.org.objectweb.asm.CodeWriter.readShort([BI)S
+METHOD|bsh.org.objectweb.asm.CodeWriter.readInt([BI)I
+METHOD|bsh.org.objectweb.asm.CodeWriter.writeShort([BII)V
+METHOD|bsh.org.objectweb.asm.CodeWriter.getNewOffset([I[III)I
+METHOD|bsh.org.objectweb.asm.CodeWriter.getCodeSize()I
+METHOD|bsh.org.objectweb.asm.CodeWriter.getCode()[B
+METHOD|bsh.org.objectweb.asm.CodeWriter.<clinit>()V
+METHOD|bsh.org.objectweb.asm.Edge.<init>()V
+METHOD|bsh.org.objectweb.asm.Item.<init>()V
+METHOD|bsh.org.objectweb.asm.Item.<init>(SLbsh/org/objectweb/asm/Item;)V
+METHOD|bsh.org.objectweb.asm.Item.set(I)V
+METHOD|bsh.org.objectweb.asm.Item.set(J)V
+METHOD|bsh.org.objectweb.asm.Item.set(F)V
+METHOD|bsh.org.objectweb.asm.Item.set(D)V
+METHOD|bsh.org.objectweb.asm.Item.set(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
+METHOD|bsh.org.objectweb.asm.Item.isEqualTo(Lbsh/org/objectweb/asm/Item;)Z
+METHOD|bsh.org.objectweb.asm.Label.<init>()V
+METHOD|bsh.org.objectweb.asm.Label.put(Lbsh/org/objectweb/asm/CodeWriter;Lbsh/org/objectweb/asm/ByteVector;IZ)V
+METHOD|bsh.org.objectweb.asm.Label.addReference(II)V
+METHOD|bsh.org.objectweb.asm.Label.resolve(Lbsh/org/objectweb/asm/CodeWriter;I[B)Z
+METHOD|bsh.org.objectweb.asm.Type.<init>(I)V
+METHOD|bsh.org.objectweb.asm.Type.<init>(I[CII)V
+METHOD|bsh.org.objectweb.asm.Type.getType(Ljava/lang/String;)Lbsh/org/objectweb/asm/Type;
+METHOD|bsh.org.objectweb.asm.Type.getType(Ljava/lang/Class;)Lbsh/org/objectweb/asm/Type;
+METHOD|bsh.org.objectweb.asm.Type.getArgumentTypes(Ljava/lang/String;)[Lbsh/org/objectweb/asm/Type;
+METHOD|bsh.org.objectweb.asm.Type.getArgumentTypes(Ljava/lang/reflect/Method;)[Lbsh/org/objectweb/asm/Type;
+METHOD|bsh.org.objectweb.asm.Type.getReturnType(Ljava/lang/String;)Lbsh/org/objectweb/asm/Type;
+METHOD|bsh.org.objectweb.asm.Type.getReturnType(Ljava/lang/reflect/Method;)Lbsh/org/objectweb/asm/Type;
+METHOD|bsh.org.objectweb.asm.Type.getType([CI)Lbsh/org/objectweb/asm/Type;
+METHOD|bsh.org.objectweb.asm.Type.getSort()I
+METHOD|bsh.org.objectweb.asm.Type.getDimensions()I
+METHOD|bsh.org.objectweb.asm.Type.getElementType()Lbsh/org/objectweb/asm/Type;
+METHOD|bsh.org.objectweb.asm.Type.getClassName()Ljava/lang/String;
+METHOD|bsh.org.objectweb.asm.Type.getInternalName()Ljava/lang/String;
+METHOD|bsh.org.objectweb.asm.Type.getDescriptor()Ljava/lang/String;
+METHOD|bsh.org.objectweb.asm.Type.getMethodDescriptor(Lbsh/org/objectweb/asm/Type;[Lbsh/org/objectweb/asm/Type;)Ljava/lang/String;
+METHOD|bsh.org.objectweb.asm.Type.getDescriptor(Ljava/lang/StringBuffer;)V
+METHOD|bsh.org.objectweb.asm.Type.getInternalName(Ljava/lang/Class;)Ljava/lang/String;
+METHOD|bsh.org.objectweb.asm.Type.getDescriptor(Ljava/lang/Class;)Ljava/lang/String;
+METHOD|bsh.org.objectweb.asm.Type.getMethodDescriptor(Ljava/lang/reflect/Method;)Ljava/lang/String;
+METHOD|bsh.org.objectweb.asm.Type.getDescriptor(Ljava/lang/StringBuffer;Ljava/lang/Class;)V
+METHOD|bsh.org.objectweb.asm.Type.getSize()I
+METHOD|bsh.org.objectweb.asm.Type.getOpcode(I)I
+METHOD|bsh.org.objectweb.asm.Type.<clinit>()V
+METHOD|bsh.reflect.ReflectManagerImpl.<init>()V
+METHOD|bsh.reflect.ReflectManagerImpl.setAccessible(Ljava/lang/Object;)Z
+METHOD|bsh.servlet.BshServlet.<init>()V
+METHOD|bsh.servlet.BshServlet.getBshVersion()Ljava/lang/String;
+METHOD|bsh.servlet.BshServlet.doGet(Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;)V
+METHOD|bsh.servlet.BshServlet.sendHTML(Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;Ljava/lang/String;Ljava/lang/Exception;Ljava/lang/Object;Ljava/lang/StringBuffer;Z)V
+METHOD|bsh.servlet.BshServlet.sendRaw(Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;Ljava/lang/Exception;Ljava/lang/Object;Ljava/lang/StringBuffer;)V
+METHOD|bsh.servlet.BshServlet.formatScriptResultHTML(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Exception;Ljava/lang/StringBuffer;)Ljava/lang/String;
+METHOD|bsh.servlet.BshServlet.showScriptContextHTML(Ljava/lang/String;II)Ljava/lang/String;
+METHOD|bsh.servlet.BshServlet.doPost(Ljavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;)V
+METHOD|bsh.servlet.BshServlet.evalScript(Ljava/lang/String;Ljava/lang/StringBuffer;ZLjavax/servlet/http/HttpServletRequest;Ljavax/servlet/http/HttpServletResponse;)Ljava/lang/Object;
+METHOD|bsh.servlet.BshServlet.escape(Ljava/lang/String;)Ljava/lang/String;
+METHOD|bsh.servlet.BshServlet.class$(Ljava/lang/String;)Ljava/lang/Class;
+METHOD|bsh.servlet.BshServlet.<clinit>()V
+METHOD|bsh.servlet.SimpleTemplate.getTemplate(Ljava/lang/String;)Lbsh/servlet/SimpleTemplate;
+METHOD|bsh.servlet.SimpleTemplate.getStringFromStream(Ljava/io/InputStream;)Ljava/lang/String;
+METHOD|bsh.servlet.SimpleTemplate.getStringFromStream(Ljava/io/Reader;)Ljava/lang/String;
+METHOD|bsh.servlet.SimpleTemplate.<init>(Ljava/lang/String;)V
+METHOD|bsh.servlet.SimpleTemplate.<init>(Ljava/io/Reader;)V
+METHOD|bsh.servlet.SimpleTemplate.<init>(Ljava/net/URL;)V
+METHOD|bsh.servlet.SimpleTemplate.init(Ljava/lang/String;)V
+METHOD|bsh.servlet.SimpleTemplate.replace(Ljava/lang/String;Ljava/lang/String;)V
+METHOD|bsh.servlet.SimpleTemplate.findTemplate(Ljava/lang/String;)[I
+METHOD|bsh.servlet.SimpleTemplate.toString()Ljava/lang/String;
+METHOD|bsh.servlet.SimpleTemplate.write(Ljava/io/PrintWriter;)V
+METHOD|bsh.servlet.SimpleTemplate.write(Ljava/io/PrintStream;)V
+METHOD|bsh.servlet.SimpleTemplate.main([Ljava/lang/String;)V
+METHOD|bsh.servlet.SimpleTemplate.setCacheTemplates(Z)V
+METHOD|bsh.servlet.SimpleTemplate.<clinit>()V
+METHOD|bsh.util.AWTConsole$1.<init>(Ljava/awt/Frame;)V
+METHOD|bsh.util.AWTConsole$1.windowClosing(Ljava/awt/event/WindowEvent;)V
+METHOD|bsh.util.AWTConsole.getIn()Ljava/io/Reader;
+METHOD|bsh.util.AWTConsole.getOut()Ljava/io/PrintStream;
+METHOD|bsh.util.AWTConsole.getErr()Ljava/io/PrintStream;
+METHOD|bsh.util.AWTConsole.<init>(IILjava/io/InputStream;Ljava/io/OutputStream;)V
+METHOD|bsh.util.AWTConsole.keyPressed(Ljava/awt/event/KeyEvent;)V
+METHOD|bsh.util.AWTConsole.<init>()V
+METHOD|bsh.util.AWTConsole.<init>(Ljava/io/InputStream;Ljava/io/OutputStream;)V
+METHOD|bsh.util.AWTConsole.type(ICI)V
+METHOD|bsh.util.AWTConsole.doChar(C)V
+METHOD|bsh.util.AWTConsole.enter()V
+METHOD|bsh.util.AWTConsole.setCaretPosition(I)V
+METHOD|bsh.util.AWTConsole.countNLs()I
+METHOD|bsh.util.AWTConsole.historyUp()V
+METHOD|bsh.util.AWTConsole.historyDown()V
+METHOD|bsh.util.AWTConsole.showHistoryLine()V
+METHOD|bsh.util.AWTConsole.acceptLine(Ljava/lang/String;)V
+METHOD|bsh.util.AWTConsole.println(Ljava/lang/Object;)V
+METHOD|bsh.util.AWTConsole.error(Ljava/lang/Object;)V
+METHOD|bsh.util.AWTConsole.print(Ljava/lang/Object;Ljava/awt/Color;)V
+METHOD|bsh.util.AWTConsole.print(Ljava/lang/Object;)V
+METHOD|bsh.util.AWTConsole.inPipeWatcher()V
+METHOD|bsh.util.AWTConsole.run()V
+METHOD|bsh.util.AWTConsole.main([Ljava/lang/String;)V
+METHOD|bsh.util.AWTConsole.toString()Ljava/lang/String;
+METHOD|bsh.util.AWTConsole.keyTyped(Ljava/awt/event/KeyEvent;)V
+METHOD|bsh.util.AWTConsole.keyReleased(Ljava/awt/event/KeyEvent;)V
+METHOD|bsh.util.AWTDemoApplet.<init>()V
+METHOD|bsh.util.AWTDemoApplet.init()V
+METHOD|bsh.util.AWTRemoteApplet.<init>()V
+METHOD|bsh.util.AWTRemoteApplet.init()V
+METHOD|bsh.util.BeanShellBSFEngine.<init>()V
+METHOD|bsh.util.BeanShellBSFEngine.initialize(Lorg/apache/bsf/BSFManager;Ljava/lang/String;Ljava/util/Vector;)V
+METHOD|bsh.util.BeanShellBSFEngine.setDebug(Z)V
+METHOD|bsh.util.BeanShellBSFEngine.call(Ljava/lang/Object;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/Object;
+METHOD|bsh.util.BeanShellBSFEngine.apply(Ljava/lang/String;IILjava/lang/Object;Ljava/util/Vector;Ljava/util/Vector;)Ljava/lang/Object;
+METHOD|bsh.util.BeanShellBSFEngine.eval(Ljava/lang/String;IILjava/lang/Object;)Ljava/lang/Object;
+METHOD|bsh.util.BeanShellBSFEngine.exec(Ljava/lang/String;IILjava/lang/Object;)V
+METHOD|bsh.util.BeanShellBSFEngine.declareBean(Lorg/apache/bsf/BSFDeclaredBean;)V
+METHOD|bsh.util.BeanShellBSFEngine.undeclareBean(Lorg/apache/bsf/BSFDeclaredBean;)V
+METHOD|bsh.util.BeanShellBSFEngine.terminate()V
+METHOD|bsh.util.BeanShellBSFEngine.sourceInfo(Ljava/lang/String;II)Ljava/lang/String;
+METHOD|bsh.util.BshCanvas.<init>()V
+METHOD|bsh.util.BshCanvas.<init>(Lbsh/This;)V
+METHOD|bsh.util.BshCanvas.paintComponent(Ljava/awt/Graphics;)V
+METHOD|bsh.util.BshCanvas.getBufferedGraphics()Ljava/awt/Graphics;
+METHOD|bsh.util.BshCanvas.setBounds(IIII)V
+METHOD|bsh.util.ClassBrowser$1.<init>(Lbsh/util/ClassBrowser;)V
+METHOD|bsh.util.ClassBrowser$1.valueChanged(Ljavax/swing/event/TreeSelectionEvent;)V
+METHOD|bsh.util.ClassBrowser$2.<init>(Lbsh/util/ClassBrowser;)V
+METHOD|bsh.util.ClassBrowser$2.valueChanged(Ljavax/swing/event/TreeSelectionEvent;)V
+METHOD|bsh.util.ClassBrowser$PackageTree.<init>(Lbsh/util/ClassBrowser;Ljava/util/Collection;)V
+METHOD|bsh.util.ClassBrowser$PackageTree.setPackages(Ljava/util/Collection;)V
+METHOD|bsh.util.ClassBrowser$PackageTree.makeTreeModel(Ljava/util/Collection;)Ljavax/swing/tree/DefaultTreeModel;
+METHOD|bsh.util.ClassBrowser$PackageTree.makeNode(Ljava/util/Map;Ljava/lang/String;)Ljavax/swing/tree/MutableTreeNode;
+METHOD|bsh.util.ClassBrowser$PackageTree.mapNodes(Ljavax/swing/tree/TreeNode;)V
+METHOD|bsh.util.ClassBrowser$PackageTree.addNodeMap(Ljavax/swing/tree/TreeNode;)V
+METHOD|bsh.util.ClassBrowser$PackageTree.setSelectedPackage(Ljava/lang/String;)V
+METHOD|bsh.util.ClassBrowser.<init>()V
+METHOD|bsh.util.ClassBrowser.<init>(Lbsh/BshClassManager;)V
+METHOD|bsh.util.ClassBrowser.toSortedStrings(Ljava/util/Collection;)[Ljava/lang/String;
+METHOD|bsh.util.ClassBrowser.setClist(Ljava/lang/String;)V
+METHOD|bsh.util.ClassBrowser.parseConstructors([Ljava/lang/reflect/Constructor;)[Ljava/lang/String;
+METHOD|bsh.util.ClassBrowser.parseMethods([Ljava/lang/reflect/Method;)[Ljava/lang/String;
+METHOD|bsh.util.ClassBrowser.parseFields([Ljava/lang/reflect/Field;)[Ljava/lang/String;
+METHOD|bsh.util.ClassBrowser.getPublicConstructors([Ljava/lang/reflect/Constructor;)[Ljava/lang/reflect/Constructor;
+METHOD|bsh.util.ClassBrowser.getPublicMethods([Ljava/lang/reflect/Method;)[Ljava/lang/reflect/Method;
+METHOD|bsh.util.ClassBrowser.getPublicFields([Ljava/lang/reflect/Field;)[Ljava/lang/reflect/Field;
+METHOD|bsh.util.ClassBrowser.setConslist(Ljava/lang/Class;)V
+METHOD|bsh.util.ClassBrowser.setMlist(Ljava/lang/String;)V
+METHOD|bsh.util.ClassBrowser.setFieldList(Ljava/lang/Class;)V
+METHOD|bsh.util.ClassBrowser.setMethodLine(Ljava/lang/Object;)V
+METHOD|bsh.util.ClassBrowser.setClassTree(Ljava/lang/Class;)V
+METHOD|bsh.util.ClassBrowser.labeledPane(Ljavax/swing/JComponent;Ljava/lang/String;)Ljavax/swing/JPanel;
+METHOD|bsh.util.ClassBrowser.init()V
+METHOD|bsh.util.ClassBrowser.splitPane(IZLjavax/swing/JComponent;Ljavax/swing/JComponent;)Ljavax/swing/JSplitPane;
+METHOD|bsh.util.ClassBrowser.main([Ljava/lang/String;)V
+METHOD|bsh.util.ClassBrowser.setFrame(Ljavax/swing/JFrame;)V
+METHOD|bsh.util.ClassBrowser.setFrame(Ljavax/swing/JInternalFrame;)V
+METHOD|bsh.util.ClassBrowser.valueChanged(Ljavax/swing/event/ListSelectionEvent;)V
+METHOD|bsh.util.ClassBrowser.driveToClass(Ljava/lang/String;)V
+METHOD|bsh.util.ClassBrowser.toFront()V
+METHOD|bsh.util.ClassBrowser.classPathChanged()V
+METHOD|bsh.util.ClassBrowser.<clinit>()V
+METHOD|bsh.util.GUIConsoleInterface.print(Ljava/lang/Object;Ljava/awt/Color;)V
+METHOD|bsh.util.GUIConsoleInterface.setNameCompletion(Lbsh/util/NameCompletion;)V
+METHOD|bsh.util.GUIConsoleInterface.setWaitFeedback(Z)V
+METHOD|bsh.util.Httpd.main([Ljava/lang/String;)V
+METHOD|bsh.util.Httpd.<init>(I)V
+METHOD|bsh.util.Httpd.run()V
+METHOD|bsh.util.HttpdConnection.<init>(Ljava/net/Socket;)V
+METHOD|bsh.util.HttpdConnection.run()V
+METHOD|bsh.util.HttpdConnection.serveFile(Ljava/lang/String;)V
+METHOD|bsh.util.HttpdConnection.sendFileData(Ljava/lang/String;)V
+METHOD|bsh.util.HttpdConnection.error(ILjava/lang/String;)V
+METHOD|bsh.util.JConsole$1.<init>(Lbsh/util/JConsole;Ljavax/swing/text/StyledDocument;)V
+METHOD|bsh.util.JConsole$1.cut()V
+METHOD|bsh.util.JConsole$1.paste()V
+METHOD|bsh.util.JConsole$2.<init>(Lbsh/util/JConsole;Ljava/lang/Object;)V
+METHOD|bsh.util.JConsole$2.run()V
+METHOD|bsh.util.JConsole$3.<init>(Lbsh/util/JConsole;Ljavax/swing/Icon;)V
+METHOD|bsh.util.JConsole$3.run()V
+METHOD|bsh.util.JConsole$4.<init>(Lbsh/util/JConsole;Ljava/awt/Font;Ljava/awt/Color;Ljava/lang/Object;)V
+METHOD|bsh.util.JConsole$4.run()V
+METHOD|bsh.util.JConsole$5.<init>(Lbsh/util/JConsole;Ljava/lang/String;ILjava/awt/Color;ZZZLjava/lang/Object;)V
+METHOD|bsh.util.JConsole$5.run()V
+METHOD|bsh.util.JConsole$BlockingPipedInputStream.<init>(Ljava/io/PipedOutputStream;)V
+METHOD|bsh.util.JConsole$BlockingPipedInputStream.read()I
+METHOD|bsh.util.JConsole$BlockingPipedInputStream.close()V
+METHOD|bsh.util.JConsole.getInputStream()Ljava/io/InputStream;
+METHOD|bsh.util.JConsole.getIn()Ljava/io/Reader;
+METHOD|bsh.util.JConsole.getOut()Ljava/io/PrintStream;
+METHOD|bsh.util.JConsole.getErr()Ljava/io/PrintStream;
+METHOD|bsh.util.JConsole.<init>()V
+METHOD|bsh.util.JConsole.<init>(Ljava/io/InputStream;Ljava/io/OutputStream;)V
+METHOD|bsh.util.JConsole.requestFocus()V
+METHOD|bsh.util.JConsole.keyPressed(Ljava/awt/event/KeyEvent;)V
+METHOD|bsh.util.JConsole.keyTyped(Ljava/awt/event/KeyEvent;)V
+METHOD|bsh.util.JConsole.keyReleased(Ljava/awt/event/KeyEvent;)V
+METHOD|bsh.util.JConsole.type(Ljava/awt/event/KeyEvent;)V
+METHOD|bsh.util.JConsole.doCommandCompletion(Ljava/lang/String;)V
+METHOD|bsh.util.JConsole.resetCommandStart()V
+METHOD|bsh.util.JConsole.append(Ljava/lang/String;)V
+METHOD|bsh.util.JConsole.replaceRange(Ljava/lang/Object;II)Ljava/lang/String;
+METHOD|bsh.util.JConsole.forceCaretMoveToEnd()V
+METHOD|bsh.util.JConsole.forceCaretMoveToStart()V
+METHOD|bsh.util.JConsole.enter()V
+METHOD|bsh.util.JConsole.getCmd()Ljava/lang/String;
+METHOD|bsh.util.JConsole.historyUp()V
+METHOD|bsh.util.JConsole.historyDown()V
+METHOD|bsh.util.JConsole.showHistoryLine()V
+METHOD|bsh.util.JConsole.acceptLine(Ljava/lang/String;)V
+METHOD|bsh.util.JConsole.println(Ljava/lang/Object;)V
+METHOD|bsh.util.JConsole.print(Ljava/lang/Object;)V
+METHOD|bsh.util.JConsole.println()V
+METHOD|bsh.util.JConsole.error(Ljava/lang/Object;)V
+METHOD|bsh.util.JConsole.println(Ljavax/swing/Icon;)V
+METHOD|bsh.util.JConsole.print(Ljavax/swing/Icon;)V
+METHOD|bsh.util.JConsole.print(Ljava/lang/Object;Ljava/awt/Font;)V
+METHOD|bsh.util.JConsole.print(Ljava/lang/Object;Ljava/awt/Color;)V
+METHOD|bsh.util.JConsole.print(Ljava/lang/Object;Ljava/awt/Font;Ljava/awt/Color;)V
+METHOD|bsh.util.JConsole.print(Ljava/lang/Object;Ljava/lang/String;ILjava/awt/Color;)V
+METHOD|bsh.util.JConsole.print(Ljava/lang/Object;Ljava/lang/String;ILjava/awt/Color;ZZZ)V
+METHOD|bsh.util.JConsole.setStyle(Ljava/awt/Font;)Ljavax/swing/text/AttributeSet;
+METHOD|bsh.util.JConsole.setStyle(Ljava/awt/Color;)Ljavax/swing/text/AttributeSet;
+METHOD|bsh.util.JConsole.setStyle(Ljava/awt/Font;Ljava/awt/Color;)Ljavax/swing/text/AttributeSet;
+METHOD|bsh.util.JConsole.setStyle(Ljava/lang/String;ILjava/awt/Color;)Ljavax/swing/text/AttributeSet;
+METHOD|bsh.util.JConsole.setStyle(Ljava/lang/String;ILjava/awt/Color;ZZZ)Ljavax/swing/text/AttributeSet;
+METHOD|bsh.util.JConsole.setStyle(Ljavax/swing/text/AttributeSet;)V
+METHOD|bsh.util.JConsole.setStyle(Ljavax/swing/text/AttributeSet;Z)V
+METHOD|bsh.util.JConsole.getStyle()Ljavax/swing/text/AttributeSet;
+METHOD|bsh.util.JConsole.setFont(Ljava/awt/Font;)V
+METHOD|bsh.util.JConsole.inPipeWatcher()V
+METHOD|bsh.util.JConsole.run()V
+METHOD|bsh.util.JConsole.toString()Ljava/lang/String;
+METHOD|bsh.util.JConsole.mouseClicked(Ljava/awt/event/MouseEvent;)V
+METHOD|bsh.util.JConsole.mousePressed(Ljava/awt/event/MouseEvent;)V
+METHOD|bsh.util.JConsole.mouseReleased(Ljava/awt/event/MouseEvent;)V
+METHOD|bsh.util.JConsole.mouseEntered(Ljava/awt/event/MouseEvent;)V
+METHOD|bsh.util.JConsole.mouseExited(Ljava/awt/event/MouseEvent;)V
+METHOD|bsh.util.JConsole.propertyChange(Ljava/beans/PropertyChangeEvent;)V
+METHOD|bsh.util.JConsole.actionPerformed(Ljava/awt/event/ActionEvent;)V
+METHOD|bsh.util.JConsole.invokeAndWait(Ljava/lang/Runnable;)V
+METHOD|bsh.util.JConsole.setNameCompletion(Lbsh/util/NameCompletion;)V
+METHOD|bsh.util.JConsole.setWaitFeedback(Z)V
+METHOD|bsh.util.JConsole.textLength()I
+METHOD|bsh.util.JConsole.access$000(Lbsh/util/JConsole;)Ljavax/swing/JTextPane;
+METHOD|bsh.util.JConsole.access$100(Lbsh/util/JConsole;)I
+METHOD|bsh.util.JConsole.access$200(Lbsh/util/JConsole;)V
+METHOD|bsh.util.JConsole.access$300(Lbsh/util/JConsole;Ljava/lang/String;)V
+METHOD|bsh.util.JConsole.access$400(Lbsh/util/JConsole;)V
+METHOD|bsh.util.JConsole.access$500(Lbsh/util/JConsole;)Ljavax/swing/text/AttributeSet;
+METHOD|bsh.util.JConsole.access$600(Lbsh/util/JConsole;Ljava/awt/Font;Ljava/awt/Color;)Ljavax/swing/text/AttributeSet;
+METHOD|bsh.util.JConsole.access$700(Lbsh/util/JConsole;Ljavax/swing/text/AttributeSet;Z)V
+METHOD|bsh.util.JConsole.access$800(Lbsh/util/JConsole;Ljava/lang/String;ILjava/awt/Color;ZZZ)Ljavax/swing/text/AttributeSet;
+METHOD|bsh.util.JDemoApplet.<init>()V
+METHOD|bsh.util.JDemoApplet.init()V
+METHOD|bsh.util.JRemoteApplet.<init>()V
+METHOD|bsh.util.JRemoteApplet.init()V
+METHOD|bsh.util.NameCompletion.completeName(Ljava/lang/String;)[Ljava/lang/String;
+METHOD|bsh.util.NameCompletionTable.<init>()V
+METHOD|bsh.util.NameCompletionTable.add(Lbsh/util/NameCompletionTable;)V
+METHOD|bsh.util.NameCompletionTable.add(Lbsh/NameSource;)V
+METHOD|bsh.util.NameCompletionTable.getMatchingNames(Ljava/lang/String;Ljava/util/List;)V
+METHOD|bsh.util.NameCompletionTable.completeName(Ljava/lang/String;)[Ljava/lang/String;
+METHOD|bsh.util.Sessiond.<init>(Lbsh/NameSpace;I)V
+METHOD|bsh.util.Sessiond.run()V
+METHOD|bsh.util.SessiondConnection.<init>(Lbsh/NameSpace;Ljava/net/Socket;)V
+METHOD|bsh.util.SessiondConnection.run()V
+METHOD|bsh.util.Util.<init>()V
+METHOD|bsh.util.Util.startSplashScreen()V
+METHOD|bsh.util.Util.endSplashScreen()V
+METHOD|bsh.util.Util.class$(Ljava/lang/String;)Ljava/lang/Class;
+METHOD|com.beust.testng.TestNG.<init>()V
+METHOD|com.beust.testng.TestNGAntTask.<init>()V
+METHOD|com.thoughtworks.qdox.JavaDocBuilder$1.<init>(Lcom/thoughtworks/qdox/JavaDocBuilder;)V
+METHOD|com.thoughtworks.qdox.JavaDocBuilder$1.visitFile(Ljava/io/File;)V
+METHOD|com.thoughtworks.qdox.JavaDocBuilder.<init>()V
+METHOD|com.thoughtworks.qdox.JavaDocBuilder.<init>(Lcom/thoughtworks/qdox/model/DocletTagFactory;)V
+METHOD|com.thoughtworks.qdox.JavaDocBuilder.addClasses(Lcom/thoughtworks/qdox/model/JavaSource;)V
+METHOD|com.thoughtworks.qdox.JavaDocBuilder.addClass(Lcom/thoughtworks/qdox/model/JavaClass;)V
+METHOD|com.thoughtworks.qdox.JavaDocBuilder.getClassByName(Ljava/lang/String;)Lcom/thoughtworks/qdox/model/JavaClass;
+METHOD|com.thoughtworks.qdox.JavaDocBuilder.createUnknownClass(Ljava/lang/String;)Lcom/thoughtworks/qdox/model/JavaClass;
+METHOD|com.thoughtworks.qdox.JavaDocBuilder.createBinaryClass(Ljava/lang/String;)Lcom/thoughtworks/qdox/model/JavaClass;
+METHOD|com.thoughtworks.qdox.JavaDocBuilder.addModifiers(Ljava/util/Set;I)V
+METHOD|com.thoughtworks.qdox.JavaDocBuilder.addField(Ljava/lang/reflect/Field;Lcom/thoughtworks/qdox/model/ModelBuilder;)V
+METHOD|com.thoughtworks.qdox.JavaDocBuilder.addMethodOrConstructor(Ljava/lang/reflect/Member;Lcom/thoughtworks/qdox/model/ModelBuilder;)V
+METHOD|com.thoughtworks.qdox.JavaDocBuilder.getDimension(Ljava/lang/Class;)I
+METHOD|com.thoughtworks.qdox.JavaDocBuilder.getTypeName(Ljava/lang/Class;)Ljava/lang/String;
+METHOD|com.thoughtworks.qdox.JavaDocBuilder.getPackageName(Ljava/lang/String;)Ljava/lang/String;
+METHOD|com.thoughtworks.qdox.JavaDocBuilder.getClassName(Ljava/lang/String;)Ljava/lang/String;
+METHOD|com.thoughtworks.qdox.JavaDocBuilder.addSource(Ljava/io/Reader;)Lcom/thoughtworks/qdox/model/JavaSource;
+METHOD|com.thoughtworks.qdox.JavaDocBuilder.addSource(Ljava/io/Reader;Ljava/lang/String;)Lcom/thoughtworks/qdox/model/JavaSource;
+METHOD|com.thoughtworks.qdox.JavaDocBuilder.addSource(Ljava/io/File;)Lcom/thoughtworks/qdox/model/JavaSource;
+METHOD|com.thoughtworks.qdox.JavaDocBuilder.addSource(Ljava/net/URL;)Lcom/thoughtworks/qdox/model/JavaSource;
+METHOD|com.thoughtworks.qdox.JavaDocBuilder.getSources()[Lcom/thoughtworks/qdox/model/JavaSource;
+METHOD|com.thoughtworks.qdox.JavaDocBuilder.getClasses()[Lcom/thoughtworks/qdox/model/JavaClass;
+METHOD|com.thoughtworks.qdox.JavaDocBuilder.addClassesRecursive(Lcom/thoughtworks/qdox/model/JavaSource;Ljava/util/Set;)V
+METHOD|com.thoughtworks.qdox.JavaDocBuilder.addClassesRecursive(Lcom/thoughtworks/qdox/model/JavaClass;Ljava/util/Set;)V
+METHOD|com.thoughtworks.qdox.JavaDocBuilder.addSourceTree(Ljava/io/File;)V
+METHOD|com.thoughtworks.qdox.JavaDocBuilder.search(Lcom/thoughtworks/qdox/Searcher;)Ljava/util/List;
+METHOD|com.thoughtworks.qdox.JavaDocBuilder.getClassLibrary()Lcom/thoughtworks/qdox/model/ClassLibrary;
+METHOD|com.thoughtworks.qdox.JavaDocBuilder.save(Ljava/io/File;)V
+METHOD|com.thoughtworks.qdox.JavaDocBuilder.load(Ljava/io/File;)Lcom/thoughtworks/qdox/JavaDocBuilder;
+METHOD|com.thoughtworks.qdox.JavaDocBuilder.setEncoding(Ljava/lang/String;)V
+METHOD|com.thoughtworks.qdox.JavaDocBuilder.access$000(Lcom/thoughtworks/qdox/JavaDocBuilder;)Ljava/lang/String;
+METHOD|com.thoughtworks.qdox.Searcher.eval(Lcom/thoughtworks/qdox/model/JavaClass;)Z
+METHOD|com.thoughtworks.qdox.ant.AbstractQdoxTask.<init>()V
+METHOD|com.thoughtworks.qdox.ant.AbstractQdoxTask.addFileset(Lorg/apache/tools/ant/types/FileSet;)V
+METHOD|com.thoughtworks.qdox.ant.AbstractQdoxTask.buildFileMap()V
+METHOD|com.thoughtworks.qdox.ant.AbstractQdoxTask.buildFileMap(Ljava/io/File;[Ljava/lang/String;)V
+METHOD|com.thoughtworks.qdox.ant.AbstractQdoxTask.execute()V
+METHOD|com.thoughtworks.qdox.ant.AbstractQdoxTask.createDocletTagFactory()Lcom/thoughtworks/qdox/model/DocletTagFactory;
+METHOD|com.thoughtworks.qdox.ant.AbstractQdoxTask.mergeBuilderSources(Lcom/thoughtworks/qdox/JavaDocBuilder;)V
+METHOD|com.thoughtworks.qdox.ant.AbstractQdoxTask.processSources([Lcom/thoughtworks/qdox/model/JavaSource;)V
+METHOD|com.thoughtworks.qdox.ant.AbstractQdoxTask.processClasses([Lcom/thoughtworks/qdox/model/JavaClass;)V
+METHOD|com.thoughtworks.qdox.ant.AbstractQdoxTask.validateAttributes()V
+METHOD|com.thoughtworks.qdox.directorywalker.DirectoryScanner$1.<init>(Lcom/thoughtworks/qdox/directorywalker/DirectoryScanner;Ljava/util/List;)V
+METHOD|com.thoughtworks.qdox.directorywalker.DirectoryScanner$1.visitFile(Ljava/io/File;)V
+METHOD|com.thoughtworks.qdox.directorywalker.DirectoryScanner.<init>(Ljava/io/File;)V
+METHOD|com.thoughtworks.qdox.directorywalker.DirectoryScanner.scan()[Ljava/io/File;
+METHOD|com.thoughtworks.qdox.directorywalker.DirectoryScanner.walk(Lcom/thoughtworks/qdox/directorywalker/FileVisitor;Ljava/io/File;)V
+METHOD|com.thoughtworks.qdox.directorywalker.DirectoryScanner.addFilter(Lcom/thoughtworks/qdox/directorywalker/Filter;)V
+METHOD|com.thoughtworks.qdox.directorywalker.DirectoryScanner.scan(Lcom/thoughtworks/qdox/directorywalker/FileVisitor;)V
+METHOD|com.thoughtworks.qdox.directorywalker.FileVisitor.visitFile(Ljava/io/File;)V
+METHOD|com.thoughtworks.qdox.directorywalker.Filter.filter(Ljava/io/File;)Z
+METHOD|com.thoughtworks.qdox.directorywalker.SuffixFilter.<init>(Ljava/lang/String;)V
+METHOD|com.thoughtworks.qdox.directorywalker.SuffixFilter.filter(Ljava/io/File;)Z
+METHOD|com.thoughtworks.qdox.junit.APITestCase$1.<init>()V
+METHOD|com.thoughtworks.qdox.junit.APITestCase$1.compare(Ljava/lang/Object;Ljava/lang/Object;)I
+METHOD|com.thoughtworks.qdox.junit.APITestCase.<init>()V
+METHOD|com.thoughtworks.qdox.junit.APITestCase.assertApiEquals(Ljava/net/URL;Ljava/net/URL;)V
+METHOD|com.thoughtworks.qdox.junit.APITestCase.assertApiEquals(Lcom/thoughtworks/qdox/model/JavaSource;Lcom/thoughtworks/qdox/model/JavaSource;)V
+METHOD|com.thoughtworks.qdox.junit.APITestCase.assertClassesEqual(Lcom/thoughtworks/qdox/model/JavaClass;Lcom/thoughtworks/qdox/model/JavaClass;)V
+METHOD|com.thoughtworks.qdox.junit.APITestCase.assertFieldEquals(Lcom/thoughtworks/qdox/model/JavaField;Lcom/thoughtworks/qdox/model/JavaField;)V
+METHOD|com.thoughtworks.qdox.junit.APITestCase.assertFieldsEqual(Lcom/thoughtworks/qdox/model/JavaClass;Lcom/thoughtworks/qdox/model/JavaClass;)V
+METHOD|com.thoughtworks.qdox.junit.APITestCase.assertInnerClassesEquals(Lcom/thoughtworks/qdox/model/JavaClass;Lcom/thoughtworks/qdox/model/JavaClass;)V
+METHOD|com.thoughtworks.qdox.junit.APITestCase.assertInterfacesEqual(Lcom/thoughtworks/qdox/model/JavaClass;Lcom/thoughtworks/qdox/model/JavaClass;)V
+METHOD|com.thoughtworks.qdox.junit.APITestCase.assertMethodsEqual(Lcom/thoughtworks/qdox/model/JavaClass;Lcom/thoughtworks/qdox/model/JavaClass;)V
+METHOD|com.thoughtworks.qdox.junit.APITestCase.assertModifiersEquals(Ljava/lang/String;Lcom/thoughtworks/qdox/model/AbstractJavaEntity;Lcom/thoughtworks/qdox/model/AbstractJavaEntity;)V
+METHOD|com.thoughtworks.qdox.junit.APITestCase.assertNotDir(Ljava/io/File;Ljava/io/File;)V
+METHOD|com.thoughtworks.qdox.junit.APITestCase.getDir()Ljava/io/File;
+METHOD|com.thoughtworks.qdox.junit.APITestCase.getRootDir()Ljava/io/File;
+METHOD|com.thoughtworks.qdox.junit.APITestCase.<clinit>()V
+METHOD|com.thoughtworks.qdox.model.AbstractInheritableJavaEntity.getTagByName(Ljava/lang/String;Z)Lcom/thoughtworks/qdox/model/DocletTag;
+METHOD|com.thoughtworks.qdox.model.AbstractInheritableJavaEntity.<init>(Lcom/thoughtworks/qdox/model/JavaClassParent;I)V
+METHOD|com.thoughtworks.qdox.model.AbstractInheritableJavaEntity.getTagsByName(Ljava/lang/String;Z)[Lcom/thoughtworks/qdox/model/DocletTag;
+METHOD|com.thoughtworks.qdox.model.AbstractJavaEntity.<init>(Lcom/thoughtworks/qdox/model/JavaClassParent;I)V
+METHOD|com.thoughtworks.qdox.model.AbstractJavaEntity.getLineNumber()I
+METHOD|com.thoughtworks.qdox.model.AbstractJavaEntity.getName()Ljava/lang/String;
+METHOD|com.thoughtworks.qdox.model.AbstractJavaEntity.getModifiers()[Ljava/lang/String;
+METHOD|com.thoughtworks.qdox.model.AbstractJavaEntity.getComment()Ljava/lang/String;
+METHOD|com.thoughtworks.qdox.model.AbstractJavaEntity.getTags()[Lcom/thoughtworks/qdox/model/DocletTag;
+METHOD|com.thoughtworks.qdox.model.AbstractJavaEntity.getTagsByName(Ljava/lang/String;)[Lcom/thoughtworks/qdox/model/DocletTag;
+METHOD|com.thoughtworks.qdox.model.AbstractJavaEntity.getTagByName(Ljava/lang/String;)Lcom/thoughtworks/qdox/model/DocletTag;
+METHOD|com.thoughtworks.qdox.model.AbstractJavaEntity.getNamedParameter(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+METHOD|com.thoughtworks.qdox.model.AbstractJavaEntity.commentHeader(Lcom/thoughtworks/qdox/model/IndentBuffer;)V
+METHOD|com.thoughtworks.qdox.model.AbstractJavaEntity.toString()Ljava/lang/String;
+METHOD|com.thoughtworks.qdox.model.AbstractJavaEntity.write(Lcom/thoughtworks/qdox/model/IndentBuffer;)V
+METHOD|com.thoughtworks.qdox.model.AbstractJavaEntity.writeBody(Lcom/thoughtworks/qdox/model/IndentBuffer;)V
+METHOD|com.thoughtworks.qdox.model.AbstractJavaEntity.setName(Ljava/lang/String;)V
+METHOD|com.thoughtworks.qdox.model.AbstractJavaEntity.setModifiers([Ljava/lang/String;)V
+METHOD|com.thoughtworks.qdox.model.AbstractJavaEntity.setComment(Ljava/lang/String;)V
+METHOD|com.thoughtworks.qdox.model.AbstractJavaEntity.setTags(Ljava/util/List;)V
+METHOD|com.thoughtworks.qdox.model.AbstractJavaEntity.isAbstract()Z
+METHOD|com.thoughtworks.qdox.model.AbstractJavaEntity.isPublic()Z
+METHOD|com.thoughtworks.qdox.model.AbstractJavaEntity.isPrivate()Z
+METHOD|com.thoughtworks.qdox.model.AbstractJavaEntity.isProtected()Z
+METHOD|com.thoughtworks.qdox.model.AbstractJavaEntity.isStatic()Z
+METHOD|com.thoughtworks.qdox.model.AbstractJavaEntity.isFinal()Z
+METHOD|com.thoughtworks.qdox.model.AbstractJavaEntity.isSynchronized()Z
+METHOD|com.thoughtworks.qdox.model.AbstractJavaEntity.isTransient()Z
+METHOD|com.thoughtworks.qdox.model.AbstractJavaEntity.isVolatile()Z
+METHOD|com.thoughtworks.qdox.model.AbstractJavaEntity.isNative()Z
+METHOD|com.thoughtworks.qdox.model.AbstractJavaEntity.isStrictfp()Z
+METHOD|com.thoughtworks.qdox.model.AbstractJavaEntity.isModifierPresent(Ljava/lang/String;)Z
+METHOD|com.thoughtworks.qdox.model.AbstractJavaEntity.writeNonAccessibilityModifiers(Lcom/thoughtworks/qdox/model/IndentBuffer;)V
+METHOD|com.thoughtworks.qdox.model.AbstractJavaEntity.writeAccessibilityModifier(Lcom/thoughtworks/qdox/model/IndentBuffer;)V
+METHOD|com.thoughtworks.qdox.model.AbstractJavaEntity.writeAllModifiers(Lcom/thoughtworks/qdox/model/IndentBuffer;)V
+METHOD|com.thoughtworks.qdox.model.AbstractJavaEntity.getParent()Lcom/thoughtworks/qdox/model/JavaClassParent;
+METHOD|com.thoughtworks.qdox.model.AbstractJavaEntity.getSource()Lcom/thoughtworks/qdox/model/JavaSource;
+METHOD|com.thoughtworks.qdox.model.AbstractJavaEntity.compareTo(Ljava/lang/Object;)I
+METHOD|com.thoughtworks.qdox.model.BeanProperty.<init>(Ljava/lang/String;)V
+METHOD|com.thoughtworks.qdox.model.BeanProperty.getName()Ljava/lang/String;
+METHOD|com.thoughtworks.qdox.model.BeanProperty.setType(Lcom/thoughtworks/qdox/model/Type;)V
+METHOD|com.thoughtworks.qdox.model.BeanProperty.getType()Lcom/thoughtworks/qdox/model/Type;
+METHOD|com.thoughtworks.qdox.model.BeanProperty.getAccessor()Lcom/thoughtworks/qdox/model/JavaMethod;
+METHOD|com.thoughtworks.qdox.model.BeanProperty.setAccessor(Lcom/thoughtworks/qdox/model/JavaMethod;)V
+METHOD|com.thoughtworks.qdox.model.BeanProperty.getMutator()Lcom/thoughtworks/qdox/model/JavaMethod;
+METHOD|com.thoughtworks.qdox.model.BeanProperty.setMutator(Lcom/thoughtworks/qdox/model/JavaMethod;)V
+METHOD|com.thoughtworks.qdox.model.ClassLibrary.<init>(Lcom/thoughtworks/qdox/model/JavaClassCache;)V
+METHOD|com.thoughtworks.qdox.model.ClassLibrary.add(Ljava/lang/String;)V
+METHOD|com.thoughtworks.qdox.model.ClassLibrary.getClassByName(Ljava/lang/String;)Lcom/thoughtworks/qdox/model/JavaClass;
+METHOD|com.thoughtworks.qdox.model.ClassLibrary.contains(Ljava/lang/String;)Z
+METHOD|com.thoughtworks.qdox.model.ClassLibrary.getClass(Ljava/lang/String;)Ljava/lang/Class;
+METHOD|com.thoughtworks.qdox.model.ClassLibrary.all()Ljava/util/Collection;
+METHOD|com.thoughtworks.qdox.model.ClassLibrary.addClassLoader(Ljava/lang/ClassLoader;)V
+METHOD|com.thoughtworks.qdox.model.ClassLibrary.addDefaultLoader()V
+METHOD|com.thoughtworks.qdox.model.ClassLibrary.readObject(Ljava/io/ObjectInputStream;)V
+METHOD|com.thoughtworks.qdox.model.DefaultDocletTag.<init>(Ljava/lang/String;Ljava/lang/String;Lcom/thoughtworks/qdox/model/AbstractJavaEntity;I)V
+METHOD|com.thoughtworks.qdox.model.DefaultDocletTag.<init>(Ljava/lang/String;Ljava/lang/String;)V
+METHOD|com.thoughtworks.qdox.model.DefaultDocletTag.getName()Ljava/lang/String;
+METHOD|com.thoughtworks.qdox.model.DefaultDocletTag.getValue()Ljava/lang/String;
+METHOD|com.thoughtworks.qdox.model.DefaultDocletTag.getParameters()[Ljava/lang/String;
+METHOD|com.thoughtworks.qdox.model.DefaultDocletTag.getNamedParameterMap()Ljava/util/Map;
+METHOD|com.thoughtworks.qdox.model.DefaultDocletTag.getNamedParameter(Ljava/lang/String;)Ljava/lang/String;
+METHOD|com.thoughtworks.qdox.model.DefaultDocletTag.getContext()Lcom/thoughtworks/qdox/model/AbstractJavaEntity;
+METHOD|com.thoughtworks.qdox.model.DefaultDocletTag.getLineNumber()I
+METHOD|com.thoughtworks.qdox.model.DefaultDocletTagFactory.<init>()V
+METHOD|com.thoughtworks.qdox.model.DefaultDocletTagFactory.createDocletTag(Ljava/lang/String;Ljava/lang/String;Lcom/thoughtworks/qdox/model/AbstractJavaEntity;I)Lcom/thoughtworks/qdox/model/DocletTag;
+METHOD|com.thoughtworks.qdox.model.DefaultDocletTagFactory.createDocletTag(Ljava/lang/String;Ljava/lang/String;)Lcom/thoughtworks/qdox/model/DocletTag;
+METHOD|com.thoughtworks.qdox.model.DocletTag.getName()Ljava/lang/String;
+METHOD|com.thoughtworks.qdox.model.DocletTag.getValue()Ljava/lang/String;
+METHOD|com.thoughtworks.qdox.model.DocletTag.getParameters()[Ljava/lang/String;
+METHOD|com.thoughtworks.qdox.model.DocletTag.getNamedParameter(Ljava/lang/String;)Ljava/lang/String;
+METHOD|com.thoughtworks.qdox.model.DocletTag.getNamedParameterMap()Ljava/util/Map;
+METHOD|com.thoughtworks.qdox.model.DocletTag.getLineNumber()I
+METHOD|com.thoughtworks.qdox.model.DocletTag.getContext()Lcom/thoughtworks/qdox/model/AbstractJavaEntity;
+METHOD|com.thoughtworks.qdox.model.DocletTagFactory.createDocletTag(Ljava/lang/String;Ljava/lang/String;Lcom/thoughtworks/qdox/model/AbstractJavaEntity;I)Lcom/thoughtworks/qdox/model/DocletTag;
+METHOD|com.thoughtworks.qdox.model.DocletTagFactory.createDocletTag(Ljava/lang/String;Ljava/lang/String;)Lcom/thoughtworks/qdox/model/DocletTag;
+METHOD|com.thoughtworks.qdox.model.IndentBuffer.<init>()V
+METHOD|com.thoughtworks.qdox.model.IndentBuffer.write(Ljava/lang/String;)V
+METHOD|com.thoughtworks.qdox.model.IndentBuffer.write(C)V
+METHOD|com.thoughtworks.qdox.model.IndentBuffer.newline()V
+METHOD|com.thoughtworks.qdox.model.IndentBuffer.indent()V
+METHOD|com.thoughtworks.qdox.model.IndentBuffer.deindent()V
+METHOD|com.thoughtworks.qdox.model.IndentBuffer.toString()Ljava/lang/String;
+METHOD|com.thoughtworks.qdox.model.IndentBuffer.checkNewLine()V
+METHOD|com.thoughtworks.qdox.model.JavaClass.<init>(Lcom/thoughtworks/qdox/model/JavaClassParent;I)V
+METHOD|com.thoughtworks.qdox.model.JavaClass.<init>(Lcom/thoughtworks/qdox/model/JavaClassParent;)V
+METHOD|com.thoughtworks.qdox.model.JavaClass.setJavaClassCache(Lcom/thoughtworks/qdox/model/JavaClassCache;)V
+METHOD|com.thoughtworks.qdox.model.JavaClass.isInterface()Z
+METHOD|com.thoughtworks.qdox.model.JavaClass.getSuperClass()Lcom/thoughtworks/qdox/model/Type;
+METHOD|com.thoughtworks.qdox.model.JavaClass.getSuperJavaClass()Lcom/thoughtworks/qdox/model/JavaClass;
+METHOD|com.thoughtworks.qdox.model.JavaClass.getImplements()[Lcom/thoughtworks/qdox/model/Type;
+METHOD|com.thoughtworks.qdox.model.JavaClass.getImplementedInterfaces()[Lcom/thoughtworks/qdox/model/JavaClass;
+METHOD|com.thoughtworks.qdox.model.JavaClass.writeBody(Lcom/thoughtworks/qdox/model/IndentBuffer;)V
+METHOD|com.thoughtworks.qdox.model.JavaClass.setInterface(Z)V
+METHOD|com.thoughtworks.qdox.model.JavaClass.addMethod(Lcom/thoughtworks/qdox/model/JavaMethod;)V
+METHOD|com.thoughtworks.qdox.model.JavaClass.setSuperClass(Lcom/thoughtworks/qdox/model/Type;)V
+METHOD|com.thoughtworks.qdox.model.JavaClass.setImplementz([Lcom/thoughtworks/qdox/model/Type;)V
+METHOD|com.thoughtworks.qdox.model.JavaClass.addField(Lcom/thoughtworks/qdox/model/JavaField;)V
+METHOD|com.thoughtworks.qdox.model.JavaClass.getParentSource()Lcom/thoughtworks/qdox/model/JavaSource;
+METHOD|com.thoughtworks.qdox.model.JavaClass.getPackage()Ljava/lang/String;
+METHOD|com.thoughtworks.qdox.model.JavaClass.getFullyQualifiedName()Ljava/lang/String;
+METHOD|com.thoughtworks.qdox.model.JavaClass.isInner()Z
+METHOD|com.thoughtworks.qdox.model.JavaClass.resolveType(Ljava/lang/String;)Ljava/lang/String;
+METHOD|com.thoughtworks.qdox.model.JavaClass.getClassLibrary()Lcom/thoughtworks/qdox/model/ClassLibrary;
+METHOD|com.thoughtworks.qdox.model.JavaClass.getClassNamePrefix()Ljava/lang/String;
+METHOD|com.thoughtworks.qdox.model.JavaClass.asType()Lcom/thoughtworks/qdox/model/Type;
+METHOD|com.thoughtworks.qdox.model.JavaClass.getMethods()[Lcom/thoughtworks/qdox/model/JavaMethod;
+METHOD|com.thoughtworks.qdox.model.JavaClass.getMethods(Z)[Lcom/thoughtworks/qdox/model/JavaMethod;
+METHOD|com.thoughtworks.qdox.model.JavaClass.addMethodsFromSuperclassAndInterfaces(Ljava/util/Set;Ljava/util/List;Lcom/thoughtworks/qdox/model/JavaClass;)V
+METHOD|com.thoughtworks.qdox.model.JavaClass.addNewMethods(Ljava/util/Set;Ljava/util/List;[Lcom/thoughtworks/qdox/model/JavaMethod;)V
+METHOD|com.thoughtworks.qdox.model.JavaClass.getMethodBySignature(Ljava/lang/String;[Lcom/thoughtworks/qdox/model/Type;)Lcom/thoughtworks/qdox/model/JavaMethod;
+METHOD|com.thoughtworks.qdox.model.JavaClass.getMethodBySignature(Ljava/lang/String;[Lcom/thoughtworks/qdox/model/Type;Z)Lcom/thoughtworks/qdox/model/JavaMethod;
+METHOD|com.thoughtworks.qdox.model.JavaClass.getMethodsBySignature(Ljava/lang/String;[Lcom/thoughtworks/qdox/model/Type;Z)[Lcom/thoughtworks/qdox/model/JavaMethod;
+METHOD|com.thoughtworks.qdox.model.JavaClass.getFields()[Lcom/thoughtworks/qdox/model/JavaField;
+METHOD|com.thoughtworks.qdox.model.JavaClass.getFieldByName(Ljava/lang/String;)Lcom/thoughtworks/qdox/model/JavaField;
+METHOD|com.thoughtworks.qdox.model.JavaClass.addClass(Lcom/thoughtworks/qdox/model/JavaClass;)V
+METHOD|com.thoughtworks.qdox.model.JavaClass.getClasses()[Lcom/thoughtworks/qdox/model/JavaClass;
+METHOD|com.thoughtworks.qdox.model.JavaClass.getInnerClasses()[Lcom/thoughtworks/qdox/model/JavaClass;
+METHOD|com.thoughtworks.qdox.model.JavaClass.getInnerClassByName(Ljava/lang/String;)Lcom/thoughtworks/qdox/model/JavaClass;
+METHOD|com.thoughtworks.qdox.model.JavaClass.isA(Ljava/lang/String;)Z
+METHOD|com.thoughtworks.qdox.model.JavaClass.isA(Lcom/thoughtworks/qdox/model/JavaClass;)Z
+METHOD|com.thoughtworks.qdox.model.JavaClass.getBeanProperties()[Lcom/thoughtworks/qdox/model/BeanProperty;
+METHOD|com.thoughtworks.qdox.model.JavaClass.getBeanProperties(Z)[Lcom/thoughtworks/qdox/model/BeanProperty;
+METHOD|com.thoughtworks.qdox.model.JavaClass.getBeanPropertyMap(Z)Ljava/util/Map;
+METHOD|com.thoughtworks.qdox.model.JavaClass.getOrCreateProperty(Ljava/util/Map;Ljava/lang/String;)Lcom/thoughtworks/qdox/model/BeanProperty;
+METHOD|com.thoughtworks.qdox.model.JavaClass.getBeanProperty(Ljava/lang/String;)Lcom/thoughtworks/qdox/model/BeanProperty;
+METHOD|com.thoughtworks.qdox.model.JavaClass.getBeanProperty(Ljava/lang/String;Z)Lcom/thoughtworks/qdox/model/BeanProperty;
+METHOD|com.thoughtworks.qdox.model.JavaClass.getDerivedClasses()[Lcom/thoughtworks/qdox/model/JavaClass;
+METHOD|com.thoughtworks.qdox.model.JavaClass.getTagsByName(Ljava/lang/String;Z)[Lcom/thoughtworks/qdox/model/DocletTag;
+METHOD|com.thoughtworks.qdox.model.JavaClass.addTagsRecursive(Ljava/util/List;Lcom/thoughtworks/qdox/model/JavaClass;Ljava/lang/String;Z)V
+METHOD|com.thoughtworks.qdox.model.JavaClass.addNewTags(Ljava/util/List;[Lcom/thoughtworks/qdox/model/DocletTag;)V
+METHOD|com.thoughtworks.qdox.model.JavaClass.compareTo(Ljava/lang/Object;)I
+METHOD|com.thoughtworks.qdox.model.JavaClass.<clinit>()V
+METHOD|com.thoughtworks.qdox.model.JavaClassCache.getClassByName(Ljava/lang/String;)Lcom/thoughtworks/qdox/model/JavaClass;
+METHOD|com.thoughtworks.qdox.model.JavaClassParent.resolveType(Ljava/lang/String;)Ljava/lang/String;
+METHOD|com.thoughtworks.qdox.model.JavaClassParent.getClassLibrary()Lcom/thoughtworks/qdox/model/ClassLibrary;
+METHOD|com.thoughtworks.qdox.model.JavaClassParent.getClassNamePrefix()Ljava/lang/String;
+METHOD|com.thoughtworks.qdox.model.JavaClassParent.getParentSource()Lcom/thoughtworks/qdox/model/JavaSource;
+METHOD|com.thoughtworks.qdox.model.JavaClassParent.addClass(Lcom/thoughtworks/qdox/model/JavaClass;)V
+METHOD|com.thoughtworks.qdox.model.JavaField.<init>(Lcom/thoughtworks/qdox/model/JavaClass;I)V
+METHOD|com.thoughtworks.qdox.model.JavaField.<init>(Lcom/thoughtworks/qdox/model/JavaClass;)V
+METHOD|com.thoughtworks.qdox.model.JavaField.<init>()V
+METHOD|com.thoughtworks.qdox.model.JavaField.getType()Lcom/thoughtworks/qdox/model/Type;
+METHOD|com.thoughtworks.qdox.model.JavaField.writeBody(Lcom/thoughtworks/qdox/model/IndentBuffer;)V
+METHOD|com.thoughtworks.qdox.model.JavaField.setType(Lcom/thoughtworks/qdox/model/Type;)V
+METHOD|com.thoughtworks.qdox.model.JavaField.compareTo(Ljava/lang/Object;)I
+METHOD|com.thoughtworks.qdox.model.JavaField.getDeclarationSignature(Z)Ljava/lang/String;
+METHOD|com.thoughtworks.qdox.model.JavaField.getCallSignature()Ljava/lang/String;
+METHOD|com.thoughtworks.qdox.model.JavaMethod.<init>(Lcom/thoughtworks/qdox/model/JavaClass;I)V
+METHOD|com.thoughtworks.qdox.model.JavaMethod.<init>(Lcom/thoughtworks/qdox/model/JavaClass;)V
+METHOD|com.thoughtworks.qdox.model.JavaMethod.<init>()V
+METHOD|com.thoughtworks.qdox.model.JavaMethod.getReturns()Lcom/thoughtworks/qdox/model/Type;
+METHOD|com.thoughtworks.qdox.model.JavaMethod.getParameters()[Lcom/thoughtworks/qdox/model/JavaParameter;
+METHOD|com.thoughtworks.qdox.model.JavaMethod.getParameterByName(Ljava/lang/String;)Lcom/thoughtworks/qdox/model/JavaParameter;
+METHOD|com.thoughtworks.qdox.model.JavaMethod.getExceptions()[Lcom/thoughtworks/qdox/model/Type;
+METHOD|com.thoughtworks.qdox.model.JavaMethod.isConstructor()Z
+METHOD|com.thoughtworks.qdox.model.JavaMethod.writeBody(Lcom/thoughtworks/qdox/model/IndentBuffer;)V
+METHOD|com.thoughtworks.qdox.model.JavaMethod.writeBody(Lcom/thoughtworks/qdox/model/IndentBuffer;ZZZ)V
+METHOD|com.thoughtworks.qdox.model.JavaMethod.getSignature(ZZ)Ljava/lang/String;
+METHOD|com.thoughtworks.qdox.model.JavaMethod.getDeclarationSignature(Z)Ljava/lang/String;
+METHOD|com.thoughtworks.qdox.model.JavaMethod.getCallSignature()Ljava/lang/String;
+METHOD|com.thoughtworks.qdox.model.JavaMethod.setReturns(Lcom/thoughtworks/qdox/model/Type;)V
+METHOD|com.thoughtworks.qdox.model.JavaMethod.setParameters([Lcom/thoughtworks/qdox/model/JavaParameter;)V
+METHOD|com.thoughtworks.qdox.model.JavaMethod.setExceptions([Lcom/thoughtworks/qdox/model/Type;)V
+METHOD|com.thoughtworks.qdox.model.JavaMethod.setConstructor(Z)V
+METHOD|com.thoughtworks.qdox.model.JavaMethod.equals(Ljava/lang/Object;)Z
+METHOD|com.thoughtworks.qdox.model.JavaMethod.signatureMatches(Ljava/lang/String;[Lcom/thoughtworks/qdox/model/Type;)Z
+METHOD|com.thoughtworks.qdox.model.JavaMethod.hashCode()I
+METHOD|com.thoughtworks.qdox.model.JavaMethod.getParentClass()Lcom/thoughtworks/qdox/model/JavaClass;
+METHOD|com.thoughtworks.qdox.model.JavaMethod.setParentClass(Lcom/thoughtworks/qdox/model/JavaClass;)V
+METHOD|com.thoughtworks.qdox.model.JavaMethod.isPublic()Z
+METHOD|com.thoughtworks.qdox.model.JavaMethod.isPropertyAccessor()Z
+METHOD|com.thoughtworks.qdox.model.JavaMethod.isPropertyMutator()Z
+METHOD|com.thoughtworks.qdox.model.JavaMethod.getPropertyType()Lcom/thoughtworks/qdox/model/Type;
+METHOD|com.thoughtworks.qdox.model.JavaMethod.getPropertyName()Ljava/lang/String;
+METHOD|com.thoughtworks.qdox.model.JavaMethod.getTagsByName(Ljava/lang/String;Z)[Lcom/thoughtworks/qdox/model/DocletTag;
+METHOD|com.thoughtworks.qdox.model.JavaMethod.compareTo(Ljava/lang/Object;)I
+METHOD|com.thoughtworks.qdox.model.JavaParameter.<init>(Lcom/thoughtworks/qdox/model/Type;Ljava/lang/String;)V
+METHOD|com.thoughtworks.qdox.model.JavaParameter.getName()Ljava/lang/String;
+METHOD|com.thoughtworks.qdox.model.JavaParameter.getType()Lcom/thoughtworks/qdox/model/Type;
+METHOD|com.thoughtworks.qdox.model.JavaParameter.equals(Ljava/lang/Object;)Z
+METHOD|com.thoughtworks.qdox.model.JavaParameter.hashCode()I
+METHOD|com.thoughtworks.qdox.model.JavaParameter.getParentMethod()Lcom/thoughtworks/qdox/model/JavaMethod;
+METHOD|com.thoughtworks.qdox.model.JavaParameter.setParentMethod(Lcom/thoughtworks/qdox/model/JavaMethod;)V
+METHOD|com.thoughtworks.qdox.model.JavaParameter.<clinit>()V
+METHOD|com.thoughtworks.qdox.model.JavaSource.<init>()V
+METHOD|com.thoughtworks.qdox.model.JavaSource.setURL(Ljava/net/URL;)V
+METHOD|com.thoughtworks.qdox.model.JavaSource.getURL()Ljava/net/URL;
+METHOD|com.thoughtworks.qdox.model.JavaSource.setFile(Ljava/io/File;)V
+METHOD|com.thoughtworks.qdox.model.JavaSource.getFile()Ljava/io/File;
+METHOD|com.thoughtworks.qdox.model.JavaSource.getPackage()Ljava/lang/String;
+METHOD|com.thoughtworks.qdox.model.JavaSource.setPackage(Ljava/lang/String;)V
+METHOD|com.thoughtworks.qdox.model.JavaSource.addImport(Ljava/lang/String;)V
+METHOD|com.thoughtworks.qdox.model.JavaSource.getImports()[Ljava/lang/String;
+METHOD|com.thoughtworks.qdox.model.JavaSource.addClass(Lcom/thoughtworks/qdox/model/JavaClass;)V
+METHOD|com.thoughtworks.qdox.model.JavaSource.getClasses()[Lcom/thoughtworks/qdox/model/JavaClass;
+METHOD|com.thoughtworks.qdox.model.JavaSource.getClassLibrary()Lcom/thoughtworks/qdox/model/ClassLibrary;
+METHOD|com.thoughtworks.qdox.model.JavaSource.setClassLibrary(Lcom/thoughtworks/qdox/model/ClassLibrary;)V
+METHOD|com.thoughtworks.qdox.model.JavaSource.toString()Ljava/lang/String;
+METHOD|com.thoughtworks.qdox.model.JavaSource.resolveType(Ljava/lang/String;)Ljava/lang/String;
+METHOD|com.thoughtworks.qdox.model.JavaSource.resolveTypeInternal(Ljava/lang/String;)Ljava/lang/String;
+METHOD|com.thoughtworks.qdox.model.JavaSource.getClassNamePrefix()Ljava/lang/String;
+METHOD|com.thoughtworks.qdox.model.JavaSource.getParentSource()Lcom/thoughtworks/qdox/model/JavaSource;
+METHOD|com.thoughtworks.qdox.model.JavaSource.<clinit>()V
+METHOD|com.thoughtworks.qdox.model.Member.getDeclarationSignature(Z)Ljava/lang/String;
+METHOD|com.thoughtworks.qdox.model.Member.getCallSignature()Ljava/lang/String;
+METHOD|com.thoughtworks.qdox.model.ModelBuilder.<init>()V
+METHOD|com.thoughtworks.qdox.model.ModelBuilder.<init>(Lcom/thoughtworks/qdox/model/ClassLibrary;Lcom/thoughtworks/qdox/model/DocletTagFactory;)V
+METHOD|com.thoughtworks.qdox.model.ModelBuilder.addPackage(Ljava/lang/String;)V
+METHOD|com.thoughtworks.qdox.model.ModelBuilder.addImport(Ljava/lang/String;)V
+METHOD|com.thoughtworks.qdox.model.ModelBuilder.addJavaDoc(Ljava/lang/String;)V
+METHOD|com.thoughtworks.qdox.model.ModelBuilder.addJavaDocTag(Lcom/thoughtworks/qdox/parser/structs/TagDef;)V
+METHOD|com.thoughtworks.qdox.model.ModelBuilder.beginClass(Lcom/thoughtworks/qdox/parser/structs/ClassDef;)V
+METHOD|com.thoughtworks.qdox.model.ModelBuilder.endClass()V
+METHOD|com.thoughtworks.qdox.model.ModelBuilder.createType(Ljava/lang/String;I)Lcom/thoughtworks/qdox/model/Type;
+METHOD|com.thoughtworks.qdox.model.ModelBuilder.addJavaDoc(Lcom/thoughtworks/qdox/model/AbstractJavaEntity;)V
+METHOD|com.thoughtworks.qdox.model.ModelBuilder.addMethod(Lcom/thoughtworks/qdox/parser/structs/MethodDef;)V
+METHOD|com.thoughtworks.qdox.model.ModelBuilder.addField(Lcom/thoughtworks/qdox/parser/structs/FieldDef;)V
+METHOD|com.thoughtworks.qdox.model.ModelBuilder.getSource()Lcom/thoughtworks/qdox/model/JavaSource;
+METHOD|com.thoughtworks.qdox.model.Type.<init>(Ljava/lang/String;Ljava/lang/String;ILcom/thoughtworks/qdox/model/JavaClassParent;)V
+METHOD|com.thoughtworks.qdox.model.Type.<init>(Ljava/lang/String;ILcom/thoughtworks/qdox/model/JavaClassParent;)V
+METHOD|com.thoughtworks.qdox.model.Type.<init>(Ljava/lang/String;I)V
+METHOD|com.thoughtworks.qdox.model.Type.<init>(Ljava/lang/String;)V
+METHOD|com.thoughtworks.qdox.model.Type.createUnresolved(Ljava/lang/String;ILcom/thoughtworks/qdox/model/JavaClassParent;)Lcom/thoughtworks/qdox/model/Type;
+METHOD|com.thoughtworks.qdox.model.Type.getJavaClassParent()Lcom/thoughtworks/qdox/model/JavaClassParent;
+METHOD|com.thoughtworks.qdox.model.Type.getValue()Ljava/lang/String;
+METHOD|com.thoughtworks.qdox.model.Type.isResolved()Z
+METHOD|com.thoughtworks.qdox.model.Type.compareTo(Ljava/lang/Object;)I
+METHOD|com.thoughtworks.qdox.model.Type.isArray()Z
+METHOD|com.thoughtworks.qdox.model.Type.getDimensions()I
+METHOD|com.thoughtworks.qdox.model.Type.toString()Ljava/lang/String;
+METHOD|com.thoughtworks.qdox.model.Type.equals(Ljava/lang/Object;)Z
+METHOD|com.thoughtworks.qdox.model.Type.hashCode()I
+METHOD|com.thoughtworks.qdox.model.Type.getJavaClass()Lcom/thoughtworks/qdox/model/JavaClass;
+METHOD|com.thoughtworks.qdox.model.Type.isA(Lcom/thoughtworks/qdox/model/Type;)Z
+METHOD|com.thoughtworks.qdox.model.Type.<clinit>()V
+METHOD|com.thoughtworks.qdox.model.util.TagParser.<init>()V
+METHOD|com.thoughtworks.qdox.model.util.TagParser.makeTokenizer(Ljava/lang/String;)Ljava/io/StreamTokenizer;
+METHOD|com.thoughtworks.qdox.model.util.TagParser.parseNamedParameters(Ljava/lang/String;)Ljava/util/Map;
+METHOD|com.thoughtworks.qdox.model.util.TagParser.parseWords(Ljava/lang/String;)[Ljava/lang/String;
+METHOD|com.thoughtworks.qdox.parser.Builder.addPackage(Ljava/lang/String;)V
+METHOD|com.thoughtworks.qdox.parser.Builder.addImport(Ljava/lang/String;)V
+METHOD|com.thoughtworks.qdox.parser.Builder.addJavaDoc(Ljava/lang/String;)V
+METHOD|com.thoughtworks.qdox.parser.Builder.addJavaDocTag(Lcom/thoughtworks/qdox/parser/structs/TagDef;)V
+METHOD|com.thoughtworks.qdox.parser.Builder.beginClass(Lcom/thoughtworks/qdox/parser/structs/ClassDef;)V
+METHOD|com.thoughtworks.qdox.parser.Builder.endClass()V
+METHOD|com.thoughtworks.qdox.parser.Builder.addMethod(Lcom/thoughtworks/qdox/parser/structs/MethodDef;)V
+METHOD|com.thoughtworks.qdox.parser.Builder.addField(Lcom/thoughtworks/qdox/parser/structs/FieldDef;)V
+METHOD|com.thoughtworks.qdox.parser.Lexer.lex()I
+METHOD|com.thoughtworks.qdox.parser.Lexer.text()Ljava/lang/String;
+METHOD|com.thoughtworks.qdox.parser.Lexer.getLine()I
+METHOD|com.thoughtworks.qdox.parser.Lexer.getColumn()I
+METHOD|com.thoughtworks.qdox.parser.ParseException.<init>(Ljava/lang/String;II)V
+METHOD|com.thoughtworks.qdox.parser.ParseException.getLine()I
+METHOD|com.thoughtworks.qdox.parser.ParseException.getColumn()I
+METHOD|com.thoughtworks.qdox.parser.ParseException.setSourceInfo(Ljava/lang/String;)V
+METHOD|com.thoughtworks.qdox.parser.ParseException.getMessage()Ljava/lang/String;
+METHOD|com.thoughtworks.qdox.parser.impl.JFlexLexer.text()Ljava/lang/String;
+METHOD|com.thoughtworks.qdox.parser.impl.JFlexLexer.lex()I
+METHOD|com.thoughtworks.qdox.parser.impl.JFlexLexer.getLine()I
+METHOD|com.thoughtworks.qdox.parser.impl.JFlexLexer.getColumn()I
+METHOD|com.thoughtworks.qdox.parser.impl.JFlexLexer.pushState(I)V
+METHOD|com.thoughtworks.qdox.parser.impl.JFlexLexer.popState()V
+METHOD|com.thoughtworks.qdox.parser.impl.JFlexLexer.<init>(Ljava/io/Reader;)V
+METHOD|com.thoughtworks.qdox.parser.impl.JFlexLexer.<init>(Ljava/io/InputStream;)V
+METHOD|com.thoughtworks.qdox.parser.impl.JFlexLexer.yy_unpack()[I
+METHOD|com.thoughtworks.qdox.parser.impl.JFlexLexer.yy_unpack(Ljava/lang/String;I[I)I
+METHOD|com.thoughtworks.qdox.parser.impl.JFlexLexer.yy_unpack_cmap(Ljava/lang/String;)[C
+METHOD|com.thoughtworks.qdox.parser.impl.JFlexLexer.yy_refill()Z
+METHOD|com.thoughtworks.qdox.parser.impl.JFlexLexer.yyclose()V
+METHOD|com.thoughtworks.qdox.parser.impl.JFlexLexer.yyreset(Ljava/io/Reader;)V
+METHOD|com.thoughtworks.qdox.parser.impl.JFlexLexer.yystate()I
+METHOD|com.thoughtworks.qdox.parser.impl.JFlexLexer.yybegin(I)V
+METHOD|com.thoughtworks.qdox.parser.impl.JFlexLexer.yytext()Ljava/lang/String;
+METHOD|com.thoughtworks.qdox.parser.impl.JFlexLexer.yycharat(I)C
+METHOD|com.thoughtworks.qdox.parser.impl.JFlexLexer.yylength()I
+METHOD|com.thoughtworks.qdox.parser.impl.JFlexLexer.yy_ScanError(I)V
+METHOD|com.thoughtworks.qdox.parser.impl.JFlexLexer.yypushback(I)V
+METHOD|com.thoughtworks.qdox.parser.impl.JFlexLexer.yy_do_eof()V
+METHOD|com.thoughtworks.qdox.parser.impl.JFlexLexer.yylex()I
+METHOD|com.thoughtworks.qdox.parser.impl.JFlexLexer.<clinit>()V
+METHOD|com.thoughtworks.qdox.parser.impl.Parser$Value.<init>(Lcom/thoughtworks/qdox/parser/impl/Parser;)V
+METHOD|com.thoughtworks.qdox.parser.impl.Parser$Value.<init>(Lcom/thoughtworks/qdox/parser/impl/Parser;Lcom/thoughtworks/qdox/parser/impl/Parser$1;)V
+METHOD|com.thoughtworks.qdox.parser.impl.Parser.debug(Ljava/lang/String;)V
+METHOD|com.thoughtworks.qdox.parser.impl.Parser.state_push(I)V
+METHOD|com.thoughtworks.qdox.parser.impl.Parser.state_pop()I
+METHOD|com.thoughtworks.qdox.parser.impl.Parser.state_drop(I)V
+METHOD|com.thoughtworks.qdox.parser.impl.Parser.state_peek(I)I
+METHOD|com.thoughtworks.qdox.parser.impl.Parser.init_stacks()Z
+METHOD|com.thoughtworks.qdox.parser.impl.Parser.dump_stacks(I)V
+METHOD|com.thoughtworks.qdox.parser.impl.Parser.val_init()V
+METHOD|com.thoughtworks.qdox.parser.impl.Parser.val_push(Lcom/thoughtworks/qdox/parser/impl/Parser$Value;)V
+METHOD|com.thoughtworks.qdox.parser.impl.Parser.val_pop()Lcom/thoughtworks/qdox/parser/impl/Parser$Value;
+METHOD|com.thoughtworks.qdox.parser.impl.Parser.val_drop(I)V
+METHOD|com.thoughtworks.qdox.parser.impl.Parser.val_peek(I)Lcom/thoughtworks/qdox/parser/impl/Parser$Value;
+METHOD|com.thoughtworks.qdox.parser.impl.Parser.buffer()Ljava/lang/String;
+METHOD|com.thoughtworks.qdox.parser.impl.Parser.<init>(Lcom/thoughtworks/qdox/parser/Lexer;Lcom/thoughtworks/qdox/parser/Builder;)V
+METHOD|com.thoughtworks.qdox.parser.impl.Parser.parse()Z
+METHOD|com.thoughtworks.qdox.parser.impl.Parser.yylex()I
+METHOD|com.thoughtworks.qdox.parser.impl.Parser.yyerror(Ljava/lang/String;)V
+METHOD|com.thoughtworks.qdox.parser.impl.Parser.makeField(Lcom/thoughtworks/qdox/parser/structs/TypeDef;)V
+METHOD|com.thoughtworks.qdox.parser.impl.Parser.yylexdebug(II)V
+METHOD|com.thoughtworks.qdox.parser.impl.Parser.yyparse()I
+METHOD|com.thoughtworks.qdox.parser.impl.Parser.<clinit>()V
+METHOD|com.thoughtworks.qdox.parser.structs.ClassDef.<init>()V
+METHOD|com.thoughtworks.qdox.parser.structs.ClassDef.equals(Ljava/lang/Object;)Z
+METHOD|com.thoughtworks.qdox.parser.structs.ClassDef.hashCode()I
+METHOD|com.thoughtworks.qdox.parser.structs.ClassDef.toString()Ljava/lang/String;
+METHOD|com.thoughtworks.qdox.parser.structs.FieldDef.<init>()V
+METHOD|com.thoughtworks.qdox.parser.structs.FieldDef.equals(Ljava/lang/Object;)Z
+METHOD|com.thoughtworks.qdox.parser.structs.FieldDef.hashCode()I
+METHOD|com.thoughtworks.qdox.parser.structs.FieldDef.toString()Ljava/lang/String;
+METHOD|com.thoughtworks.qdox.parser.structs.LocatedDef.<init>()V
+METHOD|com.thoughtworks.qdox.parser.structs.MethodDef.<init>()V
+METHOD|com.thoughtworks.qdox.parser.structs.MethodDef.equals(Ljava/lang/Object;)Z
+METHOD|com.thoughtworks.qdox.parser.structs.MethodDef.hashCode()I
+METHOD|com.thoughtworks.qdox.parser.structs.MethodDef.toString()Ljava/lang/String;
+METHOD|com.thoughtworks.qdox.parser.structs.TagDef.<init>(Ljava/lang/String;Ljava/lang/String;I)V
+METHOD|com.thoughtworks.qdox.parser.structs.TagDef.<init>(Ljava/lang/String;Ljava/lang/String;)V
+METHOD|com.thoughtworks.qdox.parser.structs.TagDef.equals(Ljava/lang/Object;)Z
+METHOD|com.thoughtworks.qdox.parser.structs.TagDef.hashCode()I
+METHOD|com.thoughtworks.qdox.parser.structs.TagDef.toString()Ljava/lang/String;
+METHOD|com.thoughtworks.qdox.parser.structs.TypeDef.<init>(Ljava/lang/String;I)V
+METHOD|org.testng.Assert.<init>()V
+METHOD|org.testng.Assert.assertTrue(ZLjava/lang/String;)V
+METHOD|org.testng.Assert.assertTrue(Z)V
+METHOD|org.testng.Assert.assertFalse(ZLjava/lang/String;)V
+METHOD|org.testng.Assert.assertFalse(Z)V
+METHOD|org.testng.Assert.fail(Ljava/lang/String;Ljava/lang/Throwable;)V
+METHOD|org.testng.Assert.fail(Ljava/lang/String;)V
+METHOD|org.testng.Assert.fail()V
+METHOD|org.testng.Assert.assertEquals(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/String;)V
+METHOD|org.testng.Assert.assertEquals(Ljava/lang/Object;Ljava/lang/Object;)V
+METHOD|org.testng.Assert.assertEquals(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
+METHOD|org.testng.Assert.assertEquals(Ljava/lang/String;Ljava/lang/String;)V
+METHOD|org.testng.Assert.assertEquals(DDDLjava/lang/String;)V
+METHOD|org.testng.Assert.assertEquals(DDD)V
+METHOD|org.testng.Assert.assertEquals(FFFLjava/lang/String;)V
+METHOD|org.testng.Assert.assertEquals(FFF)V
+METHOD|org.testng.Assert.assertEquals(JJLjava/lang/String;)V
+METHOD|org.testng.Assert.assertEquals(JJ)V
+METHOD|org.testng.Assert.assertEquals(ZZLjava/lang/String;)V
+METHOD|org.testng.Assert.assertEquals(ZZ)V
+METHOD|org.testng.Assert.assertEquals(BBLjava/lang/String;)V
+METHOD|org.testng.Assert.assertEquals(BB)V
+METHOD|org.testng.Assert.assertEquals(CCLjava/lang/String;)V
+METHOD|org.testng.Assert.assertEquals(CC)V
+METHOD|org.testng.Assert.assertEquals(SSLjava/lang/String;)V
+METHOD|org.testng.Assert.assertEquals(SS)V
+METHOD|org.testng.Assert.assertEquals(IILjava/lang/String;)V
+METHOD|org.testng.Assert.assertEquals(II)V
+METHOD|org.testng.Assert.assertNotNull(Ljava/lang/Object;)V
+METHOD|org.testng.Assert.assertNotNull(Ljava/lang/Object;Ljava/lang/String;)V
+METHOD|org.testng.Assert.assertNull(Ljava/lang/Object;)V
+METHOD|org.testng.Assert.assertNull(Ljava/lang/Object;Ljava/lang/String;)V
+METHOD|org.testng.Assert.assertSame(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/String;)V
+METHOD|org.testng.Assert.assertSame(Ljava/lang/Object;Ljava/lang/Object;)V
+METHOD|org.testng.Assert.assertNotSame(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/String;)V
+METHOD|org.testng.Assert.assertNotSame(Ljava/lang/Object;Ljava/lang/Object;)V
+METHOD|org.testng.Assert.failSame(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/String;)V
+METHOD|org.testng.Assert.failNotSame(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/String;)V
+METHOD|org.testng.Assert.failNotEquals(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/String;)V
+METHOD|org.testng.Assert.format(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/String;
+METHOD|org.testng.Assert.assertEquals(Ljava/util/Collection;Ljava/util/Collection;)V
+METHOD|org.testng.Assert.assertEquals(Ljava/util/Collection;Ljava/util/Collection;Ljava/lang/String;)V
+METHOD|org.testng.Assert.assertEquals([Ljava/lang/Object;[Ljava/lang/Object;Ljava/lang/String;)V
+METHOD|org.testng.Assert.assertEqualsNoOrder([Ljava/lang/Object;[Ljava/lang/Object;Ljava/lang/String;)V
+METHOD|org.testng.Assert.assertEquals([Ljava/lang/Object;[Ljava/lang/Object;)V
+METHOD|org.testng.Assert.assertEqualsNoOrder([Ljava/lang/Object;[Ljava/lang/Object;)V
+METHOD|org.testng.Assert.assertEquals([B[B)V
+METHOD|org.testng.Assert.assertEquals([B[BLjava/lang/String;)V
+METHOD|org.testng.AssertJUnit.<init>()V
+METHOD|org.testng.AssertJUnit.assertTrue(Ljava/lang/String;Z)V
+METHOD|org.testng.AssertJUnit.assertTrue(Z)V
+METHOD|org.testng.AssertJUnit.assertFalse(Ljava/lang/String;Z)V
+METHOD|org.testng.AssertJUnit.assertFalse(Z)V
+METHOD|org.testng.AssertJUnit.fail(Ljava/lang/String;)V
+METHOD|org.testng.AssertJUnit.fail()V
+METHOD|org.testng.AssertJUnit.assertEquals(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V
+METHOD|org.testng.AssertJUnit.assertEquals(Ljava/lang/Object;Ljava/lang/Object;)V
+METHOD|org.testng.AssertJUnit.assertEquals(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
+METHOD|org.testng.AssertJUnit.assertEquals(Ljava/lang/String;Ljava/lang/String;)V
+METHOD|org.testng.AssertJUnit.assertEquals(Ljava/lang/String;DDD)V
+METHOD|org.testng.AssertJUnit.assertEquals(DDD)V
+METHOD|org.testng.AssertJUnit.assertEquals(Ljava/lang/String;FFF)V
+METHOD|org.testng.AssertJUnit.assertEquals(FFF)V
+METHOD|org.testng.AssertJUnit.assertEquals(Ljava/lang/String;JJ)V
+METHOD|org.testng.AssertJUnit.assertEquals(JJ)V
+METHOD|org.testng.AssertJUnit.assertEquals(Ljava/lang/String;ZZ)V
+METHOD|org.testng.AssertJUnit.assertEquals(ZZ)V
+METHOD|org.testng.AssertJUnit.assertEquals(Ljava/lang/String;BB)V
+METHOD|org.testng.AssertJUnit.assertEquals(BB)V
+METHOD|org.testng.AssertJUnit.assertEquals(Ljava/lang/String;CC)V
+METHOD|org.testng.AssertJUnit.assertEquals(CC)V
+METHOD|org.testng.AssertJUnit.assertEquals(Ljava/lang/String;SS)V
+METHOD|org.testng.AssertJUnit.assertEquals(SS)V
+METHOD|org.testng.AssertJUnit.assertEquals(Ljava/lang/String;II)V
+METHOD|org.testng.AssertJUnit.assertEquals(II)V
+METHOD|org.testng.AssertJUnit.assertNotNull(Ljava/lang/Object;)V
+METHOD|org.testng.AssertJUnit.assertNotNull(Ljava/lang/String;Ljava/lang/Object;)V
+METHOD|org.testng.AssertJUnit.assertNull(Ljava/lang/Object;)V
+METHOD|org.testng.AssertJUnit.assertNull(Ljava/lang/String;Ljava/lang/Object;)V
+METHOD|org.testng.AssertJUnit.assertSame(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V
+METHOD|org.testng.AssertJUnit.assertSame(Ljava/lang/Object;Ljava/lang/Object;)V
+METHOD|org.testng.AssertJUnit.assertNotSame(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V
+METHOD|org.testng.AssertJUnit.assertNotSame(Ljava/lang/Object;Ljava/lang/Object;)V
+METHOD|org.testng.AssertJUnit.assertEquals([B[B)V
+METHOD|org.testng.AssertJUnit.assertEquals(Ljava/lang/String;[B[B)V
+METHOD|org.testng.AssertJUnit.failSame(Ljava/lang/String;)V
+METHOD|org.testng.AssertJUnit.failNotSame(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V
+METHOD|org.testng.AssertJUnit.failNotEquals(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)V
+METHOD|org.testng.AssertJUnit.format(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/String;
+METHOD|org.testng.ClassMethodMap.<init>([Lorg/testng/ITestNGMethod;)V
+METHOD|org.testng.ClassMethodMap.removeAndCheckIfLast(Lorg/testng/ITestNGMethod;)Z
+METHOD|org.testng.ClassMethodMap.getMethodClass(Lorg/testng/ITestNGMethod;)Ljava/lang/Class;
+METHOD|org.testng.IClass.getName()Ljava/lang/String;
+METHOD|org.testng.IClass.getRealClass()Ljava/lang/Class;
+METHOD|org.testng.IClass.getInstances(Z)[Ljava/lang/Object;
+METHOD|org.testng.IClass.getInstanceCount()I
+METHOD|org.testng.IClass.getInstanceHashCodes()[J
+METHOD|org.testng.IClass.addInstance(Ljava/lang/Object;)V
+METHOD|org.testng.IExtraOutput.getParameterOutput()Ljava/util/List;
+METHOD|org.testng.IHookCallBack.runTestMethod(Lorg/testng/ITestResult;)V
+METHOD|org.testng.IHookable.run(Lorg/testng/IHookCallBack;Lorg/testng/ITestResult;)V
+METHOD|org.testng.IInstanceInfo.getInstance()Ljava/lang/Object;
+METHOD|org.testng.IInstanceInfo.getInstanceClass()Ljava/lang/Class;
+METHOD|org.testng.IMethodSelector.includeMethod(Lorg/testng/ITestNGMethod;Z)Z
+METHOD|org.testng.IMethodSelector.setTestMethods(Ljava/util/List;)V
+METHOD|org.testng.IReporter.generateReport(Ljava/util/List;Ljava/util/List;Ljava/lang/String;)V
+METHOD|org.testng.IResultMap.addResult(Lorg/testng/ITestResult;Lorg/testng/ITestNGMethod;)V
+METHOD|org.testng.IResultMap.getResults(Lorg/testng/ITestNGMethod;)Ljava/util/Set;
+METHOD|org.testng.IResultMap.getAllResults()Ljava/util/Set;
+METHOD|org.testng.IResultMap.getAllMethods()Ljava/util/Collection;
+METHOD|org.testng.IResultMap.size()I
+METHOD|org.testng.ISuite.getName()Ljava/lang/String;
+METHOD|org.testng.ISuite.getResults()Ljava/util/Map;
+METHOD|org.testng.ISuite.getOutputDirectory()Ljava/lang/String;
+METHOD|org.testng.ISuite.isParallel()Z
+METHOD|org.testng.ISuite.getParameter(Ljava/lang/String;)Ljava/lang/String;
+METHOD|org.testng.ISuite.getMethodsByGroups()Ljava/util/Map;
+METHOD|org.testng.ISuite.getInvokedMethods()Ljava/util/Collection;
+METHOD|org.testng.ISuite.getExcludedMethods()Ljava/util/Collection;
+METHOD|org.testng.ISuite.run()V
+METHOD|org.testng.ISuite.getHost()Ljava/lang/String;
+METHOD|org.testng.ISuiteListener.onStart(Lorg/testng/ISuite;)V
+METHOD|org.testng.ISuiteListener.onFinish(Lorg/testng/ISuite;)V
+METHOD|org.testng.ISuiteResult.getPropertyFileName()Ljava/lang/String;
+METHOD|org.testng.ISuiteResult.getTestContext()Lorg/testng/ITestContext;
+METHOD|org.testng.ITest.getTestName()Ljava/lang/String;
+METHOD|org.testng.ITestClass.getInstances(Z)[Ljava/lang/Object;
+METHOD|org.testng.ITestClass.getInstanceHashCodes()[J
+METHOD|org.testng.ITestClass.getInstanceCount()I
+METHOD|org.testng.ITestClass.getTestMethods()[Lorg/testng/ITestNGMethod;
+METHOD|org.testng.ITestClass.getBeforeTestMethods()[Lorg/testng/ITestNGMethod;
+METHOD|org.testng.ITestClass.getAfterTestMethods()[Lorg/testng/ITestNGMethod;
+METHOD|org.testng.ITestClass.getBeforeClassMethods()[Lorg/testng/ITestNGMethod;
+METHOD|org.testng.ITestClass.getAfterClassMethods()[Lorg/testng/ITestNGMethod;
+METHOD|org.testng.ITestClass.getBeforeSuiteMethods()[Lorg/testng/ITestNGMethod;
+METHOD|org.testng.ITestClass.getAfterSuiteMethods()[Lorg/testng/ITestNGMethod;
+METHOD|org.testng.ITestClass.getBeforeTestConfigurationMethods()[Lorg/testng/ITestNGMethod;
+METHOD|org.testng.ITestClass.getAfterTestConfigurationMethods()[Lorg/testng/ITestNGMethod;
+METHOD|org.testng.ITestClass.getBeforeGroupsMethods()[Lorg/testng/ITestNGMethod;
+METHOD|org.testng.ITestClass.getAfterGroupsMethods()[Lorg/testng/ITestNGMethod;
+METHOD|org.testng.ITestClassFinder.findTestClasses()[Lorg/testng/IClass;
+METHOD|org.testng.ITestClassFinder.getIClass(Ljava/lang/Class;)Lorg/testng/IClass;
+METHOD|org.testng.ITestContext.getName()Ljava/lang/String;
+METHOD|org.testng.ITestContext.getStartDate()Ljava/util/Date;
+METHOD|org.testng.ITestContext.getEndDate()Ljava/util/Date;
+METHOD|org.testng.ITestContext.getPassedTests()Lorg/testng/IResultMap;
+METHOD|org.testng.ITestContext.getSkippedTests()Lorg/testng/IResultMap;
+METHOD|org.testng.ITestContext.getFailedButWithinSuccessPercentageTests()Lorg/testng/IResultMap;
+METHOD|org.testng.ITestContext.getFailedTests()Lorg/testng/IResultMap;
+METHOD|org.testng.ITestContext.getIncludedGroups()[Ljava/lang/String;
+METHOD|org.testng.ITestContext.getExcludedGroups()[Ljava/lang/String;
+METHOD|org.testng.ITestContext.getOutputDirectory()Ljava/lang/String;
+METHOD|org.testng.ITestContext.getSuite()Lorg/testng/ISuite;
+METHOD|org.testng.ITestContext.getAllTestMethods()[Lorg/testng/ITestNGMethod;
+METHOD|org.testng.ITestContext.getHost()Ljava/lang/String;
+METHOD|org.testng.ITestContext.getExcludedMethods()Ljava/util/Collection;
+METHOD|org.testng.ITestListener.onTestStart(Lorg/testng/ITestResult;)V
+METHOD|org.testng.ITestListener.onTestSuccess(Lorg/testng/ITestResult;)V
+METHOD|org.testng.ITestListener.onTestFailure(Lorg/testng/ITestResult;)V
+METHOD|org.testng.ITestListener.onTestSkipped(Lorg/testng/ITestResult;)V
+METHOD|org.testng.ITestListener.onTestFailedButWithinSuccessPercentage(Lorg/testng/ITestResult;)V
+METHOD|org.testng.ITestListener.onStart(Lorg/testng/ITestContext;)V
+METHOD|org.testng.ITestListener.onFinish(Lorg/testng/ITestContext;)V
+METHOD|org.testng.ITestMethodFinder.getTestMethods(Ljava/lang/Class;)[Lorg/testng/ITestNGMethod;
+METHOD|org.testng.ITestMethodFinder.getBeforeTestMethods(Ljava/lang/Class;)[Lorg/testng/ITestNGMethod;
+METHOD|org.testng.ITestMethodFinder.getAfterTestMethods(Ljava/lang/Class;)[Lorg/testng/ITestNGMethod;
+METHOD|org.testng.ITestMethodFinder.getBeforeClassMethods(Ljava/lang/Class;)[Lorg/testng/ITestNGMethod;
+METHOD|org.testng.ITestMethodFinder.getAfterClassMethods(Ljava/lang/Class;)[Lorg/testng/ITestNGMethod;
+METHOD|org.testng.ITestMethodFinder.getBeforeSuiteMethods(Ljava/lang/Class;)[Lorg/testng/ITestNGMethod;
+METHOD|org.testng.ITestMethodFinder.getAfterSuiteMethods(Ljava/lang/Class;)[Lorg/testng/ITestNGMethod;
+METHOD|org.testng.ITestMethodFinder.getBeforeTestConfigurationMethods(Ljava/lang/Class;)[Lorg/testng/ITestNGMethod;
+METHOD|org.testng.ITestMethodFinder.getAfterTestConfigurationMethods(Ljava/lang/Class;)[Lorg/testng/ITestNGMethod;
+METHOD|org.testng.ITestMethodFinder.getBeforeGroupsConfigurationMethods(Ljava/lang/Class;)[Lorg/testng/ITestNGMethod;
+METHOD|org.testng.ITestMethodFinder.getAfterGroupsConfigurationMethods(Ljava/lang/Class;)[Lorg/testng/ITestNGMethod;
+METHOD|org.testng.ITestNGMethod.getRealClass()Ljava/lang/Class;
+METHOD|org.testng.ITestNGMethod.getTestClass()Lorg/testng/ITestClass;
+METHOD|org.testng.ITestNGMethod.setTestClass(Lorg/testng/ITestClass;)V
+METHOD|org.testng.ITestNGMethod.getMethod()Ljava/lang/reflect/Method;
+METHOD|org.testng.ITestNGMethod.getMethodName()Ljava/lang/String;
+METHOD|org.testng.ITestNGMethod.getInstances()[Ljava/lang/Object;
+METHOD|org.testng.ITestNGMethod.getInstanceHashCodes()[J
+METHOD|org.testng.ITestNGMethod.getGroups()[Ljava/lang/String;
+METHOD|org.testng.ITestNGMethod.getGroupsDependedUpon()[Ljava/lang/String;
+METHOD|org.testng.ITestNGMethod.getMissingGroup()Ljava/lang/String;
+METHOD|org.testng.ITestNGMethod.setMissingGroup(Ljava/lang/String;)V
+METHOD|org.testng.ITestNGMethod.getBeforeGroups()[Ljava/lang/String;
+METHOD|org.testng.ITestNGMethod.getAfterGroups()[Ljava/lang/String;
+METHOD|org.testng.ITestNGMethod.getMethodsDependedUpon()[Ljava/lang/String;
+METHOD|org.testng.ITestNGMethod.addMethodDependedUpon(Ljava/lang/String;)V
+METHOD|org.testng.ITestNGMethod.isTest()Z
+METHOD|org.testng.ITestNGMethod.isBeforeMethodConfiguration()Z
+METHOD|org.testng.ITestNGMethod.isAfterMethodConfiguration()Z
+METHOD|org.testng.ITestNGMethod.isBeforeClassConfiguration()Z
+METHOD|org.testng.ITestNGMethod.isAfterClassConfiguration()Z
+METHOD|org.testng.ITestNGMethod.isBeforeSuiteConfiguration()Z
+METHOD|org.testng.ITestNGMethod.isAfterSuiteConfiguration()Z
+METHOD|org.testng.ITestNGMethod.isBeforeTestConfiguration()Z
+METHOD|org.testng.ITestNGMethod.isAfterTestConfiguration()Z
+METHOD|org.testng.ITestNGMethod.getTimeOut()J
+METHOD|org.testng.ITestNGMethod.getInvocationCount()I
+METHOD|org.testng.ITestNGMethod.getSuccessPercentage()I
+METHOD|org.testng.ITestNGMethod.getId()J
+METHOD|org.testng.ITestNGMethod.setId(J)V
+METHOD|org.testng.ITestNGMethod.getDate()J
+METHOD|org.testng.ITestNGMethod.setDate(J)V
+METHOD|org.testng.ITestNGMethod.canRunFromClass(Lorg/testng/IClass;)Z
+METHOD|org.testng.ITestNGMethod.isAlwaysRun()Z
+METHOD|org.testng.ITestNGMethod.getThreadPoolSize()I
+METHOD|org.testng.ITestNGMethod.getDescription()Ljava/lang/String;
+METHOD|org.testng.ITestNGMethod.isBeforeGroupsConfiguration()Z
+METHOD|org.testng.ITestNGMethod.isAfterGroupsConfiguration()Z
+METHOD|org.testng.ITestResult.getStatus()I
+METHOD|org.testng.ITestResult.setStatus(I)V
+METHOD|org.testng.ITestResult.getMethod()Lorg/testng/ITestNGMethod;
+METHOD|org.testng.ITestResult.getParameters()[Ljava/lang/Object;
+METHOD|org.testng.ITestResult.setParameters([Ljava/lang/Object;)V
+METHOD|org.testng.ITestResult.getTestClass()Lorg/testng/IClass;
+METHOD|org.testng.ITestResult.setThrowable(Ljava/lang/Throwable;)V
+METHOD|org.testng.ITestResult.getThrowable()Ljava/lang/Throwable;
+METHOD|org.testng.ITestResult.getStartMillis()J
+METHOD|org.testng.ITestResult.getEndMillis()J
+METHOD|org.testng.ITestResult.setEndMillis(J)V
+METHOD|org.testng.ITestResult.getName()Ljava/lang/String;
+METHOD|org.testng.ITestResult.isSuccess()Z
+METHOD|org.testng.ITestResult.getHost()Ljava/lang/String;
+METHOD|org.testng.ITestRunnerFactory.newTestRunner(Lorg/testng/ISuite;Lorg/testng/xml/XmlTest;)Lorg/testng/TestRunner;
+METHOD|org.testng.JUnitConverter.<init>()V
+METHOD|org.testng.JUnitConverter.main([Ljava/lang/String;)V
+METHOD|org.testng.JUnitConverter.extractOptions([Ljava/lang/String;)Ljava/util/Map;
+METHOD|org.testng.JUnitConverter.usage()V
+METHOD|org.testng.JUnitConverter.log(Ljava/lang/String;)V
+METHOD|org.testng.JUnitConverter.getLogLevel()I
+METHOD|org.testng.JUnitConverter.ppp(Ljava/lang/String;)V
+METHOD|org.testng.JUnitConverter.<clinit>()V
+METHOD|org.testng.JUnitConverterTask.<init>()V
+METHOD|org.testng.JUnitConverterTask.execute()V
+METHOD|org.testng.JUnitConverterTask.validate()V
+METHOD|org.testng.JUnitConverterTask.init()V
+METHOD|org.testng.JUnitConverterTask.setOutputDir(Ljava/io/File;)V
+METHOD|org.testng.JUnitConverterTask.setSourceDir(Ljava/io/File;)V
+METHOD|org.testng.JUnitConverterTask.setAnnotations(Z)V
+METHOD|org.testng.Reporter.<init>()V
+METHOD|org.testng.Reporter.setCurrentTestResult(Lorg/testng/ITestResult;)V
+METHOD|org.testng.Reporter.getOutput()Ljava/util/List;
+METHOD|org.testng.Reporter.log(Ljava/lang/String;Lorg/testng/ITestResult;)V
+METHOD|org.testng.Reporter.log(Ljava/lang/String;)V
+METHOD|org.testng.Reporter.log(Ljava/lang/String;IZ)V
+METHOD|org.testng.Reporter.log(Ljava/lang/String;Z)V
+METHOD|org.testng.Reporter.log(Ljava/lang/String;I)V
+METHOD|org.testng.Reporter.getCurrentTestResult()Lorg/testng/ITestResult;
+METHOD|org.testng.Reporter.ppp(Ljava/lang/String;)V
+METHOD|org.testng.Reporter.getOutput(Lorg/testng/ITestResult;)Ljava/util/List;
+METHOD|org.testng.Reporter.<clinit>()V
+METHOD|org.testng.SuiteResult$1.<init>()V
+METHOD|org.testng.SuiteResult$1.compare(Lorg/testng/SuiteResult;Lorg/testng/SuiteResult;)I
+METHOD|org.testng.SuiteResult$1.equals(Ljava/lang/Object;)Z
+METHOD|org.testng.SuiteResult$1.compare(Ljava/lang/Object;Ljava/lang/Object;)I
+METHOD|org.testng.SuiteResult.<init>(Ljava/lang/String;Lorg/testng/ITestContext;)V
+METHOD|org.testng.SuiteResult.<init>(Lorg/testng/xml/XmlSuite;Lorg/testng/ITestContext;)V
+METHOD|org.testng.SuiteResult.getPropertyFileName()Ljava/lang/String;
+METHOD|org.testng.SuiteResult.getTestContext()Lorg/testng/ITestContext;
+METHOD|org.testng.SuiteResult.getSuite()Lorg/testng/xml/XmlSuite;
+METHOD|org.testng.SuiteResult.compareTo(Ljava/lang/Object;)I
+METHOD|org.testng.SuiteResult.toString()Ljava/lang/String;
+METHOD|org.testng.SuiteResult.<clinit>()V
+METHOD|org.testng.SuiteRunner$DefaultTestRunnerFactory.<init>([Lorg/testng/ITestListener;Z)V
+METHOD|org.testng.SuiteRunner$DefaultTestRunnerFactory.newTestRunner(Lorg/testng/ISuite;Lorg/testng/xml/XmlTest;)Lorg/testng/TestRunner;
+METHOD|org.testng.SuiteRunner$ProxyTestRunnerFactory.<init>([Lorg/testng/ITestListener;Lorg/testng/ITestRunnerFactory;)V
+METHOD|org.testng.SuiteRunner$ProxyTestRunnerFactory.newTestRunner(Lorg/testng/ISuite;Lorg/testng/xml/XmlTest;)Lorg/testng/TestRunner;
+METHOD|org.testng.SuiteRunner.<init>(Lorg/testng/xml/XmlSuite;Ljava/lang/String;)V
+METHOD|org.testng.SuiteRunner.<init>(Lorg/testng/xml/XmlSuite;Ljava/lang/String;Z)V
+METHOD|org.testng.SuiteRunner.<init>(Lorg/testng/xml/XmlSuite;Ljava/lang/String;Lorg/testng/ITestRunnerFactory;)V
+METHOD|org.testng.SuiteRunner.<init>(Lorg/testng/xml/XmlSuite;Ljava/lang/String;Lorg/testng/ITestRunnerFactory;Z)V
+METHOD|org.testng.SuiteRunner.getName()Ljava/lang/String;
+METHOD|org.testng.SuiteRunner.setTestListeners(Ljava/util/List;)V
+METHOD|org.testng.SuiteRunner.setReportResults(Z)V
+METHOD|org.testng.SuiteRunner.invokeListeners(Z)V
+METHOD|org.testng.SuiteRunner.setOutputDir(Ljava/lang/String;)V
+METHOD|org.testng.SuiteRunner.lazyInit()V
+METHOD|org.testng.SuiteRunner.buildRunnerFactory(Ljava/util/List;)Lorg/testng/ITestRunnerFactory;
+METHOD|org.testng.SuiteRunner.isParallel()Z
+METHOD|org.testng.SuiteRunner.run()V
+METHOD|org.testng.SuiteRunner.privateRun()V
+METHOD|org.testng.SuiteRunner.addListener(Lorg/testng/ISuiteListener;)V
+METHOD|org.testng.SuiteRunner.getOutputDirectory()Ljava/lang/String;
+METHOD|org.testng.SuiteRunner.getResults()Ljava/util/Map;
+METHOD|org.testng.SuiteRunner.getParameter(Ljava/lang/String;)Ljava/lang/String;
+METHOD|org.testng.SuiteRunner.getMethodsByGroups()Ljava/util/Map;
+METHOD|org.testng.SuiteRunner.getInvokedMethods()Ljava/util/Collection;
+METHOD|org.testng.SuiteRunner.getExcludedMethods()Ljava/util/Collection;
+METHOD|org.testng.SuiteRunner.getIncludedOrExcludedMethods(Z)Ljava/util/Collection;
+METHOD|org.testng.SuiteRunner.getAnnotationFinder(Lorg/testng/xml/XmlTest;)Lorg/testng/internal/annotations/IAnnotationFinder;
+METHOD|org.testng.SuiteRunner.getAnnotationFinder(I)Lorg/testng/internal/annotations/IAnnotationFinder;
+METHOD|org.testng.SuiteRunner.ppp(Ljava/lang/String;)V
+METHOD|org.testng.SuiteRunner.setHost(Ljava/lang/String;)V
+METHOD|org.testng.SuiteRunner.getHost()Ljava/lang/String;
+METHOD|org.testng.TestClass.<init>(Lorg/testng/IClass;Ljava/lang/String;Lorg/testng/ITestMethodFinder;Lorg/testng/internal/annotations/IAnnotationFinder;Lorg/testng/internal/RunInfo;Lorg/testng/TestRunner;)V
+METHOD|org.testng.TestClass.<init>(Lorg/testng/IClass;Lorg/testng/TestClass;)V
+METHOD|org.testng.TestClass.getTestName()Ljava/lang/String;
+METHOD|org.testng.TestClass.getAnnotationFinder()Lorg/testng/internal/annotations/IAnnotationFinder;
+METHOD|org.testng.TestClass.init(Lorg/testng/IClass;Ljava/lang/String;Lorg/testng/ITestMethodFinder;Lorg/testng/internal/annotations/IAnnotationFinder;Lorg/testng/internal/RunInfo;Lorg/testng/TestRunner;)V
+METHOD|org.testng.TestClass.initTestClassesAndInstances()V
+METHOD|org.testng.TestClass.getInstances(Z)[Ljava/lang/Object;
+METHOD|org.testng.TestClass.getInstanceHashCodes()[J
+METHOD|org.testng.TestClass.getInstanceCount()I
+METHOD|org.testng.TestClass.addInstance(Ljava/lang/Object;)V
+METHOD|org.testng.TestClass.initMethods()V
+METHOD|org.testng.TestClass.createTestMethods([Lorg/testng/ITestNGMethod;)[Lorg/testng/ITestNGMethod;
+METHOD|org.testng.TestClass.getTestRunner()Lorg/testng/TestRunner;
+METHOD|org.testng.TestClass.getRunInfo()Lorg/testng/internal/RunInfo;
+METHOD|org.testng.TestClass.getTestMethodFinder()Lorg/testng/ITestMethodFinder;
+METHOD|org.testng.TestClass.log(ILjava/lang/String;)V
+METHOD|org.testng.TestClass.ppp(Ljava/lang/String;)V
+METHOD|org.testng.TestClass.getName()Ljava/lang/String;
+METHOD|org.testng.TestClass.getRealClass()Ljava/lang/Class;
+METHOD|org.testng.TestClass.getTestClasses()[Ljava/lang/Class;
+METHOD|org.testng.TestClass.dump()V
+METHOD|org.testng.TestClass.getAfterClassMethods()[Lorg/testng/ITestNGMethod;
+METHOD|org.testng.TestClass.getAfterTestMethods()[Lorg/testng/ITestNGMethod;
+METHOD|org.testng.TestClass.getBeforeClassMethods()[Lorg/testng/ITestNGMethod;
+METHOD|org.testng.TestClass.getBeforeTestMethods()[Lorg/testng/ITestNGMethod;
+METHOD|org.testng.TestClass.getTestMethods()[Lorg/testng/ITestNGMethod;
+METHOD|org.testng.TestClass.getBeforeSuiteMethods()[Lorg/testng/ITestNGMethod;
+METHOD|org.testng.TestClass.getAfterSuiteMethods()[Lorg/testng/ITestNGMethod;
+METHOD|org.testng.TestClass.getBeforeTestConfigurationMethods()[Lorg/testng/ITestNGMethod;
+METHOD|org.testng.TestClass.getAfterTestConfigurationMethods()[Lorg/testng/ITestNGMethod;
+METHOD|org.testng.TestClass.getBeforeGroupsMethods()[Lorg/testng/ITestNGMethod;
+METHOD|org.testng.TestClass.getAfterGroupsMethods()[Lorg/testng/ITestNGMethod;
+METHOD|org.testng.TestClass.toString()Ljava/lang/String;
+METHOD|org.testng.TestException.<init>(Ljava/lang/String;)V
+METHOD|org.testng.TestException.<init>(Ljava/lang/Throwable;)V
+METHOD|org.testng.TestListenerAdapter.<init>()V
+METHOD|org.testng.TestListenerAdapter.onTestSuccess(Lorg/testng/ITestResult;)V
+METHOD|org.testng.TestListenerAdapter.onTestFailure(Lorg/testng/ITestResult;)V
+METHOD|org.testng.TestListenerAdapter.onTestSkipped(Lorg/testng/ITestResult;)V
+METHOD|org.testng.TestListenerAdapter.onTestFailedButWithinSuccessPercentage(Lorg/testng/ITestResult;)V
+METHOD|org.testng.TestListenerAdapter.getAllTestMethods()[Lorg/testng/ITestNGMethod;
+METHOD|org.testng.TestListenerAdapter.onStart(Lorg/testng/ITestContext;)V
+METHOD|org.testng.TestListenerAdapter.onFinish(Lorg/testng/ITestContext;)V
+METHOD|org.testng.TestListenerAdapter.getFailedButWithinSuccessPercentageTests()Ljava/util/List;
+METHOD|org.testng.TestListenerAdapter.getFailedTests()Ljava/util/List;
+METHOD|org.testng.TestListenerAdapter.getPassedTests()Ljava/util/List;
+METHOD|org.testng.TestListenerAdapter.getSkippedTests()Ljava/util/List;
+METHOD|org.testng.TestListenerAdapter.ppp(Ljava/lang/String;)V
+METHOD|org.testng.TestListenerAdapter.setAllTestMethods(Ljava/util/List;)V
+METHOD|org.testng.TestListenerAdapter.setFailedButWithinSuccessPercentageTests(Ljava/util/List;)V
+METHOD|org.testng.TestListenerAdapter.setFailedTests(Ljava/util/List;)V
+METHOD|org.testng.TestListenerAdapter.setPassedTests(Ljava/util/List;)V
+METHOD|org.testng.TestListenerAdapter.setSkippedTests(Ljava/util/List;)V
+METHOD|org.testng.TestListenerAdapter.onTestStart(Lorg/testng/ITestResult;)V
+METHOD|org.testng.TestNG.<init>()V
+METHOD|org.testng.TestNG.<init>(Z)V
+METHOD|org.testng.TestNG.init(Z)V
+METHOD|org.testng.TestNG.getDefault()Lorg/testng/TestNG;
+METHOD|org.testng.TestNG.getStatus()I
+METHOD|org.testng.TestNG.setStatus(I)V
+METHOD|org.testng.TestNG.setOutputDirectory(Ljava/lang/String;)V
+METHOD|org.testng.TestNG.setUseDefaultListeners(Z)V
+METHOD|org.testng.TestNG.setTarget(Ljava/lang/String;)V
+METHOD|org.testng.TestNG.setSourcePath(Ljava/lang/String;)V
+METHOD|org.testng.TestNG.setTestJar(Ljava/lang/String;)V
+METHOD|org.testng.TestNG.setThreadCount(I)V
+METHOD|org.testng.TestNG.setParallel(Z)V
+METHOD|org.testng.TestNG.setCommandLineSuite(Lorg/testng/xml/XmlSuite;)V
+METHOD|org.testng.TestNG.setTestClasses([Ljava/lang/Class;)V
+METHOD|org.testng.TestNG.createCommandLineSuites([Ljava/lang/Class;)[Lorg/testng/xml/XmlSuite;
+METHOD|org.testng.TestNG.setTestSuites(Ljava/util/List;)V
+METHOD|org.testng.TestNG.setXmlSuites(Ljava/util/List;)V
+METHOD|org.testng.TestNG.setExcludedGroups(Ljava/lang/String;)V
+METHOD|org.testng.TestNG.setGroups(Ljava/lang/String;)V
+METHOD|org.testng.TestNG.setTestRunnerFactoryClass(Ljava/lang/Class;)V
+METHOD|org.testng.TestNG.setTestRunnerFactory(Lorg/testng/ITestRunnerFactory;)V
+METHOD|org.testng.TestNG.setListenerClasses(Ljava/util/List;)V
+METHOD|org.testng.TestNG.setListeners(Ljava/util/List;)V
+METHOD|org.testng.TestNG.addListener(Ljava/lang/Object;)V
+METHOD|org.testng.TestNG.addListener(Lorg/testng/ISuiteListener;)V
+METHOD|org.testng.TestNG.addListener(Lorg/testng/ITestListener;)V
+METHOD|org.testng.TestNG.addListener(Lorg/testng/IReporter;)V
+METHOD|org.testng.TestNG.getReporters()Ljava/util/List;
+METHOD|org.testng.TestNG.getTestListeners()Ljava/util/List;
+METHOD|org.testng.TestNG.getSuiteListeners()Ljava/util/List;
+METHOD|org.testng.TestNG.setVerbose(I)V
+METHOD|org.testng.TestNG.run()V
+METHOD|org.testng.TestNG.resetSocket(ILorg/testng/remote/ConnectionInfo;)Lorg/testng/remote/ConnectionInfo;
+METHOD|org.testng.TestNG.waitForSuites()V
+METHOD|org.testng.TestNG.log(Ljava/lang/String;)V
+METHOD|org.testng.TestNG.runSuitesRemotely()Ljava/util/List;
+METHOD|org.testng.TestNG.runSuitesLocally()Ljava/util/List;
+METHOD|org.testng.TestNG.createAndRunSuiteRunners(Lorg/testng/xml/XmlSuite;)Lorg/testng/SuiteRunner;
+METHOD|org.testng.TestNG.newInstance(Ljava/lang/Class;)Ljava/lang/Object;
+METHOD|org.testng.TestNG.main([Ljava/lang/String;)V
+METHOD|org.testng.TestNG.privateMain([Ljava/lang/String;Lorg/testng/ITestListener;)Lorg/testng/TestNG;
+METHOD|org.testng.TestNG.setClientPort(I)V
+METHOD|org.testng.TestNG.setHostFile(Ljava/lang/String;)V
+METHOD|org.testng.TestNG.setJUnit(Ljava/lang/Boolean;)V
+METHOD|org.testng.TestNG.setTestNGVersion()V
+METHOD|org.testng.TestNG.isJdk14()Z
+METHOD|org.testng.TestNG.checkConditions(Ljava/util/Map;)V
+METHOD|org.testng.TestNG.ppp(Ljava/lang/String;)V
+METHOD|org.testng.TestNG.hasFailure()Z
+METHOD|org.testng.TestNG.setHasFailure(Z)V
+METHOD|org.testng.TestNG.hasFailureWithinSuccessPercentage()Z
+METHOD|org.testng.TestNG.setHasFailureWithinSuccessPercentage(Z)V
+METHOD|org.testng.TestNG.hasSkip()Z
+METHOD|org.testng.TestNG.setHasSkip(Z)V
+METHOD|org.testng.TestNG.usage()V
+METHOD|org.testng.TestNG.exitWithError(Ljava/lang/String;)V
+METHOD|org.testng.TestNG.getOutputDirectory()Ljava/lang/String;
+METHOD|org.testng.TestNGAntTask.<init>()V
+METHOD|org.testng.TestNGAntTask.setHaltonfailure(Z)V
+METHOD|org.testng.TestNGAntTask.setFailureProperty(Ljava/lang/String;)V
+METHOD|org.testng.TestNGAntTask.setHaltonskipped(Z)V
+METHOD|org.testng.TestNGAntTask.setSkippedProperty(Ljava/lang/String;)V
+METHOD|org.testng.TestNGAntTask.setHaltonFSP(Z)V
+METHOD|org.testng.TestNGAntTask.setFSPProperty(Ljava/lang/String;)V
+METHOD|org.testng.TestNGAntTask.setDumpCommand(Z)V
+METHOD|org.testng.TestNGAntTask.setEnableAssert(Z)V
+METHOD|org.testng.TestNGAntTask.setWorkingDir(Ljava/io/File;)V
+METHOD|org.testng.TestNGAntTask.setJvm(Ljava/lang/String;)V
+METHOD|org.testng.TestNGAntTask.setTimeout(Ljava/lang/Integer;)V
+METHOD|org.testng.TestNGAntTask.createJvmarg()Lorg/apache/tools/ant/types/Commandline$Argument;
+METHOD|org.testng.TestNGAntTask.addSysproperty(Lorg/apache/tools/ant/types/Environment$Variable;)V
+METHOD|org.testng.TestNGAntTask.addEnv(Lorg/apache/tools/ant/types/Environment$Variable;)V
+METHOD|org.testng.TestNGAntTask.createClasspath()Lorg/apache/tools/ant/types/Path;
+METHOD|org.testng.TestNGAntTask.createBootclasspath()Lorg/apache/tools/ant/types/Path;
+METHOD|org.testng.TestNGAntTask.setClasspath(Lorg/apache/tools/ant/types/Path;)V
+METHOD|org.testng.TestNGAntTask.setClasspathRef(Lorg/apache/tools/ant/types/Reference;)V
+METHOD|org.testng.TestNGAntTask.addXmlfileset(Lorg/apache/tools/ant/types/FileSet;)V
+METHOD|org.testng.TestNGAntTask.setXmlfilesetRef(Lorg/apache/tools/ant/types/Reference;)V
+METHOD|org.testng.TestNGAntTask.addClassfileset(Lorg/apache/tools/ant/types/FileSet;)V
+METHOD|org.testng.TestNGAntTask.setClassfilesetRef(Lorg/apache/tools/ant/types/Reference;)V
+METHOD|org.testng.TestNGAntTask.setSourcedir(Lorg/apache/tools/ant/types/Path;)V
+METHOD|org.testng.TestNGAntTask.createSourceDir()Lorg/apache/tools/ant/types/Path;
+METHOD|org.testng.TestNGAntTask.setSourceDirRef(Lorg/apache/tools/ant/types/Reference;)V
+METHOD|org.testng.TestNGAntTask.setSuiteRunnerClass(Ljava/lang/String;)V
+METHOD|org.testng.TestNGAntTask.setJUnit(Z)V
+METHOD|org.testng.TestNGAntTask.setTarget(Ljava/lang/String;)V
+METHOD|org.testng.TestNGAntTask.setOutputDir(Ljava/io/File;)V
+METHOD|org.testng.TestNGAntTask.setTestJar(Ljava/io/File;)V
+METHOD|org.testng.TestNGAntTask.setGroups(Ljava/lang/String;)V
+METHOD|org.testng.TestNGAntTask.setExcludedGroups(Ljava/lang/String;)V
+METHOD|org.testng.TestNGAntTask.setVerbose(Ljava/lang/Integer;)V
+METHOD|org.testng.TestNGAntTask.setReporter(Ljava/lang/String;)V
+METHOD|org.testng.TestNGAntTask.setListener(Ljava/lang/String;)V
+METHOD|org.testng.TestNGAntTask.execute()V
+METHOD|org.testng.TestNGAntTask.actOnResult(IZ)V
+METHOD|org.testng.TestNGAntTask.executeAsForked(Lorg/apache/tools/ant/types/CommandlineJava;Lorg/apache/tools/ant/taskdefs/ExecuteWatchdog;)I
+METHOD|org.testng.TestNGAntTask.getJavaCommand()Lorg/apache/tools/ant/types/CommandlineJava;
+METHOD|org.testng.TestNGAntTask.createWatchdog()Lorg/apache/tools/ant/taskdefs/ExecuteWatchdog;
+METHOD|org.testng.TestNGAntTask.validateOptions()V
+METHOD|org.testng.TestNGAntTask.usesJavadocAnnotations()Z
+METHOD|org.testng.TestNGAntTask.createFileSet(Lorg/apache/tools/ant/types/Reference;)Lorg/apache/tools/ant/types/FileSet;
+METHOD|org.testng.TestNGAntTask.findJar()Ljava/io/File;
+METHOD|org.testng.TestNGAntTask.fromURI(Ljava/lang/String;)Ljava/lang/String;
+METHOD|org.testng.TestNGAntTask.fileset(Ljava/util/List;)Ljava/util/List;
+METHOD|org.testng.TestNGAntTask.createPathString(Lorg/apache/tools/ant/types/Path;Ljava/lang/String;)Ljava/lang/String;
+METHOD|org.testng.TestNGAntTask.dumpCommand()V
+METHOD|org.testng.TestNGCommandLineArgs.<init>()V
+METHOD|org.testng.TestNGCommandLineArgs.parseCommandLine([Ljava/lang/String;)Ljava/util/Map;
+METHOD|org.testng.TestNGCommandLineArgs.fileToClass(Ljava/lang/String;)Ljava/lang/Class;
+METHOD|org.testng.TestNGCommandLineArgs.usage()V
+METHOD|org.testng.TestNGCommandLineArgs.<clinit>()V
+METHOD|org.testng.TestNGException.<init>(Ljava/lang/Throwable;)V
+METHOD|org.testng.TestNGException.<init>(Ljava/lang/String;)V
+METHOD|org.testng.TestNGException.<init>(Ljava/lang/String;Ljava/lang/Throwable;)V
+METHOD|org.testng.TestRunner.<init>(Lorg/testng/ISuite;Lorg/testng/xml/XmlTest;Ljava/lang/String;Lorg/testng/internal/annotations/IAnnotationFinder;)V
+METHOD|org.testng.TestRunner.<init>(Lorg/testng/ISuite;Lorg/testng/xml/XmlTest;Lorg/testng/internal/annotations/IAnnotationFinder;)V
+METHOD|org.testng.TestRunner.<init>(Lorg/testng/ISuite;Lorg/testng/xml/XmlTest;)V
+METHOD|org.testng.TestRunner.init(Lorg/testng/ISuite;Lorg/testng/xml/XmlTest;Ljava/lang/String;Lorg/testng/internal/annotations/IAnnotationFinder;)V
+METHOD|org.testng.TestRunner.getInvoker()Lorg/testng/internal/IInvoker;
+METHOD|org.testng.TestRunner.getBeforeSuiteMethods()[Lorg/testng/ITestNGMethod;
+METHOD|org.testng.TestRunner.getAfterSuiteMethods()[Lorg/testng/ITestNGMethod;
+METHOD|org.testng.TestRunner.getBeforeTestConfigurationMethods()[Lorg/testng/ITestNGMethod;
+METHOD|org.testng.TestRunner.getAfterTestConfigurationMethods()[Lorg/testng/ITestNGMethod;
+METHOD|org.testng.TestRunner.init()V
+METHOD|org.testng.TestRunner.initMetaGroups(Lorg/testng/xml/XmlTest;)V
+METHOD|org.testng.TestRunner.initRunInfo(Lorg/testng/xml/XmlTest;)V
+METHOD|org.testng.TestRunner.initMethods()V
+METHOD|org.testng.TestRunner.findGroupMethods(Ljava/util/Collection;)Lorg/testng/internal/ConfigurationGroupMethods;
+METHOD|org.testng.TestRunner.fillGroupMethods(Ljava/util/Collection;Ljava/util/Map;Z)V
+METHOD|org.testng.TestRunner.ppp(Ljava/lang/String;)V
+METHOD|org.testng.TestRunner.fixMethodsWithClass([Lorg/testng/ITestNGMethod;Lorg/testng/ITestClass;Ljava/util/List;)V
+METHOD|org.testng.TestRunner.getIClass()Ljava/util/Collection;
+METHOD|org.testng.TestRunner.findIClass([Lorg/testng/IClass;Ljava/lang/Class;)Lorg/testng/IClass;
+METHOD|org.testng.TestRunner.getName()Ljava/lang/String;
+METHOD|org.testng.TestRunner.getIncludedGroups()[Ljava/lang/String;
+METHOD|org.testng.TestRunner.getExcludedGroups()[Ljava/lang/String;
+METHOD|org.testng.TestRunner.setTestName(Ljava/lang/String;)V
+METHOD|org.testng.TestRunner.setOutputDirectory(Ljava/lang/String;)V
+METHOD|org.testng.TestRunner.getOutputDirectory()Ljava/lang/String;
+METHOD|org.testng.TestRunner.getEndDate()Ljava/util/Date;
+METHOD|org.testng.TestRunner.getStartDate()Ljava/util/Date;
+METHOD|org.testng.TestRunner.addMetaGroup(Ljava/lang/String;Ljava/util/List;)V
+METHOD|org.testng.TestRunner.collectGroups([Ljava/lang/String;Ljava/util/List;Ljava/util/Map;)V
+METHOD|org.testng.TestRunner.createGroups(Ljava/util/List;)Ljava/util/Map;
+METHOD|org.testng.TestRunner.createGroups([Ljava/lang/String;)Ljava/util/Map;
+METHOD|org.testng.TestRunner.collectAndOrderTestMethods([Lorg/testng/ITestNGMethod;)[Lorg/testng/ITestNGMethod;
+METHOD|org.testng.TestRunner.run()V
+METHOD|org.testng.TestRunner.beforeRun()V
+METHOD|org.testng.TestRunner.privateRun(Lorg/testng/xml/XmlTest;)V
+METHOD|org.testng.TestRunner.afterRun()V
+METHOD|org.testng.TestRunner.containsString(Ljava/util/Map;Ljava/lang/String;)Z
+METHOD|org.testng.TestRunner.computeTestLists(Ljava/util/List;Ljava/util/List;)V
+METHOD|org.testng.TestRunner.invokeClassConfigurations([Lorg/testng/ITestNGMethod;Lorg/testng/xml/XmlTest;Z)V
+METHOD|org.testng.TestRunner.logStart()V
+METHOD|org.testng.TestRunner.fireEvent(Z)V
+METHOD|org.testng.TestRunner.addPassedTest(Lorg/testng/ITestNGMethod;Lorg/testng/ITestResult;)V
+METHOD|org.testng.TestRunner.getPassedTests(Lorg/testng/ITestNGMethod;)Ljava/util/Set;
+METHOD|org.testng.TestRunner.addSkippedTest(Lorg/testng/ITestNGMethod;Lorg/testng/ITestResult;)V
+METHOD|org.testng.TestRunner.addInvokedMethod(Lorg/testng/internal/InvokedMethod;)V
+METHOD|org.testng.TestRunner.addFailedTest(Lorg/testng/ITestNGMethod;Lorg/testng/ITestResult;)V
+METHOD|org.testng.TestRunner.addFailedButWithinSuccessPercentageTest(Lorg/testng/ITestNGMethod;Lorg/testng/ITestResult;)V
+METHOD|org.testng.TestRunner.getTest()Lorg/testng/xml/XmlTest;
+METHOD|org.testng.TestRunner.getTestListeners()Ljava/util/List;
+METHOD|org.testng.TestRunner.findTestClass(Ljava/lang/Class;)Lorg/testng/IClass;
+METHOD|org.testng.TestRunner.getTestMethods()[Lorg/testng/ITestNGMethod;
+METHOD|org.testng.TestRunner.logFailedTest(Lorg/testng/ITestNGMethod;Lorg/testng/ITestResult;Z)V
+METHOD|org.testng.TestRunner.mapToString(Ljava/util/Map;)Ljava/lang/String;
+METHOD|org.testng.TestRunner.log(ILjava/lang/String;)V
+METHOD|org.testng.TestRunner.getVerbose()I
+METHOD|org.testng.TestRunner.setVerbose(I)V
+METHOD|org.testng.TestRunner.log(Ljava/lang/String;)V
+METHOD|org.testng.TestRunner.getPassedTests()Lorg/testng/IResultMap;
+METHOD|org.testng.TestRunner.getSkippedTests()Lorg/testng/IResultMap;
+METHOD|org.testng.TestRunner.getFailedTests()Lorg/testng/IResultMap;
+METHOD|org.testng.TestRunner.getFailedButWithinSuccessPercentageTests()Lorg/testng/IResultMap;
+METHOD|org.testng.TestRunner.addTestListener(Lorg/testng/ITestListener;)V
+METHOD|org.testng.TestRunner.getSuite()Lorg/testng/ISuite;
+METHOD|org.testng.TestRunner.getAllTestMethods()[Lorg/testng/ITestNGMethod;
+METHOD|org.testng.TestRunner.dumpInvokedMethods()V
+METHOD|org.testng.TestRunner.getInvokedMethods()Ljava/util/List;
+METHOD|org.testng.TestRunner.getHost()Ljava/lang/String;
+METHOD|org.testng.TestRunner.getExcludedMethods()Ljava/util/Collection;
+METHOD|org.testng.TestRunner.<clinit>()V
+METHOD|org.testng.annotations.AfterClass.enabled()Z
+METHOD|org.testng.annotations.AfterClass.groups()[Ljava/lang/String;
+METHOD|org.testng.annotations.AfterClass.dependsOnGroups()[Ljava/lang/String;
+METHOD|org.testng.annotations.AfterClass.dependsOnMethods()[Ljava/lang/String;
+METHOD|org.testng.annotations.AfterClass.alwaysRun()Z
+METHOD|org.testng.annotations.AfterClass.inheritGroups()Z
+METHOD|org.testng.annotations.AfterClass.description()Ljava/lang/String;
+METHOD|org.testng.annotations.AfterGroups.value()[Ljava/lang/String;
+METHOD|org.testng.annotations.AfterGroups.enabled()Z
+METHOD|org.testng.annotations.AfterGroups.groups()[Ljava/lang/String;
+METHOD|org.testng.annotations.AfterGroups.dependsOnGroups()[Ljava/lang/String;
+METHOD|org.testng.annotations.AfterGroups.dependsOnMethods()[Ljava/lang/String;
+METHOD|org.testng.annotations.AfterGroups.alwaysRun()Z
+METHOD|org.testng.annotations.AfterGroups.inheritGroups()Z
+METHOD|org.testng.annotations.AfterGroups.description()Ljava/lang/String;
+METHOD|org.testng.annotations.AfterMethod.enabled()Z
+METHOD|org.testng.annotations.AfterMethod.groups()[Ljava/lang/String;
+METHOD|org.testng.annotations.AfterMethod.dependsOnGroups()[Ljava/lang/String;
+METHOD|org.testng.annotations.AfterMethod.dependsOnMethods()[Ljava/lang/String;
+METHOD|org.testng.annotations.AfterMethod.alwaysRun()Z
+METHOD|org.testng.annotations.AfterMethod.inheritGroups()Z
+METHOD|org.testng.annotations.AfterMethod.description()Ljava/lang/String;
+METHOD|org.testng.annotations.AfterSuite.enabled()Z
+METHOD|org.testng.annotations.AfterSuite.groups()[Ljava/lang/String;
+METHOD|org.testng.annotations.AfterSuite.dependsOnGroups()[Ljava/lang/String;
+METHOD|org.testng.annotations.AfterSuite.dependsOnMethods()[Ljava/lang/String;
+METHOD|org.testng.annotations.AfterSuite.alwaysRun()Z
+METHOD|org.testng.annotations.AfterSuite.inheritGroups()Z
+METHOD|org.testng.annotations.AfterSuite.description()Ljava/lang/String;
+METHOD|org.testng.annotations.AfterTest.enabled()Z
+METHOD|org.testng.annotations.AfterTest.groups()[Ljava/lang/String;
+METHOD|org.testng.annotations.AfterTest.dependsOnGroups()[Ljava/lang/String;
+METHOD|org.testng.annotations.AfterTest.dependsOnMethods()[Ljava/lang/String;
+METHOD|org.testng.annotations.AfterTest.alwaysRun()Z
+METHOD|org.testng.annotations.AfterTest.inheritGroups()Z
+METHOD|org.testng.annotations.AfterTest.description()Ljava/lang/String;
+METHOD|org.testng.annotations.BeforeClass.enabled()Z
+METHOD|org.testng.annotations.BeforeClass.groups()[Ljava/lang/String;
+METHOD|org.testng.annotations.BeforeClass.dependsOnGroups()[Ljava/lang/String;
+METHOD|org.testng.annotations.BeforeClass.dependsOnMethods()[Ljava/lang/String;
+METHOD|org.testng.annotations.BeforeClass.alwaysRun()Z
+METHOD|org.testng.annotations.BeforeClass.inheritGroups()Z
+METHOD|org.testng.annotations.BeforeClass.description()Ljava/lang/String;
+METHOD|org.testng.annotations.BeforeGroups.value()[Ljava/lang/String;
+METHOD|org.testng.annotations.BeforeGroups.enabled()Z
+METHOD|org.testng.annotations.BeforeGroups.groups()[Ljava/lang/String;
+METHOD|org.testng.annotations.BeforeGroups.dependsOnGroups()[Ljava/lang/String;
+METHOD|org.testng.annotations.BeforeGroups.dependsOnMethods()[Ljava/lang/String;
+METHOD|org.testng.annotations.BeforeGroups.alwaysRun()Z
+METHOD|org.testng.annotations.BeforeGroups.inheritGroups()Z
+METHOD|org.testng.annotations.BeforeGroups.description()Ljava/lang/String;
+METHOD|org.testng.annotations.BeforeMethod.enabled()Z
+METHOD|org.testng.annotations.BeforeMethod.groups()[Ljava/lang/String;
+METHOD|org.testng.annotations.BeforeMethod.dependsOnGroups()[Ljava/lang/String;
+METHOD|org.testng.annotations.BeforeMethod.dependsOnMethods()[Ljava/lang/String;
+METHOD|org.testng.annotations.BeforeMethod.alwaysRun()Z
+METHOD|org.testng.annotations.BeforeMethod.inheritGroups()Z
+METHOD|org.testng.annotations.BeforeMethod.description()Ljava/lang/String;
+METHOD|org.testng.annotations.BeforeSuite.enabled()Z
+METHOD|org.testng.annotations.BeforeSuite.groups()[Ljava/lang/String;
+METHOD|org.testng.annotations.BeforeSuite.dependsOnGroups()[Ljava/lang/String;
+METHOD|org.testng.annotations.BeforeSuite.dependsOnMethods()[Ljava/lang/String;
+METHOD|org.testng.annotations.BeforeSuite.alwaysRun()Z
+METHOD|org.testng.annotations.BeforeSuite.inheritGroups()Z
+METHOD|org.testng.annotations.BeforeSuite.description()Ljava/lang/String;
+METHOD|org.testng.annotations.BeforeTest.enabled()Z
+METHOD|org.testng.annotations.BeforeTest.groups()[Ljava/lang/String;
+METHOD|org.testng.annotations.BeforeTest.dependsOnGroups()[Ljava/lang/String;
+METHOD|org.testng.annotations.BeforeTest.dependsOnMethods()[Ljava/lang/String;
+METHOD|org.testng.annotations.BeforeTest.alwaysRun()Z
+METHOD|org.testng.annotations.BeforeTest.inheritGroups()Z
+METHOD|org.testng.annotations.BeforeTest.description()Ljava/lang/String;
+METHOD|org.testng.annotations.Configuration.beforeTestClass()Z
+METHOD|org.testng.annotations.Configuration.afterTestClass()Z
+METHOD|org.testng.annotations.Configuration.beforeTestMethod()Z
+METHOD|org.testng.annotations.Configuration.afterTestMethod()Z
+METHOD|org.testng.annotations.Configuration.beforeSuite()Z
+METHOD|org.testng.annotations.Configuration.afterSuite()Z
+METHOD|org.testng.annotations.Configuration.beforeTest()Z
+METHOD|org.testng.annotations.Configuration.afterTest()Z
+METHOD|org.testng.annotations.Configuration.beforeGroups()[Ljava/lang/String;
+METHOD|org.testng.annotations.Configuration.afterGroups()[Ljava/lang/String;
+METHOD|org.testng.annotations.Configuration.parameters()[Ljava/lang/String;
+METHOD|org.testng.annotations.Configuration.enabled()Z
+METHOD|org.testng.annotations.Configuration.groups()[Ljava/lang/String;
+METHOD|org.testng.annotations.Configuration.dependsOnGroups()[Ljava/lang/String;
+METHOD|org.testng.annotations.Configuration.dependsOnMethods()[Ljava/lang/String;
+METHOD|org.testng.annotations.Configuration.alwaysRun()Z
+METHOD|org.testng.annotations.Configuration.inheritGroups()Z
+METHOD|org.testng.annotations.Configuration.description()Ljava/lang/String;
+METHOD|org.testng.annotations.DataProvider.name()Ljava/lang/String;
+METHOD|org.testng.annotations.ExpectedExceptions.value()[Ljava/lang/Class;
+METHOD|org.testng.annotations.Factory.parameters()[Ljava/lang/String;
+METHOD|org.testng.annotations.Parameters.value()[Ljava/lang/String;
+METHOD|org.testng.annotations.Test.groups()[Ljava/lang/String;
+METHOD|org.testng.annotations.Test.enabled()Z
+METHOD|org.testng.annotations.Test.parameters()[Ljava/lang/String;
+METHOD|org.testng.annotations.Test.dependsOnGroups()[Ljava/lang/String;
+METHOD|org.testng.annotations.Test.dependsOnMethods()[Ljava/lang/String;
+METHOD|org.testng.annotations.Test.timeOut()J
+METHOD|org.testng.annotations.Test.invocationCount()I
+METHOD|org.testng.annotations.Test.threadPoolSize()I
+METHOD|org.testng.annotations.Test.successPercentage()I
+METHOD|org.testng.annotations.Test.dataProvider()Ljava/lang/String;
+METHOD|org.testng.annotations.Test.alwaysRun()Z
+METHOD|org.testng.annotations.Test.description()Ljava/lang/String;
+METHOD|org.testng.annotations.Test.expectedExceptions()[Ljava/lang/Class;
+METHOD|org.testng.annotations.Test.suiteName()Ljava/lang/String;
+METHOD|org.testng.annotations.Test.testName()Ljava/lang/String;
+METHOD|org.testng.annotations.Test.sequential()Z
+METHOD|org.testng.internal.ArrayIterator.<init>([[Ljava/lang/Object;)V
+METHOD|org.testng.internal.ArrayIterator.hasNext()Z
+METHOD|org.testng.internal.ArrayIterator.next()Ljava/lang/Object;
+METHOD|org.testng.internal.ArrayIterator.remove()V
+METHOD|org.testng.internal.BaseClassFinder.<init>()V
+METHOD|org.testng.internal.BaseClassFinder.getIClass(Ljava/lang/Class;)Lorg/testng/IClass;
+METHOD|org.testng.internal.BaseClassFinder.putIClass(Ljava/lang/Class;Lorg/testng/IClass;)V
+METHOD|org.testng.internal.BaseClassFinder.ppp(Ljava/lang/String;)V
+METHOD|org.testng.internal.BaseClassFinder.findOrCreateIClass(Ljava/lang/Class;Ljava/lang/Object;Lorg/testng/xml/XmlTest;Lorg/testng/internal/annotations/IAnnotationFinder;)Lorg/testng/IClass;
+METHOD|org.testng.internal.BaseClassFinder.getExistingClasses()Ljava/util/Map;
+METHOD|org.testng.internal.BaseClassFinder.classExists(Ljava/lang/Class;)Z
+METHOD|org.testng.internal.BaseClassFinder.findTestClasses()[Lorg/testng/IClass;
+METHOD|org.testng.internal.BaseTestMethod$1.<init>()V
+METHOD|org.testng.internal.BaseTestMethod$1.compare(Ljava/lang/Object;Ljava/lang/Object;)I
+METHOD|org.testng.internal.BaseTestMethod.<init>(Ljava/lang/reflect/Method;Lorg/testng/internal/annotations/IAnnotationFinder;)V
+METHOD|org.testng.internal.BaseTestMethod.isAlwaysRun()Z
+METHOD|org.testng.internal.BaseTestMethod.setAlwaysRun(Z)V
+METHOD|org.testng.internal.BaseTestMethod.getRealClass()Ljava/lang/Class;
+METHOD|org.testng.internal.BaseTestMethod.getTestClass()Lorg/testng/ITestClass;
+METHOD|org.testng.internal.BaseTestMethod.setTestClass(Lorg/testng/ITestClass;)V
+METHOD|org.testng.internal.BaseTestMethod.compareTo(Ljava/lang/Object;)I
+METHOD|org.testng.internal.BaseTestMethod.getMethod()Ljava/lang/reflect/Method;
+METHOD|org.testng.internal.BaseTestMethod.getMethodName()Ljava/lang/String;
+METHOD|org.testng.internal.BaseTestMethod.getInstances()[Ljava/lang/Object;
+METHOD|org.testng.internal.BaseTestMethod.getInstanceHashCodes()[J
+METHOD|org.testng.internal.BaseTestMethod.getGroups()[Ljava/lang/String;
+METHOD|org.testng.internal.BaseTestMethod.getGroupsDependedUpon()[Ljava/lang/String;
+METHOD|org.testng.internal.BaseTestMethod.getMethodsDependedUpon()[Ljava/lang/String;
+METHOD|org.testng.internal.BaseTestMethod.isTest()Z
+METHOD|org.testng.internal.BaseTestMethod.isBeforeSuiteConfiguration()Z
+METHOD|org.testng.internal.BaseTestMethod.isAfterSuiteConfiguration()Z
+METHOD|org.testng.internal.BaseTestMethod.isBeforeTestConfiguration()Z
+METHOD|org.testng.internal.BaseTestMethod.isAfterTestConfiguration()Z
+METHOD|org.testng.internal.BaseTestMethod.isBeforeGroupsConfiguration()Z
+METHOD|org.testng.internal.BaseTestMethod.isAfterGroupsConfiguration()Z
+METHOD|org.testng.internal.BaseTestMethod.isBeforeClassConfiguration()Z
+METHOD|org.testng.internal.BaseTestMethod.isAfterClassConfiguration()Z
+METHOD|org.testng.internal.BaseTestMethod.isBeforeMethodConfiguration()Z
+METHOD|org.testng.internal.BaseTestMethod.isAfterMethodConfiguration()Z
+METHOD|org.testng.internal.BaseTestMethod.getTimeOut()J
+METHOD|org.testng.internal.BaseTestMethod.getInvocationCount()I
+METHOD|org.testng.internal.BaseTestMethod.getSuccessPercentage()I
+METHOD|org.testng.internal.BaseTestMethod.getId()J
+METHOD|org.testng.internal.BaseTestMethod.setId(J)V
+METHOD|org.testng.internal.BaseTestMethod.getDate()J
+METHOD|org.testng.internal.BaseTestMethod.setDate(J)V
+METHOD|org.testng.internal.BaseTestMethod.canRunFromClass(Lorg/testng/IClass;)Z
+METHOD|org.testng.internal.BaseTestMethod.equals(Ljava/lang/Object;)Z
+METHOD|org.testng.internal.BaseTestMethod.hashCode()I
+METHOD|org.testng.internal.BaseTestMethod.initGroups(Ljava/lang/Class;)V
+METHOD|org.testng.internal.BaseTestMethod.getAnnotationFinder()Lorg/testng/internal/annotations/IAnnotationFinder;
+METHOD|org.testng.internal.BaseTestMethod.getIClass()Lorg/testng/IClass;
+METHOD|org.testng.internal.BaseTestMethod.getSignature()Ljava/lang/String;
+METHOD|org.testng.internal.BaseTestMethod.initSignature()Ljava/lang/String;
+METHOD|org.testng.internal.BaseTestMethod.toString()Ljava/lang/String;
+METHOD|org.testng.internal.BaseTestMethod.getStringArray([Ljava/lang/String;[Ljava/lang/String;)[Ljava/lang/String;
+METHOD|org.testng.internal.BaseTestMethod.setGroups([Ljava/lang/String;)V
+METHOD|org.testng.internal.BaseTestMethod.setGroupsDependedUpon([Ljava/lang/String;)V
+METHOD|org.testng.internal.BaseTestMethod.setMethodsDependedUpon([Ljava/lang/String;)V
+METHOD|org.testng.internal.BaseTestMethod.addMethodDependedUpon(Ljava/lang/String;)V
+METHOD|org.testng.internal.BaseTestMethod.ppp(Ljava/lang/String;)V
+METHOD|org.testng.internal.BaseTestMethod.getMissingGroup()Ljava/lang/String;
+METHOD|org.testng.internal.BaseTestMethod.setMissingGroup(Ljava/lang/String;)V
+METHOD|org.testng.internal.BaseTestMethod.getThreadPoolSize()I
+METHOD|org.testng.internal.BaseTestMethod.setThreadPoolSize(Ljava/lang/Integer;)V
+METHOD|org.testng.internal.BaseTestMethod.setDescription(Ljava/lang/String;)V
+METHOD|org.testng.internal.BaseTestMethod.getDescription()Ljava/lang/String;
+METHOD|org.testng.internal.BaseTestMethod.getBeforeGroups()[Ljava/lang/String;
+METHOD|org.testng.internal.BaseTestMethod.getAfterGroups()[Ljava/lang/String;
+METHOD|org.testng.internal.BaseTestMethod.<clinit>()V
+METHOD|org.testng.internal.ClassHelper.<init>()V
+METHOD|org.testng.internal.ClassHelper.forName(Ljava/lang/String;)Ljava/lang/Class;
+METHOD|org.testng.internal.ClassHelper.findFactoryMethod(Ljava/lang/Class;Lorg/testng/internal/annotations/IAnnotationFinder;)Ljava/lang/reflect/Method;
+METHOD|org.testng.internal.ClassHelper.getAvailableMethods(Ljava/lang/Class;)Ljava/util/Set;
+METHOD|org.testng.internal.ClassHelper.extractMethods(Ljava/lang/Class;Ljava/lang/Class;Ljava/util/Set;)Ljava/util/Set;
+METHOD|org.testng.internal.ClassHelper.isOverridden(Ljava/lang/reflect/Method;Ljava/util/Set;)Z
+METHOD|org.testng.internal.ClassHelper.createSelector(Lorg/testng/xml/XmlMethodSelector;)Lorg/testng/IMethodSelector;
+METHOD|org.testng.internal.ClassImpl.<init>(Ljava/lang/Class;Ljava/lang/Object;Ljava/util/Map;Lorg/testng/xml/XmlTest;Lorg/testng/internal/annotations/IAnnotationFinder;)V
+METHOD|org.testng.internal.ClassImpl.ppp(Ljava/lang/String;)V
+METHOD|org.testng.internal.ClassImpl.getName()Ljava/lang/String;
+METHOD|org.testng.internal.ClassImpl.getRealClass()Ljava/lang/Class;
+METHOD|org.testng.internal.ClassImpl.getInstanceCount()I
+METHOD|org.testng.internal.ClassImpl.getInstanceHashCodes()[J
+METHOD|org.testng.internal.ClassImpl.getDefaultInstance()Ljava/lang/Object;
+METHOD|org.testng.internal.ClassImpl.getInstances(Z)[Ljava/lang/Object;
+METHOD|org.testng.internal.ClassImpl.toString()Ljava/lang/String;
+METHOD|org.testng.internal.ClassImpl.addInstance(Ljava/lang/Object;)V
+METHOD|org.testng.internal.ConfigurationGroupMethods.<init>([Lorg/testng/ITestNGMethod;)V
+METHOD|org.testng.internal.ConfigurationGroupMethods.isLastMethodForGroup(Ljava/lang/String;Lorg/testng/ITestNGMethod;)Z
+METHOD|org.testng.internal.ConfigurationGroupMethods.removeBeforeMethod(Ljava/lang/String;Lorg/testng/ITestNGMethod;)V
+METHOD|org.testng.internal.ConfigurationGroupMethods.log(Ljava/lang/String;)V
+METHOD|org.testng.internal.ConfigurationGroupMethods.getBeforeGroupsMap()Ljava/util/Map;
+METHOD|org.testng.internal.ConfigurationGroupMethods.getAfterGroupsMap()Ljava/util/Map;
+METHOD|org.testng.internal.ConfigurationGroupMethods.getBeforeGroupsMethods()Ljava/util/List;
+METHOD|org.testng.internal.ConfigurationGroupMethods.getAfterGroupsMethods()Ljava/util/List;
+METHOD|org.testng.internal.ConfigurationGroupMethods.unique(Ljava/util/Collection;)Ljava/util/List;
+METHOD|org.testng.internal.ConfigurationGroupMethods.removeBeforeGroups([Ljava/lang/String;)V
+METHOD|org.testng.internal.ConfigurationGroupMethods.removeAfterGroups(Ljava/util/Collection;)V
+METHOD|org.testng.internal.ConfigurationMethod.<init>(Ljava/lang/reflect/Method;Lorg/testng/internal/annotations/IAnnotationFinder;ZZZZZZZZ[Ljava/lang/String;[Ljava/lang/String;)V
+METHOD|org.testng.internal.ConfigurationMethod.createSuiteConfigurationMethods([Lorg/testng/ITestNGMethod;Lorg/testng/internal/annotations/IAnnotationFinder;Z)[Lorg/testng/ITestNGMethod;
+METHOD|org.testng.internal.ConfigurationMethod.createTestConfigurationMethods([Lorg/testng/ITestNGMethod;Lorg/testng/internal/annotations/IAnnotationFinder;Z)[Lorg/testng/ITestNGMethod;
+METHOD|org.testng.internal.ConfigurationMethod.createClassConfigurationMethods([Lorg/testng/ITestNGMethod;Lorg/testng/internal/annotations/IAnnotationFinder;Z)[Lorg/testng/ITestNGMethod;
+METHOD|org.testng.internal.ConfigurationMethod.createBeforeConfigurationMethods([Lorg/testng/ITestNGMethod;Lorg/testng/internal/annotations/IAnnotationFinder;Z)[Lorg/testng/ITestNGMethod;
+METHOD|org.testng.internal.ConfigurationMethod.createAfterConfigurationMethods([Lorg/testng/ITestNGMethod;Lorg/testng/internal/annotations/IAnnotationFinder;Z)[Lorg/testng/ITestNGMethod;
+METHOD|org.testng.internal.ConfigurationMethod.createTestMethodConfigurationMethods([Lorg/testng/ITestNGMethod;Lorg/testng/internal/annotations/IAnnotationFinder;Z)[Lorg/testng/ITestNGMethod;
+METHOD|org.testng.internal.ConfigurationMethod.isAfterClassConfiguration()Z
+METHOD|org.testng.internal.ConfigurationMethod.isAfterMethodConfiguration()Z
+METHOD|org.testng.internal.ConfigurationMethod.isBeforeClassConfiguration()Z
+METHOD|org.testng.internal.ConfigurationMethod.isBeforeMethodConfiguration()Z
+METHOD|org.testng.internal.ConfigurationMethod.isAfterSuiteConfiguration()Z
+METHOD|org.testng.internal.ConfigurationMethod.isBeforeSuiteConfiguration()Z
+METHOD|org.testng.internal.ConfigurationMethod.isBeforeTestConfiguration()Z
+METHOD|org.testng.internal.ConfigurationMethod.isAfterTestConfiguration()Z
+METHOD|org.testng.internal.ConfigurationMethod.isBeforeGroupsConfiguration()Z
+METHOD|org.testng.internal.ConfigurationMethod.isAfterGroupsConfiguration()Z
+METHOD|org.testng.internal.ConfigurationMethod.inheritGroupsFromTestClass()Z
+METHOD|org.testng.internal.ConfigurationMethod.init()V
+METHOD|org.testng.internal.ConfigurationMethod.ppp(Ljava/lang/String;)V
+METHOD|org.testng.internal.Constants.<init>()V
+METHOD|org.testng.internal.Constants.getProperty(Ljava/lang/String;)Lorg/testng/internal/TestNGProperty;
+METHOD|org.testng.internal.Constants.getPropertyValue(Ljava/util/Properties;Ljava/lang/String;)Ljava/lang/String;
+METHOD|org.testng.internal.Constants.getBooleanPropertyValue(Ljava/util/Properties;Ljava/lang/String;)Z
+METHOD|org.testng.internal.Constants.getIntegerPropertyValue(Ljava/util/Properties;Ljava/lang/String;)I
+METHOD|org.testng.internal.Constants.getDefaultValueFor(Ljava/lang/String;)Ljava/lang/String;
+METHOD|org.testng.internal.Constants.displayStatus(I)Ljava/lang/String;
+METHOD|org.testng.internal.Constants.<clinit>()V
+METHOD|org.testng.internal.ExtraOutput.<init>()V
+METHOD|org.testng.internal.ExtraOutput.getParameterOutput()Ljava/util/List;
+METHOD|org.testng.internal.FactoryMethod.<init>(Ljava/lang/reflect/Method;Ljava/lang/Object;Lorg/testng/xml/XmlTest;Lorg/testng/internal/annotations/IAnnotationFinder;)V
+METHOD|org.testng.internal.FactoryMethod.invoke()[Ljava/lang/Object;
+METHOD|org.testng.internal.Graph$Node.<init>(Ljava/lang/Object;)V
+METHOD|org.testng.internal.Graph$Node.clone()Lorg/testng/internal/Graph$Node;
+METHOD|org.testng.internal.Graph$Node.getObject()Ljava/lang/Object;
+METHOD|org.testng.internal.Graph$Node.getPredecessors()Ljava/util/Map;
+METHOD|org.testng.internal.Graph$Node.removePredecessor(Ljava/lang/Object;)Z
+METHOD|org.testng.internal.Graph$Node.dump()V
+METHOD|org.testng.internal.Graph$Node.toString()Ljava/lang/String;
+METHOD|org.testng.internal.Graph$Node.addPredecessor(Ljava/lang/Object;)V
+METHOD|org.testng.internal.Graph$Node.hasPredecessors()Z
+METHOD|org.testng.internal.Graph$Node.hasPredecessor(Ljava/lang/Object;)Z
+METHOD|org.testng.internal.Graph$Node.clone()Ljava/lang/Object;
+METHOD|org.testng.internal.Graph.<init>()V
+METHOD|org.testng.internal.Graph.addNode(Ljava/lang/Object;)V
+METHOD|org.testng.internal.Graph.hasBeenSorted()Z
+METHOD|org.testng.internal.Graph.isIndependent(Ljava/lang/Object;)Z
+METHOD|org.testng.internal.Graph.findNode(Ljava/lang/Object;)Lorg/testng/internal/Graph$Node;
+METHOD|org.testng.internal.Graph.addPredecessor(Ljava/lang/Object;Ljava/lang/Object;)V
+METHOD|org.testng.internal.Graph.getNodes()Ljava/util/Collection;
+METHOD|org.testng.internal.Graph.getIndependentNodes()Ljava/util/Set;
+METHOD|org.testng.internal.Graph.getStrictlySortedNodes()Ljava/util/List;
+METHOD|org.testng.internal.Graph.topologicalSort()V
+METHOD|org.testng.internal.Graph.dumpSortedNodes()V
+METHOD|org.testng.internal.Graph.dumpGraph()V
+METHOD|org.testng.internal.Graph.removeFromNodes(Ljava/util/List;Lorg/testng/internal/Graph$Node;)V
+METHOD|org.testng.internal.Graph.ppp(Ljava/lang/String;)V
+METHOD|org.testng.internal.Graph.findNodeWithNoPredecessors(Ljava/util/List;)Lorg/testng/internal/Graph$Node;
+METHOD|org.testng.internal.Graph.findPredecessors(Ljava/lang/Object;)Ljava/util/List;
+METHOD|org.testng.internal.Graph.toString()Ljava/lang/String;
+METHOD|org.testng.internal.Graph.main([Ljava/lang/String;)V
+METHOD|org.testng.internal.Graph.access$000(Ljava/lang/String;)V
+METHOD|org.testng.internal.Graph.<clinit>()V
+METHOD|org.testng.internal.HostFile.<init>(Ljava/lang/String;)V
+METHOD|org.testng.internal.HostFile.getHosts()[Ljava/lang/String;
+METHOD|org.testng.internal.HostFile.isStrategyTest()Z
+METHOD|org.testng.internal.HostFile.getVerbose()I
+METHOD|org.testng.internal.IInvoker.invokeConfigurations(Lorg/testng/IClass;[Lorg/testng/ITestNGMethod;Lorg/testng/xml/XmlSuite;Ljava/util/Map;Ljava/lang/Object;)V
+METHOD|org.testng.internal.IInvoker.invokeTestMethods(Lorg/testng/ITestNGMethod;Lorg/testng/xml/XmlSuite;Ljava/util/Map;[Lorg/testng/ITestNGMethod;ILorg/testng/internal/ConfigurationGroupMethods;)Ljava/util/List;
+METHOD|org.testng.internal.IInvoker.runTestListeners(Lorg/testng/ITestResult;)V
+METHOD|org.testng.internal.ITestResultNotifier.getPassedTests(Lorg/testng/ITestNGMethod;)Ljava/util/Set;
+METHOD|org.testng.internal.ITestResultNotifier.addPassedTest(Lorg/testng/ITestNGMethod;Lorg/testng/ITestResult;)V
+METHOD|org.testng.internal.ITestResultNotifier.addSkippedTest(Lorg/testng/ITestNGMethod;Lorg/testng/ITestResult;)V
+METHOD|org.testng.internal.ITestResultNotifier.addFailedTest(Lorg/testng/ITestNGMethod;Lorg/testng/ITestResult;)V
+METHOD|org.testng.internal.ITestResultNotifier.addFailedButWithinSuccessPercentageTest(Lorg/testng/ITestNGMethod;Lorg/testng/ITestResult;)V
+METHOD|org.testng.internal.ITestResultNotifier.addInvokedMethod(Lorg/testng/internal/InvokedMethod;)V
+METHOD|org.testng.internal.ITestResultNotifier.getTest()Lorg/testng/xml/XmlTest;
+METHOD|org.testng.internal.ITestResultNotifier.getTestListeners()Ljava/util/List;
+METHOD|org.testng.internal.InstanceInfo.<init>(Ljava/lang/Class;Ljava/lang/Object;)V
+METHOD|org.testng.internal.InstanceInfo.getInstance()Ljava/lang/Object;
+METHOD|org.testng.internal.InstanceInfo.getInstanceClass()Ljava/lang/Class;
+METHOD|org.testng.internal.InvokeMethodRunnable$TestNGRuntimeException.<init>(Ljava/lang/Throwable;)V
+METHOD|org.testng.internal.InvokeMethodRunnable.<init>(Ljava/lang/reflect/Method;Ljava/lang/Object;[Ljava/lang/Object;Lorg/testng/internal/thread/ICountDown;)V
+METHOD|org.testng.internal.InvokeMethodRunnable.run()V
+METHOD|org.testng.internal.InvokedMethod.<init>(Ljava/lang/Object;Lorg/testng/ITestNGMethod;[Ljava/lang/Object;ZZJ)V
+METHOD|org.testng.internal.InvokedMethod.isTestMethod()Z
+METHOD|org.testng.internal.InvokedMethod.toString()Ljava/lang/String;
+METHOD|org.testng.internal.InvokedMethod.isConfigurationMethod()Z
+METHOD|org.testng.internal.InvokedMethod.getTestMethod()Lorg/testng/ITestNGMethod;
+METHOD|org.testng.internal.InvokedMethod.getDate()J
+METHOD|org.testng.internal.Invoker$1.<init>(Lorg/testng/internal/Invoker;Ljava/lang/reflect/Method;Ljava/lang/Object;[Ljava/lang/Object;[Ljava/lang/Throwable;)V
+METHOD|org.testng.internal.Invoker$1.runTestMethod(Lorg/testng/ITestResult;)V
+METHOD|org.testng.internal.Invoker.<init>(Lorg/testng/ITestContext;Lorg/testng/internal/ITestResultNotifier;Lorg/testng/internal/annotations/IAnnotationFinder;)V
+METHOD|org.testng.internal.Invoker.invokeConfigurations(Lorg/testng/IClass;[Lorg/testng/ITestNGMethod;Lorg/testng/xml/XmlSuite;Ljava/util/Map;Ljava/lang/Object;)V
+METHOD|org.testng.internal.Invoker.handleConfigurationFailure(Ljava/lang/Throwable;Lorg/testng/ITestNGMethod;Lorg/testng/ITestResult;Lorg/testng/internal/annotations/IConfiguration;Lorg/testng/xml/XmlSuite;)V
+METHOD|org.testng.internal.Invoker.findClassesInSameTest(Ljava/lang/Class;Lorg/testng/xml/XmlSuite;)[Lorg/testng/xml/XmlClass;
+METHOD|org.testng.internal.Invoker.confInvocationPassed(Ljava/lang/Class;)Z
+METHOD|org.testng.internal.Invoker.setClassInvocationFailure(Ljava/lang/Class;Z)V
+METHOD|org.testng.internal.Invoker.invokeConfigurationMethod([Ljava/lang/Object;Lorg/testng/ITestNGMethod;[Ljava/lang/Object;ZLorg/testng/ITestResult;)V
+METHOD|org.testng.internal.Invoker.invokeMethod([Ljava/lang/Object;Lorg/testng/ITestNGMethod;[Ljava/lang/Object;Lorg/testng/xml/XmlSuite;Ljava/util/Map;Lorg/testng/ITestClass;[Lorg/testng/ITestNGMethod;[Lorg/testng/ITestNGMethod;Lorg/testng/internal/ConfigurationGroupMethods;)Ljava/util/List;
+METHOD|org.testng.internal.Invoker.invokeBeforeGroupsConfigurations(Lorg/testng/ITestClass;Lorg/testng/ITestNGMethod;Lorg/testng/internal/ConfigurationGroupMethods;Lorg/testng/xml/XmlSuite;Ljava/util/Map;Ljava/lang/Object;)V
+METHOD|org.testng.internal.Invoker.invokeAfterGroupsConfigurations(Lorg/testng/ITestClass;Lorg/testng/ITestNGMethod;Lorg/testng/internal/ConfigurationGroupMethods;Lorg/testng/xml/XmlSuite;Ljava/util/Map;Ljava/lang/Object;)V
+METHOD|org.testng.internal.Invoker.invokeHookable([Ljava/lang/Object;[Ljava/lang/Object;Lorg/testng/ITestClass;Ljava/lang/reflect/Method;ILorg/testng/internal/TestResult;)V
+METHOD|org.testng.internal.Invoker.handleParameters(Lorg/testng/ITestNGMethod;Ljava/util/Map;Lorg/testng/ITestClass;Ljava/util/Map;Lorg/testng/xml/XmlSuite;)Ljava/util/Iterator;
+METHOD|org.testng.internal.Invoker.invokeTestMethods(Lorg/testng/ITestNGMethod;Lorg/testng/xml/XmlSuite;Ljava/util/Map;[Lorg/testng/ITestNGMethod;ILorg/testng/internal/ConfigurationGroupMethods;)Ljava/util/List;
+METHOD|org.testng.internal.Invoker.findExpectedExceptions(Lorg/testng/internal/annotations/IAnnotationFinder;Ljava/lang/reflect/Method;)[Ljava/lang/Class;
+METHOD|org.testng.internal.Invoker.isWithinThreadedMethod()Z
+METHOD|org.testng.internal.Invoker.setWithinThreadedMethod(Z)V
+METHOD|org.testng.internal.Invoker.runWorkers(Lorg/testng/ITestNGMethod;Ljava/util/List;I)Ljava/util/List;
+METHOD|org.testng.internal.Invoker.checkDependencies(Lorg/testng/ITestNGMethod;Lorg/testng/ITestClass;[Lorg/testng/ITestNGMethod;)Z
+METHOD|org.testng.internal.Invoker.haveBeenRunSuccessfully([Lorg/testng/ITestNGMethod;)Z
+METHOD|org.testng.internal.Invoker.handleException(Ljava/lang/Throwable;Lorg/testng/ITestNGMethod;Lorg/testng/ITestResult;I)V
+METHOD|org.testng.internal.Invoker.isExpectedException(Ljava/lang/Throwable;[Ljava/lang/Class;)Z
+METHOD|org.testng.internal.Invoker.filterMethods(Lorg/testng/IClass;[Lorg/testng/ITestNGMethod;)[Lorg/testng/ITestNGMethod;
+METHOD|org.testng.internal.Invoker.filterMethodsUnique(Lorg/testng/IClass;[Lorg/testng/ITestNGMethod;)[Lorg/testng/ITestNGMethod;
+METHOD|org.testng.internal.Invoker.dependsOnGroups(Lorg/testng/ITestNGMethod;)Z
+METHOD|org.testng.internal.Invoker.dependsOnMethods(Lorg/testng/ITestNGMethod;)Z
+METHOD|org.testng.internal.Invoker.runTestListeners(Lorg/testng/ITestResult;)V
+METHOD|org.testng.internal.Invoker.runTestListeners(Lorg/testng/ITestResult;Ljava/util/List;)V
+METHOD|org.testng.internal.Invoker.ppp(Ljava/lang/String;)V
+METHOD|org.testng.internal.Invoker.log(ILjava/lang/String;)V
+METHOD|org.testng.internal.Invoker.<clinit>()V
+METHOD|org.testng.internal.JUnitUtils.<init>()V
+METHOD|org.testng.internal.JUnitUtils.isJUnitClass(Ljava/lang/Class;)Z
+METHOD|org.testng.internal.JUnitUtils.isAssignableFromTestCase(Ljava/lang/Class;)Z
+METHOD|org.testng.internal.JUnitUtils.isAssignableFromTest(Ljava/lang/Class;)Z
+METHOD|org.testng.internal.MethodHelper.<init>()V
+METHOD|org.testng.internal.MethodHelper.collectAndOrderMethods(Ljava/util/List;ZLorg/testng/internal/RunInfo;Lorg/testng/internal/annotations/IAnnotationFinder;Ljava/util/List;)[Lorg/testng/ITestNGMethod;
+METHOD|org.testng.internal.MethodHelper.collectAndOrderMethods(Ljava/util/List;ZLorg/testng/internal/RunInfo;Lorg/testng/internal/annotations/IAnnotationFinder;ZLjava/util/List;)[Lorg/testng/ITestNGMethod;
+METHOD|org.testng.internal.MethodHelper.collectAndOrderMethods([Lorg/testng/ITestNGMethod;ZLorg/testng/internal/RunInfo;Lorg/testng/internal/annotations/IAnnotationFinder;Ljava/util/List;)[Lorg/testng/ITestNGMethod;
+METHOD|org.testng.internal.MethodHelper.collectAndOrderMethods([Lorg/testng/ITestNGMethod;ZLorg/testng/internal/RunInfo;Lorg/testng/internal/annotations/IAnnotationFinder;ZLjava/util/List;)[Lorg/testng/ITestNGMethod;
+METHOD|org.testng.internal.MethodHelper.collectAndOrderConfigurationMethods([Lorg/testng/ITestNGMethod;Lorg/testng/internal/RunInfo;Lorg/testng/internal/annotations/IAnnotationFinder;ZLjava/util/List;)[Lorg/testng/ITestNGMethod;
+METHOD|org.testng.internal.MethodHelper.findMethodsThatBelongToGroup(Lorg/testng/ITestNGMethod;[Lorg/testng/ITestNGMethod;Ljava/lang/String;)[Lorg/testng/ITestNGMethod;
+METHOD|org.testng.internal.MethodHelper.findMethodsNamed(Ljava/lang/String;[Lorg/testng/ITestNGMethod;[Ljava/lang/String;)[Lorg/testng/ITestNGMethod;
+METHOD|org.testng.internal.MethodHelper.isEnabled(Ljava/lang/Class;Lorg/testng/internal/annotations/IAnnotationFinder;)Z
+METHOD|org.testng.internal.MethodHelper.isEnabled(Ljava/lang/reflect/Method;Lorg/testng/internal/annotations/IAnnotationFinder;)Z
+METHOD|org.testng.internal.MethodHelper.isEnabled(Lorg/testng/internal/annotations/ITestOrConfiguration;)Z
+METHOD|org.testng.internal.MethodHelper.findMethodsThatBelongToGroup(Lorg/testng/ITestNGMethod;Ljava/util/List;Ljava/lang/String;)[Lorg/testng/ITestNGMethod;
+METHOD|org.testng.internal.MethodHelper.findGroupTransitiveClosure(Lorg/testng/internal/XmlMethodSelector;Ljava/util/List;Ljava/util/List;[Ljava/lang/String;Ljava/util/Set;Ljava/util/Set;)V
+METHOD|org.testng.internal.MethodHelper.findMethodNamed(Ljava/lang/String;Ljava/util/List;)Lorg/testng/ITestNGMethod;
+METHOD|org.testng.internal.MethodHelper.includeMethod(Lorg/testng/internal/annotations/ITestOrConfiguration;Lorg/testng/internal/RunInfo;Lorg/testng/ITestNGMethod;ZZLjava/util/List;)Z
+METHOD|org.testng.internal.MethodHelper.collectMethodsByGroup([Lorg/testng/ITestNGMethod;ZLjava/util/List;Ljava/util/List;Lorg/testng/internal/RunInfo;Lorg/testng/internal/annotations/IAnnotationFinder;Z)V
+METHOD|org.testng.internal.MethodHelper.isMethodAlreadyPresent(Ljava/util/List;Lorg/testng/ITestNGMethod;)Z
+METHOD|org.testng.internal.MethodHelper.topologicalSort([Lorg/testng/ITestNGMethod;Ljava/util/List;Ljava/util/List;)Lorg/testng/internal/Graph;
+METHOD|org.testng.internal.MethodHelper.calculateMethodCanonicalName(Lorg/testng/ITestNGMethod;)Ljava/lang/String;
+METHOD|org.testng.internal.MethodHelper.calculateMethodCanonicalName(Ljava/lang/reflect/Method;)Ljava/lang/String;
+METHOD|org.testng.internal.MethodHelper.sortMethods(ZLjava/util/List;Lorg/testng/internal/annotations/IAnnotationFinder;)Ljava/util/List;
+METHOD|org.testng.internal.MethodHelper.log(ILjava/lang/String;)V
+METHOD|org.testng.internal.MethodHelper.ppp(Ljava/lang/String;)V
+METHOD|org.testng.internal.MethodHelper.getMethodsDependedUpon(Lorg/testng/ITestNGMethod;[Lorg/testng/ITestNGMethod;)Ljava/util/List;
+METHOD|org.testng.internal.MethodHelper.invokeMethod(Ljava/lang/reflect/Method;Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;
+METHOD|org.testng.internal.MethodHelper.createArrayIterator([[Ljava/lang/Object;)Ljava/util/Iterator;
+METHOD|org.testng.internal.MethodHelper.invokeDataProvider(Ljava/lang/Object;Ljava/lang/reflect/Method;Ljava/lang/reflect/Method;)Ljava/util/Iterator;
+METHOD|org.testng.internal.MethodHelper.calculateMethodCanonicalName(Ljava/lang/Class;Ljava/lang/String;)Ljava/lang/String;
+METHOD|org.testng.internal.MethodHelper.<clinit>()V
+METHOD|org.testng.internal.MethodInheritance.<init>()V
+METHOD|org.testng.internal.MethodInheritance.findMethodListSuperClass(Ljava/util/Map;Ljava/lang/Class;)Ljava/util/List;
+METHOD|org.testng.internal.MethodInheritance.findSubClass(Ljava/util/Map;Ljava/lang/Class;)Ljava/lang/Class;
+METHOD|org.testng.internal.MethodInheritance.fixMethodInheritance([Lorg/testng/ITestNGMethod;Z)V
+METHOD|org.testng.internal.MethodInheritance.equalsEffectiveClass(Lorg/testng/ITestNGMethod;Lorg/testng/ITestNGMethod;)Z
+METHOD|org.testng.internal.MethodInheritance.sortMethodsByInheritance(Ljava/util/List;Z)V
+METHOD|org.testng.internal.MethodInheritance.ppp(Ljava/lang/String;)V
+METHOD|org.testng.internal.MethodSelectorDescriptor.getPriority()I
+METHOD|org.testng.internal.MethodSelectorDescriptor.getMethodSelector()Lorg/testng/IMethodSelector;
+METHOD|org.testng.internal.MethodSelectorDescriptor.<init>(Lorg/testng/IMethodSelector;I)V
+METHOD|org.testng.internal.MethodSelectorDescriptor.compareTo(Ljava/lang/Object;)I
+METHOD|org.testng.internal.MethodSelectorDescriptor.setTestMethods(Ljava/util/List;)V
+METHOD|org.testng.internal.PackageUtils$1.<init>(Z)V
+METHOD|org.testng.internal.PackageUtils$1.accept(Ljava/io/File;)Z
+METHOD|org.testng.internal.PackageUtils.<init>()V
+METHOD|org.testng.internal.PackageUtils.findClassesInPackage(Ljava/lang/String;Ljava/util/List;Ljava/util/List;)[Ljava/lang/String;
+METHOD|org.testng.internal.PackageUtils.getTestClasspath()[Ljava/lang/String;
+METHOD|org.testng.internal.PackageUtils.matchTestClasspath(Ljava/net/URL;Ljava/lang/String;Z)Z
+METHOD|org.testng.internal.PackageUtils.findClassesInDirPackage(Ljava/lang/String;Ljava/util/List;Ljava/util/List;Ljava/lang/String;ZLjava/util/List;)V
+METHOD|org.testng.internal.PackageUtils.includeOrExcludeClass(Ljava/lang/String;Ljava/lang/String;Ljava/util/List;Ljava/util/List;Ljava/util/List;)V
+METHOD|org.testng.internal.PackageUtils.isIncluded(Ljava/lang/String;Ljava/util/List;Ljava/util/List;)Z
+METHOD|org.testng.internal.PackageUtils.find(Ljava/lang/String;Ljava/util/List;)Z
+METHOD|org.testng.internal.Parameters.<init>()V
+METHOD|org.testng.internal.Parameters.createParameters(Ljava/lang/reflect/Constructor;Ljava/lang/String;[Ljava/lang/String;Ljava/util/Map;Lorg/testng/xml/XmlSuite;)[Ljava/lang/Object;
+METHOD|org.testng.internal.Parameters.createTestParameters(Ljava/lang/reflect/Method;Ljava/util/Map;Lorg/testng/internal/annotations/IAnnotationFinder;Lorg/testng/xml/XmlSuite;)[Ljava/lang/Object;
+METHOD|org.testng.internal.Parameters.createConfigurationParameters(Ljava/lang/reflect/Method;Ljava/util/Map;Lorg/testng/internal/annotations/IAnnotationFinder;Lorg/testng/xml/XmlSuite;)[Ljava/lang/Object;
+METHOD|org.testng.internal.Parameters.createFactoryParameters(Ljava/lang/reflect/Method;Ljava/util/Map;Lorg/testng/internal/annotations/IAnnotationFinder;Lorg/testng/xml/XmlSuite;)[Ljava/lang/Object;
+METHOD|org.testng.internal.Parameters.createParameters(Ljava/lang/reflect/Method;Ljava/lang/String;[Ljava/lang/String;Ljava/util/Map;Lorg/testng/xml/XmlSuite;)[Ljava/lang/Object;
+METHOD|org.testng.internal.Parameters.createParameters(Ljava/lang/String;[Ljava/lang/Class;Ljava/lang/String;[Ljava/lang/String;Ljava/util/Map;Lorg/testng/xml/XmlSuite;)[Ljava/lang/Object;
+METHOD|org.testng.internal.Parameters.convertType(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/Object;
+METHOD|org.testng.internal.Parameters.findDataProvider(Ljava/lang/Class;Ljava/lang/reflect/Method;Lorg/testng/internal/annotations/IAnnotationFinder;)Ljava/lang/reflect/Method;
+METHOD|org.testng.internal.Parameters.findDataProvider(Ljava/lang/Class;Lorg/testng/internal/annotations/IAnnotationFinder;Ljava/lang/String;)Ljava/lang/reflect/Method;
+METHOD|org.testng.internal.Parameters.createParameters(Ljava/lang/reflect/Method;Ljava/util/Map;Lorg/testng/internal/annotations/IAnnotationFinder;Lorg/testng/xml/XmlSuite;Ljava/lang/Class;Ljava/lang/String;)[Ljava/lang/Object;
+METHOD|org.testng.internal.Parameters.<clinit>()V
+METHOD|org.testng.internal.ResultMap.<init>()V
+METHOD|org.testng.internal.ResultMap.addResult(Lorg/testng/ITestResult;Lorg/testng/ITestNGMethod;)V
+METHOD|org.testng.internal.ResultMap.getResults(Lorg/testng/ITestNGMethod;)Ljava/util/Set;
+METHOD|org.testng.internal.ResultMap.getAllResults()Ljava/util/Set;
+METHOD|org.testng.internal.ResultMap.size()I
+METHOD|org.testng.internal.ResultMap.getAllMethods()Ljava/util/Collection;
+METHOD|org.testng.internal.RunInfo.<init>()V
+METHOD|org.testng.internal.RunInfo.addMethodSelector(Lorg/testng/IMethodSelector;I)V
+METHOD|org.testng.internal.RunInfo.includeMethod(Lorg/testng/ITestNGMethod;Z)Z
+METHOD|org.testng.internal.RunInfo.ppp(Ljava/lang/String;)V
+METHOD|org.testng.internal.RunInfo.setTestMethods(Ljava/util/List;)V
+METHOD|org.testng.internal.TestMethodWorker.<init>(Lorg/testng/internal/IInvoker;[Lorg/testng/ITestNGMethod;Lorg/testng/xml/XmlSuite;Ljava/util/Map;Ljava/util/Map;Ljava/util/Map;[Lorg/testng/ITestNGMethod;Lorg/testng/internal/ConfigurationGroupMethods;Lorg/testng/ClassMethodMap;)V
+METHOD|org.testng.internal.TestMethodWorker.getMaxTimeOut()J
+METHOD|org.testng.internal.TestMethodWorker.toString()Ljava/lang/String;
+METHOD|org.testng.internal.TestMethodWorker.run()V
+METHOD|org.testng.internal.TestMethodWorker.indexOf(Lorg/testng/ITestNGMethod;[Lorg/testng/ITestNGMethod;)I
+METHOD|org.testng.internal.TestMethodWorker.getTestResults()Ljava/util/List;
+METHOD|org.testng.internal.TestMethodWorker.isLastTestMethodForClass(Lorg/testng/ITestNGMethod;[Lorg/testng/ITestNGMethod;)Z
+METHOD|org.testng.internal.TestMethodWorker.ppp(Ljava/lang/String;)V
+METHOD|org.testng.internal.TestMethodWorker.setAllTestMethods([Lorg/testng/ITestNGMethod;)V
+METHOD|org.testng.internal.TestNGClassFinder.<init>([Ljava/lang/Class;Ljava/util/Map;Lorg/testng/xml/XmlTest;Lorg/testng/internal/annotations/IAnnotationFinder;)V
+METHOD|org.testng.internal.TestNGClassFinder.isTestNGClass(Ljava/lang/Class;Lorg/testng/internal/annotations/IAnnotationFinder;)Z
+METHOD|org.testng.internal.TestNGClassFinder.addInstance(Ljava/lang/Class;Ljava/lang/Object;)V
+METHOD|org.testng.internal.TestNGClassFinder.ppp(Ljava/lang/String;)V
+METHOD|org.testng.internal.TestNGMethod$1.<init>()V
+METHOD|org.testng.internal.TestNGMethod$1.compare(Lorg/testng/ITestNGMethod;Lorg/testng/ITestNGMethod;)I
+METHOD|org.testng.internal.TestNGMethod$1.compare(Ljava/lang/Object;Ljava/lang/Object;)I
+METHOD|org.testng.internal.TestNGMethod.<init>(Ljava/lang/reflect/Method;Lorg/testng/internal/annotations/IAnnotationFinder;)V
+METHOD|org.testng.internal.TestNGMethod.getTimeOut()J
+METHOD|org.testng.internal.TestNGMethod.getInvocationCount()I
+METHOD|org.testng.internal.TestNGMethod.getSuccessPercentage()I
+METHOD|org.testng.internal.TestNGMethod.isTest()Z
+METHOD|org.testng.internal.TestNGMethod.init()V
+METHOD|org.testng.internal.TestNGMethod.<clinit>()V
+METHOD|org.testng.internal.TestNGMethodFinder.<init>(Lorg/testng/internal/RunInfo;Lorg/testng/internal/annotations/IAnnotationFinder;)V
+METHOD|org.testng.internal.TestNGMethodFinder.getTestMethods(Ljava/lang/Class;)[Lorg/testng/ITestNGMethod;
+METHOD|org.testng.internal.TestNGMethodFinder.getBeforeClassMethods(Ljava/lang/Class;)[Lorg/testng/ITestNGMethod;
+METHOD|org.testng.internal.TestNGMethodFinder.getAfterClassMethods(Ljava/lang/Class;)[Lorg/testng/ITestNGMethod;
+METHOD|org.testng.internal.TestNGMethodFinder.getBeforeTestMethods(Ljava/lang/Class;)[Lorg/testng/ITestNGMethod;
+METHOD|org.testng.internal.TestNGMethodFinder.getAfterTestMethods(Ljava/lang/Class;)[Lorg/testng/ITestNGMethod;
+METHOD|org.testng.internal.TestNGMethodFinder.getBeforeSuiteMethods(Ljava/lang/Class;)[Lorg/testng/ITestNGMethod;
+METHOD|org.testng.internal.TestNGMethodFinder.getAfterSuiteMethods(Ljava/lang/Class;)[Lorg/testng/ITestNGMethod;
+METHOD|org.testng.internal.TestNGMethodFinder.getBeforeTestConfigurationMethods(Ljava/lang/Class;)[Lorg/testng/ITestNGMethod;
+METHOD|org.testng.internal.TestNGMethodFinder.getAfterTestConfigurationMethods(Ljava/lang/Class;)[Lorg/testng/ITestNGMethod;
+METHOD|org.testng.internal.TestNGMethodFinder.getBeforeGroupsConfigurationMethods(Ljava/lang/Class;)[Lorg/testng/ITestNGMethod;
+METHOD|org.testng.internal.TestNGMethodFinder.getAfterGroupsConfigurationMethods(Ljava/lang/Class;)[Lorg/testng/ITestNGMethod;
+METHOD|org.testng.internal.TestNGMethodFinder.findConfiguration(Ljava/lang/Class;I)[Lorg/testng/ITestNGMethod;
+METHOD|org.testng.internal.TestNGMethodFinder.addConfigurationMethod(Ljava/lang/Class;Ljava/util/List;Ljava/lang/reflect/Method;ZZZZZZZZ[Ljava/lang/String;[Ljava/lang/String;)V
+METHOD|org.testng.internal.TestNGMethodFinder.ppp(Ljava/lang/String;)V
+METHOD|org.testng.internal.TestNGProperty.<init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
+METHOD|org.testng.internal.TestNGProperty.<init>(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
+METHOD|org.testng.internal.TestNGProperty.init(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
+METHOD|org.testng.internal.TestNGProperty.getDefault()Ljava/lang/String;
+METHOD|org.testng.internal.TestNGProperty.getDocumentation()Ljava/lang/String;
+METHOD|org.testng.internal.TestNGProperty.getName()Ljava/lang/String;
+METHOD|org.testng.internal.TestNGProperty.getCommandLineName()Ljava/lang/String;
+METHOD|org.testng.internal.TestResult.<init>(Lorg/testng/IClass;Ljava/lang/Object;Lorg/testng/ITestNGMethod;Ljava/lang/Throwable;JJ)V
+METHOD|org.testng.internal.TestResult.ppp(Ljava/lang/String;)V
+METHOD|org.testng.internal.TestResult.setEndMillis(J)V
+METHOD|org.testng.internal.TestResult.getName()Ljava/lang/String;
+METHOD|org.testng.internal.TestResult.getMethod()Lorg/testng/ITestNGMethod;
+METHOD|org.testng.internal.TestResult.setMethod(Lorg/testng/ITestNGMethod;)V
+METHOD|org.testng.internal.TestResult.getStatus()I
+METHOD|org.testng.internal.TestResult.setStatus(I)V
+METHOD|org.testng.internal.TestResult.isSuccess()Z
+METHOD|org.testng.internal.TestResult.getTestClass()Lorg/testng/IClass;
+METHOD|org.testng.internal.TestResult.setTestClass(Lorg/testng/IClass;)V
+METHOD|org.testng.internal.TestResult.getThrowable()Ljava/lang/Throwable;
+METHOD|org.testng.internal.TestResult.setThrowable(Ljava/lang/Throwable;)V
+METHOD|org.testng.internal.TestResult.getEndMillis()J
+METHOD|org.testng.internal.TestResult.getStartMillis()J
+METHOD|org.testng.internal.TestResult.toString()Ljava/lang/String;
+METHOD|org.testng.internal.TestResult.getHost()Ljava/lang/String;
+METHOD|org.testng.internal.TestResult.setHost(Ljava/lang/String;)V
+METHOD|org.testng.internal.TestResult.getParameters()[Ljava/lang/Object;
+METHOD|org.testng.internal.TestResult.setParameters([Ljava/lang/Object;)V
+METHOD|org.testng.internal.Utils.<init>()V
+METHOD|org.testng.internal.Utils.stringToArray(Ljava/lang/String;)[Ljava/lang/String;
+METHOD|org.testng.internal.Utils.xmlClassesToClasses(Ljava/util/List;)[Ljava/lang/Class;
+METHOD|org.testng.internal.Utils.classesToXmlClasses([Ljava/lang/Class;)[Lorg/testng/xml/XmlClass;
+METHOD|org.testng.internal.Utils.findAllClasses([Ljava/lang/Class;Ljava/util/Map;)V
+METHOD|org.testng.internal.Utils.parseMultiLine(Ljava/lang/String;)[Ljava/lang/String;
+METHOD|org.testng.internal.Utils.writeFile(Ljava/lang/String;Ljava/lang/String;Ljava/lang/StringBuffer;)V
+METHOD|org.testng.internal.Utils.writeFile(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
+METHOD|org.testng.internal.Utils.writeFile(Ljava/io/File;Ljava/lang/String;Ljava/lang/String;)V
+METHOD|org.testng.internal.Utils.writeFile(Ljava/io/File;Ljava/lang/String;)V
+METHOD|org.testng.internal.Utils.ppp(Ljava/lang/String;)V
+METHOD|org.testng.internal.Utils.dumpMap(Ljava/util/Map;)V
+METHOD|org.testng.internal.Utils.dumpMethods(Ljava/util/List;)V
+METHOD|org.testng.internal.Utils.dependentGroupsForThisMethodForTest(Ljava/lang/reflect/Method;Lorg/testng/internal/annotations/IAnnotationFinder;)[Ljava/lang/String;
+METHOD|org.testng.internal.Utils.groupsForThisMethodForTest(Ljava/lang/reflect/Method;Lorg/testng/internal/annotations/IAnnotationFinder;)[Ljava/lang/String;
+METHOD|org.testng.internal.Utils.groupsForThisMethodForConfiguration(Ljava/lang/reflect/Method;Lorg/testng/internal/annotations/IAnnotationFinder;)[Ljava/lang/String;
+METHOD|org.testng.internal.Utils.dependentGroupsForThisMethodForConfiguration(Ljava/lang/reflect/Method;Lorg/testng/internal/annotations/IAnnotationFinder;)[Ljava/lang/String;
+METHOD|org.testng.internal.Utils.log(Ljava/lang/String;)V
+METHOD|org.testng.internal.Utils.log(Ljava/lang/String;ILjava/lang/String;)V
+METHOD|org.testng.internal.Utils.error(Ljava/lang/String;)V
+METHOD|org.testng.internal.Utils.calculateInvokedMethodCount(Lorg/testng/IResultMap;)I
+METHOD|org.testng.internal.Utils.calculateInvokedMethodCount([Lorg/testng/ITestNGMethod;)I
+METHOD|org.testng.internal.Utils.createInstance(Ljava/lang/Class;Ljava/util/Map;Lorg/testng/xml/XmlTest;Lorg/testng/internal/annotations/IAnnotationFinder;)Ljava/lang/Object;
+METHOD|org.testng.internal.Utils.getEnclosingClass(Ljava/lang/Class;)Ljava/lang/Class;
+METHOD|org.testng.internal.Utils.tryOtherConstructor(Ljava/lang/Class;)Ljava/lang/Object;
+METHOD|org.testng.internal.Utils.findAnnotatedConstructor(Lorg/testng/internal/annotations/IAnnotationFinder;Ljava/lang/Class;)Ljava/lang/reflect/Constructor;
+METHOD|org.testng.internal.Utils.split(Ljava/lang/String;Ljava/lang/String;)[Ljava/lang/String;
+METHOD|org.testng.internal.Utils.initLogger(Ljava/util/logging/Logger;Ljava/lang/String;)V
+METHOD|org.testng.internal.Utils.logInvocation(Ljava/lang/String;Ljava/lang/reflect/Method;[Ljava/lang/Object;)V
+METHOD|org.testng.internal.Utils.writeResourceToFile(Ljava/io/File;Ljava/lang/String;Ljava/lang/Class;)V
+METHOD|org.testng.internal.Utils.isStringEmpty(Ljava/lang/String;)Z
+METHOD|org.testng.internal.Utils.stackTrace(Ljava/lang/Throwable;Z)[Ljava/lang/String;
+METHOD|org.testng.internal.Utils.filterTrace(Ljava/lang/String;)Ljava/lang/String;
+METHOD|org.testng.internal.Utils.<clinit>()V
+METHOD|org.testng.internal.XmlMethodSelector.<init>()V
+METHOD|org.testng.internal.XmlMethodSelector.includeMethod(Lorg/testng/ITestNGMethod;Z)Z
+METHOD|org.testng.internal.XmlMethodSelector.includeMethodFromExpression(Lorg/testng/ITestNGMethod;Z)Z
+METHOD|org.testng.internal.XmlMethodSelector.includeMethodFromIncludeExclude(Lorg/testng/ITestNGMethod;Z)Z
+METHOD|org.testng.internal.XmlMethodSelector.logInclusion(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
+METHOD|org.testng.internal.XmlMethodSelector.hasIncludedMethods()Z
+METHOD|org.testng.internal.XmlMethodSelector.hasExcludedMethods()Z
+METHOD|org.testng.internal.XmlMethodSelector.createQualifiedMethodNames(Lorg/testng/xml/XmlClass;Ljava/util/List;)Ljava/util/List;
+METHOD|org.testng.internal.XmlMethodSelector.setXmlClasses(Ljava/util/List;)V
+METHOD|org.testng.internal.XmlMethodSelector.getExcludedGroups()Ljava/util/Map;
+METHOD|org.testng.internal.XmlMethodSelector.getIncludedGroups()Ljava/util/Map;
+METHOD|org.testng.internal.XmlMethodSelector.setExcludedGroups(Ljava/util/Map;)V
+METHOD|org.testng.internal.XmlMethodSelector.setIncludedGroups(Ljava/util/Map;)V
+METHOD|org.testng.internal.XmlMethodSelector.isIncluded([Ljava/lang/String;Ljava/util/Collection;)Z
+METHOD|org.testng.internal.XmlMethodSelector.isExcluded([Ljava/lang/String;Ljava/util/Collection;)Z
+METHOD|org.testng.internal.XmlMethodSelector.isMemberOf([Ljava/lang/String;Ljava/util/Collection;)Z
+METHOD|org.testng.internal.XmlMethodSelector.log(ILjava/lang/String;)V
+METHOD|org.testng.internal.XmlMethodSelector.ppp(Ljava/lang/String;)V
+METHOD|org.testng.internal.XmlMethodSelector.setExpression(Ljava/lang/String;)V
+METHOD|org.testng.internal.XmlMethodSelector.setTestMethods(Ljava/util/List;)V
+METHOD|org.testng.internal.XmlMethodSelector.filterTestMethods(Ljava/util/List;)[Lorg/testng/ITestNGMethod;
+METHOD|org.testng.internal.XmlMethodSelector.setVerbose(Z)V
+METHOD|org.testng.internal.annotations.AfterSuiteAnnotation.<init>()V
+METHOD|org.testng.internal.annotations.AnnotationConfiguration.<init>()V
+METHOD|org.testng.internal.annotations.AnnotationConfiguration.getInstance()Lorg/testng/internal/annotations/AnnotationConfiguration;
+METHOD|org.testng.internal.annotations.AnnotationConfiguration.getAnnotationFinder()Lorg/testng/internal/annotations/IAnnotationFinder;
+METHOD|org.testng.internal.annotations.AnnotationConfiguration.getJavadocAnnotationFinder()Lorg/testng/internal/annotations/IAnnotationFinder;
+METHOD|org.testng.internal.annotations.AnnotationConfiguration.initialize(I)V
+METHOD|org.testng.internal.annotations.AnnotationConfiguration.<clinit>()V
+METHOD|org.testng.internal.annotations.AnnotationHelper.<init>()V
+METHOD|org.testng.internal.annotations.AnnotationHelper.findTest(Lorg/testng/internal/annotations/IAnnotationFinder;Ljava/lang/Class;)Lorg/testng/internal/annotations/ITest;
+METHOD|org.testng.internal.annotations.AnnotationHelper.findTest(Lorg/testng/internal/annotations/IAnnotationFinder;Ljava/lang/reflect/Method;)Lorg/testng/internal/annotations/ITest;
+METHOD|org.testng.internal.annotations.AnnotationHelper.findTest(Lorg/testng/internal/annotations/IAnnotationFinder;Ljava/lang/reflect/Constructor;)Lorg/testng/internal/annotations/ITest;
+METHOD|org.testng.internal.annotations.AnnotationHelper.findConfiguration(Lorg/testng/internal/annotations/IAnnotationFinder;Ljava/lang/reflect/Constructor;)Lorg/testng/internal/annotations/IConfiguration;
+METHOD|org.testng.internal.annotations.AnnotationHelper.findConfiguration(Lorg/testng/internal/annotations/IAnnotationFinder;Ljava/lang/reflect/Method;)Lorg/testng/internal/annotations/IConfiguration;
+METHOD|org.testng.internal.annotations.AnnotationHelper.createConfiguration(Lorg/testng/internal/annotations/IConfiguration;Lorg/testng/internal/annotations/IConfiguration;Lorg/testng/internal/annotations/IConfiguration;Lorg/testng/internal/annotations/IConfiguration;Lorg/testng/internal/annotations/IConfiguration;Lorg/testng/internal/annotations/IConfiguration;Lorg/testng/internal/annotations/IConfiguration;Lorg/testng/internal/annotations/IConfiguration;Lorg/testng/internal/annotations/IConfiguration;Lorg/testng/internal/annotations/IConfiguration;)Lorg/testng/internal/annotations/IConfiguration;
+METHOD|org.testng.internal.annotations.AnnotationHelper.finishInitialize(Lorg/testng/internal/annotations/ConfigurationAnnotation;Lorg/testng/internal/annotations/IConfiguration;)V
+METHOD|org.testng.internal.annotations.AnnotationHelper.getAllAnnotations()[Ljava/lang/Class;
+METHOD|org.testng.internal.annotations.AnnotationHelper.findMethodsWithAnnotation(Ljava/lang/Class;Ljava/lang/Class;Lorg/testng/internal/annotations/IAnnotationFinder;)[Lorg/testng/ITestNGMethod;
+METHOD|org.testng.internal.annotations.AnnotationHelper.isAnnotationPresent(Lorg/testng/internal/annotations/IAnnotationFinder;Ljava/lang/reflect/Method;[Ljava/lang/Class;)Z
+METHOD|org.testng.internal.annotations.AnnotationHelper.isAnnotationPresent(Lorg/testng/internal/annotations/IAnnotationFinder;Ljava/lang/reflect/Method;Ljava/lang/Class;)Z
+METHOD|org.testng.internal.annotations.AnnotationHelper.isAnnotationPresent(Lorg/testng/internal/annotations/IAnnotationFinder;Ljava/lang/Class;Ljava/lang/Class;)Z
+METHOD|org.testng.internal.annotations.AnnotationHelper.createMethodKey(Ljava/lang/reflect/Method;)Ljava/lang/String;
+METHOD|org.testng.internal.annotations.AnnotationHelper.<clinit>()V
+METHOD|org.testng.internal.annotations.BaseBeforeAfter.<init>()V
+METHOD|org.testng.internal.annotations.BaseBeforeAfter.getDescription()Ljava/lang/String;
+METHOD|org.testng.internal.annotations.BaseBeforeAfter.setDescription(Ljava/lang/String;)V
+METHOD|org.testng.internal.annotations.BaseBeforeAfter.setAlwaysRun(Z)V
+METHOD|org.testng.internal.annotations.BaseBeforeAfter.setInheritGroups(Z)V
+METHOD|org.testng.internal.annotations.BaseBeforeAfter.setParameters([Ljava/lang/String;)V
+METHOD|org.testng.internal.annotations.BaseBeforeAfter.getParameters()[Ljava/lang/String;
+METHOD|org.testng.internal.annotations.BaseBeforeAfter.getAlwaysRun()Z
+METHOD|org.testng.internal.annotations.BaseBeforeAfter.getInheritGroups()Z
+METHOD|org.testng.internal.annotations.BaseBeforeAfter.getAfterGroups()[Ljava/lang/String;
+METHOD|org.testng.internal.annotations.BaseBeforeAfter.setAfterGroups([Ljava/lang/String;)V
+METHOD|org.testng.internal.annotations.BaseBeforeAfter.getBeforeGroups()[Ljava/lang/String;
+METHOD|org.testng.internal.annotations.BaseBeforeAfter.setBeforeGroups([Ljava/lang/String;)V
+METHOD|org.testng.internal.annotations.BeforeSuiteAnnotation.<init>()V
+METHOD|org.testng.internal.annotations.ConfigurationAnnotation.<init>()V
+METHOD|org.testng.internal.annotations.ConfigurationAnnotation.setAfterSuite(Z)V
+METHOD|org.testng.internal.annotations.ConfigurationAnnotation.setAfterTest(Z)V
+METHOD|org.testng.internal.annotations.ConfigurationAnnotation.setAfterTestClass(Z)V
+METHOD|org.testng.internal.annotations.ConfigurationAnnotation.setAfterTestMethod(Z)V
+METHOD|org.testng.internal.annotations.ConfigurationAnnotation.setAlwaysRun(Z)V
+METHOD|org.testng.internal.annotations.ConfigurationAnnotation.setBeforeSuite(Z)V
+METHOD|org.testng.internal.annotations.ConfigurationAnnotation.setBeforeTest(Z)V
+METHOD|org.testng.internal.annotations.ConfigurationAnnotation.setBeforeTestClass(Z)V
+METHOD|org.testng.internal.annotations.ConfigurationAnnotation.setBeforeTestMethod(Z)V
+METHOD|org.testng.internal.annotations.ConfigurationAnnotation.setInheritGroups(Z)V
+METHOD|org.testng.internal.annotations.ConfigurationAnnotation.setParameters([Ljava/lang/String;)V
+METHOD|org.testng.internal.annotations.ConfigurationAnnotation.getBeforeTestClass()Z
+METHOD|org.testng.internal.annotations.ConfigurationAnnotation.getAfterTestClass()Z
+METHOD|org.testng.internal.annotations.ConfigurationAnnotation.getBeforeTestMethod()Z
+METHOD|org.testng.internal.annotations.ConfigurationAnnotation.getAfterTestMethod()Z
+METHOD|org.testng.internal.annotations.ConfigurationAnnotation.getBeforeSuite()Z
+METHOD|org.testng.internal.annotations.ConfigurationAnnotation.getAfterSuite()Z
+METHOD|org.testng.internal.annotations.ConfigurationAnnotation.getBeforeTest()Z
+METHOD|org.testng.internal.annotations.ConfigurationAnnotation.getAfterTest()Z
+METHOD|org.testng.internal.annotations.ConfigurationAnnotation.getParameters()[Ljava/lang/String;
+METHOD|org.testng.internal.annotations.ConfigurationAnnotation.getAlwaysRun()Z
+METHOD|org.testng.internal.annotations.ConfigurationAnnotation.getInheritGroups()Z
+METHOD|org.testng.internal.annotations.ConfigurationAnnotation.getAfterGroups()[Ljava/lang/String;
+METHOD|org.testng.internal.annotations.ConfigurationAnnotation.setAfterGroups([Ljava/lang/String;)V
+METHOD|org.testng.internal.annotations.ConfigurationAnnotation.getBeforeGroups()[Ljava/lang/String;
+METHOD|org.testng.internal.annotations.ConfigurationAnnotation.setBeforeGroups([Ljava/lang/String;)V
+METHOD|org.testng.internal.annotations.ConfigurationAnnotation.setFakeConfiguration(Z)V
+METHOD|org.testng.internal.annotations.ConfigurationAnnotation.isFakeConfiguration()Z
+METHOD|org.testng.internal.annotations.Converter.<init>()V
+METHOD|org.testng.internal.annotations.Converter.getBoolean(Ljava/lang/String;Z)Z
+METHOD|org.testng.internal.annotations.Converter.getInt(Ljava/lang/String;I)I
+METHOD|org.testng.internal.annotations.Converter.getString(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+METHOD|org.testng.internal.annotations.Converter.getLong(Ljava/lang/String;J)J
+METHOD|org.testng.internal.annotations.Converter.getStringArray(Ljava/lang/String;[Ljava/lang/String;)[Ljava/lang/String;
+METHOD|org.testng.internal.annotations.Converter.getClassArray(Ljava/lang/String;[Ljava/lang/Class;)[Ljava/lang/Class;
+METHOD|org.testng.internal.annotations.DataProviderAnnotation.<init>()V
+METHOD|org.testng.internal.annotations.DataProviderAnnotation.getName()Ljava/lang/String;
+METHOD|org.testng.internal.annotations.DataProviderAnnotation.setName(Ljava/lang/String;)V
+METHOD|org.testng.internal.annotations.ExpectedExceptionsAnnotation.<init>()V
+METHOD|org.testng.internal.annotations.ExpectedExceptionsAnnotation.getValue()[Ljava/lang/Class;
+METHOD|org.testng.internal.annotations.ExpectedExceptionsAnnotation.setValue([Ljava/lang/Class;)V
+METHOD|org.testng.internal.annotations.FactoryAnnotation.<init>()V
+METHOD|org.testng.internal.annotations.FactoryAnnotation.getParameters()[Ljava/lang/String;
+METHOD|org.testng.internal.annotations.FactoryAnnotation.setParameters([Ljava/lang/String;)V
+METHOD|org.testng.internal.annotations.IAnnotationFinder.findAnnotation(Ljava/lang/Class;Ljava/lang/Class;)Lorg/testng/internal/annotations/IAnnotation;
+METHOD|org.testng.internal.annotations.IAnnotationFinder.findAnnotation(Ljava/lang/reflect/Method;Ljava/lang/Class;)Lorg/testng/internal/annotations/IAnnotation;
+METHOD|org.testng.internal.annotations.IAnnotationFinder.findAnnotation(Ljava/lang/reflect/Constructor;Ljava/lang/Class;)Lorg/testng/internal/annotations/IAnnotation;
+METHOD|org.testng.internal.annotations.IAnnotationFinder.addSourceDirs([Ljava/lang/String;)V
+METHOD|org.testng.internal.annotations.IBaseBeforeAfter.getEnabled()Z
+METHOD|org.testng.internal.annotations.IBaseBeforeAfter.getGroups()[Ljava/lang/String;
+METHOD|org.testng.internal.annotations.IBaseBeforeAfter.getDependsOnGroups()[Ljava/lang/String;
+METHOD|org.testng.internal.annotations.IBaseBeforeAfter.getDependsOnMethods()[Ljava/lang/String;
+METHOD|org.testng.internal.annotations.IBaseBeforeAfter.getAlwaysRun()Z
+METHOD|org.testng.internal.annotations.IBaseBeforeAfter.getInheritGroups()Z
+METHOD|org.testng.internal.annotations.IBaseBeforeAfter.getDescription()Ljava/lang/String;
+METHOD|org.testng.internal.annotations.IConfiguration.getBeforeTestClass()Z
+METHOD|org.testng.internal.annotations.IConfiguration.getAfterTestClass()Z
+METHOD|org.testng.internal.annotations.IConfiguration.getBeforeTestMethod()Z
+METHOD|org.testng.internal.annotations.IConfiguration.getAfterTestMethod()Z
+METHOD|org.testng.internal.annotations.IConfiguration.getBeforeSuite()Z
+METHOD|org.testng.internal.annotations.IConfiguration.getAfterSuite()Z
+METHOD|org.testng.internal.annotations.IConfiguration.getBeforeTest()Z
+METHOD|org.testng.internal.annotations.IConfiguration.getAfterTest()Z
+METHOD|org.testng.internal.annotations.IConfiguration.getAlwaysRun()Z
+METHOD|org.testng.internal.annotations.IConfiguration.getInheritGroups()Z
+METHOD|org.testng.internal.annotations.IConfiguration.getBeforeGroups()[Ljava/lang/String;
+METHOD|org.testng.internal.annotations.IConfiguration.getAfterGroups()[Ljava/lang/String;
+METHOD|org.testng.internal.annotations.IConfiguration.isFakeConfiguration()Z
+METHOD|org.testng.internal.annotations.IDataProvider.getName()Ljava/lang/String;
+METHOD|org.testng.internal.annotations.IExpectedExceptions.getValue()[Ljava/lang/Class;
+METHOD|org.testng.internal.annotations.IParameterizable.getParameters()[Ljava/lang/String;
+METHOD|org.testng.internal.annotations.IParameters.getValue()[Ljava/lang/String;
+METHOD|org.testng.internal.annotations.ITest.getTimeOut()J
+METHOD|org.testng.internal.annotations.ITest.getInvocationCount()I
+METHOD|org.testng.internal.annotations.ITest.getThreadPoolSize()I
+METHOD|org.testng.internal.annotations.ITest.getSuccessPercentage()I
+METHOD|org.testng.internal.annotations.ITest.getDataProvider()Ljava/lang/String;
+METHOD|org.testng.internal.annotations.ITest.getAlwaysRun()Z
+METHOD|org.testng.internal.annotations.ITest.getGroups()[Ljava/lang/String;
+METHOD|org.testng.internal.annotations.ITest.getEnabled()Z
+METHOD|org.testng.internal.annotations.ITest.setDependsOnGroups([Ljava/lang/String;)V
+METHOD|org.testng.internal.annotations.ITest.setDependsOnMethods([Ljava/lang/String;)V
+METHOD|org.testng.internal.annotations.ITest.setEnabled(Z)V
+METHOD|org.testng.internal.annotations.ITest.setGroups([Ljava/lang/String;)V
+METHOD|org.testng.internal.annotations.ITest.getDependsOnGroups()[Ljava/lang/String;
+METHOD|org.testng.internal.annotations.ITest.getDependsOnMethods()[Ljava/lang/String;
+METHOD|org.testng.internal.annotations.ITest.getDescription()Ljava/lang/String;
+METHOD|org.testng.internal.annotations.ITest.getExpectedExceptions()[Ljava/lang/Class;
+METHOD|org.testng.internal.annotations.ITest.getSuiteName()Ljava/lang/String;
+METHOD|org.testng.internal.annotations.ITest.getTestName()Ljava/lang/String;
+METHOD|org.testng.internal.annotations.ITest.getSequential()Z
+METHOD|org.testng.internal.annotations.ITestOrConfiguration.getGroups()[Ljava/lang/String;
+METHOD|org.testng.internal.annotations.ITestOrConfiguration.getDependsOnGroups()[Ljava/lang/String;
+METHOD|org.testng.internal.annotations.ITestOrConfiguration.getDependsOnMethods()[Ljava/lang/String;
+METHOD|org.testng.internal.annotations.ITestOrConfiguration.getEnabled()Z
+METHOD|org.testng.internal.annotations.ITestOrConfiguration.getDescription()Ljava/lang/String;
+METHOD|org.testng.internal.annotations.JDK14AnnotationFinder$1.<init>(Lorg/testng/internal/annotations/JDK14AnnotationFinder;)V
+METHOD|org.testng.internal.annotations.JDK14AnnotationFinder$1.visitFile(Ljava/io/File;)V
+METHOD|org.testng.internal.annotations.JDK14AnnotationFinder.<init>()V
+METHOD|org.testng.internal.annotations.JDK14AnnotationFinder.addSources([Ljava/lang/String;)V
+METHOD|org.testng.internal.annotations.JDK14AnnotationFinder.addSourceDirs([Ljava/lang/String;)V
+METHOD|org.testng.internal.annotations.JDK14AnnotationFinder.findAnnotation(Ljava/lang/Class;Ljava/lang/Class;)Lorg/testng/internal/annotations/IAnnotation;
+METHOD|org.testng.internal.annotations.JDK14AnnotationFinder.findAnnotation(Ljava/lang/reflect/Method;Ljava/lang/Class;)Lorg/testng/internal/annotations/IAnnotation;
+METHOD|org.testng.internal.annotations.JDK14AnnotationFinder.findAnnotation(Ljava/lang/reflect/Constructor;Ljava/lang/Class;)Lorg/testng/internal/annotations/IAnnotation;
+METHOD|org.testng.internal.annotations.JDK14AnnotationFinder.stripPackage(Ljava/lang/String;)Ljava/lang/String;
+METHOD|org.testng.internal.annotations.JDK14AnnotationFinder.findMethodAnnotation(Ljava/lang/String;[Ljava/lang/Class;Ljava/lang/Class;Ljava/lang/Class;)Lorg/testng/internal/annotations/IAnnotation;
+METHOD|org.testng.internal.annotations.JDK14AnnotationFinder.methodsAreEqual(Lcom/thoughtworks/qdox/model/JavaMethod;Ljava/lang/String;[Ljava/lang/Class;)Z
+METHOD|org.testng.internal.annotations.JDK14AnnotationFinder.findTag(Ljava/lang/Class;Lorg/testng/internal/annotations/IAnnotation;Lcom/thoughtworks/qdox/model/AbstractInheritableJavaEntity;)Lorg/testng/internal/annotations/IAnnotation;
+METHOD|org.testng.internal.annotations.JDK14AnnotationFinder.ppp(Ljava/lang/String;)V
+METHOD|org.testng.internal.annotations.JDK14TagFactory.<init>()V
+METHOD|org.testng.internal.annotations.JDK14TagFactory.createTag(Ljava/lang/Class;Lcom/thoughtworks/qdox/model/AbstractInheritableJavaEntity;)Lorg/testng/internal/annotations/IAnnotation;
+METHOD|org.testng.internal.annotations.JDK14TagFactory.getTagName(Ljava/lang/Class;)Ljava/lang/String;
+METHOD|org.testng.internal.annotations.JDK14TagFactory.createTag(Ljava/lang/Class;Lcom/thoughtworks/qdox/model/DocletTag;)Lorg/testng/internal/annotations/IAnnotation;
+METHOD|org.testng.internal.annotations.JDK14TagFactory.maybeCreateNewConfigurationTag(Ljava/lang/Class;Lcom/thoughtworks/qdox/model/DocletTag;)Lorg/testng/internal/annotations/IAnnotation;
+METHOD|org.testng.internal.annotations.JDK14TagFactory.createConfigurationTag(Ljava/lang/Class;Lcom/thoughtworks/qdox/model/DocletTag;ZZZZ[Ljava/lang/String;[Ljava/lang/String;ZZZZZ[Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Z[Ljava/lang/String;Z[Ljava/lang/String;)Lorg/testng/internal/annotations/IConfiguration;
+METHOD|org.testng.internal.annotations.JDK14TagFactory.createTestTag(Lcom/thoughtworks/qdox/model/DocletTag;)Lorg/testng/internal/annotations/IAnnotation;
+METHOD|org.testng.internal.annotations.JDK14TagFactory.createConfigurationTag(Lcom/thoughtworks/qdox/model/DocletTag;)Lorg/testng/internal/annotations/IAnnotation;
+METHOD|org.testng.internal.annotations.JDK14TagFactory.createDataProviderTag(Lcom/thoughtworks/qdox/model/DocletTag;)Lorg/testng/internal/annotations/IAnnotation;
+METHOD|org.testng.internal.annotations.JDK14TagFactory.createExpectedExceptionsTag(Lcom/thoughtworks/qdox/model/DocletTag;)Lorg/testng/internal/annotations/IAnnotation;
+METHOD|org.testng.internal.annotations.JDK14TagFactory.createParametersTag(Lcom/thoughtworks/qdox/model/DocletTag;)Lorg/testng/internal/annotations/IAnnotation;
+METHOD|org.testng.internal.annotations.JDK14TagFactory.createFactoryTag(Lcom/thoughtworks/qdox/model/DocletTag;)Lorg/testng/internal/annotations/IAnnotation;
+METHOD|org.testng.internal.annotations.JDK14TagFactory.ppp(Ljava/lang/String;)V
+METHOD|org.testng.internal.annotations.JDK14TagFactory.<clinit>()V
+METHOD|org.testng.internal.annotations.JDK15AnnotationFinder.<init>()V
+METHOD|org.testng.internal.annotations.JDK15AnnotationFinder.findAnnotation(Ljava/lang/Class;Ljava/lang/Class;)Lorg/testng/internal/annotations/IAnnotation;
+METHOD|org.testng.internal.annotations.JDK15AnnotationFinder.findAnnotationInSuperClasses(Ljava/lang/Class;Ljava/lang/Class;)Ljava/lang/annotation/Annotation;
+METHOD|org.testng.internal.annotations.JDK15AnnotationFinder.findAnnotation(Ljava/lang/reflect/Method;Ljava/lang/Class;)Lorg/testng/internal/annotations/IAnnotation;
+METHOD|org.testng.internal.annotations.JDK15AnnotationFinder.ppp(Ljava/lang/String;)V
+METHOD|org.testng.internal.annotations.JDK15AnnotationFinder.findAnnotation(Ljava/lang/reflect/Constructor;Ljava/lang/Class;)Lorg/testng/internal/annotations/IAnnotation;
+METHOD|org.testng.internal.annotations.JDK15AnnotationFinder.findAnnotation(Ljava/lang/Class;Ljava/lang/annotation/Annotation;Ljava/lang/Class;)Lorg/testng/internal/annotations/IAnnotation;
+METHOD|org.testng.internal.annotations.JDK15AnnotationFinder.addSourceDirs([Ljava/lang/String;)V
+METHOD|org.testng.internal.annotations.JDK15AnnotationFinder.<clinit>()V
+METHOD|org.testng.internal.annotations.JDK15TagFactory.<init>()V
+METHOD|org.testng.internal.annotations.JDK15TagFactory.createTag(Ljava/lang/Class;Ljava/lang/annotation/Annotation;Ljava/lang/Class;)Lorg/testng/internal/annotations/IAnnotation;
+METHOD|org.testng.internal.annotations.JDK15TagFactory.maybeCreateNewConfigurationTag(Ljava/lang/Class;Ljava/lang/annotation/Annotation;Ljava/lang/Class;)Lorg/testng/internal/annotations/IAnnotation;
+METHOD|org.testng.internal.annotations.JDK15TagFactory.createConfigurationTag(Ljava/lang/Class;Ljava/lang/annotation/Annotation;)Lorg/testng/internal/annotations/IAnnotation;
+METHOD|org.testng.internal.annotations.JDK15TagFactory.createConfigurationTag(Ljava/lang/Class;Ljava/lang/annotation/Annotation;ZZZZ[Ljava/lang/String;[Ljava/lang/String;ZZZZZ[Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Z[Ljava/lang/String;Z[Ljava/lang/String;)Lorg/testng/internal/annotations/IAnnotation;
+METHOD|org.testng.internal.annotations.JDK15TagFactory.createDataProviderTag(Ljava/lang/annotation/Annotation;)Lorg/testng/internal/annotations/IAnnotation;
+METHOD|org.testng.internal.annotations.JDK15TagFactory.createExpectedExceptionsTag(Ljava/lang/annotation/Annotation;)Lorg/testng/internal/annotations/IAnnotation;
+METHOD|org.testng.internal.annotations.JDK15TagFactory.createFactoryTag(Ljava/lang/annotation/Annotation;)Lorg/testng/internal/annotations/IAnnotation;
+METHOD|org.testng.internal.annotations.JDK15TagFactory.createParametersTag(Ljava/lang/annotation/Annotation;)Lorg/testng/internal/annotations/IAnnotation;
+METHOD|org.testng.internal.annotations.JDK15TagFactory.createTestTag(Ljava/lang/Class;Ljava/lang/annotation/Annotation;)Lorg/testng/internal/annotations/IAnnotation;
+METHOD|org.testng.internal.annotations.JDK15TagFactory.join([Ljava/lang/String;[Ljava/lang/String;)[Ljava/lang/String;
+METHOD|org.testng.internal.annotations.JDK15TagFactory.findInheritedStringArray(Ljava/lang/Class;Ljava/lang/Class;Ljava/lang/String;)[Ljava/lang/String;
+METHOD|org.testng.internal.annotations.JDK15TagFactory.invokeMethod(Ljava/lang/annotation/Annotation;Ljava/lang/String;)Ljava/lang/Object;
+METHOD|org.testng.internal.annotations.JDK15TagFactory.ppp(Ljava/lang/String;)V
+METHOD|org.testng.internal.annotations.ParametersAnnotation.<init>()V
+METHOD|org.testng.internal.annotations.ParametersAnnotation.getValue()[Ljava/lang/String;
+METHOD|org.testng.internal.annotations.ParametersAnnotation.setValue([Ljava/lang/String;)V
+METHOD|org.testng.internal.annotations.TestAnnotation.<init>()V
+METHOD|org.testng.internal.annotations.TestAnnotation.getExpectedExceptions()[Ljava/lang/Class;
+METHOD|org.testng.internal.annotations.TestAnnotation.setExpectedExceptions([Ljava/lang/Class;)V
+METHOD|org.testng.internal.annotations.TestAnnotation.setAlwaysRun(Z)V
+METHOD|org.testng.internal.annotations.TestAnnotation.setDataProvider(Ljava/lang/String;)V
+METHOD|org.testng.internal.annotations.TestAnnotation.setInvocationCount(I)V
+METHOD|org.testng.internal.annotations.TestAnnotation.setSuccessPercentage(I)V
+METHOD|org.testng.internal.annotations.TestAnnotation.setTimeOut(J)V
+METHOD|org.testng.internal.annotations.TestAnnotation.getTimeOut()J
+METHOD|org.testng.internal.annotations.TestAnnotation.getInvocationCount()I
+METHOD|org.testng.internal.annotations.TestAnnotation.getSuccessPercentage()I
+METHOD|org.testng.internal.annotations.TestAnnotation.getDataProvider()Ljava/lang/String;
+METHOD|org.testng.internal.annotations.TestAnnotation.getAlwaysRun()Z
+METHOD|org.testng.internal.annotations.TestAnnotation.getThreadPoolSize()I
+METHOD|org.testng.internal.annotations.TestAnnotation.setThreadPoolSize(I)V
+METHOD|org.testng.internal.annotations.TestAnnotation.getSuiteName()Ljava/lang/String;
+METHOD|org.testng.internal.annotations.TestAnnotation.setSuiteName(Ljava/lang/String;)V
+METHOD|org.testng.internal.annotations.TestAnnotation.getTestName()Ljava/lang/String;
+METHOD|org.testng.internal.annotations.TestAnnotation.setTestName(Ljava/lang/String;)V
+METHOD|org.testng.internal.annotations.TestAnnotation.getSequential()Z
+METHOD|org.testng.internal.annotations.TestAnnotation.setSequential(Z)V
+METHOD|org.testng.internal.annotations.TestOrConfiguration.<init>()V
+METHOD|org.testng.internal.annotations.TestOrConfiguration.getGroups()[Ljava/lang/String;
+METHOD|org.testng.internal.annotations.TestOrConfiguration.getEnabled()Z
+METHOD|org.testng.internal.annotations.TestOrConfiguration.setDependsOnGroups([Ljava/lang/String;)V
+METHOD|org.testng.internal.annotations.TestOrConfiguration.setDependsOnMethods([Ljava/lang/String;)V
+METHOD|org.testng.internal.annotations.TestOrConfiguration.setGroups([Ljava/lang/String;)V
+METHOD|org.testng.internal.annotations.TestOrConfiguration.getDescription()Ljava/lang/String;
+METHOD|org.testng.internal.annotations.TestOrConfiguration.setEnabled(Z)V
+METHOD|org.testng.internal.annotations.TestOrConfiguration.getDependsOnGroups()[Ljava/lang/String;
+METHOD|org.testng.internal.annotations.TestOrConfiguration.getDependsOnMethods()[Ljava/lang/String;
+METHOD|org.testng.internal.annotations.TestOrConfiguration.getParameters()[Ljava/lang/String;
+METHOD|org.testng.internal.annotations.TestOrConfiguration.setParameters([Ljava/lang/String;)V
+METHOD|org.testng.internal.annotations.TestOrConfiguration.setDescription(Ljava/lang/String;)V
+METHOD|org.testng.internal.remote.SlavePool.<init>()V
+METHOD|org.testng.internal.remote.SlavePool.addSlaves([Ljava/net/Socket;)V
+METHOD|org.testng.internal.remote.SlavePool.addSlave(Ljava/net/Socket;)V
+METHOD|org.testng.internal.remote.SlavePool.addSlave(Ljava/net/Socket;Lorg/testng/remote/ConnectionInfo;)V
+METHOD|org.testng.internal.remote.SlavePool.getSlave()Lorg/testng/remote/ConnectionInfo;
+METHOD|org.testng.internal.remote.SlavePool.returnSlave(Lorg/testng/remote/ConnectionInfo;)V
+METHOD|org.testng.internal.thread.CountDownAdapter.<init>(I)V
+METHOD|org.testng.internal.thread.CountDownAdapter.await()V
+METHOD|org.testng.internal.thread.CountDownAdapter.await(J)Z
+METHOD|org.testng.internal.thread.CountDownAdapter.countDown()V
+METHOD|org.testng.internal.thread.ExecutorAdapter.<init>(ILorg/testng/internal/thread/IThreadFactory;)V
+METHOD|org.testng.internal.thread.ExecutorAdapter.submitRunnable(Ljava/lang/Runnable;)Lorg/testng/internal/thread/IFutureResult;
+METHOD|org.testng.internal.thread.ExecutorAdapter.stopNow()V
+METHOD|org.testng.internal.thread.ExecutorAdapter.awaitTermination(J)Z
+METHOD|org.testng.internal.thread.FutureResultAdapter.<init>(Ljava/util/concurrent/Future;)V
+METHOD|org.testng.internal.thread.FutureResultAdapter.get()Ljava/lang/Object;
+METHOD|org.testng.internal.thread.ICountDown.await()V
+METHOD|org.testng.internal.thread.ICountDown.await(J)Z
+METHOD|org.testng.internal.thread.ICountDown.countDown()V
+METHOD|org.testng.internal.thread.IExecutor.submitRunnable(Ljava/lang/Runnable;)Lorg/testng/internal/thread/IFutureResult;
+METHOD|org.testng.internal.thread.IExecutor.shutdown()V
+METHOD|org.testng.internal.thread.IExecutor.awaitTermination(J)Z
+METHOD|org.testng.internal.thread.IExecutor.stopNow()V
+METHOD|org.testng.internal.thread.IFutureResult.get()Ljava/lang/Object;
+METHOD|org.testng.internal.thread.IPooledExecutor.execute(Ljava/lang/Runnable;)V
+METHOD|org.testng.internal.thread.IPooledExecutor.shutdown()V
+METHOD|org.testng.internal.thread.IPooledExecutor.awaitTermination(J)V
+METHOD|org.testng.internal.thread.IThreadFactory.newThread(Ljava/lang/Runnable;)Ljava/lang/Thread;
+METHOD|org.testng.internal.thread.IThreadFactory.getThreadFactory()Ljava/lang/Object;
+METHOD|org.testng.internal.thread.PooledExecutorAdapter.<init>(I)V
+METHOD|org.testng.internal.thread.PooledExecutorAdapter.awaitTermination(J)V
+METHOD|org.testng.internal.thread.TestNGThread.<init>(Ljava/lang/String;)V
+METHOD|org.testng.internal.thread.TestNGThread.<init>(Ljava/lang/Runnable;Ljava/lang/String;)V
+METHOD|org.testng.internal.thread.ThreadExecutionException.<init>(Ljava/lang/Throwable;)V
+METHOD|org.testng.internal.thread.ThreadTimeoutException.<init>(Ljava/lang/String;)V
+METHOD|org.testng.internal.thread.ThreadTimeoutException.<init>(Ljava/lang/Throwable;)V
+METHOD|org.testng.internal.thread.ThreadTimeoutException.<init>(Ljava/lang/String;Ljava/lang/Throwable;)V
+METHOD|org.testng.internal.thread.ThreadUtil$ThreadFactoryImpl.<init>(Ljava/lang/String;)V
+METHOD|org.testng.internal.thread.ThreadUtil$ThreadFactoryImpl.newThread(Ljava/lang/Runnable;)Ljava/lang/Thread;
+METHOD|org.testng.internal.thread.ThreadUtil$ThreadFactoryImpl.getThreadFactory()Ljava/lang/Object;
+METHOD|org.testng.internal.thread.ThreadUtil.<init>()V
+METHOD|org.testng.internal.thread.ThreadUtil.currentThreadInfo()Ljava/lang/String;
+METHOD|org.testng.internal.thread.ThreadUtil.createCountDown(I)Lorg/testng/internal/thread/ICountDown;
+METHOD|org.testng.internal.thread.ThreadUtil.createExecutor(ILorg/testng/internal/thread/IThreadFactory;)Lorg/testng/internal/thread/IExecutor;
+METHOD|org.testng.internal.thread.ThreadUtil.createPooledExecutor(I)Lorg/testng/internal/thread/IPooledExecutor;
+METHOD|org.testng.internal.thread.ThreadUtil.createFactory(Ljava/lang/String;)Lorg/testng/internal/thread/IThreadFactory;
+METHOD|org.testng.junit.INameFilter.accept(Ljava/lang/reflect/Method;)Z
+METHOD|org.testng.junit.JUnitClassFinder.<init>([Ljava/lang/Class;Lorg/testng/xml/XmlTest;Lorg/testng/internal/annotations/IAnnotationFinder;)V
+METHOD|org.testng.junit.JUnitClassFinder.invokeSuite([Ljava/lang/Class;)Ljava/util/Collection;
+METHOD|org.testng.junit.JUnitClassFinder.invokeSuite(Ljava/lang/Class;)[Ljava/lang/Class;
+METHOD|org.testng.junit.JUnitClassFinder.getTestClass(Ljava/lang/Object;)Ljava/lang/Class;
+METHOD|org.testng.junit.JUnitClassFinder.findClassFinder(Ljava/lang/Class;[Ljava/lang/Class;Lorg/testng/xml/XmlTest;Lorg/testng/internal/annotations/IAnnotationFinder;)Lorg/testng/junit/JUnitClassFinder;
+METHOD|org.testng.junit.JUnitClassFinder.ppp(Ljava/lang/String;)V
+METHOD|org.testng.junit.JUnitDirectoryConverter.<init>(Ljava/io/File;Ljava/io/File;Ljava/lang/String;Z)V
+METHOD|org.testng.junit.JUnitDirectoryConverter.convert()I
+METHOD|org.testng.junit.JUnitDirectoryConverter.generateConfiguration([Ljava/lang/String;)V
+METHOD|org.testng.junit.JUnitDirectoryConverter.isTestFile(Ljava/io/File;)Z
+METHOD|org.testng.junit.JUnitDirectoryConverter.convert(Ljava/io/File;)Ljava/util/Map;
+METHOD|org.testng.junit.JUnitDirectoryConverter.ppp(Ljava/lang/String;)V
+METHOD|org.testng.junit.JUnitMethodFinder$1.<init>(Lorg/testng/junit/JUnitMethodFinder;)V
+METHOD|org.testng.junit.JUnitMethodFinder$1.accept(Ljava/lang/reflect/Method;)Z
+METHOD|org.testng.junit.JUnitMethodFinder$2.<init>(Lorg/testng/junit/JUnitMethodFinder;)V
+METHOD|org.testng.junit.JUnitMethodFinder$2.accept(Ljava/lang/reflect/Method;)Z
+METHOD|org.testng.junit.JUnitMethodFinder$3.<init>(Lorg/testng/junit/JUnitMethodFinder;)V
+METHOD|org.testng.junit.JUnitMethodFinder$3.accept(Ljava/lang/reflect/Method;)Z
+METHOD|org.testng.junit.JUnitMethodFinder.<init>(Ljava/lang/String;Lorg/testng/internal/annotations/IAnnotationFinder;)V
+METHOD|org.testng.junit.JUnitMethodFinder.findConstructor(Ljava/lang/Class;[Ljava/lang/Class;)Ljava/lang/reflect/Constructor;
+METHOD|org.testng.junit.JUnitMethodFinder.getTestMethods(Ljava/lang/Class;)[Lorg/testng/ITestNGMethod;
+METHOD|org.testng.junit.JUnitMethodFinder.privateFindTestMethods(Lorg/testng/junit/INameFilter;Ljava/lang/Class;)[Lorg/testng/ITestNGMethod;
+METHOD|org.testng.junit.JUnitMethodFinder.ppp(Ljava/lang/String;)V
+METHOD|org.testng.junit.JUnitMethodFinder.instantiate(Ljava/lang/Class;)Ljava/lang/Object;
+METHOD|org.testng.junit.JUnitMethodFinder.getBeforeTestMethods(Ljava/lang/Class;)[Lorg/testng/ITestNGMethod;
+METHOD|org.testng.junit.JUnitMethodFinder.getAfterTestMethods(Ljava/lang/Class;)[Lorg/testng/ITestNGMethod;
+METHOD|org.testng.junit.JUnitMethodFinder.getAfterClassMethods(Ljava/lang/Class;)[Lorg/testng/ITestNGMethod;
+METHOD|org.testng.junit.JUnitMethodFinder.getBeforeClassMethods(Ljava/lang/Class;)[Lorg/testng/ITestNGMethod;
+METHOD|org.testng.junit.JUnitMethodFinder.getBeforeSuiteMethods(Ljava/lang/Class;)[Lorg/testng/ITestNGMethod;
+METHOD|org.testng.junit.JUnitMethodFinder.getAfterSuiteMethods(Ljava/lang/Class;)[Lorg/testng/ITestNGMethod;
+METHOD|org.testng.junit.JUnitMethodFinder.getBeforeTestConfigurationMethods(Ljava/lang/Class;)[Lorg/testng/ITestNGMethod;
+METHOD|org.testng.junit.JUnitMethodFinder.getAfterTestConfigurationMethods(Ljava/lang/Class;)[Lorg/testng/ITestNGMethod;
+METHOD|org.testng.junit.JUnitMethodFinder.getBeforeGroupsConfigurationMethods(Ljava/lang/Class;)[Lorg/testng/ITestNGMethod;
+METHOD|org.testng.junit.JUnitMethodFinder.getAfterGroupsConfigurationMethods(Ljava/lang/Class;)[Lorg/testng/ITestNGMethod;
+METHOD|org.testng.junit.JUnitTestConverter.<init>([Ljava/io/File;Ljava/io/File;Ljava/lang/String;Z)V
+METHOD|org.testng.junit.JUnitTestConverter.findFileName(Lcom/sun/javadoc/ClassDoc;)Ljava/io/File;
+METHOD|org.testng.junit.JUnitTestConverter.start(Lcom/sun/javadoc/RootDoc;)Z
+METHOD|org.testng.junit.JUnitTestConverter.isJUnitTest(Lcom/sun/javadoc/ClassDoc;)Z
+METHOD|org.testng.junit.JUnitTestConverter.isTest(Lcom/sun/javadoc/MethodDoc;)Z
+METHOD|org.testng.junit.JUnitTestConverter.isSetUp(Lcom/sun/javadoc/MethodDoc;)Z
+METHOD|org.testng.junit.JUnitTestConverter.isTearDown(Lcom/sun/javadoc/MethodDoc;)Z
+METHOD|org.testng.junit.JUnitTestConverter.convert()I
+METHOD|org.testng.junit.JUnitTestConverter.writeFile(Ljava/io/File;)V
+METHOD|org.testng.junit.JUnitTestConverter.insertAnnotations(Ljava/util/List;Ljava/util/List;)Ljava/util/List;
+METHOD|org.testng.junit.JUnitTestConverter.insertJavadoc(Ljava/io/File;Ljava/util/List;Ljava/util/List;)Ljava/util/List;
+METHOD|org.testng.junit.JUnitTestConverter.getPackageOutputDir(Ljava/io/File;Ljava/lang/String;)Ljava/io/File;
+METHOD|org.testng.junit.JUnitTestConverter.findCommentLine(Ljava/util/List;Lcom/sun/javadoc/MethodDoc;I)I
+METHOD|org.testng.junit.JUnitTestConverter.fileToLines(Ljava/io/File;)Ljava/util/List;
+METHOD|org.testng.junit.JUnitTestConverter.ppp(Ljava/lang/String;)V
+METHOD|org.testng.junit.JUnitTestConverter.getClassNames()[Ljava/lang/String;
+METHOD|org.testng.junit.JUnitTestConverter.<clinit>()V
+METHOD|org.testng.log.TextFormatter.<init>()V
+METHOD|org.testng.log.TextFormatter.format(Ljava/util/logging/LogRecord;)Ljava/lang/String;
+METHOD|org.testng.log4testng.Logger.getLogger(Ljava/lang/Class;)Lorg/testng/log4testng/Logger;
+METHOD|org.testng.log4testng.Logger.isTraceEnabled()Z
+METHOD|org.testng.log4testng.Logger.trace(Ljava/lang/Object;)V
+METHOD|org.testng.log4testng.Logger.trace(Ljava/lang/Object;Ljava/lang/Throwable;)V
+METHOD|org.testng.log4testng.Logger.isDebugEnabled()Z
+METHOD|org.testng.log4testng.Logger.debug(Ljava/lang/Object;)V
+METHOD|org.testng.log4testng.Logger.debug(Ljava/lang/Object;Ljava/lang/Throwable;)V
+METHOD|org.testng.log4testng.Logger.isInfoEnabled()Z
+METHOD|org.testng.log4testng.Logger.info(Ljava/lang/Object;)V
+METHOD|org.testng.log4testng.Logger.info(Ljava/lang/Object;Ljava/lang/Throwable;)V
+METHOD|org.testng.log4testng.Logger.warn(Ljava/lang/Object;)V
+METHOD|org.testng.log4testng.Logger.warn(Ljava/lang/Object;Ljava/lang/Throwable;)V
+METHOD|org.testng.log4testng.Logger.error(Ljava/lang/Object;)V
+METHOD|org.testng.log4testng.Logger.error(Ljava/lang/Object;Ljava/lang/Throwable;)V
+METHOD|org.testng.log4testng.Logger.fatal(Ljava/lang/Object;)V
+METHOD|org.testng.log4testng.Logger.fatal(Ljava/lang/Object;Ljava/lang/Throwable;)V
+METHOD|org.testng.log4testng.Logger.<init>(Ljava/lang/Class;I)V
+METHOD|org.testng.log4testng.Logger.initialize()V
+METHOD|org.testng.log4testng.Logger.getLevel(Ljava/lang/Class;)I
+METHOD|org.testng.log4testng.Logger.isLevelEnabled(I)Z
+METHOD|org.testng.log4testng.Logger.log(ILjava/lang/Object;Ljava/lang/Throwable;)V
+METHOD|org.testng.log4testng.Logger.<clinit>()V
+METHOD|org.testng.remote.ConnectionInfo.<init>()V
+METHOD|org.testng.remote.ConnectionInfo.getOis()Ljava/io/ObjectInputStream;
+METHOD|org.testng.remote.ConnectionInfo.getOos()Ljava/io/ObjectOutputStream;
+METHOD|org.testng.remote.ConnectionInfo.setSocket(Ljava/net/Socket;)V
+METHOD|org.testng.remote.ConnectionInfo.getSocket()Ljava/net/Socket;
+METHOD|org.testng.remote.RemoteSuiteWorker.<init>(Lorg/testng/xml/XmlSuite;Lorg/testng/internal/remote/SlavePool;Ljava/util/List;)V
+METHOD|org.testng.remote.RemoteSuiteWorker.run()V
+METHOD|org.testng.remote.RemoteTestWorker.<init>(Lorg/testng/xml/XmlSuite;Lorg/testng/internal/remote/SlavePool;Lorg/testng/SuiteRunner;Ljava/util/List;)V
+METHOD|org.testng.remote.RemoteTestWorker.run()V
+METHOD|org.testng.remote.RemoteTestWorker.ppp(Ljava/lang/String;)V
+METHOD|org.testng.remote.RemoteWorker.<init>(Ljava/util/List;Lorg/testng/internal/remote/SlavePool;)V
+METHOD|org.testng.remote.RemoteWorker.getSlavePool()Lorg/testng/internal/remote/SlavePool;
+METHOD|org.testng.remote.RemoteWorker.sendSuite(Lorg/testng/remote/ConnectionInfo;Lorg/testng/xml/XmlSuite;)Lorg/testng/SuiteRunner;
+METHOD|org.testng.remote.RemoteWorker.log(Ljava/lang/String;)V
+METHOD|org.testng.remote.strprotocol.AbstractRemoteTestRunnerClient$ServerConnection.<init>(Lorg/testng/remote/strprotocol/AbstractRemoteTestRunnerClient;I)V
+METHOD|org.testng.remote.strprotocol.AbstractRemoteTestRunnerClient$ServerConnection.run()V
+METHOD|org.testng.remote.strprotocol.AbstractRemoteTestRunnerClient$ServerConnection.handleThrowable(Ljava/lang/Throwable;)V
+METHOD|org.testng.remote.strprotocol.AbstractRemoteTestRunnerClient.<init>()V
+METHOD|org.testng.remote.strprotocol.AbstractRemoteTestRunnerClient.startListening([Lorg/testng/remote/strprotocol/IRemoteSuiteListener;[Lorg/testng/remote/strprotocol/IRemoteTestListener;Lorg/testng/remote/strprotocol/AbstractRemoteTestRunnerClient$ServerConnection;)V
+METHOD|org.testng.remote.strprotocol.AbstractRemoteTestRunnerClient.getSuiteListeners()[Lorg/testng/remote/strprotocol/IRemoteSuiteListener;
+METHOD|org.testng.remote.strprotocol.AbstractRemoteTestRunnerClient.getTestListeners()[Lorg/testng/remote/strprotocol/IRemoteTestListener;
+METHOD|org.testng.remote.strprotocol.AbstractRemoteTestRunnerClient.shutdown()V
+METHOD|org.testng.remote.strprotocol.AbstractRemoteTestRunnerClient.isRunning()Z
+METHOD|org.testng.remote.strprotocol.AbstractRemoteTestRunnerClient.stopTest()V
+METHOD|org.testng.remote.strprotocol.AbstractRemoteTestRunnerClient.readMessage(Ljava/io/BufferedReader;)Ljava/lang/String;
+METHOD|org.testng.remote.strprotocol.AbstractRemoteTestRunnerClient.receiveMessage(Ljava/lang/String;)V
+METHOD|org.testng.remote.strprotocol.AbstractRemoteTestRunnerClient.notifyStart(Lorg/testng/remote/strprotocol/GenericMessage;)V
+METHOD|org.testng.remote.strprotocol.AbstractRemoteTestRunnerClient.notifySuiteEvents(Lorg/testng/remote/strprotocol/SuiteMessage;)V
+METHOD|org.testng.remote.strprotocol.AbstractRemoteTestRunnerClient.notifyTestEvents(Lorg/testng/remote/strprotocol/TestMessage;)V
+METHOD|org.testng.remote.strprotocol.AbstractRemoteTestRunnerClient.notifyResultEvents(Lorg/testng/remote/strprotocol/TestResultMessage;)V
+METHOD|org.testng.remote.strprotocol.AbstractRemoteTestRunnerClient.access$002(Lorg/testng/remote/strprotocol/AbstractRemoteTestRunnerClient;Ljava/net/ServerSocket;)Ljava/net/ServerSocket;
+METHOD|org.testng.remote.strprotocol.AbstractRemoteTestRunnerClient.access$102(Lorg/testng/remote/strprotocol/AbstractRemoteTestRunnerClient;Ljava/net/Socket;)Ljava/net/Socket;
+METHOD|org.testng.remote.strprotocol.AbstractRemoteTestRunnerClient.access$000(Lorg/testng/remote/strprotocol/AbstractRemoteTestRunnerClient;)Ljava/net/ServerSocket;
+METHOD|org.testng.remote.strprotocol.AbstractRemoteTestRunnerClient.access$202(Lorg/testng/remote/strprotocol/AbstractRemoteTestRunnerClient;Ljava/io/BufferedReader;)Ljava/io/BufferedReader;
+METHOD|org.testng.remote.strprotocol.AbstractRemoteTestRunnerClient.access$100(Lorg/testng/remote/strprotocol/AbstractRemoteTestRunnerClient;)Ljava/net/Socket;
+METHOD|org.testng.remote.strprotocol.AbstractRemoteTestRunnerClient.access$302(Lorg/testng/remote/strprotocol/AbstractRemoteTestRunnerClient;Ljava/io/PrintWriter;)Ljava/io/PrintWriter;
+METHOD|org.testng.remote.strprotocol.AbstractRemoteTestRunnerClient.access$200(Lorg/testng/remote/strprotocol/AbstractRemoteTestRunnerClient;)Ljava/io/BufferedReader;
+METHOD|org.testng.remote.strprotocol.AbstractRemoteTestRunnerClient.access$400(Lorg/testng/remote/strprotocol/AbstractRemoteTestRunnerClient;Ljava/io/BufferedReader;)Ljava/lang/String;
+METHOD|org.testng.remote.strprotocol.AbstractRemoteTestRunnerClient.access$500(Lorg/testng/remote/strprotocol/AbstractRemoteTestRunnerClient;Ljava/lang/String;)V
+METHOD|org.testng.remote.strprotocol.AbstractRemoteTestRunnerClient.access$600(Lorg/testng/remote/strprotocol/AbstractRemoteTestRunnerClient;)V
+METHOD|org.testng.remote.strprotocol.GenericMessage.<init>(I)V
+METHOD|org.testng.remote.strprotocol.GenericMessage.<init>(ILjava/util/Map;)V
+METHOD|org.testng.remote.strprotocol.GenericMessage.addProperty(Ljava/lang/String;Ljava/lang/Object;)Lorg/testng/remote/strprotocol/GenericMessage;
+METHOD|org.testng.remote.strprotocol.GenericMessage.addProperty(Ljava/lang/String;I)Lorg/testng/remote/strprotocol/GenericMessage;
+METHOD|org.testng.remote.strprotocol.GenericMessage.getProperty(Ljava/lang/String;)Ljava/lang/String;
+METHOD|org.testng.remote.strprotocol.GenericMessage.getMessageAsString()Ljava/lang/String;
+METHOD|org.testng.remote.strprotocol.IRemoteSuiteListener.onInitialization(Lorg/testng/remote/strprotocol/GenericMessage;)V
+METHOD|org.testng.remote.strprotocol.IRemoteSuiteListener.onStart(Lorg/testng/remote/strprotocol/SuiteMessage;)V
+METHOD|org.testng.remote.strprotocol.IRemoteSuiteListener.onFinish(Lorg/testng/remote/strprotocol/SuiteMessage;)V
+METHOD|org.testng.remote.strprotocol.IRemoteTestListener.onStart(Lorg/testng/remote/strprotocol/TestMessage;)V
+METHOD|org.testng.remote.strprotocol.IRemoteTestListener.onFinish(Lorg/testng/remote/strprotocol/TestMessage;)V
+METHOD|org.testng.remote.strprotocol.IRemoteTestListener.onTestStart(Lorg/testng/remote/strprotocol/TestResultMessage;)V
+METHOD|org.testng.remote.strprotocol.IRemoteTestListener.onTestSuccess(Lorg/testng/remote/strprotocol/TestResultMessage;)V
+METHOD|org.testng.remote.strprotocol.IRemoteTestListener.onTestFailure(Lorg/testng/remote/strprotocol/TestResultMessage;)V
+METHOD|org.testng.remote.strprotocol.IRemoteTestListener.onTestSkipped(Lorg/testng/remote/strprotocol/TestResultMessage;)V
+METHOD|org.testng.remote.strprotocol.IRemoteTestListener.onTestFailedButWithinSuccessPercentage(Lorg/testng/remote/strprotocol/TestResultMessage;)V
+METHOD|org.testng.remote.strprotocol.IStringMessage.getMessageAsString()Ljava/lang/String;
+METHOD|org.testng.remote.strprotocol.MessageHelper.<init>()V
+METHOD|org.testng.remote.strprotocol.MessageHelper.getMessageType(Ljava/lang/String;)I
+METHOD|org.testng.remote.strprotocol.MessageHelper.unmarshallGenericMessage(Ljava/lang/String;)Lorg/testng/remote/strprotocol/GenericMessage;
+METHOD|org.testng.remote.strprotocol.MessageHelper.createSuiteMessage(Ljava/lang/String;)Lorg/testng/remote/strprotocol/SuiteMessage;
+METHOD|org.testng.remote.strprotocol.MessageHelper.createTestMessage(Ljava/lang/String;)Lorg/testng/remote/strprotocol/TestMessage;
+METHOD|org.testng.remote.strprotocol.MessageHelper.unmarshallTestResultMessage(Ljava/lang/String;)Lorg/testng/remote/strprotocol/TestResultMessage;
+METHOD|org.testng.remote.strprotocol.MessageHelper.replaceNewLine(Ljava/lang/String;)Ljava/lang/String;
+METHOD|org.testng.remote.strprotocol.MessageHelper.replaceNewLineReplacer(Ljava/lang/String;)Ljava/lang/String;
+METHOD|org.testng.remote.strprotocol.MessageHelper.parseMessage(Ljava/lang/String;)[Ljava/lang/String;
+METHOD|org.testng.remote.strprotocol.RemoteMessageSenderTestListener.<init>(Lorg/testng/ISuite;Lorg/testng/xml/XmlTest;Lorg/testng/remote/strprotocol/StringMessageSenderHelper;)V
+METHOD|org.testng.remote.strprotocol.RemoteMessageSenderTestListener.onStart(Lorg/testng/ITestContext;)V
+METHOD|org.testng.remote.strprotocol.RemoteMessageSenderTestListener.onFinish(Lorg/testng/ITestContext;)V
+METHOD|org.testng.remote.strprotocol.RemoteMessageSenderTestListener.onTestStart(Lorg/testng/ITestResult;)V
+METHOD|org.testng.remote.strprotocol.RemoteMessageSenderTestListener.onTestFailedButWithinSuccessPercentage(Lorg/testng/ITestResult;)V
+METHOD|org.testng.remote.strprotocol.RemoteMessageSenderTestListener.onTestFailure(Lorg/testng/ITestResult;)V
+METHOD|org.testng.remote.strprotocol.RemoteMessageSenderTestListener.onTestSkipped(Lorg/testng/ITestResult;)V
+METHOD|org.testng.remote.strprotocol.RemoteMessageSenderTestListener.onTestSuccess(Lorg/testng/ITestResult;)V
+METHOD|org.testng.remote.strprotocol.StringMessageSenderHelper$ReaderThread.<init>(Lorg/testng/remote/strprotocol/StringMessageSenderHelper;)V
+METHOD|org.testng.remote.strprotocol.StringMessageSenderHelper$ReaderThread.run()V
+METHOD|org.testng.remote.strprotocol.StringMessageSenderHelper.<init>(Ljava/lang/String;I)V
+METHOD|org.testng.remote.strprotocol.StringMessageSenderHelper.connect()Z
+METHOD|org.testng.remote.strprotocol.StringMessageSenderHelper.shutDown()V
+METHOD|org.testng.remote.strprotocol.StringMessageSenderHelper.sendMessage(Lorg/testng/remote/strprotocol/IMessage;)V
+METHOD|org.testng.remote.strprotocol.StringMessageSenderHelper.sendMessage(Lorg/testng/remote/strprotocol/IStringMessage;)V
+METHOD|org.testng.remote.strprotocol.StringMessageSenderHelper.sendMessage(Ljava/lang/String;)V
+METHOD|org.testng.remote.strprotocol.StringMessageSenderHelper.ppp(Ljava/lang/String;)V
+METHOD|org.testng.remote.strprotocol.StringMessageSenderHelper.access$000(Lorg/testng/remote/strprotocol/StringMessageSenderHelper;)Ljava/io/BufferedReader;
+METHOD|org.testng.remote.strprotocol.StringMessageSenderHelper.access$100(Lorg/testng/remote/strprotocol/StringMessageSenderHelper;)Z
+METHOD|org.testng.remote.strprotocol.StringMessageSenderHelper.access$200(Ljava/lang/String;)V
+METHOD|org.testng.remote.strprotocol.StringMessageSenderHelper.access$300(Lorg/testng/remote/strprotocol/StringMessageSenderHelper;)Ljava/lang/Object;
+METHOD|org.testng.remote.strprotocol.SuiteMessage.<init>(Ljava/lang/String;ZI)V
+METHOD|org.testng.remote.strprotocol.SuiteMessage.<init>(Lorg/testng/ISuite;Z)V
+METHOD|org.testng.remote.strprotocol.SuiteMessage.isMessageOnStart()Z
+METHOD|org.testng.remote.strprotocol.SuiteMessage.getSuiteName()Ljava/lang/String;
+METHOD|org.testng.remote.strprotocol.SuiteMessage.getTestMethodCount()I
+METHOD|org.testng.remote.strprotocol.SuiteMessage.getMessageAsString()Ljava/lang/String;
+METHOD|org.testng.remote.strprotocol.TestMessage.<init>(ZLjava/lang/String;Ljava/lang/String;IIIII)V
+METHOD|org.testng.remote.strprotocol.TestMessage.<init>(Lorg/testng/ITestContext;Z)V
+METHOD|org.testng.remote.strprotocol.TestMessage.isMessageOnStart()Z
+METHOD|org.testng.remote.strprotocol.TestMessage.getMessageAsString()Ljava/lang/String;
+METHOD|org.testng.remote.strprotocol.TestMessage.getSuiteName()Ljava/lang/String;
+METHOD|org.testng.remote.strprotocol.TestMessage.getTestName()Ljava/lang/String;
+METHOD|org.testng.remote.strprotocol.TestMessage.isTestStart()Z
+METHOD|org.testng.remote.strprotocol.TestMessage.getTestMethodCount()I
+METHOD|org.testng.remote.strprotocol.TestMessage.getSuccessPercentageFailedTestCount()I
+METHOD|org.testng.remote.strprotocol.TestMessage.getFailedTestCount()I
+METHOD|org.testng.remote.strprotocol.TestMessage.getPassedTestCount()I
+METHOD|org.testng.remote.strprotocol.TestMessage.getSkippedTestCount()I
+METHOD|org.testng.remote.strprotocol.TestResultMessage.<init>(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;JJLjava/lang/String;)V
+METHOD|org.testng.remote.strprotocol.TestResultMessage.<init>(Ljava/lang/String;Ljava/lang/String;Lorg/testng/ITestResult;)V
+METHOD|org.testng.remote.strprotocol.TestResultMessage.<init>(Lorg/testng/ITestContext;Lorg/testng/ITestResult;)V
+METHOD|org.testng.remote.strprotocol.TestResultMessage.init(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;JJ)V
+METHOD|org.testng.remote.strprotocol.TestResultMessage.getResult()I
+METHOD|org.testng.remote.strprotocol.TestResultMessage.getMessageAsString()Ljava/lang/String;
+METHOD|org.testng.remote.strprotocol.TestResultMessage.getSuiteName()Ljava/lang/String;
+METHOD|org.testng.remote.strprotocol.TestResultMessage.getTestClass()Ljava/lang/String;
+METHOD|org.testng.remote.strprotocol.TestResultMessage.getMethod()Ljava/lang/String;
+METHOD|org.testng.remote.strprotocol.TestResultMessage.getName()Ljava/lang/String;
+METHOD|org.testng.remote.strprotocol.TestResultMessage.getStackTrace()Ljava/lang/String;
+METHOD|org.testng.remote.strprotocol.TestResultMessage.getEndMillis()J
+METHOD|org.testng.remote.strprotocol.TestResultMessage.getStartMillis()J
+METHOD|org.testng.remote.strprotocol.TestResultMessage.equals(Ljava/lang/Object;)Z
+METHOD|org.testng.remote.strprotocol.TestResultMessage.hashCode()I
+METHOD|org.testng.reporters.DotTestListener.<init>()V
+METHOD|org.testng.reporters.DotTestListener.onTestFailure(Lorg/testng/ITestResult;)V
+METHOD|org.testng.reporters.DotTestListener.onTestSkipped(Lorg/testng/ITestResult;)V
+METHOD|org.testng.reporters.DotTestListener.onTestSuccess(Lorg/testng/ITestResult;)V
+METHOD|org.testng.reporters.DotTestListener.log(Ljava/lang/String;)V
+METHOD|org.testng.reporters.ExitCodeListener.<init>()V
+METHOD|org.testng.reporters.ExitCodeListener.onTestFailure(Lorg/testng/ITestResult;)V
+METHOD|org.testng.reporters.ExitCodeListener.onTestSkipped(Lorg/testng/ITestResult;)V
+METHOD|org.testng.reporters.ExitCodeListener.onTestFailedButWithinSuccessPercentage(Lorg/testng/ITestResult;)V
+METHOD|org.testng.reporters.ExitCodeListener.onTestSuccess(Lorg/testng/ITestResult;)V
+METHOD|org.testng.reporters.ExitCodeListener.onStart(Lorg/testng/ITestContext;)V
+METHOD|org.testng.reporters.ExitCodeListener.onFinish(Lorg/testng/ITestContext;)V
+METHOD|org.testng.reporters.ExitCodeListener.onTestStart(Lorg/testng/ITestResult;)V
+METHOD|org.testng.reporters.FailedReporter.<init>()V
+METHOD|org.testng.reporters.FailedReporter.<init>(Lorg/testng/xml/XmlSuite;)V
+METHOD|org.testng.reporters.FailedReporter.generateReport(Ljava/util/List;Ljava/util/List;Ljava/lang/String;)V
+METHOD|org.testng.reporters.FailedReporter.generateFailureSuite(Lorg/testng/xml/XmlSuite;Lorg/testng/ISuite;Ljava/lang/String;)V
+METHOD|org.testng.reporters.FailedReporter.onFinish(Lorg/testng/ITestContext;)V
+METHOD|org.testng.reporters.FailedReporter.generateXmlTest(Lorg/testng/ISuite;Lorg/testng/xml/XmlTest;Lorg/testng/ITestContext;Ljava/util/Collection;Ljava/util/Collection;)V
+METHOD|org.testng.reporters.FailedReporter.addMethods(Ljava/util/Map;[Lorg/testng/ITestNGMethod;)V
+METHOD|org.testng.reporters.FailedReporter.createXmlTest(Lorg/testng/ITestContext;Ljava/util/List;Lorg/testng/xml/XmlTest;)V
+METHOD|org.testng.reporters.FailedReporter.createXmlClasses(Ljava/util/List;)Ljava/util/List;
+METHOD|org.testng.reporters.FailedReporter.getFileName(Lorg/testng/ITestContext;)Ljava/lang/String;
+METHOD|org.testng.reporters.FailedReporter.ppp(Ljava/lang/String;)V
+METHOD|org.testng.reporters.HtmlHelper.<init>()V
+METHOD|org.testng.reporters.HtmlHelper.getCssString()Ljava/lang/String;
+METHOD|org.testng.reporters.HtmlHelper.getCssString(Ljava/lang/String;)Ljava/lang/String;
+METHOD|org.testng.reporters.HtmlHelper.generateStylesheet(Ljava/lang/String;)Ljava/io/File;
+METHOD|org.testng.reporters.JUnitXMLReporter.<init>()V
+METHOD|org.testng.reporters.JUnitXMLReporter.onTestStart(Lorg/testng/ITestResult;)V
+METHOD|org.testng.reporters.JUnitXMLReporter.onTestSuccess(Lorg/testng/ITestResult;)V
+METHOD|org.testng.reporters.JUnitXMLReporter.onTestFailedButWithinSuccessPercentage(Lorg/testng/ITestResult;)V
+METHOD|org.testng.reporters.JUnitXMLReporter.onTestFailure(Lorg/testng/ITestResult;)V
+METHOD|org.testng.reporters.JUnitXMLReporter.onTestSkipped(Lorg/testng/ITestResult;)V
+METHOD|org.testng.reporters.JUnitXMLReporter.onStart(Lorg/testng/ITestContext;)V
+METHOD|org.testng.reporters.JUnitXMLReporter.onFinish(Lorg/testng/ITestContext;)V
+METHOD|org.testng.reporters.JUnitXMLReporter.generateReport()V
+METHOD|org.testng.reporters.SuiteHTMLReporter$1.<init>(Lorg/testng/reporters/SuiteHTMLReporter;)V
+METHOD|org.testng.reporters.SuiteHTMLReporter$1.compare(Ljava/lang/Object;Ljava/lang/Object;)I
+METHOD|org.testng.reporters.SuiteHTMLReporter.<init>()V
+METHOD|org.testng.reporters.SuiteHTMLReporter.generateReport(Ljava/util/List;Ljava/util/List;Ljava/lang/String;)V
+METHOD|org.testng.reporters.SuiteHTMLReporter.generateXmlFile(Lorg/testng/xml/XmlSuite;Lorg/testng/ISuite;)V
+METHOD|org.testng.reporters.SuiteHTMLReporter.generateIndex(Ljava/util/List;)V
+METHOD|org.testng.reporters.SuiteHTMLReporter.generateExcludedMethodsReport(Lorg/testng/xml/XmlSuite;Lorg/testng/ISuite;)V
+METHOD|org.testng.reporters.SuiteHTMLReporter.generateReporterOutput(Lorg/testng/xml/XmlSuite;Lorg/testng/ISuite;)V
+METHOD|org.testng.reporters.SuiteHTMLReporter.generateClasses(Lorg/testng/xml/XmlSuite;Lorg/testng/ISuite;)V
+METHOD|org.testng.reporters.SuiteHTMLReporter.generateClass(Lorg/testng/ITestClass;)Ljava/lang/String;
+METHOD|org.testng.reporters.SuiteHTMLReporter.dumpMethods([Lorg/testng/ITestNGMethod;)Ljava/lang/String;
+METHOD|org.testng.reporters.SuiteHTMLReporter.dumpGroups([Ljava/lang/String;)Ljava/lang/String;
+METHOD|org.testng.reporters.SuiteHTMLReporter.generateMethodsChronologically(Lorg/testng/xml/XmlSuite;Lorg/testng/ISuite;Ljava/lang/String;Z)V
+METHOD|org.testng.reporters.SuiteHTMLReporter.toHex(I)Ljava/lang/String;
+METHOD|org.testng.reporters.SuiteHTMLReporter.createColor(Lorg/testng/ITestNGMethod;)Ljava/lang/String;
+METHOD|org.testng.reporters.SuiteHTMLReporter.td(Ljava/lang/String;)Ljava/lang/String;
+METHOD|org.testng.reporters.SuiteHTMLReporter.ppp(Ljava/lang/String;)V
+METHOD|org.testng.reporters.SuiteHTMLReporter.generateMethodsAndGroups(Lorg/testng/xml/XmlSuite;Lorg/testng/ISuite;)V
+METHOD|org.testng.reporters.SuiteHTMLReporter.generateIndex(Lorg/testng/xml/XmlSuite;Lorg/testng/ISuite;)V
+METHOD|org.testng.reporters.SuiteHTMLReporter.makeTitle(Lorg/testng/ISuite;)Ljava/lang/String;
+METHOD|org.testng.reporters.SuiteHTMLReporter.generateMain(Lorg/testng/xml/XmlSuite;Lorg/testng/ISuite;)V
+METHOD|org.testng.reporters.SuiteHTMLReporter.generateTableOfContents(Lorg/testng/xml/XmlSuite;Lorg/testng/ISuite;)V
+METHOD|org.testng.reporters.SuiteHTMLReporter.pluralize(ILjava/lang/String;)Ljava/lang/String;
+METHOD|org.testng.reporters.SuiteHTMLReporter.getOutputDirectory(Lorg/testng/xml/XmlSuite;)Ljava/lang/String;
+METHOD|org.testng.reporters.SuiteHTMLReporter.sortResults(Ljava/util/Collection;)[Lorg/testng/ISuiteResult;
+METHOD|org.testng.reporters.SuiteHTMLReporter.generateSuiteResult(Ljava/lang/String;Lorg/testng/ISuiteResult;Ljava/lang/String;Ljava/lang/StringBuffer;Ljava/lang/String;)V
+METHOD|org.testng.reporters.SuiteHTMLReporter.generateSuites(Lorg/testng/xml/XmlSuite;Lorg/testng/ISuite;)V
+METHOD|org.testng.reporters.Tag.<init>(Ljava/lang/String;Ljava/lang/String;)V
+METHOD|org.testng.reporters.TestHTMLReporter$1.<init>()V
+METHOD|org.testng.reporters.TestHTMLReporter$1.compare(Lorg/testng/ITestResult;Lorg/testng/ITestResult;)I
+METHOD|org.testng.reporters.TestHTMLReporter$1.compare(Ljava/lang/Object;Ljava/lang/Object;)I
+METHOD|org.testng.reporters.TestHTMLReporter.<init>()V
+METHOD|org.testng.reporters.TestHTMLReporter.onStart(Lorg/testng/ITestContext;)V
+METHOD|org.testng.reporters.TestHTMLReporter.onFinish(Lorg/testng/ITestContext;)V
+METHOD|org.testng.reporters.TestHTMLReporter.getOutputFile(Ljava/lang/String;Lorg/testng/ITestContext;)Ljava/io/File;
+METHOD|org.testng.reporters.TestHTMLReporter.generateTable(Ljava/lang/StringBuffer;Ljava/lang/String;Ljava/util/Collection;Ljava/lang/String;)V
+METHOD|org.testng.reporters.TestHTMLReporter.arrayToString([Ljava/lang/String;)Ljava/lang/String;
+METHOD|org.testng.reporters.TestHTMLReporter.generateLog(Lorg/testng/ITestContext;Ljava/lang/String;Ljava/lang/String;Ljava/util/Collection;Ljava/util/Collection;Ljava/util/Collection;Ljava/util/Collection;)V
+METHOD|org.testng.reporters.TestHTMLReporter.ppp(Ljava/lang/String;)V
+METHOD|org.testng.reporters.TestHTMLReporter.<clinit>()V
+METHOD|org.testng.reporters.TextReporter.<init>(Ljava/lang/String;I)V
+METHOD|org.testng.reporters.TextReporter.onFinish(Lorg/testng/ITestContext;)V
+METHOD|org.testng.reporters.TextReporter.resultsToMethods(Ljava/util/List;)[Lorg/testng/ITestNGMethod;
+METHOD|org.testng.reporters.TextReporter.logResults()V
+METHOD|org.testng.reporters.TextReporter.getName()Ljava/lang/String;
+METHOD|org.testng.reporters.TextReporter.logResult(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
+METHOD|org.testng.reporters.TextReporter.logResult(Ljava/lang/Throwable;)V
+METHOD|org.testng.reporters.TextReporter.ppp(Ljava/lang/String;)V
+METHOD|org.testng.reporters.XMLReporter.<init>()V
+METHOD|org.testng.reporters.XMLReporter.onStart(Lorg/testng/ISuite;)V
+METHOD|org.testng.reporters.XMLReporter.onFinish(Lorg/testng/ISuite;)V
+METHOD|org.testng.reporters.XMLReporter.ppp(Ljava/lang/String;)V
+METHOD|org.testng.reporters.XMLStringBuffer.<init>(Ljava/lang/String;)V
+METHOD|org.testng.reporters.XMLStringBuffer.setDocType(Ljava/lang/String;)V
+METHOD|org.testng.reporters.XMLStringBuffer.<init>(Ljava/lang/StringBuffer;Ljava/lang/String;)V
+METHOD|org.testng.reporters.XMLStringBuffer.init(Ljava/lang/StringBuffer;Ljava/lang/String;)V
+METHOD|org.testng.reporters.XMLStringBuffer.push(Ljava/lang/String;Ljava/lang/String;Ljava/util/Properties;)V
+METHOD|org.testng.reporters.XMLStringBuffer.push(Ljava/lang/String;Ljava/lang/String;)V
+METHOD|org.testng.reporters.XMLStringBuffer.push(Ljava/lang/String;Ljava/util/Properties;)V
+METHOD|org.testng.reporters.XMLStringBuffer.push(Ljava/lang/String;)V
+METHOD|org.testng.reporters.XMLStringBuffer.pop()V
+METHOD|org.testng.reporters.XMLStringBuffer.pop(Ljava/lang/String;)V
+METHOD|org.testng.reporters.XMLStringBuffer.addRequired(Ljava/lang/String;Ljava/lang/String;)V
+METHOD|org.testng.reporters.XMLStringBuffer.addRequired(Ljava/lang/String;Ljava/lang/String;Ljava/util/Properties;)V
+METHOD|org.testng.reporters.XMLStringBuffer.addOptional(Ljava/lang/String;Ljava/lang/String;Ljava/util/Properties;)V
+METHOD|org.testng.reporters.XMLStringBuffer.addOptional(Ljava/lang/String;Ljava/lang/String;)V
+METHOD|org.testng.reporters.XMLStringBuffer.addOptional(Ljava/lang/String;Ljava/lang/Boolean;Ljava/util/Properties;)V
+METHOD|org.testng.reporters.XMLStringBuffer.addOptional(Ljava/lang/String;Ljava/lang/Boolean;)V
+METHOD|org.testng.reporters.XMLStringBuffer.addEmptyElement(Ljava/lang/String;)V
+METHOD|org.testng.reporters.XMLStringBuffer.addEmptyElement(Ljava/lang/String;Ljava/util/Properties;)V
+METHOD|org.testng.reporters.XMLStringBuffer.ppp(Ljava/lang/String;)V
+METHOD|org.testng.reporters.XMLStringBuffer.addCDATA(Ljava/lang/String;)V
+METHOD|org.testng.reporters.XMLStringBuffer.getStringBuffer()Ljava/lang/StringBuffer;
+METHOD|org.testng.reporters.XMLStringBuffer.toXML()Ljava/lang/String;
+METHOD|org.testng.reporters.XMLStringBuffer.main([Ljava/lang/String;)V
+METHOD|org.testng.reporters.XMLStringBuffer.<clinit>()V
+METHOD|org.testng.reporters.XMLUtils.<init>()V
+METHOD|org.testng.reporters.XMLUtils.xml(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Properties;)Ljava/lang/String;
+METHOD|org.testng.reporters.XMLUtils.xmlOptional(Ljava/lang/StringBuffer;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Boolean;Ljava/util/Properties;)V
+METHOD|org.testng.reporters.XMLUtils.xmlOptional(Ljava/lang/StringBuffer;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Properties;)V
+METHOD|org.testng.reporters.XMLUtils.xmlRequired(Ljava/lang/StringBuffer;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Properties;)V
+METHOD|org.testng.reporters.XMLUtils.xmlOpen(Ljava/lang/StringBuffer;Ljava/lang/String;Ljava/lang/String;Ljava/util/Properties;)V
+METHOD|org.testng.reporters.XMLUtils.appendAttributes(Ljava/lang/StringBuffer;Ljava/util/Properties;)V
+METHOD|org.testng.reporters.XMLUtils.xmlOpen(Ljava/lang/StringBuffer;Ljava/lang/String;Ljava/lang/String;Ljava/util/Properties;Z)V
+METHOD|org.testng.reporters.XMLUtils.xmlClose(Ljava/lang/StringBuffer;Ljava/lang/String;Ljava/lang/String;)V
+METHOD|org.testng.xml.ClassSuite.<init>(Ljava/lang/String;[Ljava/lang/Class;)V
+METHOD|org.testng.xml.LaunchSuite$ClassListSuite.<init>(Ljava/lang/String;Ljava/util/Collection;Ljava/util/Collection;Ljava/util/Collection;Ljava/util/Map;Ljava/lang/String;I)V
+METHOD|org.testng.xml.LaunchSuite$ClassListSuite.initContentBuffer(Lorg/testng/reporters/XMLStringBuffer;)V
+METHOD|org.testng.xml.LaunchSuite$CustomizedSuite.<init>(Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;Ljava/lang/String;)V
+METHOD|org.testng.xml.LaunchSuite$CustomizedSuite.createContentBuffer()Lorg/testng/reporters/XMLStringBuffer;
+METHOD|org.testng.xml.LaunchSuite$CustomizedSuite.getSuiteBuffer()Lorg/testng/reporters/XMLStringBuffer;
+METHOD|org.testng.xml.LaunchSuite$CustomizedSuite.initContentBuffer(Lorg/testng/reporters/XMLStringBuffer;)V
+METHOD|org.testng.xml.LaunchSuite$CustomizedSuite.save(Ljava/io/File;)Ljava/io/File;
+METHOD|org.testng.xml.LaunchSuite$CustomizedSuite.saveSuiteContent(Ljava/io/File;Lorg/testng/reporters/XMLStringBuffer;)V
+METHOD|org.testng.xml.LaunchSuite$CustomizedSuite.<init>(Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;Ljava/lang/String;Lorg/testng/xml/LaunchSuite$1;)V
+METHOD|org.testng.xml.LaunchSuite$ExistingSuite.<init>(Ljava/io/File;)V
+METHOD|org.testng.xml.LaunchSuite$ExistingSuite.save(Ljava/io/File;)Ljava/io/File;
+METHOD|org.testng.xml.LaunchSuite$MethodsSuite.<init>(Ljava/lang/String;Ljava/lang/String;Ljava/util/Collection;Ljava/util/Map;Ljava/lang/String;I)V
+METHOD|org.testng.xml.LaunchSuite$MethodsSuite.initContentBuffer(Lorg/testng/reporters/XMLStringBuffer;)V
+METHOD|org.testng.xml.LaunchSuite.<init>(Z)V
+METHOD|org.testng.xml.LaunchSuite.isTemporary()Z
+METHOD|org.testng.xml.LaunchSuite.save(Ljava/io/File;)Ljava/io/File;
+METHOD|org.testng.xml.Parser.<init>(Ljava/lang/String;Ljava/io/InputStream;)V
+METHOD|org.testng.xml.Parser.<init>(Ljava/lang/String;)V
+METHOD|org.testng.xml.Parser.<init>(Ljava/io/InputStream;)V
+METHOD|org.testng.xml.Parser.<init>()V
+METHOD|org.testng.xml.Parser.getDefault()Ljava/io/InputStream;
+METHOD|org.testng.xml.Parser.parse()Lorg/testng/xml/XmlSuite;
+METHOD|org.testng.xml.SuiteGenerator.<init>()V
+METHOD|org.testng.xml.SuiteGenerator.createProxiedXmlSuite(Ljava/io/File;)Lorg/testng/xml/LaunchSuite;
+METHOD|org.testng.xml.SuiteGenerator.createCustomizedSuite(Ljava/lang/String;Ljava/util/Collection;Ljava/util/Collection;Ljava/util/Collection;Ljava/util/Collection;Ljava/util/Map;Ljava/lang/String;I)Lorg/testng/xml/LaunchSuite;
+METHOD|org.testng.xml.TestNGContentHandler.<init>(Ljava/lang/String;)V
+METHOD|org.testng.xml.TestNGContentHandler.ppp(Ljava/lang/String;)V
+METHOD|org.testng.xml.TestNGContentHandler.resolveEntity(Ljava/lang/String;Ljava/lang/String;)Lorg/xml/sax/InputSource;
+METHOD|org.testng.xml.TestNGContentHandler.xmlSuite(ZLorg/xml/sax/Attributes;)V
+METHOD|org.testng.xml.TestNGContentHandler.xmlDefine(ZLorg/xml/sax/Attributes;)V
+METHOD|org.testng.xml.TestNGContentHandler.xmlScript(ZLorg/xml/sax/Attributes;)V
+METHOD|org.testng.xml.TestNGContentHandler.xmlTest(ZLorg/xml/sax/Attributes;)V
+METHOD|org.testng.xml.TestNGContentHandler.xmlClasses(ZLorg/xml/sax/Attributes;)V
+METHOD|org.testng.xml.TestNGContentHandler.xmlPackages(ZLorg/xml/sax/Attributes;)V
+METHOD|org.testng.xml.TestNGContentHandler.xmlMethodSelectors(ZLorg/xml/sax/Attributes;)V
+METHOD|org.testng.xml.TestNGContentHandler.xmlSelectorClass(ZLorg/xml/sax/Attributes;)V
+METHOD|org.testng.xml.TestNGContentHandler.xmlMethodSelector(ZLorg/xml/sax/Attributes;)V
+METHOD|org.testng.xml.TestNGContentHandler.xmlMethod(ZLorg/xml/sax/Attributes;)V
+METHOD|org.testng.xml.TestNGContentHandler.xmlRun(ZLorg/xml/sax/Attributes;)V
+METHOD|org.testng.xml.TestNGContentHandler.startElement(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lorg/xml/sax/Attributes;)V
+METHOD|org.testng.xml.TestNGContentHandler.endElement(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
+METHOD|org.testng.xml.TestNGContentHandler.error(Lorg/xml/sax/SAXParseException;)V
+METHOD|org.testng.xml.TestNGContentHandler.areWhiteSpaces([CII)Z
+METHOD|org.testng.xml.TestNGContentHandler.characters([CII)V
+METHOD|org.testng.xml.TestNGContentHandler.getSuite()Lorg/testng/xml/XmlSuite;
+METHOD|org.testng.xml.XmlClass.<init>(Ljava/lang/String;)V
+METHOD|org.testng.xml.XmlClass.<init>(Ljava/lang/Class;)V
+METHOD|org.testng.xml.XmlClass.init(Ljava/lang/String;Ljava/lang/Class;)V
+METHOD|org.testng.xml.XmlClass.getSupportClass()Ljava/lang/Class;
+METHOD|org.testng.xml.XmlClass.setClass(Ljava/lang/Class;)V
+METHOD|org.testng.xml.XmlClass.getExcludedMethods()Ljava/util/List;
+METHOD|org.testng.xml.XmlClass.setExcludedMethods(Ljava/util/List;)V
+METHOD|org.testng.xml.XmlClass.getIncludedMethods()Ljava/util/List;
+METHOD|org.testng.xml.XmlClass.setIncludedMethods(Ljava/util/List;)V
+METHOD|org.testng.xml.XmlClass.getName()Ljava/lang/String;
+METHOD|org.testng.xml.XmlClass.setName(Ljava/lang/String;)V
+METHOD|org.testng.xml.XmlClass.toString()Ljava/lang/String;
+METHOD|org.testng.xml.XmlClass.toXml(Ljava/lang/String;)Ljava/lang/String;
+METHOD|org.testng.xml.XmlClass.clone()Ljava/lang/Object;
+METHOD|org.testng.xml.XmlMethodSelector.<init>()V
+METHOD|org.testng.xml.XmlMethodSelector.getClassName()Ljava/lang/String;
+METHOD|org.testng.xml.XmlMethodSelector.setName(Ljava/lang/String;)V
+METHOD|org.testng.xml.XmlMethodSelector.getExpression()Ljava/lang/String;
+METHOD|org.testng.xml.XmlMethodSelector.setExpression(Ljava/lang/String;)V
+METHOD|org.testng.xml.XmlMethodSelector.getLanguage()Ljava/lang/String;
+METHOD|org.testng.xml.XmlMethodSelector.setLanguage(Ljava/lang/String;)V
+METHOD|org.testng.xml.XmlMethodSelector.getPriority()I
+METHOD|org.testng.xml.XmlMethodSelector.setPriority(I)V
+METHOD|org.testng.xml.XmlMethodSelector.toXml(Ljava/lang/String;)Ljava/lang/String;
+METHOD|org.testng.xml.XmlPackage.<init>()V
+METHOD|org.testng.xml.XmlPackage.getExclude()Ljava/util/List;
+METHOD|org.testng.xml.XmlPackage.setExclude(Ljava/util/List;)V
+METHOD|org.testng.xml.XmlPackage.getInclude()Ljava/util/List;
+METHOD|org.testng.xml.XmlPackage.setInclude(Ljava/util/List;)V
+METHOD|org.testng.xml.XmlPackage.getName()Ljava/lang/String;
+METHOD|org.testng.xml.XmlPackage.setName(Ljava/lang/String;)V
+METHOD|org.testng.xml.XmlPackage.getXmlClasses()Ljava/util/List;
+METHOD|org.testng.xml.XmlPackage.initializeXmlClasses()Ljava/util/List;
+METHOD|org.testng.xml.XmlPackage.toXml(Ljava/lang/String;)Ljava/lang/Object;
+METHOD|org.testng.xml.XmlSuite.<init>()V
+METHOD|org.testng.xml.XmlSuite.getFileName()Ljava/lang/String;
+METHOD|org.testng.xml.XmlSuite.setFileName(Ljava/lang/String;)V
+METHOD|org.testng.xml.XmlSuite.isParallel()Z
+METHOD|org.testng.xml.XmlSuite.setParallel(Z)V
+METHOD|org.testng.xml.XmlSuite.getVerbose()Ljava/lang/Integer;
+METHOD|org.testng.xml.XmlSuite.setVerbose(Ljava/lang/Integer;)V
+METHOD|org.testng.xml.XmlSuite.getName()Ljava/lang/String;
+METHOD|org.testng.xml.XmlSuite.setName(Ljava/lang/String;)V
+METHOD|org.testng.xml.XmlSuite.getTest()Ljava/lang/String;
+METHOD|org.testng.xml.XmlSuite.getTests()Ljava/util/List;
+METHOD|org.testng.xml.XmlSuite.getMethodSelectors()Ljava/util/List;
+METHOD|org.testng.xml.XmlSuite.setMethodSelectors(Ljava/util/List;)V
+METHOD|org.testng.xml.XmlSuite.setBeanShellExpression(Ljava/lang/String;)V
+METHOD|org.testng.xml.XmlSuite.getExpression()Ljava/lang/String;
+METHOD|org.testng.xml.XmlSuite.getBeanShellExpression()Ljava/lang/String;
+METHOD|org.testng.xml.XmlSuite.setParameters(Ljava/util/Map;)V
+METHOD|org.testng.xml.XmlSuite.getParameters()Ljava/util/Map;
+METHOD|org.testng.xml.XmlSuite.getAllParameters()Ljava/util/Map;
+METHOD|org.testng.xml.XmlSuite.getParameter(Ljava/lang/String;)Ljava/lang/String;
+METHOD|org.testng.xml.XmlSuite.getThreadCount()I
+METHOD|org.testng.xml.XmlSuite.setThreadCount(I)V
+METHOD|org.testng.xml.XmlSuite.getAnnotations()Ljava/lang/String;
+METHOD|org.testng.xml.XmlSuite.setAnnotations(Ljava/lang/String;)V
+METHOD|org.testng.xml.XmlSuite.isJUnit()Ljava/lang/Boolean;
+METHOD|org.testng.xml.XmlSuite.setJUnit(Ljava/lang/Boolean;)V
+METHOD|org.testng.xml.XmlSuite.setXmlPackages(Ljava/util/List;)V
+METHOD|org.testng.xml.XmlSuite.getXmlPackages()Ljava/util/List;
+METHOD|org.testng.xml.XmlSuite.toXml()Ljava/lang/String;
+METHOD|org.testng.xml.XmlSuite.toString()Ljava/lang/String;
+METHOD|org.testng.xml.XmlSuite.ppp(Ljava/lang/String;)V
+METHOD|org.testng.xml.XmlSuite.clone()Ljava/lang/Object;
+METHOD|org.testng.xml.XmlTest.<init>(Lorg/testng/xml/XmlSuite;)V
+METHOD|org.testng.xml.XmlTest.setXmlPackages(Ljava/util/List;)V
+METHOD|org.testng.xml.XmlTest.getXmlPackages()Ljava/util/List;
+METHOD|org.testng.xml.XmlTest.getMethodSelectors()Ljava/util/List;
+METHOD|org.testng.xml.XmlTest.setMethodSelectors(Ljava/util/List;)V
+METHOD|org.testng.xml.XmlTest.getSuite()Lorg/testng/xml/XmlSuite;
+METHOD|org.testng.xml.XmlTest.getIncludedGroups()Ljava/util/List;
+METHOD|org.testng.xml.XmlTest.setClassNames(Ljava/util/List;)V
+METHOD|org.testng.xml.XmlTest.getXmlClasses()Ljava/util/List;
+METHOD|org.testng.xml.XmlTest.setXmlClasses(Ljava/util/List;)V
+METHOD|org.testng.xml.XmlTest.getName()Ljava/lang/String;
+METHOD|org.testng.xml.XmlTest.setName(Ljava/lang/String;)V
+METHOD|org.testng.xml.XmlTest.setVerbose(I)V
+METHOD|org.testng.xml.XmlTest.setIncludedGroups(Ljava/util/List;)V
+METHOD|org.testng.xml.XmlTest.setExcludedGroups(Ljava/util/List;)V
+METHOD|org.testng.xml.XmlTest.getExcludedGroups()Ljava/util/List;
+METHOD|org.testng.xml.XmlTest.getVerbose()I
+METHOD|org.testng.xml.XmlTest.isJUnit()Z
+METHOD|org.testng.xml.XmlTest.setJUnit(Z)V
+METHOD|org.testng.xml.XmlTest.addMetaGroup(Ljava/lang/String;Ljava/util/List;)V
+METHOD|org.testng.xml.XmlTest.getMetaGroups()Ljava/util/Map;
+METHOD|org.testng.xml.XmlTest.setParameters(Ljava/util/Map;)V
+METHOD|org.testng.xml.XmlTest.addParameter(Ljava/lang/String;Ljava/lang/String;)V
+METHOD|org.testng.xml.XmlTest.getParameter(Ljava/lang/String;)Ljava/lang/String;
+METHOD|org.testng.xml.XmlTest.getParameters()Ljava/util/Map;
+METHOD|org.testng.xml.XmlTest.setParallel(Z)V
+METHOD|org.testng.xml.XmlTest.isParallel()Z
+METHOD|org.testng.xml.XmlTest.getAnnotations()Ljava/lang/String;
+METHOD|org.testng.xml.XmlTest.setAnnotations(Ljava/lang/String;)V
+METHOD|org.testng.xml.XmlTest.setBeanShellExpression(Ljava/lang/String;)V
+METHOD|org.testng.xml.XmlTest.getExpression()Ljava/lang/String;
+METHOD|org.testng.xml.XmlTest.toXml(Ljava/lang/String;)Ljava/lang/String;
+METHOD|org.testng.xml.XmlTest.toString()Ljava/lang/String;
+METHOD|org.testng.xml.XmlTest.ppp(Ljava/lang/String;)V
+METHOD|org.testng.xml.XmlTest.clone()Ljava/lang/Object;
+FILE|META-INF/
+FILE|META-INF/LICENSE.txt
+FILE|META-INF/MANIFEST.MF
+FILE|bsh/
+FILE|bsh/BSHAllocationExpression.class
+FILE|bsh/BSHAmbiguousName.class
+FILE|bsh/BSHArguments.class
+FILE|bsh/BSHArrayDimensions.class
+FILE|bsh/BSHArrayInitializer.class
+FILE|bsh/BSHAssignment.class
+FILE|bsh/BSHBinaryExpression.class
+FILE|bsh/BSHBlock$NodeFilter.class
+FILE|bsh/BSHBlock.class
+FILE|bsh/BSHCastExpression.class
+FILE|bsh/BSHClassDeclaration.class
+FILE|bsh/BSHEnhancedForStatement.class
+FILE|bsh/BSHForStatement.class
+FILE|bsh/BSHFormalComment.class
+FILE|bsh/BSHFormalParameter.class
+FILE|bsh/BSHFormalParameters.class
+FILE|bsh/BSHIfStatement.class
+FILE|bsh/BSHImportDeclaration.class
+FILE|bsh/BSHLiteral.class
+FILE|bsh/BSHMethodDeclaration.class
+FILE|bsh/BSHMethodInvocation.class
+FILE|bsh/BSHPackageDeclaration.class
+FILE|bsh/BSHPrimaryExpression.class
+FILE|bsh/BSHPrimarySuffix.class
+FILE|bsh/BSHPrimitiveType.class
+FILE|bsh/BSHReturnStatement.class
+FILE|bsh/BSHReturnType.class
+FILE|bsh/BSHStatementExpressionList.class
+FILE|bsh/BSHSwitchLabel.class
+FILE|bsh/BSHSwitchStatement.class
+FILE|bsh/BSHTernaryExpression.class
+FILE|bsh/BSHThrowStatement.class
+FILE|bsh/BSHTryStatement.class
+FILE|bsh/BSHType.class
+FILE|bsh/BSHTypedVariableDeclaration.class
+FILE|bsh/BSHUnaryExpression.class
+FILE|bsh/BSHVariableDeclarator.class
+FILE|bsh/BSHWhileStatement.class
+FILE|bsh/BlockNameSpace.class
+FILE|bsh/BshClassManager$Listener.class
+FILE|bsh/BshClassManager$SignatureKey.class
+FILE|bsh/BshClassManager.class
+FILE|bsh/BshIterator.class
+FILE|bsh/BshMethod.class
+FILE|bsh/CallStack.class
+FILE|bsh/Capabilities$Unavailable.class
+FILE|bsh/Capabilities.class
+FILE|bsh/ClassGenerator.class
+FILE|bsh/ClassGeneratorImpl$ClassNodeFilter.class
+FILE|bsh/ClassGeneratorImpl.class
+FILE|bsh/ClassGeneratorUtil$ConstructorArgs.class
+FILE|bsh/ClassGeneratorUtil.class
+FILE|bsh/ClassIdentifier.class
+FILE|bsh/ClassPathException.class
+FILE|bsh/CollectionManager$1.class
+FILE|bsh/CollectionManager$BasicBshIterator.class
+FILE|bsh/CollectionManager.class
+FILE|bsh/CommandLineReader.class
+FILE|bsh/Console.class
+FILE|bsh/ConsoleInterface.class
+FILE|bsh/DelayedEvalBshMethod.class
+FILE|bsh/EvalError.class
+FILE|bsh/ExternalNameSpace.class
+FILE|bsh/Interpreter$1.class
+FILE|bsh/Interpreter.class
+FILE|bsh/InterpreterError.class
+FILE|bsh/JJTParserState.class
+FILE|bsh/JavaCharStream.class
+FILE|bsh/LHS.class
+FILE|bsh/Modifiers.class
+FILE|bsh/Name.class
+FILE|bsh/NameSource$Listener.class
+FILE|bsh/NameSource.class
+FILE|bsh/NameSpace.class
+FILE|bsh/Node.class
+FILE|bsh/ParseException.class
+FILE|bsh/Parser$1.class
+FILE|bsh/Parser$LookaheadSuccess.class
+FILE|bsh/Parser.class
+FILE|bsh/ParserConstants.class
+FILE|bsh/ParserTokenManager.class
+FILE|bsh/ParserTreeConstants.class
+FILE|bsh/Primitive$Special.class
+FILE|bsh/Primitive.class
+FILE|bsh/Reflect.class
+FILE|bsh/ReflectError.class
+FILE|bsh/ReflectManager.class
+FILE|bsh/Remote.class
+FILE|bsh/ReturnControl.class
+FILE|bsh/SimpleNode$1.class
+FILE|bsh/SimpleNode.class
+FILE|bsh/StringUtil.class
+FILE|bsh/TargetError.class
+FILE|bsh/This.class
+FILE|bsh/Token.class
+FILE|bsh/TokenMgrError.class
+FILE|bsh/Types.class
+FILE|bsh/UtilEvalError.class
+FILE|bsh/UtilTargetError.class
+FILE|bsh/Variable.class
+FILE|bsh/XThis$Handler.class
+FILE|bsh/XThis.class
+FILE|bsh/classpath/
+FILE|bsh/classpath/BshClassLoader.class
+FILE|bsh/classpath/BshClassPath$AmbiguousName.class
+FILE|bsh/classpath/BshClassPath$ClassSource.class
+FILE|bsh/classpath/BshClassPath$DirClassSource.class
+FILE|bsh/classpath/BshClassPath$GeneratedClassSource.class
+FILE|bsh/classpath/BshClassPath$JarClassSource.class
+FILE|bsh/classpath/BshClassPath$MappingFeedback.class
+FILE|bsh/classpath/BshClassPath$UnqualifiedNameTable.class
+FILE|bsh/classpath/BshClassPath.class
+FILE|bsh/classpath/ClassManagerImpl.class
+FILE|bsh/classpath/ClassPathListener.class
+FILE|bsh/classpath/DiscreteFilesClassLoader$ClassSourceMap.class
+FILE|bsh/classpath/DiscreteFilesClassLoader.class
+FILE|bsh/collection/
+FILE|bsh/collection/CollectionIterator.class
+FILE|bsh/collection/CollectionManagerImpl.class
+FILE|bsh/commands/
+FILE|bsh/commands/addClassPath.bsh
+FILE|bsh/commands/bg.bsh
+FILE|bsh/commands/bind.bsh
+FILE|bsh/commands/browseClass.bsh
+FILE|bsh/commands/cat.bsh
+FILE|bsh/commands/cd.bsh
+FILE|bsh/commands/classBrowser.bsh
+FILE|bsh/commands/clear.bsh
+FILE|bsh/commands/cp.bsh
+FILE|bsh/commands/debug.bsh
+FILE|bsh/commands/desktop.bsh
+FILE|bsh/commands/dir.class
+FILE|bsh/commands/dirname.bsh
+FILE|bsh/commands/editor.bsh
+FILE|bsh/commands/error.bsh
+FILE|bsh/commands/eval.bsh
+FILE|bsh/commands/exec.bsh
+FILE|bsh/commands/exit.bsh
+FILE|bsh/commands/extend.bsh
+FILE|bsh/commands/fontMenu.bsh
+FILE|bsh/commands/frame.bsh
+FILE|bsh/commands/getBshPrompt.bsh
+FILE|bsh/commands/getClass.bsh
+FILE|bsh/commands/getClassPath.bsh
+FILE|bsh/commands/getResource.bsh
+FILE|bsh/commands/getSourceFileInfo.bsh
+FILE|bsh/commands/importCommands.bsh
+FILE|bsh/commands/importObject.bsh
+FILE|bsh/commands/javap.bsh
+FILE|bsh/commands/load.bsh
+FILE|bsh/commands/makeWorkspace.bsh
+FILE|bsh/commands/mv.bsh
+FILE|bsh/commands/object.bsh
+FILE|bsh/commands/pathToFile.bsh
+FILE|bsh/commands/print.bsh
+FILE|bsh/commands/printBanner.bsh
+FILE|bsh/commands/pwd.bsh
+FILE|bsh/commands/reloadClasses.bsh
+FILE|bsh/commands/rm.bsh
+FILE|bsh/commands/run.bsh
+FILE|bsh/commands/save.bsh
+FILE|bsh/commands/server.bsh
+FILE|bsh/commands/setAccessibility.bsh
+FILE|bsh/commands/setClassPath.bsh
+FILE|bsh/commands/setFont.bsh
+FILE|bsh/commands/setNameCompletion.bsh
+FILE|bsh/commands/setNameSpace.bsh
+FILE|bsh/commands/setStrictJava.bsh
+FILE|bsh/commands/show.bsh
+FILE|bsh/commands/source.bsh
+FILE|bsh/commands/sourceRelative.bsh
+FILE|bsh/commands/thinBorder.bsh
+FILE|bsh/commands/unset.bsh
+FILE|bsh/commands/which.bsh
+FILE|bsh/commands/workspaceEditor.bsh
+FILE|bsh/org/
+FILE|bsh/org/objectweb/
+FILE|bsh/org/objectweb/asm/
+FILE|bsh/org/objectweb/asm/ByteVector.class
+FILE|bsh/org/objectweb/asm/ClassVisitor.class
+FILE|bsh/org/objectweb/asm/ClassWriter.class
+FILE|bsh/org/objectweb/asm/CodeVisitor.class
+FILE|bsh/org/objectweb/asm/CodeWriter.class
+FILE|bsh/org/objectweb/asm/Constants.class
+FILE|bsh/org/objectweb/asm/Edge.class
+FILE|bsh/org/objectweb/asm/Item.class
+FILE|bsh/org/objectweb/asm/Label.class
+FILE|bsh/org/objectweb/asm/Type.class
+FILE|bsh/reflect/
+FILE|bsh/reflect/ReflectManagerImpl.class
+FILE|bsh/servlet/
+FILE|bsh/servlet/BshServlet.class
+FILE|bsh/servlet/SimpleTemplate.class
+FILE|bsh/servlet/error.template
+FILE|bsh/servlet/getVersion.bsh
+FILE|bsh/servlet/page.template
+FILE|bsh/servlet/result.template
+FILE|bsh/util/
+FILE|bsh/util/AWTConsole$1.class
+FILE|bsh/util/AWTConsole.class
+FILE|bsh/util/AWTDemoApplet.class
+FILE|bsh/util/AWTRemoteApplet.class
+FILE|bsh/util/BeanShellBSFEngine.class
+FILE|bsh/util/BshCanvas.class
+FILE|bsh/util/ClassBrowser$1.class
+FILE|bsh/util/ClassBrowser$2.class
+FILE|bsh/util/ClassBrowser$PackageTree.class
+FILE|bsh/util/ClassBrowser.class
+FILE|bsh/util/GUIConsoleInterface.class
+FILE|bsh/util/Httpd.class
+FILE|bsh/util/HttpdConnection.class
+FILE|bsh/util/JConsole$1.class
+FILE|bsh/util/JConsole$2.class
+FILE|bsh/util/JConsole$3.class
+FILE|bsh/util/JConsole$4.class
+FILE|bsh/util/JConsole$5.class
+FILE|bsh/util/JConsole$BlockingPipedInputStream.class
+FILE|bsh/util/JConsole.class
+FILE|bsh/util/JDemoApplet.class
+FILE|bsh/util/JRemoteApplet.class
+FILE|bsh/util/NameCompletion.class
+FILE|bsh/util/NameCompletionTable.class
+FILE|bsh/util/Sessiond.class
+FILE|bsh/util/SessiondConnection.class
+FILE|bsh/util/Util.class
+FILE|bsh/util/lib/
+FILE|bsh/util/lib/awtconsole.html
+FILE|bsh/util/lib/eye.jpg
+FILE|bsh/util/lib/icon.gif
+FILE|bsh/util/lib/jconsole.html
+FILE|bsh/util/lib/remote.html
+FILE|bsh/util/lib/script.gif
+FILE|bsh/util/lib/small_bean_shell.gif
+FILE|bsh/util/lib/splash.gif
+FILE|bsh/util/lib/workspace.gif
+FILE|com/
+FILE|com/beust/
+FILE|com/beust/testng/
+FILE|com/beust/testng/TestNG.class
+FILE|com/beust/testng/TestNGAntTask.class
+FILE|com/thoughtworks/
+FILE|com/thoughtworks/qdox/
+FILE|com/thoughtworks/qdox/JavaDocBuilder$1.class
+FILE|com/thoughtworks/qdox/JavaDocBuilder.class
+FILE|com/thoughtworks/qdox/Searcher.class
+FILE|com/thoughtworks/qdox/ant/
+FILE|com/thoughtworks/qdox/ant/AbstractQdoxTask.class
+FILE|com/thoughtworks/qdox/directorywalker/
+FILE|com/thoughtworks/qdox/directorywalker/DirectoryScanner$1.class
+FILE|com/thoughtworks/qdox/directorywalker/DirectoryScanner.class
+FILE|com/thoughtworks/qdox/directorywalker/FileVisitor.class
+FILE|com/thoughtworks/qdox/directorywalker/Filter.class
+FILE|com/thoughtworks/qdox/directorywalker/SuffixFilter.class
+FILE|com/thoughtworks/qdox/junit/
+FILE|com/thoughtworks/qdox/junit/APITestCase$1.class
+FILE|com/thoughtworks/qdox/junit/APITestCase.class
+FILE|com/thoughtworks/qdox/model/
+FILE|com/thoughtworks/qdox/model/AbstractInheritableJavaEntity.class
+FILE|com/thoughtworks/qdox/model/AbstractJavaEntity.class
+FILE|com/thoughtworks/qdox/model/BeanProperty.class
+FILE|com/thoughtworks/qdox/model/ClassLibrary.class
+FILE|com/thoughtworks/qdox/model/DefaultDocletTag.class
+FILE|com/thoughtworks/qdox/model/DefaultDocletTagFactory.class
+FILE|com/thoughtworks/qdox/model/DocletTag.class
+FILE|com/thoughtworks/qdox/model/DocletTagFactory.class
+FILE|com/thoughtworks/qdox/model/IndentBuffer.class
+FILE|com/thoughtworks/qdox/model/JavaClass.class
+FILE|com/thoughtworks/qdox/model/JavaClassCache.class
+FILE|com/thoughtworks/qdox/model/JavaClassParent.class
+FILE|com/thoughtworks/qdox/model/JavaField.class
+FILE|com/thoughtworks/qdox/model/JavaMethod.class
+FILE|com/thoughtworks/qdox/model/JavaParameter.class
+FILE|com/thoughtworks/qdox/model/JavaSource.class
+FILE|com/thoughtworks/qdox/model/Member.class
+FILE|com/thoughtworks/qdox/model/ModelBuilder.class
+FILE|com/thoughtworks/qdox/model/Type.class
+FILE|com/thoughtworks/qdox/model/util/
+FILE|com/thoughtworks/qdox/model/util/TagParser.class
+FILE|com/thoughtworks/qdox/parser/
+FILE|com/thoughtworks/qdox/parser/Builder.class
+FILE|com/thoughtworks/qdox/parser/Lexer.class
+FILE|com/thoughtworks/qdox/parser/ParseException.class
+FILE|com/thoughtworks/qdox/parser/impl/
+FILE|com/thoughtworks/qdox/parser/impl/JFlexLexer.class
+FILE|com/thoughtworks/qdox/parser/impl/Parser$1.class
+FILE|com/thoughtworks/qdox/parser/impl/Parser$Value.class
+FILE|com/thoughtworks/qdox/parser/impl/Parser.class
+FILE|com/thoughtworks/qdox/parser/structs/
+FILE|com/thoughtworks/qdox/parser/structs/ClassDef.class
+FILE|com/thoughtworks/qdox/parser/structs/FieldDef.class
+FILE|com/thoughtworks/qdox/parser/structs/LocatedDef.class
+FILE|com/thoughtworks/qdox/parser/structs/MethodDef.class
+FILE|com/thoughtworks/qdox/parser/structs/TagDef.class
+FILE|com/thoughtworks/qdox/parser/structs/TypeDef.class
+FILE|org/
+FILE|org/testng/
+FILE|org/testng/Assert.class
+FILE|org/testng/AssertJUnit.class
+FILE|org/testng/ClassMethodMap.class
+FILE|org/testng/IClass.class
+FILE|org/testng/IExtraOutput.class
+FILE|org/testng/IHookCallBack.class
+FILE|org/testng/IHookable.class
+FILE|org/testng/IInstanceInfo.class
+FILE|org/testng/IMethodSelector.class
+FILE|org/testng/IReporter.class
+FILE|org/testng/IResultMap.class
+FILE|org/testng/ISuite.class
+FILE|org/testng/ISuiteListener.class
+FILE|org/testng/ISuiteResult.class
+FILE|org/testng/ITest.class
+FILE|org/testng/ITestClass.class
+FILE|org/testng/ITestClassFinder.class
+FILE|org/testng/ITestContext.class
+FILE|org/testng/ITestListener.class
+FILE|org/testng/ITestMethodFinder.class
+FILE|org/testng/ITestNGMethod.class
+FILE|org/testng/ITestResult.class
+FILE|org/testng/ITestRunnerFactory.class
+FILE|org/testng/JUnitConverter.class
+FILE|org/testng/JUnitConverterTask.class
+FILE|org/testng/Reporter.class
+FILE|org/testng/SuiteResult$1.class
+FILE|org/testng/SuiteResult.class
+FILE|org/testng/SuiteRunner$DefaultTestRunnerFactory.class
+FILE|org/testng/SuiteRunner$ProxyTestRunnerFactory.class
+FILE|org/testng/SuiteRunner.class
+FILE|org/testng/TestClass.class
+FILE|org/testng/TestException.class
+FILE|org/testng/TestListenerAdapter.class
+FILE|org/testng/TestNG.class
+FILE|org/testng/TestNGAntTask.class
+FILE|org/testng/TestNGCommandLineArgs.class
+FILE|org/testng/TestNGException.class
+FILE|org/testng/TestRunner.class
+FILE|org/testng/annotations/
+FILE|org/testng/annotations/AfterClass.class
+FILE|org/testng/annotations/AfterGroups.class
+FILE|org/testng/annotations/AfterMethod.class
+FILE|org/testng/annotations/AfterSuite.class
+FILE|org/testng/annotations/AfterTest.class
+FILE|org/testng/annotations/BeforeClass.class
+FILE|org/testng/annotations/BeforeGroups.class
+FILE|org/testng/annotations/BeforeMethod.class
+FILE|org/testng/annotations/BeforeSuite.class
+FILE|org/testng/annotations/BeforeTest.class
+FILE|org/testng/annotations/Configuration.class
+FILE|org/testng/annotations/DataProvider.class
+FILE|org/testng/annotations/ExpectedExceptions.class
+FILE|org/testng/annotations/Factory.class
+FILE|org/testng/annotations/Parameters.class
+FILE|org/testng/annotations/Test.class
+FILE|org/testng/internal/
+FILE|org/testng/internal/ArrayIterator.class
+FILE|org/testng/internal/BaseClassFinder.class
+FILE|org/testng/internal/BaseTestMethod$1.class
+FILE|org/testng/internal/BaseTestMethod.class
+FILE|org/testng/internal/ClassHelper.class
+FILE|org/testng/internal/ClassImpl.class
+FILE|org/testng/internal/ConfigurationGroupMethods.class
+FILE|org/testng/internal/ConfigurationMethod.class
+FILE|org/testng/internal/Constants.class
+FILE|org/testng/internal/ExtraOutput.class
+FILE|org/testng/internal/FactoryMethod.class
+FILE|org/testng/internal/Graph$Node.class
+FILE|org/testng/internal/Graph.class
+FILE|org/testng/internal/HostFile.class
+FILE|org/testng/internal/IInvoker.class
+FILE|org/testng/internal/ITestResultNotifier.class
+FILE|org/testng/internal/InstanceInfo.class
+FILE|org/testng/internal/InvokeMethodRunnable$TestNGRuntimeException.class
+FILE|org/testng/internal/InvokeMethodRunnable.class
+FILE|org/testng/internal/InvokedMethod.class
+FILE|org/testng/internal/Invoker$1.class
+FILE|org/testng/internal/Invoker.class
+FILE|org/testng/internal/JUnitUtils.class
+FILE|org/testng/internal/MethodHelper.class
+FILE|org/testng/internal/MethodInheritance.class
+FILE|org/testng/internal/MethodSelectorDescriptor.class
+FILE|org/testng/internal/PackageUtils$1.class
+FILE|org/testng/internal/PackageUtils.class
+FILE|org/testng/internal/Parameters.class
+FILE|org/testng/internal/ResultMap.class
+FILE|org/testng/internal/RunInfo.class
+FILE|org/testng/internal/TestMethodWorker.class
+FILE|org/testng/internal/TestNGClassFinder.class
+FILE|org/testng/internal/TestNGMethod$1.class
+FILE|org/testng/internal/TestNGMethod.class
+FILE|org/testng/internal/TestNGMethodFinder.class
+FILE|org/testng/internal/TestNGProperty.class
+FILE|org/testng/internal/TestResult.class
+FILE|org/testng/internal/Utils.class
+FILE|org/testng/internal/XmlMethodSelector.class
+FILE|org/testng/internal/annotations/
+FILE|org/testng/internal/annotations/AfterSuiteAnnotation.class
+FILE|org/testng/internal/annotations/AnnotationConfiguration.class
+FILE|org/testng/internal/annotations/AnnotationHelper.class
+FILE|org/testng/internal/annotations/BaseBeforeAfter.class
+FILE|org/testng/internal/annotations/BeforeSuiteAnnotation.class
+FILE|org/testng/internal/annotations/ConfigurationAnnotation.class
+FILE|org/testng/internal/annotations/Converter.class
+FILE|org/testng/internal/annotations/DataProviderAnnotation.class
+FILE|org/testng/internal/annotations/ExpectedExceptionsAnnotation.class
+FILE|org/testng/internal/annotations/FactoryAnnotation.class
+FILE|org/testng/internal/annotations/IAfterClass.class
+FILE|org/testng/internal/annotations/IAfterGroups.class
+FILE|org/testng/internal/annotations/IAfterMethod.class
+FILE|org/testng/internal/annotations/IAfterSuite.class
+FILE|org/testng/internal/annotations/IAfterTest.class
+FILE|org/testng/internal/annotations/IAfterTests.class
+FILE|org/testng/internal/annotations/IAnnotation.class
+FILE|org/testng/internal/annotations/IAnnotationFinder.class
+FILE|org/testng/internal/annotations/IBaseBeforeAfter.class
+FILE|org/testng/internal/annotations/IBeforeClass.class
+FILE|org/testng/internal/annotations/IBeforeGroups.class
+FILE|org/testng/internal/annotations/IBeforeMethod.class
+FILE|org/testng/internal/annotations/IBeforeSuite.class
+FILE|org/testng/internal/annotations/IBeforeTest.class
+FILE|org/testng/internal/annotations/IConfiguration.class
+FILE|org/testng/internal/annotations/IDataProvider.class
+FILE|org/testng/internal/annotations/IExpectedExceptions.class
+FILE|org/testng/internal/annotations/IFactory.class
+FILE|org/testng/internal/annotations/IParameterizable.class
+FILE|org/testng/internal/annotations/IParameters.class
+FILE|org/testng/internal/annotations/ITest.class
+FILE|org/testng/internal/annotations/ITestOrConfiguration.class
+FILE|org/testng/internal/annotations/JDK14AnnotationFinder$1.class
+FILE|org/testng/internal/annotations/JDK14AnnotationFinder.class
+FILE|org/testng/internal/annotations/JDK14TagFactory.class
+FILE|org/testng/internal/annotations/JDK15AnnotationFinder.class
+FILE|org/testng/internal/annotations/JDK15TagFactory.class
+FILE|org/testng/internal/annotations/ParametersAnnotation.class
+FILE|org/testng/internal/annotations/TestAnnotation.class
+FILE|org/testng/internal/annotations/TestOrConfiguration.class
+FILE|org/testng/internal/remote/
+FILE|org/testng/internal/remote/SlavePool.class
+FILE|org/testng/internal/thread/
+FILE|org/testng/internal/thread/CountDownAdapter.class
+FILE|org/testng/internal/thread/ExecutorAdapter.class
+FILE|org/testng/internal/thread/FutureResultAdapter.class
+FILE|org/testng/internal/thread/ICountDown.class
+FILE|org/testng/internal/thread/IExecutor.class
+FILE|org/testng/internal/thread/IFutureResult.class
+FILE|org/testng/internal/thread/IPooledExecutor.class
+FILE|org/testng/internal/thread/IThreadFactory.class
+FILE|org/testng/internal/thread/PooledExecutorAdapter.class
+FILE|org/testng/internal/thread/TestNGThread.class
+FILE|org/testng/internal/thread/ThreadExecutionException.class
+FILE|org/testng/internal/thread/ThreadTimeoutException.class
+FILE|org/testng/internal/thread/ThreadUtil$ThreadFactoryImpl.class
+FILE|org/testng/internal/thread/ThreadUtil.class
+FILE|org/testng/junit/
+FILE|org/testng/junit/INameFilter.class
+FILE|org/testng/junit/JUnitClassFinder.class
+FILE|org/testng/junit/JUnitDirectoryConverter.class
+FILE|org/testng/junit/JUnitMethodFinder$1.class
+FILE|org/testng/junit/JUnitMethodFinder$2.class
+FILE|org/testng/junit/JUnitMethodFinder$3.class
+FILE|org/testng/junit/JUnitMethodFinder.class
+FILE|org/testng/junit/JUnitTestConverter.class
+FILE|org/testng/log/
+FILE|org/testng/log/TextFormatter.class
+FILE|org/testng/log4testng/
+FILE|org/testng/log4testng/Logger.class
+FILE|org/testng/remote/
+FILE|org/testng/remote/ConnectionInfo.class
+FILE|org/testng/remote/RemoteSuiteWorker.class
+FILE|org/testng/remote/RemoteTestWorker.class
+FILE|org/testng/remote/RemoteWorker.class
+FILE|org/testng/remote/strprotocol/
+FILE|org/testng/remote/strprotocol/AbstractRemoteTestRunnerClient$ServerConnection.class
+FILE|org/testng/remote/strprotocol/AbstractRemoteTestRunnerClient.class
+FILE|org/testng/remote/strprotocol/GenericMessage.class
+FILE|org/testng/remote/strprotocol/IMessage.class
+FILE|org/testng/remote/strprotocol/IRemoteSuiteListener.class
+FILE|org/testng/remote/strprotocol/IRemoteTestListener.class
+FILE|org/testng/remote/strprotocol/IStringMessage.class
+FILE|org/testng/remote/strprotocol/MessageHelper.class
+FILE|org/testng/remote/strprotocol/RemoteMessageSenderTestListener.class
+FILE|org/testng/remote/strprotocol/StringMessageSenderHelper$ReaderThread.class
+FILE|org/testng/remote/strprotocol/StringMessageSenderHelper.class
+FILE|org/testng/remote/strprotocol/SuiteMessage.class
+FILE|org/testng/remote/strprotocol/TestMessage.class
+FILE|org/testng/remote/strprotocol/TestResultMessage.class
+FILE|org/testng/reporters/
+FILE|org/testng/reporters/DotTestListener.class
+FILE|org/testng/reporters/ExitCodeListener.class
+FILE|org/testng/reporters/FailedReporter.class
+FILE|org/testng/reporters/HtmlHelper.class
+FILE|org/testng/reporters/JUnitXMLReporter.class
+FILE|org/testng/reporters/SuiteHTMLReporter$1.class
+FILE|org/testng/reporters/SuiteHTMLReporter.class
+FILE|org/testng/reporters/Tag.class
+FILE|org/testng/reporters/TestHTMLReporter$1.class
+FILE|org/testng/reporters/TestHTMLReporter.class
+FILE|org/testng/reporters/TextReporter.class
+FILE|org/testng/reporters/XMLConstants.class
+FILE|org/testng/reporters/XMLReporter.class
+FILE|org/testng/reporters/XMLStringBuffer.class
+FILE|org/testng/reporters/XMLUtils.class
+FILE|org/testng/xml/
+FILE|org/testng/xml/ClassSuite.class
+FILE|org/testng/xml/LaunchSuite$1.class
+FILE|org/testng/xml/LaunchSuite$ClassListSuite.class
+FILE|org/testng/xml/LaunchSuite$CustomizedSuite.class
+FILE|org/testng/xml/LaunchSuite$ExistingSuite.class
+FILE|org/testng/xml/LaunchSuite$MethodsSuite.class
+FILE|org/testng/xml/LaunchSuite.class
+FILE|org/testng/xml/Parser.class
+FILE|org/testng/xml/SuiteGenerator.class
+FILE|org/testng/xml/TestNGContentHandler.class
+FILE|org/testng/xml/XmlClass.class
+FILE|org/testng/xml/XmlMethodSelector.class
+FILE|org/testng/xml/XmlPackage.class
+FILE|org/testng/xml/XmlSuite.class
+FILE|org/testng/xml/XmlTest.class
+FILE|testng-1.0.dtd
+FILE|testng.css
+FILE|testngtasks
diff --git a/archiva-base/archiva-indexer/src/test/artifact-dumps/wagon-provider-api-1.0-beta-3-20070209.213958-2.jar.txt b/archiva-base/archiva-indexer/src/test/artifact-dumps/wagon-provider-api-1.0-beta-3-20070209.213958-2.jar.txt
new file mode 100644
index 000000000..5365b6637
--- /dev/null
+++ b/archiva-base/archiva-indexer/src/test/artifact-dumps/wagon-provider-api-1.0-beta-3-20070209.213958-2.jar.txt
@@ -0,0 +1,435 @@
+FILENAME|wagon-provider-api-1.0-beta-3-20070209.213958-2.jar
+SIZE|43527
+HASH_MD5|51e8109f78e663f11310f7df2790dbce
+HASH_SHA1|7a8322eff673ed8f8d79b4676aca0d7d2004241d
+HASH_BYTECODE|edde91be8d27eef6ee0da42147bb313af891871a
+JDK|1.1
+CLASS|org.apache.maven.wagon.AbstractWagon
+CLASS|org.apache.maven.wagon.CommandExecutionException
+CLASS|org.apache.maven.wagon.CommandExecutor$1
+CLASS|org.apache.maven.wagon.CommandExecutor
+CLASS|org.apache.maven.wagon.ConnectionException
+CLASS|org.apache.maven.wagon.InputData
+CLASS|org.apache.maven.wagon.LazyFileOutputStream
+CLASS|org.apache.maven.wagon.OutputData
+CLASS|org.apache.maven.wagon.PathUtils
+CLASS|org.apache.maven.wagon.PermissionModeUtils
+CLASS|org.apache.maven.wagon.ResourceDoesNotExistException
+CLASS|org.apache.maven.wagon.StreamWagon
+CLASS|org.apache.maven.wagon.Streams
+CLASS|org.apache.maven.wagon.TransferFailedException
+CLASS|org.apache.maven.wagon.UnsupportedProtocolException
+CLASS|org.apache.maven.wagon.Wagon$1
+CLASS|org.apache.maven.wagon.Wagon
+CLASS|org.apache.maven.wagon.WagonConstants
+CLASS|org.apache.maven.wagon.WagonException
+CLASS|org.apache.maven.wagon.WagonUtils
+CLASS|org.apache.maven.wagon.authentication.AuthenticationException
+CLASS|org.apache.maven.wagon.authentication.AuthenticationInfo
+CLASS|org.apache.maven.wagon.authorization.AuthorizationException
+CLASS|org.apache.maven.wagon.events.SessionEvent
+CLASS|org.apache.maven.wagon.events.SessionEventSupport
+CLASS|org.apache.maven.wagon.events.SessionListener
+CLASS|org.apache.maven.wagon.events.TransferEvent
+CLASS|org.apache.maven.wagon.events.TransferEventSupport
+CLASS|org.apache.maven.wagon.events.TransferListener
+CLASS|org.apache.maven.wagon.events.WagonEvent
+CLASS|org.apache.maven.wagon.observers.AbstractTransferListener
+CLASS|org.apache.maven.wagon.observers.ChecksumObserver
+CLASS|org.apache.maven.wagon.observers.Debug
+CLASS|org.apache.maven.wagon.proxy.ProxyInfo
+CLASS|org.apache.maven.wagon.repository.Repository
+CLASS|org.apache.maven.wagon.repository.RepositoryPermissions
+CLASS|org.apache.maven.wagon.resource.Resource
+METHOD|org.apache.maven.wagon.AbstractWagon.<init>()V
+METHOD|org.apache.maven.wagon.AbstractWagon.getRepository()Lorg/apache/maven/wagon/repository/Repository;
+METHOD|org.apache.maven.wagon.AbstractWagon.setRepository(Lorg/apache/maven/wagon/repository/Repository;)V
+METHOD|org.apache.maven.wagon.AbstractWagon.getProxyInfo()Lorg/apache/maven/wagon/proxy/ProxyInfo;
+METHOD|org.apache.maven.wagon.AbstractWagon.setProxyInfo(Lorg/apache/maven/wagon/proxy/ProxyInfo;)V
+METHOD|org.apache.maven.wagon.AbstractWagon.getAuthenticationInfo()Lorg/apache/maven/wagon/authentication/AuthenticationInfo;
+METHOD|org.apache.maven.wagon.AbstractWagon.setAuthenticationInfo(Lorg/apache/maven/wagon/authentication/AuthenticationInfo;)V
+METHOD|org.apache.maven.wagon.AbstractWagon.isConnected()Z
+METHOD|org.apache.maven.wagon.AbstractWagon.openConnection()V
+METHOD|org.apache.maven.wagon.AbstractWagon.connect()V
+METHOD|org.apache.maven.wagon.AbstractWagon.connect(Lorg/apache/maven/wagon/repository/Repository;)V
+METHOD|org.apache.maven.wagon.AbstractWagon.connect(Lorg/apache/maven/wagon/repository/Repository;Lorg/apache/maven/wagon/proxy/ProxyInfo;)V
+METHOD|org.apache.maven.wagon.AbstractWagon.connect(Lorg/apache/maven/wagon/repository/Repository;Lorg/apache/maven/wagon/authentication/AuthenticationInfo;)V
+METHOD|org.apache.maven.wagon.AbstractWagon.connect(Lorg/apache/maven/wagon/repository/Repository;Lorg/apache/maven/wagon/authentication/AuthenticationInfo;Lorg/apache/maven/wagon/proxy/ProxyInfo;)V
+METHOD|org.apache.maven.wagon.AbstractWagon.disconnect()V
+METHOD|org.apache.maven.wagon.AbstractWagon.closeConnection()V
+METHOD|org.apache.maven.wagon.AbstractWagon.createParentDirectories(Ljava/io/File;)V
+METHOD|org.apache.maven.wagon.AbstractWagon.getTransfer(Lorg/apache/maven/wagon/resource/Resource;Ljava/io/File;Ljava/io/InputStream;)V
+METHOD|org.apache.maven.wagon.AbstractWagon.getTransfer(Lorg/apache/maven/wagon/resource/Resource;Ljava/io/File;Ljava/io/InputStream;ZI)V
+METHOD|org.apache.maven.wagon.AbstractWagon.putTransfer(Lorg/apache/maven/wagon/resource/Resource;Ljava/io/File;Ljava/io/OutputStream;Z)V
+METHOD|org.apache.maven.wagon.AbstractWagon.transfer(Lorg/apache/maven/wagon/resource/Resource;Ljava/io/File;Ljava/io/OutputStream;Z)V
+METHOD|org.apache.maven.wagon.AbstractWagon.transfer(Lorg/apache/maven/wagon/resource/Resource;Ljava/io/InputStream;Ljava/io/OutputStream;I)V
+METHOD|org.apache.maven.wagon.AbstractWagon.transfer(Lorg/apache/maven/wagon/resource/Resource;Ljava/io/InputStream;Ljava/io/OutputStream;II)V
+METHOD|org.apache.maven.wagon.AbstractWagon.fireTransferProgress(Lorg/apache/maven/wagon/events/TransferEvent;[BI)V
+METHOD|org.apache.maven.wagon.AbstractWagon.fireGetCompleted(Lorg/apache/maven/wagon/resource/Resource;Ljava/io/File;)V
+METHOD|org.apache.maven.wagon.AbstractWagon.fireGetStarted(Lorg/apache/maven/wagon/resource/Resource;Ljava/io/File;)V
+METHOD|org.apache.maven.wagon.AbstractWagon.fireGetInitiated(Lorg/apache/maven/wagon/resource/Resource;Ljava/io/File;)V
+METHOD|org.apache.maven.wagon.AbstractWagon.firePutInitiated(Lorg/apache/maven/wagon/resource/Resource;Ljava/io/File;)V
+METHOD|org.apache.maven.wagon.AbstractWagon.firePutCompleted(Lorg/apache/maven/wagon/resource/Resource;Ljava/io/File;)V
+METHOD|org.apache.maven.wagon.AbstractWagon.firePutStarted(Lorg/apache/maven/wagon/resource/Resource;Ljava/io/File;)V
+METHOD|org.apache.maven.wagon.AbstractWagon.fireSessionDisconnected()V
+METHOD|org.apache.maven.wagon.AbstractWagon.fireSessionDisconnecting()V
+METHOD|org.apache.maven.wagon.AbstractWagon.fireSessionLoggedIn()V
+METHOD|org.apache.maven.wagon.AbstractWagon.fireSessionLoggedOff()V
+METHOD|org.apache.maven.wagon.AbstractWagon.fireSessionOpened()V
+METHOD|org.apache.maven.wagon.AbstractWagon.fireSessionOpening()V
+METHOD|org.apache.maven.wagon.AbstractWagon.fireSessionConnectionRefused()V
+METHOD|org.apache.maven.wagon.AbstractWagon.fireSessionError(Ljava/lang/Exception;)V
+METHOD|org.apache.maven.wagon.AbstractWagon.fireTransferDebug(Ljava/lang/String;)V
+METHOD|org.apache.maven.wagon.AbstractWagon.fireSessionDebug(Ljava/lang/String;)V
+METHOD|org.apache.maven.wagon.AbstractWagon.hasTransferListener(Lorg/apache/maven/wagon/events/TransferListener;)Z
+METHOD|org.apache.maven.wagon.AbstractWagon.addTransferListener(Lorg/apache/maven/wagon/events/TransferListener;)V
+METHOD|org.apache.maven.wagon.AbstractWagon.removeTransferListener(Lorg/apache/maven/wagon/events/TransferListener;)V
+METHOD|org.apache.maven.wagon.AbstractWagon.addSessionListener(Lorg/apache/maven/wagon/events/SessionListener;)V
+METHOD|org.apache.maven.wagon.AbstractWagon.hasSessionListener(Lorg/apache/maven/wagon/events/SessionListener;)Z
+METHOD|org.apache.maven.wagon.AbstractWagon.removeSessionListener(Lorg/apache/maven/wagon/events/SessionListener;)V
+METHOD|org.apache.maven.wagon.AbstractWagon.fireTransferError(Lorg/apache/maven/wagon/resource/Resource;Ljava/lang/Exception;I)V
+METHOD|org.apache.maven.wagon.AbstractWagon.getSessionEventSupport()Lorg/apache/maven/wagon/events/SessionEventSupport;
+METHOD|org.apache.maven.wagon.AbstractWagon.setSessionEventSupport(Lorg/apache/maven/wagon/events/SessionEventSupport;)V
+METHOD|org.apache.maven.wagon.AbstractWagon.getTransferEventSupport()Lorg/apache/maven/wagon/events/TransferEventSupport;
+METHOD|org.apache.maven.wagon.AbstractWagon.setTransferEventSupport(Lorg/apache/maven/wagon/events/TransferEventSupport;)V
+METHOD|org.apache.maven.wagon.AbstractWagon.postProcessListeners(Lorg/apache/maven/wagon/resource/Resource;Ljava/io/File;I)V
+METHOD|org.apache.maven.wagon.AbstractWagon.putDirectory(Ljava/io/File;Ljava/lang/String;)V
+METHOD|org.apache.maven.wagon.AbstractWagon.supportsDirectoryCopy()Z
+METHOD|org.apache.maven.wagon.AbstractWagon.createZip(Ljava/util/List;Ljava/io/File;Ljava/io/File;)V
+METHOD|org.apache.maven.wagon.AbstractWagon.writeZipEntry(Ljava/util/zip/ZipOutputStream;Ljava/io/File;Ljava/lang/String;)V
+METHOD|org.apache.maven.wagon.AbstractWagon.getPath(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+METHOD|org.apache.maven.wagon.AbstractWagon.isInteractive()Z
+METHOD|org.apache.maven.wagon.AbstractWagon.setInteractive(Z)V
+METHOD|org.apache.maven.wagon.AbstractWagon.getFileList(Ljava/lang/String;)Ljava/util/List;
+METHOD|org.apache.maven.wagon.AbstractWagon.resourceExists(Ljava/lang/String;)Z
+METHOD|org.apache.maven.wagon.AbstractWagon.getProtocol()Ljava/lang/String;
+METHOD|org.apache.maven.wagon.AbstractWagon.put(Ljava/io/File;Ljava/lang/String;)V
+METHOD|org.apache.maven.wagon.AbstractWagon.getIfNewer(Ljava/lang/String;Ljava/io/File;J)Z
+METHOD|org.apache.maven.wagon.AbstractWagon.get(Ljava/lang/String;Ljava/io/File;)V
+METHOD|org.apache.maven.wagon.CommandExecutionException.<init>(Ljava/lang/String;)V
+METHOD|org.apache.maven.wagon.CommandExecutionException.<init>(Ljava/lang/String;Ljava/lang/Throwable;)V
+METHOD|org.apache.maven.wagon.CommandExecutor$1.class$(Ljava/lang/String;)Ljava/lang/Class;
+METHOD|org.apache.maven.wagon.CommandExecutor.executeCommand(Ljava/lang/String;)V
+METHOD|org.apache.maven.wagon.CommandExecutor.executeCommand(Ljava/lang/String;Z)Lorg/apache/maven/wagon/Streams;
+METHOD|org.apache.maven.wagon.CommandExecutor.<clinit>()V
+METHOD|org.apache.maven.wagon.ConnectionException.<init>(Ljava/lang/String;)V
+METHOD|org.apache.maven.wagon.ConnectionException.<init>(Ljava/lang/String;Ljava/lang/Throwable;)V
+METHOD|org.apache.maven.wagon.InputData.<init>()V
+METHOD|org.apache.maven.wagon.InputData.getInputStream()Ljava/io/InputStream;
+METHOD|org.apache.maven.wagon.InputData.setInputStream(Ljava/io/InputStream;)V
+METHOD|org.apache.maven.wagon.InputData.getResource()Lorg/apache/maven/wagon/resource/Resource;
+METHOD|org.apache.maven.wagon.InputData.setResource(Lorg/apache/maven/wagon/resource/Resource;)V
+METHOD|org.apache.maven.wagon.LazyFileOutputStream.<init>(Ljava/lang/String;)V
+METHOD|org.apache.maven.wagon.LazyFileOutputStream.<init>(Ljava/io/File;)V
+METHOD|org.apache.maven.wagon.LazyFileOutputStream.close()V
+METHOD|org.apache.maven.wagon.LazyFileOutputStream.equals(Ljava/lang/Object;)Z
+METHOD|org.apache.maven.wagon.LazyFileOutputStream.flush()V
+METHOD|org.apache.maven.wagon.LazyFileOutputStream.getChannel()Ljava/nio/channels/FileChannel;
+METHOD|org.apache.maven.wagon.LazyFileOutputStream.getFD()Ljava/io/FileDescriptor;
+METHOD|org.apache.maven.wagon.LazyFileOutputStream.hashCode()I
+METHOD|org.apache.maven.wagon.LazyFileOutputStream.toString()Ljava/lang/String;
+METHOD|org.apache.maven.wagon.LazyFileOutputStream.write([B)V
+METHOD|org.apache.maven.wagon.LazyFileOutputStream.write([BII)V
+METHOD|org.apache.maven.wagon.LazyFileOutputStream.write(I)V
+METHOD|org.apache.maven.wagon.LazyFileOutputStream.initialize()V
+METHOD|org.apache.maven.wagon.OutputData.<init>()V
+METHOD|org.apache.maven.wagon.OutputData.getOutputStream()Ljava/io/OutputStream;
+METHOD|org.apache.maven.wagon.OutputData.setOutputStream(Ljava/io/OutputStream;)V
+METHOD|org.apache.maven.wagon.OutputData.getResource()Lorg/apache/maven/wagon/resource/Resource;
+METHOD|org.apache.maven.wagon.OutputData.setResource(Lorg/apache/maven/wagon/resource/Resource;)V
+METHOD|org.apache.maven.wagon.PathUtils.<init>()V
+METHOD|org.apache.maven.wagon.PathUtils.dirname(Ljava/lang/String;)Ljava/lang/String;
+METHOD|org.apache.maven.wagon.PathUtils.filename(Ljava/lang/String;)Ljava/lang/String;
+METHOD|org.apache.maven.wagon.PathUtils.dirnames(Ljava/lang/String;)[Ljava/lang/String;
+METHOD|org.apache.maven.wagon.PathUtils.split(Ljava/lang/String;Ljava/lang/String;I)[Ljava/lang/String;
+METHOD|org.apache.maven.wagon.PathUtils.host(Ljava/lang/String;)Ljava/lang/String;
+METHOD|org.apache.maven.wagon.PathUtils.authorization(Ljava/lang/String;)Ljava/lang/String;
+METHOD|org.apache.maven.wagon.PathUtils.protocol(Ljava/lang/String;)Ljava/lang/String;
+METHOD|org.apache.maven.wagon.PathUtils.port(Ljava/lang/String;)I
+METHOD|org.apache.maven.wagon.PathUtils.basedir(Ljava/lang/String;)Ljava/lang/String;
+METHOD|org.apache.maven.wagon.PathUtils.user(Ljava/lang/String;)Ljava/lang/String;
+METHOD|org.apache.maven.wagon.PathUtils.password(Ljava/lang/String;)Ljava/lang/String;
+METHOD|org.apache.maven.wagon.PathUtils.toRelative(Ljava/io/File;Ljava/lang/String;)Ljava/lang/String;
+METHOD|org.apache.maven.wagon.PermissionModeUtils.<init>()V
+METHOD|org.apache.maven.wagon.PermissionModeUtils.getUserMaskFor(Ljava/lang/String;)Ljava/lang/String;
+METHOD|org.apache.maven.wagon.ResourceDoesNotExistException.<init>(Ljava/lang/String;)V
+METHOD|org.apache.maven.wagon.ResourceDoesNotExistException.<init>(Ljava/lang/String;Ljava/lang/Throwable;)V
+METHOD|org.apache.maven.wagon.StreamWagon.<init>()V
+METHOD|org.apache.maven.wagon.StreamWagon.fillInputData(Lorg/apache/maven/wagon/InputData;)V
+METHOD|org.apache.maven.wagon.StreamWagon.fillOutputData(Lorg/apache/maven/wagon/OutputData;)V
+METHOD|org.apache.maven.wagon.StreamWagon.openConnection()V
+METHOD|org.apache.maven.wagon.StreamWagon.closeConnection()V
+METHOD|org.apache.maven.wagon.StreamWagon.get(Ljava/lang/String;Ljava/io/File;)V
+METHOD|org.apache.maven.wagon.StreamWagon.getIfNewer(Ljava/lang/String;Ljava/io/File;J)Z
+METHOD|org.apache.maven.wagon.StreamWagon.put(Ljava/io/File;Ljava/lang/String;)V
+METHOD|org.apache.maven.wagon.Streams.<init>()V
+METHOD|org.apache.maven.wagon.Streams.getOut()Ljava/lang/String;
+METHOD|org.apache.maven.wagon.Streams.setOut(Ljava/lang/String;)V
+METHOD|org.apache.maven.wagon.Streams.getErr()Ljava/lang/String;
+METHOD|org.apache.maven.wagon.Streams.setErr(Ljava/lang/String;)V
+METHOD|org.apache.maven.wagon.TransferFailedException.<init>(Ljava/lang/String;)V
+METHOD|org.apache.maven.wagon.TransferFailedException.<init>(Ljava/lang/String;Ljava/lang/Throwable;)V
+METHOD|org.apache.maven.wagon.UnsupportedProtocolException.<init>(Ljava/lang/String;)V
+METHOD|org.apache.maven.wagon.UnsupportedProtocolException.<init>(Ljava/lang/String;Ljava/lang/Throwable;)V
+METHOD|org.apache.maven.wagon.Wagon$1.class$(Ljava/lang/String;)Ljava/lang/Class;
+METHOD|org.apache.maven.wagon.Wagon.get(Ljava/lang/String;Ljava/io/File;)V
+METHOD|org.apache.maven.wagon.Wagon.getIfNewer(Ljava/lang/String;Ljava/io/File;J)Z
+METHOD|org.apache.maven.wagon.Wagon.put(Ljava/io/File;Ljava/lang/String;)V
+METHOD|org.apache.maven.wagon.Wagon.putDirectory(Ljava/io/File;Ljava/lang/String;)V
+METHOD|org.apache.maven.wagon.Wagon.resourceExists(Ljava/lang/String;)Z
+METHOD|org.apache.maven.wagon.Wagon.getFileList(Ljava/lang/String;)Ljava/util/List;
+METHOD|org.apache.maven.wagon.Wagon.getProtocol()Ljava/lang/String;
+METHOD|org.apache.maven.wagon.Wagon.supportsDirectoryCopy()Z
+METHOD|org.apache.maven.wagon.Wagon.isInteractive()Z
+METHOD|org.apache.maven.wagon.Wagon.setInteractive(Z)V
+METHOD|org.apache.maven.wagon.Wagon.getRepository()Lorg/apache/maven/wagon/repository/Repository;
+METHOD|org.apache.maven.wagon.Wagon.setRepository(Lorg/apache/maven/wagon/repository/Repository;)V
+METHOD|org.apache.maven.wagon.Wagon.getAuthenticationInfo()Lorg/apache/maven/wagon/authentication/AuthenticationInfo;
+METHOD|org.apache.maven.wagon.Wagon.setAuthenticationInfo(Lorg/apache/maven/wagon/authentication/AuthenticationInfo;)V
+METHOD|org.apache.maven.wagon.Wagon.getProxyInfo()Lorg/apache/maven/wagon/proxy/ProxyInfo;
+METHOD|org.apache.maven.wagon.Wagon.setProxyInfo(Lorg/apache/maven/wagon/proxy/ProxyInfo;)V
+METHOD|org.apache.maven.wagon.Wagon.connect()V
+METHOD|org.apache.maven.wagon.Wagon.isConnected()Z
+METHOD|org.apache.maven.wagon.Wagon.connect(Lorg/apache/maven/wagon/repository/Repository;)V
+METHOD|org.apache.maven.wagon.Wagon.connect(Lorg/apache/maven/wagon/repository/Repository;Lorg/apache/maven/wagon/proxy/ProxyInfo;)V
+METHOD|org.apache.maven.wagon.Wagon.connect(Lorg/apache/maven/wagon/repository/Repository;Lorg/apache/maven/wagon/authentication/AuthenticationInfo;)V
+METHOD|org.apache.maven.wagon.Wagon.connect(Lorg/apache/maven/wagon/repository/Repository;Lorg/apache/maven/wagon/authentication/AuthenticationInfo;Lorg/apache/maven/wagon/proxy/ProxyInfo;)V
+METHOD|org.apache.maven.wagon.Wagon.disconnect()V
+METHOD|org.apache.maven.wagon.Wagon.addSessionListener(Lorg/apache/maven/wagon/events/SessionListener;)V
+METHOD|org.apache.maven.wagon.Wagon.removeSessionListener(Lorg/apache/maven/wagon/events/SessionListener;)V
+METHOD|org.apache.maven.wagon.Wagon.hasSessionListener(Lorg/apache/maven/wagon/events/SessionListener;)Z
+METHOD|org.apache.maven.wagon.Wagon.addTransferListener(Lorg/apache/maven/wagon/events/TransferListener;)V
+METHOD|org.apache.maven.wagon.Wagon.removeTransferListener(Lorg/apache/maven/wagon/events/TransferListener;)V
+METHOD|org.apache.maven.wagon.Wagon.hasTransferListener(Lorg/apache/maven/wagon/events/TransferListener;)Z
+METHOD|org.apache.maven.wagon.Wagon.<clinit>()V
+METHOD|org.apache.maven.wagon.WagonConstants.<init>()V
+METHOD|org.apache.maven.wagon.WagonException.<init>(Ljava/lang/String;Ljava/lang/Throwable;)V
+METHOD|org.apache.maven.wagon.WagonException.<init>(Ljava/lang/String;)V
+METHOD|org.apache.maven.wagon.WagonException.getCause()Ljava/lang/Throwable;
+METHOD|org.apache.maven.wagon.WagonException.initCause(Ljava/lang/Throwable;)Ljava/lang/Throwable;
+METHOD|org.apache.maven.wagon.WagonUtils.<init>()V
+METHOD|org.apache.maven.wagon.WagonUtils.toString(Ljava/lang/String;Lorg/apache/maven/wagon/Wagon;)Ljava/lang/String;
+METHOD|org.apache.maven.wagon.WagonUtils.putDirectory(Ljava/io/File;Lorg/apache/maven/wagon/Wagon;Z)V
+METHOD|org.apache.maven.wagon.WagonUtils.getAuthInfo()Lorg/apache/maven/wagon/authentication/AuthenticationInfo;
+METHOD|org.apache.maven.wagon.WagonUtils.getUserGroup()Ljava/lang/String;
+METHOD|org.apache.maven.wagon.WagonUtils.getUserName()Ljava/lang/String;
+METHOD|org.apache.maven.wagon.authentication.AuthenticationException.<init>(Ljava/lang/String;)V
+METHOD|org.apache.maven.wagon.authentication.AuthenticationException.<init>(Ljava/lang/String;Ljava/lang/Throwable;)V
+METHOD|org.apache.maven.wagon.authentication.AuthenticationInfo.<init>()V
+METHOD|org.apache.maven.wagon.authentication.AuthenticationInfo.getPassphrase()Ljava/lang/String;
+METHOD|org.apache.maven.wagon.authentication.AuthenticationInfo.setPassphrase(Ljava/lang/String;)V
+METHOD|org.apache.maven.wagon.authentication.AuthenticationInfo.getPrivateKey()Ljava/lang/String;
+METHOD|org.apache.maven.wagon.authentication.AuthenticationInfo.setPrivateKey(Ljava/lang/String;)V
+METHOD|org.apache.maven.wagon.authentication.AuthenticationInfo.getPassword()Ljava/lang/String;
+METHOD|org.apache.maven.wagon.authentication.AuthenticationInfo.setPassword(Ljava/lang/String;)V
+METHOD|org.apache.maven.wagon.authentication.AuthenticationInfo.getUserName()Ljava/lang/String;
+METHOD|org.apache.maven.wagon.authentication.AuthenticationInfo.setUserName(Ljava/lang/String;)V
+METHOD|org.apache.maven.wagon.authorization.AuthorizationException.<init>(Ljava/lang/String;)V
+METHOD|org.apache.maven.wagon.authorization.AuthorizationException.<init>(Ljava/lang/String;Ljava/lang/Throwable;)V
+METHOD|org.apache.maven.wagon.events.SessionEvent.<init>(Lorg/apache/maven/wagon/Wagon;Lorg/apache/maven/wagon/repository/Repository;I)V
+METHOD|org.apache.maven.wagon.events.SessionEvent.<init>(Lorg/apache/maven/wagon/Wagon;Lorg/apache/maven/wagon/repository/Repository;Ljava/lang/Exception;)V
+METHOD|org.apache.maven.wagon.events.SessionEvent.getEventType()I
+METHOD|org.apache.maven.wagon.events.SessionEvent.getException()Ljava/lang/Exception;
+METHOD|org.apache.maven.wagon.events.SessionEvent.setEventType(I)V
+METHOD|org.apache.maven.wagon.events.SessionEvent.setException(Ljava/lang/Exception;)V
+METHOD|org.apache.maven.wagon.events.SessionEvent.toString()Ljava/lang/String;
+METHOD|org.apache.maven.wagon.events.SessionEventSupport.<init>()V
+METHOD|org.apache.maven.wagon.events.SessionEventSupport.addSessionListener(Lorg/apache/maven/wagon/events/SessionListener;)V
+METHOD|org.apache.maven.wagon.events.SessionEventSupport.removeSessionListener(Lorg/apache/maven/wagon/events/SessionListener;)V
+METHOD|org.apache.maven.wagon.events.SessionEventSupport.hasSessionListener(Lorg/apache/maven/wagon/events/SessionListener;)Z
+METHOD|org.apache.maven.wagon.events.SessionEventSupport.fireSessionDisconnected(Lorg/apache/maven/wagon/events/SessionEvent;)V
+METHOD|org.apache.maven.wagon.events.SessionEventSupport.fireSessionDisconnecting(Lorg/apache/maven/wagon/events/SessionEvent;)V
+METHOD|org.apache.maven.wagon.events.SessionEventSupport.fireSessionLoggedIn(Lorg/apache/maven/wagon/events/SessionEvent;)V
+METHOD|org.apache.maven.wagon.events.SessionEventSupport.fireSessionLoggedOff(Lorg/apache/maven/wagon/events/SessionEvent;)V
+METHOD|org.apache.maven.wagon.events.SessionEventSupport.fireSessionOpened(Lorg/apache/maven/wagon/events/SessionEvent;)V
+METHOD|org.apache.maven.wagon.events.SessionEventSupport.fireSessionOpening(Lorg/apache/maven/wagon/events/SessionEvent;)V
+METHOD|org.apache.maven.wagon.events.SessionEventSupport.fireSessionConnectionRefused(Lorg/apache/maven/wagon/events/SessionEvent;)V
+METHOD|org.apache.maven.wagon.events.SessionEventSupport.fireDebug(Ljava/lang/String;)V
+METHOD|org.apache.maven.wagon.events.SessionEventSupport.fireSessionError(Lorg/apache/maven/wagon/events/SessionEvent;)V
+METHOD|org.apache.maven.wagon.events.SessionListener.sessionOpening(Lorg/apache/maven/wagon/events/SessionEvent;)V
+METHOD|org.apache.maven.wagon.events.SessionListener.sessionOpened(Lorg/apache/maven/wagon/events/SessionEvent;)V
+METHOD|org.apache.maven.wagon.events.SessionListener.sessionDisconnecting(Lorg/apache/maven/wagon/events/SessionEvent;)V
+METHOD|org.apache.maven.wagon.events.SessionListener.sessionDisconnected(Lorg/apache/maven/wagon/events/SessionEvent;)V
+METHOD|org.apache.maven.wagon.events.SessionListener.sessionConnectionRefused(Lorg/apache/maven/wagon/events/SessionEvent;)V
+METHOD|org.apache.maven.wagon.events.SessionListener.sessionLoggedIn(Lorg/apache/maven/wagon/events/SessionEvent;)V
+METHOD|org.apache.maven.wagon.events.SessionListener.sessionLoggedOff(Lorg/apache/maven/wagon/events/SessionEvent;)V
+METHOD|org.apache.maven.wagon.events.SessionListener.sessionError(Lorg/apache/maven/wagon/events/SessionEvent;)V
+METHOD|org.apache.maven.wagon.events.SessionListener.debug(Ljava/lang/String;)V
+METHOD|org.apache.maven.wagon.events.TransferEvent.<init>(Lorg/apache/maven/wagon/Wagon;Lorg/apache/maven/wagon/repository/Repository;Lorg/apache/maven/wagon/resource/Resource;Ljava/lang/Exception;I)V
+METHOD|org.apache.maven.wagon.events.TransferEvent.<init>(Lorg/apache/maven/wagon/Wagon;Lorg/apache/maven/wagon/repository/Repository;Lorg/apache/maven/wagon/resource/Resource;II)V
+METHOD|org.apache.maven.wagon.events.TransferEvent.getResource()Lorg/apache/maven/wagon/resource/Resource;
+METHOD|org.apache.maven.wagon.events.TransferEvent.getException()Ljava/lang/Exception;
+METHOD|org.apache.maven.wagon.events.TransferEvent.getRequestType()I
+METHOD|org.apache.maven.wagon.events.TransferEvent.setRequestType(I)V
+METHOD|org.apache.maven.wagon.events.TransferEvent.getEventType()I
+METHOD|org.apache.maven.wagon.events.TransferEvent.setEventType(I)V
+METHOD|org.apache.maven.wagon.events.TransferEvent.setResource(Lorg/apache/maven/wagon/resource/Resource;)V
+METHOD|org.apache.maven.wagon.events.TransferEvent.getLocalFile()Ljava/io/File;
+METHOD|org.apache.maven.wagon.events.TransferEvent.setLocalFile(Ljava/io/File;)V
+METHOD|org.apache.maven.wagon.events.TransferEvent.toString()Ljava/lang/String;
+METHOD|org.apache.maven.wagon.events.TransferEventSupport.<init>()V
+METHOD|org.apache.maven.wagon.events.TransferEventSupport.addTransferListener(Lorg/apache/maven/wagon/events/TransferListener;)V
+METHOD|org.apache.maven.wagon.events.TransferEventSupport.removeTransferListener(Lorg/apache/maven/wagon/events/TransferListener;)V
+METHOD|org.apache.maven.wagon.events.TransferEventSupport.hasTransferListener(Lorg/apache/maven/wagon/events/TransferListener;)Z
+METHOD|org.apache.maven.wagon.events.TransferEventSupport.fireTransferStarted(Lorg/apache/maven/wagon/events/TransferEvent;)V
+METHOD|org.apache.maven.wagon.events.TransferEventSupport.fireTransferProgress(Lorg/apache/maven/wagon/events/TransferEvent;[BI)V
+METHOD|org.apache.maven.wagon.events.TransferEventSupport.fireTransferCompleted(Lorg/apache/maven/wagon/events/TransferEvent;)V
+METHOD|org.apache.maven.wagon.events.TransferEventSupport.fireTransferError(Lorg/apache/maven/wagon/events/TransferEvent;)V
+METHOD|org.apache.maven.wagon.events.TransferEventSupport.fireDebug(Ljava/lang/String;)V
+METHOD|org.apache.maven.wagon.events.TransferEventSupport.fireTransferInitiated(Lorg/apache/maven/wagon/events/TransferEvent;)V
+METHOD|org.apache.maven.wagon.events.TransferListener.transferInitiated(Lorg/apache/maven/wagon/events/TransferEvent;)V
+METHOD|org.apache.maven.wagon.events.TransferListener.transferStarted(Lorg/apache/maven/wagon/events/TransferEvent;)V
+METHOD|org.apache.maven.wagon.events.TransferListener.transferProgress(Lorg/apache/maven/wagon/events/TransferEvent;[BI)V
+METHOD|org.apache.maven.wagon.events.TransferListener.transferCompleted(Lorg/apache/maven/wagon/events/TransferEvent;)V
+METHOD|org.apache.maven.wagon.events.TransferListener.transferError(Lorg/apache/maven/wagon/events/TransferEvent;)V
+METHOD|org.apache.maven.wagon.events.TransferListener.debug(Ljava/lang/String;)V
+METHOD|org.apache.maven.wagon.events.WagonEvent.<init>(Lorg/apache/maven/wagon/Wagon;Lorg/apache/maven/wagon/repository/Repository;)V
+METHOD|org.apache.maven.wagon.events.WagonEvent.getWagon()Lorg/apache/maven/wagon/Wagon;
+METHOD|org.apache.maven.wagon.events.WagonEvent.getTimestamp()J
+METHOD|org.apache.maven.wagon.events.WagonEvent.setTimestamp(J)V
+METHOD|org.apache.maven.wagon.events.WagonEvent.getRepository()Lorg/apache/maven/wagon/repository/Repository;
+METHOD|org.apache.maven.wagon.observers.AbstractTransferListener.<init>()V
+METHOD|org.apache.maven.wagon.observers.AbstractTransferListener.transferInitiated(Lorg/apache/maven/wagon/events/TransferEvent;)V
+METHOD|org.apache.maven.wagon.observers.AbstractTransferListener.transferStarted(Lorg/apache/maven/wagon/events/TransferEvent;)V
+METHOD|org.apache.maven.wagon.observers.AbstractTransferListener.transferProgress(Lorg/apache/maven/wagon/events/TransferEvent;[BI)V
+METHOD|org.apache.maven.wagon.observers.AbstractTransferListener.transferCompleted(Lorg/apache/maven/wagon/events/TransferEvent;)V
+METHOD|org.apache.maven.wagon.observers.AbstractTransferListener.transferError(Lorg/apache/maven/wagon/events/TransferEvent;)V
+METHOD|org.apache.maven.wagon.observers.AbstractTransferListener.debug(Ljava/lang/String;)V
+METHOD|org.apache.maven.wagon.observers.ChecksumObserver.<init>()V
+METHOD|org.apache.maven.wagon.observers.ChecksumObserver.<init>(Ljava/lang/String;)V
+METHOD|org.apache.maven.wagon.observers.ChecksumObserver.transferInitiated(Lorg/apache/maven/wagon/events/TransferEvent;)V
+METHOD|org.apache.maven.wagon.observers.ChecksumObserver.transferStarted(Lorg/apache/maven/wagon/events/TransferEvent;)V
+METHOD|org.apache.maven.wagon.observers.ChecksumObserver.transferProgress(Lorg/apache/maven/wagon/events/TransferEvent;[BI)V
+METHOD|org.apache.maven.wagon.observers.ChecksumObserver.transferCompleted(Lorg/apache/maven/wagon/events/TransferEvent;)V
+METHOD|org.apache.maven.wagon.observers.ChecksumObserver.transferError(Lorg/apache/maven/wagon/events/TransferEvent;)V
+METHOD|org.apache.maven.wagon.observers.ChecksumObserver.debug(Ljava/lang/String;)V
+METHOD|org.apache.maven.wagon.observers.ChecksumObserver.getActualChecksum()Ljava/lang/String;
+METHOD|org.apache.maven.wagon.observers.ChecksumObserver.encode([B)Ljava/lang/String;
+METHOD|org.apache.maven.wagon.observers.Debug.<init>()V
+METHOD|org.apache.maven.wagon.observers.Debug.<init>(Ljava/io/PrintStream;)V
+METHOD|org.apache.maven.wagon.observers.Debug.sessionOpening(Lorg/apache/maven/wagon/events/SessionEvent;)V
+METHOD|org.apache.maven.wagon.observers.Debug.sessionOpened(Lorg/apache/maven/wagon/events/SessionEvent;)V
+METHOD|org.apache.maven.wagon.observers.Debug.sessionDisconnecting(Lorg/apache/maven/wagon/events/SessionEvent;)V
+METHOD|org.apache.maven.wagon.observers.Debug.sessionDisconnected(Lorg/apache/maven/wagon/events/SessionEvent;)V
+METHOD|org.apache.maven.wagon.observers.Debug.sessionConnectionRefused(Lorg/apache/maven/wagon/events/SessionEvent;)V
+METHOD|org.apache.maven.wagon.observers.Debug.sessionLoggedIn(Lorg/apache/maven/wagon/events/SessionEvent;)V
+METHOD|org.apache.maven.wagon.observers.Debug.sessionLoggedOff(Lorg/apache/maven/wagon/events/SessionEvent;)V
+METHOD|org.apache.maven.wagon.observers.Debug.debug(Ljava/lang/String;)V
+METHOD|org.apache.maven.wagon.observers.Debug.transferInitiated(Lorg/apache/maven/wagon/events/TransferEvent;)V
+METHOD|org.apache.maven.wagon.observers.Debug.transferStarted(Lorg/apache/maven/wagon/events/TransferEvent;)V
+METHOD|org.apache.maven.wagon.observers.Debug.transferProgress(Lorg/apache/maven/wagon/events/TransferEvent;[BI)V
+METHOD|org.apache.maven.wagon.observers.Debug.transferCompleted(Lorg/apache/maven/wagon/events/TransferEvent;)V
+METHOD|org.apache.maven.wagon.observers.Debug.transferError(Lorg/apache/maven/wagon/events/TransferEvent;)V
+METHOD|org.apache.maven.wagon.observers.Debug.sessionError(Lorg/apache/maven/wagon/events/SessionEvent;)V
+METHOD|org.apache.maven.wagon.proxy.ProxyInfo.<init>()V
+METHOD|org.apache.maven.wagon.proxy.ProxyInfo.getHost()Ljava/lang/String;
+METHOD|org.apache.maven.wagon.proxy.ProxyInfo.setHost(Ljava/lang/String;)V
+METHOD|org.apache.maven.wagon.proxy.ProxyInfo.getPassword()Ljava/lang/String;
+METHOD|org.apache.maven.wagon.proxy.ProxyInfo.setPassword(Ljava/lang/String;)V
+METHOD|org.apache.maven.wagon.proxy.ProxyInfo.getPort()I
+METHOD|org.apache.maven.wagon.proxy.ProxyInfo.setPort(I)V
+METHOD|org.apache.maven.wagon.proxy.ProxyInfo.getUserName()Ljava/lang/String;
+METHOD|org.apache.maven.wagon.proxy.ProxyInfo.setUserName(Ljava/lang/String;)V
+METHOD|org.apache.maven.wagon.proxy.ProxyInfo.getType()Ljava/lang/String;
+METHOD|org.apache.maven.wagon.proxy.ProxyInfo.setType(Ljava/lang/String;)V
+METHOD|org.apache.maven.wagon.proxy.ProxyInfo.getNonProxyHosts()Ljava/lang/String;
+METHOD|org.apache.maven.wagon.proxy.ProxyInfo.setNonProxyHosts(Ljava/lang/String;)V
+METHOD|org.apache.maven.wagon.proxy.ProxyInfo.getNtlmHost()Ljava/lang/String;
+METHOD|org.apache.maven.wagon.proxy.ProxyInfo.setNtlmHost(Ljava/lang/String;)V
+METHOD|org.apache.maven.wagon.proxy.ProxyInfo.setNtlmDomain(Ljava/lang/String;)V
+METHOD|org.apache.maven.wagon.proxy.ProxyInfo.getNtlmDomain()Ljava/lang/String;
+METHOD|org.apache.maven.wagon.repository.Repository.<init>()V
+METHOD|org.apache.maven.wagon.repository.Repository.<init>(Ljava/lang/String;Ljava/lang/String;)V
+METHOD|org.apache.maven.wagon.repository.Repository.getId()Ljava/lang/String;
+METHOD|org.apache.maven.wagon.repository.Repository.setId(Ljava/lang/String;)V
+METHOD|org.apache.maven.wagon.repository.Repository.getBasedir()Ljava/lang/String;
+METHOD|org.apache.maven.wagon.repository.Repository.setBasedir(Ljava/lang/String;)V
+METHOD|org.apache.maven.wagon.repository.Repository.setName(Ljava/lang/String;)V
+METHOD|org.apache.maven.wagon.repository.Repository.getPort()I
+METHOD|org.apache.maven.wagon.repository.Repository.setPort(I)V
+METHOD|org.apache.maven.wagon.repository.Repository.setUrl(Ljava/lang/String;)V
+METHOD|org.apache.maven.wagon.repository.Repository.getUrl()Ljava/lang/String;
+METHOD|org.apache.maven.wagon.repository.Repository.getHost()Ljava/lang/String;
+METHOD|org.apache.maven.wagon.repository.Repository.getName()Ljava/lang/String;
+METHOD|org.apache.maven.wagon.repository.Repository.toString()Ljava/lang/String;
+METHOD|org.apache.maven.wagon.repository.Repository.getProtocol()Ljava/lang/String;
+METHOD|org.apache.maven.wagon.repository.Repository.getPermissions()Lorg/apache/maven/wagon/repository/RepositoryPermissions;
+METHOD|org.apache.maven.wagon.repository.Repository.setPermissions(Lorg/apache/maven/wagon/repository/RepositoryPermissions;)V
+METHOD|org.apache.maven.wagon.repository.Repository.getParameter(Ljava/lang/String;)Ljava/lang/String;
+METHOD|org.apache.maven.wagon.repository.Repository.setParameters(Ljava/util/Properties;)V
+METHOD|org.apache.maven.wagon.repository.Repository.equals(Ljava/lang/Object;)Z
+METHOD|org.apache.maven.wagon.repository.Repository.hashCode()I
+METHOD|org.apache.maven.wagon.repository.Repository.getUsername()Ljava/lang/String;
+METHOD|org.apache.maven.wagon.repository.Repository.getPassword()Ljava/lang/String;
+METHOD|org.apache.maven.wagon.repository.Repository.setProtocol(Ljava/lang/String;)V
+METHOD|org.apache.maven.wagon.repository.RepositoryPermissions.<init>()V
+METHOD|org.apache.maven.wagon.repository.RepositoryPermissions.getDirectoryMode()Ljava/lang/String;
+METHOD|org.apache.maven.wagon.repository.RepositoryPermissions.setDirectoryMode(Ljava/lang/String;)V
+METHOD|org.apache.maven.wagon.repository.RepositoryPermissions.getFileMode()Ljava/lang/String;
+METHOD|org.apache.maven.wagon.repository.RepositoryPermissions.setFileMode(Ljava/lang/String;)V
+METHOD|org.apache.maven.wagon.repository.RepositoryPermissions.getGroup()Ljava/lang/String;
+METHOD|org.apache.maven.wagon.repository.RepositoryPermissions.setGroup(Ljava/lang/String;)V
+METHOD|org.apache.maven.wagon.resource.Resource.<init>()V
+METHOD|org.apache.maven.wagon.resource.Resource.<init>(Ljava/lang/String;)V
+METHOD|org.apache.maven.wagon.resource.Resource.getName()Ljava/lang/String;
+METHOD|org.apache.maven.wagon.resource.Resource.setName(Ljava/lang/String;)V
+METHOD|org.apache.maven.wagon.resource.Resource.getLastModified()J
+METHOD|org.apache.maven.wagon.resource.Resource.setLastModified(J)V
+METHOD|org.apache.maven.wagon.resource.Resource.getContentLength()J
+METHOD|org.apache.maven.wagon.resource.Resource.setContentLength(J)V
+METHOD|org.apache.maven.wagon.resource.Resource.toString()Ljava/lang/String;
+FILE|META-INF/
+FILE|META-INF/MANIFEST.MF
+FILE|META-INF/maven/
+FILE|META-INF/maven/org.apache.maven.wagon/
+FILE|META-INF/maven/org.apache.maven.wagon/wagon-provider-api/
+FILE|META-INF/maven/org.apache.maven.wagon/wagon-provider-api/pom.properties
+FILE|META-INF/maven/org.apache.maven.wagon/wagon-provider-api/pom.xml
+FILE|org/
+FILE|org/apache/
+FILE|org/apache/maven/
+FILE|org/apache/maven/wagon/
+FILE|org/apache/maven/wagon/AbstractWagon.class
+FILE|org/apache/maven/wagon/CommandExecutionException.class
+FILE|org/apache/maven/wagon/CommandExecutor$1.class
+FILE|org/apache/maven/wagon/CommandExecutor.class
+FILE|org/apache/maven/wagon/ConnectionException.class
+FILE|org/apache/maven/wagon/InputData.class
+FILE|org/apache/maven/wagon/LazyFileOutputStream.class
+FILE|org/apache/maven/wagon/OutputData.class
+FILE|org/apache/maven/wagon/PathUtils.class
+FILE|org/apache/maven/wagon/PermissionModeUtils.class
+FILE|org/apache/maven/wagon/ResourceDoesNotExistException.class
+FILE|org/apache/maven/wagon/StreamWagon.class
+FILE|org/apache/maven/wagon/Streams.class
+FILE|org/apache/maven/wagon/TransferFailedException.class
+FILE|org/apache/maven/wagon/UnsupportedProtocolException.class
+FILE|org/apache/maven/wagon/Wagon$1.class
+FILE|org/apache/maven/wagon/Wagon.class
+FILE|org/apache/maven/wagon/WagonConstants.class
+FILE|org/apache/maven/wagon/WagonException.class
+FILE|org/apache/maven/wagon/WagonUtils.class
+FILE|org/apache/maven/wagon/authentication/
+FILE|org/apache/maven/wagon/authentication/AuthenticationException.class
+FILE|org/apache/maven/wagon/authentication/AuthenticationInfo.class
+FILE|org/apache/maven/wagon/authorization/
+FILE|org/apache/maven/wagon/authorization/AuthorizationException.class
+FILE|org/apache/maven/wagon/events/
+FILE|org/apache/maven/wagon/events/SessionEvent.class
+FILE|org/apache/maven/wagon/events/SessionEventSupport.class
+FILE|org/apache/maven/wagon/events/SessionListener.class
+FILE|org/apache/maven/wagon/events/TransferEvent.class
+FILE|org/apache/maven/wagon/events/TransferEventSupport.class
+FILE|org/apache/maven/wagon/events/TransferListener.class
+FILE|org/apache/maven/wagon/events/WagonEvent.class
+FILE|org/apache/maven/wagon/observers/
+FILE|org/apache/maven/wagon/observers/AbstractTransferListener.class
+FILE|org/apache/maven/wagon/observers/ChecksumObserver.class
+FILE|org/apache/maven/wagon/observers/Debug.class
+FILE|org/apache/maven/wagon/proxy/
+FILE|org/apache/maven/wagon/proxy/ProxyInfo.class
+FILE|org/apache/maven/wagon/repository/
+FILE|org/apache/maven/wagon/repository/Repository.class
+FILE|org/apache/maven/wagon/repository/RepositoryPermissions.class
+FILE|org/apache/maven/wagon/resource/
+FILE|org/apache/maven/wagon/resource/Resource.class
diff --git a/archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/AbstractIndexCreationTestCase.java b/archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/AbstractIndexCreationTestCase.java
new file mode 100644
index 000000000..ce2434eef
--- /dev/null
+++ b/archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/AbstractIndexCreationTestCase.java
@@ -0,0 +1,188 @@
+package org.apache.maven.archiva.indexer;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.io.FileUtils;
+import org.apache.lucene.document.Document;
+import org.apache.lucene.index.IndexReader;
+import org.apache.maven.archiva.indexer.lucene.LuceneRepositoryContentRecord;
+
+import java.io.File;
+import java.io.IOException;
+import java.text.ParseException;
+import java.util.Collections;
+
+/**
+ * AbstractIndexCreationTestCase
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public abstract class AbstractIndexCreationTestCase extends AbstractIndexerTestCase
+{
+ protected abstract LuceneRepositoryContentRecord createSimpleRecord();
+
+ public void testIndexExists() throws Exception
+ {
+ assertFalse( "check index doesn't exist", index.exists() );
+
+ File indexLocation = index.getIndexDirectory();
+
+ // create empty directory
+ indexLocation.mkdirs();
+ assertFalse( "check index doesn't exist even if directory does", index.exists() );
+
+ // create index, with no records
+ createEmptyIndex();
+ assertTrue( "check index is considered to exist", index.exists() );
+
+ // Test non-directory
+ FileUtils.deleteDirectory( indexLocation );
+ indexLocation.createNewFile();
+ try
+ {
+ index.exists();
+ fail( "Index operation should fail as the location is not valid" );
+ }
+ catch ( RepositoryIndexException e )
+ {
+ // great
+ }
+ finally
+ {
+ indexLocation.delete();
+ }
+ }
+
+ public void testAddRecordNoIndex() throws IOException, RepositoryIndexException, ParseException
+ {
+ LuceneRepositoryContentRecord record = createSimpleRecord();
+
+ index.indexRecords( Collections.singletonList( record ) );
+
+ IndexReader reader = IndexReader.open( index.getIndexDirectory() );
+ try
+ {
+ Document document = reader.document( 0 );
+ assertRecord( record, document );
+ assertEquals( "Check index size", 1, reader.numDocs() );
+ }
+ finally
+ {
+ reader.close();
+ }
+ }
+
+ public void testAddRecordExistingEmptyIndex() throws IOException, RepositoryIndexException, ParseException
+ {
+ createEmptyIndex();
+
+ LuceneRepositoryContentRecord record = createSimpleRecord();
+
+ index.indexRecords( Collections.singletonList( record ) );
+
+ IndexReader reader = IndexReader.open( index.getIndexDirectory() );
+ try
+ {
+ Document document = reader.document( 0 );
+ assertRecord( record, document );
+ assertEquals( "Check index size", 1, reader.numDocs() );
+ }
+ finally
+ {
+ reader.close();
+ }
+ }
+
+ public void testAddRecordInIndex() throws IOException, RepositoryIndexException, ParseException
+ {
+ createEmptyIndex();
+
+ LuceneRepositoryContentRecord record = createSimpleRecord();
+
+ index.indexRecords( Collections.singletonList( record ) );
+
+ // Do it again
+ record = createSimpleRecord();
+
+ index.indexRecords( Collections.singletonList( record ) );
+
+ IndexReader reader = IndexReader.open( index.getIndexDirectory() );
+ try
+ {
+ Document document = reader.document( 0 );
+ assertRecord( record, document );
+ assertEquals( "Check index size", 1, reader.numDocs() );
+ }
+ finally
+ {
+ reader.close();
+ }
+ }
+
+ public void testDeleteRecordInIndex() throws IOException, RepositoryIndexException
+ {
+ createEmptyIndex();
+
+ LuceneRepositoryContentRecord record = createSimpleRecord();
+
+ index.indexRecords( Collections.singletonList( record ) );
+
+ index.deleteRecords( Collections.singletonList( record ) );
+
+ IndexReader reader = IndexReader.open( index.getIndexDirectory() );
+ try
+ {
+ assertEquals( "No documents", 0, reader.numDocs() );
+ }
+ finally
+ {
+ reader.close();
+ }
+ }
+
+ public void testDeleteRecordNotInIndex() throws IOException, RepositoryIndexException
+ {
+ createEmptyIndex();
+
+ LuceneRepositoryContentRecord record = createSimpleRecord();
+
+ index.deleteRecords( Collections.singletonList( record ) );
+
+ IndexReader reader = IndexReader.open( index.getIndexDirectory() );
+ try
+ {
+ assertEquals( "No documents", 0, reader.numDocs() );
+ }
+ finally
+ {
+ reader.close();
+ }
+ }
+
+ public void testDeleteRecordNoIndex() throws IOException, RepositoryIndexException
+ {
+ LuceneRepositoryContentRecord record = createSimpleRecord();
+
+ index.deleteRecords( Collections.singleton( record ) );
+
+ assertFalse( index.exists() );
+ }
+}
diff --git a/archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/AbstractIndexerTestCase.java b/archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/AbstractIndexerTestCase.java
new file mode 100644
index 000000000..709f544fe
--- /dev/null
+++ b/archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/AbstractIndexerTestCase.java
@@ -0,0 +1,208 @@
+package org.apache.maven.archiva.indexer;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.lang.StringUtils;
+import org.apache.lucene.document.Document;
+import org.apache.lucene.index.IndexWriter;
+import org.apache.maven.archiva.configuration.ArchivaConfiguration;
+import org.apache.maven.archiva.configuration.RepositoryConfiguration;
+import org.apache.maven.archiva.indexer.lucene.LuceneIndexHandlers;
+import org.apache.maven.archiva.indexer.lucene.LuceneRepositoryContentRecord;
+import org.apache.maven.archiva.model.ArchivaArtifact;
+import org.apache.maven.archiva.model.ArchivaRepository;
+import org.codehaus.plexus.PlexusTestCase;
+import org.codehaus.plexus.util.FileUtils;
+
+import java.io.File;
+import java.io.IOException;
+import java.text.ParseException;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * AbstractIndexerTestCase
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public abstract class AbstractIndexerTestCase extends PlexusTestCase
+{
+ protected RepositoryContentIndex index;
+
+ protected LuceneIndexHandlers indexHandlers;
+
+ public abstract String getIndexName();
+
+ protected void assertRecord( LuceneRepositoryContentRecord expectedRecord, Document luceneDocument )
+ throws ParseException
+ {
+ LuceneRepositoryContentRecord actualRecord = indexHandlers.getConverter().convert( luceneDocument );
+ assertRecord( expectedRecord, actualRecord );
+ }
+
+ protected void assertRecord( LuceneRepositoryContentRecord expectedRecord,
+ LuceneRepositoryContentRecord actualRecord )
+ {
+ assertEquals( expectedRecord, actualRecord );
+ }
+
+ public abstract RepositoryContentIndex createIndex( RepositoryContentIndexFactory indexFactory,
+ ArchivaRepository repository );
+
+ public abstract LuceneIndexHandlers getIndexHandler();
+
+ protected void setUp() throws Exception
+ {
+ super.setUp();
+
+ RepositoryContentIndexFactory indexFactory =
+ (RepositoryContentIndexFactory) lookup( RepositoryContentIndexFactory.class.getName(), "lucene" );
+
+ File repoDir = new File( getBasedir(), "src/test/managed-repository" );
+
+ assertTrue( "Default Test Repository should exist.", repoDir.exists() && repoDir.isDirectory() );
+
+ String repoUri = "file://" + StringUtils.replace( repoDir.getAbsolutePath(), "\\", "/" );
+
+ ArchivaRepository repository = new ArchivaRepository( "testDefaultRepo", "Test Default Repository", repoUri );
+
+ File indexLocation = new File( "target/index-" + getIndexName() + "-" + getName() + "/" );
+
+ MockConfiguration config = (MockConfiguration) lookup( ArchivaConfiguration.class.getName(), "mock" );
+
+ RepositoryConfiguration repoConfig = new RepositoryConfiguration();
+ repoConfig.setId( repository.getId() );
+ repoConfig.setName( repository.getModel().getName() );
+ repoConfig.setUrl( repository.getModel().getUrl() );
+ repoConfig.setIndexDir( indexLocation.getAbsolutePath() );
+
+ if ( indexLocation.exists() )
+ {
+ FileUtils.deleteDirectory( indexLocation );
+ }
+
+ config.getConfiguration().addRepository( repoConfig );
+
+ index = createIndex( indexFactory, repository );
+
+ indexHandlers = getIndexHandler();
+ }
+
+ protected Map getArchivaArtifactDumpMap()
+ {
+ Map dumps = new HashMap();
+
+ // archiva-common-1.0.jar.txt
+ dumps.put( "archiva-common", createArchivaArtifact( "org.apache.maven.archiva", "archiva-common", "1.0", "",
+ "jar" ) );
+
+ // continuum-webapp-1.0.3-SNAPSHOT.war.txt
+ dumps.put( "continuum-webapp", createArchivaArtifact( "org.apache.maven.continuum", "continuum-webapp",
+ "1.0.3-SNAPSHOT", "", "war" ) );
+
+ // daytrader-ear-1.1.ear.txt
+ dumps.put( "daytrader-ear", createArchivaArtifact( "org.apache.geronimo", "daytrader-ear", "1.1", "", "ear" ) );
+
+ // maven-archetype-simple-1.0-alpha-4.jar.txt
+ dumps.put( "maven-archetype-simple", createArchivaArtifact( "org.apache.maven", "maven-archetype-simple",
+ "1.0-alpha-4", "", "maven-archetype" ) );
+
+ // maven-help-plugin-2.0.2-20070119.121239-2.jar.txt
+ dumps.put( "maven-help-plugin", createArchivaArtifact( "org.apache.maven.plugins", "maven-help-plugin",
+ "2.0.2-20070119.121239-2", "", "maven-plugin" ) );
+
+ // redback-authorization-open-1.0-alpha-1-SNAPSHOT.jar.txt
+ dumps.put( "redback-authorization-open", createArchivaArtifact( "org.codehaus.plexus.redback",
+ "redback-authorization-open",
+ "1.0-alpha-1-SNAPSHOT", "", "jar" ) );
+
+ // testng-5.1-jdk15.jar.txt
+ dumps.put( "testng", createArchivaArtifact( "org.testng", "testng", "5.1", "jdk15", "jar" ) );
+
+ // wagon-provider-api-1.0-beta-3-20070209.213958-2.jar.txt
+ dumps.put( "wagon-provider-api", createArchivaArtifact( "org.apache.maven.wagon", "wagon-provider-api",
+ "1.0-beta-3-20070209.213958-2", "", "jar" ) );
+
+ return dumps;
+ }
+
+ protected File getDumpFile( ArchivaArtifact artifact )
+ {
+ File dumpDir = new File( getBasedir(), "src/test/artifact-dumps" );
+ StringBuffer filename = new StringBuffer();
+
+ filename.append( artifact.getArtifactId() ).append( "-" ).append( artifact.getVersion() );
+
+ if ( artifact.hasClassifier() )
+ {
+ filename.append( "-" ).append( artifact.getClassifier() );
+ }
+
+ filename.append( "." );
+
+ // TODO: use the ArtifactExtensionMapping object!
+ if ( "maven-plugin".equals( artifact.getType() ) || "maven-archetype".equals( artifact.getType() ) )
+ {
+ filename.append( "jar" );
+ }
+ else
+ {
+ filename.append( artifact.getType() );
+ }
+ filename.append( ".txt" );
+
+ File dumpFile = new File( dumpDir, filename.toString() );
+
+ if ( !dumpFile.exists() )
+ {
+ fail( "Dump file " + dumpFile.getAbsolutePath() + " does not exist (should it?)." );
+ }
+
+ return dumpFile;
+ }
+
+ private ArchivaArtifact createArchivaArtifact( String groupId, String artifactId, String version,
+ String classifier, String type )
+ {
+ ArchivaArtifact artifact = new ArchivaArtifact( groupId, artifactId, version, classifier, type );
+ return artifact;
+ }
+
+ protected void createEmptyIndex() throws IOException
+ {
+ createIndex( Collections.EMPTY_LIST );
+ }
+
+ protected void createIndex( List documents ) throws IOException
+ {
+ IndexWriter writer = new IndexWriter( index.getIndexDirectory(), indexHandlers.getAnalyzer(), true );
+ for ( Iterator i = documents.iterator(); i.hasNext(); )
+ {
+ Document document = (Document) i.next();
+ writer.addDocument( document );
+ }
+ writer.optimize();
+ writer.close();
+ }
+}
diff --git a/archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/AbstractSearchTestCase.java b/archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/AbstractSearchTestCase.java
new file mode 100644
index 000000000..5d4d62cb4
--- /dev/null
+++ b/archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/AbstractSearchTestCase.java
@@ -0,0 +1,163 @@
+package org.apache.maven.archiva.indexer;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.lucene.index.Term;
+import org.apache.lucene.queryParser.ParseException;
+import org.apache.lucene.queryParser.QueryParser;
+import org.apache.lucene.search.Query;
+import org.apache.lucene.search.TermQuery;
+import org.apache.maven.archiva.indexer.lucene.LuceneQuery;
+import org.apache.maven.archiva.indexer.lucene.LuceneRepositoryContentRecord;
+
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import junit.framework.ComparisonFailure;
+
+/**
+ * AbstractSearchTestCase
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public abstract class AbstractSearchTestCase extends AbstractIndexerTestCase
+{
+ protected Map records;
+
+ protected abstract Map createSampleRecordsMap();
+
+ protected void setUp() throws Exception
+ {
+ super.setUp();
+
+ records = createSampleRecordsMap();
+
+ index.indexRecords( records.values() );
+ }
+
+ protected Query createExactMatchQuery( String field, String value )
+ {
+ return new TermQuery( new Term( field, value ) );
+ }
+
+ protected Query createMatchQuery( String field, String value ) throws ParseException
+ {
+ QueryParser queryParser = new QueryParser( field, indexHandlers.getAnalyzer() );
+ queryParser.setLowercaseExpandedTerms( true );
+ return queryParser.parse( value );
+ }
+
+ protected void assertResults( String expectedKeys[], List actualResults )
+ {
+ if ( actualResults == null )
+ {
+ fail( "Got null results, expected <" + expectedKeys.length + "> results." );
+ }
+
+ if ( actualResults.isEmpty() )
+ {
+ fail( "Got empty results, expected <" + expectedKeys.length + "> results." );
+ }
+
+ if ( expectedKeys.length != actualResults.size() )
+ {
+ dumpResults( actualResults );
+ throw new ComparisonFailure( "Results count", String.valueOf( expectedKeys.length ),
+ String.valueOf( actualResults.size() ) );
+ }
+
+ assertEquals( "Results count", expectedKeys.length, actualResults.size() );
+
+ for ( int i = 0; i < expectedKeys.length; i++ )
+ {
+ String key = expectedKeys[i];
+ LuceneRepositoryContentRecord record = (LuceneRepositoryContentRecord) records.get( key );
+
+ if ( record == null )
+ {
+ dumpResults( actualResults );
+ fail( "Expected record <" + key
+ + "> not in records map (smack the unit test developer, tell them to fix method "
+ + getName() + ")" );
+ }
+
+ if ( !actualResults.contains( record ) )
+ {
+ dumpResults( actualResults );
+ fail( "Results should contain expected record: " + record );
+ }
+ }
+ }
+
+ protected void dumpResults( List results )
+ {
+ System.out.println( "Results <" + results.size() + "> - " + getName() );
+ int i = 1;
+ for ( Iterator iter = results.iterator(); iter.hasNext(); )
+ {
+ Object result = (Object) iter.next();
+ System.out.println( "Result [" + ( i++ ) + "] : " + result );
+ }
+ }
+
+ protected void assertNoResults( List results )
+ {
+ if ( results == null )
+ {
+ return;
+ }
+
+ if ( !results.isEmpty() )
+ {
+ dumpResults( results );
+ fail( "Expected no results, but actually got <" + results.size() + "> entries." );
+ }
+ }
+
+ protected void assertQueryExactMatchNoResults( String key, String term ) throws RepositoryIndexSearchException
+ {
+ Query query = createExactMatchQuery( key, term );
+ List results = index.search( new LuceneQuery( query ) );
+ assertNoResults( results );
+ }
+
+ protected void assertQueryExactMatch( String key, String names[], String term ) throws RepositoryIndexSearchException
+ {
+ Query query = createExactMatchQuery( key, term );
+ List results = index.search( new LuceneQuery( query ) );
+ assertResults( names, results );
+ }
+
+ protected void assertQueryMatch( String key, String names[], String term ) throws Exception
+ {
+ Query query = createMatchQuery( key, term );
+ List results = index.search( new LuceneQuery( query ) );
+ assertResults( names, results );
+ }
+
+ protected void assertQueryMatchNoResults( String key, String term ) throws Exception
+ {
+ Query query = createMatchQuery( key, term );
+ List results = index.search( new LuceneQuery( query ) );
+ assertNoResults( results );
+ }
+}
diff --git a/archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/AllTests.java b/archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/AllTests.java
new file mode 100644
index 000000000..2cd47bfc6
--- /dev/null
+++ b/archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/AllTests.java
@@ -0,0 +1,45 @@
+package org.apache.maven.archiva.indexer;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+/**
+ * AllTests - conveinence test suite for IDE users.
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class AllTests
+{
+
+ public static Test suite()
+ {
+ TestSuite suite = new TestSuite( "Test for org.apache.maven.archiva.indexer" );
+ //$JUnit-BEGIN$
+ suite.addTest( org.apache.maven.archiva.indexer.bytecode.AllTests.suite() );
+ suite.addTest( org.apache.maven.archiva.indexer.hashcodes.AllTests.suite() );
+ suite.addTest( org.apache.maven.archiva.indexer.query.AllTests.suite() );
+ //$JUnit-END$
+ return suite;
+ }
+
+}
diff --git a/archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/MockConfiguration.java b/archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/MockConfiguration.java
new file mode 100644
index 000000000..c856f5499
--- /dev/null
+++ b/archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/MockConfiguration.java
@@ -0,0 +1,54 @@
+package org.apache.maven.archiva.indexer;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.archiva.configuration.ArchivaConfiguration;
+import org.apache.maven.archiva.configuration.Configuration;
+import org.codehaus.plexus.registry.RegistryException;
+import org.codehaus.plexus.registry.RegistryListener;
+
+/**
+ * MockConfiguration
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ *
+ * @plexus.component role="org.apache.maven.archiva.configuration.ArchivaConfiguration"
+ * role-hint="mock"
+ */
+public class MockConfiguration implements ArchivaConfiguration
+{
+ private Configuration configuration = new Configuration();
+
+ public void addChangeListener( RegistryListener listener )
+ {
+ /* do nothing */
+ }
+
+ public Configuration getConfiguration()
+ {
+ return configuration;
+ }
+
+ public void save( Configuration configuration ) throws RegistryException
+ {
+ /* do nothing */
+ }
+}
diff --git a/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/AllTests.java b/archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/bytecode/AllTests.java
index e23eb09f7..ce99f9b74 100644
--- a/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/AllTests.java
+++ b/archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/bytecode/AllTests.java
@@ -1,4 +1,4 @@
-package org.apache.maven.archiva;
+package org.apache.maven.archiva.indexer.bytecode;
/*
* Licensed to the Apache Software Foundation (ASF) under one
@@ -33,10 +33,10 @@ public class AllTests
public static Test suite()
{
- TestSuite suite = new TestSuite( "Test for org.apache.maven.archiva" );
+ TestSuite suite = new TestSuite( "Test for org.apache.maven.archiva.indexer.bytecode" );
//$JUnit-BEGIN$
- suite.addTest( org.apache.maven.archiva.repository.AllTests.suite() );
- suite.addTest( org.apache.maven.archiva.layer.AllTests.suite() );
+ suite.addTestSuite( BytecodeSearchTest.class );
+ suite.addTestSuite( BytecodeIndexTest.class );
//$JUnit-END$
return suite;
}
diff --git a/archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/bytecode/BytecodeIndexTest.java b/archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/bytecode/BytecodeIndexTest.java
new file mode 100644
index 000000000..a6f4b59f6
--- /dev/null
+++ b/archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/bytecode/BytecodeIndexTest.java
@@ -0,0 +1,64 @@
+package org.apache.maven.archiva.indexer.bytecode;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.archiva.indexer.AbstractIndexCreationTestCase;
+import org.apache.maven.archiva.indexer.RepositoryContentIndex;
+import org.apache.maven.archiva.indexer.RepositoryContentIndexFactory;
+import org.apache.maven.archiva.indexer.lucene.LuceneIndexHandlers;
+import org.apache.maven.archiva.indexer.lucene.LuceneRepositoryContentRecord;
+import org.apache.maven.archiva.model.ArchivaArtifact;
+import org.apache.maven.archiva.model.ArchivaRepository;
+
+import java.io.File;
+import java.util.Map;
+
+/**
+ * BytecodeIndexTest
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class BytecodeIndexTest extends AbstractIndexCreationTestCase
+{
+ public String getIndexName()
+ {
+ return "bytecode";
+ }
+
+ public LuceneIndexHandlers getIndexHandler()
+ {
+ return new BytecodeHandlers();
+ }
+
+ public RepositoryContentIndex createIndex( RepositoryContentIndexFactory indexFactory, ArchivaRepository repository )
+ {
+ return indexFactory.createBytecodeIndex( repository );
+ }
+
+ protected LuceneRepositoryContentRecord createSimpleRecord()
+ {
+ Map dumps = getArchivaArtifactDumpMap();
+ ArchivaArtifact artifact = (ArchivaArtifact) dumps.get( "archiva-common" );
+
+ File dumpFile = getDumpFile( artifact );
+ return BytecodeRecordLoader.loadRecord( dumpFile, artifact );
+ }
+} \ No newline at end of file
diff --git a/archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/bytecode/BytecodeRecordLoader.java b/archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/bytecode/BytecodeRecordLoader.java
new file mode 100644
index 000000000..66a62e5ef
--- /dev/null
+++ b/archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/bytecode/BytecodeRecordLoader.java
@@ -0,0 +1,138 @@
+package org.apache.maven.archiva.indexer.bytecode;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.archiva.model.ArchivaArtifact;
+import org.apache.maven.archiva.model.ArchivaArtifactJavaDetails;
+import org.apache.maven.archiva.model.platform.JavaArtifactHelper;
+import org.codehaus.plexus.util.IOUtil;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileReader;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Map;
+
+import junit.framework.AssertionFailedError;
+
+/**
+ * BytecodeRecordLoader - Utility method for loading dump files into BytecordRecords.
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class BytecodeRecordLoader
+{
+ private static Map cache = new HashMap();
+
+ public static BytecodeRecord loadRecord( File dumpFile, ArchivaArtifact artifact )
+ {
+ BytecodeRecord record = (BytecodeRecord) cache.get( artifact );
+ if ( record != null )
+ {
+ return record;
+ }
+
+ record = new BytecodeRecord();
+ record.setArtifact( artifact );
+
+ record.setClasses( new ArrayList() );
+ record.setMethods( new ArrayList() );
+ record.setFiles( new ArrayList() );
+
+ FileReader freader = null;
+ BufferedReader reader = null;
+
+ try
+ {
+ freader = new FileReader( dumpFile );
+ reader = new BufferedReader( freader );
+
+ String line = reader.readLine();
+ while ( line != null )
+ {
+ if ( line.startsWith( "FILENAME|" ) )
+ {
+ String filename = line.substring( "FILENAME|".length() );
+ record.setFilename( filename );
+ }
+ else if ( line.startsWith( "SIZE|" ) )
+ {
+ String size = line.substring( "SIZE|".length() );
+ record.getArtifact().getModel().setSize( Long.parseLong( size ) );
+ }
+ else if ( line.startsWith( "HASH_MD5|" ) )
+ {
+ String md5 = line.substring( "HASH_MD5|".length() );
+ record.getArtifact().getModel().setChecksumMD5( md5 );
+ }
+ else if ( line.startsWith( "HASH_SHA1|" ) )
+ {
+ String sha1 = line.substring( "HASH_SHA1|".length() );
+ record.getArtifact().getModel().setChecksumSHA1( sha1 );
+ }
+ else if ( line.startsWith( "HASH_BYTECODE|" ) )
+ {
+ String hash = line.substring( "HASH_BYTECODE|".length() );
+ ArchivaArtifactJavaDetails javaDetails = JavaArtifactHelper.getJavaDetails( record.getArtifact() );
+ javaDetails.setChecksumBytecode( hash );
+ }
+ else if ( line.startsWith( "JDK|" ) )
+ {
+ String jdk = line.substring( "JDK|".length() );
+ ArchivaArtifactJavaDetails javaDetails = JavaArtifactHelper.getJavaDetails( record.getArtifact() );
+ javaDetails.setJdk( jdk );
+ }
+ else if ( line.startsWith( "CLASS|" ) )
+ {
+ String classname = line.substring( "CLASS|".length() );
+ record.getClasses().add( classname );
+ }
+ else if ( line.startsWith( "METHOD|" ) )
+ {
+ String methodName = line.substring( "METHOD|".length() );
+ record.getMethods().add( methodName );
+ }
+ else if ( line.startsWith( "FILE|" ) )
+ {
+ String fileentry = line.substring( "FILE|".length() );
+ record.getFiles().add( fileentry );
+ }
+
+ line = reader.readLine();
+ }
+ }
+ catch ( IOException e )
+ {
+ throw new AssertionFailedError( "Unable to load record " + dumpFile + " from disk: " + e.getMessage() );
+ }
+ finally
+ {
+ IOUtil.close( reader );
+ IOUtil.close( freader );
+ }
+
+ cache.put( artifact, record );
+
+ return record;
+ }
+}
diff --git a/archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/bytecode/BytecodeSearchTest.java b/archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/bytecode/BytecodeSearchTest.java
new file mode 100644
index 000000000..47b22721e
--- /dev/null
+++ b/archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/bytecode/BytecodeSearchTest.java
@@ -0,0 +1,330 @@
+package org.apache.maven.archiva.indexer.bytecode;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.lucene.search.BooleanClause;
+import org.apache.lucene.search.BooleanQuery;
+import org.apache.lucene.search.MatchAllDocsQuery;
+import org.apache.maven.archiva.indexer.AbstractSearchTestCase;
+import org.apache.maven.archiva.indexer.ArtifactKeys;
+import org.apache.maven.archiva.indexer.RepositoryContentIndex;
+import org.apache.maven.archiva.indexer.RepositoryContentIndexFactory;
+import org.apache.maven.archiva.indexer.RepositoryIndexSearchException;
+import org.apache.maven.archiva.indexer.lucene.LuceneIndexHandlers;
+import org.apache.maven.archiva.indexer.lucene.LuceneQuery;
+import org.apache.maven.archiva.model.ArchivaArtifact;
+import org.apache.maven.archiva.model.ArchivaRepository;
+
+import java.io.File;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * BytecodeSearchTest
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class BytecodeSearchTest extends AbstractSearchTestCase
+{
+ public String getIndexName()
+ {
+ return "bytecode";
+ }
+
+ public LuceneIndexHandlers getIndexHandler()
+ {
+ return new BytecodeHandlers();
+ }
+
+ public RepositoryContentIndex createIndex( RepositoryContentIndexFactory indexFactory, ArchivaRepository repository )
+ {
+ return indexFactory.createBytecodeIndex( repository );
+ }
+
+ protected Map createSampleRecordsMap()
+ {
+ Map records = new HashMap();
+
+ Map artifactDumps = getArchivaArtifactDumpMap();
+ for ( Iterator iter = artifactDumps.entrySet().iterator(); iter.hasNext(); )
+ {
+ Map.Entry entry = (Map.Entry) iter.next();
+ ArchivaArtifact artifact = (ArchivaArtifact) entry.getValue();
+ File dumpFile = getDumpFile( artifact );
+ BytecodeRecord record = BytecodeRecordLoader.loadRecord( dumpFile, artifact );
+ records.put( entry.getKey(), record );
+ }
+
+ return records;
+ }
+
+ public void testExactMatchVersionSimple() throws RepositoryIndexSearchException
+ {
+ assertQueryExactMatch( ArtifactKeys.VERSION_EXACT, new String[] { "archiva-common" }, "1.0" );
+ }
+
+ public void testExactMatchVersionSnapshot() throws RepositoryIndexSearchException
+ {
+ assertQueryExactMatch( ArtifactKeys.VERSION_EXACT, new String[] { "continuum-webapp" }, "1.0.3-SNAPSHOT" );
+ }
+
+ public void testExactMatchVersionAlphaSnapshot() throws RepositoryIndexSearchException
+ {
+ assertQueryExactMatch( ArtifactKeys.VERSION_EXACT, new String[] { "redback-authorization-open" },
+ "1.0-alpha-1-SNAPSHOT" );
+ }
+
+ public void testExactMatchVersionTimestampedSnapshot() throws RepositoryIndexSearchException
+ {
+ assertQueryExactMatch( ArtifactKeys.VERSION_EXACT, new String[] { "wagon-provider-api" },
+ "1.0-beta-3-20070209.213958-2" );
+ }
+
+ public void testExactMatchVersionInvalid() throws RepositoryIndexSearchException
+ {
+ assertQueryExactMatchNoResults( ArtifactKeys.VERSION_EXACT, "foo" );
+ }
+
+ public void testExactMatchGroupIdOrgApacheMavenArchiva() throws RepositoryIndexSearchException
+ {
+ assertQueryExactMatch( ArtifactKeys.GROUPID_EXACT, new String[] { "archiva-common" },
+ "org.apache.maven.archiva" );
+ }
+
+ public void testExactMatchGroupIdOrgApacheMaven() throws RepositoryIndexSearchException
+ {
+ assertQueryExactMatch( ArtifactKeys.GROUPID_EXACT, new String[] { "maven-archetype-simple" },
+ "org.apache.maven" );
+ }
+
+ public void testExactMatchGroupIdInvalid() throws RepositoryIndexSearchException
+ {
+ assertQueryExactMatchNoResults( ArtifactKeys.GROUPID_EXACT, "foo" );
+ }
+
+ public void testExactMatchArtifactIdArchivaCommon() throws RepositoryIndexSearchException
+ {
+ assertQueryExactMatch( ArtifactKeys.ARTIFACTID_EXACT, new String[] { "archiva-common" }, "archiva-common" );
+ }
+
+ public void testExactMatchArtifactIdTestNg() throws RepositoryIndexSearchException
+ {
+ assertQueryExactMatch( ArtifactKeys.ARTIFACTID_EXACT, new String[] { "testng" }, "testng" );
+ }
+
+ public void testExactMatchArtifactIdInvalid() throws RepositoryIndexSearchException
+ {
+ assertQueryExactMatchNoResults( ArtifactKeys.ARTIFACTID_EXACT, "foo" );
+ }
+
+ public void testExactMatchTypeJar() throws RepositoryIndexSearchException
+ {
+ assertQueryExactMatch( ArtifactKeys.TYPE, ( new String[] { "archiva-common", "redback-authorization-open",
+ "testng", "wagon-provider-api" } ), "jar" );
+ }
+
+ public void testExactMatchTypeWar() throws RepositoryIndexSearchException
+ {
+ assertQueryExactMatch( ArtifactKeys.TYPE, ( new String[] { "continuum-webapp" } ), "war" );
+ }
+
+ /* TODO: Fix 'maven-plugin' type
+ public void testExactMatchTypePlugin() throws RepositoryIndexSearchException
+ {
+ assertQueryExactMatch( ArtifactKeys.TYPE, ( new String[] { "maven-help-plugin" } ), "maven-plugin" );
+ } */
+
+ /* TODO: Fix 'maven-archetype' type
+ public void testExactMatchTypeArchetype() throws RepositoryIndexSearchException
+ {
+ assertQueryExactMatch( ArtifactKeys.TYPE, ( new String[] { "maven-archetype-simple" } ), "maven-archetype" );
+ }
+ */
+
+ public void testExactMatchTypeInvalid() throws RepositoryIndexSearchException
+ {
+ assertQueryExactMatchNoResults( ArtifactKeys.TYPE, "foo" );
+ }
+
+ public void testMatchGroupIdOrgApacheMaven() throws Exception
+ {
+ assertQueryMatch( ArtifactKeys.GROUPID, new String[] { "archiva-common", "continuum-webapp",
+ "maven-archetype-simple", "maven-help-plugin", "wagon-provider-api" }, "org.apache.maven" );
+ }
+
+ public void testMatchGroupIdMaven() throws Exception
+ {
+ assertQueryMatch( ArtifactKeys.GROUPID, new String[] { "archiva-common", "continuum-webapp",
+ "maven-archetype-simple", "maven-help-plugin", "wagon-provider-api" }, "maven" );
+ }
+
+ public void testMatchGroupIdMavenMixed() throws Exception
+ {
+ assertQueryMatch( ArtifactKeys.GROUPID, new String[] { "archiva-common", "continuum-webapp",
+ "maven-archetype-simple", "maven-help-plugin", "wagon-provider-api" }, "Maven" );
+ }
+
+ public void testMatchGroupIdInvalid() throws Exception
+ {
+ assertQueryMatchNoResults( ArtifactKeys.GROUPID, "foo" );
+ }
+
+ public void testMatchArtifactIdPlugin() throws Exception
+ {
+ assertQueryMatch( ArtifactKeys.ARTIFACTID, new String[] { "maven-help-plugin" }, "plugin" );
+ }
+
+ public void testMatchArtifactIdMaven() throws Exception
+ {
+ assertQueryMatch( ArtifactKeys.ARTIFACTID, new String[] { "maven-help-plugin", "maven-archetype-simple" },
+ "maven" );
+ }
+
+ public void testMatchArtifactIdHelp() throws Exception
+ {
+ assertQueryMatch( ArtifactKeys.ARTIFACTID, new String[] { "maven-help-plugin" }, "help" );
+ }
+
+ public void testMatchVersionOne() throws Exception
+ {
+ assertQueryMatch( ArtifactKeys.VERSION, new String[] { "daytrader-ear", "testng", "archiva-common",
+ "redback-authorization-open", "maven-archetype-simple", "continuum-webapp", "wagon-provider-api" }, "1" );
+ }
+
+ public void testMatchVersionOneOh() throws Exception
+ {
+ assertQueryMatch( ArtifactKeys.VERSION, new String[] { "archiva-common", "continuum-webapp",
+ "maven-archetype-simple", "redback-authorization-open", "wagon-provider-api" }, "1.0" );
+ }
+
+ public void testMatchVersionSnapshotLower() throws Exception
+ {
+ assertQueryMatch( ArtifactKeys.VERSION, new String[] { "continuum-webapp", "redback-authorization-open" },
+ "snapshot" );
+ }
+
+ public void testMatchVersionSnapshotUpper() throws Exception
+ {
+ assertQueryMatch( ArtifactKeys.VERSION, new String[] { "continuum-webapp", "redback-authorization-open" },
+ "SNAPSHOT" );
+ }
+
+ public void testMatchVersionAlpha() throws Exception
+ {
+ assertQueryMatch( ArtifactKeys.VERSION,
+ new String[] { "maven-archetype-simple", "redback-authorization-open" }, "alpha" );
+ }
+
+ public void testMatchVersionOneAlpha() throws Exception
+ {
+ assertQueryMatch( ArtifactKeys.VERSION, new String[] { "redback-authorization-open" }, "1.0-alpha-1" );
+ }
+
+ public void testMatchVersionInvalid() throws Exception
+ {
+ assertQueryMatchNoResults( ArtifactKeys.VERSION, "255" );
+ }
+
+ public void testMatchClassifierNotJdk15() throws Exception
+ {
+ BooleanQuery bQuery = new BooleanQuery();
+ bQuery.add( new MatchAllDocsQuery(), BooleanClause.Occur.MUST );
+ bQuery.add( createMatchQuery( ArtifactKeys.CLASSIFIER, "jdk15" ), BooleanClause.Occur.MUST_NOT );
+ List results = index.search( new LuceneQuery( bQuery ) );
+
+ assertResults( new String[] { "archiva-common", "continuum-webapp", "redback-authorization-open",
+ "daytrader-ear", "maven-archetype-simple", "maven-help-plugin", "wagon-provider-api" }, results );
+ }
+
+ public void testMatchClassifierJdk15() throws Exception
+ {
+ assertQueryMatch( ArtifactKeys.CLASSIFIER, new String[] { "testng" }, "jdk15" );
+ }
+
+ public void testMatchClassifierInvalid() throws Exception
+ {
+ assertQueryMatchNoResults( ArtifactKeys.CLASSIFIER, "redo" );
+ }
+
+ public void testMatchClassSessionListener() throws Exception
+ {
+ assertQueryMatch( BytecodeKeys.CLASSES, new String[] { "wagon-provider-api" }, "wagon.events.SessionListener" );
+ }
+
+ /* TODO: Suffix searching does not seem to work.
+ public void testMatchClassUtil() throws Exception
+ {
+ assertQueryMatch( BytecodeKeys.CLASSES, new String[] { "archiva-common", "continuum-webapp", "testng",
+ "wagon-provider-api" }, "Util" );
+ }
+ */
+
+ public void testMatchClassWagon() throws Exception
+ {
+ assertQueryMatch( BytecodeKeys.CLASSES, new String[] { "wagon-provider-api" }, "Wagon" );
+ }
+
+ /* TODO: Suffix searching does not seem to work.
+ public void testMatchClassMojoAllUpper() throws Exception
+ {
+ assertQueryMatch( BytecodeKeys.CLASSES, new String[] { "maven-help-plugin" }, "MOJO" );
+ }
+ */
+
+ /* TODO: Suffix searching does not seem to work.
+ public void testMatchClassMojo() throws Exception
+ {
+ assertQueryMatch( BytecodeKeys.CLASSES, new String[] { "maven-help-plugin" }, "Mojo" );
+ }
+ */
+
+ public void testMatchClassInvalid() throws Exception
+ {
+ assertQueryMatchNoResults( BytecodeKeys.CLASSES, "Destruct|Button" );
+ }
+
+ public void testMatchFilesManifestMf() throws Exception
+ {
+ assertQueryMatch( BytecodeKeys.FILES, new String[] { "daytrader-ear", "maven-archetype-simple",
+ "redback-authorization-open", "maven-help-plugin", "archiva-common", "wagon-provider-api",
+ "continuum-webapp", "testng" }, "MANIFEST.MF" );
+ }
+
+ public void testMatchFilesMetaInf() throws Exception
+ {
+ assertQueryMatch( BytecodeKeys.FILES, new String[] { "daytrader-ear", "maven-archetype-simple",
+ "redback-authorization-open", "maven-help-plugin", "archiva-common", "wagon-provider-api",
+ "continuum-webapp", "testng" }, "META-INF" );
+ }
+
+ public void testMatchFilesPluginXml() throws Exception
+ {
+ assertQueryMatch( BytecodeKeys.FILES, new String[] { "maven-help-plugin" }, "plugin.xml" );
+ }
+
+ public void testMatchFilesInvalid() throws Exception
+ {
+ assertQueryMatchNoResults( BytecodeKeys.FILES, "Veni Vidi Castratavi Illegitimos" );
+ }
+
+}
diff --git a/archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/hashcodes/AllTests.java b/archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/hashcodes/AllTests.java
new file mode 100644
index 000000000..5aa70ca8e
--- /dev/null
+++ b/archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/hashcodes/AllTests.java
@@ -0,0 +1,44 @@
+package org.apache.maven.archiva.indexer.hashcodes;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+/**
+ * AllTests - conveinence test suite for IDE users.
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class AllTests
+{
+
+ public static Test suite()
+ {
+ TestSuite suite = new TestSuite( "Test for org.apache.maven.archiva.indexer.hashcodes" );
+ //$JUnit-BEGIN$
+ suite.addTestSuite( HashcodesIndexTest.class );
+ suite.addTestSuite( HashcodesSearchTest.class );
+ //$JUnit-END$
+ return suite;
+ }
+
+}
diff --git a/archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/hashcodes/HashcodesIndexTest.java b/archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/hashcodes/HashcodesIndexTest.java
new file mode 100644
index 000000000..8693f23ee
--- /dev/null
+++ b/archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/hashcodes/HashcodesIndexTest.java
@@ -0,0 +1,65 @@
+package org.apache.maven.archiva.indexer.hashcodes;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.archiva.indexer.AbstractIndexCreationTestCase;
+import org.apache.maven.archiva.indexer.RepositoryContentIndex;
+import org.apache.maven.archiva.indexer.RepositoryContentIndexFactory;
+import org.apache.maven.archiva.indexer.lucene.LuceneIndexHandlers;
+import org.apache.maven.archiva.indexer.lucene.LuceneRepositoryContentRecord;
+import org.apache.maven.archiva.model.ArchivaArtifact;
+import org.apache.maven.archiva.model.ArchivaRepository;
+
+/**
+ * HashcodesIndexTest
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class HashcodesIndexTest extends AbstractIndexCreationTestCase
+{
+ public String getIndexName()
+ {
+ return "hashcodes";
+ }
+
+ public LuceneIndexHandlers getIndexHandler()
+ {
+ return new HashcodesHandlers();
+ }
+
+ public RepositoryContentIndex createIndex( RepositoryContentIndexFactory indexFactory, ArchivaRepository repository )
+ {
+ return indexFactory.createHashcodeIndex( repository );
+ }
+
+ protected LuceneRepositoryContentRecord createSimpleRecord()
+ {
+ ArchivaArtifact artifact = new ArchivaArtifact( "com.foo", "projfoo", "1.0", "", "jar" );
+
+ HashcodesRecord record = new HashcodesRecord();
+ record.setArtifact( artifact );
+
+ artifact.getModel().setChecksumSHA1( "c66f18bf192cb613fc2febb4da541a34133eedc2" );
+ artifact.getModel().setChecksumMD5( "3a0adc365f849366cd8b633cad155cb7" );
+
+ return record;
+ }
+}
diff --git a/archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/hashcodes/HashcodesRecordLoader.java b/archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/hashcodes/HashcodesRecordLoader.java
new file mode 100644
index 000000000..1550fb292
--- /dev/null
+++ b/archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/hashcodes/HashcodesRecordLoader.java
@@ -0,0 +1,106 @@
+package org.apache.maven.archiva.indexer.hashcodes;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.archiva.model.ArchivaArtifact;
+import org.apache.maven.archiva.model.ArchivaArtifactJavaDetails;
+import org.apache.maven.archiva.model.platform.JavaArtifactHelper;
+import org.codehaus.plexus.util.IOUtil;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileReader;
+import java.io.IOException;
+
+import junit.framework.AssertionFailedError;
+
+/**
+ * HashcodesRecordLoader
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class HashcodesRecordLoader
+{
+ public static HashcodesRecord loadRecord( File dumpFile, ArchivaArtifact artifact )
+ {
+ HashcodesRecord record = new HashcodesRecord();
+ record.setArtifact( artifact );
+
+ FileReader freader = null;
+ BufferedReader reader = null;
+
+ try
+ {
+ freader = new FileReader( dumpFile );
+ reader = new BufferedReader( freader );
+
+ String line = reader.readLine();
+ while ( line != null )
+ {
+ if ( line.startsWith( "FILENAME|" ) )
+ {
+ String filename = line.substring( "FILENAME|".length() );
+ record.setFilename( filename );
+ }
+ else if ( line.startsWith( "SIZE|" ) )
+ {
+ String size = line.substring( "SIZE|".length() );
+ record.getArtifact().getModel().setSize( Long.parseLong( size ) );
+ }
+ else if ( line.startsWith( "HASH_MD5|" ) )
+ {
+ String md5 = line.substring( "HASH_MD5|".length() );
+ record.getArtifact().getModel().setChecksumMD5( md5 );
+ }
+ else if ( line.startsWith( "HASH_SHA1|" ) )
+ {
+ String sha1 = line.substring( "HASH_SHA1|".length() );
+ record.getArtifact().getModel().setChecksumSHA1( sha1 );
+ }
+ else if ( line.startsWith( "HASH_BYTECODE|" ) )
+ {
+ String hash = line.substring( "HASH_BYTECODE|".length() );
+ ArchivaArtifactJavaDetails javaDetails = JavaArtifactHelper.getJavaDetails( record.getArtifact() );
+ javaDetails.setChecksumBytecode( hash );
+ }
+ else if ( line.startsWith( "JDK|" ) )
+ {
+ String jdk = line.substring( "JDK|".length() );
+ ArchivaArtifactJavaDetails javaDetails = JavaArtifactHelper.getJavaDetails( record.getArtifact() );
+ javaDetails.setJdk( jdk );
+ }
+
+ line = reader.readLine();
+ }
+ }
+ catch ( IOException e )
+ {
+ throw new AssertionFailedError( "Unable to load record " + dumpFile + " from disk: " + e.getMessage() );
+ }
+ finally
+ {
+ IOUtil.close( reader );
+ IOUtil.close( freader );
+ }
+
+ return record;
+ }
+}
diff --git a/archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/hashcodes/HashcodesSearchTest.java b/archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/hashcodes/HashcodesSearchTest.java
new file mode 100644
index 000000000..c25a06e2b
--- /dev/null
+++ b/archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/hashcodes/HashcodesSearchTest.java
@@ -0,0 +1,290 @@
+package org.apache.maven.archiva.indexer.hashcodes;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.lucene.search.BooleanClause;
+import org.apache.lucene.search.BooleanQuery;
+import org.apache.lucene.search.MatchAllDocsQuery;
+import org.apache.maven.archiva.indexer.AbstractSearchTestCase;
+import org.apache.maven.archiva.indexer.ArtifactKeys;
+import org.apache.maven.archiva.indexer.RepositoryContentIndex;
+import org.apache.maven.archiva.indexer.RepositoryContentIndexFactory;
+import org.apache.maven.archiva.indexer.RepositoryIndexSearchException;
+import org.apache.maven.archiva.indexer.lucene.LuceneIndexHandlers;
+import org.apache.maven.archiva.indexer.lucene.LuceneQuery;
+import org.apache.maven.archiva.model.ArchivaArtifact;
+import org.apache.maven.archiva.model.ArchivaRepository;
+
+import java.io.File;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * HashcodesSearchTest
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class HashcodesSearchTest extends AbstractSearchTestCase
+{
+ public String getIndexName()
+ {
+ return "hashcodes";
+ }
+
+ public LuceneIndexHandlers getIndexHandler()
+ {
+ return new HashcodesHandlers();
+ }
+
+ public RepositoryContentIndex createIndex( RepositoryContentIndexFactory indexFactory, ArchivaRepository repository )
+ {
+ return indexFactory.createHashcodeIndex( repository );
+ }
+
+ protected Map createSampleRecordsMap()
+ {
+ Map records = new HashMap();
+
+ Map artifactDumps = getArchivaArtifactDumpMap();
+ for ( Iterator iter = artifactDumps.entrySet().iterator(); iter.hasNext(); )
+ {
+ Map.Entry entry = (Map.Entry) iter.next();
+ ArchivaArtifact artifact = (ArchivaArtifact) entry.getValue();
+ File dumpFile = getDumpFile( artifact );
+ HashcodesRecord record = HashcodesRecordLoader.loadRecord( dumpFile, artifact );
+ records.put( entry.getKey(), record );
+ }
+
+ return records;
+ }
+
+ public void testExactMatchVersionSimple() throws RepositoryIndexSearchException
+ {
+ assertQueryExactMatch( ArtifactKeys.VERSION_EXACT, new String[] { "archiva-common" }, "1.0" );
+ }
+
+ public void testExactMatchVersionSnapshot() throws RepositoryIndexSearchException
+ {
+ assertQueryExactMatch( ArtifactKeys.VERSION_EXACT, new String[] { "continuum-webapp" }, "1.0.3-SNAPSHOT" );
+ }
+
+ public void testExactMatchVersionAlphaSnapshot() throws RepositoryIndexSearchException
+ {
+ assertQueryExactMatch( ArtifactKeys.VERSION_EXACT, new String[] { "redback-authorization-open" },
+ "1.0-alpha-1-SNAPSHOT" );
+ }
+
+ public void testExactMatchVersionTimestampedSnapshot() throws RepositoryIndexSearchException
+ {
+ assertQueryExactMatch( ArtifactKeys.VERSION_EXACT, new String[] { "wagon-provider-api" },
+ "1.0-beta-3-20070209.213958-2" );
+ }
+
+ public void testExactMatchVersionInvalid() throws RepositoryIndexSearchException
+ {
+ assertQueryExactMatchNoResults( ArtifactKeys.VERSION_EXACT, "foo" );
+ }
+
+ public void testExactMatchGroupIdOrgApacheMavenArchiva() throws RepositoryIndexSearchException
+ {
+ assertQueryExactMatch( ArtifactKeys.GROUPID_EXACT, new String[] { "archiva-common" },
+ "org.apache.maven.archiva" );
+ }
+
+ public void testExactMatchGroupIdOrgApacheMaven() throws RepositoryIndexSearchException
+ {
+ assertQueryExactMatch( ArtifactKeys.GROUPID_EXACT, new String[] { "maven-archetype-simple" },
+ "org.apache.maven" );
+ }
+
+ public void testExactMatchGroupIdInvalid() throws RepositoryIndexSearchException
+ {
+ assertQueryExactMatchNoResults( ArtifactKeys.GROUPID_EXACT, "foo" );
+ }
+
+ public void testExactMatchArtifactIdArchivaCommon() throws RepositoryIndexSearchException
+ {
+ assertQueryExactMatch( ArtifactKeys.ARTIFACTID_EXACT, new String[] { "archiva-common" }, "archiva-common" );
+ }
+
+ public void testExactMatchArtifactIdTestNg() throws RepositoryIndexSearchException
+ {
+ assertQueryExactMatch( ArtifactKeys.ARTIFACTID_EXACT, new String[] { "testng" }, "testng" );
+ }
+
+ public void testExactMatchArtifactIdInvalid() throws RepositoryIndexSearchException
+ {
+ assertQueryExactMatchNoResults( ArtifactKeys.ARTIFACTID_EXACT, "foo" );
+ }
+
+ public void testExactMatchTypeJar() throws RepositoryIndexSearchException
+ {
+ assertQueryExactMatch( ArtifactKeys.TYPE, ( new String[] { "archiva-common", "redback-authorization-open",
+ "testng", "wagon-provider-api" } ), "jar" );
+ }
+
+ public void testExactMatchTypeWar() throws RepositoryIndexSearchException
+ {
+ assertQueryExactMatch( ArtifactKeys.TYPE, ( new String[] { "continuum-webapp" } ), "war" );
+ }
+
+ /* TODO: Fix 'maven-plugin' type
+ public void testExactMatchTypePlugin() throws RepositoryIndexSearchException
+ {
+ assertQueryExactMatch( ArtifactKeys.TYPE, ( new String[] { "maven-help-plugin" } ), "maven-plugin" );
+ } */
+
+ /* TODO: Fix 'maven-archetype' type
+ public void testExactMatchTypeArchetype() throws RepositoryIndexSearchException
+ {
+ assertQueryExactMatch( ArtifactKeys.TYPE, ( new String[] { "maven-archetype-simple" } ), "maven-archetype" );
+ }
+ */
+
+ public void testExactMatchTypeInvalid() throws RepositoryIndexSearchException
+ {
+ assertQueryExactMatchNoResults( ArtifactKeys.TYPE, "foo" );
+ }
+
+ public void testExactMatchMd5() throws RepositoryIndexSearchException
+ {
+ assertQueryExactMatch( HashcodesKeys.MD5, ( new String[] { "redback-authorization-open" } ),
+ "f42047fe2e177ac04d0df7aa44d408be" );
+ }
+
+ public void testExactMatchMd5Invalid() throws RepositoryIndexSearchException
+ {
+ assertQueryExactMatchNoResults( HashcodesKeys.MD5, "foo" );
+ }
+
+ public void testExactMatchSha1() throws RepositoryIndexSearchException
+ {
+ assertQueryExactMatch( HashcodesKeys.SHA1, ( new String[] { "archiva-common" } ),
+ "c2635a1b38bd4520a6604664c04b2b3c32330864" );
+ }
+
+ public void testExactMatchSha1Invalid() throws RepositoryIndexSearchException
+ {
+ assertQueryExactMatchNoResults( HashcodesKeys.SHA1, "foo" );
+ }
+
+ public void testMatchGroupIdOrgApacheMaven() throws Exception
+ {
+ assertQueryMatch( ArtifactKeys.GROUPID, new String[] { "archiva-common", "continuum-webapp",
+ "maven-archetype-simple", "maven-help-plugin", "wagon-provider-api" }, "org.apache.maven" );
+ }
+
+ public void testMatchGroupIdMaven() throws Exception
+ {
+ assertQueryMatch( ArtifactKeys.GROUPID, new String[] { "archiva-common", "continuum-webapp",
+ "maven-archetype-simple", "maven-help-plugin", "wagon-provider-api" }, "maven" );
+ }
+
+ public void testMatchGroupIdMavenMixed() throws Exception
+ {
+ assertQueryMatch( ArtifactKeys.GROUPID, new String[] { "archiva-common", "continuum-webapp",
+ "maven-archetype-simple", "maven-help-plugin", "wagon-provider-api" }, "Maven" );
+ }
+
+ public void testMatchGroupIdInvalid() throws Exception
+ {
+ assertQueryMatchNoResults( ArtifactKeys.GROUPID, "foo" );
+ }
+
+ public void testMatchArtifactIdPlugin() throws Exception
+ {
+ assertQueryMatch( ArtifactKeys.ARTIFACTID, new String[] { "maven-help-plugin" }, "plugin" );
+ }
+
+ public void testMatchArtifactIdMaven() throws Exception
+ {
+ assertQueryMatch( ArtifactKeys.ARTIFACTID, new String[] { "maven-help-plugin", "maven-archetype-simple" },
+ "maven" );
+ }
+
+ public void testMatchArtifactIdHelp() throws Exception
+ {
+ assertQueryMatch( ArtifactKeys.ARTIFACTID, new String[] { "maven-help-plugin" }, "help" );
+ }
+
+ public void testMatchVersionOne() throws Exception
+ {
+ assertQueryMatch( ArtifactKeys.VERSION, new String[] { "daytrader-ear", "testng", "archiva-common",
+ "redback-authorization-open", "maven-archetype-simple", "continuum-webapp", "wagon-provider-api" }, "1" );
+ }
+
+ public void testMatchVersionOneOh() throws Exception
+ {
+ assertQueryMatch( ArtifactKeys.VERSION, new String[] { "archiva-common", "continuum-webapp",
+ "maven-archetype-simple", "redback-authorization-open", "wagon-provider-api" }, "1.0" );
+ }
+
+ public void testMatchVersionSnapshotLower() throws Exception
+ {
+ assertQueryMatch( ArtifactKeys.VERSION, new String[] { "continuum-webapp", "redback-authorization-open" },
+ "snapshot" );
+ }
+
+ public void testMatchVersionSnapshotUpper() throws Exception
+ {
+ assertQueryMatch( ArtifactKeys.VERSION, new String[] { "continuum-webapp", "redback-authorization-open" },
+ "SNAPSHOT" );
+ }
+
+ public void testMatchVersionAlpha() throws Exception
+ {
+ assertQueryMatch( ArtifactKeys.VERSION,
+ new String[] { "maven-archetype-simple", "redback-authorization-open" }, "alpha" );
+ }
+
+ public void testMatchVersionOneAlpha() throws Exception
+ {
+ assertQueryMatch( ArtifactKeys.VERSION, new String[] { "redback-authorization-open" }, "1.0-alpha-1" );
+ }
+
+ public void testMatchVersionInvalid() throws Exception
+ {
+ assertQueryMatchNoResults( ArtifactKeys.VERSION, "255" );
+ }
+
+ public void testMatchClassifierNotJdk15() throws Exception
+ {
+ BooleanQuery bQuery = new BooleanQuery();
+ bQuery.add( new MatchAllDocsQuery(), BooleanClause.Occur.MUST );
+ bQuery.add( createMatchQuery( ArtifactKeys.CLASSIFIER, "jdk15" ), BooleanClause.Occur.MUST_NOT );
+ List results = index.search( new LuceneQuery( bQuery ) );
+
+ assertResults( new String[] { "archiva-common", "continuum-webapp", "redback-authorization-open",
+ "daytrader-ear", "maven-archetype-simple", "maven-help-plugin", "wagon-provider-api" }, results );
+ }
+
+ public void testMatchClassifierJdk15() throws Exception
+ {
+ assertQueryMatch( ArtifactKeys.CLASSIFIER, new String[] { "testng" }, "jdk15" );
+ }
+
+ public void testMatchClassifierInvalid() throws Exception
+ {
+ assertQueryMatchNoResults( ArtifactKeys.CLASSIFIER, "redo" );
+ }
+}
diff --git a/archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/lucene/LuceneMinimalArtifactIndexSearchTest.java b/archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/lucene/LuceneMinimalArtifactIndexSearchTest.java
deleted file mode 100644
index 48c959f93..000000000
--- a/archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/lucene/LuceneMinimalArtifactIndexSearchTest.java
+++ /dev/null
@@ -1,231 +0,0 @@
-package org.apache.maven.archiva.indexer.lucene;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import org.apache.commons.io.FileUtils;
-import org.apache.lucene.index.Term;
-import org.apache.lucene.queryParser.ParseException;
-import org.apache.lucene.queryParser.QueryParser;
-import org.apache.lucene.search.Query;
-import org.apache.lucene.search.TermQuery;
-import org.apache.maven.archiva.indexer.RepositoryArtifactIndex;
-import org.apache.maven.archiva.indexer.RepositoryArtifactIndexFactory;
-import org.apache.maven.archiva.indexer.RepositoryIndexSearchException;
-import org.apache.maven.archiva.indexer.record.MinimalIndexRecordFields;
-import org.apache.maven.archiva.indexer.record.RepositoryIndexRecordFactory;
-import org.apache.maven.artifact.Artifact;
-import org.apache.maven.artifact.factory.ArtifactFactory;
-import org.apache.maven.artifact.repository.ArtifactRepository;
-import org.apache.maven.artifact.repository.ArtifactRepositoryFactory;
-import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout;
-import org.apache.maven.artifact.versioning.VersionRange;
-import org.codehaus.plexus.PlexusTestCase;
-
-import java.io.File;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-/**
- * Test the Lucene implementation of the artifact index search.
- *
- * @author <a href="mailto:brett@apache.org">Brett Porter</a>
- * @todo would be nice to abstract some of the query away, but for now passing in a Lucene query directly is good enough
- */
-public class LuceneMinimalArtifactIndexSearchTest
- extends PlexusTestCase
-{
- private RepositoryArtifactIndex index;
-
- private ArtifactRepository repository;
-
- private ArtifactFactory artifactFactory;
-
- private File indexLocation;
-
- private RepositoryIndexRecordFactory recordFactory;
-
- private Map records = new HashMap();
-
- protected void setUp()
- throws Exception
- {
- super.setUp();
-
- recordFactory = (RepositoryIndexRecordFactory) lookup( RepositoryIndexRecordFactory.ROLE, "minimal" );
-
- artifactFactory = (ArtifactFactory) lookup( ArtifactFactory.ROLE );
-
- ArtifactRepositoryFactory repositoryFactory =
- (ArtifactRepositoryFactory) lookup( ArtifactRepositoryFactory.ROLE );
-
- ArtifactRepositoryLayout layout = (ArtifactRepositoryLayout) lookup( ArtifactRepositoryLayout.ROLE, "default" );
-
- File file = getTestFile( "src/test/managed-repository" );
- repository =
- repositoryFactory.createArtifactRepository( "test", file.toURI().toURL().toString(), layout, null, null );
-
- RepositoryArtifactIndexFactory factory =
- (RepositoryArtifactIndexFactory) lookup( RepositoryArtifactIndexFactory.ROLE, "lucene" );
-
- indexLocation = getTestFile( "target/test-index" );
-
- FileUtils.deleteDirectory( indexLocation );
-
- index = factory.createMinimalIndex( indexLocation );
-
- records.put( "test-jar", recordFactory.createRecord( createArtifact( "test-jar" ) ) );
- records.put( "test-jar-jdk14",
- recordFactory.createRecord( createArtifact( "test-jar", "1.0", "jar", "jdk14" ) ) );
- records.put( "test-jar-and-pom",
- recordFactory.createRecord( createArtifact( "test-jar-and-pom", "1.0-alpha-1", "jar" ) ) );
- records.put( "test-jar-and-pom-jdk14", recordFactory.createRecord(
- createArtifact( "test-jar-and-pom", "1.0-alpha-1", "jar", "jdk14" ) ) );
- records.put( "test-child-pom",
- recordFactory.createRecord( createArtifact( "test-child-pom", "1.0-20060728.121314-1", "jar" ) ) );
- records.put( "test-archetype", recordFactory.createRecord( createArtifact( "test-archetype" ) ) );
- records.put( "test-plugin", recordFactory.createRecord( createArtifact( "test-plugin" ) ) );
- records.put( "test-pom", recordFactory.createRecord( createArtifact( "test-pom", "1.0", "pom" ) ) );
- records.put( "parent-pom", recordFactory.createRecord( createArtifact( "parent-pom", "1", "pom" ) ) );
- records.put( "test-dll", recordFactory.createRecord( createArtifact( "test-dll", "1.0.1.34", "dll" ) ) );
-
- index.indexRecords( records.values() );
- }
-
- public void testExactMatchMd5()
- throws RepositoryIndexSearchException
- {
- Query query = createExactMatchQuery( MinimalIndexRecordFields.MD5, "3a0adc365f849366cd8b633cad155cb7" );
- List results = index.search( new LuceneQuery( query ) );
-
- assertTrue( "Check result", results.contains( records.get( "test-jar" ) ) );
- assertTrue( "Check result", results.contains( records.get( "test-jar-jdk14" ) ) );
- assertTrue( "Check result", results.contains( records.get( "test-jar-and-pom" ) ) );
- assertTrue( "Check result", results.contains( records.get( "test-jar-and-pom-jdk14" ) ) );
- assertTrue( "Check result", results.contains( records.get( "test-child-pom" ) ) );
- assertEquals( "Check results size", 5, results.size() );
-
- // test non-match fails
- query = createExactMatchQuery( MinimalIndexRecordFields.MD5, "foo" );
- results = index.search( new LuceneQuery( query ) );
-
- assertTrue( "Check results size", results.isEmpty() );
- }
-
- public void testMatchFilename()
- throws RepositoryIndexSearchException, ParseException
- {
- Query query = createMatchQuery( MinimalIndexRecordFields.FILENAME, "maven" );
- List results = index.search( new LuceneQuery( query ) );
-
- assertFalse( "Check result", results.contains( records.get( "test-pom" ) ) );
- assertFalse( "Check result", results.contains( records.get( "parent-pom" ) ) );
- assertFalse( "Check result", results.contains( records.get( "test-dll" ) ) );
- assertEquals( "Check results size", 7, results.size() );
-
- query = createMatchQuery( MinimalIndexRecordFields.FILENAME, "plugin" );
- results = index.search( new LuceneQuery( query ) );
-
- assertTrue( "Check result", results.contains( records.get( "test-plugin" ) ) );
- assertEquals( "Check results size", 1, results.size() );
-
- query = createMatchQuery( MinimalIndexRecordFields.FILENAME, "test" );
- results = index.search( new LuceneQuery( query ) );
-
- assertFalse( "Check result", results.contains( records.get( "parent-pom" ) ) );
- assertFalse( "Check result", results.contains( records.get( "test-pom" ) ) );
- assertFalse( "Check result", results.contains( records.get( "test-dll" ) ) );
- assertEquals( "Check results size", 7, results.size() );
-
- // test non-match fails
- query = createMatchQuery( MinimalIndexRecordFields.FILENAME, "foo" );
- results = index.search( new LuceneQuery( query ) );
-
- assertTrue( "Check results size", results.isEmpty() );
- }
-
- public void testMatchClass()
- throws RepositoryIndexSearchException, ParseException
- {
- Query query = createMatchQuery( MinimalIndexRecordFields.CLASSES, "b.c.C" );
- List results = index.search( new LuceneQuery( query ) );
-
- assertTrue( "Check result", results.contains( records.get( "test-child-pom" ) ) );
- assertTrue( "Check result", results.contains( records.get( "test-jar" ) ) );
- assertTrue( "Check result", results.contains( records.get( "test-jar-jdk14" ) ) );
- assertTrue( "Check result", results.contains( records.get( "test-jar-and-pom" ) ) );
- assertTrue( "Check result", results.contains( records.get( "test-jar-and-pom-jdk14" ) ) );
- assertEquals( "Check results size", 5, results.size() );
-
- query = createMatchQuery( MinimalIndexRecordFields.CLASSES, "C" );
- results = index.search( new LuceneQuery( query ) );
-
- assertTrue( "Check result", results.contains( records.get( "test-child-pom" ) ) );
- assertTrue( "Check result", results.contains( records.get( "test-jar" ) ) );
- assertTrue( "Check result", results.contains( records.get( "test-jar-jdk14" ) ) );
- assertTrue( "Check result", results.contains( records.get( "test-jar-and-pom" ) ) );
- assertTrue( "Check result", results.contains( records.get( "test-jar-and-pom-jdk14" ) ) );
- assertEquals( "Check results size", 5, results.size() );
-
- query = createMatchQuery( MinimalIndexRecordFields.CLASSES, "MyMojo" );
- results = index.search( new LuceneQuery( query ) );
-
- assertTrue( "Check result", results.contains( records.get( "test-plugin" ) ) );
- assertEquals( "Check results size", 1, results.size() );
-
- // test non-match fails
- query = createMatchQuery( MinimalIndexRecordFields.CLASSES, "foo" );
- results = index.search( new LuceneQuery( query ) );
-
- assertTrue( "Check results size", results.isEmpty() );
- }
-
- private static Query createExactMatchQuery( String field, String value )
- {
- return new TermQuery( new Term( field, value ) );
- }
-
- private static Query createMatchQuery( String field, String value )
- throws ParseException
- {
- return new QueryParser( field, LuceneRepositoryArtifactIndex.getAnalyzer() ).parse( value );
- }
-
- private Artifact createArtifact( String artifactId )
- {
- return createArtifact( artifactId, "1.0", "jar", null );
- }
-
- private Artifact createArtifact( String artifactId, String version, String type )
- {
- return createArtifact( artifactId, version, type, null );
- }
-
- private Artifact createArtifact( String artifactId, String version, String type, String classifier )
- {
- Artifact artifact = artifactFactory.createDependencyArtifact( "org.apache.maven.archiva.record", artifactId,
- VersionRange.createFromVersion( version ), type,
- classifier, Artifact.SCOPE_RUNTIME );
- artifact.isSnapshot();
- artifact.setFile( new File( repository.getBasedir(), repository.pathOf( artifact ) ) );
- artifact.setRepository( repository );
- return artifact;
- }
-}
diff --git a/archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/lucene/LuceneMinimalArtifactIndexTest.java b/archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/lucene/LuceneMinimalArtifactIndexTest.java
deleted file mode 100644
index c3b8c77f6..000000000
--- a/archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/lucene/LuceneMinimalArtifactIndexTest.java
+++ /dev/null
@@ -1,353 +0,0 @@
-package org.apache.maven.archiva.indexer.lucene;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import org.apache.commons.io.FileUtils;
-import org.apache.lucene.document.Document;
-import org.apache.lucene.document.NumberTools;
-import org.apache.lucene.index.IndexReader;
-import org.apache.lucene.index.IndexWriter;
-import org.apache.maven.archiva.indexer.RepositoryArtifactIndex;
-import org.apache.maven.archiva.indexer.RepositoryArtifactIndexFactory;
-import org.apache.maven.archiva.indexer.RepositoryIndexException;
-import org.apache.maven.archiva.indexer.record.MinimalIndexRecordFields;
-import org.apache.maven.archiva.indexer.record.RepositoryIndexRecord;
-import org.apache.maven.archiva.indexer.record.RepositoryIndexRecordFactory;
-import org.apache.maven.artifact.Artifact;
-import org.apache.maven.artifact.factory.ArtifactFactory;
-import org.apache.maven.artifact.repository.ArtifactRepository;
-import org.apache.maven.artifact.repository.ArtifactRepositoryFactory;
-import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout;
-import org.codehaus.plexus.PlexusTestCase;
-import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
-
-import java.io.File;
-import java.io.IOException;
-import java.text.SimpleDateFormat;
-import java.util.Collections;
-import java.util.Date;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Locale;
-import java.util.TimeZone;
-
-/**
- * Test the Lucene implementation of the artifact index.
- *
- * @author <a href="mailto:brett@apache.org">Brett Porter</a>
- */
-public class LuceneMinimalArtifactIndexTest
- extends PlexusTestCase
-{
- private RepositoryArtifactIndex index;
-
- private ArtifactRepository repository;
-
- private ArtifactFactory artifactFactory;
-
- private File indexLocation;
-
- private RepositoryIndexRecordFactory recordFactory;
-
- protected void setUp()
- throws Exception
- {
- super.setUp();
-
- recordFactory = (RepositoryIndexRecordFactory) lookup( RepositoryIndexRecordFactory.ROLE, "minimal" );
-
- artifactFactory = (ArtifactFactory) lookup( ArtifactFactory.ROLE );
-
- ArtifactRepositoryFactory repositoryFactory =
- (ArtifactRepositoryFactory) lookup( ArtifactRepositoryFactory.ROLE );
-
- ArtifactRepositoryLayout layout = (ArtifactRepositoryLayout) lookup( ArtifactRepositoryLayout.ROLE, "default" );
-
- File file = getTestFile( "src/test/managed-repository" );
- repository =
- repositoryFactory.createArtifactRepository( "test", file.toURI().toURL().toString(), layout, null, null );
-
- RepositoryArtifactIndexFactory factory =
- (RepositoryArtifactIndexFactory) lookup( RepositoryArtifactIndexFactory.ROLE, "lucene" );
-
- indexLocation = getTestFile( "target/test-index" );
-
- FileUtils.deleteDirectory( indexLocation );
-
- index = factory.createMinimalIndex( indexLocation );
- }
-
- public void testIndexExists()
- throws IOException, RepositoryIndexException
- {
- assertFalse( "check index doesn't exist", index.exists() );
-
- // create empty directory
- indexLocation.mkdirs();
- assertFalse( "check index doesn't exist even if directory does", index.exists() );
-
- // create index, with no records
- createEmptyIndex();
- assertTrue( "check index is considered to exist", index.exists() );
-
- // Test non-directory
- FileUtils.deleteDirectory( indexLocation );
- indexLocation.createNewFile();
- try
- {
- index.exists();
- fail( "Index operation should fail as the location is not valid" );
- }
- catch ( RepositoryIndexException e )
- {
- // great
- }
- finally
- {
- indexLocation.delete();
- }
- }
-
- public void testAddRecordNoIndex()
- throws IOException, RepositoryIndexException
- {
- Artifact artifact = createArtifact( "test-jar" );
-
- RepositoryIndexRecord record = recordFactory.createRecord( artifact );
- index.indexRecords( Collections.singletonList( record ) );
-
- IndexReader reader = IndexReader.open( indexLocation );
- try
- {
- Document document = reader.document( 0 );
- assertEquals( "Check document", repository.pathOf( artifact ),
- document.get( MinimalIndexRecordFields.FILENAME ) );
- assertEquals( "Check index size", 1, reader.numDocs() );
- }
- finally
- {
- reader.close();
- }
- }
-
- public void testAddRecordExistingEmptyIndex()
- throws IOException, RepositoryIndexException
- {
- createEmptyIndex();
-
- Artifact artifact = createArtifact( "test-jar" );
-
- RepositoryIndexRecord record = recordFactory.createRecord( artifact );
- index.indexRecords( Collections.singletonList( record ) );
-
- IndexReader reader = IndexReader.open( indexLocation );
- try
- {
- Document document = reader.document( 0 );
- assertRecord( document, artifact, "3a0adc365f849366cd8b633cad155cb7", "A\nb.B\nb.c.C" );
- assertEquals( "Check index size", 1, reader.numDocs() );
- }
- finally
- {
- reader.close();
- }
- }
-
- public void testAddRecordInIndex()
- throws IOException, RepositoryIndexException
- {
- createEmptyIndex();
-
- Artifact artifact = createArtifact( "test-jar" );
-
- RepositoryIndexRecord record = recordFactory.createRecord( artifact );
- index.indexRecords( Collections.singletonList( record ) );
-
- // Do it again
- record = recordFactory.createRecord( artifact );
- index.indexRecords( Collections.singletonList( record ) );
-
- IndexReader reader = IndexReader.open( indexLocation );
- try
- {
- Document document = reader.document( 0 );
- assertRecord( document, artifact, "3a0adc365f849366cd8b633cad155cb7", "A\nb.B\nb.c.C" );
- assertEquals( "Check index size", 1, reader.numDocs() );
- }
- finally
- {
- reader.close();
- }
- }
-
- public void testDeleteRecordInIndex()
- throws IOException, RepositoryIndexException
- {
- createEmptyIndex();
-
- Artifact artifact = createArtifact( "test-jar" );
-
- RepositoryIndexRecord record = recordFactory.createRecord( artifact );
- index.indexRecords( Collections.singletonList( record ) );
-
- index.deleteRecords( Collections.singletonList( record ) );
-
- IndexReader reader = IndexReader.open( indexLocation );
- try
- {
- assertEquals( "No documents", 0, reader.numDocs() );
- }
- finally
- {
- reader.close();
- }
- }
-
- public void testDeleteRecordNotInIndex()
- throws IOException, RepositoryIndexException
- {
- createEmptyIndex();
-
- Artifact artifact = createArtifact( "test-jar" );
-
- RepositoryIndexRecord record = recordFactory.createRecord( artifact );
-
- index.deleteRecords( Collections.singletonList( record ) );
-
- IndexReader reader = IndexReader.open( indexLocation );
- try
- {
- assertEquals( "No documents", 0, reader.numDocs() );
- }
- finally
- {
- reader.close();
- }
- }
-
- public void testDeleteRecordNoIndex()
- throws IOException, RepositoryIndexException
- {
- Artifact artifact = createArtifact( "test-jar" );
-
- RepositoryIndexRecord record = recordFactory.createRecord( artifact );
- index.deleteRecords( Collections.singleton( record ) );
-
- assertFalse( index.exists() );
- }
-
- public void testAddPomRecord()
- throws IOException, RepositoryIndexException
- {
- createEmptyIndex();
-
- Artifact artifact = createArtifact( "test-pom", "1.0", "pom" );
-
- RepositoryIndexRecord record = recordFactory.createRecord( artifact );
- index.indexRecords( Collections.singletonList( record ) );
-
- IndexReader reader = IndexReader.open( indexLocation );
- try
- {
- assertEquals( "No documents", 0, reader.numDocs() );
- }
- finally
- {
- reader.close();
- }
- }
-
- public void testAddPlugin()
- throws IOException, RepositoryIndexException, XmlPullParserException
- {
- createEmptyIndex();
-
- Artifact artifact = createArtifact( "test-plugin" );
-
- RepositoryIndexRecord record = recordFactory.createRecord( artifact );
-
- index.indexRecords( Collections.singletonList( record ) );
-
- IndexReader reader = IndexReader.open( indexLocation );
- try
- {
- Document document = reader.document( 0 );
- assertRecord( document, artifact, "3530896791670ebb45e17708e5d52c40",
- "org.apache.maven.archiva.record.MyMojo" );
- assertEquals( "Check index size", 1, reader.numDocs() );
- }
- finally
- {
- reader.close();
- }
- }
-
- private Artifact createArtifact( String artifactId )
- {
- return createArtifact( artifactId, "1.0", "jar" );
- }
-
- private Artifact createArtifact( String artifactId, String version, String type )
- {
- Artifact artifact =
- artifactFactory.createBuildArtifact( "org.apache.maven.archiva.record", artifactId, version, type );
- artifact.setFile( new File( repository.getBasedir(), repository.pathOf( artifact ) ) );
- artifact.setRepository( repository );
- return artifact;
- }
-
- private void createEmptyIndex()
- throws IOException
- {
- createIndex( Collections.EMPTY_LIST );
- }
-
- private void createIndex( List docments )
- throws IOException
- {
- IndexWriter writer = new IndexWriter( indexLocation, LuceneRepositoryArtifactIndex.getAnalyzer(), true );
- for ( Iterator i = docments.iterator(); i.hasNext(); )
- {
- Document document = (Document) i.next();
- writer.addDocument( document );
- }
- writer.optimize();
- writer.close();
- }
-
- private void assertRecord( Document document, Artifact artifact, String expectedChecksum, String expectedClasses )
- {
- assertEquals( "Check document filename", repository.pathOf( artifact ),
- document.get( MinimalIndexRecordFields.FILENAME ) );
- assertEquals( "Check document timestamp", getLastModified( artifact.getFile() ),
- document.get( MinimalIndexRecordFields.LAST_MODIFIED ) );
- assertEquals( "Check document checksum", expectedChecksum, document.get( MinimalIndexRecordFields.MD5 ) );
- assertEquals( "Check document size", artifact.getFile().length(),
- NumberTools.stringToLong( document.get( MinimalIndexRecordFields.FILE_SIZE ) ) );
- assertEquals( "Check document classes", expectedClasses, document.get( MinimalIndexRecordFields.CLASSES ) );
- }
-
- private String getLastModified( File file )
- {
- SimpleDateFormat dateFormat = new SimpleDateFormat( "yyyyMMddHHmmss", Locale.US );
- dateFormat.setTimeZone( TimeZone.getTimeZone( "UTC" ) );
- return dateFormat.format( new Date( file.lastModified() ) );
- }
-}
diff --git a/archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/lucene/LuceneStandardArtifactIndexSearchTest.java b/archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/lucene/LuceneStandardArtifactIndexSearchTest.java
deleted file mode 100644
index ba3b6d1b5..000000000
--- a/archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/lucene/LuceneStandardArtifactIndexSearchTest.java
+++ /dev/null
@@ -1,790 +0,0 @@
-package org.apache.maven.archiva.indexer.lucene;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import org.apache.commons.io.FileUtils;
-import org.apache.lucene.index.Term;
-import org.apache.lucene.queryParser.ParseException;
-import org.apache.lucene.queryParser.QueryParser;
-import org.apache.lucene.search.BooleanClause;
-import org.apache.lucene.search.BooleanQuery;
-import org.apache.lucene.search.MatchAllDocsQuery;
-import org.apache.lucene.search.Query;
-import org.apache.lucene.search.TermQuery;
-import org.apache.maven.archiva.indexer.RepositoryArtifactIndex;
-import org.apache.maven.archiva.indexer.RepositoryArtifactIndexFactory;
-import org.apache.maven.archiva.indexer.RepositoryIndexSearchException;
-import org.apache.maven.archiva.indexer.record.RepositoryIndexRecordFactory;
-import org.apache.maven.archiva.indexer.record.StandardIndexRecordFields;
-import org.apache.maven.artifact.Artifact;
-import org.apache.maven.artifact.factory.ArtifactFactory;
-import org.apache.maven.artifact.repository.ArtifactRepository;
-import org.apache.maven.artifact.repository.ArtifactRepositoryFactory;
-import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout;
-import org.apache.maven.artifact.versioning.VersionRange;
-import org.codehaus.plexus.PlexusTestCase;
-
-import java.io.File;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-/**
- * Test the Lucene implementation of the artifact index search.
- *
- * @author <a href="mailto:brett@apache.org">Brett Porter</a>
- * @todo would be nice to abstract some of the query away, but for now passing in a Lucene query directly is good enough
- */
-public class LuceneStandardArtifactIndexSearchTest
- extends PlexusTestCase
-{
- private RepositoryArtifactIndex index;
-
- private ArtifactRepository repository;
-
- private ArtifactFactory artifactFactory;
-
- private File indexLocation;
-
- private RepositoryIndexRecordFactory recordFactory;
-
- private Map records = new HashMap();
-
- protected void setUp()
- throws Exception
- {
- super.setUp();
-
- recordFactory = (RepositoryIndexRecordFactory) lookup( RepositoryIndexRecordFactory.ROLE, "standard" );
-
- artifactFactory = (ArtifactFactory) lookup( ArtifactFactory.ROLE );
-
- ArtifactRepositoryFactory repositoryFactory =
- (ArtifactRepositoryFactory) lookup( ArtifactRepositoryFactory.ROLE );
-
- ArtifactRepositoryLayout layout = (ArtifactRepositoryLayout) lookup( ArtifactRepositoryLayout.ROLE, "default" );
-
- File file = getTestFile( "src/test/managed-repository" );
- repository =
- repositoryFactory.createArtifactRepository( "test", file.toURI().toURL().toString(), layout, null, null );
-
- RepositoryArtifactIndexFactory factory =
- (RepositoryArtifactIndexFactory) lookup( RepositoryArtifactIndexFactory.ROLE, "lucene" );
-
- indexLocation = getTestFile( "target/test-index" );
-
- FileUtils.deleteDirectory( indexLocation );
-
- index = factory.createStandardIndex( indexLocation );
-
- records.put( "test-jar", recordFactory.createRecord( createArtifact( "test-jar" ) ) );
- records.put( "test-jar-jdk14",
- recordFactory.createRecord( createArtifact( "test-jar", "1.0", "jar", "jdk14" ) ) );
- records.put( "test-jar-and-pom",
- recordFactory.createRecord( createArtifact( "test-jar-and-pom", "1.0-alpha-1", "jar" ) ) );
- records.put( "test-jar-and-pom-jdk14", recordFactory.createRecord(
- createArtifact( "test-jar-and-pom", "1.0-alpha-1", "jar", "jdk14" ) ) );
- records.put( "test-child-pom",
- recordFactory.createRecord( createArtifact( "test-child-pom", "1.0-20060728.121314-1", "jar" ) ) );
- records.put( "test-archetype", recordFactory.createRecord( createArtifact( "test-archetype" ) ) );
- records.put( "test-plugin", recordFactory.createRecord( createArtifact( "test-plugin" ) ) );
- records.put( "test-pom", recordFactory.createRecord( createArtifact( "test-pom", "1.0", "pom" ) ) );
- records.put( "parent-pom", recordFactory.createRecord( createArtifact( "parent-pom", "1", "pom" ) ) );
- records.put( "test-dll", recordFactory.createRecord( createArtifact( "test-dll", "1.0.1.34", "dll" ) ) );
-
- index.indexRecords( records.values() );
- }
-
- public void testExactMatchVersion()
- throws RepositoryIndexSearchException
- {
- Query query = createExactMatchQuery( StandardIndexRecordFields.VERSION_EXACT, "1.0" );
- List results = index.search( new LuceneQuery( query ) );
-
- assertTrue( "Check result", results.contains( records.get( "test-jar" ) ) );
- assertTrue( "Check result", results.contains( records.get( "test-jar-jdk14" ) ) );
- assertTrue( "Check result", results.contains( records.get( "test-pom" ) ) );
- assertTrue( "Check result", results.contains( records.get( "test-plugin" ) ) );
- assertTrue( "Check result", results.contains( records.get( "test-archetype" ) ) );
- assertEquals( "Check results size", 5, results.size() );
-
- query = createExactMatchQuery( StandardIndexRecordFields.VERSION_EXACT, "1.0-SNAPSHOT" );
- results = index.search( new LuceneQuery( query ) );
-
- assertTrue( "Check results size", results.isEmpty() );
-
- query = createExactMatchQuery( StandardIndexRecordFields.VERSION_EXACT, "1.0-snapshot" );
- results = index.search( new LuceneQuery( query ) );
-
- assertTrue( "Check results size", results.isEmpty() );
-
- query = createExactMatchQuery( StandardIndexRecordFields.VERSION_EXACT, "1.0-20060728.121314-1" );
- results = index.search( new LuceneQuery( query ) );
-
- assertTrue( "Check result", results.contains( records.get( "test-child-pom" ) ) );
- assertEquals( "Check results size", 1, results.size() );
-
- // test non-match fails
- query = createExactMatchQuery( StandardIndexRecordFields.VERSION_EXACT, "foo" );
- results = index.search( new LuceneQuery( query ) );
-
- assertTrue( "Check results size", results.isEmpty() );
- }
-
- public void testExactMatchBaseVersion()
- throws RepositoryIndexSearchException
- {
- Query query = createExactMatchQuery( StandardIndexRecordFields.BASE_VERSION_EXACT, "1.0" );
- List results = index.search( new LuceneQuery( query ) );
-
- assertTrue( "Check result", results.contains( records.get( "test-jar" ) ) );
- assertTrue( "Check result", results.contains( records.get( "test-jar-jdk14" ) ) );
- assertTrue( "Check result", results.contains( records.get( "test-pom" ) ) );
- assertTrue( "Check result", results.contains( records.get( "test-plugin" ) ) );
- assertTrue( "Check result", results.contains( records.get( "test-archetype" ) ) );
- assertEquals( "Check results size", 5, results.size() );
-
- query = createExactMatchQuery( StandardIndexRecordFields.BASE_VERSION_EXACT, "1.0-SNAPSHOT" );
- results = index.search( new LuceneQuery( query ) );
-
- assertTrue( "Check result", results.contains( records.get( "test-child-pom" ) ) );
- assertEquals( "Check results size", 1, results.size() );
-
- query = createExactMatchQuery( StandardIndexRecordFields.BASE_VERSION_EXACT, "1.0-snapshot" );
- results = index.search( new LuceneQuery( query ) );
-
- assertTrue( "Check results size", results.isEmpty() );
-
- query = createExactMatchQuery( StandardIndexRecordFields.BASE_VERSION_EXACT, "1.0-20060728.121314-1" );
- results = index.search( new LuceneQuery( query ) );
-
- assertTrue( "Check results size", results.isEmpty() );
-
- // test non-match fails
- query = createExactMatchQuery( StandardIndexRecordFields.BASE_VERSION_EXACT, "foo" );
- results = index.search( new LuceneQuery( query ) );
-
- assertTrue( "Check results size", results.isEmpty() );
- }
-
- public void testExactMatchGroupId()
- throws RepositoryIndexSearchException
- {
- Query query =
- createExactMatchQuery( StandardIndexRecordFields.GROUPID_EXACT, "org.apache.maven.archiva.record" );
- List results = index.search( new LuceneQuery( query ) );
-
- assertEquals( "Check results size", 10, results.size() );
-
- // test partial match fails
- query = createExactMatchQuery( StandardIndexRecordFields.GROUPID_EXACT, "org.apache.maven" );
- results = index.search( new LuceneQuery( query ) );
-
- assertTrue( "Check results size", results.isEmpty() );
-
- // test non-match fails
- query = createExactMatchQuery( StandardIndexRecordFields.GROUPID_EXACT, "foo" );
- results = index.search( new LuceneQuery( query ) );
-
- assertTrue( "Check results size", results.isEmpty() );
- }
-
- public void testExactMatchArtifactId()
- throws RepositoryIndexSearchException
- {
- Query query = createExactMatchQuery( StandardIndexRecordFields.ARTIFACTID_EXACT, "test-jar" );
- List results = index.search( new LuceneQuery( query ) );
-
- assertTrue( "Check result", results.contains( records.get( "test-jar" ) ) );
- assertTrue( "Check result", results.contains( records.get( "test-jar-jdk14" ) ) );
- assertEquals( "Check results size", 2, results.size() );
-
- // test partial match fails
- query = createExactMatchQuery( StandardIndexRecordFields.ARTIFACTID_EXACT, "test" );
- results = index.search( new LuceneQuery( query ) );
-
- assertTrue( "Check results size", results.isEmpty() );
-
- // test non-match fails
- query = createExactMatchQuery( StandardIndexRecordFields.ARTIFACTID_EXACT, "foo" );
- results = index.search( new LuceneQuery( query ) );
-
- assertTrue( "Check results size", results.isEmpty() );
- }
-
- public void testExactMatchType()
- throws RepositoryIndexSearchException
- {
- Query query = createExactMatchQuery( StandardIndexRecordFields.TYPE, "maven-plugin" );
- List results = index.search( new LuceneQuery( query ) );
-
- assertTrue( "Check result", results.contains( records.get( "test-plugin" ) ) );
- assertEquals( "Check results size", 1, results.size() );
-
- query = createExactMatchQuery( StandardIndexRecordFields.TYPE, "jar" );
- results = index.search( new LuceneQuery( query ) );
-
- assertTrue( "Check result", results.contains( records.get( "test-jar" ) ) );
- assertTrue( "Check result", results.contains( records.get( "test-jar-jdk14" ) ) );
- assertTrue( "Check result", results.contains( records.get( "test-jar-and-pom" ) ) );
- assertTrue( "Check result", results.contains( records.get( "test-jar-and-pom-jdk14" ) ) );
- assertTrue( "Check result", results.contains( records.get( "test-child-pom" ) ) );
- assertEquals( "Check results size", 5, results.size() );
-
- query = createExactMatchQuery( StandardIndexRecordFields.TYPE, "dll" );
- results = index.search( new LuceneQuery( query ) );
-
- assertTrue( "Check result", results.contains( records.get( "test-dll" ) ) );
- assertEquals( "Check results size", 1, results.size() );
-
- query = createExactMatchQuery( StandardIndexRecordFields.TYPE, "maven-archetype" );
- results = index.search( new LuceneQuery( query ) );
-
- assertTrue( "Check result", results.contains( records.get( "test-archetype" ) ) );
- assertEquals( "Check results size", 1, results.size() );
-
- // test non-match fails
- query = createExactMatchQuery( StandardIndexRecordFields.TYPE, "foo" );
- results = index.search( new LuceneQuery( query ) );
-
- assertTrue( "Check results size", results.isEmpty() );
- }
-
- public void testExactMatchPackaging()
- throws RepositoryIndexSearchException
- {
- Query query = createExactMatchQuery( StandardIndexRecordFields.PACKAGING, "maven-plugin" );
- List results = index.search( new LuceneQuery( query ) );
-
- assertTrue( "Check result", results.contains( records.get( "test-plugin" ) ) );
- assertEquals( "Check results size", 1, results.size() );
-
- query = createExactMatchQuery( StandardIndexRecordFields.PACKAGING, "jar" );
- results = index.search( new LuceneQuery( query ) );
-
- assertTrue( "Check result", results.contains( records.get( "test-archetype" ) ) );
- assertTrue( "Check result", results.contains( records.get( "test-jar-and-pom" ) ) );
- assertTrue( "Check result", results.contains( records.get( "test-jar-and-pom-jdk14" ) ) );
- assertTrue( "Check result", results.contains( records.get( "test-child-pom" ) ) );
- assertEquals( "Check results size", 4, results.size() );
-
- query = createExactMatchQuery( StandardIndexRecordFields.PACKAGING, "dll" );
- results = index.search( new LuceneQuery( query ) );
-
- assertTrue( "Check results size", results.isEmpty() );
-
- query = createExactMatchQuery( StandardIndexRecordFields.PACKAGING, "maven-archetype" );
- results = index.search( new LuceneQuery( query ) );
-
- assertTrue( "Check results size", results.isEmpty() );
-
- // test non-match fails
- query = createExactMatchQuery( StandardIndexRecordFields.PACKAGING, "foo" );
- results = index.search( new LuceneQuery( query ) );
-
- assertTrue( "Check results size", results.isEmpty() );
- }
-
- public void testExactMatchPluginPrefix()
- throws RepositoryIndexSearchException
- {
- Query query = createExactMatchQuery( StandardIndexRecordFields.PLUGIN_PREFIX, "test" );
- List results = index.search( new LuceneQuery( query ) );
-
- assertTrue( "Check result", results.contains( records.get( "test-plugin" ) ) );
- assertEquals( "Check results size", 1, results.size() );
-
- // test non-match fails
- query = createExactMatchQuery( StandardIndexRecordFields.PLUGIN_PREFIX, "foo" );
- results = index.search( new LuceneQuery( query ) );
-
- assertTrue( "Check results size", results.isEmpty() );
- }
-
- public void testExactMatchRepository()
- throws RepositoryIndexSearchException
- {
- Query query = createExactMatchQuery( StandardIndexRecordFields.REPOSITORY, "test" );
- List results = index.search( new LuceneQuery( query ) );
-
- assertEquals( "Check results size", 10, results.size() );
-
- // test non-match fails
- query = createExactMatchQuery( StandardIndexRecordFields.REPOSITORY, "foo" );
- results = index.search( new LuceneQuery( query ) );
-
- assertTrue( "Check results size", results.isEmpty() );
- }
-
- public void testExactMatchMd5()
- throws RepositoryIndexSearchException
- {
- Query query = createExactMatchQuery( StandardIndexRecordFields.MD5, "3a0adc365f849366cd8b633cad155cb7" );
- List results = index.search( new LuceneQuery( query ) );
-
- assertTrue( "Check result", results.contains( records.get( "test-jar" ) ) );
- assertTrue( "Check result", results.contains( records.get( "test-jar-jdk14" ) ) );
- assertTrue( "Check result", results.contains( records.get( "test-jar-and-pom" ) ) );
- assertTrue( "Check result", results.contains( records.get( "test-jar-and-pom-jdk14" ) ) );
- assertTrue( "Check result", results.contains( records.get( "test-child-pom" ) ) );
- assertEquals( "Check results size", 5, results.size() );
-
- // test non-match fails
- query = createExactMatchQuery( StandardIndexRecordFields.MD5, "foo" );
- results = index.search( new LuceneQuery( query ) );
-
- assertTrue( "Check results size", results.isEmpty() );
- }
-
- public void testExactMatchSha1()
- throws RepositoryIndexSearchException
- {
- Query query =
- createExactMatchQuery( StandardIndexRecordFields.SHA1, "c66f18bf192cb613fc2febb4da541a34133eedc2" );
- List results = index.search( new LuceneQuery( query ) );
-
- assertTrue( "Check result", results.contains( records.get( "test-jar" ) ) );
- assertTrue( "Check result", results.contains( records.get( "test-jar-jdk14" ) ) );
- assertTrue( "Check result", results.contains( records.get( "test-jar-and-pom" ) ) );
- assertTrue( "Check result", results.contains( records.get( "test-jar-and-pom-jdk14" ) ) );
- assertTrue( "Check result", results.contains( records.get( "test-child-pom" ) ) );
- assertEquals( "Check results size", 5, results.size() );
-
- // test non-match fails
- query = createExactMatchQuery( StandardIndexRecordFields.SHA1, "foo" );
- results = index.search( new LuceneQuery( query ) );
-
- assertTrue( "Check results size", results.isEmpty() );
- }
-
- public void testExactMatchInceptionYear()
- throws RepositoryIndexSearchException
- {
- Query query = createExactMatchQuery( StandardIndexRecordFields.INCEPTION_YEAR, "2005" );
- List results = index.search( new LuceneQuery( query ) );
-
- assertTrue( "Check result", results.contains( records.get( "test-child-pom" ) ) );
- assertTrue( "Check result", results.contains( records.get( "test-pom" ) ) );
- assertTrue( "Check result", results.contains( records.get( "parent-pom" ) ) );
- assertEquals( "Check results size", 3, results.size() );
-
- // test non-match fails
- query = createExactMatchQuery( StandardIndexRecordFields.INCEPTION_YEAR, "foo" );
- results = index.search( new LuceneQuery( query ) );
-
- assertTrue( "Check results size", results.isEmpty() );
- }
-
- public void testMatchFilename()
- throws RepositoryIndexSearchException, ParseException
- {
- Query query = createMatchQuery( StandardIndexRecordFields.FILENAME, "maven" );
- List results = index.search( new LuceneQuery( query ) );
-
- assertEquals( "Check results size", 10, results.size() );
-
- query = createMatchQuery( StandardIndexRecordFields.FILENAME, "plugin" );
- results = index.search( new LuceneQuery( query ) );
-
- assertTrue( "Check result", results.contains( records.get( "test-plugin" ) ) );
- assertEquals( "Check results size", 1, results.size() );
-
- query = createMatchQuery( StandardIndexRecordFields.FILENAME, "pLuGiN" );
- results = index.search( new LuceneQuery( query ) );
-
- assertTrue( "Check results size", results.isEmpty() );
-
- query = createMatchQuery( StandardIndexRecordFields.FILENAME, "test" );
- results = index.search( new LuceneQuery( query ) );
-
- assertFalse( "Check result", results.contains( records.get( "parent-pom" ) ) );
- assertEquals( "Check results size", 9, results.size() );
-
- // test non-match fails
- query = createMatchQuery( StandardIndexRecordFields.FILENAME, "foo" );
- results = index.search( new LuceneQuery( query ) );
-
- assertTrue( "Check results size", results.isEmpty() );
- }
-
- public void testMatchGroupId()
- throws RepositoryIndexSearchException, ParseException
- {
- Query query = createMatchQuery( StandardIndexRecordFields.GROUPID, "org.apache.maven.archiva.record" );
- List results = index.search( new LuceneQuery( query ) );
-
- assertEquals( "Check results size", 10, results.size() );
-
- query = createMatchQuery( StandardIndexRecordFields.GROUPID, "maven" );
- results = index.search( new LuceneQuery( query ) );
-
- assertEquals( "Check results size", 10, results.size() );
-
- query = createMatchQuery( StandardIndexRecordFields.GROUPID, "Maven" );
- results = index.search( new LuceneQuery( query ) );
-
- assertEquals( "Check results size", 10, results.size() );
-
- // test non-match fails
- query = createMatchQuery( StandardIndexRecordFields.GROUPID, "foo" );
- results = index.search( new LuceneQuery( query ) );
-
- assertTrue( "Check results size", results.isEmpty() );
- }
-
- public void testMatchArtifactId()
- throws RepositoryIndexSearchException, ParseException
- {
- Query query = createMatchQuery( StandardIndexRecordFields.ARTIFACTID, "plugin" );
- List results = index.search( new LuceneQuery( query ) );
-
- assertTrue( "Check result", results.contains( records.get( "test-plugin" ) ) );
- assertEquals( "Check results size", 1, results.size() );
-
- query = createMatchQuery( StandardIndexRecordFields.ARTIFACTID, "test" );
- results = index.search( new LuceneQuery( query ) );
-
- assertFalse( "Check result", results.contains( records.get( "parent-pom" ) ) );
- assertEquals( "Check results size", 9, results.size() );
-
- // test non-match fails
- query = createMatchQuery( StandardIndexRecordFields.ARTIFACTID, "maven" );
- results = index.search( new LuceneQuery( query ) );
-
- assertTrue( "Check results size", results.isEmpty() );
- }
-
- public void testMatchVersion()
- throws RepositoryIndexSearchException, ParseException
- {
- // If partial matches are desired, need to change the analyzer for versions to split on '.'
- Query query = createMatchQuery( StandardIndexRecordFields.VERSION, "1" );
- List results = index.search( new LuceneQuery( query ) );
-
- assertTrue( "Check result", results.contains( records.get( "parent-pom" ) ) );
- assertTrue( "Check result", results.contains( records.get( "test-jar-and-pom" ) ) );
- assertTrue( "Check result", results.contains( records.get( "test-jar-and-pom-jdk14" ) ) );
- assertTrue( "Check result", results.contains( records.get( "test-child-pom" ) ) );
- assertEquals( "Check results size", 4, results.size() );
-
- query = createMatchQuery( StandardIndexRecordFields.VERSION, "1.0" );
- results = index.search( new LuceneQuery( query ) );
-
- assertTrue( "Check result", results.contains( records.get( "test-jar" ) ) );
- assertTrue( "Check result", results.contains( records.get( "test-jar-jdk14" ) ) );
- assertTrue( "Check result", results.contains( records.get( "test-plugin" ) ) );
- assertTrue( "Check result", results.contains( records.get( "test-pom" ) ) );
- assertTrue( "Check result", results.contains( records.get( "test-archetype" ) ) );
- assertTrue( "Check result", results.contains( records.get( "test-jar-and-pom" ) ) );
- assertTrue( "Check result", results.contains( records.get( "test-jar-and-pom-jdk14" ) ) );
- assertTrue( "Check result", results.contains( records.get( "test-child-pom" ) ) );
- assertEquals( "Check results size", 8, results.size() );
-
- query = createMatchQuery( StandardIndexRecordFields.VERSION, "snapshot" );
- results = index.search( new LuceneQuery( query ) );
-
- assertTrue( "Check results size", results.isEmpty() );
-
- query = createMatchQuery( StandardIndexRecordFields.VERSION, "SNAPSHOT" );
- results = index.search( new LuceneQuery( query ) );
-
- assertTrue( "Check results size", results.isEmpty() );
-
- query = createMatchQuery( StandardIndexRecordFields.VERSION, "alpha" );
- results = index.search( new LuceneQuery( query ) );
-
- assertTrue( "Check result", results.contains( records.get( "test-jar-and-pom" ) ) );
- assertTrue( "Check result", results.contains( records.get( "test-jar-and-pom-jdk14" ) ) );
- assertEquals( "Check results size", 2, results.size() );
-
- query = createMatchQuery( StandardIndexRecordFields.VERSION, "1.0-alpha-1" );
- results = index.search( new LuceneQuery( query ) );
-
- assertTrue( "Check result", results.contains( records.get( "test-jar-and-pom" ) ) );
- assertTrue( "Check result", results.contains( records.get( "test-jar-and-pom-jdk14" ) ) );
- assertEquals( "Check results size", 2, results.size() );
-
- // test non-match fails
- query = createMatchQuery( StandardIndexRecordFields.VERSION, "foo" );
- results = index.search( new LuceneQuery( query ) );
-
- assertTrue( "Check results size", results.isEmpty() );
- }
-
- public void testMatchBaseVersion()
- throws RepositoryIndexSearchException, ParseException
- {
- // If partial matches are desired, need to change the analyzer for versions to split on '.'
- Query query = createMatchQuery( StandardIndexRecordFields.BASE_VERSION, "1" );
- List results = index.search( new LuceneQuery( query ) );
-
- assertTrue( "Check result", results.contains( records.get( "parent-pom" ) ) );
- assertTrue( "Check result", results.contains( records.get( "test-jar-and-pom" ) ) );
- assertTrue( "Check result", results.contains( records.get( "test-jar-and-pom-jdk14" ) ) );
- assertEquals( "Check results size", 3, results.size() );
-
- query = createMatchQuery( StandardIndexRecordFields.BASE_VERSION, "1.0" );
- results = index.search( new LuceneQuery( query ) );
-
- assertTrue( "Check result", results.contains( records.get( "test-jar" ) ) );
- assertTrue( "Check result", results.contains( records.get( "test-jar-jdk14" ) ) );
- assertTrue( "Check result", results.contains( records.get( "test-plugin" ) ) );
- assertTrue( "Check result", results.contains( records.get( "test-pom" ) ) );
- assertTrue( "Check result", results.contains( records.get( "test-archetype" ) ) );
- assertTrue( "Check result", results.contains( records.get( "test-jar-and-pom" ) ) );
- assertTrue( "Check result", results.contains( records.get( "test-jar-and-pom-jdk14" ) ) );
- assertTrue( "Check result", results.contains( records.get( "test-child-pom" ) ) );
- assertEquals( "Check results size", 8, results.size() );
-
- query = createMatchQuery( StandardIndexRecordFields.BASE_VERSION, "SNAPSHOT" );
- results = index.search( new LuceneQuery( query ) );
-
- assertTrue( "Check result", results.contains( records.get( "test-child-pom" ) ) );
- assertEquals( "Check results size", 1, results.size() );
-
- query = createMatchQuery( StandardIndexRecordFields.BASE_VERSION, "SnApShOt" );
- results = index.search( new LuceneQuery( query ) );
-
- assertTrue( "Check results size", results.isEmpty() );
-
- query = createMatchQuery( StandardIndexRecordFields.BASE_VERSION, "snapshot" );
- results = index.search( new LuceneQuery( query ) );
-
- assertTrue( "Check results size", results.isEmpty() );
-
- query = createMatchQuery( StandardIndexRecordFields.BASE_VERSION, "alpha" );
- results = index.search( new LuceneQuery( query ) );
-
- assertTrue( "Check result", results.contains( records.get( "test-jar-and-pom" ) ) );
- assertTrue( "Check result", results.contains( records.get( "test-jar-and-pom-jdk14" ) ) );
- assertEquals( "Check results size", 2, results.size() );
-
- query = createMatchQuery( StandardIndexRecordFields.BASE_VERSION, "1.0-alpha-1" );
- results = index.search( new LuceneQuery( query ) );
-
- assertTrue( "Check result", results.contains( records.get( "test-jar-and-pom" ) ) );
- assertTrue( "Check result", results.contains( records.get( "test-jar-and-pom-jdk14" ) ) );
- assertEquals( "Check results size", 2, results.size() );
-
- // test non-match fails
- query = createMatchQuery( StandardIndexRecordFields.BASE_VERSION, "foo" );
- results = index.search( new LuceneQuery( query ) );
-
- assertTrue( "Check results size", results.isEmpty() );
- }
-
- public void testMatchClassifier()
- throws RepositoryIndexSearchException, ParseException
- {
- BooleanQuery bQuery = new BooleanQuery();
- bQuery.add( new MatchAllDocsQuery(), BooleanClause.Occur.MUST );
- bQuery.add( createMatchQuery( StandardIndexRecordFields.CLASSIFIER, "jdk14" ), BooleanClause.Occur.MUST_NOT );
- List results = index.search( new LuceneQuery( bQuery ) );
-
- assertFalse( "Check result", results.contains( records.get( "test-jar-jdk14" ) ) );
- assertFalse( "Check result", results.contains( records.get( "test-jar-and-pom-jdk14" ) ) );
- assertEquals( "Check results size", 8, results.size() );
-
- // TODO: can we search for "anything with no classifier" ?
-
- Query query = createMatchQuery( StandardIndexRecordFields.CLASSIFIER, "jdk14" );
- results = index.search( new LuceneQuery( query ) );
-
- assertTrue( "Check result", results.contains( records.get( "test-jar-jdk14" ) ) );
- assertTrue( "Check result", results.contains( records.get( "test-jar-and-pom-jdk14" ) ) );
- assertEquals( "Check results size", 2, results.size() );
-
- // test non-match fails
- query = createMatchQuery( StandardIndexRecordFields.CLASSIFIER, "foo" );
- results = index.search( new LuceneQuery( query ) );
-
- assertTrue( "Check results size", results.isEmpty() );
- }
-
- public void testMatchClass()
- throws RepositoryIndexSearchException, ParseException
- {
- Query query = createMatchQuery( StandardIndexRecordFields.CLASSES, "b.c.C" );
- List results = index.search( new LuceneQuery( query ) );
-
- assertTrue( "Check result", results.contains( records.get( "test-child-pom" ) ) );
- assertTrue( "Check result", results.contains( records.get( "test-jar" ) ) );
- assertTrue( "Check result", results.contains( records.get( "test-jar-jdk14" ) ) );
- assertTrue( "Check result", results.contains( records.get( "test-jar-and-pom" ) ) );
- assertTrue( "Check result", results.contains( records.get( "test-jar-and-pom-jdk14" ) ) );
- assertEquals( "Check results size", 5, results.size() );
-
- query = createMatchQuery( StandardIndexRecordFields.CLASSES, "C" );
- results = index.search( new LuceneQuery( query ) );
-
- assertTrue( "Check result", results.contains( records.get( "test-child-pom" ) ) );
- assertTrue( "Check result", results.contains( records.get( "test-jar" ) ) );
- assertTrue( "Check result", results.contains( records.get( "test-jar-jdk14" ) ) );
- assertTrue( "Check result", results.contains( records.get( "test-jar-and-pom" ) ) );
- assertTrue( "Check result", results.contains( records.get( "test-jar-and-pom-jdk14" ) ) );
- assertEquals( "Check results size", 5, results.size() );
-
- query = createMatchQuery( StandardIndexRecordFields.CLASSES, "MyMojo" );
- results = index.search( new LuceneQuery( query ) );
-
- assertTrue( "Check result", results.contains( records.get( "test-plugin" ) ) );
- assertEquals( "Check results size", 1, results.size() );
-
- query = createMatchQuery( StandardIndexRecordFields.CLASSES, "MYMOJO" );
- results = index.search( new LuceneQuery( query ) );
-
- assertTrue( "Check result", results.contains( records.get( "test-plugin" ) ) );
- assertEquals( "Check results size", 1, results.size() );
-
- query = createMatchQuery( StandardIndexRecordFields.CLASSES, "mymojo" );
- results = index.search( new LuceneQuery( query ) );
-
- assertTrue( "Check result", results.contains( records.get( "test-plugin" ) ) );
- assertEquals( "Check results size", 1, results.size() );
-
- // test non-match fails
- query = createMatchQuery( StandardIndexRecordFields.CLASSES, "foo" );
- results = index.search( new LuceneQuery( query ) );
-
- assertTrue( "Check results size", results.isEmpty() );
- }
-
- public void testMatchFiles()
- throws RepositoryIndexSearchException, ParseException
- {
- Query query = createMatchQuery( StandardIndexRecordFields.FILES, "MANIFEST.MF" );
- List results = index.search( new LuceneQuery( query ) );
-
- assertFalse( "Check result", results.contains( records.get( "test-pom" ) ) );
- assertFalse( "Check result", results.contains( records.get( "parent-pom" ) ) );
- assertFalse( "Check result", results.contains( records.get( "test-dll" ) ) );
- assertEquals( "Check results size", 7, results.size() );
-
- query = createMatchQuery( StandardIndexRecordFields.FILES, "META-INF" );
- results = index.search( new LuceneQuery( query ) );
-
- assertFalse( "Check result", results.contains( records.get( "test-pom" ) ) );
- assertFalse( "Check result", results.contains( records.get( "parent-pom" ) ) );
- assertFalse( "Check result", results.contains( records.get( "test-dll" ) ) );
- assertEquals( "Check results size", 7, results.size() );
-
- query = createMatchQuery( StandardIndexRecordFields.FILES, "plugin.xml" );
- results = index.search( new LuceneQuery( query ) );
-
- assertTrue( "Check result", results.contains( records.get( "test-plugin" ) ) );
- assertEquals( "Check results size", 1, results.size() );
-
- // test non-match fails
- query = createMatchQuery( StandardIndexRecordFields.FILES, "foo" );
- results = index.search( new LuceneQuery( query ) );
-
- assertTrue( "Check results size", results.isEmpty() );
- }
-
- public void testExactMatchDependency()
- throws RepositoryIndexSearchException
- {
- Query query =
- createExactMatchQuery( StandardIndexRecordFields.DEPENDENCIES, "org.apache.maven:maven-plugin-api:2.0" );
- List results = index.search( new LuceneQuery( query ) );
-
- assertTrue( "Check result", results.contains( records.get( "test-plugin" ) ) );
- assertEquals( "Check results size", 1, results.size() );
-
- // test non-match fails
- query = createExactMatchQuery( StandardIndexRecordFields.DEPENDENCIES, "foo" );
- results = index.search( new LuceneQuery( query ) );
-
- assertTrue( "Check results size", results.isEmpty() );
- }
-
- public void testMatchProjectName()
- throws RepositoryIndexSearchException, ParseException
- {
- Query query = createMatchQuery( StandardIndexRecordFields.PROJECT_NAME, "mojo" );
- List results = index.search( new LuceneQuery( query ) );
-
- assertTrue( "Check result", results.contains( records.get( "test-plugin" ) ) );
- assertEquals( "Check results size", 1, results.size() );
-
- query = createMatchQuery( StandardIndexRecordFields.PROJECT_NAME, "maven" );
- results = index.search( new LuceneQuery( query ) );
-
- assertFalse( "Check result", results.contains( records.get( "parent-pom" ) ) );
- assertFalse( "Check result", results.contains( records.get( "test-child-pom" ) ) );
- assertEquals( "Check results size", 2, results.size() );
-
- // test non-match fails
- query = createMatchQuery( StandardIndexRecordFields.PROJECT_NAME, "foo" );
- results = index.search( new LuceneQuery( query ) );
-
- assertTrue( "Check results size", results.isEmpty() );
- }
-
- public void testMatchProjectDescription()
- throws RepositoryIndexSearchException, ParseException
- {
- Query query = createMatchQuery( StandardIndexRecordFields.PROJECT_DESCRIPTION, "description" );
- List results = index.search( new LuceneQuery( query ) );
-
- assertTrue( "Check result", results.contains( records.get( "test-child-pom" ) ) );
- assertTrue( "Check result", results.contains( records.get( "parent-pom" ) ) );
- assertTrue( "Check result", results.contains( records.get( "test-pom" ) ) );
- assertEquals( "Check results size", 3, results.size() );
-
- // test non-match fails
- query = createMatchQuery( StandardIndexRecordFields.PROJECT_DESCRIPTION, "foo" );
- results = index.search( new LuceneQuery( query ) );
-
- assertTrue( "Check results size", results.isEmpty() );
- }
-
- private static Query createExactMatchQuery( String field, String value )
- {
- return new TermQuery( new Term( field, value ) );
- }
-
- private static Query createMatchQuery( String field, String value )
- throws ParseException
- {
- return new QueryParser( field, LuceneRepositoryArtifactIndex.getAnalyzer() ).parse( value );
- }
-
- private Artifact createArtifact( String artifactId )
- {
- return createArtifact( artifactId, "1.0", "jar", null );
- }
-
- private Artifact createArtifact( String artifactId, String version, String type )
- {
- return createArtifact( artifactId, version, type, null );
- }
-
- private Artifact createArtifact( String artifactId, String version, String type, String classifier )
- {
- Artifact artifact = artifactFactory.createDependencyArtifact( "org.apache.maven.archiva.record", artifactId,
- VersionRange.createFromVersion( version ), type,
- classifier, Artifact.SCOPE_RUNTIME );
- artifact.isSnapshot();
- artifact.setFile( new File( repository.getBasedir(), repository.pathOf( artifact ) ) );
- artifact.setRepository( repository );
- return artifact;
- }
-}
diff --git a/archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/lucene/LuceneStandardArtifactIndexTest.java b/archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/lucene/LuceneStandardArtifactIndexTest.java
deleted file mode 100644
index 34fe5992a..000000000
--- a/archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/lucene/LuceneStandardArtifactIndexTest.java
+++ /dev/null
@@ -1,409 +0,0 @@
-package org.apache.maven.archiva.indexer.lucene;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import org.apache.commons.io.FileUtils;
-import org.apache.lucene.document.Document;
-import org.apache.lucene.document.NumberTools;
-import org.apache.lucene.index.IndexReader;
-import org.apache.lucene.index.IndexWriter;
-import org.apache.maven.archiva.indexer.RepositoryArtifactIndex;
-import org.apache.maven.archiva.indexer.RepositoryArtifactIndexFactory;
-import org.apache.maven.archiva.indexer.RepositoryIndexException;
-import org.apache.maven.archiva.indexer.record.RepositoryIndexRecord;
-import org.apache.maven.archiva.indexer.record.RepositoryIndexRecordFactory;
-import org.apache.maven.archiva.indexer.record.StandardIndexRecordFields;
-import org.apache.maven.artifact.Artifact;
-import org.apache.maven.artifact.factory.ArtifactFactory;
-import org.apache.maven.artifact.repository.ArtifactRepository;
-import org.apache.maven.artifact.repository.ArtifactRepositoryFactory;
-import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout;
-import org.codehaus.plexus.PlexusTestCase;
-import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
-
-import java.io.File;
-import java.io.IOException;
-import java.text.SimpleDateFormat;
-import java.util.Collections;
-import java.util.Date;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Locale;
-import java.util.TimeZone;
-
-/**
- * Test the Lucene implementation of the artifact index.
- *
- * @author <a href="mailto:brett@apache.org">Brett Porter</a>
- */
-public class LuceneStandardArtifactIndexTest
- extends PlexusTestCase
-{
- private RepositoryArtifactIndex index;
-
- private ArtifactRepository repository;
-
- private ArtifactFactory artifactFactory;
-
- private File indexLocation;
-
- private RepositoryIndexRecordFactory recordFactory;
-
- protected void setUp()
- throws Exception
- {
- super.setUp();
-
- recordFactory = (RepositoryIndexRecordFactory) lookup( RepositoryIndexRecordFactory.ROLE, "standard" );
-
- artifactFactory = (ArtifactFactory) lookup( ArtifactFactory.ROLE );
-
- ArtifactRepositoryFactory repositoryFactory =
- (ArtifactRepositoryFactory) lookup( ArtifactRepositoryFactory.ROLE );
-
- ArtifactRepositoryLayout layout = (ArtifactRepositoryLayout) lookup( ArtifactRepositoryLayout.ROLE, "default" );
-
- File file = getTestFile( "src/test/managed-repository" );
- repository =
- repositoryFactory.createArtifactRepository( "test", file.toURI().toURL().toString(), layout, null, null );
-
- RepositoryArtifactIndexFactory factory =
- (RepositoryArtifactIndexFactory) lookup( RepositoryArtifactIndexFactory.ROLE, "lucene" );
-
- indexLocation = getTestFile( "target/test-index" );
-
- FileUtils.deleteDirectory( indexLocation );
-
- index = factory.createStandardIndex( indexLocation );
- }
-
- public void testIndexExists()
- throws IOException, RepositoryIndexException
- {
- assertFalse( "check index doesn't exist", index.exists() );
-
- // create empty directory
- indexLocation.mkdirs();
- assertFalse( "check index doesn't exist even if directory does", index.exists() );
-
- // create index, with no records
- createEmptyIndex();
- assertTrue( "check index is considered to exist", index.exists() );
-
- // Test non-directory
- FileUtils.deleteDirectory( indexLocation );
- indexLocation.createNewFile();
- try
- {
- index.exists();
- fail( "Index operation should fail as the location is not valid" );
- }
- catch ( RepositoryIndexException e )
- {
- // great
- }
- finally
- {
- indexLocation.delete();
- }
- }
-
- public void testAddRecordNoIndex()
- throws IOException, RepositoryIndexException
- {
- Artifact artifact = createArtifact( "test-jar" );
-
- RepositoryIndexRecord record = recordFactory.createRecord( artifact );
- index.indexRecords( Collections.singletonList( record ) );
-
- IndexReader reader = IndexReader.open( indexLocation );
- try
- {
- Document document = reader.document( 0 );
- assertJarRecord( artifact, document );
- assertEquals( "Check index size", 1, reader.numDocs() );
- }
- finally
- {
- reader.close();
- }
- }
-
- public void testAddRecordExistingEmptyIndex()
- throws IOException, RepositoryIndexException
- {
- createEmptyIndex();
-
- Artifact artifact = createArtifact( "test-jar" );
-
- RepositoryIndexRecord record = recordFactory.createRecord( artifact );
- index.indexRecords( Collections.singletonList( record ) );
-
- IndexReader reader = IndexReader.open( indexLocation );
- try
- {
- Document document = reader.document( 0 );
- assertJarRecord( artifact, document );
- assertEquals( "Check index size", 1, reader.numDocs() );
- }
- finally
- {
- reader.close();
- }
- }
-
- public void testAddRecordInIndex()
- throws IOException, RepositoryIndexException
- {
- createEmptyIndex();
-
- Artifact artifact = createArtifact( "test-jar" );
-
- RepositoryIndexRecord record = recordFactory.createRecord( artifact );
- index.indexRecords( Collections.singletonList( record ) );
-
- // Do it again
- record = recordFactory.createRecord( artifact );
- index.indexRecords( Collections.singletonList( record ) );
-
- IndexReader reader = IndexReader.open( indexLocation );
- try
- {
- Document document = reader.document( 0 );
- assertJarRecord( artifact, document );
- assertEquals( "Check index size", 1, reader.numDocs() );
- }
- finally
- {
- reader.close();
- }
- }
-
- public void testAddPomRecord()
- throws IOException, RepositoryIndexException
- {
- createEmptyIndex();
-
- Artifact artifact = createArtifact( "test-pom", "1.0", "pom" );
-
- RepositoryIndexRecord record = recordFactory.createRecord( artifact );
- index.indexRecords( Collections.singletonList( record ) );
-
- IndexReader reader = IndexReader.open( indexLocation );
- try
- {
- Document document = reader.document( 0 );
- assertPomRecord( artifact, document );
- assertEquals( "Check index size", 1, reader.numDocs() );
- }
- finally
- {
- reader.close();
- }
- }
-
- public void testAddPlugin()
- throws IOException, RepositoryIndexException, XmlPullParserException
- {
- createEmptyIndex();
-
- Artifact artifact = createArtifact( "test-plugin" );
-
- RepositoryIndexRecord record = recordFactory.createRecord( artifact );
-
- index.indexRecords( Collections.singletonList( record ) );
-
- IndexReader reader = IndexReader.open( indexLocation );
- try
- {
- Document document = reader.document( 0 );
- assertPluginRecord( artifact, document );
- assertEquals( "Check index size", 1, reader.numDocs() );
- }
- finally
- {
- reader.close();
- }
- }
-
- public void testDeleteRecordInIndex()
- throws IOException, RepositoryIndexException
- {
- createEmptyIndex();
-
- Artifact artifact = createArtifact( "test-jar" );
-
- RepositoryIndexRecord record = recordFactory.createRecord( artifact );
- index.indexRecords( Collections.singletonList( record ) );
-
- index.deleteRecords( Collections.singletonList( record ) );
-
- IndexReader reader = IndexReader.open( indexLocation );
- try
- {
- assertEquals( "No documents", 0, reader.numDocs() );
- }
- finally
- {
- reader.close();
- }
- }
-
- public void testDeleteRecordNotInIndex()
- throws IOException, RepositoryIndexException
- {
- createEmptyIndex();
-
- Artifact artifact = createArtifact( "test-jar" );
-
- RepositoryIndexRecord record = recordFactory.createRecord( artifact );
-
- index.deleteRecords( Collections.singletonList( record ) );
-
- IndexReader reader = IndexReader.open( indexLocation );
- try
- {
- assertEquals( "No documents", 0, reader.numDocs() );
- }
- finally
- {
- reader.close();
- }
- }
-
- public void testDeleteRecordNoIndex()
- throws IOException, RepositoryIndexException
- {
- Artifact artifact = createArtifact( "test-jar" );
-
- RepositoryIndexRecord record = recordFactory.createRecord( artifact );
- index.deleteRecords( Collections.singleton( record ) );
-
- assertFalse( index.exists() );
- }
-
- private Artifact createArtifact( String artifactId )
- {
- return createArtifact( artifactId, "1.0", "jar" );
- }
-
- private Artifact createArtifact( String artifactId, String version, String type )
- {
- Artifact artifact =
- artifactFactory.createBuildArtifact( "org.apache.maven.archiva.record", artifactId, version, type );
- artifact.setFile( new File( repository.getBasedir(), repository.pathOf( artifact ) ) );
- artifact.setRepository( repository );
- return artifact;
- }
-
- private void createEmptyIndex()
- throws IOException
- {
- createIndex( Collections.EMPTY_LIST );
- }
-
- private void createIndex( List docments )
- throws IOException
- {
- IndexWriter writer = new IndexWriter( indexLocation, LuceneRepositoryArtifactIndex.getAnalyzer(), true );
- for ( Iterator i = docments.iterator(); i.hasNext(); )
- {
- Document document = (Document) i.next();
- writer.addDocument( document );
- }
- writer.optimize();
- writer.close();
- }
-
- private void assertRecord( Artifact artifact, Document document, String expectedArtifactId, String expectedType,
- String expectedMd5, String expectedSha1 )
- {
- assertEquals( "Check document filename", repository.pathOf( artifact ),
- document.get( StandardIndexRecordFields.FILENAME ) );
- assertEquals( "Check document groupId", "org.apache.maven.archiva.record",
- document.get( StandardIndexRecordFields.GROUPID ) );
- assertEquals( "Check document artifactId", expectedArtifactId,
- document.get( StandardIndexRecordFields.ARTIFACTID ) );
- assertEquals( "Check document version", "1.0", document.get( StandardIndexRecordFields.VERSION ) );
- assertEquals( "Check document type", expectedType, document.get( StandardIndexRecordFields.TYPE ) );
- assertEquals( "Check document repository", "test", document.get( StandardIndexRecordFields.REPOSITORY ) );
- assertEquals( "Check document timestamp", getLastModified( artifact.getFile() ),
- document.get( StandardIndexRecordFields.LAST_MODIFIED ) );
- assertEquals( "Check document md5", expectedMd5, document.get( StandardIndexRecordFields.MD5 ) );
- assertEquals( "Check document sha1", expectedSha1, document.get( StandardIndexRecordFields.SHA1 ) );
- assertEquals( "Check document file size", artifact.getFile().length(),
- NumberTools.stringToLong( document.get( StandardIndexRecordFields.FILE_SIZE ) ) );
- assertNull( "Check document classifier", document.get( StandardIndexRecordFields.CLASSIFIER ) );
- }
-
- private void assertPomRecord( Artifact artifact, Document document )
- {
- assertRecord( artifact, document, "test-pom", "pom", "758e1ae96dff63dab7278a62e3eb174d",
- "770fde06cd5c3dccb5f5e8c6754b8c4c77b98560" );
- assertNull( "Check document classes", document.get( StandardIndexRecordFields.CLASSES ) );
- assertNull( "Check document files", document.get( StandardIndexRecordFields.FILES ) );
- assertNull( "Check document pluginPrefix", document.get( StandardIndexRecordFields.PLUGIN_PREFIX ) );
- assertEquals( "Check document year", "2005", document.get( StandardIndexRecordFields.INCEPTION_YEAR ) );
- assertEquals( "Check document project name", "Maven Repository Manager Test POM",
- document.get( StandardIndexRecordFields.PROJECT_NAME ) );
- assertEquals( "Check document project description", "Description",
- document.get( StandardIndexRecordFields.PROJECT_DESCRIPTION ) );
- assertEquals( "Check document packaging", "pom", document.get( StandardIndexRecordFields.PACKAGING ) );
- }
-
- private void assertJarRecord( Artifact artifact, Document document )
- {
- assertRecord( artifact, document, "test-jar", "jar", "3a0adc365f849366cd8b633cad155cb7",
- "c66f18bf192cb613fc2febb4da541a34133eedc2" );
- assertEquals( "Check document classes", "A\nb.B\nb.c.C", document.get( StandardIndexRecordFields.CLASSES ) );
- assertEquals( "Check document files", "META-INF/MANIFEST.MF\nA.class\nb/B.class\nb/c/C.class",
- document.get( StandardIndexRecordFields.FILES ) );
- assertNull( "Check document inceptionYear", document.get( StandardIndexRecordFields.INCEPTION_YEAR ) );
- assertNull( "Check document projectName", document.get( StandardIndexRecordFields.PROJECT_NAME ) );
- assertNull( "Check document projectDesc", document.get( StandardIndexRecordFields.PROJECT_DESCRIPTION ) );
- assertNull( "Check document pluginPrefix", document.get( StandardIndexRecordFields.PLUGIN_PREFIX ) );
- assertNull( "Check document packaging", document.get( StandardIndexRecordFields.PACKAGING ) );
- }
-
- private void assertPluginRecord( Artifact artifact, Document document )
- {
- assertRecord( artifact, document, "test-plugin", "maven-plugin", "3530896791670ebb45e17708e5d52c40",
- "2cd2619d59a684e82e97471d2c2e004144c8f24e" );
- assertEquals( "Check document classes", "org.apache.maven.archiva.record.MyMojo",
- document.get( StandardIndexRecordFields.CLASSES ) );
- assertEquals( "Check document files", "META-INF/MANIFEST.MF\n" +
- "META-INF/maven/org.apache.maven.archiva.record/test-plugin/pom.properties\n" +
- "META-INF/maven/org.apache.maven.archiva.record/test-plugin/pom.xml\n" + "META-INF/maven/plugin.xml\n" +
- "org/apache/maven/archiva/record/MyMojo.class", document.get( StandardIndexRecordFields.FILES ) );
- assertEquals( "Check document pluginPrefix", "test", document.get( StandardIndexRecordFields.PLUGIN_PREFIX ) );
- assertEquals( "Check document packaging", "maven-plugin", document.get( StandardIndexRecordFields.PACKAGING ) );
- assertNull( "Check document inceptionYear", document.get( StandardIndexRecordFields.INCEPTION_YEAR ) );
- assertEquals( "Check document project name", "Maven Mojo Archetype",
- document.get( StandardIndexRecordFields.PROJECT_NAME ) );
- assertNull( "Check document projectDesc", document.get( StandardIndexRecordFields.PROJECT_DESCRIPTION ) );
- }
-
- private String getLastModified( File file )
- {
- SimpleDateFormat dateFormat = new SimpleDateFormat( "yyyyMMddHHmmss", Locale.US );
- dateFormat.setTimeZone( TimeZone.getTimeZone( "UTC" ) );
- return dateFormat.format( new Date( file.lastModified() ) );
- }
-}
diff --git a/archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/query/AllTests.java b/archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/query/AllTests.java
new file mode 100644
index 000000000..2ab011b96
--- /dev/null
+++ b/archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/query/AllTests.java
@@ -0,0 +1,43 @@
+package org.apache.maven.archiva.indexer.query;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+/**
+ * AllTests - conveinence test suite for IDE users.
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class AllTests
+{
+
+ public static Test suite()
+ {
+ TestSuite suite = new TestSuite( "Test for org.apache.maven.archiva.indexer.query" );
+ //$JUnit-BEGIN$
+ suite.addTestSuite( QueryTest.class );
+ //$JUnit-END$
+ return suite;
+ }
+
+}
diff --git a/archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/record/MinimalArtifactIndexRecordFactoryTest.java b/archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/record/MinimalArtifactIndexRecordFactoryTest.java
deleted file mode 100644
index 527e77ab3..000000000
--- a/archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/record/MinimalArtifactIndexRecordFactoryTest.java
+++ /dev/null
@@ -1,249 +0,0 @@
-package org.apache.maven.archiva.indexer.record;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import org.apache.maven.archiva.indexer.RepositoryIndexException;
-import org.apache.maven.artifact.Artifact;
-import org.apache.maven.artifact.factory.ArtifactFactory;
-import org.apache.maven.artifact.repository.ArtifactRepository;
-import org.apache.maven.artifact.repository.ArtifactRepositoryFactory;
-import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout;
-import org.apache.maven.artifact.versioning.VersionRange;
-import org.codehaus.plexus.PlexusTestCase;
-import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-
-/**
- * Test the minimal artifact index record.
- *
- * @author <a href="mailto:brett@apache.org">Brett Porter</a>
- */
-public class MinimalArtifactIndexRecordFactoryTest
- extends PlexusTestCase
-{
- private RepositoryIndexRecordFactory factory;
-
- private ArtifactRepository repository;
-
- private ArtifactFactory artifactFactory;
-
- private static final String TEST_GROUP_ID = "org.apache.maven.archiva.record";
-
- private static final List JAR_CLASS_LIST = Arrays.asList( new String[]{"A", "b.B", "b.c.C"} );
-
- protected void setUp()
- throws Exception
- {
- super.setUp();
-
- factory = (RepositoryIndexRecordFactory) lookup( RepositoryIndexRecordFactory.ROLE, "minimal" );
-
- artifactFactory = (ArtifactFactory) lookup( ArtifactFactory.ROLE );
-
- ArtifactRepositoryFactory repositoryFactory =
- (ArtifactRepositoryFactory) lookup( ArtifactRepositoryFactory.ROLE );
-
- ArtifactRepositoryLayout layout = (ArtifactRepositoryLayout) lookup( ArtifactRepositoryLayout.ROLE, "default" );
-
- File file = getTestFile( "src/test/managed-repository" );
- repository =
- repositoryFactory.createArtifactRepository( "test", file.toURI().toURL().toString(), layout, null, null );
- }
-
- public void testIndexedJar()
- throws RepositoryIndexException
- {
- Artifact artifact = createArtifact( "test-jar" );
-
- RepositoryIndexRecord record = factory.createRecord( artifact );
-
- MinimalArtifactIndexRecord expectedRecord = new MinimalArtifactIndexRecord();
- expectedRecord.setMd5Checksum( "3a0adc365f849366cd8b633cad155cb7" );
- expectedRecord.setFilename( repository.pathOf( artifact ) );
- expectedRecord.setLastModified( artifact.getFile().lastModified() );
- expectedRecord.setSize( artifact.getFile().length() );
- expectedRecord.setClasses( JAR_CLASS_LIST );
-
- assertEquals( "check record", expectedRecord, record );
- }
-
- public void testIndexedJarWithClassifier()
- throws RepositoryIndexException
- {
- Artifact artifact = createArtifact( "test-jar", "1.0", "jar", "jdk14" );
-
- RepositoryIndexRecord record = factory.createRecord( artifact );
-
- MinimalArtifactIndexRecord expectedRecord = new MinimalArtifactIndexRecord();
- expectedRecord.setMd5Checksum( "3a0adc365f849366cd8b633cad155cb7" );
- expectedRecord.setFilename( repository.pathOf( artifact ) );
- expectedRecord.setLastModified( artifact.getFile().lastModified() );
- expectedRecord.setSize( artifact.getFile().length() );
- expectedRecord.setClasses( JAR_CLASS_LIST );
-
- assertEquals( "check record", expectedRecord, record );
- }
-
- public void testIndexedJarAndPom()
- throws RepositoryIndexException
- {
- Artifact artifact = createArtifact( "test-jar-and-pom", "1.0-alpha-1", "jar" );
-
- RepositoryIndexRecord record = factory.createRecord( artifact );
-
- MinimalArtifactIndexRecord expectedRecord = new MinimalArtifactIndexRecord();
- expectedRecord.setMd5Checksum( "3a0adc365f849366cd8b633cad155cb7" );
- expectedRecord.setFilename( repository.pathOf( artifact ) );
- expectedRecord.setLastModified( artifact.getFile().lastModified() );
- expectedRecord.setSize( artifact.getFile().length() );
- expectedRecord.setClasses( JAR_CLASS_LIST );
-
- assertEquals( "check record", expectedRecord, record );
- }
-
- public void testIndexedJarAndPomWithClassifier()
- throws RepositoryIndexException
- {
- Artifact artifact = createArtifact( "test-jar-and-pom", "1.0-alpha-1", "jar", "jdk14" );
-
- RepositoryIndexRecord record = factory.createRecord( artifact );
-
- MinimalArtifactIndexRecord expectedRecord = new MinimalArtifactIndexRecord();
- expectedRecord.setMd5Checksum( "3a0adc365f849366cd8b633cad155cb7" );
- expectedRecord.setFilename( repository.pathOf( artifact ) );
- expectedRecord.setLastModified( artifact.getFile().lastModified() );
- expectedRecord.setSize( artifact.getFile().length() );
- expectedRecord.setClasses( JAR_CLASS_LIST );
-
- assertEquals( "check record", expectedRecord, record );
- }
-
- public void testIndexedPom()
- throws RepositoryIndexException
- {
- Artifact artifact = createArtifact( "test-pom", "1.0", "pom" );
-
- RepositoryIndexRecord record = factory.createRecord( artifact );
-
- assertNull( "Check no record", record );
- }
-
- public void testNonIndexedPom()
- throws RepositoryIndexException
- {
- // If we pass in only the POM that belongs to a JAR, then expect null not the POM
- Artifact artifact = createArtifact( "test-jar-and-pom", "1.0-alpha-1", "pom" );
-
- RepositoryIndexRecord record = factory.createRecord( artifact );
-
- assertNull( "Check no record", record );
-
- artifact = createArtifact( "test-plugin", "1.0", "pom" );
-
- record = factory.createRecord( artifact );
-
- assertNull( "Check no record", record );
-
- artifact = createArtifact( "test-archetype", "1.0", "pom" );
-
- record = factory.createRecord( artifact );
-
- assertNull( "Check no record", record );
-
- artifact = createArtifact( "test-skin", "1.0", "pom" );
-
- record = factory.createRecord( artifact );
-
- assertNull( "Check no record", record );
- }
-
- public void testIndexedPlugin()
- throws RepositoryIndexException, IOException, XmlPullParserException
- {
- Artifact artifact = createArtifact( "test-plugin" );
-
- RepositoryIndexRecord record = factory.createRecord( artifact );
-
- MinimalArtifactIndexRecord expectedRecord = new MinimalArtifactIndexRecord();
- expectedRecord.setMd5Checksum( "3530896791670ebb45e17708e5d52c40" );
- expectedRecord.setFilename( repository.pathOf( artifact ) );
- expectedRecord.setLastModified( artifact.getFile().lastModified() );
- expectedRecord.setSize( artifact.getFile().length() );
- expectedRecord.setClasses( Collections.singletonList( "org.apache.maven.archiva.record.MyMojo" ) );
-
- assertEquals( "check record", expectedRecord, record );
- }
-
- public void testCorruptJar()
- throws RepositoryIndexException
- {
- Artifact artifact = createArtifact( "test-corrupt-jar" );
-
- RepositoryIndexRecord record = factory.createRecord( artifact );
-
- assertNull( "Confirm no record is returned", record );
- }
-
- public void testNonJar()
- throws RepositoryIndexException
- {
- Artifact artifact = createArtifact( "test-dll", "1.0.1.34", "dll" );
-
- RepositoryIndexRecord record = factory.createRecord( artifact );
-
- assertNull( "Confirm no record is returned", record );
- }
-
- public void testMissingFile()
- throws RepositoryIndexException
- {
- Artifact artifact = createArtifact( "test-foo" );
-
- RepositoryIndexRecord record = factory.createRecord( artifact );
-
- assertNull( "Confirm no record is returned", record );
- }
-
- private Artifact createArtifact( String artifactId )
- {
- return createArtifact( artifactId, "1.0", "jar" );
- }
-
- private Artifact createArtifact( String artifactId, String version, String type )
- {
- return createArtifact( artifactId, version, type, null );
- }
-
- private Artifact createArtifact( String artifactId, String version, String type, String classifier )
- {
- Artifact artifact = artifactFactory.createDependencyArtifact( TEST_GROUP_ID, artifactId,
- VersionRange.createFromVersion( version ), type,
- classifier, Artifact.SCOPE_RUNTIME );
- artifact.isSnapshot();
- artifact.setFile( new File( repository.getBasedir(), repository.pathOf( artifact ) ) );
- artifact.setRepository( repository );
- return artifact;
- }
-}
diff --git a/archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/record/StandardArtifactIndexRecordFactoryTest.java b/archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/record/StandardArtifactIndexRecordFactoryTest.java
deleted file mode 100644
index 9f1d1e456..000000000
--- a/archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/record/StandardArtifactIndexRecordFactoryTest.java
+++ /dev/null
@@ -1,446 +0,0 @@
-package org.apache.maven.archiva.indexer.record;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import org.apache.maven.archiva.indexer.RepositoryIndexException;
-import org.apache.maven.artifact.Artifact;
-import org.apache.maven.artifact.factory.ArtifactFactory;
-import org.apache.maven.artifact.repository.ArtifactRepository;
-import org.apache.maven.artifact.repository.ArtifactRepositoryFactory;
-import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout;
-import org.apache.maven.artifact.versioning.VersionRange;
-import org.codehaus.plexus.PlexusTestCase;
-import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-
-/**
- * Test the minimal artifact index record.
- *
- * @author <a href="mailto:brett@apache.org">Brett Porter</a>
- */
-public class StandardArtifactIndexRecordFactoryTest
- extends PlexusTestCase
-{
- private RepositoryIndexRecordFactory factory;
-
- private ArtifactRepository repository;
-
- private ArtifactFactory artifactFactory;
-
- private static final String TEST_GROUP_ID = "org.apache.maven.archiva.record";
-
- private static final List JAR_CLASS_LIST = Arrays.asList( new String[]{"A", "b.B", "b.c.C"} );
-
- private static final List JAR_FILE_LIST =
- Arrays.asList( new String[]{"META-INF/MANIFEST.MF", "A.class", "b/B.class", "b/c/C.class"} );
-
- private static final String JUNIT_DEPENDENCY = "junit:junit:3.8.1";
-
- private static final String PLUGIN_API_DEPENDENCY = "org.apache.maven:maven-plugin-api:2.0";
-
- protected void setUp()
- throws Exception
- {
- super.setUp();
-
- factory = (RepositoryIndexRecordFactory) lookup( RepositoryIndexRecordFactory.ROLE, "standard" );
-
- artifactFactory = (ArtifactFactory) lookup( ArtifactFactory.ROLE );
-
- ArtifactRepositoryFactory repositoryFactory =
- (ArtifactRepositoryFactory) lookup( ArtifactRepositoryFactory.ROLE );
-
- ArtifactRepositoryLayout layout = (ArtifactRepositoryLayout) lookup( ArtifactRepositoryLayout.ROLE, "default" );
-
- File file = getTestFile( "src/test/managed-repository" );
- repository =
- repositoryFactory.createArtifactRepository( "test", file.toURI().toURL().toString(), layout, null, null );
- }
-
- public void testIndexedJar()
- throws RepositoryIndexException
- {
- Artifact artifact = createArtifact( "test-jar" );
-
- RepositoryIndexRecord record = factory.createRecord( artifact );
-
- StandardArtifactIndexRecord expectedRecord = new StandardArtifactIndexRecord();
- expectedRecord.setMd5Checksum( "3a0adc365f849366cd8b633cad155cb7" );
- expectedRecord.setFilename( repository.pathOf( artifact ) );
- expectedRecord.setLastModified( artifact.getFile().lastModified() );
- expectedRecord.setSize( artifact.getFile().length() );
- expectedRecord.setClasses( JAR_CLASS_LIST );
- expectedRecord.setArtifactId( "test-jar" );
- expectedRecord.setGroupId( TEST_GROUP_ID );
- expectedRecord.setBaseVersion( "1.0" );
- expectedRecord.setVersion( "1.0" );
- expectedRecord.setFiles( JAR_FILE_LIST );
- expectedRecord.setSha1Checksum( "c66f18bf192cb613fc2febb4da541a34133eedc2" );
- expectedRecord.setType( "jar" );
- expectedRecord.setRepository( "test" );
-
- assertEquals( "check record", expectedRecord, record );
- }
-
- public void testIndexedJarWithClassifier()
- throws RepositoryIndexException
- {
- Artifact artifact = createArtifact( "test-jar", "1.0", "jar", "jdk14" );
-
- RepositoryIndexRecord record = factory.createRecord( artifact );
-
- StandardArtifactIndexRecord expectedRecord = new StandardArtifactIndexRecord();
- expectedRecord.setMd5Checksum( "3a0adc365f849366cd8b633cad155cb7" );
- expectedRecord.setFilename( repository.pathOf( artifact ) );
- expectedRecord.setLastModified( artifact.getFile().lastModified() );
- expectedRecord.setSize( artifact.getFile().length() );
- expectedRecord.setClasses( JAR_CLASS_LIST );
- expectedRecord.setArtifactId( "test-jar" );
- expectedRecord.setGroupId( TEST_GROUP_ID );
- expectedRecord.setBaseVersion( "1.0" );
- expectedRecord.setVersion( "1.0" );
- expectedRecord.setFiles( JAR_FILE_LIST );
- expectedRecord.setSha1Checksum( "c66f18bf192cb613fc2febb4da541a34133eedc2" );
- expectedRecord.setType( "jar" );
- expectedRecord.setRepository( "test" );
- expectedRecord.setClassifier( "jdk14" );
-
- assertEquals( "check record", expectedRecord, record );
- }
-
- public void testIndexedJarAndPom()
- throws RepositoryIndexException
- {
- Artifact artifact = createArtifact( "test-jar-and-pom", "1.0-alpha-1", "jar" );
-
- RepositoryIndexRecord record = factory.createRecord( artifact );
-
- StandardArtifactIndexRecord expectedRecord = new StandardArtifactIndexRecord();
- expectedRecord.setMd5Checksum( "3a0adc365f849366cd8b633cad155cb7" );
- expectedRecord.setFilename( repository.pathOf( artifact ) );
- expectedRecord.setLastModified( artifact.getFile().lastModified() );
- expectedRecord.setSize( artifact.getFile().length() );
- expectedRecord.setClasses( JAR_CLASS_LIST );
- expectedRecord.setArtifactId( "test-jar-and-pom" );
- expectedRecord.setGroupId( TEST_GROUP_ID );
- expectedRecord.setBaseVersion( "1.0-alpha-1" );
- expectedRecord.setVersion( "1.0-alpha-1" );
- expectedRecord.setFiles( JAR_FILE_LIST );
- expectedRecord.setSha1Checksum( "c66f18bf192cb613fc2febb4da541a34133eedc2" );
- expectedRecord.setType( "jar" );
- expectedRecord.setRepository( "test" );
- expectedRecord.setPackaging( "jar" );
- expectedRecord.setProjectName( "Test JAR and POM" );
- expectedRecord.setDependencies( createDependencies() );
- expectedRecord.setDevelopers( createDevelopers() );
-
- assertEquals( "check record", expectedRecord, record );
- }
-
- public void testIndexedJarAndPomWithClassifier()
- throws RepositoryIndexException
- {
- Artifact artifact = createArtifact( "test-jar-and-pom", "1.0-alpha-1", "jar", "jdk14" );
-
- RepositoryIndexRecord record = factory.createRecord( artifact );
-
- StandardArtifactIndexRecord expectedRecord = new StandardArtifactIndexRecord();
- expectedRecord.setMd5Checksum( "3a0adc365f849366cd8b633cad155cb7" );
- expectedRecord.setFilename( repository.pathOf( artifact ) );
- expectedRecord.setLastModified( artifact.getFile().lastModified() );
- expectedRecord.setSize( artifact.getFile().length() );
- expectedRecord.setClasses( JAR_CLASS_LIST );
- expectedRecord.setArtifactId( "test-jar-and-pom" );
- expectedRecord.setGroupId( TEST_GROUP_ID );
- expectedRecord.setBaseVersion( "1.0-alpha-1" );
- expectedRecord.setVersion( "1.0-alpha-1" );
- expectedRecord.setFiles( JAR_FILE_LIST );
- expectedRecord.setSha1Checksum( "c66f18bf192cb613fc2febb4da541a34133eedc2" );
- expectedRecord.setType( "jar" );
- expectedRecord.setRepository( "test" );
- expectedRecord.setPackaging( "jar" );
- expectedRecord.setProjectName( "Test JAR and POM" );
- expectedRecord.setClassifier( "jdk14" );
- expectedRecord.setDependencies( createDependencies() );
- expectedRecord.setDevelopers( createDevelopers() );
-
- assertEquals( "check record", expectedRecord, record );
- }
-
- public void testIndexedJarWithParentPom()
- throws RepositoryIndexException
- {
- Artifact artifact = createArtifact( "test-child-pom", "1.0-20060728.121314-1", "jar" );
-
- RepositoryIndexRecord record = factory.createRecord( artifact );
-
- StandardArtifactIndexRecord expectedRecord = new StandardArtifactIndexRecord();
- expectedRecord.setMd5Checksum( "3a0adc365f849366cd8b633cad155cb7" );
- expectedRecord.setFilename( repository.pathOf( artifact ) );
- expectedRecord.setLastModified( artifact.getFile().lastModified() );
- expectedRecord.setSize( artifact.getFile().length() );
- expectedRecord.setClasses( JAR_CLASS_LIST );
- expectedRecord.setArtifactId( "test-child-pom" );
- expectedRecord.setGroupId( TEST_GROUP_ID );
- expectedRecord.setBaseVersion( "1.0-SNAPSHOT" );
- expectedRecord.setVersion( "1.0-20060728.121314-1" );
- expectedRecord.setFiles( JAR_FILE_LIST );
- expectedRecord.setSha1Checksum( "c66f18bf192cb613fc2febb4da541a34133eedc2" );
- expectedRecord.setType( "jar" );
- expectedRecord.setRepository( "test" );
- expectedRecord.setPackaging( "jar" );
- expectedRecord.setProjectName( "Child Project" );
- expectedRecord.setProjectDescription( "Description" );
- expectedRecord.setInceptionYear( "2005" );
- expectedRecord.setDependencies( Collections.singletonList( JUNIT_DEPENDENCY ) );
-
- assertEquals( "check record", expectedRecord, record );
- }
-
- public void testIndexedPom()
- throws RepositoryIndexException
- {
- Artifact artifact = createArtifact( "test-pom", "1.0", "pom" );
-
- RepositoryIndexRecord record = factory.createRecord( artifact );
-
- StandardArtifactIndexRecord expectedRecord = new StandardArtifactIndexRecord();
- expectedRecord.setMd5Checksum( "758e1ae96dff63dab7278a62e3eb174d" );
- expectedRecord.setFilename( repository.pathOf( artifact ) );
- expectedRecord.setLastModified( artifact.getFile().lastModified() );
- expectedRecord.setSize( artifact.getFile().length() );
- expectedRecord.setArtifactId( "test-pom" );
- expectedRecord.setGroupId( TEST_GROUP_ID );
- expectedRecord.setBaseVersion( "1.0" );
- expectedRecord.setVersion( "1.0" );
- expectedRecord.setSha1Checksum( "770fde06cd5c3dccb5f5e8c6754b8c4c77b98560" );
- expectedRecord.setType( "pom" );
- expectedRecord.setRepository( "test" );
- expectedRecord.setPackaging( "pom" );
- expectedRecord.setInceptionYear( "2005" );
- expectedRecord.setProjectName( "Maven Repository Manager Test POM" );
- expectedRecord.setProjectDescription( "Description" );
-
- assertEquals( "check record", expectedRecord, record );
- }
-
- public void testNonIndexedPom()
- throws RepositoryIndexException
- {
- // If we pass in only the POM that belongs to a JAR, then expect null not the POM
- Artifact artifact = createArtifact( "test-jar-and-pom", "1.0", "pom" );
-
- RepositoryIndexRecord record = factory.createRecord( artifact );
-
- assertNull( "Check no record", record );
-
- artifact = createArtifact( "test-plugin", "1.0", "pom" );
-
- record = factory.createRecord( artifact );
-
- assertNull( "Check no record", record );
-
- artifact = createArtifact( "test-archetype", "1.0", "pom" );
-
- record = factory.createRecord( artifact );
-
- assertNull( "Check no record", record );
-
- artifact = createArtifact( "test-skin", "1.0", "pom" );
-
- record = factory.createRecord( artifact );
-
- assertNull( "Check no record", record );
- }
-
- public void testIndexedPlugin()
- throws RepositoryIndexException, IOException, XmlPullParserException
- {
- Artifact artifact = createArtifact( "test-plugin" );
-
- RepositoryIndexRecord record = factory.createRecord( artifact );
-
- StandardArtifactIndexRecord expectedRecord = new StandardArtifactIndexRecord();
- expectedRecord.setMd5Checksum( "3530896791670ebb45e17708e5d52c40" );
- expectedRecord.setFilename( repository.pathOf( artifact ) );
- expectedRecord.setLastModified( artifact.getFile().lastModified() );
- expectedRecord.setSize( artifact.getFile().length() );
- expectedRecord.setArtifactId( "test-plugin" );
- expectedRecord.setGroupId( TEST_GROUP_ID );
- expectedRecord.setBaseVersion( "1.0" );
- expectedRecord.setVersion( "1.0" );
- expectedRecord.setSha1Checksum( "2cd2619d59a684e82e97471d2c2e004144c8f24e" );
- expectedRecord.setType( "maven-plugin" );
- expectedRecord.setRepository( "test" );
- expectedRecord.setClasses( Arrays.asList( new String[]{"org.apache.maven.archiva.record.MyMojo"} ) );
- expectedRecord.setFiles( Arrays.asList( new String[]{"META-INF/MANIFEST.MF",
- "META-INF/maven/org.apache.maven.archiva.record/test-plugin/pom.properties",
- "META-INF/maven/org.apache.maven.archiva.record/test-plugin/pom.xml", "META-INF/maven/plugin.xml",
- "org/apache/maven/archiva/record/MyMojo.class"} ) );
- expectedRecord.setPackaging( "maven-plugin" );
- expectedRecord.setProjectName( "Maven Mojo Archetype" );
- expectedRecord.setPluginPrefix( "test" );
- expectedRecord.setDependencies( Arrays.asList( new String[]{JUNIT_DEPENDENCY, PLUGIN_API_DEPENDENCY} ) );
-
- assertEquals( "check record", expectedRecord, record );
- }
-
- public void testIndexedArchetype()
- throws RepositoryIndexException, IOException, XmlPullParserException
- {
- Artifact artifact = createArtifact( "test-archetype" );
-
- RepositoryIndexRecord record = factory.createRecord( artifact );
-
- StandardArtifactIndexRecord expectedRecord = new StandardArtifactIndexRecord();
- expectedRecord.setMd5Checksum( "52b7ea4b53818b8a5f4c329d88fd60d9" );
- expectedRecord.setFilename( repository.pathOf( artifact ) );
- expectedRecord.setLastModified( artifact.getFile().lastModified() );
- expectedRecord.setSize( artifact.getFile().length() );
- expectedRecord.setArtifactId( "test-archetype" );
- expectedRecord.setGroupId( TEST_GROUP_ID );
- expectedRecord.setBaseVersion( "1.0" );
- expectedRecord.setVersion( "1.0" );
- expectedRecord.setSha1Checksum( "05841f5e51c124f1729d86c1687438c36b9255d9" );
- expectedRecord.setType( "maven-archetype" );
- expectedRecord.setRepository( "test" );
- expectedRecord.setFiles( Arrays.asList( new String[]{"META-INF/MANIFEST.MF", "META-INF/maven/archetype.xml",
- "META-INF/maven/org.apache.maven.archiva.record/test-archetype/pom.properties",
- "META-INF/maven/org.apache.maven.archiva.record/test-archetype/pom.xml", "archetype-resources/pom.xml",
- "archetype-resources/src/main/java/App.java", "archetype-resources/src/test/java/AppTest.java"} ) );
- expectedRecord.setPackaging( "jar" );
- expectedRecord.setProjectName( "Archetype - test-archetype" );
-
- assertEquals( "check record", expectedRecord, record );
- }
-
- public void testIndexedSkin()
- throws RepositoryIndexException, IOException, XmlPullParserException
- {
- Artifact artifact = createArtifact( "test-skin" );
-
- RepositoryIndexRecord record = factory.createRecord( artifact );
-
- StandardArtifactIndexRecord expectedRecord = new StandardArtifactIndexRecord();
- expectedRecord.setMd5Checksum( "ba2d8a722f763db2950ad63119585f45" );
- expectedRecord.setFilename( repository.pathOf( artifact ) );
- expectedRecord.setLastModified( artifact.getFile().lastModified() );
- expectedRecord.setSize( artifact.getFile().length() );
- expectedRecord.setArtifactId( "test-skin" );
- expectedRecord.setGroupId( TEST_GROUP_ID );
- expectedRecord.setBaseVersion( "1.0" );
- expectedRecord.setVersion( "1.0" );
- expectedRecord.setSha1Checksum( "44855e3e56c18ce766db315a2d4c114d7a8c8ab0" );
- expectedRecord.setType( "maven-skin" );
- expectedRecord.setRepository( "test" );
- expectedRecord.setFiles( Arrays.asList( new String[]{"META-INF/MANIFEST.MF", "css/maven-theme.css",
- "META-INF/maven/org.apache.maven.skins/test-skin/pom.xml",
- "META-INF/maven/org.apache.maven.skins/test-skin/pom.properties"} ) );
- expectedRecord.setPackaging( "jar" );
- expectedRecord.setProjectName( "Skin - test-skin" );
-
- assertEquals( "check record", expectedRecord, record );
- }
-
- public void testCorruptJar()
- throws RepositoryIndexException
- {
- Artifact artifact = createArtifact( "test-corrupt-jar" );
-
- RepositoryIndexRecord record = factory.createRecord( artifact );
-
- assertNull( "Confirm no record is returned", record );
- }
-
- public void testDll()
- throws RepositoryIndexException
- {
- Artifact artifact = createArtifact( "test-dll", "1.0.1.34", "dll" );
-
- RepositoryIndexRecord record = factory.createRecord( artifact );
-
- StandardArtifactIndexRecord expectedRecord = new StandardArtifactIndexRecord();
- expectedRecord.setMd5Checksum( "d41d8cd98f00b204e9800998ecf8427e" );
- expectedRecord.setFilename( repository.pathOf( artifact ) );
- expectedRecord.setLastModified( artifact.getFile().lastModified() );
- expectedRecord.setSize( artifact.getFile().length() );
- expectedRecord.setArtifactId( "test-dll" );
- expectedRecord.setGroupId( TEST_GROUP_ID );
- expectedRecord.setBaseVersion( "1.0.1.34" );
- expectedRecord.setVersion( "1.0.1.34" );
- expectedRecord.setSha1Checksum( "da39a3ee5e6b4b0d3255bfef95601890afd80709" );
- expectedRecord.setType( "dll" );
- expectedRecord.setRepository( "test" );
-
- assertEquals( "check record", expectedRecord, record );
- }
-
- public void testMissingFile()
- throws RepositoryIndexException
- {
- Artifact artifact = createArtifact( "test-foo" );
-
- RepositoryIndexRecord record = factory.createRecord( artifact );
-
- assertNull( "Confirm no record is returned", record );
- }
-
- private Artifact createArtifact( String artifactId )
- {
- return createArtifact( artifactId, "1.0", "jar" );
- }
-
- private Artifact createArtifact( String artifactId, String version, String type )
- {
- return createArtifact( artifactId, version, type, null );
- }
-
- private Artifact createArtifact( String artifactId, String version, String type, String classifier )
- {
- Artifact artifact = artifactFactory.createDependencyArtifact( TEST_GROUP_ID, artifactId,
- VersionRange.createFromVersion( version ), type,
- classifier, Artifact.SCOPE_RUNTIME );
- artifact.isSnapshot();
- artifact.setFile( new File( repository.getBasedir(), repository.pathOf( artifact ) ) );
- artifact.setRepository( repository );
- return artifact;
- }
-
- private static List createDevelopers()
- {
- List developers = new ArrayList();
- developers.add( "brett:Brett Porter:brett@apache.org" );
- return developers;
- }
-
- private static List createDependencies()
- {
- List dependencies = new ArrayList();
- dependencies.add( JUNIT_DEPENDENCY );
- dependencies.add( "org.apache.maven:maven-project:2.0" );
- return dependencies;
- }
-}
diff --git a/archiva-base/archiva-indexer/src/test/resources/META-INF/plexus/components.xml b/archiva-base/archiva-indexer/src/test/resources/META-INF/plexus/components.xml
new file mode 100644
index 000000000..af15697a1
--- /dev/null
+++ b/archiva-base/archiva-indexer/src/test/resources/META-INF/plexus/components.xml
@@ -0,0 +1,22 @@
+<component-set>
+ <components>
+ <component>
+ <role>org.apache.maven.archiva.configuration.ArchivaConfiguration</role>
+ <role-hint>mock</role-hint>
+ <implementation>org.apache.maven.archiva.indexer.MockConfiguration</implementation>
+ </component>
+ <component>
+ <role>org.apache.maven.archiva.indexer.RepositoryContentIndexFactory</role>
+ <role-hint>lucene</role-hint>
+ <implementation>org.apache.maven.archiva.indexer.lucene.LuceneRepositoryContentIndexFactory</implementation>
+ <description>Factory for Lucene repository content index instances.</description>
+ <requirements>
+ <requirement>
+ <role>org.apache.maven.archiva.configuration.ArchivaConfiguration</role>
+ <role-hint>mock</role-hint>
+ <field-name>configuration</field-name>
+ </requirement>
+ </requirements>
+ </component>
+ </components>
+</component-set>
diff --git a/archiva-base/archiva-indexer/src/test/resources/org/apache/maven/archiva/indexer/bytecode/BytecodeIndexTest.xml b/archiva-base/archiva-indexer/src/test/resources/org/apache/maven/archiva/indexer/bytecode/BytecodeIndexTest.xml
new file mode 100644
index 000000000..af15697a1
--- /dev/null
+++ b/archiva-base/archiva-indexer/src/test/resources/org/apache/maven/archiva/indexer/bytecode/BytecodeIndexTest.xml
@@ -0,0 +1,22 @@
+<component-set>
+ <components>
+ <component>
+ <role>org.apache.maven.archiva.configuration.ArchivaConfiguration</role>
+ <role-hint>mock</role-hint>
+ <implementation>org.apache.maven.archiva.indexer.MockConfiguration</implementation>
+ </component>
+ <component>
+ <role>org.apache.maven.archiva.indexer.RepositoryContentIndexFactory</role>
+ <role-hint>lucene</role-hint>
+ <implementation>org.apache.maven.archiva.indexer.lucene.LuceneRepositoryContentIndexFactory</implementation>
+ <description>Factory for Lucene repository content index instances.</description>
+ <requirements>
+ <requirement>
+ <role>org.apache.maven.archiva.configuration.ArchivaConfiguration</role>
+ <role-hint>mock</role-hint>
+ <field-name>configuration</field-name>
+ </requirement>
+ </requirements>
+ </component>
+ </components>
+</component-set>
diff --git a/archiva-base/archiva-indexer/src/test/resources/org/apache/maven/archiva/indexer/bytecode/BytecodeSearchTest.xml b/archiva-base/archiva-indexer/src/test/resources/org/apache/maven/archiva/indexer/bytecode/BytecodeSearchTest.xml
new file mode 100644
index 000000000..af15697a1
--- /dev/null
+++ b/archiva-base/archiva-indexer/src/test/resources/org/apache/maven/archiva/indexer/bytecode/BytecodeSearchTest.xml
@@ -0,0 +1,22 @@
+<component-set>
+ <components>
+ <component>
+ <role>org.apache.maven.archiva.configuration.ArchivaConfiguration</role>
+ <role-hint>mock</role-hint>
+ <implementation>org.apache.maven.archiva.indexer.MockConfiguration</implementation>
+ </component>
+ <component>
+ <role>org.apache.maven.archiva.indexer.RepositoryContentIndexFactory</role>
+ <role-hint>lucene</role-hint>
+ <implementation>org.apache.maven.archiva.indexer.lucene.LuceneRepositoryContentIndexFactory</implementation>
+ <description>Factory for Lucene repository content index instances.</description>
+ <requirements>
+ <requirement>
+ <role>org.apache.maven.archiva.configuration.ArchivaConfiguration</role>
+ <role-hint>mock</role-hint>
+ <field-name>configuration</field-name>
+ </requirement>
+ </requirements>
+ </component>
+ </components>
+</component-set>
diff --git a/archiva-base/archiva-indexer/src/test/resources/org/apache/maven/archiva/indexer/hashcodes/HashcodesIndexTest.xml b/archiva-base/archiva-indexer/src/test/resources/org/apache/maven/archiva/indexer/hashcodes/HashcodesIndexTest.xml
new file mode 100644
index 000000000..af15697a1
--- /dev/null
+++ b/archiva-base/archiva-indexer/src/test/resources/org/apache/maven/archiva/indexer/hashcodes/HashcodesIndexTest.xml
@@ -0,0 +1,22 @@
+<component-set>
+ <components>
+ <component>
+ <role>org.apache.maven.archiva.configuration.ArchivaConfiguration</role>
+ <role-hint>mock</role-hint>
+ <implementation>org.apache.maven.archiva.indexer.MockConfiguration</implementation>
+ </component>
+ <component>
+ <role>org.apache.maven.archiva.indexer.RepositoryContentIndexFactory</role>
+ <role-hint>lucene</role-hint>
+ <implementation>org.apache.maven.archiva.indexer.lucene.LuceneRepositoryContentIndexFactory</implementation>
+ <description>Factory for Lucene repository content index instances.</description>
+ <requirements>
+ <requirement>
+ <role>org.apache.maven.archiva.configuration.ArchivaConfiguration</role>
+ <role-hint>mock</role-hint>
+ <field-name>configuration</field-name>
+ </requirement>
+ </requirements>
+ </component>
+ </components>
+</component-set>
diff --git a/archiva-base/archiva-indexer/src/test/resources/org/apache/maven/archiva/indexer/hashcodes/HashcodesSearchTest.xml b/archiva-base/archiva-indexer/src/test/resources/org/apache/maven/archiva/indexer/hashcodes/HashcodesSearchTest.xml
new file mode 100644
index 000000000..af15697a1
--- /dev/null
+++ b/archiva-base/archiva-indexer/src/test/resources/org/apache/maven/archiva/indexer/hashcodes/HashcodesSearchTest.xml
@@ -0,0 +1,22 @@
+<component-set>
+ <components>
+ <component>
+ <role>org.apache.maven.archiva.configuration.ArchivaConfiguration</role>
+ <role-hint>mock</role-hint>
+ <implementation>org.apache.maven.archiva.indexer.MockConfiguration</implementation>
+ </component>
+ <component>
+ <role>org.apache.maven.archiva.indexer.RepositoryContentIndexFactory</role>
+ <role-hint>lucene</role-hint>
+ <implementation>org.apache.maven.archiva.indexer.lucene.LuceneRepositoryContentIndexFactory</implementation>
+ <description>Factory for Lucene repository content index instances.</description>
+ <requirements>
+ <requirement>
+ <role>org.apache.maven.archiva.configuration.ArchivaConfiguration</role>
+ <role-hint>mock</role-hint>
+ <field-name>configuration</field-name>
+ </requirement>
+ </requirements>
+ </component>
+ </components>
+</component-set>
diff --git a/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/ArchivaArtifact.java b/archiva-base/archiva-model/src/main/java/org/apache/maven/archiva/model/ArchivaArtifact.java
index 2456f29f3..8e4f2c4ac 100644
--- a/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/ArchivaArtifact.java
+++ b/archiva-base/archiva-model/src/main/java/org/apache/maven/archiva/model/ArchivaArtifact.java
@@ -1,4 +1,4 @@
-package org.apache.maven.archiva.repository;
+package org.apache.maven.archiva.model;
/*
* Licensed to the Apache Software Foundation (ASF) under one
@@ -19,9 +19,7 @@ package org.apache.maven.archiva.repository;
* under the License.
*/
-import org.apache.maven.archiva.model.ArchivaArtifactModel;
-import org.apache.maven.archiva.model.RepositoryContent;
-import org.apache.maven.archiva.repository.version.VersionUtil;
+import org.apache.maven.archiva.common.utils.VersionUtil;
import org.codehaus.plexus.util.StringUtils;
/**
@@ -33,6 +31,8 @@ import org.codehaus.plexus.util.StringUtils;
public class ArchivaArtifact
{
private ArchivaArtifactModel model;
+
+ private ArchivaArtifactPlatformDetails platformDetails;
private String baseVersion;
@@ -68,7 +68,7 @@ public class ArchivaArtifact
model = new ArchivaArtifactModel();
- if( repository == null )
+ if ( repository == null )
{
model.setContentKey( new RepositoryContent( groupId, artifactId, version ) );
}
@@ -83,6 +83,11 @@ public class ArchivaArtifact
this.baseVersion = VersionUtil.getBaseVersion( version );
}
+ public ArchivaArtifactModel getModel()
+ {
+ return model;
+ }
+
public String getGroupId()
{
return model.getContentKey().getGroupId();
@@ -123,6 +128,95 @@ public class ArchivaArtifact
return StringUtils.isNotEmpty( model.getClassifier() );
}
+ public int hashCode()
+ {
+ final int PRIME = 31;
+ int result = 1;
+ if ( model != null )
+ {
+ RepositoryContent key = model.getContentKey();
+ if ( key != null )
+ {
+ result = PRIME * result + ( ( key.getGroupId() == null ) ? 0 : key.getGroupId().hashCode() );
+ result = PRIME * result + ( ( key.getArtifactId() == null ) ? 0 : key.getArtifactId().hashCode() );
+ result = PRIME * result + ( ( key.getVersion() == null ) ? 0 : key.getVersion().hashCode() );
+ result = PRIME * result + ( ( model.getClassifier() == null ) ? 0 : model.getClassifier().hashCode() );
+ result = PRIME * result + ( ( model.getType() == null ) ? 0 : model.getType().hashCode() );
+ }
+ }
+ return result;
+ }
+
+ public boolean equals( Object obj )
+ {
+ if ( this == obj )
+ {
+ return true;
+ }
+
+ if ( obj == null )
+ {
+ return false;
+ }
+
+ if ( getClass() != obj.getClass() )
+ {
+ return false;
+ }
+
+ final ArchivaArtifact other = (ArchivaArtifact) obj;
+
+ if ( model == null )
+ {
+ if ( other.model != null )
+ {
+ return false;
+ }
+ }
+ else
+ {
+ RepositoryContent key = model.getContentKey();
+ RepositoryContent otherkey = other.model.getContentKey();
+
+ if ( key == null )
+ {
+ if ( otherkey != null )
+ {
+ return false;
+ }
+ }
+ else
+ {
+ if ( !equals( key.getGroupId(), otherkey.getGroupId() )
+ || !equals( key.getArtifactId(), otherkey.getArtifactId() )
+ || !equals( key.getVersion(), otherkey.getVersion() )
+ || !equals( model.getClassifier(), other.model.getClassifier() )
+ || !equals( model.getType(), other.model.getType() ) )
+ {
+ return false;
+ }
+ }
+ }
+
+ return true;
+ }
+
+ private boolean equals( String left, String right )
+ {
+ if ( left == null )
+ {
+ if ( right != null )
+ {
+ return false;
+ }
+ }
+ else if ( !left.equals( right ) )
+ {
+ return false;
+ }
+ return true;
+ }
+
public String toString()
{
StringBuffer sb = new StringBuffer();
@@ -155,7 +249,16 @@ public class ArchivaArtifact
private boolean empty( String value )
{
- return value == null || value.trim().length() < 1;
+ return ( value == null ) || ( value.trim().length() < 1 );
}
+ public ArchivaArtifactPlatformDetails getPlatformDetails()
+ {
+ return platformDetails;
+ }
+
+ public void setPlatformDetails( ArchivaArtifactPlatformDetails platformDetails )
+ {
+ this.platformDetails = platformDetails;
+ }
}
diff --git a/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/layer/DefaultRepositoryQueryLayerTest.java b/archiva-base/archiva-model/src/main/java/org/apache/maven/archiva/model/ArchivaArtifactPlatformDetails.java
index 4a50f8c66..b63faf2fe 100644
--- a/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/layer/DefaultRepositoryQueryLayerTest.java
+++ b/archiva-base/archiva-model/src/main/java/org/apache/maven/archiva/model/ArchivaArtifactPlatformDetails.java
@@ -1,4 +1,4 @@
-package org.apache.maven.archiva.layer;
+package org.apache.maven.archiva.model;
/*
* Licensed to the Apache Software Foundation (ASF) under one
@@ -9,7 +9,7 @@ package org.apache.maven.archiva.layer;
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
- * http://www.apache.org/licenses/LICENSE-2.0
+ * http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
@@ -19,14 +19,13 @@ package org.apache.maven.archiva.layer;
* under the License.
*/
-public class DefaultRepositoryQueryLayerTest
- extends AbstractRepositoryQueryLayerTestCase
+/**
+ * A tag for objects that are considered ArchivaArtifactPlatformDetails.
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public interface ArchivaArtifactPlatformDetails
{
- protected void setUp()
- throws Exception
- {
- super.setUp();
-
- queryLayer = new DefaultRepositoryQueryLayer( repository );
- }
+ public String getPlatform();
}
diff --git a/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/ArchivaRepository.java b/archiva-base/archiva-model/src/main/java/org/apache/maven/archiva/model/ArchivaRepository.java
index c1fb4f0fe..78c4b6648 100644
--- a/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/ArchivaRepository.java
+++ b/archiva-base/archiva-model/src/main/java/org/apache/maven/archiva/model/ArchivaRepository.java
@@ -1,4 +1,4 @@
-package org.apache.maven.archiva.repository;
+package org.apache.maven.archiva.model;
/*
* Licensed to the Apache Software Foundation (ASF) under one
@@ -19,8 +19,7 @@ package org.apache.maven.archiva.repository;
* under the License.
*/
-import org.apache.maven.archiva.model.ArchivaRepositoryModel;
-import org.apache.maven.artifact.repository.ArtifactRepositoryPolicy;
+
/**
* ArchivaRepository
@@ -30,14 +29,14 @@ import org.apache.maven.artifact.repository.ArtifactRepositoryPolicy;
*/
public class ArchivaRepository
{
- protected ArtifactRepositoryPolicy releases;
-
- protected ArtifactRepositoryPolicy snapshots;
+// protected ArtifactRepositoryPolicy releases;
+//
+// protected ArtifactRepositoryPolicy snapshots;
private ArchivaRepositoryModel model;
private RepositoryURL url;
-
+
protected boolean blacklisted;
/**
@@ -103,25 +102,25 @@ public class ArchivaRepository
this.blacklisted = blacklisted;
}
- public ArtifactRepositoryPolicy getReleases()
- {
- return releases;
- }
-
- public void setReleases( ArtifactRepositoryPolicy releases )
- {
- this.releases = releases;
- }
-
- public ArtifactRepositoryPolicy getSnapshots()
- {
- return snapshots;
- }
-
- public void setSnapshots( ArtifactRepositoryPolicy snapshots )
- {
- this.snapshots = snapshots;
- }
+// public ArtifactRepositoryPolicy getReleases()
+// {
+// return releases;
+// }
+//
+// public void setReleases( ArtifactRepositoryPolicy releases )
+// {
+// this.releases = releases;
+// }
+//
+// public ArtifactRepositoryPolicy getSnapshots()
+// {
+// return snapshots;
+// }
+//
+// public void setSnapshots( ArtifactRepositoryPolicy snapshots )
+// {
+// this.snapshots = snapshots;
+// }
public boolean isRemote()
{
diff --git a/archiva-base/archiva-model/src/main/java/org/apache/maven/archiva/model/DependencyScope.java b/archiva-base/archiva-model/src/main/java/org/apache/maven/archiva/model/DependencyScope.java
new file mode 100644
index 000000000..03d62307c
--- /dev/null
+++ b/archiva-base/archiva-model/src/main/java/org/apache/maven/archiva/model/DependencyScope.java
@@ -0,0 +1,46 @@
+package org.apache.maven.archiva.model;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.lang.StringUtils;
+
+/**
+ * DependencyScope - utility methods and constants for working with scopes.
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class DependencyScope
+{
+ public static final String SYSTEM = "system";
+
+ public static final String COMPILE = "compile";
+
+ public static final String PROVIDED = "provided";
+
+ public static final String RUNTIME = "runtime";
+
+ public static final String TEST = "test";
+
+ public static boolean isSystemScoped( Dependency dep )
+ {
+ return StringUtils.equals( SYSTEM, dep.getScope() );
+ }
+}
diff --git a/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/RepositoryURL.java b/archiva-base/archiva-model/src/main/java/org/apache/maven/archiva/model/RepositoryURL.java
index 13ed57fc9..9141fcdc9 100644
--- a/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/RepositoryURL.java
+++ b/archiva-base/archiva-model/src/main/java/org/apache/maven/archiva/model/RepositoryURL.java
@@ -1,4 +1,4 @@
-package org.apache.maven.archiva.repository;
+package org.apache.maven.archiva.model;
/*
* Licensed to the Apache Software Foundation (ASF) under one
diff --git a/archiva-base/archiva-model/src/main/java/org/apache/maven/archiva/model/platform/JavaArtifactHelper.java b/archiva-base/archiva-model/src/main/java/org/apache/maven/archiva/model/platform/JavaArtifactHelper.java
new file mode 100644
index 000000000..1c8ffc482
--- /dev/null
+++ b/archiva-base/archiva-model/src/main/java/org/apache/maven/archiva/model/platform/JavaArtifactHelper.java
@@ -0,0 +1,44 @@
+package org.apache.maven.archiva.model.platform;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.archiva.model.ArchivaArtifact;
+import org.apache.maven.archiva.model.ArchivaArtifactJavaDetails;
+
+/**
+ * Utility methods for working with java platform specific ArchivaArtifacts.
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class JavaArtifactHelper
+{
+ public static ArchivaArtifactJavaDetails getJavaDetails( ArchivaArtifact artifact )
+ {
+ ArchivaArtifactJavaDetails javaDetails = (ArchivaArtifactJavaDetails) artifact.getPlatformDetails();
+ if ( javaDetails == null )
+ {
+ javaDetails = new ArchivaArtifactJavaDetails();
+ artifact.setPlatformDetails( javaDetails );
+ }
+
+ return javaDetails;
+ }
+}
diff --git a/archiva-base/archiva-model/src/main/mdo/archiva-base.xml b/archiva-base/archiva-model/src/main/mdo/archiva-base.xml
index a6cc0fc40..101fde635 100644
--- a/archiva-base/archiva-model/src/main/mdo/archiva-base.xml
+++ b/archiva-base/archiva-model/src/main/mdo/archiva-base.xml
@@ -295,6 +295,13 @@
<name>ArchivaArtifactModel</name>
<version>1.0.0+</version>
<fields>
+ <!--
+ NOTE TO ARCHIVA DEVELOPERS....
+
+ The ArchivaArtifact object should contain no platform specifics!!
+ Put Java specifics in the ArchivaArtifactJavaDetails object.
+ Put .Net specifics in the ArchivaArtifactDotNetDetails object.
+ -->
<field>
<name>contentKey</name>
<identity>true</identity>
@@ -349,15 +356,35 @@
</description>
</field>
<field>
- <name>checksumBytecode</name>
+ <name>lastModified</name>
+ <identity>false</identity>
+ <version>1.0.0+</version>
+ <type>Date</type>
+ <required>true</required>
+ <description>
+ The Last Modified Timestamp of this artifact.
+ </description>
+ </field>
+ <field jpox.column="FILE_SIZE">
+ <name>size</name>
+ <identity>false</identity>
+ <version>1.0.0+</version>
+ <type>long</type>
+ <required>true</required>
+ <description>
+ The size of the artifact on disk.
+ </description>
+ </field>
+ <field>
+ <name>platform</name>
<identity>false</identity>
<version>1.0.0+</version>
<type>String</type>
- <required>false</required>
+ <required>true</required>
<description>
- The SHA1 checksum for the bytecode in the artifact file. (Can be empty if
- the artifact contains no bytecode)
+ The platform of this artifact. (default: "java")
</description>
+ <defaultValue>java</defaultValue>
</field>
<field>
<name>whenIndexed</name>
@@ -382,6 +409,66 @@
</fields>
</class>
<class stash.storable="true"
+ jpox.table="JAVA_ARTIFACT">
+ <name>ArchivaArtifactJavaDetails</name>
+ <interfaces>
+ <interface>org.apache.maven.archiva.model.ArchivaArtifactPlatformDetails</interface>
+ </interfaces>
+ <version>1.0.0+</version>
+ <fields>
+ <field>
+ <name>contentKey</name>
+ <identity>true</identity>
+ <version>1.0.0+</version>
+ <required>true</required>
+ <association>
+ <type>RepositoryContent</type>
+ <multiplicity>1</multiplicity>
+ </association>
+ <description>
+ The content key for this java artifact details.
+ </description>
+ </field>
+ <field>
+ <name>checksumBytecode</name>
+ <identity>false</identity>
+ <version>1.0.0+</version>
+ <type>String</type>
+ <required>false</required>
+ <description>
+ The SHA1 checksum for the bytecode in the artifact file. (Can be empty if
+ the artifact contains no bytecode)
+ </description>
+ </field>
+ <field>
+ <name>jdk</name>
+ <identity>false</identity>
+ <version>1.0.0+</version>
+ <type>String</type>
+ <required>false</required>
+ <description>
+ The JDK revision of the bytecode. (Can be empty if the artifact contains no bytecode)
+ </description>
+ </field>
+ </fields>
+ <codeSegments>
+ <codeSegment>
+ <version>1.0.0+</version>
+ <code><![CDATA[
+ /**
+ * Identify this implementation as a set of java details.
+ *
+ * @return the Java platform string
+ */
+ public String getPlatform()
+ {
+ return "java";
+ }
+ ]]></code>
+ </codeSegment>
+ </codeSegments>
+ </class>
+ <class stash.storable="true"
jpox.table="REPOSITORY_METADATA">
<name>ArchivaRepositoryMetadata</name>
<version>1.0.0+</version>
@@ -423,23 +510,33 @@
</description>
</field>
<field>
- <name>whenIndexed</name>
+ <name>lastModified</name>
<identity>false</identity>
<version>1.0.0+</version>
<type>Date</type>
- <required>false</required>
+ <required>true</required>
<description>
- The timestamp when this artifact was indexed.
+ The Last Modified Timestamp of this artifact.
+ </description>
+ </field>
+ <field jpox.column="FILE_SIZE">
+ <name>size</name>
+ <identity>false</identity>
+ <version>1.0.0+</version>
+ <type>long</type>
+ <required>true</required>
+ <description>
+ The size of the artifact on disk.
</description>
</field>
<field>
- <name>lastUpdated</name>
+ <name>whenIndexed</name>
<identity>false</identity>
<version>1.0.0+</version>
<type>Date</type>
<required>false</required>
<description>
- the timestamp when this artifact was indexed.
+ The timestamp when this artifact was indexed.
</description>
</field>
<field>
@@ -506,6 +603,26 @@
</description>
</field>
<field>
+ <name>name</name>
+ <identity>false</identity>
+ <version>1.0.0+</version>
+ <required>false</required>
+ <type>String</type>
+ <description>
+ The name of this project.
+ </description>
+ </field>
+ <field>
+ <name>description</name>
+ <identity>false</identity>
+ <version>1.0.0+</version>
+ <required>false</required>
+ <type>String</type>
+ <description>
+ The description of this project.
+ </description>
+ </field>
+ <field>
<name>origin</name>
<identity>false</identity>
<version>1.0.0+</version>
@@ -953,14 +1070,14 @@
<fields>
<field>
<name>groupId</name>
- <version>4.0.0</version>
+ <version>1.0.0+</version>
<description><![CDATA[The group ID of the project to exclude.]]></description>
<type>String</type>
<required>true</required>
</field>
<field>
<name>artifactId</name>
- <version>4.0.0</version>
+ <version>1.0.0+</version>
<description><![CDATA[The artifact ID of the project to exclude.]]></description>
<type>String</type>
<required>true</required>
@@ -974,7 +1091,7 @@
<fields>
<field jpox.column="SCM_URL">
<name>connection</name>
- <version>1.0.0</version>
+ <version>1.0.0+</version>
<description><![CDATA[
The source control management system URL
that describes the repository and how to connect to the
@@ -987,7 +1104,7 @@
</field>
<field>
<name>developerConnection</name>
- <version>1.0.0</version>
+ <version>1.0.0+</version>
<description><![CDATA[
Just like <code>connection</code>, but for developers, i.e. this scm connection
will not be read only.
@@ -996,7 +1113,7 @@
</field>
<field>
<name>url</name>
- <version>1.0.0</version>
+ <version>1.0.0+</version>
<description>
<![CDATA[The URL to the project's browsable SCM repository, such as ViewVC or Fisheye.]]></description>
<type>String</type>
@@ -1010,7 +1127,7 @@
<fields>
<field>
<name>id</name>
- <version>4.0.0</version>
+ <version>1.0.0+</version>
<description><![CDATA[
A unique identifier for a repository. This is used to match the repository to configuration in
the <code>settings.xml</code> file, for example.
@@ -1019,7 +1136,7 @@
</field>
<field>
<name>name</name>
- <version>4.0.0</version>
+ <version>1.0.0+</version>
<description><![CDATA[
Human readable name of the repository.
]]></description>
@@ -1027,7 +1144,7 @@
</field>
<field>
<name>url</name>
- <version>4.0.0</version>
+ <version>1.0.0+</version>
<description><![CDATA[
The url of the repository, in the form <code>protocol://hostname/path</code>.
]]></description>
@@ -1035,7 +1152,7 @@
</field>
<field>
<name>layout</name>
- <version>4.0.0</version>
+ <version>1.0.0+</version>
<description><![CDATA[
The type of layout this repository uses for locating and storing artifacts - can be <code>legacy</code> or
<code>default</code>.
diff --git a/archiva-base/archiva-repository-layer/pom.xml b/archiva-base/archiva-repository-layer/pom.xml
index 7b4db106a..6ec87f431 100644
--- a/archiva-base/archiva-repository-layer/pom.xml
+++ b/archiva-base/archiva-repository-layer/pom.xml
@@ -26,13 +26,12 @@
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
- <groupId>org.apache.maven.archiva</groupId>
<artifactId>archiva-repository-layer</artifactId>
<name>Archiva Repository Interface Layer</name>
<dependencies>
<dependency>
<groupId>org.apache.maven.archiva</groupId>
- <artifactId>archiva-common</artifactId>
+ <artifactId>archiva-consumer-api</artifactId>
</dependency>
<dependency>
<groupId>org.apache.maven.archiva</groupId>
@@ -40,6 +39,11 @@
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
+ <groupId>org.apache.maven.archiva</groupId>
+ <artifactId>archiva-xml-tools</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ </dependency>
+ <dependency>
<groupId>org.codehaus.plexus</groupId>
<artifactId>plexus-utils</artifactId>
</dependency>
@@ -55,6 +59,7 @@
<version>1.0-alpha-2-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
+ <!--
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-artifact</artifactId>
@@ -67,6 +72,7 @@
<groupId>org.apache.maven</groupId>
<artifactId>maven-repository-metadata</artifactId>
</dependency>
+ -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
diff --git a/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/layer/CachedRepositoryQueryLayer.java b/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/layer/CachedRepositoryQueryLayer.java
deleted file mode 100644
index 2f7f35fe9..000000000
--- a/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/layer/CachedRepositoryQueryLayer.java
+++ /dev/null
@@ -1,98 +0,0 @@
-package org.apache.maven.archiva.layer;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import org.apache.maven.artifact.Artifact;
-import org.apache.maven.artifact.repository.ArtifactRepository;
-import org.codehaus.plexus.cache.Cache;
-import org.codehaus.plexus.cache.CacheException;
-import org.codehaus.plexus.cache.CacheHints;
-import org.codehaus.plexus.cache.factory.CacheFactory;
-
-import java.util.List;
-
-/**
- * CachedRepositoryQueryLayer - simple wrapper around another non-cached Repository Query Layer.
- *
- * @version $Id$
- */
-public class CachedRepositoryQueryLayer
- implements RepositoryQueryLayer
-{
- private Cache cache;
-
- private RepositoryQueryLayer layer;
-
- public CachedRepositoryQueryLayer( RepositoryQueryLayer layer )
- throws RepositoryQueryLayerException
- {
- this.layer = layer;
- String repoId = layer.getRepository().getId();
-
- CacheHints hints = new CacheHints();
- hints.setName( repoId );
- hints.setOverflowToDisk( false );
- try
- {
- this.cache = CacheFactory.getInstance().getCache( repoId, hints );
- }
- catch ( CacheException e )
- {
- throw new RepositoryQueryLayerException( "Unable to initialize cache: " + e.getMessage(), e );
- }
- }
-
- public boolean containsArtifact( Artifact artifact )
- {
- boolean artifactFound = true;
-
- String artifactPath = layer.getRepository().pathOf( artifact );
-
- if ( cache.get( artifactPath ) == null )
- {
- artifactFound = layer.containsArtifact( artifact );
- if ( artifactFound )
- {
- cache.put( artifactPath, artifactPath );
- }
- }
-
- return artifactFound;
- }
-
- public List getVersions( Artifact artifact )
- throws RepositoryQueryLayerException
- {
- List list = (List) cache.get( artifact.getId() );
-
- if ( list == null )
- {
- list = layer.getVersions( artifact );
- cache.put( artifact.getId(), list );
- }
-
- return list;
- }
-
- public ArtifactRepository getRepository()
- {
- return layer.getRepository();
- }
-}
diff --git a/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/layer/DefaultRepositoryQueryLayer.java b/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/layer/DefaultRepositoryQueryLayer.java
deleted file mode 100644
index d664dad1b..000000000
--- a/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/layer/DefaultRepositoryQueryLayer.java
+++ /dev/null
@@ -1,105 +0,0 @@
-package org.apache.maven.archiva.layer;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import org.apache.maven.artifact.Artifact;
-import org.apache.maven.artifact.repository.ArtifactRepository;
-import org.apache.maven.artifact.repository.metadata.ArtifactRepositoryMetadata;
-import org.apache.maven.artifact.repository.metadata.Metadata;
-import org.apache.maven.artifact.repository.metadata.io.xpp3.MetadataXpp3Reader;
-import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
-
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.FileReader;
-import java.io.IOException;
-import java.util.List;
-
-/**
- * DefaultRepositoryQueryLayer
- *
- * @version $Id$
- * @plexus.component role="org.apache.maven.archiva.layer.RepositoryQueryLayer" role-hint="default"
- */
-public class DefaultRepositoryQueryLayer
- implements RepositoryQueryLayer
-{
- protected ArtifactRepository repository;
-
- public DefaultRepositoryQueryLayer( ArtifactRepository repository )
- {
- this.repository = repository;
- }
-
- public boolean containsArtifact( Artifact artifact )
- {
- File f = new File( repository.getBasedir(), repository.pathOf( artifact ) );
- return f.exists();
- }
-
- public List getVersions( Artifact artifact )
- throws RepositoryQueryLayerException
- {
- Metadata metadata = getMetadata( artifact );
-
- return metadata.getVersioning().getVersions();
- }
-
- public ArtifactRepository getRepository()
- {
- return repository;
- }
-
- private Metadata getMetadata( Artifact artifact )
- throws RepositoryQueryLayerException
- {
- Metadata metadata;
-
- ArtifactRepositoryMetadata repositoryMetadata = new ArtifactRepositoryMetadata( artifact );
- String path = repository.pathOfRemoteRepositoryMetadata( repositoryMetadata );
- File metadataFile = new File( repository.getBasedir(), path );
- if ( metadataFile.exists() )
- {
- MetadataXpp3Reader reader = new MetadataXpp3Reader();
- try
- {
- metadata = reader.read( new FileReader( metadataFile ) );
- }
- catch ( FileNotFoundException e )
- {
- throw new RepositoryQueryLayerException( "Error occurred while attempting to read metadata file", e );
- }
- catch ( IOException e )
- {
- throw new RepositoryQueryLayerException( "Error occurred while attempting to read metadata file", e );
- }
- catch ( XmlPullParserException e )
- {
- throw new RepositoryQueryLayerException( "Error occurred while attempting to read metadata file", e );
- }
- }
- else
- {
- throw new RepositoryQueryLayerException( "Metadata not found: " + metadataFile.getAbsolutePath() );
- }
-
- return metadata;
- }
-}
diff --git a/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/layer/DefaultRepositoryQueryLayerFactory.java b/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/layer/DefaultRepositoryQueryLayerFactory.java
deleted file mode 100644
index a7e794b19..000000000
--- a/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/layer/DefaultRepositoryQueryLayerFactory.java
+++ /dev/null
@@ -1,38 +0,0 @@
-package org.apache.maven.archiva.layer;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import org.apache.maven.artifact.repository.ArtifactRepository;
-
-/**
- * Gets the default implementation of a repository query layer for the given repository.
- *
- * @author <a href="mailto:brett@apache.org">Brett Porter</a>
- * @version $Id:DefaultRepositoryQueryLayerFactory.java 437105 2006-08-26 17:22:22 +1000 (Sat, 26 Aug 2006) brett $
- * @plexus.component role="org.apache.maven.archiva.layer.RepositoryQueryLayerFactory"
- */
-public class DefaultRepositoryQueryLayerFactory
- implements RepositoryQueryLayerFactory
-{
- public RepositoryQueryLayer createRepositoryQueryLayer( ArtifactRepository repository )
- {
- return new DefaultRepositoryQueryLayer( repository );
- }
-}
diff --git a/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/layer/RepositoryQueryLayer.java b/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/layer/RepositoryQueryLayer.java
deleted file mode 100644
index 16ee0b378..000000000
--- a/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/layer/RepositoryQueryLayer.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package org.apache.maven.archiva.layer;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import org.apache.maven.artifact.Artifact;
-import org.apache.maven.artifact.repository.ArtifactRepository;
-
-import java.util.List;
-
-/**
- * The transitive and metadata validation reports will need to query the repository for artifacts.
- */
-public interface RepositoryQueryLayer
-{
- String ROLE = RepositoryQueryLayer.class.getName();
-
- boolean containsArtifact( Artifact artifact );
-
- List getVersions( Artifact artifact )
- throws RepositoryQueryLayerException;
-
- ArtifactRepository getRepository();
-}
diff --git a/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/layer/RepositoryQueryLayerFactory.java b/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/layer/RepositoryQueryLayerFactory.java
deleted file mode 100644
index 2aad42224..000000000
--- a/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/layer/RepositoryQueryLayerFactory.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package org.apache.maven.archiva.layer;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import org.apache.maven.artifact.repository.ArtifactRepository;
-
-/**
- * Gets the preferred implementation of a repository query layer for the given repository.
- *
- * @author <a href="mailto:brett@apache.org">Brett Porter</a>
- * @version $Id:RepositoryQueryLayerFactory.java 437105 2006-08-26 17:22:22 +1000 (Sat, 26 Aug 2006) brett $
- */
-public interface RepositoryQueryLayerFactory
-{
- String ROLE = RepositoryQueryLayerFactory.class.getName();
-
- /**
- * Create or obtain a query interface.
- *
- * @param repository the repository to query
- * @return the obtained query layer
- */
- RepositoryQueryLayer createRepositoryQueryLayer( ArtifactRepository repository );
-}
diff --git a/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/connector/RepositoryConnector.java b/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/connector/RepositoryConnector.java
index f7adfedac..3d70058fd 100644
--- a/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/connector/RepositoryConnector.java
+++ b/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/connector/RepositoryConnector.java
@@ -19,7 +19,7 @@ package org.apache.maven.archiva.repository.connector;
* under the License.
*/
-import org.apache.maven.archiva.repository.ArchivaRepository;
+import org.apache.maven.archiva.model.ArchivaRepository;
import java.util.List;
diff --git a/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/consumer/Consumer.java b/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/consumer/Consumer.java
deleted file mode 100644
index 66b35a232..000000000
--- a/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/consumer/Consumer.java
+++ /dev/null
@@ -1,91 +0,0 @@
-package org.apache.maven.archiva.repository.consumer;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import org.apache.maven.archiva.common.utils.BaseFile;
-import org.apache.maven.archiva.repository.ArchivaRepository;
-import org.apache.maven.artifact.repository.ArtifactRepository;
-
-import java.util.List;
-
-/**
- * DiscovererConsumer
- *
- * @author <a href="mailto:joakime@apache.org">Joakim Erdfelt</a>
- * @version $Id$
- */
-public interface Consumer
-{
- public static final String ROLE = Consumer.class.getName();
-
- /**
- * This is the human readable name for the discoverer.
- *
- * @return the human readable discoverer name.
- */
- public String getName();
-
- /**
- * This is used to initialize any internals in the consumer before it is used.
- *
- * This method is called by the internals of archiva and is not meant to be used by other developers.
- * This method is called once per repository.
- *
- * @param repository the repository to initialize the consumer against.
- * @return true if the repository is valid for this consumer. false will result in consumer being disabled
- * for the provided repository.
- */
- public boolean init( ArchivaRepository repository );
-
- /**
- * Get the List of excluded file patterns for this consumer.
- *
- * @return the list of excluded file patterns for this consumer.
- */
- public List getExcludePatterns();
-
- /**
- * Get the List of included file patterns for this consumer.
- *
- * @return the list of included file patterns for this consumer.
- */
- public List getIncludePatterns();
-
- /**
- * Called by archiva framework to indicate that there is a file suitable for consuming,
- * This method will only be called if the {@link #init(ArtifactRepository)} and {@link #getExcludePatterns()}
- * and {@link #getIncludePatterns()} all pass for this consumer.
- *
- * @param file the file to process.
- * @throws ConsumerException if there was a problem processing this file.
- */
- public void processFile( BaseFile file ) throws ConsumerException;
-
- /**
- * Called by archiva framework to indicate that there has been a problem detected
- * on a specific file.
- *
- * NOTE: It is very possible for 1 file to have more than 1 problem associated with it.
- *
- * @param file the file to process.
- * @param message the message describing the problem.
- */
- public void processFileProblem( BaseFile file, String message );
-}
diff --git a/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/consumer/ConsumerFactory.java b/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/consumer/ConsumerFactory.java
deleted file mode 100644
index 00c88064d..000000000
--- a/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/consumer/ConsumerFactory.java
+++ /dev/null
@@ -1,70 +0,0 @@
-package org.apache.maven.archiva.repository.consumer;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import org.codehaus.plexus.PlexusConstants;
-import org.codehaus.plexus.PlexusContainer;
-import org.codehaus.plexus.context.Context;
-import org.codehaus.plexus.context.ContextException;
-import org.codehaus.plexus.logging.AbstractLogEnabled;
-import org.codehaus.plexus.personality.plexus.lifecycle.phase.Contextualizable;
-
-/**
- * DiscovererConsumerFactory - factory for consumers.
- *
- * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
- * @version $Id$
- * @plexus.component role="org.apache.maven.archiva.common.consumers.ConsumerFactory"
- */
-public class ConsumerFactory
- extends AbstractLogEnabled
- implements Contextualizable
-{
- public static final String ROLE = ConsumerFactory.class.getName();
-
- private PlexusContainer container;
-
- public Consumer createConsumer( String name )
- throws ConsumerException
- {
- getLogger().info( "Attempting to create consumer [" + name + "]" );
-
- Consumer consumer;
- try
- {
- consumer = (Consumer) container.lookup( Consumer.ROLE, name, container.getLookupRealm() );
- }
- catch ( Throwable t )
- {
- String emsg = "Unable to create consumer [" + name + "]: " + t.getMessage();
- getLogger().warn( t.getMessage(), t );
- throw new ConsumerException( null, emsg, t );
- }
-
- getLogger().info( "Created consumer [" + name + "|" + consumer.getName() + "]" );
- return consumer;
- }
-
- public void contextualize( Context context )
- throws ContextException
- {
- container = (PlexusContainer) context.get( PlexusConstants.PLEXUS_KEY );
- }
-}
diff --git a/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/AbstractArtifactExtensionMapping.java b/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/AbstractArtifactExtensionMapping.java
index 3b1ab31c1..4b0169abb 100644
--- a/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/AbstractArtifactExtensionMapping.java
+++ b/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/AbstractArtifactExtensionMapping.java
@@ -19,7 +19,7 @@ package org.apache.maven.archiva.repository.content;
* under the License.
*/
-import org.apache.maven.archiva.repository.ArchivaArtifact;
+import org.apache.maven.archiva.model.ArchivaArtifact;
import java.util.HashMap;
import java.util.Map;
@@ -44,6 +44,8 @@ public abstract class AbstractArtifactExtensionMapping implements ArtifactExtens
typeToExtensionMap.put( "java-source", "jar" );
typeToExtensionMap.put( "aspect", "jar" );
typeToExtensionMap.put( "uberjar", "jar" );
+ typeToExtensionMap.put( "maven-plugin", "jar" );
+ typeToExtensionMap.put( "maven-archetype", "jar" );
}
public String getExtension( ArchivaArtifact artifact )
diff --git a/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/ArtifactExtensionMapping.java b/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/ArtifactExtensionMapping.java
index 0f6c990e7..5b2924762 100644
--- a/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/ArtifactExtensionMapping.java
+++ b/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/content/ArtifactExtensionMapping.java
@@ -19,7 +19,7 @@ package org.apache.maven.archiva.repository.content;
* under the License.
*/
-import org.apache.maven.archiva.repository.ArchivaArtifact;
+import org.apache.maven.archiva.model.ArchivaArtifact;
/**
* ArtifactExtensionMapping - Utility to provide the mapping between an Artifact's extension and it's type and
diff --git a/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/layout/BidirectionalRepositoryLayout.java b/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/layout/BidirectionalRepositoryLayout.java
index 29770dffc..00e2dd9b5 100644
--- a/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/layout/BidirectionalRepositoryLayout.java
+++ b/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/layout/BidirectionalRepositoryLayout.java
@@ -19,7 +19,7 @@ package org.apache.maven.archiva.repository.layout;
* under the License.
*/
-import org.apache.maven.archiva.repository.ArchivaArtifact;
+import org.apache.maven.archiva.model.ArchivaArtifact;
/**
* BidirectionalRepositoryLayout - Similar in scope to ArtifactRepositoryLayout, but does
diff --git a/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/layout/DefaultBidirectionalRepositoryLayout.java b/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/layout/DefaultBidirectionalRepositoryLayout.java
index 35406aa07..114589389 100644
--- a/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/layout/DefaultBidirectionalRepositoryLayout.java
+++ b/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/layout/DefaultBidirectionalRepositoryLayout.java
@@ -20,7 +20,8 @@ package org.apache.maven.archiva.repository.layout;
*/
import org.apache.commons.lang.StringUtils;
-import org.apache.maven.archiva.repository.ArchivaArtifact;
+import org.apache.maven.archiva.common.utils.VersionUtil;
+import org.apache.maven.archiva.model.ArchivaArtifact;
import org.apache.maven.archiva.repository.content.ArtifactExtensionMapping;
import org.apache.maven.archiva.repository.content.DefaultArtifactExtensionMapping;
@@ -32,8 +33,7 @@ import org.apache.maven.archiva.repository.content.DefaultArtifactExtensionMappi
*
* @plexus.component role-hint="default"
*/
-public class DefaultBidirectionalRepositoryLayout
- implements BidirectionalRepositoryLayout
+public class DefaultBidirectionalRepositoryLayout implements BidirectionalRepositoryLayout
{
private static final char PATH_SEPARATOR = '/';
@@ -101,7 +101,7 @@ public class DefaultBidirectionalRepositoryLayout
String filename = pathParts[partCount - 1];
// Second to last is the baseVersion (the directory version)
- // (Don't need it) String baseVersion = pathParts[partCount - 2];
+ String baseVersion = pathParts[partCount - 2];
// Third to last is the artifact Id.
String artifactId = pathParts[partCount - 3];
@@ -116,14 +116,26 @@ public class DefaultBidirectionalRepositoryLayout
}
groupId += pathParts[i];
}
-
+
// Now we need to parse the filename to get the artifact version Id.
- String fileParts[] = RepositoryLayoutUtils.splitFilename( filename, artifactId );
- String version = fileParts[1];
- String classifier = fileParts[2];
+ FilenameParts fileParts = RepositoryLayoutUtils.splitFilename( filename, artifactId );
String type = extensionMapper.getType( filename );
- return new ArchivaArtifact( groupId, artifactId, version, classifier, type );
+ ArchivaArtifact artifact = new ArchivaArtifact( groupId, artifactId, fileParts.version, fileParts.classifier, type );
+
+ // Sanity Checks.
+ String artifactBaseVersion = VersionUtil.getBaseVersion( fileParts.version );
+ if ( !artifactBaseVersion.equals( baseVersion ) )
+ {
+ throw new LayoutException( "Invalid artifact location, version directory and filename mismatch." );
+ }
+
+ if ( !artifactId.equals( fileParts.artifactId ) )
+ {
+ throw new LayoutException( "Invalid artifact Id" );
+ }
+
+ return artifact;
}
}
diff --git a/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/layout/FilenameParts.java b/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/layout/FilenameParts.java
new file mode 100644
index 000000000..88aa34316
--- /dev/null
+++ b/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/layout/FilenameParts.java
@@ -0,0 +1,73 @@
+package org.apache.maven.archiva.repository.layout;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * FilenameParts - data object for {@link RepositoryLayoutUtils#splitFilename(String, String)} method.
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+class FilenameParts
+{
+ public String artifactId;
+
+ public String version;
+
+ public String classifier;
+
+ public String extension;
+
+ public void appendArtifactId( String piece )
+ {
+ if ( artifactId == null )
+ {
+ artifactId = piece;
+ }
+ else
+ {
+ artifactId += "-" + piece;
+ }
+ }
+
+ public void appendVersion( String piece )
+ {
+ if ( version == null )
+ {
+ version = piece;
+ }
+ else
+ {
+ version += "-" + piece;
+ }
+ }
+
+ public void appendClassifier( String piece )
+ {
+ if ( classifier == null )
+ {
+ classifier = piece;
+ }
+ else
+ {
+ classifier += "-" + piece;
+ }
+ }
+} \ No newline at end of file
diff --git a/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/layout/LegacyBidirectionalRepositoryLayout.java b/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/layout/LegacyBidirectionalRepositoryLayout.java
index 0344a5245..143dbebc0 100644
--- a/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/layout/LegacyBidirectionalRepositoryLayout.java
+++ b/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/layout/LegacyBidirectionalRepositoryLayout.java
@@ -20,7 +20,7 @@ package org.apache.maven.archiva.repository.layout;
*/
import org.apache.commons.lang.StringUtils;
-import org.apache.maven.archiva.repository.ArchivaArtifact;
+import org.apache.maven.archiva.model.ArchivaArtifact;
import org.apache.maven.archiva.repository.content.ArtifactExtensionMapping;
import org.apache.maven.archiva.repository.content.LegacyArtifactExtensionMapping;
@@ -118,18 +118,31 @@ public class LegacyBidirectionalRepositoryLayout implements BidirectionalReposit
// The Group ID.
String groupId = pathParts[0];
+ // The Expected Type.
+ String expectedType = pathParts[1];
+
// The Filename.
String filename = pathParts[2];
- String fileParts[] = RepositoryLayoutUtils.splitFilename( filename, null );
-
- String artifactId = fileParts[0];
- String version = fileParts[1];
- String classifier = fileParts[2];
+ FilenameParts fileParts = RepositoryLayoutUtils.splitFilename( filename, null );
String type = extensionMapper.getType( filename );
- return new ArchivaArtifact( groupId, artifactId, version, classifier, type );
+ ArchivaArtifact artifact =
+ new ArchivaArtifact( groupId, fileParts.artifactId, fileParts.version, fileParts.classifier, type );
+
+ // Sanity Checks.
+ if ( StringUtils.isEmpty( fileParts.extension ) )
+ {
+ throw new LayoutException( "Invalid artifact, no extension." );
+ }
+
+ if ( !expectedType.equals( fileParts.extension + "s" ) )
+ {
+ throw new LayoutException( "Invalid artifact, extension and layout specified type mismatch." );
+ }
+
+ return artifact;
}
}
diff --git a/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/layout/RepositoryLayoutUtils.java b/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/layout/RepositoryLayoutUtils.java
index 8e2c144c9..e9d28e933 100644
--- a/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/layout/RepositoryLayoutUtils.java
+++ b/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/layout/RepositoryLayoutUtils.java
@@ -82,7 +82,7 @@ public class RepositoryLayoutUtils
* @return the parts of the filename.
* @throws LayoutException
*/
- public static String[] splitFilename( String filename, String possibleArtifactId ) throws LayoutException
+ public static FilenameParts splitFilename( String filename, String possibleArtifactId ) throws LayoutException
{
if ( StringUtils.isBlank( filename ) )
{
@@ -91,11 +91,7 @@ public class RepositoryLayoutUtils
String filestring = filename.trim();
- String artifactId = "";
- String version = "";
- String classifier = "";
- String extension = "";
-
+ FilenameParts parts = new FilenameParts();
// I like working backwards.
// Find the extension.
@@ -108,7 +104,7 @@ public class RepositoryLayoutUtils
{
if ( lowercaseFilename.endsWith( "." + ComplexExtensions[i] ) )
{
- extension = ComplexExtensions[i];
+ parts.extension = ComplexExtensions[i];
filestring = filestring.substring( 0, filestring.length() - ComplexExtensions[i].length() - 1 );
found = true;
}
@@ -124,7 +120,7 @@ public class RepositoryLayoutUtils
// Bad Filename - No Extension
throw new LayoutException( "Unable to determine extension from filename " + filename );
}
- extension = filestring.substring( index + 1 );
+ parts.extension = filestring.substring( index + 1 );
filestring = filestring.substring( 0, index );
}
@@ -132,7 +128,7 @@ public class RepositoryLayoutUtils
if ( ( possibleArtifactId != null ) && filename.startsWith( possibleArtifactId ) )
{
- artifactId = possibleArtifactId;
+ parts.artifactId = possibleArtifactId;
filestring = filestring.substring( possibleArtifactId.length() + 1 );
}
@@ -175,7 +171,7 @@ public class RepositoryLayoutUtils
if ( ( mode == ARTIFACTID ) && ( i >= versionStart ) )
{
- if ( StringUtils.isBlank( artifactId ) )
+ if ( StringUtils.isBlank( parts.artifactId ) )
{
throw new LayoutException( "No Artifact Id detected." );
}
@@ -185,25 +181,13 @@ public class RepositoryLayoutUtils
switch ( mode )
{
case ARTIFACTID:
- if ( artifactId.length() > 0 )
- {
- artifactId += "-";
- }
- artifactId += part;
+ parts.appendArtifactId( part );
break;
case VERSION:
- if ( version.length() > 0 )
- {
- version += "-";
- }
- version += part;
+ parts.appendVersion( part );
break;
case CLASSIFIER:
- if ( classifier.length() > 0 )
- {
- classifier += "-";
- }
- classifier += part;
+ parts.appendClassifier( part );
break;
}
@@ -213,7 +197,7 @@ public class RepositoryLayoutUtils
}
}
- return new String[] { artifactId, version, classifier, extension };
+ return parts;
}
}
diff --git a/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/metadata/RepositoryMetadataException.java b/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/metadata/RepositoryMetadataException.java
new file mode 100644
index 000000000..b6ed89150
--- /dev/null
+++ b/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/metadata/RepositoryMetadataException.java
@@ -0,0 +1,52 @@
+package org.apache.maven.archiva.repository.metadata;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.archiva.repository.RepositoryException;
+
+/**
+ * RepositoryMetadataException
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class RepositoryMetadataException extends RepositoryException
+{
+
+ public RepositoryMetadataException()
+ {
+ super();
+ }
+
+ public RepositoryMetadataException( String message, Throwable cause )
+ {
+ super( message, cause );
+ }
+
+ public RepositoryMetadataException( String message )
+ {
+ super( message );
+ }
+
+ public RepositoryMetadataException( Throwable cause )
+ {
+ super( cause );
+ }
+}
diff --git a/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/metadata/RepositoryMetadataReader.java b/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/metadata/RepositoryMetadataReader.java
new file mode 100644
index 000000000..659a7de67
--- /dev/null
+++ b/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/metadata/RepositoryMetadataReader.java
@@ -0,0 +1,73 @@
+package org.apache.maven.archiva.repository.metadata;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.archiva.model.ArchivaRepositoryMetadata;
+import org.apache.maven.archiva.model.RepositoryContent;
+import org.apache.maven.archiva.xml.XMLException;
+import org.apache.maven.archiva.xml.XMLReader;
+
+import java.io.File;
+import java.util.Date;
+
+/**
+ * RepositoryMetadataReader - read maven-metadata.xml files.
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class RepositoryMetadataReader
+{
+ /**
+ * Read and return the {@link ArchivaRepositoryMetadata} object from the provided xml file.
+ *
+ * @param metadataFile the maven-metadata.xml file to read.
+ * @return the archiva repository metadata object that represents the provided file contents.
+ * @throws RepositoryMetadataException
+ */
+ public ArchivaRepositoryMetadata read( File metadataFile ) throws RepositoryMetadataException
+ {
+ try
+ {
+ XMLReader xml = new XMLReader( "metadata", metadataFile );
+
+ ArchivaRepositoryMetadata metadata = new ArchivaRepositoryMetadata();
+
+ RepositoryContent contentKey = new RepositoryContent();
+ contentKey.setGroupId( xml.getElementText( "//metadata/groupId" ) );
+ contentKey.setArtifactId( xml.getElementText( "//metadata/artifactId" ) );
+
+ metadata.setContentKey( contentKey );
+
+ metadata.setLastModified( new Date( metadataFile.lastModified() ) );
+ metadata.setSize( metadataFile.length() );
+ metadata.setWhenIndexed( new Date() );
+
+ metadata.setReleasedVersion( xml.getElementText( "//metadata/versioning/release" ) );
+ metadata.setAvailableVersions( xml.getElementListText( "//metadata/versioning/versions/version" ) );
+
+ return metadata;
+ }
+ catch ( XMLException e )
+ {
+ throw new RepositoryMetadataException( e.getMessage(), e );
+ }
+ }
+}
diff --git a/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/project/ProjectModel300Reader.java b/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/project/ProjectModel300Reader.java
new file mode 100644
index 000000000..1cb9d86e8
--- /dev/null
+++ b/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/project/ProjectModel300Reader.java
@@ -0,0 +1,42 @@
+package org.apache.maven.archiva.repository.project;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.archiva.model.ArchivaProjectModel;
+
+import java.io.File;
+
+/**
+ * ProjectModel300Reader
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class ProjectModel300Reader implements ProjectModelReader
+{
+
+ public ArchivaProjectModel read( File pomFile )
+ throws ProjectModelException
+ {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+}
diff --git a/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/project/ProjectModel400Reader.java b/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/project/ProjectModel400Reader.java
new file mode 100644
index 000000000..0e64d11fb
--- /dev/null
+++ b/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/project/ProjectModel400Reader.java
@@ -0,0 +1,405 @@
+package org.apache.maven.archiva.repository.project;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.lang.StringUtils;
+import org.apache.maven.archiva.model.ArchivaProjectModel;
+import org.apache.maven.archiva.model.CiManagement;
+import org.apache.maven.archiva.model.Dependency;
+import org.apache.maven.archiva.model.DependencyScope;
+import org.apache.maven.archiva.model.Exclusion;
+import org.apache.maven.archiva.model.Individual;
+import org.apache.maven.archiva.model.IssueManagement;
+import org.apache.maven.archiva.model.License;
+import org.apache.maven.archiva.model.Organization;
+import org.apache.maven.archiva.model.ProjectRepository;
+import org.apache.maven.archiva.model.RepositoryContent;
+import org.apache.maven.archiva.model.Scm;
+import org.apache.maven.archiva.xml.XMLException;
+import org.apache.maven.archiva.xml.XMLReader;
+import org.dom4j.Element;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+/**
+ * ProjectModel400Reader
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class ProjectModel400Reader implements ProjectModelReader
+{
+
+ public ArchivaProjectModel read( File pomFile ) throws ProjectModelException
+ {
+ try
+ {
+ XMLReader xml = new XMLReader( "project", pomFile );
+
+ ArchivaProjectModel model = new ArchivaProjectModel();
+
+ RepositoryContent contentKey = new RepositoryContent();
+ contentKey.setGroupId( xml.getElementText( "//project/groupId" ) );
+ contentKey.setArtifactId( xml.getElementText( "//project/artifactId" ) );
+ contentKey.setVersion( xml.getElementText( "//project/version" ) );
+ model.setContentKey( contentKey );
+
+ model.setName( xml.getElementText( "//project/name" ) );
+ model.setDescription( xml.getElementText( "//project/description" ) );
+ model.setUrl( xml.getElementText( "//project/url" ) );
+ model.setPackaging( StringUtils.defaultIfEmpty( xml.getElementText( "//project/packaging" ), "jar" ) );
+
+ model.setParentContentKey( getParentContentKey( xml ) );
+
+ model.setCiManagement( getCiManagement( xml ) );
+ model.setIndividuals( getIndividuals( xml ) );
+ model.setIssueManagement( getIssueManagement( xml ) );
+ model.setLicenses( getLicenses( xml ) );
+ model.setOrganization( getOrganization( xml ) );
+ model.setScm( getSCM( xml ) );
+ model.setRepositories( getRepositories( xml ) );
+
+ model.setDependencies( getDependencies( xml ) );
+ model.setPlugins( getPlugins( xml ) );
+ model.setReports( getReports( xml ) );
+
+ return model;
+ }
+ catch ( XMLException e )
+ {
+ throw new ProjectModelException( e.getMessage(), e );
+ }
+ }
+
+ private CiManagement getCiManagement( XMLReader xml ) throws XMLException
+ {
+ Element elemCiMgmt = xml.getElement( "//project/ciManagement" );
+ if ( elemCiMgmt != null )
+ {
+ CiManagement ciManagement = new CiManagement();
+ ciManagement.setSystem( elemCiMgmt.elementTextTrim( "system" ) );
+ ciManagement.setUrl( elemCiMgmt.elementTextTrim( "url" ) );
+ return ciManagement;
+ }
+
+ return null;
+ }
+
+ private List getDependencies( XMLReader xml ) throws XMLException
+ {
+ List dependencies = new ArrayList();
+
+ Iterator it = xml.getElementList( "//project/dependencies/dependency" ).iterator();
+ while ( it.hasNext() )
+ {
+ Element elemDependency = (Element) it.next();
+ Dependency dependency = new Dependency();
+
+ dependency.setContentKey( getContentKey( elemDependency ) );
+
+ dependency.setClassifier( elemDependency.elementTextTrim( "classifier" ) );
+ dependency.setType( StringUtils.defaultIfEmpty( elemDependency.elementTextTrim( "type" ), "jar" ) );
+ dependency.setScope( StringUtils.defaultIfEmpty( elemDependency.elementTextTrim( "scope" ), "compile" ) );
+ // Not for v4.0.0 -> dependency.setUrl( elemDependency.elementTextTrim( "url" ) );
+ dependency.setOptional( toBoolean( elemDependency.elementTextTrim( "optional" ), false ) );
+ if ( DependencyScope.isSystemScoped( dependency ) )
+ {
+ dependency.setSystemPath( elemDependency.elementTextTrim( "systemPath" ) );
+ }
+
+ dependency.setExclusions( getExclusions( elemDependency ) );
+
+ dependencies.add( dependency );
+ }
+
+ return dependencies;
+ }
+
+ private List getExclusions( Element elemDependency )
+ {
+ List exclusions = new ArrayList();
+
+ Element elemExclusions = elemDependency.element( "exclusions" );
+
+ if ( elemExclusions != null )
+ {
+ Iterator it = elemExclusions.elementIterator( "exclusion" );
+ while ( it.hasNext() )
+ {
+ Element elemExclusion = (Element) it.next();
+ Exclusion exclusion = new Exclusion();
+
+ exclusion.setGroupId( elemExclusion.elementTextTrim( "groupId" ) );
+ exclusion.setArtifactId( elemExclusion.elementTextTrim( "artifactId" ) );
+
+ exclusions.add( exclusion );
+ }
+ }
+
+ return exclusions;
+ }
+
+ private List getIndividuals( XMLReader xml ) throws XMLException
+ {
+ List individuals = new ArrayList();
+
+ individuals.addAll( getIndividuals( xml, true, "//project/developers/developer" ) );
+ individuals.addAll( getIndividuals( xml, false, "//project/contributors/contributor" ) );
+
+ return individuals;
+ }
+
+ private List getIndividuals( XMLReader xml, boolean isCommitor, String xpathExpr ) throws XMLException
+ {
+ List ret = new ArrayList();
+
+ List modelPersonList = xml.getElementList( xpathExpr );
+
+ Iterator iter = modelPersonList.iterator();
+ while ( iter.hasNext() )
+ {
+ Element elemPerson = (Element) iter.next();
+ Individual individual = new Individual();
+
+ individual.setCommitor( isCommitor );
+ individual.setEmail( elemPerson.elementTextTrim( "email" ) );
+ individual.setName( elemPerson.elementTextTrim( "name" ) );
+ individual.setOrganization( elemPerson.elementTextTrim( "organization" ) );
+ individual.setOrganizationUrl( elemPerson.elementTextTrim( "organizationUrl" ) );
+ individual.setUrl( elemPerson.elementTextTrim( "url" ) );
+ individual.setTimezone( elemPerson.elementTextTrim( "timezone" ) );
+
+ // Roles
+ Element elemRoles = elemPerson.element( "roles" );
+ if ( elemRoles != null )
+ {
+ List roleNames = elemRoles.elements( "role" );
+ Iterator itRole = roleNames.iterator();
+ while ( itRole.hasNext() )
+ {
+ Element role = (Element) itRole.next();
+ individual.addRole( role.getTextTrim() );
+ }
+ }
+
+ // Properties
+ Element elemProperties = elemPerson.element( "properties" );
+ if ( elemProperties != null )
+ {
+ Iterator itProps = elemProperties.elements().iterator();
+ while ( itProps.hasNext() )
+ {
+ Element elemProp = (Element) itProps.next();
+ individual.addProperty( elemProp.getName(), elemProp.getText() );
+ }
+ }
+
+ ret.add( individual );
+ }
+
+ return ret;
+ }
+
+ private IssueManagement getIssueManagement( XMLReader xml ) throws XMLException
+ {
+ Element elemIssueMgmt = xml.getElement( "//project/issueManagement" );
+ if ( elemIssueMgmt != null )
+ {
+ IssueManagement issueMgmt = new IssueManagement();
+
+ issueMgmt.setSystem( elemIssueMgmt.elementTextTrim( "system" ) );
+ issueMgmt.setUrl( elemIssueMgmt.elementTextTrim( "url" ) );
+
+ return issueMgmt;
+ }
+
+ return null;
+ }
+
+ private List getLicenses( XMLReader xml ) throws XMLException
+ {
+ List licenses = new ArrayList();
+
+ Element elemLicenses = xml.getElement( "//project/licenses" );
+
+ if ( elemLicenses != null )
+ {
+ Iterator itLicense = elemLicenses.elements( "license" ).iterator();
+ while ( itLicense.hasNext() )
+ {
+ Element elemLicense = (Element) itLicense.next();
+ License license = new License();
+
+ // TODO: Create LicenseIdentity class to managed license ids.
+ // license.setId( elemLicense.elementTextTrim( "id" ) );
+ license.setName( elemLicense.elementTextTrim( "name" ) );
+ license.setUrl( elemLicense.elementTextTrim( "url" ) );
+ license.setComments( elemLicense.elementTextTrim( "comments" ) );
+
+ licenses.add( license );
+ }
+ }
+
+ return licenses;
+ }
+
+ private Organization getOrganization( XMLReader xml ) throws XMLException
+ {
+ Element elemOrg = xml.getElement( "//project/organization" );
+ if ( elemOrg != null )
+ {
+ Organization org = new Organization();
+
+ org.setName( elemOrg.elementTextTrim( "name" ) );
+ org.setUrl( elemOrg.elementTextTrim( "url" ) );
+
+ return org;
+ }
+
+ return null;
+ }
+
+ private RepositoryContent getParentContentKey( XMLReader xml ) throws XMLException
+ {
+ Element elemParent = xml.getElement( "//project/parent" );
+
+ if ( elemParent != null )
+ {
+ return getContentKey( elemParent );
+ }
+
+ return null;
+ }
+
+ private RepositoryContent getContentKey( Element elem )
+ {
+ RepositoryContent contentKey = new RepositoryContent();
+
+ contentKey.setGroupId( elem.elementTextTrim( "groupId" ) );
+ contentKey.setArtifactId( elem.elementTextTrim( "artifactId" ) );
+ contentKey.setVersion( elem.elementTextTrim( "version" ) );
+
+ return contentKey;
+ }
+
+ private List getPlugins( XMLReader xml ) throws XMLException
+ {
+ return getPlugins( xml, "//project/build/plugins/plugin" );
+ }
+
+ private List getReports( XMLReader xml ) throws XMLException
+ {
+ return getPlugins( xml, "//project/reporting/plugins/plugin" );
+ }
+
+ /**
+ * Get List of {@link RepositoryContent} objects from plugin definitions.
+ */
+ private List getPlugins( XMLReader xml, String xpathExpr ) throws XMLException
+ {
+ List plugins = new ArrayList();
+
+ Iterator it = xml.getElementList( xpathExpr ).iterator();
+ while ( it.hasNext() )
+ {
+ Element elemPlugin = (Element) it.next();
+
+ plugins.add( getContentKey( elemPlugin ) );
+ }
+
+ return plugins;
+ }
+
+ private List getRepositories( XMLReader xml ) throws XMLException
+ {
+ List repos = new ArrayList();
+
+ repos.addAll( getRepositories( xml, false, "//project/repositories/repository" ) );
+ repos.addAll( getRepositories( xml, true, "//project/pluginRepositories/pluginRepository" ) );
+
+ return repos;
+ }
+
+ private List getRepositories( XMLReader xml, boolean isPluginRepo, String xpathExpr ) throws XMLException
+ {
+ List ret = new ArrayList();
+
+ List repositoriesList = xml.getElementList( xpathExpr );
+
+ Iterator itRepos = repositoriesList.iterator();
+ while ( itRepos.hasNext() )
+ {
+ Element elemRepo = (Element) itRepos.next();
+ ProjectRepository repo = new ProjectRepository();
+
+ repo.setId( elemRepo.elementTextTrim( "id" ) );
+ repo.setName( elemRepo.elementTextTrim( "name" ) );
+ repo.setUrl( elemRepo.elementTextTrim( "url" ) );
+ repo.setLayout( StringUtils.defaultIfEmpty( elemRepo.elementTextTrim( "layout" ), "default" ) );
+ repo.setPlugins( isPluginRepo );
+
+ repo.setReleases( toBoolean( xml.getElementText( elemRepo, "releases/enabled" ), true ) );
+ repo.setReleases( toBoolean( xml.getElementText( elemRepo, "snapshots/enabled" ), false ) );
+
+ ret.add( repo );
+ }
+
+ return ret;
+ }
+
+ private Scm getSCM( XMLReader xml ) throws XMLException
+ {
+ Element elemScm = xml.getElement( "//project/scm" );
+
+ if ( elemScm != null )
+ {
+ Scm scm = new Scm();
+
+ scm.setConnection( elemScm.elementTextTrim( "connection" ) );
+ scm.setDeveloperConnection( elemScm.elementTextTrim( "developerConnection" ) );
+ scm.setUrl( elemScm.elementTextTrim( "url" ) );
+
+ return scm;
+ }
+
+ return null;
+ }
+
+ private boolean toBoolean( String value, boolean defaultValue )
+ {
+ if ( StringUtils.equalsIgnoreCase( value, "true" ) )
+ {
+ return true;
+ }
+ else if ( StringUtils.equalsIgnoreCase( value, "false" ) )
+ {
+ return false;
+ }
+ else
+ {
+ // If unset, or not "true" or "false".
+ return defaultValue;
+ }
+ }
+
+}
diff --git a/archiva-base/archiva-common/src/main/java/org/apache/maven/archiva/common/artifact/builder/BuilderException.java b/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/project/ProjectModelException.java
index 0845dc750..a131ac6eb 100644
--- a/archiva-base/archiva-common/src/main/java/org/apache/maven/archiva/common/artifact/builder/BuilderException.java
+++ b/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/project/ProjectModelException.java
@@ -1,4 +1,4 @@
-package org.apache.maven.archiva.common.artifact.builder;
+package org.apache.maven.archiva.repository.project;
/*
* Licensed to the Apache Software Foundation (ASF) under one
@@ -22,21 +22,19 @@ package org.apache.maven.archiva.common.artifact.builder;
import org.apache.maven.archiva.common.ArchivaException;
/**
- * BuilderException - used to indicate a problem during the building of an object from file.
+ * ProjectModelException
*
- * @author <a href="mailto:joakime@apache.org">Joakim Erdfelt</a>
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
* @version $Id$
*/
-public class BuilderException
- extends ArchivaException
+public class ProjectModelException extends ArchivaException
{
-
- public BuilderException( String message, Throwable cause )
+ public ProjectModelException( String message, Throwable cause )
{
super( message, cause );
}
- public BuilderException( String message )
+ public ProjectModelException( String message )
{
super( message );
}
diff --git a/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/project/ProjectModelReader.java b/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/project/ProjectModelReader.java
new file mode 100644
index 000000000..dcae066e3
--- /dev/null
+++ b/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/project/ProjectModelReader.java
@@ -0,0 +1,35 @@
+package org.apache.maven.archiva.repository.project;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.archiva.model.ArchivaProjectModel;
+
+import java.io.File;
+
+/**
+ * ProjectModelReader
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public interface ProjectModelReader
+{
+ public ArchivaProjectModel read( File pomFile ) throws ProjectModelException;
+}
diff --git a/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/scanner/RepositoryScanner.java b/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/scanner/RepositoryScanner.java
index 568c07c9c..e2ed6768e 100644
--- a/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/scanner/RepositoryScanner.java
+++ b/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/scanner/RepositoryScanner.java
@@ -19,10 +19,10 @@ package org.apache.maven.archiva.repository.scanner;
* under the License.
*/
+import org.apache.maven.archiva.consumers.RepositoryContentConsumer;
+import org.apache.maven.archiva.model.ArchivaRepository;
import org.apache.maven.archiva.model.RepositoryContentStatistics;
-import org.apache.maven.archiva.repository.ArchivaRepository;
import org.apache.maven.archiva.repository.RepositoryException;
-import org.apache.maven.archiva.repository.consumer.Consumer;
import org.codehaus.plexus.util.DirectoryWalker;
import org.codehaus.plexus.util.FileUtils;
@@ -146,14 +146,14 @@ public class RepositoryScanner
Iterator it = consumers.iterator();
while ( it.hasNext() )
{
- Consumer consumer = (Consumer) it.next();
+ RepositoryContentConsumer consumer = (RepositoryContentConsumer) it.next();
/* NOTE: Do not insert the consumer exclusion patterns here.
* Exclusion patterns are handled by RepositoryScanner.wantsFile(Consumer, String)
*
* addUniqueElements( consumer.getExcludePatterns(), allExcludes );
*/
- addUniqueElements( consumer.getIncludePatterns(), allIncludes );
+ addUniqueElements( consumer.getIncludes(), allIncludes );
}
if ( extraFileInclusions != null )
diff --git a/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/scanner/RepositoryScannerInstance.java b/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/scanner/RepositoryScannerInstance.java
index 349618273..c5e498b8e 100644
--- a/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/scanner/RepositoryScannerInstance.java
+++ b/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/scanner/RepositoryScannerInstance.java
@@ -21,9 +21,10 @@ package org.apache.maven.archiva.repository.scanner;
import org.apache.commons.lang.SystemUtils;
import org.apache.maven.archiva.common.utils.BaseFile;
+import org.apache.maven.archiva.consumers.ConsumerException;
+import org.apache.maven.archiva.consumers.RepositoryContentConsumer;
+import org.apache.maven.archiva.model.ArchivaRepository;
import org.apache.maven.archiva.model.RepositoryContentStatistics;
-import org.apache.maven.archiva.repository.ArchivaRepository;
-import org.apache.maven.archiva.repository.consumer.Consumer;
import org.codehaus.plexus.util.DirectoryWalkListener;
import org.codehaus.plexus.util.SelectorUtils;
import org.codehaus.plexus.util.StringUtils;
@@ -60,17 +61,19 @@ public class RepositoryScannerInstance implements DirectoryWalkListener
this.consumers = consumerList;
stats = new RepositoryContentStatistics();
stats.setRepositoryId( repository.getId() );
-
Iterator it = this.consumers.iterator();
while ( it.hasNext() )
{
- Consumer consumer = (Consumer) it.next();
-
- if ( !consumer.init( this.repository ) )
+ RepositoryContentConsumer consumer = (RepositoryContentConsumer) it.next();
+ try
+ {
+ consumer.beginScan( repository );
+ }
+ catch ( ConsumerException e )
{
- throw new IllegalStateException( "Consumer [" + consumer.getName() +
- "] is reporting that it is incompatible with the [" + repository.getId() + "] repository." );
+ // TODO: remove bad consumers from list
+ log.warn( "Consumer [" + consumer.getId() + "] cannot begin: " + e.getMessage(), e );
}
}
@@ -94,7 +97,7 @@ public class RepositoryScannerInstance implements DirectoryWalkListener
public void directoryWalkStep( int percentage, File file )
{
log.debug( "Walk Step: " + percentage + ", " + file );
-
+
stats.increaseFileCount();
// Timestamp finished points to the last successful scan, not this current one.
@@ -114,28 +117,27 @@ public class RepositoryScannerInstance implements DirectoryWalkListener
Iterator itConsumers = this.consumers.iterator();
while ( itConsumers.hasNext() )
{
- Consumer consumer = (Consumer) itConsumers.next();
+ RepositoryContentConsumer consumer = (RepositoryContentConsumer) itConsumers.next();
if ( wantsFile( consumer, StringUtils.replace( basefile.getRelativePath(), "\\", "/" ) ) )
{
try
{
- log.debug( "Sending to consumer: " + consumer.getName() );
- consumer.processFile( basefile );
+ log.debug( "Sending to consumer: " + consumer.getId() );
+ consumer.processFile( basefile.getRelativePath() );
}
catch ( Exception e )
{
/* Intentionally Catch all exceptions.
* So that the discoverer processing can continue.
*/
- log.error( "Consumer [" + consumer.getName() + "] had an error when processing file [" +
- basefile.getAbsolutePath() + "]: " + e.getMessage(), e );
+ log.error( "Consumer [" + consumer.getId() + "] had an error when processing file ["
+ + basefile.getAbsolutePath() + "]: " + e.getMessage(), e );
}
}
else
{
- log.debug(
- "Skipping consumer " + consumer.getName() + " for file " + basefile.getRelativePath() );
+ log.debug( "Skipping consumer " + consumer.getId() + " for file " + basefile.getRelativePath() );
}
}
}
@@ -147,24 +149,27 @@ public class RepositoryScannerInstance implements DirectoryWalkListener
stats.triggerFinished();
}
- private boolean wantsFile( Consumer consumer, String relativePath )
+ private boolean wantsFile( RepositoryContentConsumer consumer, String relativePath )
{
Iterator it;
// Test excludes first.
- it = consumer.getExcludePatterns().iterator();
- while ( it.hasNext() )
+ if ( consumer.getExcludes() != null )
{
- String pattern = (String) it.next();
- if ( SelectorUtils.matchPath( pattern, relativePath, isCaseSensitive ) )
+ it = consumer.getExcludes().iterator();
+ while ( it.hasNext() )
{
- // Definately does NOT WANT FILE.
- return false;
+ String pattern = (String) it.next();
+ if ( SelectorUtils.matchPath( pattern, relativePath, isCaseSensitive ) )
+ {
+ // Definately does NOT WANT FILE.
+ return false;
+ }
}
}
// Now test includes.
- it = consumer.getIncludePatterns().iterator();
+ it = consumer.getIncludes().iterator();
while ( it.hasNext() )
{
String pattern = (String) it.next();
diff --git a/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/layer/AbstractRepositoryQueryLayerTestCase.java b/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/layer/AbstractRepositoryQueryLayerTestCase.java
deleted file mode 100644
index 55f509457..000000000
--- a/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/layer/AbstractRepositoryQueryLayerTestCase.java
+++ /dev/null
@@ -1,116 +0,0 @@
-package org.apache.maven.archiva.layer;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import org.apache.maven.artifact.Artifact;
-import org.apache.maven.artifact.factory.ArtifactFactory;
-import org.apache.maven.artifact.repository.ArtifactRepository;
-import org.apache.maven.artifact.repository.ArtifactRepositoryFactory;
-import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout;
-import org.codehaus.plexus.PlexusTestCase;
-
-import java.io.File;
-import java.util.List;
-
-/**
- *
- */
-public abstract class AbstractRepositoryQueryLayerTestCase
- extends PlexusTestCase
-{
- private ArtifactFactory artifactFactory;
-
- protected ArtifactRepository repository;
-
- protected RepositoryQueryLayer queryLayer;
-
- protected void setUp()
- throws Exception
- {
- super.setUp();
- File repositoryDirectory = getTestFile( "src/test/repositories/simple-repository" );
-
- artifactFactory = (ArtifactFactory) lookup( ArtifactFactory.ROLE );
- ArtifactRepositoryFactory factory = (ArtifactRepositoryFactory) lookup( ArtifactRepositoryFactory.ROLE );
- ArtifactRepositoryLayout layout = (ArtifactRepositoryLayout) lookup( ArtifactRepositoryLayout.ROLE, "default" );
-
- repository =
- factory.createArtifactRepository( "test", repositoryDirectory.toURL().toString(), layout, null, null );
- }
-
- public void testContainsArtifactTrue()
- {
- Artifact artifact = getArtifact( "groupId", "artifactId", "1.0-alpha-1" );
-
- assertTrue( "check artifact", queryLayer.containsArtifact( artifact ) );
- }
-
- public void testContainsArtifactFalse()
- {
- Artifact artifact = getArtifact( "groupId", "artifactId", "1.0-beta-1" );
-
- assertFalse( "check non-existent artifact", queryLayer.containsArtifact( artifact ) );
- }
-
- public void testContainsSnapshotArtifactTrue()
- {
- Artifact artifact = getArtifact( "groupId", "snapshot-artifact", "1.0-alpha-1-20050611.202024-1" );
- assertTrue( "check for snapshot artifact", queryLayer.containsArtifact( artifact ) );
- }
-
- public void testContainsSnapshotArtifactFalse()
- {
- Artifact artifact = getArtifact( "groupId", "snapshot-artifact", "1.0-alpha-1-20050611.202024-2" );
- assertFalse( "check for non-existent snapshot artifact", queryLayer.containsArtifact( artifact ) );
- }
-
- public void testArtifactVersions()
- throws Exception
- {
- Artifact artifact = getArtifact( "groupId", "artifactId", "ignored" );
-
- List versions = queryLayer.getVersions( artifact );
-
- assertTrue( "check version 1.0-alpha-1", versions.contains( "1.0-alpha-1" ) );
- assertFalse( "check version 1.0-alpha-2", versions.contains( "1.0-alpha-2" ) );
- }
-
- public void testArtifactVersionsError()
- {
- Artifact artifact = getArtifact( "groupId", "none", "ignored" );
-
- try
- {
- queryLayer.getVersions( artifact );
- fail( "expected error not thrown" );
- }
- catch ( RepositoryQueryLayerException e )
- {
- //expected
- }
- }
-
- private Artifact getArtifact( String groupId, String artifactId, String version )
- {
- Artifact projectArtifact = artifactFactory.createProjectArtifact( groupId, artifactId, version );
- projectArtifact.isSnapshot();
- return projectArtifact;
- }
-}
diff --git a/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/layer/CachedRepositoryQueryLayerTest.java b/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/layer/CachedRepositoryQueryLayerTest.java
deleted file mode 100644
index 1451e380c..000000000
--- a/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/layer/CachedRepositoryQueryLayerTest.java
+++ /dev/null
@@ -1,56 +0,0 @@
-package org.apache.maven.archiva.layer;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-/**
- * CachedRepositoryQueryLayerTest
- *
- * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
- * @version $Id$
- */
-public class CachedRepositoryQueryLayerTest
- extends AbstractRepositoryQueryLayerTestCase
-{
- protected void setUp()
- throws Exception
- {
- super.setUp();
-
- RepositoryQueryLayer defaultLayer = new DefaultRepositoryQueryLayer( repository );
-
- queryLayer = new CachedRepositoryQueryLayer( defaultLayer );
- }
-
- public void testUseFileCache()
- {
- testContainsArtifactTrue();
- }
-
- public void testUseMetadataCache()
- throws Exception
- {
- testArtifactVersions();
- }
-
- public void testUseFileCacheOnSnapshot()
- {
- testContainsSnapshotArtifactTrue();
- }
-}
diff --git a/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/AllTests.java b/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/AllTests.java
index e25a55e80..771d3b582 100644
--- a/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/AllTests.java
+++ b/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/AllTests.java
@@ -36,6 +36,10 @@ public class AllTests
TestSuite suite = new TestSuite( "Test for org.apache.maven.archiva.repository" );
//$JUnit-BEGIN$
suite.addTestSuite( RepositoryURLTest.class );
+ suite.addTest( org.apache.maven.archiva.repository.metadata.AllTests.suite() );
+ suite.addTest( org.apache.maven.archiva.repository.project.AllTests.suite() );
+ suite.addTest( org.apache.maven.archiva.repository.scanner.AllTests.suite() );
+ suite.addTest( org.apache.maven.archiva.repository.layout.AllTests.suite() );
//$JUnit-END$
return suite;
}
diff --git a/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/RepositoryURLTest.java b/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/RepositoryURLTest.java
index c91eef8c8..0051be238 100644
--- a/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/RepositoryURLTest.java
+++ b/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/RepositoryURLTest.java
@@ -20,6 +20,8 @@ package org.apache.maven.archiva.repository;
*/
+import org.apache.maven.archiva.model.RepositoryURL;
+
import java.net.MalformedURLException;
import junit.framework.TestCase;
diff --git a/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/layout/AbstractBidirectionalRepositoryLayoutTestCase.java b/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/layout/AbstractBidirectionalRepositoryLayoutTestCase.java
index b15685a3b..54c27e900 100644
--- a/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/layout/AbstractBidirectionalRepositoryLayoutTestCase.java
+++ b/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/layout/AbstractBidirectionalRepositoryLayoutTestCase.java
@@ -20,8 +20,8 @@ package org.apache.maven.archiva.repository.layout;
*/
import org.apache.commons.lang.StringUtils;
-import org.apache.maven.archiva.repository.ArchivaArtifact;
-import org.apache.maven.archiva.repository.ArchivaRepository;
+import org.apache.maven.archiva.model.ArchivaArtifact;
+import org.apache.maven.archiva.model.ArchivaRepository;
import org.codehaus.plexus.PlexusTestCase;
import java.io.File;
diff --git a/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/layout/AllTests.java b/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/layout/AllTests.java
new file mode 100644
index 000000000..966ddbd6c
--- /dev/null
+++ b/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/layout/AllTests.java
@@ -0,0 +1,45 @@
+package org.apache.maven.archiva.repository.layout;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+/**
+ * AllTests - Useful for developers using IDEs.
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class AllTests
+{
+
+ public static Test suite()
+ {
+ TestSuite suite = new TestSuite( "Test for org.apache.maven.archiva.repository.layout" );
+ //$JUnit-BEGIN$
+ suite.addTestSuite( LegacyBidirectionalRepositoryLayoutTest.class );
+ suite.addTestSuite( DefaultBidirectionalRepositoryLayoutTest.class );
+ suite.addTestSuite( RepositoryLayoutUtilsTest.class );
+ //$JUnit-END$
+ return suite;
+ }
+
+}
diff --git a/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/layout/DefaultBidirectionalRepositoryLayoutTest.java b/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/layout/DefaultBidirectionalRepositoryLayoutTest.java
index 249104a7f..b013caa4d 100644
--- a/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/layout/DefaultBidirectionalRepositoryLayoutTest.java
+++ b/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/layout/DefaultBidirectionalRepositoryLayoutTest.java
@@ -19,7 +19,7 @@ package org.apache.maven.archiva.repository.layout;
* under the License.
*/
-import org.apache.maven.archiva.repository.ArchivaArtifact;
+import org.apache.maven.archiva.model.ArchivaArtifact;
import org.apache.maven.archiva.repository.layout.BidirectionalRepositoryLayout;
import org.apache.maven.archiva.repository.layout.LayoutException;
@@ -68,7 +68,7 @@ public class DefaultBidirectionalRepositoryLayoutTest extends AbstractBidirectio
assertEquals( "com/foo/foo-connector/2.1-SNAPSHOT/foo-connector-2.1-20060822.123456-35.jar",
layout.pathOf( artifact ) );
}
-
+
public void testToArtifactBasicSimpleGroupId() throws LayoutException
{
ArchivaArtifact artifact = layout.toArtifact( "commons-lang/commons-lang/2.1/commons-lang-2.1.jar" );
@@ -95,11 +95,102 @@ public class DefaultBidirectionalRepositoryLayoutTest extends AbstractBidirectio
// The 'java-source' type is correct. You might be thinking of extension, which we are not testing here.
assertArtifact( artifact, "com.foo.lib", "foo-lib", "2.1-alpha-1", "sources", "java-source" );
}
-
+
public void testToArtifactUsingUniqueSnapshot() throws LayoutException
{
ArchivaArtifact artifact =
layout.toArtifact( "com/foo/foo-connector/2.1-SNAPSHOT/foo-connector-2.1-20060822.123456-35.jar" );
assertSnapshotArtifact( artifact, "com.foo", "foo-connector", "2.1-20060822.123456-35", "", "jar" );
}
+
+ public void testInvalidMissingType()
+ {
+ try
+ {
+ layout.toArtifact( "invalid/invalid/1/invalid-1" );
+ fail( "Should have detected missing type." );
+ }
+ catch ( LayoutException e )
+ {
+ /* expected path */
+ }
+ }
+
+ public void testInvalidNonSnapshotInSnapshotDir()
+ {
+ try
+ {
+ layout.toArtifact( "invalid/invalid/1.0-SNAPSHOT/invalid-1.0.jar" );
+ fail( "Should have detected non snapshot artifact inside of a snapshot dir." );
+ }
+ catch ( LayoutException e )
+ {
+ /* expected path */
+ }
+ }
+
+ public void testInvalidPathTooShort()
+ {
+ try
+ {
+ layout.toArtifact( "invalid/invalid-1.0.jar" );
+ fail( "Should have detected that path is too short." );
+ }
+ catch ( LayoutException e )
+ {
+ /* expected path */
+ }
+ }
+
+ public void testInvalidTimestampSnapshotNotInSnapshotDir()
+ {
+ try
+ {
+ layout.toArtifact( "invalid/invalid/1.0-20050611.123456-1/invalid-1.0-20050611.123456-1.jar" );
+ fail( "Shoult have detected Timestamped Snapshot artifact not inside of an Snapshot dir is invalid." );
+ }
+ catch ( LayoutException e )
+ {
+ /* expected path */
+ }
+ }
+
+ public void testInvalidVersionPathMismatch()
+ {
+ try
+ {
+ layout.toArtifact( "invalid/invalid/1.0/invalid-2.0.jar" );
+ fail( "Should have detected version mismatch between path and artifact." );
+ }
+ catch ( LayoutException e )
+ {
+ /* expected path */
+ }
+ }
+
+ public void testInvalidVersionPathMismatchAlt()
+ {
+ try
+ {
+ layout.toArtifact( "invalid/invalid/1.0/invalid-1.0b.jar" );
+ fail( "Should have version mismatch between directory and artifact." );
+ }
+ catch ( LayoutException e )
+ {
+ /* expected path */
+ }
+ }
+
+ public void testInvalidArtifactIdForPath()
+ {
+ try
+ {
+ layout.toArtifact( "org/apache/maven/test/1.0-SNAPSHOT/wrong-artifactId-1.0-20050611.112233-1.jar" );
+ fail( "Should have detected wrong artifact Id." );
+ }
+ catch ( LayoutException e )
+ {
+ /* expected path */
+ }
+ }
}
diff --git a/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/layout/LegacyBidirectionalRepositoryLayoutTest.java b/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/layout/LegacyBidirectionalRepositoryLayoutTest.java
index c90f3b56f..650349104 100644
--- a/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/layout/LegacyBidirectionalRepositoryLayoutTest.java
+++ b/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/layout/LegacyBidirectionalRepositoryLayoutTest.java
@@ -19,7 +19,7 @@ package org.apache.maven.archiva.repository.layout;
* under the License.
*/
-import org.apache.maven.archiva.repository.ArchivaArtifact;
+import org.apache.maven.archiva.model.ArchivaArtifact;
import org.apache.maven.archiva.repository.layout.BidirectionalRepositoryLayout;
/**
@@ -104,4 +104,53 @@ public class LegacyBidirectionalRepositoryLayoutTest extends AbstractBidirection
ArchivaArtifact artifact = layout.toArtifact( "directory-clients/poms/ldap-clients-0.9.1-SNAPSHOT.pom" );
assertSnapshotArtifact( artifact, "directory-clients", "ldap-clients", "0.9.1-SNAPSHOT", "", "pom" );
}
+
+ public void testInvalidNoType()
+ {
+ try
+ {
+ layout.toArtifact( "invalid/invalid/1/invalid-1" );
+ fail( "Should have detected no type." );
+ }
+ catch ( LayoutException e )
+ {
+ /* expected path */
+ }
+ }
+
+ public void testInvalidArtifactPackaging()
+ {
+ try
+ {
+ layout.toArtifact( "org.apache.maven.test/jars/artifactId-1.0.jar.md5" );
+ fail( "Should have detected wrong package extension." );
+ }
+ catch ( LayoutException e )
+ {
+ /* expected path */
+ }
+ }
+
+ public void testInvalidNoArtifactId()
+ {
+ try
+ {
+ layout.toArtifact( "groupId/jars/-1.0.jar" );
+ fail( "Should have detected artifactId is missing" );
+ }
+ catch ( LayoutException e )
+ {
+ /* expected path */
+ }
+
+ try
+ {
+ layout.toArtifact( "groupId/jars/1.0.jar" );
+ fail( "Should have detected artifactId is missing" );
+ }
+ catch ( LayoutException e )
+ {
+ /* expected path */
+ }
+ }
}
diff --git a/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/layout/RepositoryLayoutUtilsTest.java b/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/layout/RepositoryLayoutUtilsTest.java
index 5a4e7049e..73a644104 100644
--- a/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/layout/RepositoryLayoutUtilsTest.java
+++ b/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/layout/RepositoryLayoutUtilsTest.java
@@ -31,66 +31,72 @@ public class RepositoryLayoutUtilsTest extends TestCase
{
public void testSplitFilenameBasic() throws LayoutException
{
- assertSplit( RepositoryLayoutUtils.splitFilename( "commons-lang-2.1.jar", "commons-lang" ), "commons-lang",
- "2.1", "", "jar" );
+ assertFilenameParts( RepositoryLayoutUtils.splitFilename( "commons-lang-2.1.jar", "commons-lang" ),
+ "commons-lang", "2.1", null, "jar" );
}
public void testSplitFilenameAlphaVersion() throws LayoutException
{
- assertSplit( RepositoryLayoutUtils.splitFilename( "commons-lang-2.0-alpha-1.jar", "commons-lang" ),
- "commons-lang", "2.0-alpha-1", "", "jar" );
+ assertFilenameParts( RepositoryLayoutUtils.splitFilename( "commons-lang-2.0-alpha-1.jar", "commons-lang" ),
+ "commons-lang", "2.0-alpha-1", null, "jar" );
}
public void testSplitFilenameSnapshot() throws LayoutException
{
- assertSplit( RepositoryLayoutUtils.splitFilename( "foo-2.0-SNAPSHOT.jar", "foo" ), "foo", "2.0-SNAPSHOT", "",
- "jar" );
+ assertFilenameParts( RepositoryLayoutUtils.splitFilename( "foo-2.0-SNAPSHOT.jar", "foo" ), "foo",
+ "2.0-SNAPSHOT", null, "jar" );
}
public void testSplitFilenameUniqueSnapshot() throws LayoutException
{
- assertSplit( RepositoryLayoutUtils.splitFilename( "fletch-2.0-20060822-123456-35.tar.gz", "fletch" ), "fletch",
- "2.0-20060822-123456-35", "", "tar.gz" );
+ assertFilenameParts( RepositoryLayoutUtils.splitFilename( "fletch-2.0-20060822-123456-35.tar.gz", "fletch" ),
+ "fletch", "2.0-20060822-123456-35", null, "tar.gz" );
}
public void testSplitFilenameBasicClassifier() throws LayoutException
{
- assertSplit( RepositoryLayoutUtils.splitFilename( "commons-lang-2.1-sources.jar", "commons-lang" ),
- "commons-lang", "2.1", "sources", "jar" );
- assertSplit( RepositoryLayoutUtils.splitFilename( "commons-lang-2.1-javadoc.jar", "commons-lang" ),
- "commons-lang", "2.1", "javadoc", "jar" );
+ assertFilenameParts( RepositoryLayoutUtils.splitFilename( "commons-lang-2.1-sources.jar", "commons-lang" ),
+ "commons-lang", "2.1", "sources", "jar" );
+ assertFilenameParts( RepositoryLayoutUtils.splitFilename( "commons-lang-2.1-javadoc.jar", "commons-lang" ),
+ "commons-lang", "2.1", "javadoc", "jar" );
}
public void testSplitFilenameAlphaClassifier() throws LayoutException
{
- assertSplit( RepositoryLayoutUtils.splitFilename( "commons-lang-2.0-alpha-1-sources.jar", "commons-lang" ),
- "commons-lang", "2.0-alpha-1", "sources", "jar" );
- assertSplit( RepositoryLayoutUtils.splitFilename( "commons-lang-2.0-alpha-1-javadoc.jar", "commons-lang" ),
- "commons-lang", "2.0-alpha-1", "javadoc", "jar" );
+ assertFilenameParts( RepositoryLayoutUtils.splitFilename( "commons-lang-2.0-alpha-1-sources.jar",
+ "commons-lang" ), "commons-lang", "2.0-alpha-1",
+ "sources", "jar" );
+ assertFilenameParts( RepositoryLayoutUtils.splitFilename( "commons-lang-2.0-alpha-1-javadoc.jar",
+ "commons-lang" ), "commons-lang", "2.0-alpha-1",
+ "javadoc", "jar" );
}
public void testSplitFilenameSnapshotClassifier() throws LayoutException
{
- assertSplit( RepositoryLayoutUtils.splitFilename( "commons-lang-3.1-SNAPSHOT-sources.jar", "commons-lang" ),
- "commons-lang", "3.1-SNAPSHOT", "sources", "jar" );
- assertSplit( RepositoryLayoutUtils.splitFilename( "commons-lang-3.1-SNAPSHOT-javadoc.jar", "commons-lang" ),
- "commons-lang", "3.1-SNAPSHOT", "javadoc", "jar" );
+ assertFilenameParts( RepositoryLayoutUtils.splitFilename( "commons-lang-3.1-SNAPSHOT-sources.jar",
+ "commons-lang" ), "commons-lang", "3.1-SNAPSHOT",
+ "sources", "jar" );
+ assertFilenameParts( RepositoryLayoutUtils.splitFilename( "commons-lang-3.1-SNAPSHOT-javadoc.jar",
+ "commons-lang" ), "commons-lang", "3.1-SNAPSHOT",
+ "javadoc", "jar" );
}
public void testSplitFilenameUniqueSnapshotClassifier() throws LayoutException
{
- assertSplit( RepositoryLayoutUtils.splitFilename( "commons-lang-3.1-SNAPSHOT-sources.jar", "commons-lang" ),
- "commons-lang", "3.1-SNAPSHOT", "sources", "jar" );
- assertSplit( RepositoryLayoutUtils.splitFilename( "commons-lang-3.1-SNAPSHOT-javadoc.jar", "commons-lang" ),
- "commons-lang", "3.1-SNAPSHOT", "javadoc", "jar" );
+ assertFilenameParts( RepositoryLayoutUtils.splitFilename( "commons-lang-3.1-SNAPSHOT-sources.jar",
+ "commons-lang" ), "commons-lang", "3.1-SNAPSHOT",
+ "sources", "jar" );
+ assertFilenameParts( RepositoryLayoutUtils.splitFilename( "commons-lang-3.1-SNAPSHOT-javadoc.jar",
+ "commons-lang" ), "commons-lang", "3.1-SNAPSHOT",
+ "javadoc", "jar" );
}
public void testSplitFilenameApacheIncubator() throws LayoutException
{
- assertSplit( RepositoryLayoutUtils.splitFilename( "cxf-common-2.0-incubator-M1.pom", null ), "cxf-common",
- "2.0-incubator-M1", "", "pom" );
- assertSplit( RepositoryLayoutUtils.splitFilename( "commonj-api_r1.1-1.0-incubator-M2.jar", null ),
- "commonj-api_r1.1", "1.0-incubator-M2", "", "jar" );
+ assertFilenameParts( RepositoryLayoutUtils.splitFilename( "cxf-common-2.0-incubator-M1.pom", null ),
+ "cxf-common", "2.0-incubator-M1", null, "pom" );
+ assertFilenameParts( RepositoryLayoutUtils.splitFilename( "commonj-api_r1.1-1.0-incubator-M2.jar", null ),
+ "commonj-api_r1.1", "1.0-incubator-M2", null, "jar" );
}
public void testSplitFilenameBlankInputs()
@@ -108,7 +114,7 @@ public class RepositoryLayoutUtilsTest extends TestCase
{
fail( "Should have thrown an IllegalArgumentException." );
}
-
+
try
{
RepositoryLayoutUtils.splitFilename( "", null );
@@ -122,7 +128,7 @@ public class RepositoryLayoutUtilsTest extends TestCase
{
fail( "Should have thrown an IllegalArgumentException." );
}
-
+
try
{
RepositoryLayoutUtils.splitFilename( " ", null );
@@ -136,7 +142,7 @@ public class RepositoryLayoutUtilsTest extends TestCase
{
fail( "Should have thrown an IllegalArgumentException." );
}
-
+
try
{
RepositoryLayoutUtils.splitFilename( " \t \n ", null );
@@ -151,7 +157,7 @@ public class RepositoryLayoutUtilsTest extends TestCase
fail( "Should have thrown an IllegalArgumentException." );
}
}
-
+
public void testSplitFilenameBadInputs()
{
try
@@ -163,7 +169,7 @@ public class RepositoryLayoutUtilsTest extends TestCase
{
/* Expected Path */
}
-
+
try
{
RepositoryLayoutUtils.splitFilename( "geronimo-store", null );
@@ -173,7 +179,7 @@ public class RepositoryLayoutUtilsTest extends TestCase
{
/* Expected Path */
}
-
+
try
{
RepositoryLayoutUtils.splitFilename( "The Sixth Sick Sheiks Sixth Sheep is Sick.", null );
@@ -183,7 +189,7 @@ public class RepositoryLayoutUtilsTest extends TestCase
{
/* Expected Path */
}
-
+
try
{
RepositoryLayoutUtils.splitFilename( "1.0.jar", null );
@@ -195,12 +201,12 @@ public class RepositoryLayoutUtilsTest extends TestCase
}
}
- private void assertSplit( String[] actualSplit, String artifactId, String version, String classifier,
- String extension )
+ private void assertFilenameParts( FilenameParts actualParts, String artifactId, String version, String classifier,
+ String extension )
{
- assertEquals( "Split - artifactId", artifactId, actualSplit[0] );
- assertEquals( "Split - version", version, actualSplit[1] );
- assertEquals( "Split - classifier", classifier, actualSplit[2] );
- assertEquals( "Split - extension", extension, actualSplit[3] );
+ assertEquals( "Split - artifactId", artifactId, actualParts.artifactId );
+ assertEquals( "Split - version", version, actualParts.version );
+ assertEquals( "Split - classifier", classifier, actualParts.classifier );
+ assertEquals( "Split - extension", extension, actualParts.extension );
}
}
diff --git a/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/layer/AllTests.java b/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/metadata/AllTests.java
index c87f2710e..76b6ab6dd 100644
--- a/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/layer/AllTests.java
+++ b/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/metadata/AllTests.java
@@ -1,4 +1,4 @@
-package org.apache.maven.archiva.layer;
+package org.apache.maven.archiva.repository.metadata;
/*
* Licensed to the Apache Software Foundation (ASF) under one
@@ -33,10 +33,9 @@ public class AllTests
public static Test suite()
{
- TestSuite suite = new TestSuite( "Test for org.apache.maven.archiva.layer" );
+ TestSuite suite = new TestSuite( "Test for org.apache.maven.archiva.repository.metadata" );
//$JUnit-BEGIN$
- suite.addTestSuite( CachedRepositoryQueryLayerTest.class );
- suite.addTestSuite( DefaultRepositoryQueryLayerTest.class );
+ suite.addTestSuite( RepositoryMetadataReaderTest.class );
//$JUnit-END$
return suite;
}
diff --git a/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/metadata/RepositoryMetadataReaderTest.java b/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/metadata/RepositoryMetadataReaderTest.java
new file mode 100644
index 000000000..5b6af02a8
--- /dev/null
+++ b/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/metadata/RepositoryMetadataReaderTest.java
@@ -0,0 +1,52 @@
+package org.apache.maven.archiva.repository.metadata;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.archiva.model.ArchivaRepositoryMetadata;
+import org.codehaus.plexus.PlexusTestCase;
+
+import java.io.File;
+
+/**
+ * RepositoryMetadataReaderTest
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class RepositoryMetadataReaderTest extends PlexusTestCase
+{
+ public void testLoadSimple() throws RepositoryMetadataException
+ {
+ File defaultRepoDir = new File( getBasedir(), "src/test/repositories/default-repository" );
+ File metadataFile = new File( defaultRepoDir, "org/apache/maven/shared/maven-downloader/maven-metadata.xml" );
+
+ RepositoryMetadataReader reader = new RepositoryMetadataReader();
+
+ ArchivaRepositoryMetadata metadata = reader.read( metadataFile );
+
+ assertNotNull( metadata );
+ assertEquals( "Group Id", "org.apache.maven.shared", metadata.getContentKey().getGroupId() );
+ assertEquals( "Artifact Id", "maven-downloader", metadata.getContentKey().getArtifactId() );
+ assertEquals( "Released Version", "1.1", metadata.getReleasedVersion() );
+ assertEquals( "List of Available Versions", 2, metadata.getAvailableVersions().size() );
+ assertTrue( "Available version 1.0", metadata.getAvailableVersions().contains( "1.0" ) );
+ assertTrue( "Available version 1.1", metadata.getAvailableVersions().contains( "1.1" ) );
+ }
+}
diff --git a/archiva-base/archiva-common/src/test/java/org/apache/maven/archiva/common/artifact/builder/AllTests.java b/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/project/AllTests.java
index 45511c374..a9646e935 100644
--- a/archiva-base/archiva-common/src/test/java/org/apache/maven/archiva/common/artifact/builder/AllTests.java
+++ b/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/project/AllTests.java
@@ -1,4 +1,4 @@
-package org.apache.maven.archiva.common.artifact.builder;
+package org.apache.maven.archiva.repository.project;
/*
* Licensed to the Apache Software Foundation (ASF) under one
@@ -33,10 +33,9 @@ public class AllTests
public static Test suite()
{
- TestSuite suite = new TestSuite( "Test for org.apache.maven.archiva.discoverer.builders" );
+ TestSuite suite = new TestSuite( "Test for org.apache.maven.archiva.repository.project" );
//$JUnit-BEGIN$
- suite.addTestSuite( LegacyLayoutArtifactBuilderTest.class );
- suite.addTestSuite( DefaultLayoutArtifactBuilderTest.class );
+ suite.addTestSuite( ProjectModel400ReaderTest.class );
//$JUnit-END$
return suite;
}
diff --git a/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/project/ProjectModel400ReaderTest.java b/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/project/ProjectModel400ReaderTest.java
new file mode 100644
index 000000000..a413ed2a1
--- /dev/null
+++ b/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/project/ProjectModel400ReaderTest.java
@@ -0,0 +1,53 @@
+package org.apache.maven.archiva.repository.project;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.archiva.model.ArchivaProjectModel;
+import org.codehaus.plexus.PlexusTestCase;
+
+import java.io.File;
+
+/**
+ * ProjectModel400ReaderTest
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class ProjectModel400ReaderTest extends PlexusTestCase
+{
+ public void testLoadSimple() throws ProjectModelException
+ {
+ File defaultRepoDir = new File( getBasedir(), "src/test/repositories/default-repository" );
+ File pomFile = new File( defaultRepoDir, "org/apache/maven/shared/maven-downloader/1.0/maven-downloader-1.0.pom" );
+
+ ProjectModelReader reader = new ProjectModel400Reader();
+
+ ArchivaProjectModel project = reader.read( pomFile );
+
+ assertNotNull( project );
+ assertEquals( "Group Id", "org.apache.maven.shared", project.getContentKey().getGroupId() );
+ assertEquals( "Artifact Id", "maven-downloader", project.getContentKey().getArtifactId() );
+ assertEquals( "Released Version", "1.0", project.getContentKey().getVersion() );
+ assertEquals( "Name", "Maven Downloader", project.getName() );
+ assertEquals( "Description", "Provide a super simple interface for downloading a single artifact.", project.getDescription() );
+// assertTrue( "Available version 1.0", project.getAvailableVersions().contains( "1.0" ) );
+// assertTrue( "Available version 1.1", project.getAvailableVersions().contains( "1.1" ) );
+ }
+}
diff --git a/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/scanner/AllTests.java b/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/scanner/AllTests.java
new file mode 100644
index 000000000..0cecdce3e
--- /dev/null
+++ b/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/scanner/AllTests.java
@@ -0,0 +1,41 @@
+package org.apache.maven.archiva.repository.scanner;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+/**
+ * AllTests - Useful for developers using IDEs.
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class AllTests
+{
+ public static Test suite()
+ {
+ TestSuite suite = new TestSuite( "Test for org.apache.maven.archiva.repository.scanner" );
+ //$JUnit-BEGIN$
+ suite.addTestSuite( RepositoryScannerTest.class );
+ //$JUnit-END$
+ return suite;
+ }
+}
diff --git a/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/scanner/CentralScannerTiming.java b/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/scanner/CentralScannerTiming.java
index 3c2c3a2aa..1472313e1 100644
--- a/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/scanner/CentralScannerTiming.java
+++ b/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/scanner/CentralScannerTiming.java
@@ -19,14 +19,19 @@ package org.apache.maven.archiva.repository.scanner;
* under the License.
*/
-import org.apache.maven.archiva.common.utils.BaseFile;
import org.apache.maven.archiva.common.utils.DateUtil;
+import org.apache.maven.archiva.consumers.AbstractMonitoredConsumer;
+import org.apache.maven.archiva.consumers.ConsumerException;
+import org.apache.maven.archiva.consumers.RepositoryContentConsumer;
+import org.apache.maven.archiva.model.ArchivaProjectModel;
+import org.apache.maven.archiva.model.ArchivaRepository;
import org.apache.maven.archiva.model.RepositoryContentStatistics;
-import org.apache.maven.archiva.repository.ArchivaRepository;
import org.apache.maven.archiva.repository.RepositoryException;
-import org.apache.maven.archiva.repository.consumer.Consumer;
-import org.apache.maven.archiva.repository.consumer.ConsumerException;
+import org.apache.maven.archiva.repository.project.ProjectModel400Reader;
+import org.apache.maven.archiva.repository.project.ProjectModelException;
+import org.apache.maven.archiva.repository.project.ProjectModelReader;
+import java.io.File;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collections;
@@ -51,23 +56,36 @@ public class CentralScannerTiming
{
ArchivaRepository centralRepo = new ArchivaRepository( "central", "Central Mirror", "file://" + path );
- RepositoryScanner scanner = new RepositoryScanner();
-
List consumerList = new ArrayList();
- BasicConsumer consumer = new BasicConsumer();
- consumerList.add( consumer );
+
+ // Basic - find the artifacts (no real processing)
+
+ consumerList.add( new BasicConsumer() );
+ timeIt( "Basic Scan", centralRepo, consumerList );
+
+ // POM - find the poms and read them.
+
+ consumerList.clear();
+ consumerList.add( new POMConsumer() );
+ timeIt( "POM Read", centralRepo, consumerList );
+ }
+
+ private void timeIt( String type, ArchivaRepository repo, List consumerList )
+ {
+ RepositoryScanner scanner = new RepositoryScanner();
try
{
- RepositoryContentStatistics stats = scanner.scan( centralRepo, consumerList, true );
+ RepositoryContentStatistics stats = scanner.scan( repo, consumerList, true );
SimpleDateFormat df = new SimpleDateFormat();
- System.out.println( "-------" );
+ System.out.println( ".\\ " + type + " \\.__________________________________________" );
System.out.println( " Repository ID : " + stats.getRepositoryId() );
System.out.println( " Duration : " + DateUtil.getDuration( stats.getDuration() ) );
System.out.println( " When Gathered : " + df.format( stats.getWhenGathered() ) );
System.out.println( " Total File Count: " + stats.getTotalFileCount() );
System.out.println( " New File Count : " + stats.getNewFileCount() );
+ System.out.println( "______________________________________________________________" );
}
catch ( RepositoryException e )
{
@@ -75,16 +93,87 @@ public class CentralScannerTiming
}
}
- class BasicConsumer implements Consumer
+ class POMConsumer extends AbstractMonitoredConsumer implements RepositoryContentConsumer
+ {
+ private int count = 0;
+
+ private ProjectModelReader reader;
+
+ private ArchivaRepository repo;
+
+ public POMConsumer()
+ {
+ reader = new ProjectModel400Reader();
+ }
+
+ public List getExcludes()
+ {
+ return Collections.EMPTY_LIST;
+ }
+
+ public List getIncludes()
+ {
+ List includes = new ArrayList();
+ includes.add( "**/*.pom" );
+ return includes;
+ }
+
+ public String getId()
+ {
+ return "pom-consumer";
+ }
+
+ public String getDescription()
+ {
+ return "Basic POM Consumer";
+ }
+
+ public boolean isPermanent()
+ {
+ return false;
+ }
+
+ public void beginScan( ArchivaRepository repository ) throws ConsumerException
+ {
+ repo = repository;
+ }
+
+ public void processFile( String path ) throws ConsumerException
+ {
+ count++;
+ if ( ( count % 1000 ) == 0 )
+ {
+ System.out.println( "Files Processed: " + count );
+ }
+
+ File pomFile = new File( repo.getUrl().getPath(), path );
+ try
+ {
+ ArchivaProjectModel model = reader.read( pomFile );
+ }
+ catch ( ProjectModelException e )
+ {
+ System.err.println( "Unable to process: " + pomFile );
+ e.printStackTrace( System.out );
+ }
+ }
+
+ public void completeScan()
+ {
+ /* do nothing */
+ }
+ }
+
+ class BasicConsumer extends AbstractMonitoredConsumer implements RepositoryContentConsumer
{
int count = 0;
- public List getExcludePatterns()
+ public List getExcludes()
{
return Collections.EMPTY_LIST;
}
- public List getIncludePatterns()
+ public List getIncludes()
{
List includes = new ArrayList();
includes.add( "**/*.pom" );
@@ -94,9 +183,9 @@ public class CentralScannerTiming
includes.add( "**/*.sar" );
includes.add( "**/*.car" );
includes.add( "**/*.mar" );
-// includes.add( "**/*.sha1" );
-// includes.add( "**/*.md5" );
-// includes.add( "**/*.asc" );
+ // includes.add( "**/*.sha1" );
+ // includes.add( "**/*.md5" );
+ // includes.add( "**/*.asc" );
includes.add( "**/*.dtd" );
includes.add( "**/*.tld" );
includes.add( "**/*.gz" );
@@ -105,17 +194,27 @@ public class CentralScannerTiming
return includes;
}
- public String getName()
+ public String getId()
+ {
+ return "test-scan-timing";
+ }
+
+ public String getDescription()
{
return "Basic No-op Consumer";
}
- public boolean init( ArchivaRepository repository )
+ public boolean isPermanent()
+ {
+ return false;
+ }
+
+ public void beginScan( ArchivaRepository repository ) throws ConsumerException
{
- return true;
+ /* do nothing */
}
- public void processFile( BaseFile file ) throws ConsumerException
+ public void processFile( String path ) throws ConsumerException
{
count++;
if ( ( count % 1000 ) == 0 )
@@ -124,9 +223,9 @@ public class CentralScannerTiming
}
}
- public void processFileProblem( BaseFile file, String message )
+ public void completeScan()
{
- /* no-op */
+ /* do nothing */
}
}
}
diff --git a/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/scanner/RepositoryScannerTest.java b/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/scanner/RepositoryScannerTest.java
index 4907819f0..c85c39758 100644
--- a/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/scanner/RepositoryScannerTest.java
+++ b/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/scanner/RepositoryScannerTest.java
@@ -20,8 +20,8 @@ package org.apache.maven.archiva.repository.scanner;
*/
import org.apache.commons.lang.StringUtils;
+import org.apache.maven.archiva.model.ArchivaRepository;
import org.apache.maven.archiva.model.RepositoryContentStatistics;
-import org.apache.maven.archiva.repository.ArchivaRepository;
import org.apache.maven.archiva.repository.RepositoryException;
import org.codehaus.plexus.PlexusTestCase;
@@ -35,8 +35,17 @@ import java.util.List;
* @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
* @version $Id$
*/
-public class RepositoryScannerTest extends PlexusTestCase
+public class RepositoryScannerTest
+ extends PlexusTestCase
{
+ private static final String[] ARTIFACT_PATTERNS = new String[] {
+ "**/*.jar",
+ "**/*.pom",
+ "**/*.rar",
+ "**/*.zip",
+ "**/*.war",
+ "**/*.tar.gz" };
+
private ArchivaRepository createDefaultRepository()
{
File repoDir = new File( getBasedir(), "src/test/repositories/default-repository" );
@@ -50,12 +59,122 @@ public class RepositoryScannerTest extends PlexusTestCase
return repo;
}
- public void testDefaultRepositoryScanner() throws RepositoryException
+ private ArchivaRepository createLegacyRepository()
+ {
+ File repoDir = new File( getBasedir(), "src/test/repositories/legacy-repository" );
+
+ assertTrue( "Legacy Test Repository should exist.", repoDir.exists() && repoDir.isDirectory() );
+
+ String repoUri = "file://" + StringUtils.replace( repoDir.getAbsolutePath(), "\\", "/" );
+
+ ArchivaRepository repo = new ArchivaRepository( "testLegacyRepo", "Test Legacy Repository", repoUri );
+ repo.getModel().setLayoutName( "legacy" );
+
+ return repo;
+ }
+
+ private void assertMinimumHits( String msg, int minimumHitCount, long actualCount )
+ {
+ if ( actualCount < minimumHitCount )
+ {
+ fail( "Minimum hit count on " + msg + " not satisfied. Expected more than <" + minimumHitCount
+ + ">, but actually got <" + actualCount + ">." );
+ }
+ }
+
+ public void testDefaultRepositoryScanner()
+ throws RepositoryException
+ {
+ ArchivaRepository repository = createDefaultRepository();
+
+ List consumers = new ArrayList();
+ ScanConsumer consumer = new ScanConsumer();
+ consumer.setIncludes( new String[] { "**/*.jar" } );
+ consumers.add( consumer );
+
+ RepositoryScanner scanner = new RepositoryScanner();
+ boolean includeSnapshots = true;
+ RepositoryContentStatistics stats = scanner.scan( repository, consumers, includeSnapshots );
+
+ assertNotNull( "Stats should not be null.", stats );
+ assertMinimumHits( "Stats.totalFileCount", 17, stats.getTotalFileCount() );
+ assertMinimumHits( "Processed Count", 17, consumer.getProcessCount() );
+ }
+
+ public void testDefaultRepositoryArtifactScanner()
+ throws RepositoryException
+ {
+ List actualArtifactPaths = new ArrayList();
+
+ actualArtifactPaths.add( "invalid/invalid/1.0-20050611.123456-1/invalid-1.0-20050611.123456-1.jar" );
+ actualArtifactPaths.add( "invalid/invalid/1.0-SNAPSHOT/invalid-1.0.jar" );
+ actualArtifactPaths.add( "invalid/invalid/1.0/invalid-1.0b.jar" );
+ actualArtifactPaths.add( "invalid/invalid/1.0/invalid-2.0.jar" );
+ actualArtifactPaths.add( "invalid/invalid-1.0.jar" );
+ actualArtifactPaths.add( "org/apache/maven/test/1.0-SNAPSHOT/wrong-artifactId-1.0-20050611.112233-1.jar" );
+ actualArtifactPaths.add( "org/apache/maven/test/1.0-SNAPSHOT/test-1.0-20050611.112233-1-javadoc.jar" );
+ actualArtifactPaths.add( "org/apache/maven/test/1.0-SNAPSHOT/test-1.0-20050611.112233-1.jar" );
+ actualArtifactPaths.add( "org/apache/maven/A/1.0/A-1.0.war" );
+ actualArtifactPaths.add( "org/apache/maven/A/1.0/A-1.0.pom" );
+ actualArtifactPaths.add( "org/apache/maven/B/2.0/B-2.0.pom" );
+ actualArtifactPaths.add( "org/apache/maven/B/1.0/B-1.0.pom" );
+ actualArtifactPaths.add( "org/apache/maven/some-ejb/1.0/some-ejb-1.0-client.jar" );
+ actualArtifactPaths.add( "org/apache/maven/C/1.0/C-1.0.war" );
+ actualArtifactPaths.add( "org/apache/maven/C/1.0/C-1.0.pom" );
+ actualArtifactPaths.add( "org/apache/maven/update/test-not-updated/1.0/test-not-updated-1.0.pom" );
+ actualArtifactPaths.add( "org/apache/maven/update/test-not-updated/1.0/test-not-updated-1.0.jar" );
+ actualArtifactPaths.add( "org/apache/maven/update/test-updated/1.0/test-updated-1.0.pom" );
+ actualArtifactPaths.add( "org/apache/maven/update/test-updated/1.0/test-updated-1.0.jar" );
+ actualArtifactPaths.add( "org/apache/maven/discovery/1.0/discovery-1.0.pom" );
+ actualArtifactPaths.add( "org/apache/maven/testing/1.0/testing-1.0-test-sources.jar" );
+ actualArtifactPaths.add( "org/apache/maven/testing/1.0/testing-1.0.jar" );
+ actualArtifactPaths.add( "org/apache/maven/testing/1.0/testing-1.0-sources.jar" );
+ actualArtifactPaths.add( "org/apache/maven/testing/1.0/testing-1.0.zip" );
+ actualArtifactPaths.add( "org/apache/maven/testing/1.0/testing-1.0.tar.gz" );
+ actualArtifactPaths.add( "org/apache/maven/samplejar/2.0/samplejar-2.0.pom" );
+ actualArtifactPaths.add( "org/apache/maven/samplejar/2.0/samplejar-2.0.jar" );
+ actualArtifactPaths.add( "org/apache/maven/samplejar/1.0/samplejar-1.0.pom" );
+ actualArtifactPaths.add( "org/apache/maven/samplejar/1.0/samplejar-1.0.jar" );
+ actualArtifactPaths.add( "org/apache/testgroup/discovery/1.0/discovery-1.0.pom" );
+ actualArtifactPaths.add( "javax/sql/jdbc/2.0/jdbc-2.0.jar" );
+
+ ArchivaRepository repository = createDefaultRepository();
+
+ List consumers = new ArrayList();
+ ScanConsumer consumer = new ScanConsumer();
+ consumer.setIncludes( ARTIFACT_PATTERNS );
+ consumers.add( consumer );
+
+ RepositoryScanner scanner = new RepositoryScanner();
+ boolean includeSnapshots = true;
+ RepositoryContentStatistics stats = scanner.scan( repository, consumers, includeSnapshots );
+
+ assertNotNull( "Stats should not be null.", stats );
+ assertMinimumHits( "Stats.totalFileCount", actualArtifactPaths.size(), stats.getTotalFileCount() );
+ assertMinimumHits( "Processed Count", actualArtifactPaths.size(), consumer.getProcessCount() );
+ }
+
+ public void testDefaultRepositoryMetadataScanner()
+ throws RepositoryException
{
+ List actualMetadataPaths = new ArrayList();
+
+ actualMetadataPaths.add( "org/apache/maven/some-ejb/1.0/maven-metadata.xml" );
+ actualMetadataPaths.add( "org/apache/maven/update/test-not-updated/maven-metadata.xml" );
+ actualMetadataPaths.add( "org/apache/maven/update/test-updated/maven-metadata.xml" );
+ actualMetadataPaths.add( "org/apache/maven/maven-metadata.xml" );
+ actualMetadataPaths.add( "org/apache/testgroup/discovery/1.0/maven-metadata.xml" );
+ actualMetadataPaths.add( "org/apache/testgroup/discovery/maven-metadata.xml" );
+ actualMetadataPaths.add( "javax/sql/jdbc/2.0/maven-metadata-repository.xml" );
+ actualMetadataPaths.add( "javax/sql/jdbc/maven-metadata-repository.xml" );
+ actualMetadataPaths.add( "javax/sql/maven-metadata-repository.xml" );
+ actualMetadataPaths.add( "javax/maven-metadata.xml" );
+
ArchivaRepository repository = createDefaultRepository();
List consumers = new ArrayList();
ScanConsumer consumer = new ScanConsumer();
+ consumer.setIncludes( new String[] { "**/maven-metadata*.xml" } );
consumers.add( consumer );
RepositoryScanner scanner = new RepositoryScanner();
@@ -63,8 +182,75 @@ public class RepositoryScannerTest extends PlexusTestCase
RepositoryContentStatistics stats = scanner.scan( repository, consumers, includeSnapshots );
assertNotNull( "Stats should not be null.", stats );
- assertEquals( "Stats.totalFileCount", 17, stats.getTotalFileCount() );
- assertEquals( "Processed Count", 17, consumer.getProcessCount() );
+ assertMinimumHits( "Stats.totalFileCount", actualMetadataPaths.size(), stats.getTotalFileCount() );
+ assertMinimumHits( "Processed Count", actualMetadataPaths.size(), consumer.getProcessCount() );
}
+ public void testDefaultRepositoryProjectScanner()
+ throws RepositoryException
+ {
+ List actualProjectPaths = new ArrayList();
+
+ actualProjectPaths.add( "org/apache/maven/A/1.0/A-1.0.pom" );
+ actualProjectPaths.add( "org/apache/maven/B/2.0/B-2.0.pom" );
+ actualProjectPaths.add( "org/apache/maven/B/1.0/B-1.0.pom" );
+ actualProjectPaths.add( "org/apache/maven/C/1.0/C-1.0.pom" );
+ actualProjectPaths.add( "org/apache/maven/update/test-not-updated/1.0/test-not-updated-1.0.pom" );
+ actualProjectPaths.add( "org/apache/maven/update/test-updated/1.0/test-updated-1.0.pom" );
+ actualProjectPaths.add( "org/apache/maven/discovery/1.0/discovery-1.0.pom" );
+ actualProjectPaths.add( "org/apache/maven/samplejar/2.0/samplejar-2.0.pom" );
+ actualProjectPaths.add( "org/apache/maven/samplejar/1.0/samplejar-1.0.pom" );
+ actualProjectPaths.add( "org/apache/testgroup/discovery/1.0/discovery-1.0.pom" );
+
+ ArchivaRepository repository = createDefaultRepository();
+
+ List consumers = new ArrayList();
+ ScanConsumer consumer = new ScanConsumer();
+ consumer.setIncludes( new String[] { "**/*.pom" } );
+ consumers.add( consumer );
+
+ RepositoryScanner scanner = new RepositoryScanner();
+ boolean includeSnapshots = true;
+ RepositoryContentStatistics stats = scanner.scan( repository, consumers, includeSnapshots );
+
+ assertNotNull( "Stats should not be null.", stats );
+ assertMinimumHits( "Stats.totalFileCount", actualProjectPaths.size(), stats.getTotalFileCount() );
+ assertMinimumHits( "Processed Count", actualProjectPaths.size(), consumer.getProcessCount() );
+ }
+
+ public void testLegacyRepositoryArtifactScanner()
+ throws RepositoryException
+ {
+ List actualArtifactPaths = new ArrayList();
+
+ actualArtifactPaths.add( "invalid/jars/1.0/invalid-1.0.jar" );
+ actualArtifactPaths.add( "invalid/jars/invalid-1.0.rar" );
+ actualArtifactPaths.add( "invalid/jars/invalid.jar" );
+ actualArtifactPaths.add( "invalid/invalid-1.0.jar" );
+ actualArtifactPaths.add( "javax.sql/jars/jdbc-2.0.jar" );
+ actualArtifactPaths.add( "org.apache.maven/jars/some-ejb-1.0-client.jar" );
+ actualArtifactPaths.add( "org.apache.maven/jars/testing-1.0.jar" );
+ actualArtifactPaths.add( "org.apache.maven/jars/testing-1.0-sources.jar" );
+ actualArtifactPaths.add( "org.apache.maven/jars/testing-UNKNOWN.jar" );
+ actualArtifactPaths.add( "org.apache.maven/jars/testing-1.0.zip" );
+ actualArtifactPaths.add( "org.apache.maven/jars/testing-1.0-20050611.112233-1.jar" );
+ actualArtifactPaths.add( "org.apache.maven/jars/testing-1.0.tar.gz" );
+ actualArtifactPaths.add( "org.apache.maven.update/jars/test-not-updated-1.0.jar" );
+ actualArtifactPaths.add( "org.apache.maven.update/jars/test-updated-1.0.jar" );
+
+ ArchivaRepository repository = createLegacyRepository();
+
+ List consumers = new ArrayList();
+ ScanConsumer consumer = new ScanConsumer();
+ consumer.setIncludes( ARTIFACT_PATTERNS );
+ consumers.add( consumer );
+
+ RepositoryScanner scanner = new RepositoryScanner();
+ boolean includeSnapshots = true;
+ RepositoryContentStatistics stats = scanner.scan( repository, consumers, includeSnapshots );
+
+ assertNotNull( "Stats should not be null.", stats );
+ assertMinimumHits( "Stats.totalFileCount", actualArtifactPaths.size(), stats.getTotalFileCount() );
+ assertMinimumHits( "Processed Count", actualArtifactPaths.size(), consumer.getProcessCount() );
+ }
}
diff --git a/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/scanner/ScanConsumer.java b/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/scanner/ScanConsumer.java
index d1c8e0a10..8b42e873a 100644
--- a/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/scanner/ScanConsumer.java
+++ b/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/scanner/ScanConsumer.java
@@ -19,13 +19,13 @@ package org.apache.maven.archiva.repository.scanner;
* under the License.
*/
-import org.apache.maven.archiva.common.utils.BaseFile;
-import org.apache.maven.archiva.repository.ArchivaRepository;
-import org.apache.maven.archiva.repository.consumer.Consumer;
-import org.apache.maven.archiva.repository.consumer.ConsumerException;
+import org.apache.maven.archiva.consumers.AbstractMonitoredConsumer;
+import org.apache.maven.archiva.consumers.ConsumerException;
+import org.apache.maven.archiva.consumers.RepositoryContentConsumer;
+import org.apache.maven.archiva.model.ArchivaRepository;
import java.util.ArrayList;
-import java.util.Collections;
+import java.util.Arrays;
import java.util.List;
/**
@@ -34,38 +34,49 @@ import java.util.List;
* @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
* @version $Id$
*/
-public class ScanConsumer implements Consumer
+public class ScanConsumer extends AbstractMonitoredConsumer implements RepositoryContentConsumer
{
private int processCount = 0;
- public List getExcludePatterns()
+ private List includes = new ArrayList();
+
+ public List getExcludes()
+ {
+ return null;
+ }
+
+ public void setIncludes( String includesArray[] )
{
- return Collections.EMPTY_LIST;
+ this.includes.clear();
+ this.includes.addAll( Arrays.asList( includesArray ) );
}
- public List getIncludePatterns()
+ public List getIncludes()
{
- List includes = new ArrayList();
- includes.add( "**/*.jar" );
return includes;
}
- public String getName()
+ public String getId()
{
- return "Scan Consumer";
+ return "test-scan-consumer";
}
- public boolean init( ArchivaRepository repository )
+ public String getDescription()
{
- return true;
+ return "Scan Consumer (for testing)";
}
- public void processFile( BaseFile file ) throws ConsumerException
+ public void beginScan( ArchivaRepository repository ) throws ConsumerException
+ {
+ /* do nothing */
+ }
+
+ public void processFile( String path ) throws ConsumerException
{
this.processCount++;
}
- public void processFileProblem( BaseFile file, String message )
+ public void completeScan()
{
/* do nothing */
}
@@ -79,4 +90,9 @@ public class ScanConsumer implements Consumer
{
this.processCount = processCount;
}
+
+ public boolean isPermanent()
+ {
+ return false;
+ }
}
diff --git a/archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.0/maven-downloader-1.0-javadoc.jar b/archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.0/maven-downloader-1.0-javadoc.jar
new file mode 100644
index 000000000..ae0cb2e32
--- /dev/null
+++ b/archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.0/maven-downloader-1.0-javadoc.jar
Binary files differ
diff --git a/archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.0/maven-downloader-1.0-javadoc.jar.md5 b/archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.0/maven-downloader-1.0-javadoc.jar.md5
new file mode 100644
index 000000000..15a0630f6
--- /dev/null
+++ b/archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.0/maven-downloader-1.0-javadoc.jar.md5
@@ -0,0 +1 @@
+69af4ffaf5e65d02b6ca50467e79b42a \ No newline at end of file
diff --git a/archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.0/maven-downloader-1.0-javadoc.jar.sha1 b/archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.0/maven-downloader-1.0-javadoc.jar.sha1
new file mode 100644
index 000000000..107f46801
--- /dev/null
+++ b/archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.0/maven-downloader-1.0-javadoc.jar.sha1
@@ -0,0 +1 @@
+902005afa0e151d7750735180f692d32fa5d76e2 \ No newline at end of file
diff --git a/archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.0/maven-downloader-1.0-sources.jar b/archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.0/maven-downloader-1.0-sources.jar
new file mode 100644
index 000000000..faa0d98cc
--- /dev/null
+++ b/archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.0/maven-downloader-1.0-sources.jar
Binary files differ
diff --git a/archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.0/maven-downloader-1.0-sources.jar.md5 b/archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.0/maven-downloader-1.0-sources.jar.md5
new file mode 100644
index 000000000..3a84ad832
--- /dev/null
+++ b/archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.0/maven-downloader-1.0-sources.jar.md5
@@ -0,0 +1 @@
+f7d54f505b8affa8a8235e01fbc38219 \ No newline at end of file
diff --git a/archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.0/maven-downloader-1.0-sources.jar.sha1 b/archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.0/maven-downloader-1.0-sources.jar.sha1
new file mode 100644
index 000000000..3a72dc7bb
--- /dev/null
+++ b/archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.0/maven-downloader-1.0-sources.jar.sha1
@@ -0,0 +1 @@
+821f8ec6e32c3fecd1b1fb85f83bfea148a86da8 \ No newline at end of file
diff --git a/archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.0/maven-downloader-1.0.jar b/archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.0/maven-downloader-1.0.jar
new file mode 100644
index 000000000..712c664dd
--- /dev/null
+++ b/archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.0/maven-downloader-1.0.jar
Binary files differ
diff --git a/archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.0/maven-downloader-1.0.jar.md5 b/archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.0/maven-downloader-1.0.jar.md5
new file mode 100644
index 000000000..04d4ce468
--- /dev/null
+++ b/archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.0/maven-downloader-1.0.jar.md5
@@ -0,0 +1 @@
+a2af4d8c1c00d8405ae2074fbcca87aa \ No newline at end of file
diff --git a/archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.0/maven-downloader-1.0.jar.sha1 b/archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.0/maven-downloader-1.0.jar.sha1
new file mode 100644
index 000000000..19ae195e0
--- /dev/null
+++ b/archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.0/maven-downloader-1.0.jar.sha1
@@ -0,0 +1 @@
+43dfd03d32f70b8b72cdbefa1678dbeacf9a1f8c \ No newline at end of file
diff --git a/archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.0/maven-downloader-1.0.pom b/archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.0/maven-downloader-1.0.pom
new file mode 100644
index 000000000..d3c136b8c
--- /dev/null
+++ b/archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.0/maven-downloader-1.0.pom
@@ -0,0 +1,56 @@
+<?xml version="1.0"?><project>
+ <parent>
+ <artifactId>maven-shared-components</artifactId>
+ <groupId>org.apache.maven.shared</groupId>
+ <version>4</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.maven.shared</groupId>
+ <artifactId>maven-downloader</artifactId>
+ <name>Maven Downloader</name>
+ <version>1.0</version>
+ <description>Provide a super simple interface for downloading a single artifact.</description>
+ <url>http://maven.apache.org</url>
+ <scm>
+ <connection>scm:svn:https://svn.apache.org/repos/asf/maven/shared/tags/maven-downloader-1.0</connection>
+ <developerConnection>scm:svn:https://svn.apache.org/repos/asf/maven/shared/tags/maven-downloader-1.0</developerConnection>
+ <url>https://svn.apache.org/repos/asf/maven/shared/tags/maven-downloader-1.0</url>
+ </scm>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-maven-plugin</artifactId>
+ <version>1.1</version>
+ <executions>
+ <execution>
+ <goals>
+ <goal>descriptor</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-artifact-manager</artifactId>
+ <version>2.0</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-artifact</artifactId>
+ <version>2.0</version>
+ </dependency>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>3.8.1</version>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+ <distributionManagement>
+ <status>deployed</status>
+ </distributionManagement>
+</project> \ No newline at end of file
diff --git a/archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.0/maven-downloader-1.0.pom.md5 b/archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.0/maven-downloader-1.0.pom.md5
new file mode 100644
index 000000000..89e705b79
--- /dev/null
+++ b/archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.0/maven-downloader-1.0.pom.md5
@@ -0,0 +1 @@
+8ab3c303c12323c469be9beb591f3f12 \ No newline at end of file
diff --git a/archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.0/maven-downloader-1.0.pom.sha1 b/archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.0/maven-downloader-1.0.pom.sha1
new file mode 100644
index 000000000..1a75091fa
--- /dev/null
+++ b/archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.0/maven-downloader-1.0.pom.sha1
@@ -0,0 +1 @@
+e4484abb15526e31b8ea514d3ba68e31189c12b0 \ No newline at end of file
diff --git a/archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.1/maven-downloader-1.1-javadoc.jar b/archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.1/maven-downloader-1.1-javadoc.jar
new file mode 100644
index 000000000..3114e1ae6
--- /dev/null
+++ b/archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.1/maven-downloader-1.1-javadoc.jar
Binary files differ
diff --git a/archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.1/maven-downloader-1.1-javadoc.jar.md5 b/archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.1/maven-downloader-1.1-javadoc.jar.md5
new file mode 100644
index 000000000..3f77b9093
--- /dev/null
+++ b/archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.1/maven-downloader-1.1-javadoc.jar.md5
@@ -0,0 +1 @@
+942c2a52f0e38b1e59b12837905d1f25 \ No newline at end of file
diff --git a/archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.1/maven-downloader-1.1-javadoc.jar.sha1 b/archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.1/maven-downloader-1.1-javadoc.jar.sha1
new file mode 100644
index 000000000..1b0a186fc
--- /dev/null
+++ b/archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.1/maven-downloader-1.1-javadoc.jar.sha1
@@ -0,0 +1 @@
+738d6a8c195613ee689f0a7b8f0c6f194e909473 \ No newline at end of file
diff --git a/archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.1/maven-downloader-1.1-sources.jar b/archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.1/maven-downloader-1.1-sources.jar
new file mode 100644
index 000000000..994054bb4
--- /dev/null
+++ b/archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.1/maven-downloader-1.1-sources.jar
Binary files differ
diff --git a/archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.1/maven-downloader-1.1-sources.jar.md5 b/archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.1/maven-downloader-1.1-sources.jar.md5
new file mode 100644
index 000000000..aada2770b
--- /dev/null
+++ b/archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.1/maven-downloader-1.1-sources.jar.md5
@@ -0,0 +1 @@
+c892f8533031750419c77dc87ed35a3b \ No newline at end of file
diff --git a/archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.1/maven-downloader-1.1-sources.jar.sha1 b/archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.1/maven-downloader-1.1-sources.jar.sha1
new file mode 100644
index 000000000..37af4fe89
--- /dev/null
+++ b/archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.1/maven-downloader-1.1-sources.jar.sha1
@@ -0,0 +1 @@
+8aa5027d2688c4540eec9c2b85bbee496f6d4e7c \ No newline at end of file
diff --git a/archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.1/maven-downloader-1.1.jar b/archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.1/maven-downloader-1.1.jar
new file mode 100644
index 000000000..ae6638b79
--- /dev/null
+++ b/archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.1/maven-downloader-1.1.jar
Binary files differ
diff --git a/archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.1/maven-downloader-1.1.jar.md5 b/archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.1/maven-downloader-1.1.jar.md5
new file mode 100644
index 000000000..f5c14a937
--- /dev/null
+++ b/archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.1/maven-downloader-1.1.jar.md5
@@ -0,0 +1 @@
+b8e59f5b162f8c0f6ef23d8d249cfed8 \ No newline at end of file
diff --git a/archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.1/maven-downloader-1.1.jar.sha1 b/archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.1/maven-downloader-1.1.jar.sha1
new file mode 100644
index 000000000..1bcc406e0
--- /dev/null
+++ b/archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.1/maven-downloader-1.1.jar.sha1
@@ -0,0 +1 @@
+923bf441d4ab0d80d45e77576dff86e2b22d2ac4 \ No newline at end of file
diff --git a/archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.1/maven-downloader-1.1.pom b/archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.1/maven-downloader-1.1.pom
new file mode 100644
index 000000000..db5fe99e7
--- /dev/null
+++ b/archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.1/maven-downloader-1.1.pom
@@ -0,0 +1,56 @@
+<?xml version="1.0"?><project>
+ <parent>
+ <artifactId>maven-shared-components</artifactId>
+ <groupId>org.apache.maven.shared</groupId>
+ <version>4</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.maven.shared</groupId>
+ <artifactId>maven-downloader</artifactId>
+ <name>Maven Downloader</name>
+ <version>1.1</version>
+ <description>Provide a super simple interface for downloading a single artifact.</description>
+ <url>http://maven.apache.org</url>
+ <scm>
+ <connection>scm:svn:https://svn.apache.org/repos/asf/maven/shared/tags/maven-downloader-1.1</connection>
+ <developerConnection>scm:svn:https://svn.apache.org/repos/asf/maven/shared/tags/maven-downloader-1.1</developerConnection>
+ <url>https://svn.apache.org/repos/asf/maven/shared/tags/maven-downloader-1.1</url>
+ </scm>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-maven-plugin</artifactId>
+ <version>1.1</version>
+ <executions>
+ <execution>
+ <goals>
+ <goal>descriptor</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-artifact-manager</artifactId>
+ <version>2.0</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-artifact</artifactId>
+ <version>2.0</version>
+ </dependency>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>3.8.1</version>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+ <distributionManagement>
+ <status>deployed</status>
+ </distributionManagement>
+</project> \ No newline at end of file
diff --git a/archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.1/maven-downloader-1.1.pom.md5 b/archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.1/maven-downloader-1.1.pom.md5
new file mode 100644
index 000000000..bffe895ee
--- /dev/null
+++ b/archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.1/maven-downloader-1.1.pom.md5
@@ -0,0 +1 @@
+f4d26363c090391c0b8f5a1c4d5c946a \ No newline at end of file
diff --git a/archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.1/maven-downloader-1.1.pom.sha1 b/archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.1/maven-downloader-1.1.pom.sha1
new file mode 100644
index 000000000..fb062b05f
--- /dev/null
+++ b/archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.1/maven-downloader-1.1.pom.sha1
@@ -0,0 +1 @@
+59f81ef23c583f0dd8e7f432ba88595c645e1fc1 \ No newline at end of file
diff --git a/archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/maven-metadata.xml b/archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/maven-metadata.xml
new file mode 100644
index 000000000..2ecad0a94
--- /dev/null
+++ b/archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/maven-metadata.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?><metadata>
+ <groupId>org.apache.maven.shared</groupId>
+ <artifactId>maven-downloader</artifactId>
+ <version>1.0</version>
+ <versioning>
+ <release>1.1</release>
+ <versions>
+ <version>1.0</version>
+ <version>1.1</version>
+ </versions>
+ <lastUpdated>20061212214311</lastUpdated>
+ </versioning>
+</metadata> \ No newline at end of file
diff --git a/archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/maven-metadata.xml.md5 b/archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/maven-metadata.xml.md5
new file mode 100644
index 000000000..354ec6c58
--- /dev/null
+++ b/archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/maven-metadata.xml.md5
@@ -0,0 +1 @@
+f18235bd6072aa77beb7e01f07905e53 \ No newline at end of file
diff --git a/archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/maven-metadata.xml.sha1 b/archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/maven-metadata.xml.sha1
new file mode 100644
index 000000000..0ff8edcaf
--- /dev/null
+++ b/archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/maven-metadata.xml.sha1
@@ -0,0 +1 @@
+7f87ddac6169d99fa54f29bc9a3f7af5a9c8741f \ No newline at end of file
diff --git a/archiva-base/archiva-scheduled/pom.xml b/archiva-base/archiva-scheduled/pom.xml
new file mode 100644
index 000000000..60a6c7ade
--- /dev/null
+++ b/archiva-base/archiva-scheduled/pom.xml
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Licensed to the Apache Software Foundation (ASF) under one
+ ~ or more contributor license agreements. See the NOTICE file
+ ~ distributed with this work for additional information
+ ~ regarding copyright ownership. The ASF licenses this file
+ ~ to you under the Apache License, Version 2.0 (the
+ ~ "License"); you may not use this file except in compliance
+ ~ with the License. You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing,
+ ~ software distributed under the License is distributed on an
+ ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ ~ KIND, either express or implied. See the License for the
+ ~ specific language governing permissions and limitations
+ ~ under the License.
+ -->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <parent>
+ <groupId>org.apache.maven.archiva</groupId>
+ <artifactId>archiva-base</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+ <artifactId>archiva-scheduled</artifactId>
+ <name>Archiva Base :: Scheduled Tasks</name>
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.maven.archiva</groupId>
+ <artifactId>archiva-configuration</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-taskqueue</artifactId>
+ <version>1.0-alpha-6</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-quartz</artifactId>
+ <version>1.0-alpha-3</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-component-api</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>commons-lang</groupId>
+ <artifactId>commons-lang</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-container-default</artifactId>
+ </dependency>
+ </dependencies>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-maven-plugin</artifactId>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/archiva-base/archiva-scheduled/src/main/java/org/apache/maven/archiva/scheduled/DefaultRepositoryTaskScheduler.java b/archiva-base/archiva-scheduled/src/main/java/org/apache/maven/archiva/scheduled/DefaultRepositoryTaskScheduler.java
new file mode 100644
index 000000000..e5f1fcddf
--- /dev/null
+++ b/archiva-base/archiva-scheduled/src/main/java/org/apache/maven/archiva/scheduled/DefaultRepositoryTaskScheduler.java
@@ -0,0 +1,210 @@
+package org.apache.maven.archiva.scheduled;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.archiva.configuration.ArchivaConfiguration;
+import org.apache.maven.archiva.configuration.Configuration;
+import org.apache.maven.archiva.repositories.ActiveManagedRepositories;
+import org.apache.maven.archiva.scheduler.task.DataRefreshTask;
+import org.apache.maven.archiva.scheduler.task.RepositoryTask;
+import org.codehaus.plexus.logging.AbstractLogEnabled;
+import org.codehaus.plexus.personality.plexus.lifecycle.phase.Startable;
+import org.codehaus.plexus.personality.plexus.lifecycle.phase.StartingException;
+import org.codehaus.plexus.personality.plexus.lifecycle.phase.StoppingException;
+import org.codehaus.plexus.registry.Registry;
+import org.codehaus.plexus.registry.RegistryListener;
+import org.codehaus.plexus.scheduler.Scheduler;
+import org.codehaus.plexus.taskqueue.TaskQueue;
+import org.codehaus.plexus.taskqueue.TaskQueueException;
+import org.codehaus.plexus.taskqueue.execution.TaskExecutionException;
+import org.quartz.CronTrigger;
+import org.quartz.JobDataMap;
+import org.quartz.JobDetail;
+import org.quartz.SchedulerException;
+
+import java.text.ParseException;
+
+/**
+ * Default implementation of a scheduling component for the application.
+ *
+ * @author <a href="mailto:brett@apache.org">Brett Porter</a>
+ * @plexus.component role="org.apache.maven.archiva.scheduler.RepositoryTaskScheduler"
+ */
+public class DefaultRepositoryTaskScheduler
+ extends AbstractLogEnabled
+ implements RepositoryTaskScheduler, Startable, RegistryListener
+{
+ /**
+ * @plexus.requirement
+ */
+ private Scheduler scheduler;
+
+ /**
+ * @plexus.requirement role-hint="data-refresh"
+ */
+ private TaskQueue datarefreshQueue;
+
+ /**
+ * @plexus.requirement
+ */
+ private ArchivaConfiguration archivaConfiguration;
+
+ /**
+ * @plexus.requirement
+ */
+ private ActiveManagedRepositories activeRepositories;
+
+ private static final String DISCOVERER_GROUP = "DISCOVERER";
+
+ private static final String DATA_REFRESH_JOB = "dataRefreshTask";
+
+ public void start()
+ throws StartingException
+ {
+ Configuration configuration = archivaConfiguration.getConfiguration();
+ archivaConfiguration.addChangeListener( this );
+
+ try
+ {
+ scheduleJobs( configuration.getDataRefreshCronExpression() );
+ }
+ catch ( ParseException e )
+ {
+ throw new StartingException( "Invalid configuration: " + configuration.getDataRefreshCronExpression(), e );
+ }
+ catch ( SchedulerException e )
+ {
+ throw new StartingException( "Unable to start scheduler: " + e.getMessage(), e );
+ }
+ }
+
+ private void scheduleJobs( String indexerCronExpression )
+ throws ParseException, SchedulerException
+ {
+ JobDetail jobDetail = createJobDetail( DATA_REFRESH_JOB );
+
+ getLogger().info( "Scheduling data-refresh: " + indexerCronExpression );
+ CronTrigger trigger = new CronTrigger( DATA_REFRESH_JOB + "Trigger", DISCOVERER_GROUP, indexerCronExpression );
+ scheduler.scheduleJob( jobDetail, trigger );
+
+ try
+ {
+ queueNowIfNeeded();
+ }
+ catch ( org.codehaus.plexus.taskqueue.execution.TaskExecutionException e )
+ {
+ getLogger().error( "Error executing task first time, continuing anyway: " + e.getMessage(), e );
+ }
+ }
+
+ private JobDetail createJobDetail( String jobName )
+ {
+ JobDetail jobDetail = new JobDetail( jobName, DISCOVERER_GROUP, RepositoryTaskJob.class );
+
+ JobDataMap dataMap = new JobDataMap();
+ dataMap.put( RepositoryTaskJob.TASK_QUEUE, datarefreshQueue );
+ dataMap.put( RepositoryTaskJob.TASK_QUEUE_POLICY, RepositoryTask.QUEUE_POLICY_SKIP );
+ jobDetail.setJobDataMap( dataMap );
+
+ return jobDetail;
+ }
+
+ public void stop()
+ throws StoppingException
+ {
+ try
+ {
+ scheduler.unscheduleJob( DATA_REFRESH_JOB, DISCOVERER_GROUP );
+ }
+ catch ( SchedulerException e )
+ {
+ throw new StoppingException( "Unable to unschedule tasks", e );
+ }
+ }
+
+
+ public void beforeConfigurationChange( Registry registry, String propertyName, Object propertyValue )
+ {
+ // nothing to do
+ }
+
+ public void afterConfigurationChange( Registry registry, String propertyName, Object propertyValue )
+ {
+ if ( "dataRefreshCronExpression".equals( propertyName ) )
+ {
+ getLogger().debug( "Restarting task scheduler with new configuration after property change: " +
+ propertyName + " to " + propertyValue );
+ try
+ {
+ stop();
+ }
+ catch ( StoppingException e )
+ {
+ getLogger().warn( "Error stopping task scheduler: " + e.getMessage(), e );
+ }
+
+ try
+ {
+ Configuration configuration = archivaConfiguration.getConfiguration();
+ scheduleJobs( configuration.getDataRefreshCronExpression() );
+ }
+ catch ( ParseException e )
+ {
+ getLogger().error(
+ "Error restarting task scheduler after configuration change, due to configuration error: " +
+ e.getMessage(), e );
+ }
+ catch ( SchedulerException e )
+ {
+ getLogger().error( "Error restarting task scheduler after configuration change: " + e.getMessage(), e );
+ }
+ }
+ else
+ {
+ getLogger().debug(
+ "Not restarting task scheduler with new configuration after property change: " + propertyName );
+ }
+ }
+
+ public void runDataRefresh()
+ throws TaskExecutionException
+ {
+ DataRefreshTask task = new DataRefreshTask();
+ task.setJobName( "DATA_REFRESH_INIT" );
+ try
+ {
+ datarefreshQueue.put( task );
+ }
+ catch ( TaskQueueException e )
+ {
+ throw new TaskExecutionException( e.getMessage(), e );
+ }
+ }
+
+ public void queueNowIfNeeded()
+ throws TaskExecutionException
+ {
+ if ( activeRepositories.needsDataRefresh() )
+ {
+ runDataRefresh();
+ }
+ }
+
+}
diff --git a/archiva-base/archiva-scheduled/src/main/java/org/apache/maven/archiva/scheduled/RepositoryTaskJob.java b/archiva-base/archiva-scheduled/src/main/java/org/apache/maven/archiva/scheduled/RepositoryTaskJob.java
new file mode 100644
index 000000000..113d693ab
--- /dev/null
+++ b/archiva-base/archiva-scheduled/src/main/java/org/apache/maven/archiva/scheduled/RepositoryTaskJob.java
@@ -0,0 +1,85 @@
+package org.apache.maven.archiva.scheduled;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.archiva.scheduled.tasks.DataRefreshTask;
+import org.apache.maven.archiva.scheduled.tasks.RepositoryTask;
+import org.codehaus.plexus.scheduler.AbstractJob;
+import org.codehaus.plexus.taskqueue.TaskQueue;
+import org.codehaus.plexus.taskqueue.TaskQueueException;
+import org.quartz.JobDataMap;
+import org.quartz.JobExecutionContext;
+import org.quartz.JobExecutionException;
+
+/**
+ * This class is the discoverer job that is executed by the scheduler.
+ */
+public class RepositoryTaskJob
+ extends AbstractJob
+{
+ static final String TASK_KEY = "EXECUTION";
+
+ static final String TASK_QUEUE = "TASK_QUEUE";
+
+ static final String TASK_QUEUE_POLICY = "TASK_QUEUE_POLICY";
+
+ /**
+ * Execute the discoverer and the indexer.
+ *
+ * @param context
+ * @throws org.quartz.JobExecutionException
+ *
+ */
+ public void execute( JobExecutionContext context )
+ throws JobExecutionException
+ {
+ JobDataMap dataMap = context.getJobDetail().getJobDataMap();
+ setJobDataMap( dataMap );
+
+ TaskQueue taskQueue = (TaskQueue) dataMap.get( TASK_QUEUE );
+ String queuePolicy = dataMap.get( TASK_QUEUE_POLICY ).toString();
+
+ RepositoryTask task = new DataRefreshTask();
+ task.setJobName( context.getJobDetail().getName() );
+
+ try
+ {
+ if ( taskQueue.getQueueSnapshot().size() == 0 )
+ {
+ taskQueue.put( task );
+ }
+ else
+ {
+ if ( RepositoryTask.QUEUE_POLICY_WAIT.equals( queuePolicy ) )
+ {
+ taskQueue.put( task );
+ }
+ else if ( RepositoryTask.QUEUE_POLICY_SKIP.equals( queuePolicy ) )
+ {
+ // do not queue anymore, policy is to skip
+ }
+ }
+ }
+ catch ( TaskQueueException e )
+ {
+ throw new JobExecutionException( e );
+ }
+ }
+}
diff --git a/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/record/MinimalIndexRecordFields.java b/archiva-base/archiva-scheduled/src/main/java/org/apache/maven/archiva/scheduled/RepositoryTaskScheduler.java
index ae3104c57..db0f47ab6 100644
--- a/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/record/MinimalIndexRecordFields.java
+++ b/archiva-base/archiva-scheduled/src/main/java/org/apache/maven/archiva/scheduled/RepositoryTaskScheduler.java
@@ -1,4 +1,4 @@
-package org.apache.maven.archiva.indexer.record;
+package org.apache.maven.archiva.scheduled;
/*
* Licensed to the Apache Software Foundation (ASF) under one
@@ -19,26 +19,21 @@ package org.apache.maven.archiva.indexer.record;
* under the License.
*/
+import org.codehaus.plexus.taskqueue.execution.TaskExecutionException;
+
/**
- * The fields in a minimal artifact index record.
+ * The component that takes care of scheduling in the application.
*
* @author <a href="mailto:brett@apache.org">Brett Porter</a>
- * @todo should be an enum
*/
-public class MinimalIndexRecordFields
+public interface RepositoryTaskScheduler
{
- public static final String FILENAME = "j";
-
- public static final String LAST_MODIFIED = "d";
-
- public static final String FILE_SIZE = "s";
-
- public static final String MD5 = "m";
+ /**
+ * The Plexus component role.
+ */
+ String ROLE = RepositoryTaskScheduler.class.getName();
- public static final String CLASSES = "c";
+ void runDataRefresh()
+ throws TaskExecutionException;
- private MinimalIndexRecordFields()
- {
- // No touchy!
- }
-}
+}
diff --git a/archiva-base/archiva-scheduled/src/main/java/org/apache/maven/archiva/scheduled/executors/DataRefreshConsumers.java b/archiva-base/archiva-scheduled/src/main/java/org/apache/maven/archiva/scheduled/executors/DataRefreshConsumers.java
new file mode 100644
index 000000000..643f85028
--- /dev/null
+++ b/archiva-base/archiva-scheduled/src/main/java/org/apache/maven/archiva/scheduled/executors/DataRefreshConsumers.java
@@ -0,0 +1,61 @@
+package org.apache.maven.archiva.scheduled.executors;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+/**
+ * Mutable list of consumer for the Data Refresh.
+ *
+ * NOTE: This class only exists to minimize the requirements of manual component management.
+ * This approach allows for a small and simple component definition in the application.xml
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ *
+ * @plexus.component role="org.apache.maven.archiva.scheduler.executors.DataRefreshConsumers"
+ */
+public class DataRefreshConsumers
+{
+ /**
+ * @plexus.configuration
+ */
+ private List consumerNames;
+
+ public List getConsumerNames()
+ {
+ if ( consumerNames == null )
+ {
+ consumerNames = new ArrayList();
+ consumerNames.add( "index-artifact" );
+ consumerNames.add( "artifact-health" );
+ consumerNames.add( "metadata-health" );
+ }
+
+ return consumerNames;
+ }
+
+ public Iterator iterator()
+ {
+ return getConsumerNames().iterator();
+ }
+}
diff --git a/archiva-base/archiva-scheduled/src/main/java/org/apache/maven/archiva/scheduled/executors/DataRefreshExecutor.java b/archiva-base/archiva-scheduled/src/main/java/org/apache/maven/archiva/scheduled/executors/DataRefreshExecutor.java
new file mode 100644
index 000000000..23a665837
--- /dev/null
+++ b/archiva-base/archiva-scheduled/src/main/java/org/apache/maven/archiva/scheduled/executors/DataRefreshExecutor.java
@@ -0,0 +1,191 @@
+package org.apache.maven.archiva.scheduled.executors;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.maven.archiva.configuration.ArchivaConfiguration;
+import org.apache.maven.archiva.configuration.Configuration;
+import org.apache.maven.archiva.configuration.ConfiguredRepositoryFactory;
+import org.apache.maven.archiva.configuration.RepositoryConfiguration;
+import org.apache.maven.archiva.discoverer.Discoverer;
+import org.apache.maven.archiva.discoverer.DiscovererException;
+import org.apache.maven.archiva.discoverer.DiscovererStatistics;
+import org.apache.maven.archiva.repository.consumer.Consumer;
+import org.apache.maven.archiva.repository.consumer.ConsumerException;
+import org.apache.maven.archiva.repository.consumer.ConsumerFactory;
+import org.apache.maven.archiva.scheduler.task.DataRefreshTask;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.codehaus.plexus.logging.AbstractLogEnabled;
+import org.codehaus.plexus.taskqueue.Task;
+import org.codehaus.plexus.taskqueue.execution.TaskExecutionException;
+import org.codehaus.plexus.taskqueue.execution.TaskExecutor;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+/**
+ * DataRefreshExecutor
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ *
+ * @plexus.component role="org.codehaus.plexus.taskqueue.execution.TaskExecutor"
+ * role-hint="data-refresh"
+ */
+public class DataRefreshExecutor
+ extends AbstractLogEnabled
+ implements TaskExecutor
+{
+ public static final String DATAREFRESH_FILE = ".datarefresh";
+
+ /**
+ * Configuration store.
+ *
+ * @plexus.requirement
+ */
+ private ArchivaConfiguration archivaConfiguration;
+
+ /**
+ * @plexus.requirement
+ */
+ private ConfiguredRepositoryFactory repoFactory;
+
+ /**
+ * @plexus.requirement
+ */
+ private DataRefreshConsumers consumerNames;
+
+ public void executeTask( Task task )
+ throws TaskExecutionException
+ {
+ DataRefreshTask indexerTask = (DataRefreshTask) task;
+
+ getLogger().info( "Executing task from queue with job name: " + indexerTask.getJobName() );
+
+ execute();
+ }
+
+ public void execute()
+ throws TaskExecutionException
+ {
+ Configuration configuration = archivaConfiguration.getConfiguration();
+
+ List consumers = new ArrayList();
+
+ for ( Iterator it = consumerNames.iterator(); it.hasNext(); )
+ {
+ String name = (String) it.next();
+ try
+ {
+ Consumer consumer = consumerFactory.createConsumer( name );
+ consumers.add( consumer );
+ }
+ catch ( ConsumerException e )
+ {
+ getLogger().warn( e.getMessage(), e );
+ throw new TaskExecutionException( e.getMessage(), e );
+ }
+ }
+
+ long time = System.currentTimeMillis();
+
+ for ( Iterator i = configuration.getRepositories().iterator(); i.hasNext(); )
+ {
+ RepositoryConfiguration repositoryConfiguration = (RepositoryConfiguration) i.next();
+
+ if ( !repositoryConfiguration.isIndexed() )
+ {
+ continue;
+ }
+
+ ArtifactRepository repository = repoFactory.createRepository( repositoryConfiguration );
+
+ List filteredConsumers = filterConsumers( consumers, repository );
+
+ DiscovererStatistics lastRunStats = new DiscovererStatistics( repository );
+ try
+ {
+ lastRunStats.load( DATAREFRESH_FILE );
+ }
+ catch ( IOException e )
+ {
+ getLogger().info(
+ "Unable to load last run statistics for repository [" + repository.getId() + "]: "
+ + e.getMessage() );
+ }
+
+ try
+ {
+ DiscovererStatistics stats = discoverer
+ .walkRepository( repository, filteredConsumers, repositoryConfiguration.isIncludeSnapshots(),
+ lastRunStats.getTimestampFinished(), null, null );
+
+ stats.dump( getLogger() );
+ stats.save( DATAREFRESH_FILE );
+ }
+ catch ( DiscovererException e )
+ {
+ getLogger().error(
+ "Unable to run data refresh against repository [" + repository.getId() + "]: "
+ + e.getMessage(), e );
+ }
+ catch ( IOException e )
+ {
+ getLogger().warn(
+ "Unable to save last run statistics for repository [" + repository.getId() + "]: "
+ + e.getMessage() );
+ }
+ }
+
+ time = System.currentTimeMillis() - time;
+
+ getLogger().info( "Finished data refresh process in " + time + "ms." );
+ }
+
+ /**
+ * Not all consumers work with all repositories.
+ * This will filter out those incompatible consumers based on the provided repository.
+ *
+ * @param consumers the initial list of consumers.
+ * @param repository the repository to test consumer against.
+ * @return the filtered list of consumers.
+ */
+ private List filterConsumers( List consumers, ArtifactRepository repository )
+ {
+ List filtered = new ArrayList();
+
+ for ( Iterator it = consumers.iterator(); it.hasNext(); )
+ {
+ Consumer consumer = (Consumer) it.next();
+ if ( consumer.init( repository ) )
+ {
+ // Approved!
+ filtered.add( consumer );
+ }
+ else
+ {
+ getLogger().info( "Disabling consumer [" + consumer.getName() + "] for repository " + repository );
+ }
+ }
+
+ return filtered;
+ }
+}
diff --git a/archiva-base/archiva-scheduled/src/main/java/org/apache/maven/archiva/scheduled/tasks/DataRefreshTask.java b/archiva-base/archiva-scheduled/src/main/java/org/apache/maven/archiva/scheduled/tasks/DataRefreshTask.java
new file mode 100644
index 000000000..dbb7f12dc
--- /dev/null
+++ b/archiva-base/archiva-scheduled/src/main/java/org/apache/maven/archiva/scheduled/tasks/DataRefreshTask.java
@@ -0,0 +1,41 @@
+package org.apache.maven.archiva.scheduled.tasks;
+
+/**
+ * DataRefreshTask - task for discovering changes in the repository
+ * and updating all associated data.
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class DataRefreshTask
+ implements RepositoryTask
+{
+ private String jobName;
+
+ private String policy;
+
+ public String getJobName()
+ {
+ return jobName;
+ }
+
+ public String getQueuePolicy()
+ {
+ return policy;
+ }
+
+ public void setJobName( String jobName )
+ {
+ this.jobName = jobName;
+ }
+
+ public void setQueuePolicy( String policy )
+ {
+ this.policy = policy;
+ }
+
+ public long getMaxExecutionTime()
+ {
+ return 0;
+ }
+}
diff --git a/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/RepositoryArtifactIndexFactory.java b/archiva-base/archiva-scheduled/src/main/java/org/apache/maven/archiva/scheduled/tasks/RepositoryTask.java
index e57604104..39738dfa0 100644
--- a/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/RepositoryArtifactIndexFactory.java
+++ b/archiva-base/archiva-scheduled/src/main/java/org/apache/maven/archiva/scheduled/tasks/RepositoryTask.java
@@ -1,4 +1,4 @@
-package org.apache.maven.archiva.indexer;
+package org.apache.maven.archiva.scheduled.tasks;
/*
* Licensed to the Apache Software Foundation (ASF) under one
@@ -19,33 +19,39 @@ package org.apache.maven.archiva.indexer;
* under the License.
*/
-import java.io.File;
+import org.codehaus.plexus.taskqueue.Task;
/**
- * Obtain an index instance.
+ * A repository task.
*
* @author <a href="mailto:brett@apache.org">Brett Porter</a>
*/
-public interface RepositoryArtifactIndexFactory
+public interface RepositoryTask
+ extends Task
{
+ String QUEUE_POLICY_WAIT = "wait";
+
+ String QUEUE_POLICY_SKIP = "skip";
+
/**
- * Plexus role.
+ * Gets the queue policy for this task.
+ *
+ * @return Queue policy for this task
*/
- String ROLE = RepositoryArtifactIndexFactory.class.getName();
+ String getQueuePolicy();
/**
- * Method to create an instance of the standard index.
+ * Sets the queue policy for this task.
*
- * @param indexPath the path where the index will be created/updated
- * @return the index instance
+ * @param policy
*/
- RepositoryArtifactIndex createStandardIndex( File indexPath );
+ void setQueuePolicy( String policy );
/**
- * Method to create an instance of the minimal index.
- *
- * @param indexPath the path where the index will be created/updated
- * @return the index instance
+ * Sets the job name to represent a group of similar / identical job tasks. Can be used to check the
+ * task queue for similar / identical job tasks.
*/
- RepositoryArtifactIndex createMinimalIndex( File indexPath );
+ void setJobName( String jobName );
+
+ String getJobName();
}
diff --git a/archiva-base/archiva-scheduled/src/test/java/org/apache/maven/archiva/scheduled/executors/DataRefreshExecutorTest.java b/archiva-base/archiva-scheduled/src/test/java/org/apache/maven/archiva/scheduled/executors/DataRefreshExecutorTest.java
new file mode 100644
index 000000000..486479bf9
--- /dev/null
+++ b/archiva-base/archiva-scheduled/src/test/java/org/apache/maven/archiva/scheduled/executors/DataRefreshExecutorTest.java
@@ -0,0 +1,75 @@
+package org.apache.maven.archiva.scheduled.executors;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.io.FileUtils;
+import org.apache.maven.archiva.configuration.ArchivaConfiguration;
+import org.apache.maven.archiva.configuration.Configuration;
+import org.apache.maven.archiva.scheduled.tasks.DataRefreshTask;
+import org.codehaus.plexus.PlexusTestCase;
+import org.codehaus.plexus.taskqueue.execution.TaskExecutionException;
+import org.codehaus.plexus.taskqueue.execution.TaskExecutor;
+
+import java.io.File;
+
+/**
+ * IndexerTaskExecutorTest
+ *
+ * @author <a href="mailto:joakime@apache.org">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class DataRefreshExecutorTest
+ extends PlexusTestCase
+{
+ private TaskExecutor taskExecutor;
+
+ protected void setUp()
+ throws Exception
+ {
+ super.setUp();
+
+ taskExecutor = (TaskExecutor) lookup( "org.codehaus.plexus.taskqueue.execution.TaskExecutor", "data-refresh" );
+
+ ArchivaConfiguration archivaConfiguration =
+ (ArchivaConfiguration) lookup( ArchivaConfiguration.class.getName() );
+ Configuration configuration = archivaConfiguration.getConfiguration();
+
+ File indexPath = new File( configuration.getIndexPath() );
+ if ( indexPath.exists() )
+ {
+ FileUtils.deleteDirectory( indexPath );
+ }
+ }
+
+ public void testExecutor()
+ throws TaskExecutionException
+ {
+ taskExecutor.executeTask( new TestDataRefreshTask() );
+ }
+
+ class TestDataRefreshTask
+ extends DataRefreshTask
+ {
+ public String getJobName()
+ {
+ return "TestDataRefresh";
+ }
+ }
+}
diff --git a/archiva-base/archiva-xml-tools/pom.xml b/archiva-base/archiva-xml-tools/pom.xml
new file mode 100644
index 000000000..efa42d3f0
--- /dev/null
+++ b/archiva-base/archiva-xml-tools/pom.xml
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ Licensed to the Apache Software Foundation (ASF) under one
+ ~ or more contributor license agreements. See the NOTICE file
+ ~ distributed with this work for additional information
+ ~ regarding copyright ownership. The ASF licenses this file
+ ~ to you under the Apache License, Version 2.0 (the
+ ~ "License"); you may not use this file except in compliance
+ ~ with the License. You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing,
+ ~ software distributed under the License is distributed on an
+ ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ ~ KIND, either express or implied. See the License for the
+ ~ specific language governing permissions and limitations
+ ~ under the License.
+ -->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <parent>
+ <groupId>org.apache.maven.archiva</groupId>
+ <artifactId>archiva-base</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+ <artifactId>archiva-xml-tools</artifactId>
+ <name>Archiva Base :: XML Tools</name>
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.maven.archiva</groupId>
+ <artifactId>archiva-common</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>dom4j</groupId>
+ <artifactId>dom4j</artifactId>
+ <version>1.6.1</version>
+ </dependency>
+ <dependency>
+ <groupId>jaxen</groupId>
+ <artifactId>jaxen</artifactId>
+ <version>1.1</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-utils</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-log4j12</artifactId>
+ </dependency>
+ </dependencies>
+ <!--
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-maven-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>merge</id>
+ <goals>
+ <goal>merge-descriptors</goal>
+ </goals>
+ <configuration>
+ <descriptors>
+ <descriptor>${basedir}/src/main/resources/META-INF/plexus/components.xml</descriptor>
+ <descriptor>${project.build.directory}/generated-resources/plexus/META-INF/plexus/components.xml</descriptor>
+ </descriptors>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+ -->
+</project>
diff --git a/archiva-base/archiva-xml-tools/src/main/java/org/apache/maven/archiva/xml/LatinEntities.java b/archiva-base/archiva-xml-tools/src/main/java/org/apache/maven/archiva/xml/LatinEntities.java
new file mode 100644
index 000000000..9db17993c
--- /dev/null
+++ b/archiva-base/archiva-xml-tools/src/main/java/org/apache/maven/archiva/xml/LatinEntities.java
@@ -0,0 +1,309 @@
+package org.apache.maven.archiva.xml;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * LatinEntities - simple utility class to handle latin entity conversion.
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class LatinEntities
+{
+ private static final Map defaultEntityMap;
+
+ static
+ {
+ defaultEntityMap = new HashMap();
+
+ defaultEntityMap.put( "nbsp", "\u00a0" );
+ defaultEntityMap.put( "iexcl", "\u00a1" );
+ defaultEntityMap.put( "cent", "\u00a2" );
+ defaultEntityMap.put( "pound", "\u00a3" );
+ defaultEntityMap.put( "curren", "\u00a4" );
+ defaultEntityMap.put( "yen", "\u00a5" );
+ defaultEntityMap.put( "brvbar", "\u00a6" );
+ defaultEntityMap.put( "sect", "\u00a7" );
+ defaultEntityMap.put( "uml", "\u00a8" );
+ defaultEntityMap.put( "copy", "\u00a9" );
+ defaultEntityMap.put( "ordf", "\u00aa" );
+ defaultEntityMap.put( "laquo", "\u00ab" );
+ defaultEntityMap.put( "not", "\u00ac" );
+ defaultEntityMap.put( "shy", "\u00ad" );
+ defaultEntityMap.put( "reg", "\u00ae" );
+ defaultEntityMap.put( "macr", "\u00af" );
+ defaultEntityMap.put( "deg", "\u00b0" );
+ defaultEntityMap.put( "plusmn", "\u00b1" );
+ defaultEntityMap.put( "sup2", "\u00b2" );
+ defaultEntityMap.put( "sup3", "\u00b3" );
+ defaultEntityMap.put( "acute", "\u00b4" );
+ defaultEntityMap.put( "micro", "\u00b5" );
+ defaultEntityMap.put( "para", "\u00b6" );
+ defaultEntityMap.put( "middot", "\u00b7" );
+ defaultEntityMap.put( "cedil", "\u00b8" );
+ defaultEntityMap.put( "sup1", "\u00b9" );
+ defaultEntityMap.put( "ordm", "\u00ba" );
+ defaultEntityMap.put( "raquo", "\u00bb" );
+ defaultEntityMap.put( "frac14", "\u00bc" );
+ defaultEntityMap.put( "frac12", "\u00bd" );
+ defaultEntityMap.put( "frac34", "\u00be" );
+ defaultEntityMap.put( "iquest", "\u00bf" );
+ defaultEntityMap.put( "Agrave", "\u00c0" );
+ defaultEntityMap.put( "Aacute", "\u00c1" );
+ defaultEntityMap.put( "Acirc", "\u00c2" );
+ defaultEntityMap.put( "Atilde", "\u00c3" );
+ defaultEntityMap.put( "Auml", "\u00c4" );
+ defaultEntityMap.put( "Aring", "\u00c5" );
+ defaultEntityMap.put( "AElig", "\u00c6" );
+ defaultEntityMap.put( "Ccedil", "\u00c7" );
+ defaultEntityMap.put( "Egrave", "\u00c8" );
+ defaultEntityMap.put( "Eacute", "\u00c9" );
+ defaultEntityMap.put( "Ecirc", "\u00ca" );
+ defaultEntityMap.put( "Euml", "\u00cb" );
+ defaultEntityMap.put( "Igrave", "\u00cc" );
+ defaultEntityMap.put( "Iacute", "\u00cd" );
+ defaultEntityMap.put( "Icirc", "\u00ce" );
+ defaultEntityMap.put( "Iuml", "\u00cf" );
+ defaultEntityMap.put( "ETH", "\u00d0" );
+ defaultEntityMap.put( "Ntilde", "\u00d1" );
+ defaultEntityMap.put( "Ograve", "\u00d2" );
+ defaultEntityMap.put( "Oacute", "\u00d3" );
+ defaultEntityMap.put( "Ocirc", "\u00d4" );
+ defaultEntityMap.put( "Otilde", "\u00d5" );
+ defaultEntityMap.put( "Ouml", "\u00d6" );
+ defaultEntityMap.put( "times", "\u00d7" );
+ defaultEntityMap.put( "Oslash", "\u00d8" );
+ defaultEntityMap.put( "Ugrave", "\u00d9" );
+ defaultEntityMap.put( "Uacute", "\u00da" );
+ defaultEntityMap.put( "Ucirc", "\u00db" );
+ defaultEntityMap.put( "Uuml", "\u00dc" );
+ defaultEntityMap.put( "Yacute", "\u00dd" );
+ defaultEntityMap.put( "THORN", "\u00de" );
+ defaultEntityMap.put( "szlig", "\u00df" );
+ defaultEntityMap.put( "agrave", "\u00e0" );
+ defaultEntityMap.put( "aacute", "\u00e1" );
+ defaultEntityMap.put( "acirc", "\u00e2" );
+ defaultEntityMap.put( "atilde", "\u00e3" );
+ defaultEntityMap.put( "auml", "\u00e4" );
+ defaultEntityMap.put( "aring", "\u00e5" );
+ defaultEntityMap.put( "aelig", "\u00e6" );
+ defaultEntityMap.put( "ccedil", "\u00e7" );
+ defaultEntityMap.put( "egrave", "\u00e8" );
+ defaultEntityMap.put( "eacute", "\u00e9" );
+ defaultEntityMap.put( "ecirc", "\u00ea" );
+ defaultEntityMap.put( "euml", "\u00eb" );
+ defaultEntityMap.put( "igrave", "\u00ec" );
+ defaultEntityMap.put( "iacute", "\u00ed" );
+ defaultEntityMap.put( "icirc", "\u00ee" );
+ defaultEntityMap.put( "iuml", "\u00ef" );
+ defaultEntityMap.put( "eth", "\u00f0" );
+ defaultEntityMap.put( "ntilde", "\u00f1" );
+ defaultEntityMap.put( "ograve", "\u00f2" );
+ defaultEntityMap.put( "oacute", "\u00f3" );
+ defaultEntityMap.put( "ocirc", "\u00f4" );
+ defaultEntityMap.put( "otilde", "\u00f5" );
+ defaultEntityMap.put( "ouml", "\u00f6" );
+ defaultEntityMap.put( "divide", "\u00f7" );
+ defaultEntityMap.put( "oslash", "\u00f8" );
+ defaultEntityMap.put( "ugrave", "\u00f9" );
+ defaultEntityMap.put( "uacute", "\u00fa" );
+ defaultEntityMap.put( "ucirc", "\u00fb" );
+ defaultEntityMap.put( "uuml", "\u00fc" );
+ defaultEntityMap.put( "yacute", "\u00fd" );
+ defaultEntityMap.put( "thorn", "\u00fe" );
+ defaultEntityMap.put( "yuml", "\u00ff" );
+
+ // ----------------------------------------------------------------------
+ // Special entities
+ // ----------------------------------------------------------------------
+
+ defaultEntityMap.put( "OElig", "\u0152" );
+ defaultEntityMap.put( "oelig", "\u0153" );
+ defaultEntityMap.put( "Scaron", "\u0160" );
+ defaultEntityMap.put( "scaron", "\u0161" );
+ defaultEntityMap.put( "Yuml", "\u0178" );
+ defaultEntityMap.put( "circ", "\u02c6" );
+ defaultEntityMap.put( "tilde", "\u02dc" );
+ defaultEntityMap.put( "ensp", "\u2002" );
+ defaultEntityMap.put( "emsp", "\u2003" );
+ defaultEntityMap.put( "thinsp", "\u2009" );
+ defaultEntityMap.put( "zwnj", "\u200c" );
+ defaultEntityMap.put( "zwj", "\u200d" );
+ defaultEntityMap.put( "lrm", "\u200e" );
+ defaultEntityMap.put( "rlm", "\u200f" );
+ defaultEntityMap.put( "ndash", "\u2013" );
+ defaultEntityMap.put( "mdash", "\u2014" );
+ defaultEntityMap.put( "lsquo", "\u2018" );
+ defaultEntityMap.put( "rsquo", "\u2019" );
+ defaultEntityMap.put( "sbquo", "\u201a" );
+ defaultEntityMap.put( "ldquo", "\u201c" );
+ defaultEntityMap.put( "rdquo", "\u201d" );
+ defaultEntityMap.put( "bdquo", "\u201e" );
+ defaultEntityMap.put( "dagger", "\u2020" );
+ defaultEntityMap.put( "Dagger", "\u2021" );
+ defaultEntityMap.put( "permil", "\u2030" );
+ defaultEntityMap.put( "lsaquo", "\u2039" );
+ defaultEntityMap.put( "rsaquo", "\u203a" );
+ defaultEntityMap.put( "euro", "\u20ac" );
+
+ // ----------------------------------------------------------------------
+ // Symbol entities
+ // ----------------------------------------------------------------------
+
+ defaultEntityMap.put( "fnof", "\u0192" );
+ defaultEntityMap.put( "Alpha", "\u0391" );
+ defaultEntityMap.put( "Beta", "\u0392" );
+ defaultEntityMap.put( "Gamma", "\u0393" );
+ defaultEntityMap.put( "Delta", "\u0394" );
+ defaultEntityMap.put( "Epsilon", "\u0395" );
+ defaultEntityMap.put( "Zeta", "\u0396" );
+ defaultEntityMap.put( "Eta", "\u0397" );
+ defaultEntityMap.put( "Theta", "\u0398" );
+ defaultEntityMap.put( "Iota", "\u0399" );
+ defaultEntityMap.put( "Kappa", "\u039a" );
+ defaultEntityMap.put( "Lambda", "\u039b" );
+ defaultEntityMap.put( "Mu", "\u039c" );
+ defaultEntityMap.put( "Nu", "\u039d" );
+ defaultEntityMap.put( "Xi", "\u039e" );
+ defaultEntityMap.put( "Omicron", "\u039f" );
+ defaultEntityMap.put( "Pi", "\u03a0" );
+ defaultEntityMap.put( "Rho", "\u03a1" );
+ defaultEntityMap.put( "Sigma", "\u03a3" );
+ defaultEntityMap.put( "Tau", "\u03a4" );
+ defaultEntityMap.put( "Upsilon", "\u03a5" );
+ defaultEntityMap.put( "Phi", "\u03a6" );
+ defaultEntityMap.put( "Chi", "\u03a7" );
+ defaultEntityMap.put( "Psi", "\u03a8" );
+ defaultEntityMap.put( "Omega", "\u03a9" );
+ defaultEntityMap.put( "alpha", "\u03b1" );
+ defaultEntityMap.put( "beta", "\u03b2" );
+ defaultEntityMap.put( "gamma", "\u03b3" );
+ defaultEntityMap.put( "delta", "\u03b4" );
+ defaultEntityMap.put( "epsilon", "\u03b5" );
+ defaultEntityMap.put( "zeta", "\u03b6" );
+ defaultEntityMap.put( "eta", "\u03b7" );
+ defaultEntityMap.put( "theta", "\u03b8" );
+ defaultEntityMap.put( "iota", "\u03b9" );
+ defaultEntityMap.put( "kappa", "\u03ba" );
+ defaultEntityMap.put( "lambda", "\u03bb" );
+ defaultEntityMap.put( "mu", "\u03bc" );
+ defaultEntityMap.put( "nu", "\u03bd" );
+ defaultEntityMap.put( "xi", "\u03be" );
+ defaultEntityMap.put( "omicron", "\u03bf" );
+ defaultEntityMap.put( "pi", "\u03c0" );
+ defaultEntityMap.put( "rho", "\u03c1" );
+ defaultEntityMap.put( "sigmaf", "\u03c2" );
+ defaultEntityMap.put( "sigma", "\u03c3" );
+ defaultEntityMap.put( "tau", "\u03c4" );
+ defaultEntityMap.put( "upsilon", "\u03c5" );
+ defaultEntityMap.put( "phi", "\u03c6" );
+ defaultEntityMap.put( "chi", "\u03c7" );
+ defaultEntityMap.put( "psi", "\u03c8" );
+ defaultEntityMap.put( "omega", "\u03c9" );
+ defaultEntityMap.put( "thetasym", "\u03d1" );
+ defaultEntityMap.put( "upsih", "\u03d2" );
+ defaultEntityMap.put( "piv", "\u03d6" );
+ defaultEntityMap.put( "bull", "\u2022" );
+ defaultEntityMap.put( "hellip", "\u2026" );
+ defaultEntityMap.put( "prime", "\u2032" );
+ defaultEntityMap.put( "Prime", "\u2033" );
+ defaultEntityMap.put( "oline", "\u203e" );
+ defaultEntityMap.put( "frasl", "\u2044" );
+ defaultEntityMap.put( "weierp", "\u2118" );
+ defaultEntityMap.put( "image", "\u2111" );
+ defaultEntityMap.put( "real", "\u211c" );
+ defaultEntityMap.put( "trade", "\u2122" );
+ defaultEntityMap.put( "alefsym", "\u2135" );
+ defaultEntityMap.put( "larr", "\u2190" );
+ defaultEntityMap.put( "uarr", "\u2191" );
+ defaultEntityMap.put( "rarr", "\u2192" );
+ defaultEntityMap.put( "darr", "\u2193" );
+ defaultEntityMap.put( "harr", "\u2194" );
+ defaultEntityMap.put( "crarr", "\u21b5" );
+ defaultEntityMap.put( "lArr", "\u21d0" );
+ defaultEntityMap.put( "uArr", "\u21d1" );
+ defaultEntityMap.put( "rArr", "\u21d2" );
+ defaultEntityMap.put( "dArr", "\u21d3" );
+ defaultEntityMap.put( "hArr", "\u21d4" );
+ defaultEntityMap.put( "forall", "\u2200" );
+ defaultEntityMap.put( "part", "\u2202" );
+ defaultEntityMap.put( "exist", "\u2203" );
+ defaultEntityMap.put( "empty", "\u2205" );
+ defaultEntityMap.put( "nabla", "\u2207" );
+ defaultEntityMap.put( "isin", "\u2208" );
+ defaultEntityMap.put( "notin", "\u2209" );
+ defaultEntityMap.put( "ni", "\u220b" );
+ defaultEntityMap.put( "prod", "\u220f" );
+ defaultEntityMap.put( "sum", "\u2211" );
+ defaultEntityMap.put( "minus", "\u2212" );
+ defaultEntityMap.put( "lowast", "\u2217" );
+ defaultEntityMap.put( "radic", "\u221a" );
+ defaultEntityMap.put( "prop", "\u221d" );
+ defaultEntityMap.put( "infin", "\u221e" );
+ defaultEntityMap.put( "ang", "\u2220" );
+ defaultEntityMap.put( "and", "\u2227" );
+ defaultEntityMap.put( "or", "\u2228" );
+ defaultEntityMap.put( "cap", "\u2229" );
+ defaultEntityMap.put( "cup", "\u222a" );
+ defaultEntityMap.put( "int", "\u222b" );
+ defaultEntityMap.put( "there4", "\u2234" );
+ defaultEntityMap.put( "sim", "\u223c" );
+ defaultEntityMap.put( "cong", "\u2245" );
+ defaultEntityMap.put( "asymp", "\u2248" );
+ defaultEntityMap.put( "ne", "\u2260" );
+ defaultEntityMap.put( "equiv", "\u2261" );
+ defaultEntityMap.put( "le", "\u2264" );
+ defaultEntityMap.put( "ge", "\u2265" );
+ defaultEntityMap.put( "sub", "\u2282" );
+ defaultEntityMap.put( "sup", "\u2283" );
+ defaultEntityMap.put( "nsub", "\u2284" );
+ defaultEntityMap.put( "sube", "\u2286" );
+ defaultEntityMap.put( "supe", "\u2287" );
+ defaultEntityMap.put( "oplus", "\u2295" );
+ defaultEntityMap.put( "otimes", "\u2297" );
+ defaultEntityMap.put( "perp", "\u22a5" );
+ defaultEntityMap.put( "sdot", "\u22c5" );
+ defaultEntityMap.put( "lceil", "\u2308" );
+ defaultEntityMap.put( "rceil", "\u2309" );
+ defaultEntityMap.put( "lfloor", "\u230a" );
+ defaultEntityMap.put( "rfloor", "\u230b" );
+ defaultEntityMap.put( "lang", "\u2329" );
+ defaultEntityMap.put( "rang", "\u232a" );
+ defaultEntityMap.put( "loz", "\u25ca" );
+ defaultEntityMap.put( "spades", "\u2660" );
+ defaultEntityMap.put( "clubs", "\u2663" );
+ defaultEntityMap.put( "hearts", "\u2665" );
+ defaultEntityMap.put( "diams", "\u2666" );
+ }
+
+ public static String resolveEntity( String entity )
+ {
+ String result = (String) defaultEntityMap.get( entity );
+ if ( result == null )
+ {
+ return entity;
+ }
+
+ return result;
+ }
+}
diff --git a/archiva-base/archiva-xml-tools/src/main/java/org/apache/maven/archiva/xml/LatinEntityResolutionReader.java b/archiva-base/archiva-xml-tools/src/main/java/org/apache/maven/archiva/xml/LatinEntityResolutionReader.java
new file mode 100644
index 000000000..e2fef0468
--- /dev/null
+++ b/archiva-base/archiva-xml-tools/src/main/java/org/apache/maven/archiva/xml/LatinEntityResolutionReader.java
@@ -0,0 +1,60 @@
+package org.apache.maven.archiva.xml;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.PushbackReader;
+import java.io.Reader;
+
+/**
+ * LatinEntityResolutionReader
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class LatinEntityResolutionReader
+ extends Reader
+{
+ private PushbackReader originalReader;
+
+ public LatinEntityResolutionReader( Reader reader )
+ {
+ this.originalReader = new PushbackReader( reader );
+ }
+
+ public int read( char[] cbuf, int off, int len )
+ throws IOException
+ {
+ char tmpbuf[] = new char[cbuf.length];
+ int count = this.originalReader.read( tmpbuf, off, len );
+
+ StringBuffer sb = new StringBuffer();
+
+
+ return count;
+ }
+
+ public void close()
+ throws IOException
+ {
+ this.originalReader.close();
+ }
+}
diff --git a/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/layer/RepositoryQueryLayerException.java b/archiva-base/archiva-xml-tools/src/main/java/org/apache/maven/archiva/xml/XMLException.java
index 08ef9d932..01a5867db 100644
--- a/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/layer/RepositoryQueryLayerException.java
+++ b/archiva-base/archiva-xml-tools/src/main/java/org/apache/maven/archiva/xml/XMLException.java
@@ -1,4 +1,4 @@
-package org.apache.maven.archiva.layer;
+package org.apache.maven.archiva.xml;
/*
* Licensed to the Apache Software Foundation (ASF) under one
@@ -9,7 +9,7 @@ package org.apache.maven.archiva.layer;
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
- * http://www.apache.org/licenses/LICENSE-2.0
+ * http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
@@ -19,18 +19,22 @@ package org.apache.maven.archiva.layer;
* under the License.
*/
+import org.apache.maven.archiva.common.ArchivaException;
+
/**
+ * XMLException
*
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
*/
-public class RepositoryQueryLayerException
- extends Exception
+public class XMLException extends ArchivaException
{
- public RepositoryQueryLayerException( String message, Throwable cause )
+ public XMLException( String message, Throwable cause )
{
super( message, cause );
}
- public RepositoryQueryLayerException( String message )
+ public XMLException( String message )
{
super( message );
}
diff --git a/archiva-base/archiva-xml-tools/src/main/java/org/apache/maven/archiva/xml/XMLReader.java b/archiva-base/archiva-xml-tools/src/main/java/org/apache/maven/archiva/xml/XMLReader.java
new file mode 100644
index 000000000..e06f872c7
--- /dev/null
+++ b/archiva-base/archiva-xml-tools/src/main/java/org/apache/maven/archiva/xml/XMLReader.java
@@ -0,0 +1,262 @@
+package org.apache.maven.archiva.xml;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.apache.commons.lang.StringUtils;
+import org.dom4j.Document;
+import org.dom4j.DocumentException;
+import org.dom4j.Element;
+import org.dom4j.Node;
+import org.dom4j.XPath;
+import org.dom4j.io.SAXReader;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+/**
+ * XMLReader - a set of common xml utility methods for reading content out of an xml file.
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class XMLReader
+{
+ private URL xmlUrl;
+
+ private String documentType;
+
+ private Document document;
+
+ public XMLReader( String type, File file )
+ throws XMLException
+ {
+ if ( !file.exists() )
+ {
+ throw new XMLException( "file does not exist: " + file.getAbsolutePath() );
+ }
+
+ if ( !file.isFile() )
+ {
+ throw new XMLException( "path is not a file: " + file.getAbsolutePath() );
+ }
+
+ if ( !file.canRead() )
+ {
+ throw new XMLException( "Cannot read xml file due to permissions: " + file.getAbsolutePath() );
+ }
+
+ try
+ {
+ init( type, file.toURL() );
+ }
+ catch ( MalformedURLException e )
+ {
+ throw new XMLException( "Unable to translate file " + file + " to URL: " + e.getMessage(), e );
+ }
+ }
+
+ public XMLReader( String type, URL url )
+ throws XMLException
+ {
+ init( type, url );
+ }
+
+ private void init( String type, URL url )
+ throws XMLException
+ {
+ this.documentType = type;
+ this.xmlUrl = url;
+
+ SAXReader reader = new SAXReader();
+ try
+ {
+ InputStream in = url.openStream();
+ InputStreamReader inReader = new InputStreamReader( in );
+ LatinEntityResolutionReader latinReader = new LatinEntityResolutionReader( inReader );
+ this.document = reader.read( latinReader );
+ }
+ catch ( DocumentException e )
+ {
+ throw new XMLException( "Unable to parse " + documentType + " xml " + xmlUrl + ": " + e.getMessage(), e );
+ }
+ catch ( IOException e )
+ {
+ throw new XMLException( "Unable to open stream to " + url + ": " + e.getMessage(), e );
+ }
+
+ Element root = this.document.getRootElement();
+ if ( root == null )
+ {
+ throw new XMLException( "Invalid " + documentType + " xml: root element is null." );
+ }
+
+ if ( !StringUtils.equals( root.getName(), documentType ) )
+ {
+ throw new XMLException( "Invalid " + documentType + " xml: Unexpected root element <" + root.getName()
+ + ">, expected <" + documentType + ">" );
+ }
+ }
+
+ public Element getElement( String xpathExpr )
+ throws XMLException
+ {
+ XPath xpath = document.createXPath( xpathExpr );
+ Object evaluated = xpath.selectSingleNode( document );
+
+ if ( evaluated == null )
+ {
+ return null;
+ }
+
+ if ( evaluated instanceof Element )
+ {
+ Element evalElem = (Element) evaluated;
+ return evalElem;
+ }
+ else
+ {
+ // Unknown evaluated type.
+ throw new XMLException( ".getElement( Expr: " + xpathExpr + " ) resulted in non-Element type -> ("
+ + evaluated.getClass().getName() + ") " + evaluated );
+ }
+ }
+
+ public boolean hasElement( String xpathExpr )
+ throws XMLException
+ {
+ XPath xpath = document.createXPath( xpathExpr );
+ Object evaluated = xpath.selectSingleNode( document );
+
+ if ( evaluated == null )
+ {
+ return false;
+ }
+
+ return true;
+ }
+
+ public String getElementText( Node context, String xpathExpr )
+ throws XMLException
+ {
+ XPath xpath = document.createXPath( xpathExpr );
+ Object evaluated = xpath.selectSingleNode( context );
+
+ if ( evaluated == null )
+ {
+ return null;
+ }
+
+ if ( evaluated instanceof Element )
+ {
+ Element evalElem = (Element) evaluated;
+ return evalElem.getTextTrim();
+ }
+ else
+ {
+ // Unknown evaluated type.
+ throw new XMLException( ".getElementText( Node, Expr: " + xpathExpr
+ + " ) resulted in non-Element type -> (" + evaluated.getClass().getName() + ") " + evaluated );
+ }
+ }
+
+ public String getElementText( String xpathExpr )
+ throws XMLException
+ {
+ XPath xpath = document.createXPath( xpathExpr );
+ Object evaluated = xpath.selectSingleNode( document );
+
+ if ( evaluated == null )
+ {
+ return null;
+ }
+
+ if ( evaluated instanceof Element )
+ {
+ Element evalElem = (Element) evaluated;
+ return evalElem.getTextTrim();
+ }
+ else
+ {
+ // Unknown evaluated type.
+ throw new XMLException( ".getElementText( Expr: " + xpathExpr + " ) resulted in non-Element type -> ("
+ + evaluated.getClass().getName() + ") " + evaluated );
+ }
+ }
+
+ public List getElementList( String xpathExpr )
+ throws XMLException
+ {
+ XPath xpath = document.createXPath( xpathExpr );
+ Object evaluated = xpath.evaluate( document );
+
+ if ( evaluated == null )
+ {
+ return null;
+ }
+
+ /* The xpath.evaluate(Context) method can return:
+ * 1) A Collection or List of dom4j Nodes.
+ * 2) A single dom4j Node.
+ */
+
+ if ( evaluated instanceof List )
+ {
+ return (List) evaluated;
+ }
+ else if ( evaluated instanceof Node )
+ {
+ List ret = new ArrayList();
+ ret.add( (Node) evaluated );
+ return ret;
+ }
+ else
+ {
+ // Unknown evaluated type.
+ throw new XMLException( ".getElementList( Expr: " + xpathExpr + " ) resulted in non-List type -> ("
+ + evaluated.getClass().getName() + ") " + evaluated );
+ }
+ }
+
+ public List getElementListText( String xpathExpr )
+ throws XMLException
+ {
+ List elemList = getElementList( xpathExpr );
+ if ( elemList == null )
+ {
+ return null;
+ }
+
+ List ret = new ArrayList();
+ for ( Iterator iter = elemList.iterator(); iter.hasNext(); )
+ {
+ Element listelem = (Element) iter.next();
+ ret.add( listelem.getTextTrim() );
+ }
+ return ret;
+ }
+
+}
diff --git a/archiva-base/archiva-xml-tools/src/test/examples/no-prolog-basic.xml b/archiva-base/archiva-xml-tools/src/test/examples/no-prolog-basic.xml
new file mode 100644
index 000000000..8f5e76887
--- /dev/null
+++ b/archiva-base/archiva-xml-tools/src/test/examples/no-prolog-basic.xml
@@ -0,0 +1,14 @@
+<basic>
+ <fruits>
+ <fruit>
+ apple
+ </fruit>
+ <fruit><![CDATA[
+ cherry
+ ]]></fruit>
+ <fruit>
+ <![CDATA[pear]]>
+ </fruit>
+ <fruit>peach</fruit>
+ </fruits>
+</basic> \ No newline at end of file
diff --git a/archiva-base/archiva-xml-tools/src/test/examples/no-prolog-with-entities.xml b/archiva-base/archiva-xml-tools/src/test/examples/no-prolog-with-entities.xml
new file mode 100644
index 000000000..1c80613bf
--- /dev/null
+++ b/archiva-base/archiva-xml-tools/src/test/examples/no-prolog-with-entities.xml
@@ -0,0 +1,6 @@
+<basic>
+ <names>
+ <name>Trygve Laugst&oslash;l</name>
+ <name>The &infin; Archiva</name>
+ </names>
+</basic> \ No newline at end of file
diff --git a/archiva-base/archiva-xml-tools/src/test/examples/no-prolog-with-utf8.xml b/archiva-base/archiva-xml-tools/src/test/examples/no-prolog-with-utf8.xml
new file mode 100644
index 000000000..c6fd4015b
--- /dev/null
+++ b/archiva-base/archiva-xml-tools/src/test/examples/no-prolog-with-utf8.xml
@@ -0,0 +1,6 @@
+<basic>
+ <names>
+ <name>Trygve Laugstøl</name>
+ <name>The ∞ Archiva</name>
+ </names>
+</basic> \ No newline at end of file
diff --git a/archiva-base/archiva-xml-tools/src/test/examples/prolog-with-utf8.xml b/archiva-base/archiva-xml-tools/src/test/examples/prolog-with-utf8.xml
new file mode 100644
index 000000000..c1aa8f454
--- /dev/null
+++ b/archiva-base/archiva-xml-tools/src/test/examples/prolog-with-utf8.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<basic>
+ <names>
+ <name>Trygve Laugstøl</name>
+ <name>The ∞ Archiva</name>
+ </names>
+</basic> \ No newline at end of file
diff --git a/archiva-base/archiva-xml-tools/src/test/java/org/apache/maven/archiva/xml/XMLReaderTest.java b/archiva-base/archiva-xml-tools/src/test/java/org/apache/maven/archiva/xml/XMLReaderTest.java
new file mode 100644
index 000000000..44f73e4e9
--- /dev/null
+++ b/archiva-base/archiva-xml-tools/src/test/java/org/apache/maven/archiva/xml/XMLReaderTest.java
@@ -0,0 +1,113 @@
+package org.apache.maven.archiva.xml;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.dom4j.Element;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import junit.framework.TestCase;
+
+/**
+ * XMLReaderTest
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class XMLReaderTest
+ extends TestCase
+{
+ private File getExampleXml( String filename )
+ {
+ File examplesDir = new File( "src/test/examples" );
+ if ( !examplesDir.exists() )
+ {
+ fail( "Missing the examples directory: " + examplesDir.getAbsolutePath() );
+ }
+ File exampleFile = new File( examplesDir, filename );
+ if ( !exampleFile.exists() )
+ {
+ fail( "Missing the example xml file: " + exampleFile.getAbsolutePath() );
+ }
+ return exampleFile;
+ }
+
+ private void assertElementTexts( List elementList, String[] expectedTexts )
+ {
+ assertEquals( "Element List Size", expectedTexts.length, elementList.size() );
+
+ List texts = new ArrayList();
+ for ( Iterator iter = elementList.iterator(); iter.hasNext(); )
+ {
+ Element element = (Element) iter.next();
+ texts.add( element.getTextTrim() );
+ }
+
+ for ( int i = 0; i < expectedTexts.length; i++ )
+ {
+ String expectedText = expectedTexts[i];
+ assertTrue( "Contains [" + expectedText + "]", texts.contains( expectedText ) );
+ }
+ }
+
+ public void testNoPrologBasicRead()
+ throws XMLException
+ {
+ File xmlFile = getExampleXml( "no-prolog-basic.xml" );
+ XMLReader reader = new XMLReader( "basic", xmlFile );
+
+ List fruits = reader.getElementList( "//basic/fruits/fruit" );
+ assertElementTexts( fruits, new String[] { "apple", "cherry", "pear", "peach" } );
+ }
+
+ public void testNoPrologEntitiesRead()
+ throws XMLException
+ {
+ File xmlFile = getExampleXml( "no-prolog-with-entities.xml" );
+ XMLReader reader = new XMLReader( "basic", xmlFile );
+
+ List names = reader.getElementList( "//basic/names/name" );
+ assertElementTexts( names, new String[] { "Trygve Laugstøl", "The ∞ Archiva" } );
+ }
+
+ public void testNoPrologUtf8Read()
+ throws XMLException
+ {
+ File xmlFile = getExampleXml( "no-prolog-with-utf8.xml" );
+ XMLReader reader = new XMLReader( "basic", xmlFile );
+
+ List names = reader.getElementList( "//basic/names/name" );
+ assertElementTexts( names, new String[] { "Trygve Laugstøl", "The ∞ Archiva" } );
+ }
+
+ public void testPrologUtf8Read()
+ throws XMLException
+ {
+ File xmlFile = getExampleXml( "prolog-with-utf8.xml" );
+ XMLReader reader = new XMLReader( "basic", xmlFile );
+
+ List names = reader.getElementList( "//basic/names/name" );
+ assertElementTexts( names, new String[] { "Trygve Laugstøl", "The ∞ Archiva" } );
+ }
+
+}
diff --git a/archiva-base/pom.xml b/archiva-base/pom.xml
index 32dc9f7ff..cd51f1edc 100644
--- a/archiva-base/pom.xml
+++ b/archiva-base/pom.xml
@@ -35,7 +35,8 @@
<module>archiva-consumers</module>
<module>archiva-indexer</module>
<module>archiva-model</module>
- <module>archiva-proxy</module>
+ <!-- <module>archiva-proxy</module> -->
<module>archiva-repository-layer</module>
+ <module>archiva-xml-tools</module>
</modules>
</project>