From 74cb10586cf7f1c415930d5ab1d59a6e44b253ee Mon Sep 17 00:00:00 2001 From: Joakim Erdfelt Date: Tue, 3 Apr 2007 15:21:33 +0000 Subject: [PATCH] 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 --- .../ConfiguredRepositoryFactory.java | 75 - .../DefaultConfiguredRepositoryFactory.java | 147 - .../consumers/ArtifactHealthConsumer.java | 96 - .../RepositoryMetadataHealthConsumer.java | 68 - .../ActiveManagedRepositories.java | 93 - .../DefaultActiveManagedRepositories.java | 352 -- .../DefaultActiveManagedRepositoriesTest.java | 205 - archiva-base/archiva-common/pom.xml | 2 + .../AbstractLayoutArtifactBuilder.java | 55 - .../builder/DefaultLayoutArtifactBuilder.java | 218 - .../builder/LayoutArtifactBuilder.java | 36 - .../builder/LegacyLayoutArtifactBuilder.java | 303 -- .../artifact/managed/ManagedArtifact.java | 76 - .../managed/ManagedArtifactTypes.java | 81 - .../artifact/managed/ManagedEjbArtifact.java | 49 - .../artifact/managed/ManagedJavaArtifact.java | 62 - .../archiva/common/utils}/VersionUtil.java | 2 +- .../common/AbstractArchivaCommonTestCase.java | 146 - .../apache/maven/archiva/common/AllTests.java | 1 - ...AbstractLayoutArtifactBuilderTestCase.java | 51 - .../DefaultLayoutArtifactBuilderTest.java | 206 - .../LegacyLayoutArtifactBuilderTest.java | 160 - .../src/main/mdo/configuration.mdo | 214 +- .../archiva/configuration/default-archiva.xml | 252 +- .../src/test/conf/repository-manager.xml | 252 +- .../ArchivaConfigurationTest.java | 22 +- .../archiva-consumer-api/pom.xml | 5 +- .../consumers/AbstractMonitoredConsumer.java | 93 + .../consumers/ArchivaArtifactConsumer.java | 81 + .../maven/archiva/consumers/BaseConsumer.java | 64 + .../archiva/consumers}/ConsumerException.java | 16 +- .../archiva/consumers/ConsumerMonitor.java | 55 + .../consumers/RepositoryContentConsumer.java | 91 + .../archiva-core-consumers/pom.xml | 17 +- .../ArtifactMissingChecksumsConsumer.java | 236 + .../core/ValidateChecksumConsumer.java | 158 + .../archiva-database-consumers/pom.xml | 17 +- .../ArtifactUpdateDatabaseConsumer.java | 213 + .../archiva-lucene-consumers/pom.xml | 17 +- .../lucene}/IndexArtifactConsumer.java | 2 +- .../lucene/IndexContentConsumer.java | 153 + archiva-base/archiva-consumers/pom.xml | 2 + archiva-base/archiva-indexer/pom.xml | 26 +- .../maven/archiva/indexer/ArtifactKeys.java | 20 + ...Index.java => RepositoryContentIndex.java} | 96 +- ...ava => RepositoryContentIndexFactory.java} | 25 +- .../indexer/bytecode/BytecodeAnalyzer.java | 73 + .../bytecode/BytecodeEntryConverter.java | 112 + .../indexer/bytecode/BytecodeHandlers.java | 53 + .../indexer/bytecode/BytecodeKeys.java | 39 + .../indexer/bytecode/BytecodeRecord.java | 164 + .../filecontent/FileContentAnalyzer.java | 48 + .../filecontent/FileContentConverter.java | 67 + .../filecontent/FileContentHandlers.java | 45 + .../indexer/filecontent/FileContentKeys.java | 33 + .../filecontent/FileContentRecord.java | 104 + .../indexer/hashcodes/HashcodesAnalyzer.java | 63 + .../hashcodes/HashcodesEntryConverter.java | 89 + .../indexer/hashcodes/HashcodesHandlers.java | 53 + .../indexer/hashcodes/HashcodesKeys.java | 35 + .../indexer/hashcodes/HashcodesRecord.java | 126 + .../indexer/lucene/LuceneDocumentMaker.java | 114 + ...nverter.java => LuceneEntryConverter.java} | 9 +- .../indexer/lucene/LuceneIndexHandlers.java | 45 + .../LuceneMinimalIndexRecordConverter.java | 87 - .../lucene/LuceneRepositoryArtifactIndex.java | 604 --- .../LuceneRepositoryArtifactIndexFactory.java | 45 - .../lucene/LuceneRepositoryContentIndex.java | 469 ++ .../LuceneRepositoryContentIndexFactory.java | 99 + .../LuceneRepositoryContentRecord.java} | 8 +- .../LuceneStandardIndexRecordConverter.java | 167 - .../lucene/analyzers/ClassnameTokenizer.java | 59 + .../lucene/analyzers/FilenamesTokenizer.java | 52 + .../lucene/analyzers/GroupIdTokenizer.java | 52 + .../lucene/analyzers/VersionTokenizer.java | 51 + .../AbstractArtifactIndexRecordFactory.java | 101 - .../IndexRecordExistsArtifactFilter.java | 47 - .../record/MinimalArtifactIndexRecord.java | 173 - .../MinimalArtifactIndexRecordFactory.java | 105 - .../record/MinimalIndexRecordFields.java | 44 - .../record/RepositoryIndexRecordFactory.java | 47 - .../record/StandardArtifactIndexRecord.java | 412 -- .../StandardArtifactIndexRecordFactory.java | 373 -- .../record/StandardIndexRecordFields.java | 84 - .../artifact-dumps/archiva-common-1.0.jar.txt | 56 + .../continuum-webapp-1.0.3-SNAPSHOT.war.txt | 1492 +++++ .../artifact-dumps/daytrader-ear-1.1.ear.txt | 18 + ...maven-archetype-simple-1.0-alpha-4.jar.txt | 19 + ...elp-plugin-2.0.2-20070119.121239-2.jar.txt | 88 + ...rization-open-1.0-alpha-1-SNAPSHOT.jar.txt | 26 + .../artifact-dumps/testng-5.1-jdk15.jar.txt | 4789 +++++++++++++++++ ...r-api-1.0-beta-3-20070209.213958-2.jar.txt | 435 ++ .../AbstractIndexCreationTestCase.java | 188 + .../indexer/AbstractIndexerTestCase.java | 208 + .../indexer/AbstractSearchTestCase.java | 163 + .../maven/archiva/indexer/AllTests.java | 45 + .../archiva/indexer/MockConfiguration.java | 54 + .../archiva/indexer/bytecode}/AllTests.java | 8 +- .../indexer/bytecode/BytecodeIndexTest.java | 64 + .../bytecode/BytecodeRecordLoader.java | 138 + .../indexer/bytecode/BytecodeSearchTest.java | 330 ++ .../archiva/indexer/hashcodes/AllTests.java | 44 + .../indexer/hashcodes/HashcodesIndexTest.java | 65 + .../hashcodes/HashcodesRecordLoader.java | 106 + .../hashcodes/HashcodesSearchTest.java | 290 + .../LuceneMinimalArtifactIndexSearchTest.java | 231 - .../LuceneMinimalArtifactIndexTest.java | 353 -- ...LuceneStandardArtifactIndexSearchTest.java | 790 --- .../LuceneStandardArtifactIndexTest.java | 409 -- .../archiva/indexer/query}/AllTests.java | 9 +- ...MinimalArtifactIndexRecordFactoryTest.java | 249 - ...tandardArtifactIndexRecordFactoryTest.java | 446 -- .../resources/META-INF/plexus/components.xml | 22 + .../indexer/bytecode/BytecodeIndexTest.xml | 22 + .../indexer/bytecode/BytecodeSearchTest.xml | 22 + .../indexer/hashcodes/HashcodesIndexTest.xml | 22 + .../indexer/hashcodes/HashcodesSearchTest.xml | 22 + .../maven/archiva/model}/ArchivaArtifact.java | 115 +- .../ArchivaArtifactPlatformDetails.java} | 21 +- .../archiva/model}/ArchivaRepository.java | 51 +- .../maven/archiva/model/DependencyScope.java | 46 + .../maven/archiva/model}/RepositoryURL.java | 2 +- .../model/platform/JavaArtifactHelper.java | 44 + .../src/main/mdo/archiva-base.xml | 153 +- archiva-base/archiva-repository-layer/pom.xml | 10 +- .../layer/CachedRepositoryQueryLayer.java | 98 - .../layer/DefaultRepositoryQueryLayer.java | 105 - .../DefaultRepositoryQueryLayerFactory.java | 38 - .../archiva/layer/RepositoryQueryLayer.java | 40 - .../layer/RepositoryQueryLayerFactory.java | 41 - .../connector/RepositoryConnector.java | 2 +- .../archiva/repository/consumer/Consumer.java | 91 - .../repository/consumer/ConsumerFactory.java | 70 - .../AbstractArtifactExtensionMapping.java | 4 +- .../content/ArtifactExtensionMapping.java | 2 +- .../layout/BidirectionalRepositoryLayout.java | 2 +- .../DefaultBidirectionalRepositoryLayout.java | 30 +- .../repository/layout/FilenameParts.java | 73 + .../LegacyBidirectionalRepositoryLayout.java | 27 +- .../layout/RepositoryLayoutUtils.java | 36 +- .../metadata/RepositoryMetadataException.java | 52 + .../metadata/RepositoryMetadataReader.java | 73 + .../project/ProjectModel300Reader.java | 42 + .../project/ProjectModel400Reader.java | 405 ++ .../project/ProjectModelException.java} | 14 +- .../project/ProjectModelReader.java | 35 + .../repository/scanner/RepositoryScanner.java | 8 +- .../scanner/RepositoryScannerInstance.java | 53 +- .../AbstractRepositoryQueryLayerTestCase.java | 116 - .../layer/CachedRepositoryQueryLayerTest.java | 56 - .../maven/archiva/repository/AllTests.java | 4 + .../archiva/repository/RepositoryURLTest.java | 2 + ...BidirectionalRepositoryLayoutTestCase.java | 4 +- .../archiva/repository/layout}/AllTests.java | 11 +- ...aultBidirectionalRepositoryLayoutTest.java | 97 +- ...gacyBidirectionalRepositoryLayoutTest.java | 51 +- .../layout/RepositoryLayoutUtilsTest.java | 88 +- .../repository/metadata}/AllTests.java | 6 +- .../RepositoryMetadataReaderTest.java | 52 + .../archiva/repository/project}/AllTests.java | 6 +- .../project/ProjectModel400ReaderTest.java | 53 + .../archiva/repository/scanner}/AllTests.java | 11 +- .../scanner/CentralScannerTiming.java | 143 +- .../scanner/RepositoryScannerTest.java | 196 +- .../repository/scanner/ScanConsumer.java | 50 +- .../1.0/maven-downloader-1.0-javadoc.jar | Bin 0 -> 38527 bytes .../1.0/maven-downloader-1.0-javadoc.jar.md5 | 1 + .../1.0/maven-downloader-1.0-javadoc.jar.sha1 | 1 + .../1.0/maven-downloader-1.0-sources.jar | Bin 0 -> 2819 bytes .../1.0/maven-downloader-1.0-sources.jar.md5 | 1 + .../1.0/maven-downloader-1.0-sources.jar.sha1 | 1 + .../1.0/maven-downloader-1.0.jar | Bin 0 -> 6480 bytes .../1.0/maven-downloader-1.0.jar.md5 | 1 + .../1.0/maven-downloader-1.0.jar.sha1 | 1 + .../1.0/maven-downloader-1.0.pom | 56 + .../1.0/maven-downloader-1.0.pom.md5 | 1 + .../1.0/maven-downloader-1.0.pom.sha1 | 1 + .../1.1/maven-downloader-1.1-javadoc.jar | Bin 0 -> 38215 bytes .../1.1/maven-downloader-1.1-javadoc.jar.md5 | 1 + .../1.1/maven-downloader-1.1-javadoc.jar.sha1 | 1 + .../1.1/maven-downloader-1.1-sources.jar | Bin 0 -> 2822 bytes .../1.1/maven-downloader-1.1-sources.jar.md5 | 1 + .../1.1/maven-downloader-1.1-sources.jar.sha1 | 1 + .../1.1/maven-downloader-1.1.jar | Bin 0 -> 6478 bytes .../1.1/maven-downloader-1.1.jar.md5 | 1 + .../1.1/maven-downloader-1.1.jar.sha1 | 1 + .../1.1/maven-downloader-1.1.pom | 56 + .../1.1/maven-downloader-1.1.pom.md5 | 1 + .../1.1/maven-downloader-1.1.pom.sha1 | 1 + .../maven-downloader/maven-metadata.xml | 13 + .../maven-downloader/maven-metadata.xml.md5 | 1 + .../maven-downloader/maven-metadata.xml.sha1 | 1 + archiva-base/archiva-scheduled/pom.xml | 67 + .../DefaultRepositoryTaskScheduler.java | 2 +- .../archiva/scheduled}/RepositoryTaskJob.java | 6 +- .../scheduled}/RepositoryTaskScheduler.java | 2 +- .../executors/DataRefreshConsumers.java | 2 +- .../executors/DataRefreshExecutor.java | 12 +- .../scheduled/tasks}/DataRefreshTask.java | 2 +- .../scheduled/tasks}/RepositoryTask.java | 2 +- .../executors/DataRefreshExecutorTest.java | 4 +- archiva-base/archiva-xml-tools/pom.xml | 79 + .../maven/archiva/xml/LatinEntities.java | 309 ++ .../xml/LatinEntityResolutionReader.java | 60 + .../maven/archiva/xml/XMLException.java} | 16 +- .../apache/maven/archiva/xml/XMLReader.java | 262 + .../src/test/examples/no-prolog-basic.xml | 14 + .../test/examples/no-prolog-with-entities.xml | 6 + .../src/test/examples/no-prolog-with-utf8.xml | 6 + .../src/test/examples/prolog-with-utf8.xml | 7 + .../maven/archiva/xml/XMLReaderTest.java | 113 + archiva-base/pom.xml | 3 +- archiva-cli/pom.xml | 18 +- .../archiva/cli/AbstractProgressConsumer.java | 61 + .../apache/maven/archiva/cli/ArchivaCli.java | 210 +- .../archiva/cli/ArtifactCountConsumer.java | 95 + .../archiva/cli/ProjectReaderConsumer.java | 124 + .../src/main/resources/log4j.properties | 10 + archiva-consumer-api/pom.xml | 2 +- .../archiva/consumers/AbstractConsumer.java | 67 - .../consumers/GenericArtifactConsumer.java | 132 - .../consumers/GenericModelConsumer.java | 100 - .../GenericRepositoryMetadataConsumer.java | 233 - .../consumers/MockArtifactConsumer.java | 1 + .../archiva/consumers/MockModelConsumer.java | 2 +- .../MockRepositoryMetadataConsumer.java | 2 +- pom.xml | 12 +- 227 files changed, 15880 insertions(+), 9220 deletions(-) delete mode 100644 archiva-api/src/main/java/org/apache/maven/archiva/configuration/ConfiguredRepositoryFactory.java delete mode 100644 archiva-api/src/main/java/org/apache/maven/archiva/configuration/DefaultConfiguredRepositoryFactory.java delete mode 100644 archiva-api/src/main/java/org/apache/maven/archiva/consumers/ArtifactHealthConsumer.java delete mode 100644 archiva-api/src/main/java/org/apache/maven/archiva/consumers/RepositoryMetadataHealthConsumer.java delete mode 100644 archiva-api/src/main/java/org/apache/maven/archiva/repositories/ActiveManagedRepositories.java delete mode 100644 archiva-api/src/main/java/org/apache/maven/archiva/repositories/DefaultActiveManagedRepositories.java delete mode 100644 archiva-api/src/test/java/org/apache/maven/archiva/repositories/DefaultActiveManagedRepositoriesTest.java delete mode 100644 archiva-base/archiva-common/src/main/java/org/apache/maven/archiva/common/artifact/builder/AbstractLayoutArtifactBuilder.java delete mode 100644 archiva-base/archiva-common/src/main/java/org/apache/maven/archiva/common/artifact/builder/DefaultLayoutArtifactBuilder.java delete mode 100644 archiva-base/archiva-common/src/main/java/org/apache/maven/archiva/common/artifact/builder/LayoutArtifactBuilder.java delete mode 100644 archiva-base/archiva-common/src/main/java/org/apache/maven/archiva/common/artifact/builder/LegacyLayoutArtifactBuilder.java delete mode 100644 archiva-base/archiva-common/src/main/java/org/apache/maven/archiva/common/artifact/managed/ManagedArtifact.java delete mode 100644 archiva-base/archiva-common/src/main/java/org/apache/maven/archiva/common/artifact/managed/ManagedArtifactTypes.java delete mode 100644 archiva-base/archiva-common/src/main/java/org/apache/maven/archiva/common/artifact/managed/ManagedEjbArtifact.java delete mode 100644 archiva-base/archiva-common/src/main/java/org/apache/maven/archiva/common/artifact/managed/ManagedJavaArtifact.java rename archiva-base/{archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/version => archiva-common/src/main/java/org/apache/maven/archiva/common/utils}/VersionUtil.java (97%) delete mode 100644 archiva-base/archiva-common/src/test/java/org/apache/maven/archiva/common/AbstractArchivaCommonTestCase.java delete mode 100644 archiva-base/archiva-common/src/test/java/org/apache/maven/archiva/common/artifact/builder/AbstractLayoutArtifactBuilderTestCase.java delete mode 100644 archiva-base/archiva-common/src/test/java/org/apache/maven/archiva/common/artifact/builder/DefaultLayoutArtifactBuilderTest.java delete mode 100644 archiva-base/archiva-common/src/test/java/org/apache/maven/archiva/common/artifact/builder/LegacyLayoutArtifactBuilderTest.java create mode 100644 archiva-base/archiva-consumers/archiva-consumer-api/src/main/java/org/apache/maven/archiva/consumers/AbstractMonitoredConsumer.java create mode 100644 archiva-base/archiva-consumers/archiva-consumer-api/src/main/java/org/apache/maven/archiva/consumers/ArchivaArtifactConsumer.java create mode 100644 archiva-base/archiva-consumers/archiva-consumer-api/src/main/java/org/apache/maven/archiva/consumers/BaseConsumer.java rename archiva-base/{archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/consumer => archiva-consumers/archiva-consumer-api/src/main/java/org/apache/maven/archiva/consumers}/ConsumerException.java (74%) create mode 100644 archiva-base/archiva-consumers/archiva-consumer-api/src/main/java/org/apache/maven/archiva/consumers/ConsumerMonitor.java create mode 100644 archiva-base/archiva-consumers/archiva-consumer-api/src/main/java/org/apache/maven/archiva/consumers/RepositoryContentConsumer.java create mode 100644 archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/maven/archiva/consumers/core/ArtifactMissingChecksumsConsumer.java create mode 100644 archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/maven/archiva/consumers/core/ValidateChecksumConsumer.java create mode 100644 archiva-base/archiva-consumers/archiva-database-consumers/src/main/java/org/apache/maven/archiva/consumers/database/ArtifactUpdateDatabaseConsumer.java rename {archiva-api/src/main/java/org/apache/maven/archiva/consumers => archiva-base/archiva-consumers/archiva-lucene-consumers/src/main/java/org/apache/maven/archiva/consumers/lucene}/IndexArtifactConsumer.java (98%) create mode 100644 archiva-base/archiva-consumers/archiva-lucene-consumers/src/main/java/org/apache/maven/archiva/consumers/lucene/IndexContentConsumer.java create mode 100644 archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/ArtifactKeys.java rename archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/{RepositoryArtifactIndex.java => RepositoryContentIndex.java} (51%) rename archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/{RepositoryArtifactIndexFactory.java => RepositoryContentIndexFactory.java} (57%) create mode 100644 archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/bytecode/BytecodeAnalyzer.java create mode 100644 archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/bytecode/BytecodeEntryConverter.java create mode 100644 archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/bytecode/BytecodeHandlers.java create mode 100644 archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/bytecode/BytecodeKeys.java create mode 100644 archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/bytecode/BytecodeRecord.java create mode 100644 archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/filecontent/FileContentAnalyzer.java create mode 100644 archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/filecontent/FileContentConverter.java create mode 100644 archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/filecontent/FileContentHandlers.java create mode 100644 archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/filecontent/FileContentKeys.java create mode 100644 archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/filecontent/FileContentRecord.java create mode 100644 archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/hashcodes/HashcodesAnalyzer.java create mode 100644 archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/hashcodes/HashcodesEntryConverter.java create mode 100644 archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/hashcodes/HashcodesHandlers.java create mode 100644 archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/hashcodes/HashcodesKeys.java create mode 100644 archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/hashcodes/HashcodesRecord.java create mode 100644 archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/lucene/LuceneDocumentMaker.java rename archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/lucene/{LuceneIndexRecordConverter.java => LuceneEntryConverter.java} (83%) create mode 100644 archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/lucene/LuceneIndexHandlers.java delete mode 100644 archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/lucene/LuceneMinimalIndexRecordConverter.java delete mode 100644 archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/lucene/LuceneRepositoryArtifactIndex.java delete mode 100644 archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/lucene/LuceneRepositoryArtifactIndexFactory.java create mode 100644 archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/lucene/LuceneRepositoryContentIndex.java create mode 100644 archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/lucene/LuceneRepositoryContentIndexFactory.java rename archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/{record/RepositoryIndexRecord.java => lucene/LuceneRepositoryContentRecord.java} (85%) delete mode 100644 archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/lucene/LuceneStandardIndexRecordConverter.java create mode 100644 archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/lucene/analyzers/ClassnameTokenizer.java create mode 100644 archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/lucene/analyzers/FilenamesTokenizer.java create mode 100644 archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/lucene/analyzers/GroupIdTokenizer.java create mode 100644 archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/lucene/analyzers/VersionTokenizer.java delete mode 100644 archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/record/AbstractArtifactIndexRecordFactory.java delete mode 100644 archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/record/IndexRecordExistsArtifactFilter.java delete mode 100644 archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/record/MinimalArtifactIndexRecord.java delete mode 100644 archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/record/MinimalArtifactIndexRecordFactory.java delete mode 100644 archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/record/MinimalIndexRecordFields.java delete mode 100644 archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/record/RepositoryIndexRecordFactory.java delete mode 100644 archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/record/StandardArtifactIndexRecord.java delete mode 100644 archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/record/StandardArtifactIndexRecordFactory.java delete mode 100644 archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/record/StandardIndexRecordFields.java create mode 100644 archiva-base/archiva-indexer/src/test/artifact-dumps/archiva-common-1.0.jar.txt create mode 100644 archiva-base/archiva-indexer/src/test/artifact-dumps/continuum-webapp-1.0.3-SNAPSHOT.war.txt create mode 100644 archiva-base/archiva-indexer/src/test/artifact-dumps/daytrader-ear-1.1.ear.txt create mode 100644 archiva-base/archiva-indexer/src/test/artifact-dumps/maven-archetype-simple-1.0-alpha-4.jar.txt create mode 100644 archiva-base/archiva-indexer/src/test/artifact-dumps/maven-help-plugin-2.0.2-20070119.121239-2.jar.txt create mode 100644 archiva-base/archiva-indexer/src/test/artifact-dumps/redback-authorization-open-1.0-alpha-1-SNAPSHOT.jar.txt create mode 100644 archiva-base/archiva-indexer/src/test/artifact-dumps/testng-5.1-jdk15.jar.txt create mode 100644 archiva-base/archiva-indexer/src/test/artifact-dumps/wagon-provider-api-1.0-beta-3-20070209.213958-2.jar.txt create mode 100644 archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/AbstractIndexCreationTestCase.java create mode 100644 archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/AbstractIndexerTestCase.java create mode 100644 archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/AbstractSearchTestCase.java create mode 100644 archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/AllTests.java create mode 100644 archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/MockConfiguration.java rename archiva-base/{archiva-repository-layer/src/test/java/org/apache/maven/archiva => archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/bytecode}/AllTests.java (85%) create mode 100644 archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/bytecode/BytecodeIndexTest.java create mode 100644 archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/bytecode/BytecodeRecordLoader.java create mode 100644 archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/bytecode/BytecodeSearchTest.java create mode 100644 archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/hashcodes/AllTests.java create mode 100644 archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/hashcodes/HashcodesIndexTest.java create mode 100644 archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/hashcodes/HashcodesRecordLoader.java create mode 100644 archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/hashcodes/HashcodesSearchTest.java delete mode 100644 archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/lucene/LuceneMinimalArtifactIndexSearchTest.java delete mode 100644 archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/lucene/LuceneMinimalArtifactIndexTest.java delete mode 100644 archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/lucene/LuceneStandardArtifactIndexSearchTest.java delete mode 100644 archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/lucene/LuceneStandardArtifactIndexTest.java rename archiva-base/{archiva-repository-layer/src/test/java/org/apache/maven/archiva/layer => archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/query}/AllTests.java (84%) delete mode 100644 archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/record/MinimalArtifactIndexRecordFactoryTest.java delete mode 100644 archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/record/StandardArtifactIndexRecordFactoryTest.java create mode 100644 archiva-base/archiva-indexer/src/test/resources/META-INF/plexus/components.xml create mode 100644 archiva-base/archiva-indexer/src/test/resources/org/apache/maven/archiva/indexer/bytecode/BytecodeIndexTest.xml create mode 100644 archiva-base/archiva-indexer/src/test/resources/org/apache/maven/archiva/indexer/bytecode/BytecodeSearchTest.xml create mode 100644 archiva-base/archiva-indexer/src/test/resources/org/apache/maven/archiva/indexer/hashcodes/HashcodesIndexTest.xml create mode 100644 archiva-base/archiva-indexer/src/test/resources/org/apache/maven/archiva/indexer/hashcodes/HashcodesSearchTest.xml rename archiva-base/{archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository => archiva-model/src/main/java/org/apache/maven/archiva/model}/ArchivaArtifact.java (57%) rename archiva-base/{archiva-repository-layer/src/test/java/org/apache/maven/archiva/layer/DefaultRepositoryQueryLayerTest.java => archiva-model/src/main/java/org/apache/maven/archiva/model/ArchivaArtifactPlatformDetails.java} (69%) rename archiva-base/{archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository => archiva-model/src/main/java/org/apache/maven/archiva/model}/ArchivaRepository.java (80%) create mode 100644 archiva-base/archiva-model/src/main/java/org/apache/maven/archiva/model/DependencyScope.java rename archiva-base/{archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository => archiva-model/src/main/java/org/apache/maven/archiva/model}/RepositoryURL.java (98%) create mode 100644 archiva-base/archiva-model/src/main/java/org/apache/maven/archiva/model/platform/JavaArtifactHelper.java delete mode 100644 archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/layer/CachedRepositoryQueryLayer.java delete mode 100644 archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/layer/DefaultRepositoryQueryLayer.java delete mode 100644 archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/layer/DefaultRepositoryQueryLayerFactory.java delete mode 100644 archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/layer/RepositoryQueryLayer.java delete mode 100644 archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/layer/RepositoryQueryLayerFactory.java delete mode 100644 archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/consumer/Consumer.java delete mode 100644 archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/consumer/ConsumerFactory.java create mode 100644 archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/layout/FilenameParts.java create mode 100644 archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/metadata/RepositoryMetadataException.java create mode 100644 archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/metadata/RepositoryMetadataReader.java create mode 100644 archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/project/ProjectModel300Reader.java create mode 100644 archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/project/ProjectModel400Reader.java rename archiva-base/{archiva-common/src/main/java/org/apache/maven/archiva/common/artifact/builder/BuilderException.java => archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/project/ProjectModelException.java} (71%) create mode 100644 archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/project/ProjectModelReader.java delete mode 100644 archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/layer/AbstractRepositoryQueryLayerTestCase.java delete mode 100644 archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/layer/CachedRepositoryQueryLayerTest.java rename {archiva-api/src/test/java/org/apache/maven/archiva => archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/layout}/AllTests.java (76%) rename {archiva-api/src/test/java/org/apache/maven/archiva/repositories => archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/metadata}/AllTests.java (88%) create mode 100644 archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/metadata/RepositoryMetadataReaderTest.java rename {archiva-api/src/test/java/org/apache/maven/archiva/scheduler/executors => archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/project}/AllTests.java (88%) create mode 100644 archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/project/ProjectModel400ReaderTest.java rename archiva-base/{archiva-common/src/test/java/org/apache/maven/archiva/common/artifact/builder => archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/scanner}/AllTests.java (82%) create mode 100644 archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.0/maven-downloader-1.0-javadoc.jar create mode 100644 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 create mode 100644 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 create mode 100644 archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.0/maven-downloader-1.0-sources.jar create mode 100644 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 create mode 100644 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 create mode 100644 archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.0/maven-downloader-1.0.jar create mode 100644 archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.0/maven-downloader-1.0.jar.md5 create mode 100644 archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.0/maven-downloader-1.0.jar.sha1 create mode 100644 archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.0/maven-downloader-1.0.pom create mode 100644 archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.0/maven-downloader-1.0.pom.md5 create mode 100644 archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.0/maven-downloader-1.0.pom.sha1 create mode 100644 archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.1/maven-downloader-1.1-javadoc.jar create mode 100644 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 create mode 100644 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 create mode 100644 archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.1/maven-downloader-1.1-sources.jar create mode 100644 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 create mode 100644 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 create mode 100644 archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.1/maven-downloader-1.1.jar create mode 100644 archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.1/maven-downloader-1.1.jar.md5 create mode 100644 archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.1/maven-downloader-1.1.jar.sha1 create mode 100644 archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.1/maven-downloader-1.1.pom create mode 100644 archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.1/maven-downloader-1.1.pom.md5 create mode 100644 archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/1.1/maven-downloader-1.1.pom.sha1 create mode 100644 archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/maven-metadata.xml create mode 100644 archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/maven-metadata.xml.md5 create mode 100644 archiva-base/archiva-repository-layer/src/test/repositories/default-repository/org/apache/maven/shared/maven-downloader/maven-metadata.xml.sha1 create mode 100644 archiva-base/archiva-scheduled/pom.xml rename {archiva-api/src/main/java/org/apache/maven/archiva/scheduler => archiva-base/archiva-scheduled/src/main/java/org/apache/maven/archiva/scheduled}/DefaultRepositoryTaskScheduler.java (99%) rename {archiva-api/src/main/java/org/apache/maven/archiva/scheduler => archiva-base/archiva-scheduled/src/main/java/org/apache/maven/archiva/scheduled}/RepositoryTaskJob.java (93%) rename {archiva-api/src/main/java/org/apache/maven/archiva/scheduler => archiva-base/archiva-scheduled/src/main/java/org/apache/maven/archiva/scheduled}/RepositoryTaskScheduler.java (96%) rename {archiva-api/src/main/java/org/apache/maven/archiva/scheduler => archiva-base/archiva-scheduled/src/main/java/org/apache/maven/archiva/scheduled}/executors/DataRefreshConsumers.java (97%) rename {archiva-api/src/main/java/org/apache/maven/archiva/scheduler => archiva-base/archiva-scheduled/src/main/java/org/apache/maven/archiva/scheduled}/executors/DataRefreshExecutor.java (96%) rename {archiva-api/src/main/java/org/apache/maven/archiva/scheduler/task => archiva-base/archiva-scheduled/src/main/java/org/apache/maven/archiva/scheduled/tasks}/DataRefreshTask.java (93%) rename {archiva-api/src/main/java/org/apache/maven/archiva/scheduler/task => archiva-base/archiva-scheduled/src/main/java/org/apache/maven/archiva/scheduled/tasks}/RepositoryTask.java (96%) rename {archiva-api/src/test/java/org/apache/maven/archiva/scheduler => archiva-base/archiva-scheduled/src/test/java/org/apache/maven/archiva/scheduled}/executors/DataRefreshExecutorTest.java (95%) create mode 100644 archiva-base/archiva-xml-tools/pom.xml create mode 100644 archiva-base/archiva-xml-tools/src/main/java/org/apache/maven/archiva/xml/LatinEntities.java create mode 100644 archiva-base/archiva-xml-tools/src/main/java/org/apache/maven/archiva/xml/LatinEntityResolutionReader.java rename archiva-base/{archiva-repository-layer/src/main/java/org/apache/maven/archiva/layer/RepositoryQueryLayerException.java => archiva-xml-tools/src/main/java/org/apache/maven/archiva/xml/XMLException.java} (68%) create mode 100644 archiva-base/archiva-xml-tools/src/main/java/org/apache/maven/archiva/xml/XMLReader.java create mode 100644 archiva-base/archiva-xml-tools/src/test/examples/no-prolog-basic.xml create mode 100644 archiva-base/archiva-xml-tools/src/test/examples/no-prolog-with-entities.xml create mode 100644 archiva-base/archiva-xml-tools/src/test/examples/no-prolog-with-utf8.xml create mode 100644 archiva-base/archiva-xml-tools/src/test/examples/prolog-with-utf8.xml create mode 100644 archiva-base/archiva-xml-tools/src/test/java/org/apache/maven/archiva/xml/XMLReaderTest.java create mode 100644 archiva-cli/src/main/java/org/apache/maven/archiva/cli/AbstractProgressConsumer.java create mode 100644 archiva-cli/src/main/java/org/apache/maven/archiva/cli/ArtifactCountConsumer.java create mode 100644 archiva-cli/src/main/java/org/apache/maven/archiva/cli/ProjectReaderConsumer.java create mode 100644 archiva-cli/src/main/resources/log4j.properties delete mode 100644 archiva-consumer-api/src/main/java/org/apache/maven/archiva/consumers/AbstractConsumer.java delete mode 100644 archiva-consumer-api/src/main/java/org/apache/maven/archiva/consumers/GenericArtifactConsumer.java delete mode 100644 archiva-consumer-api/src/main/java/org/apache/maven/archiva/consumers/GenericModelConsumer.java delete mode 100644 archiva-consumer-api/src/main/java/org/apache/maven/archiva/consumers/GenericRepositoryMetadataConsumer.java diff --git a/archiva-api/src/main/java/org/apache/maven/archiva/configuration/ConfiguredRepositoryFactory.java b/archiva-api/src/main/java/org/apache/maven/archiva/configuration/ConfiguredRepositoryFactory.java deleted file mode 100644 index 9b5e3dbc5..000000000 --- a/archiva-api/src/main/java/org/apache/maven/archiva/configuration/ConfiguredRepositoryFactory.java +++ /dev/null @@ -1,75 +0,0 @@ -package org.apache.maven.archiva.configuration; - -/* - * 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.proxy.ProxiedArtifactRepository; -import org.apache.maven.artifact.repository.ArtifactRepository; - -import java.util.List; - -/** - * Create an artifact repository from the given configuration. - * - * @author Brett Porter - */ -public interface ConfiguredRepositoryFactory -{ - String ROLE = ConfiguredRepositoryFactory.class.getName(); - - /** - * Create an artifact repository from the given configuration. - * - * @param configuration the configuration - * @return the artifact repository - */ - ArtifactRepository createRepository( RepositoryConfiguration configuration ); - - /** - * Create artifact repositories from the given configuration. - * - * @param configuration the configuration containing the repositories - * @return the artifact repositories - */ - List createRepositories( Configuration configuration ); - - /** - * Create a local repository from the given configuration. - * - * @param configuration the configuration - * @return the local artifact repository - */ - ArtifactRepository createLocalRepository( Configuration configuration ); - - /** - * Create an artifact repository from the given proxy repository configuration. - * - * @param configuration the configuration - * @return the artifact repository - */ - ProxiedArtifactRepository createProxiedRepository( ProxiedRepositoryConfiguration configuration ); - - /** - * Create artifact repositories from the given proxy repository configurations. - * - * @param configuration the configuration containing the repositories - * @return the artifact repositories - */ - List createProxiedRepositories( Configuration configuration ); -} diff --git a/archiva-api/src/main/java/org/apache/maven/archiva/configuration/DefaultConfiguredRepositoryFactory.java b/archiva-api/src/main/java/org/apache/maven/archiva/configuration/DefaultConfiguredRepositoryFactory.java deleted file mode 100644 index 4c7e05e5a..000000000 --- a/archiva-api/src/main/java/org/apache/maven/archiva/configuration/DefaultConfiguredRepositoryFactory.java +++ /dev/null @@ -1,147 +0,0 @@ -package org.apache.maven.archiva.configuration; - -/* - * 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.proxy.ProxiedArtifactRepository; -import org.apache.maven.artifact.repository.ArtifactRepository; -import org.apache.maven.artifact.repository.ArtifactRepositoryFactory; -import org.apache.maven.artifact.repository.ArtifactRepositoryPolicy; -import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout; - -import java.io.File; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.Map; - -/** - * Create artifact repositories from a configuration. - * - * @author Brett Porter - * @plexus.component role="org.apache.maven.archiva.configuration.ConfiguredRepositoryFactory" - */ -public class DefaultConfiguredRepositoryFactory - implements ConfiguredRepositoryFactory -{ - /** - * @plexus.requirement role="org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout" - */ - private Map repositoryLayouts; - - /** - * @plexus.requirement - */ - private ArtifactRepositoryFactory repoFactory; - - public ArtifactRepository createRepository( RepositoryConfiguration configuration ) - { - return createRepository( configuration.getLayout(), configuration.getId(), configuration.getDirectory()); - } - - public ProxiedArtifactRepository createProxiedRepository( ProxiedRepositoryConfiguration configuration ) - { - boolean enabled = isEnabled( configuration.getSnapshotsPolicy() ); - String updatePolicy = - getUpdatePolicy( configuration.getSnapshotsPolicy(), configuration.getSnapshotsInterval() ); - ArtifactRepositoryPolicy snapshotsPolicy = - new ArtifactRepositoryPolicy( enabled, updatePolicy, ArtifactRepositoryPolicy.CHECKSUM_POLICY_FAIL ); - - enabled = isEnabled( configuration.getReleasesPolicy() ); - updatePolicy = getUpdatePolicy( configuration.getReleasesPolicy(), configuration.getReleasesInterval() ); - ArtifactRepositoryPolicy releasesPolicy = - new ArtifactRepositoryPolicy( enabled, updatePolicy, ArtifactRepositoryPolicy.CHECKSUM_POLICY_FAIL ); - - ArtifactRepositoryLayout layout = (ArtifactRepositoryLayout) repositoryLayouts.get( configuration.getLayout() ); - - if ( layout == null ) - { - throw new IllegalArgumentException( "Invalid layout: " + configuration.getLayout() ); - } - - ArtifactRepository artifactRepository = repoFactory.createArtifactRepository( configuration.getId(), - configuration.getUrl(), layout, - snapshotsPolicy, releasesPolicy ); - ProxiedArtifactRepository repository = new ProxiedArtifactRepository( artifactRepository ); - repository.setCacheFailures( configuration.isCacheFailures() ); - repository.setHardFail( configuration.isHardFail() ); - repository.setName( configuration.getName() ); - repository.setUseNetworkProxy( configuration.isUseNetworkProxy() ); - return repository; - } - - public List createRepositories( Configuration configuration ) - { - List managedRepositories = configuration.getRepositories(); - List repositories = new ArrayList( managedRepositories.size() ); - - for ( Iterator i = managedRepositories.iterator(); i.hasNext(); ) - { - repositories.add( createRepository( (RepositoryConfiguration) i.next() ) ); - } - - return repositories; - } - - public List createProxiedRepositories( Configuration configuration ) - { - List proxiedRepositories = configuration.getProxiedRepositories(); - List repositories = new ArrayList( proxiedRepositories.size() ); - - for ( Iterator i = proxiedRepositories.iterator(); i.hasNext(); ) - { - repositories.add( createProxiedRepository( (ProxiedRepositoryConfiguration) i.next() ) ); - } - - return repositories; - } - - public ArtifactRepository createLocalRepository( Configuration configuration ) - { - return createRepository( "default", "local", configuration.getLocalRepository() ); - } - - public ArtifactRepository createRepository( String layout, String id, String directory ) - { - ArtifactRepositoryLayout repositoryLayout = (ArtifactRepositoryLayout) repositoryLayouts.get( layout ); - File repository = new File( directory ); - repository.mkdirs(); - - String repoDir = repository.toURI().toString(); - //workaround for spaces non converted by PathUtils in wagon - //TODO: remove it when PathUtils will be fixed - if ( repoDir.indexOf( "%20" ) >= 0 ) - { - repoDir = StringUtils.replace( repoDir, "%20", " " ); - } - - return repoFactory.createArtifactRepository( id, repoDir, repositoryLayout, null, null ); - } - - private static String getUpdatePolicy( String policy, int interval ) - { - return "interval".equals( policy ) ? policy + ":" + interval : policy; - } - - private static boolean isEnabled( String policy ) - { - return !"disabled".equals( policy ); - } -} diff --git a/archiva-api/src/main/java/org/apache/maven/archiva/consumers/ArtifactHealthConsumer.java b/archiva-api/src/main/java/org/apache/maven/archiva/consumers/ArtifactHealthConsumer.java deleted file mode 100644 index f0eb8843f..000000000 --- a/archiva-api/src/main/java/org/apache/maven/archiva/consumers/ArtifactHealthConsumer.java +++ /dev/null @@ -1,96 +0,0 @@ -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.reporting.database.ArtifactResultsDatabase; -import org.apache.maven.archiva.reporting.group.ReportGroup; -import org.apache.maven.artifact.Artifact; -import org.apache.maven.artifact.InvalidArtifactRTException; -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 java.util.Collections; - -/** - * ArtifactHealthConsumer - * - * @author Joakim Erdfelt - * @version $Id$ - * - * @plexus.component role="org.apache.maven.archiva.common.consumers.Consumer" - * role-hint="artifact-health" - * instantiation-strategy="per-lookup" - */ -public class ArtifactHealthConsumer - extends GenericArtifactConsumer -{ - /** - * @plexus.requirement - */ - private ArtifactResultsDatabase database; - - /** - * @plexus.requirement role-hint="health" - */ - private ReportGroup health; - - /** - * @plexus.requirement - */ - private MavenProjectBuilder projectBuilder; - - public void processArtifact( Artifact artifact, BaseFile file ) - { - Model model = null; - try - { - Artifact pomArtifact = artifactFactory.createProjectArtifact( artifact.getGroupId(), artifact - .getArtifactId(), artifact.getVersion() ); - MavenProject project = projectBuilder.buildFromRepository( pomArtifact, Collections.EMPTY_LIST, repository ); - - model = project.getModel(); - } - catch ( InvalidArtifactRTException e ) - { - database.addWarning( artifact, "health", "invalid", "Invalid artifact [" + artifact + "] : " + e ); - } - catch ( ProjectBuildingException e ) - { - database.addWarning( artifact, "health", "project-build", "Error reading project model: " + e ); - } - - database.remove( artifact ); - health.processArtifact( artifact, model ); - } - - public void processFileProblem( BaseFile path, String message ) - { - /* do nothing here (yet) */ - // TODO: store build failure into database? - } - - public String getName() - { - return "Artifact Health Consumer"; - } -} diff --git a/archiva-api/src/main/java/org/apache/maven/archiva/consumers/RepositoryMetadataHealthConsumer.java b/archiva-api/src/main/java/org/apache/maven/archiva/consumers/RepositoryMetadataHealthConsumer.java deleted file mode 100644 index 0c56768b1..000000000 --- a/archiva-api/src/main/java/org/apache/maven/archiva/consumers/RepositoryMetadataHealthConsumer.java +++ /dev/null @@ -1,68 +0,0 @@ -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.reporting.database.MetadataResultsDatabase; -import org.apache.maven.archiva.reporting.group.ReportGroup; -import org.apache.maven.archiva.reporting.model.MetadataResults; -import org.apache.maven.artifact.repository.metadata.RepositoryMetadata; - -/** - * RepositoryMetadataHealthConsumer - * - * @author Joakim Erdfelt - * @version $Id$ - * - * @plexus.component role="org.apache.maven.archiva.common.consumers.Consumer" - * role-hint="metadata-health" - * instantiation-strategy="per-lookup" - */ -public class RepositoryMetadataHealthConsumer - extends GenericRepositoryMetadataConsumer -{ - /** - * @plexus.requirement - */ - private MetadataResultsDatabase database; - - /** - * @plexus.requirement role-hint="health" - */ - private ReportGroup health; - - public void processRepositoryMetadata( RepositoryMetadata metadata, BaseFile file ) - { - MetadataResults results = database.getMetadataResults( metadata ); - database.clearResults( results ); - - health.processMetadata( metadata, repository ); - } - - public void processFileProblem( BaseFile path, String message ) - { - - } - - public String getName() - { - return "RepositoryMetadata Health Consumer"; - } -} diff --git a/archiva-api/src/main/java/org/apache/maven/archiva/repositories/ActiveManagedRepositories.java b/archiva-api/src/main/java/org/apache/maven/archiva/repositories/ActiveManagedRepositories.java deleted file mode 100644 index 0bac31018..000000000 --- a/archiva-api/src/main/java/org/apache/maven/archiva/repositories/ActiveManagedRepositories.java +++ /dev/null @@ -1,93 +0,0 @@ -package org.apache.maven.archiva.repositories; - -/* - * 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.artifact.managed.ManagedArtifact; -import org.apache.maven.archiva.configuration.RepositoryConfiguration; -import org.apache.maven.artifact.Artifact; -import org.apache.maven.artifact.repository.ArtifactRepository; -import org.apache.maven.project.MavenProject; -import org.apache.maven.project.ProjectBuildingException; - -import java.util.List; - -/** - * ActiveManagedRepositories - * - * @author Joakim Erdfelt - * @version $Id$ - */ -public interface ActiveManagedRepositories -{ - String ROLE = ActiveManagedRepositories.class.getName(); - - /** - * Obtain the ArtifactRepository for the specified Repository ID. - * - * @param id the ID of the repository. - * @return the ArtifactRepository associated with the provided ID, or null if none found. - */ - public ArtifactRepository getArtifactRepository( String id ); - - /** - * Get the List of active managed repositories as a List of {@link ArtifactRepository} objects. - * - * @return the list of ArtifactRepository objects. - */ - public List /**/getAllArtifactRepositories(); - - RepositoryConfiguration getRepositoryConfiguration( String id ); - - /** - * Providing only a groupId, artifactId, and version, return the MavenProject that - * is found, in any managed repository. - * - * @param groupId the groupId to search for - * @param artifactId the artifactId to search for - * @param version the version to search for - * @return the MavenProject from the provided parameters. - * @throws ProjectBuildingException if there was a problem building the maven project object. - */ - MavenProject findProject( String groupId, String artifactId, String version ) - throws ProjectBuildingException; - - ManagedArtifact findArtifact( String groupId, String artifactId, String version ) - throws ProjectBuildingException; - - ManagedArtifact findArtifact( String groupId, String artifactId, String version, String type ); - - ManagedArtifact findArtifact( Artifact artifact ); - - /** - * Obtain the last data refresh timestamp for all Managed Repositories. - * - * @return the last data refresh timestamp. - */ - long getLastDataRefreshTime(); - - /** - * Tests to see if there needs to be a data refresh performed. - * - * The only valid scenario is if 1 or more repositories have not had their data refreshed ever. - * - * @return true if there needs to be a data refresh. - */ - boolean needsDataRefresh(); -} diff --git a/archiva-api/src/main/java/org/apache/maven/archiva/repositories/DefaultActiveManagedRepositories.java b/archiva-api/src/main/java/org/apache/maven/archiva/repositories/DefaultActiveManagedRepositories.java deleted file mode 100644 index b01ce97f8..000000000 --- a/archiva-api/src/main/java/org/apache/maven/archiva/repositories/DefaultActiveManagedRepositories.java +++ /dev/null @@ -1,352 +0,0 @@ -package org.apache.maven.archiva.repositories; - -/* - * 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.common.artifact.managed.ManagedArtifact; -import org.apache.maven.archiva.common.artifact.managed.ManagedArtifactTypes; -import org.apache.maven.archiva.common.artifact.managed.ManagedEjbArtifact; -import org.apache.maven.archiva.common.artifact.managed.ManagedJavaArtifact; -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.DiscovererStatistics; -import org.apache.maven.archiva.scheduler.executors.DataRefreshExecutor; -import org.apache.maven.artifact.Artifact; -import org.apache.maven.artifact.factory.ArtifactFactory; -import org.apache.maven.artifact.repository.ArtifactRepository; -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.cache.Cache; -import org.codehaus.plexus.logging.AbstractLogEnabled; -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.FileNotFoundException; -import java.io.IOException; -import java.util.Iterator; -import java.util.List; - -/** - * DefaultActiveManagedRepositories - * - * @author Joakim Erdfelt - * @version $Id$ - * @plexus.component role="org.apache.maven.archiva.repositories.ActiveManagedRepositories" - */ -public class DefaultActiveManagedRepositories - extends AbstractLogEnabled - implements ActiveManagedRepositories, Initializable, RegistryListener -{ - /** - * @plexus.requirement role-hint="artifactCache" - */ - private Cache artifactCache; - - /** - * @plexus.requirement - */ - private ArtifactFactory artifactFactory; - - /** - * @plexus.requirement - */ - private ArchivaConfiguration archivaConfiguration; - - /** - * @plexus.requirement - */ - private MavenProjectBuilder projectBuilder; - - /** - * @plexus.requirement role-hint="projectCache" - */ - private Cache projectCache; - - /** - * @plexus.requirement - */ - private ConfiguredRepositoryFactory repositoryFactory; - - private Configuration configuration; - - private ArtifactRepository localRepository; - - private List repositories; - - public Artifact createRelatedArtifact( Artifact artifact, String classifier, String type ) - { - String groupId = artifact.getGroupId(); - String artifactId = artifact.getArtifactId(); - String version = artifact.getVersion(); - String reltype = StringUtils.defaultIfEmpty( type, artifact.getType() ); - return artifactFactory.createArtifactWithClassifier( groupId, artifactId, version, reltype, classifier ); - } - - public ManagedArtifact findArtifact( Artifact artifact ) - { - ManagedArtifact managedArtifact = (ManagedArtifact) artifactCache.get( toKey( artifact ) ); - - if ( managedArtifact != null ) - { - return managedArtifact; - } - - boolean snapshot = artifact.isSnapshot(); - - for ( Iterator i = repositories.iterator(); i.hasNext(); ) - { - ArtifactRepository repository = (ArtifactRepository) i.next(); - if ( snapshot && !repository.getSnapshots().isEnabled() ) - { - // skip repo. - continue; - } - - String path = repository.pathOf( artifact ); - File f = new File( repository.getBasedir(), path ); - if ( f.exists() ) - { - // Found it. - managedArtifact = createManagedArtifact( repository, artifact, f ); - - artifactCache.put( toKey( artifact ), managedArtifact ); - - return managedArtifact; - } - } - - return null; - } - - public ManagedArtifact findArtifact( String groupId, String artifactId, String version ) - throws ProjectBuildingException - { - MavenProject project = findProject( groupId, artifactId, version ); - Model model = project.getModel(); - - return findArtifact( model.getGroupId(), model.getArtifactId(), model.getVersion(), model.getPackaging() ); - } - - public ManagedArtifact findArtifact( String groupId, String artifactId, String version, String type ) - { - Artifact artifact = artifactFactory.createBuildArtifact( groupId, artifactId, version, type ); - return findArtifact( artifact ); - } - - public MavenProject findProject( String groupId, String artifactId, String version ) - throws ProjectBuildingException - { - MavenProject project = (MavenProject) projectCache.get( toKey( groupId, artifactId, version ) ); - - if ( project != null ) - { - return project; - } - - Artifact projectArtifact = artifactFactory.createProjectArtifact( groupId, artifactId, version ); - - project = projectBuilder.buildFromRepository( projectArtifact, repositories, localRepository ); - - projectCache.put( toKey( groupId, artifactId, version ), project ); - - return project; - } - - public ArtifactRepository getArtifactRepository( String id ) - { - RepositoryConfiguration repoConfig = getRepositoryConfiguration( id ); - if ( repoConfig == null ) - { - return null; - } - - return repositoryFactory.createRepository( repoConfig ); - } - - public List getAllArtifactRepositories() - { - return repositoryFactory.createRepositories( configuration ); - } - - public RepositoryConfiguration getRepositoryConfiguration( String id ) - { - return this.configuration.getRepositoryById( id ); - } - - public void initialize() - throws InitializationException - { - Configuration config = archivaConfiguration.getConfiguration(); - archivaConfiguration.addChangeListener( this ); - configureSelf( config ); - } - - private String toKey( Artifact artifact ) - { - if ( artifact == null ) - { - return null; - } - - return toKey( artifact.getGroupId(), artifact.getArtifactId(), artifact.getVersion() ); - } - - private String toKey( String groupId, String artifactId, String version ) - { - return groupId + ":" + artifactId + ":" + version; - } - - private void configureSelf( Configuration config ) - { - this.configuration = config; - this.artifactCache.clear(); - this.projectCache.clear(); - - repositories = repositoryFactory.createRepositories( this.configuration ); - localRepository = repositoryFactory.createLocalRepository( this.configuration ); - - } - - private ManagedArtifact createManagedArtifact( ArtifactRepository repository, Artifact artifact, File f ) - { - artifact.isSnapshot(); - String path = repository.pathOf( artifact ); - - switch ( ManagedArtifactTypes.whichType( artifact.getType() ) ) - { - case ManagedArtifactTypes.EJB: - ManagedEjbArtifact managedEjbArtifact = new ManagedEjbArtifact( repository.getId(), artifact, path ); - - managedEjbArtifact.setJavadocPath( pathToRelatedArtifact( repository, artifact, "javadoc", "jar" ) ); - managedEjbArtifact.setSourcesPath( pathToRelatedArtifact( repository, artifact, "sources", "jar" ) ); - managedEjbArtifact.setClientPath( pathToRelatedArtifact( repository, artifact, "client", "jar" ) ); - - return managedEjbArtifact; - - case ManagedArtifactTypes.JAVA: - ManagedJavaArtifact managedJavaArtifact = new ManagedJavaArtifact( repository.getId(), artifact, path ); - - managedJavaArtifact.setJavadocPath( pathToRelatedArtifact( repository, artifact, "javadoc", "jar" ) ); - managedJavaArtifact.setSourcesPath( pathToRelatedArtifact( repository, artifact, "sources", "jar" ) ); - - return managedJavaArtifact; - - case ManagedArtifactTypes.GENERIC: - default: - return new ManagedArtifact( repository.getId(), artifact, path ); - } - } - - private String pathToRelatedArtifact( ArtifactRepository repository, Artifact artifact, String classifier, - String type ) - { - Artifact relatedArtifact = createRelatedArtifact( artifact, classifier, type ); - - relatedArtifact.isSnapshot(); - String path = repository.pathOf( relatedArtifact ); - - File relatedFile = new File( repository.getBasedir(), path ); - if ( !relatedFile.exists() ) - { - // Return null to set the ManagedArtifact related path to empty. - return null; - } - - return path; - } - - public void beforeConfigurationChange( Registry registry, String propertyName, Object propertyValue ) - { - // nothing to do - } - - public void afterConfigurationChange( Registry registry, String propertyName, Object propertyValue ) - { - if ( propertyName.startsWith( "repositories" ) || propertyName.startsWith( "localRepository" ) ) - { - getLogger().debug( - "Triggering managed repository configuration change with " + propertyName + " set to " - + propertyValue ); - configureSelf( archivaConfiguration.getConfiguration() ); - } - else - { - getLogger().debug( "Not triggering managed repository configuration change with " + propertyName ); - } - } - - public long getLastDataRefreshTime() - { - long lastDataRefreshTime = 0; - - for ( Iterator i = getAllArtifactRepositories().iterator(); i.hasNext(); ) - { - ArtifactRepository repository = (ArtifactRepository) i.next(); - - DiscovererStatistics stats = new DiscovererStatistics( repository ); - try - { - stats.load( DataRefreshExecutor.DATAREFRESH_FILE ); - if ( stats.getTimestampFinished() > lastDataRefreshTime ) - { - lastDataRefreshTime = stats.getTimestampFinished(); - } - } - catch ( FileNotFoundException e) - { - getLogger().info( - "No previous datarefresh timestamp available, as " - + DataRefreshExecutor.DATAREFRESH_FILE + " has never been generated." ); - } - catch ( IOException e ) - { - getLogger().warn( - "Unable to load " + DataRefreshExecutor.DATAREFRESH_FILE - + " to determine last refresh timestamp: " + e.getMessage(), e ); - } - } - - return lastDataRefreshTime; - } - - public boolean needsDataRefresh() - { - for ( Iterator i = getAllArtifactRepositories().iterator(); i.hasNext(); ) - { - ArtifactRepository repository = (ArtifactRepository) i.next(); - - DiscovererStatistics stats = new DiscovererStatistics( repository ); - if ( stats.getTimestampFinished() <= 0 ) - { - // Found a repository that has NEVER had it's data walked. - return true; - } - } - - return false; - } -} diff --git a/archiva-api/src/test/java/org/apache/maven/archiva/repositories/DefaultActiveManagedRepositoriesTest.java b/archiva-api/src/test/java/org/apache/maven/archiva/repositories/DefaultActiveManagedRepositoriesTest.java deleted file mode 100644 index f4e89eadf..000000000 --- a/archiva-api/src/test/java/org/apache/maven/archiva/repositories/DefaultActiveManagedRepositoriesTest.java +++ /dev/null @@ -1,205 +0,0 @@ -package org.apache.maven.archiva.repositories; - -/* - * 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.artifact.managed.ManagedArtifact; -import org.apache.maven.archiva.common.artifact.managed.ManagedEjbArtifact; -import org.apache.maven.archiva.common.artifact.managed.ManagedJavaArtifact; -import org.codehaus.plexus.PlexusTestCase; - -/** - * DefaultActiveManagedRepositoriesTest - * - * @author Joakim Erdfelt - * @version $Id$ - */ -public class DefaultActiveManagedRepositoriesTest - extends PlexusTestCase -{ - private ActiveManagedRepositories managedRepos; - - protected void setUp() - throws Exception - { - super.setUp(); - - managedRepos = (ActiveManagedRepositories) lookup( ActiveManagedRepositories.ROLE ); - } - - /** - * Test a simple java find artifact with extras (sources / javadoc). - */ - public void testFindArtifactJavaWithExtras() - { - ManagedArtifact artifact = managedRepos.findArtifact( "geronimo", "daytrader-wsappclient", "1.1", "jar" ); - assertNotNull( artifact ); - - if ( !( artifact instanceof ManagedJavaArtifact ) ) - { - fail( "Expected artifact to be type <" + ManagedJavaArtifact.class.getName() + "> but was actually <" + - artifact.getClass().getName() + ">." ); - } - - ManagedJavaArtifact javaArtifact = (ManagedJavaArtifact) artifact; - - assertEquals( "test", javaArtifact.getRepositoryId() ); - - String pathPrefix = "geronimo/daytrader-wsappclient/1.1"; - String pathArtifactVersion = "daytrader-wsappclient-1.1"; - - assertEquals( pathPrefix + "/" + pathArtifactVersion + ".jar", javaArtifact.getPath() ); - assertEquals( pathPrefix + "/" + pathArtifactVersion + "-javadoc.jar", javaArtifact.getJavadocPath() ); - assertEquals( pathPrefix + "/" + pathArtifactVersion + "-sources.jar", javaArtifact.getSourcesPath() ); - } - - /** - * Test a simple java find artifact with no extras. - */ - public void testFindArtifactJavaSimple() - { - ManagedArtifact artifact = managedRepos.findArtifact( "geronimo", "daytrader-streamer", "1.1", "jar" ); - assertNotNull( artifact ); - - if ( !( artifact instanceof ManagedJavaArtifact ) ) - { - fail( "Expected artifact to be type <" + ManagedJavaArtifact.class.getName() + "> but was actually <" + - artifact.getClass().getName() + ">." ); - } - - ManagedJavaArtifact javaArtifact = (ManagedJavaArtifact) artifact; - - assertEquals( "test", javaArtifact.getRepositoryId() ); - - String pathPrefix = "geronimo/daytrader-streamer/1.1"; - String pathArtifactVersion = "daytrader-streamer-1.1"; - - assertEquals( pathPrefix + "/" + pathArtifactVersion + ".jar", javaArtifact.getPath() ); - assertNull( "should have no javadoc jar.", javaArtifact.getJavadocPath() ); - assertNull( "should have no sources jar.", javaArtifact.getSourcesPath() ); - } - - /** - * Test a java find of a snapshot artifact that uses a timestamp format. - */ - public void testFindArtifactJavaSnapshotTimestamp() - { - ManagedArtifact artifact = managedRepos.findArtifact( "org.apache.geronimo.daytrader", "daytrader-wsappclient", - "2.0-20070201.183230-5", "jar" ); - assertNotNull( artifact ); - - if ( !( artifact instanceof ManagedJavaArtifact ) ) - { - fail( "Expected artifact to be type <" + ManagedJavaArtifact.class.getName() + "> but was actually <" + - artifact.getClass().getName() + ">." ); - } - - ManagedJavaArtifact javaArtifact = (ManagedJavaArtifact) artifact; - - assertEquals( "test", javaArtifact.getRepositoryId() ); - - String pathPrefix = "org/apache/geronimo/daytrader/daytrader-wsappclient/2.0-SNAPSHOT"; - String pathArtifactVersion = "daytrader-wsappclient-2.0-20070201.183230-5"; - - assertEquals( pathPrefix + "/" + pathArtifactVersion + ".jar", javaArtifact.getPath() ); - assertEquals( pathPrefix + "/" + pathArtifactVersion + "-javadoc.jar", javaArtifact.getJavadocPath() ); - assertEquals( pathPrefix + "/" + pathArtifactVersion + "-sources.jar", javaArtifact.getSourcesPath() ); - } - - /** - * Test a java find of a snapshot artifact. - */ - public void testFindArtifactJavaSnapshot() - { - ManagedArtifact artifact = managedRepos.findArtifact( "org.apache.geronimo.daytrader", "daytrader-wsappclient", - "2.0-SNAPSHOT", "jar" ); - assertNotNull( artifact ); - - if ( !( artifact instanceof ManagedJavaArtifact ) ) - { - fail( "Expected artifact to be type <" + ManagedJavaArtifact.class.getName() + "> but was actually <" + - artifact.getClass().getName() + ">." ); - } - - ManagedJavaArtifact javaArtifact = (ManagedJavaArtifact) artifact; - - assertEquals( "test", javaArtifact.getRepositoryId() ); - - String pathPrefix = "org/apache/geronimo/daytrader/daytrader-wsappclient/2.0-SNAPSHOT"; - String pathArtifactVersion = "daytrader-wsappclient-2.0-SNAPSHOT"; - - assertEquals( pathPrefix + "/" + pathArtifactVersion + ".jar", javaArtifact.getPath() ); - assertEquals( pathPrefix + "/" + pathArtifactVersion + "-javadoc.jar", javaArtifact.getJavadocPath() ); - assertEquals( pathPrefix + "/" + pathArtifactVersion + "-sources.jar", javaArtifact.getSourcesPath() ); - } - - /** - * Test a ejb find of a snapshot artifact that also has a client jar available. - */ - public void testFindArtifactEjbSnapshot() - { - ManagedArtifact artifact = - managedRepos.findArtifact( "org.apache.geronimo.daytrader", "daytrader-ejb", "2.0-SNAPSHOT", "ejb" ); - assertNotNull( artifact ); - - if ( !( artifact instanceof ManagedEjbArtifact ) ) - { - fail( "Expected artifact to be type <" + ManagedEjbArtifact.class.getName() + "> but was actually <" + - artifact.getClass().getName() + ">." ); - } - - ManagedEjbArtifact ejbArtifact = (ManagedEjbArtifact) artifact; - - assertEquals( "test", ejbArtifact.getRepositoryId() ); - - String pathPrefix = "org/apache/geronimo/daytrader/daytrader-ejb/2.0-SNAPSHOT"; - String pathArtifactVersion = "daytrader-ejb-2.0-SNAPSHOT"; - - assertEquals( pathPrefix + "/" + pathArtifactVersion + ".jar", ejbArtifact.getPath() ); - assertEquals( pathPrefix + "/" + pathArtifactVersion + "-client.jar", ejbArtifact.getClientPath() ); - assertEquals( pathPrefix + "/" + pathArtifactVersion + "-javadoc.jar", ejbArtifact.getJavadocPath() ); - assertEquals( pathPrefix + "/" + pathArtifactVersion + "-sources.jar", ejbArtifact.getSourcesPath() ); - } - - /** - * Test a simple java find artifact with no extras. - */ - public void testFindArtifactWar() - { - ManagedArtifact artifact = managedRepos.findArtifact( "geronimo", "daytrader-web", "1.1", "war" ); - assertNotNull( artifact ); - - if ( !( artifact instanceof ManagedJavaArtifact ) ) - { - fail( "Expected artifact to be type <" + ManagedJavaArtifact.class.getName() + "> but was actually <" + - artifact.getClass().getName() + ">." ); - } - - ManagedJavaArtifact warArtifact = (ManagedJavaArtifact) artifact; - - assertEquals( "test", warArtifact.getRepositoryId() ); - - String pathPrefix = "geronimo/daytrader-web/1.1"; - String pathArtifactVersion = "daytrader-web-1.1"; - - assertEquals( pathPrefix + "/" + pathArtifactVersion + ".war", warArtifact.getPath() ); - assertEquals( pathPrefix + "/" + pathArtifactVersion + "-javadoc.jar", warArtifact.getJavadocPath() ); - assertNull( "should have no sources jar.", warArtifact.getSourcesPath() ); - } -} 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 @@ org.codehaus.plexus plexus-component-api + commons-lang commons-lang 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 Joakim Erdfelt - * @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 Brett Porter - * @author Joakim Erdfelt - * @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/LayoutArtifactBuilder.java b/archiva-base/archiva-common/src/main/java/org/apache/maven/archiva/common/artifact/builder/LayoutArtifactBuilder.java deleted file mode 100644 index 494a4a7c1..000000000 --- a/archiva-base/archiva-common/src/main/java/org/apache/maven/archiva/common/artifact/builder/LayoutArtifactBuilder.java +++ /dev/null @@ -1,36 +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.repository.layout.ArtifactRepositoryLayout; - -/** - * LayoutArtifactBuilder - * - * @author Joakim Erdfelt - * @version $Id$ - * - * @todo this concept should really exist inside of the {@link ArtifactRepositoryLayout} object in maven itself. - */ -public interface LayoutArtifactBuilder -{ - public Artifact build( String pathToArtifact ) throws BuilderException; -} 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 Joakim Erdfelt - * @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 Joakim Erdfelt - * @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 Joakim Erdfelt - * @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 Joakim Erdfelt - * @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 Joakim Erdfelt - * @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 similarity index 97% rename from archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/version/VersionUtil.java rename to 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 Joakim Erdfelt - * @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 Joakim Erdfelt - * @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 Brett Porter - * @author Joakim Erdfelt - * @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 Joakim Erdfelt - * @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 @@ - fileProcessors + repositoryScanning 1.0.0+ - FileProcessor - * + RepositoryScanningConfiguration + 1 - The file processors setup. + The repository scanning configuration. - + + databaseScanning + 1.0.0+ + + DatabaseScanningConfiguration + 1 + + + The database scanning configuration. + + + + + + 1.0.0+ + + + - FileProcessor + RepositoryScanningConfiguration 1.0.0+ - id + fileTypes 1.0.0+ true - String + + FileType + * + - The ID for this file processor + The FileTypes for the repository scanning configuration. - patterns + goodConsumers 1.0.0+ true @@ -455,11 +530,11 @@ * - The list of patterns for this processor. + The list of consumers for good content. - consumers + badConsumers 1.0.0+ true @@ -471,6 +546,111 @@ + + + 1.0.0+ + + + + + + FileType + 1.0.0+ + The FileType object + + + id + 1.0.0+ + true + String + + + patterns + 1.0.0+ + true + + String + * + + + + + + DatabaseScanningConfiguration + 1.0.0+ + + The scanning configuration for unprocessed ArchivaArtifact database objects. + + + + cronExpression + 1.0.0+ + String + When to run the database scanning mechanism. Default is every hour on the hour. + 0 0 * * * ? + + + unprocessedConsumers + 1.0.0+ + true + + String + * + + + The list of consumers for the unprocessed ArchivaArtifact database objects. + + + + processedConsumers + 1.0.0+ + true + + String + * + + + The list of consumers for previously processed ArchivaArtifact database objects. + + + 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 @@ false + internal @@ -57,163 +58,106 @@ never not-found - javax/** + javax/** + + + example + http + proxy.mycompany.com + 8080 + myself + mypass + - - - artifacts - - **/*.pom - **/*.jar - **/*.ear - **/*.war - **/*.car - **/*.sar - **/*.mar - **/*.rar - **/*.dtd - **/*.tld - **/*.tar.gz - **/*.tar.bz2 - **/*.zip - - - artifact-to-db - artifact-to-lucene - artifact-create-missing-checksums - - - - projects - - **/*.pom - - - project-to-db - - - - repository-metadata - - **/maven-metadata.xml - - - repository-metadata-to-db - repository-metadata-version-mismatch - - - - checksums - - **/*.sha1 - **/*.md5 - - - checksum-validate - - - - signatures - - **/*.asc - - - signature-validate - - - - archives - - **/*.jar - **/*.ear - **/*.war - **/*.car - **/*.sar - **/*.mar - **/*.rar - **/*.tar.gz - **/*.tar.bz2 - **/*.zip - **/*.nbm - - - archive-toc-to-lucene - - - - bytecode - - **/*.jar - **/*.war - **/*.car - **/*.sar - **/*.mar - **/*.rar - - - bytecode-to-db - bytecode-to-lucene - - - - xmls - - **/*.pom - **/*.xml - **/*.xsd - - - xml-to-lucene - - - - text - - **/*.txt - **/*.TXT - **/*.block - **/*.config - - - - ignored - - **/.htaccess - **/KEYS - **/*.rb - **/*.sh - **/.svn/** - **/.DAV/** - - - ignored - - - - auto-remove - - **/*.bak - **/*~ - **/*- - - - auto-remove - - - - auto-rename - - **/*.distribution-tgz - **/*.distribution-zip - **/*.plugin - - - auto-rename - - - + + + + + artifacts + + **/*.pom + **/*.jar + **/*.ear + **/*.war + **/*.car + **/*.sar + **/*.mar + **/*.rar + **/*.dtd + **/*.tld + **/*.tar.gz + **/*.tar.bz2 + **/*.zip + + + + indexable-content + + **/*.txt + **/*.TXT + **/*.block + **/*.config + **/*.pom + **/*.xml + **/*.xsd + **/*.dtd + **/*.tld + + + + auto-remove + + **/*.bak + **/*~ + **/*- + + + + ignored + + **/.htaccess + **/KEYS + **/*.rb + **/*.sh + **/.svn/** + **/.DAV/** + + + + + update-db-artifact + create-missing-checksums + update-db-repository-metadata + validate-checksum + validate-signature + index-content + auto-remove + auto-rename + + + update-db-bad-content + + + + + 0 0 * * ? + + index-artifact + update-db-project + validate-repository-metadata + index-archive-toc + update-db-bytecode-stats + index-public-methods + + + not-present-remove-db-artifact + not-present-remove-db-project + not-present-remove-indexed + + + 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 @@ false + internal @@ -76,163 +77,106 @@ never not-found - javax/** + javax/** + + + example + http + proxy.mycompany.com + 8080 + myself + mypass + - - - artifacts - - **/*.pom - **/*.jar - **/*.ear - **/*.war - **/*.car - **/*.sar - **/*.mar - **/*.rar - **/*.dtd - **/*.tld - **/*.tar.gz - **/*.tar.bz2 - **/*.zip - - - artifact-to-db - artifact-to-lucene - artifact-create-missing-checksums - - - - projects - - **/*.pom - - - project-to-db - - - - repository-metadata - - **/maven-metadata.xml - - - repository-metadata-to-db - repository-metadata-version-mismatch - - - - checksums - - **/*.sha1 - **/*.md5 - - - checksum-validate - - - - signatures - - **/*.asc - - - signature-validate - - - - archives - - **/*.jar - **/*.ear - **/*.war - **/*.car - **/*.sar - **/*.mar - **/*.rar - **/*.tar.gz - **/*.tar.bz2 - **/*.zip - **/*.nbm - - - archive-toc-to-lucene - - - - bytecode - - **/*.jar - **/*.war - **/*.car - **/*.sar - **/*.mar - **/*.rar - - - bytecode-to-db - bytecode-to-lucene - - - - xmls - - **/*.pom - **/*.xml - **/*.xsd - - - xml-to-lucene - - - - text - - **/*.txt - **/*.TXT - **/*.block - **/*.config - - - - ignored - - **/.htaccess - **/KEYS - **/*.rb - **/*.sh - **/.svn/** - **/.DAV/** - - - ignored - - - - auto-remove - - **/*.bak - **/*~ - **/*- - - - auto-remove - - - - auto-rename - - **/*.distribution-tgz - **/*.distribution-zip - **/*.plugin - - - auto-rename - - - + + + + + artifacts + + **/*.pom + **/*.jar + **/*.ear + **/*.war + **/*.car + **/*.sar + **/*.mar + **/*.rar + **/*.dtd + **/*.tld + **/*.tar.gz + **/*.tar.bz2 + **/*.zip + + + + indexable-content + + **/*.txt + **/*.TXT + **/*.block + **/*.config + **/*.pom + **/*.xml + **/*.xsd + **/*.dtd + **/*.tld + + + + auto-remove + + **/*.bak + **/*~ + **/*- + + + + ignored + + **/.htaccess + **/KEYS + **/*.rb + **/*.sh + **/.svn/** + **/.DAV/** + + + + + update-db-artifact + create-missing-checksums + update-db-repository-metadata + validate-checksum + validate-signature + index-content + auto-remove + auto-rename + + + update-db-bad-content + + + + + 0 0 * * ? + + index-artifact + update-db-project + validate-repository-metadata + index-archive-toc + update-db-bytecode-stats + index-public-methods + + + not-present-remove-db-artifact + not-present-remove-db-project + not-present-remove-indexed + + + 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 @@ jar - + + org.apache.maven.archiva + archiva-model + 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 Joakim Erdfelt + * @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 Joakim Erdfelt + * @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(); + + /** + *

+ * Event that triggers at the beginning of a scan. + *

+ * + *

+ * 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. + *

+ */ + public void beginScan(); + + /** + *

+ * Event indicating an {@link ArchivaArtifact} is to be processed by this consumer. + *

+ * + *

+ * 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. + *

+ * + * @param file the file to process. + * @throws ConsumerException if there was a problem processing this file. + */ + public void processArchivaArtifact( ArchivaArtifact artifact ) throws ConsumerException; + + /** + *

+ * Event that triggers on the completion of a scan. + *

+ * + *

+ * 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. + *

+ */ + 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 Joakim Erdfelt + * @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 similarity index 74% rename from archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/consumer/ConsumerException.java rename to 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 Joakim Erdfelt + * @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 Joakim Erdfelt + * @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: "**/*.pom") + */ + public List getIncludes(); + + /** + * Get the list of excluded file patterns for this consumer. + * + * @return the list of {@link String} patterns. (example: "**/*.pom") - (can be null for no exclusions) + */ + public List getExcludes(); + + /** + *

+ * Event that triggers at the beginning of a scan. + *

+ * + *

+ * 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. + *

+ * + * @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; + + /** + *

+ * Event indicating a file is to be processed by this consumer. + *

+ * + *

+ * 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. + *

+ * + * @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; + + /** + *

+ * Event that triggers on the completion of a scan. + *

+ * + *

+ * 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. + *

+ */ + 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 @@ jar - + + org.apache.maven.archiva + archiva-configuration + + + org.apache.maven.archiva + archiva-consumer-api + + + org.apache.maven.archiva + archiva-repository-layer + + + org.codehaus.plexus + plexus-digest + 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 Joakim Erdfelt + * @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 Joakim Erdfelt + * @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 @@ jar - + + org.apache.maven.archiva + archiva-database + + + org.apache.maven.archiva + archiva-configuration + + + org.apache.maven.archiva + archiva-consumer-api + + + org.apache.maven.archiva + archiva-repository-layer + 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 Joakim Erdfelt + * @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 @@ jar - + + org.apache.maven.archiva + archiva-indexer + + + org.apache.maven.archiva + archiva-configuration + + + org.apache.maven.archiva + archiva-consumer-api + + + org.apache.maven.archiva + archiva-repository-layer + diff --git a/archiva-api/src/main/java/org/apache/maven/archiva/consumers/IndexArtifactConsumer.java b/archiva-base/archiva-consumers/archiva-lucene-consumers/src/main/java/org/apache/maven/archiva/consumers/lucene/IndexArtifactConsumer.java similarity index 98% rename from archiva-api/src/main/java/org/apache/maven/archiva/consumers/IndexArtifactConsumer.java rename to archiva-base/archiva-consumers/archiva-lucene-consumers/src/main/java/org/apache/maven/archiva/consumers/lucene/IndexArtifactConsumer.java index f89bd5109..444be00f7 100644 --- a/archiva-api/src/main/java/org/apache/maven/archiva/consumers/IndexArtifactConsumer.java +++ b/archiva-base/archiva-consumers/archiva-lucene-consumers/src/main/java/org/apache/maven/archiva/consumers/lucene/IndexArtifactConsumer.java @@ -1,4 +1,4 @@ -package org.apache.maven.archiva.consumers; +package org.apache.maven.archiva.consumers.lucene; /* * Licensed to the Apache Software Foundation (ASF) under one 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 Joakim Erdfelt + * @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 @@ archiva-consumer-api archiva-core-consumers + 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 @@ Archiva Base :: Indexer - org.apache.maven - maven-artifact + org.apache.maven.archiva + archiva-configuration - org.apache.maven - maven-artifact-manager - - - org.apache.maven - maven-project - - - org.codehaus.plexus.cache - plexus-cache-hashmap - - - - - org.apache.maven - maven-model + org.apache.maven.archiva + archiva-model org.apache.lucene @@ -68,10 +54,6 @@ org.codehaus.plexus plexus-digest - - org.apache.maven - maven-repository-metadata - commons-lang commons-lang 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 similarity index 51% rename from archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/RepositoryArtifactIndex.java rename to 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 Brett Porter */ -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/RepositoryArtifactIndexFactory.java b/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/RepositoryContentIndexFactory.java similarity index 57% rename from archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/RepositoryArtifactIndexFactory.java rename to archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/RepositoryContentIndexFactory.java index e57604104..fa80e2d8d 100644 --- a/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/RepositoryArtifactIndexFactory.java +++ b/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/RepositoryContentIndexFactory.java @@ -19,33 +19,36 @@ package org.apache.maven.archiva.indexer; * under the License. */ -import java.io.File; +import org.apache.maven.archiva.model.ArchivaRepository; /** * Obtain an index instance. * * @author Brett Porter */ -public interface RepositoryArtifactIndexFactory +public interface RepositoryContentIndexFactory { /** - * Plexus role. + * Method to create an instance of the bytecode index. + * + * @param repository the repository to create the content index from. + * @return the index instance */ - String ROLE = RepositoryArtifactIndexFactory.class.getName(); - + RepositoryContentIndex createBytecodeIndex( ArchivaRepository repository ); + /** - * Method to create an instance of the standard index. + * Method to create an instance of the file content index. * - * @param indexPath the path where the index will be created/updated + * @param repository the repository to create the file content index from. * @return the index instance */ - RepositoryArtifactIndex createStandardIndex( File indexPath ); + RepositoryContentIndex createFileContentIndex( ArchivaRepository repository ); /** - * Method to create an instance of the minimal index. + * Method to create an instance of the hashcode index. * - * @param indexPath the path where the index will be created/updated + * @param repository the repository to create the content index from. * @return the index instance */ - RepositoryArtifactIndex createMinimalIndex( File indexPath ); + 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 Joakim Erdfelt + * @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 Joakim Erdfelt + * @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 Joakim Erdfelt + * @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-indexer/src/main/java/org/apache/maven/archiva/indexer/bytecode/BytecodeKeys.java b/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/bytecode/BytecodeKeys.java new file mode 100644 index 000000000..5150d24f3 --- /dev/null +++ b/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/bytecode/BytecodeKeys.java @@ -0,0 +1,39 @@ +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.ArtifactKeys; + +/** + * BytecodeKeys + * + * @author Joakim Erdfelt + * @version $Id$ + */ +public class BytecodeKeys extends ArtifactKeys +{ + 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 Joakim Erdfelt + * @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 Joakim Erdfelt + * @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 Joakim Erdfelt + * @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 Joakim Erdfelt + * @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 Joakim Erdfelt + * @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 Joakim Erdfelt + * @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 Joakim Erdfelt + * @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 Joakim Erdfelt + * @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 Joakim Erdfelt + * @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 Joakim Erdfelt + * @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 Joakim Erdfelt + * @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 Joakim Erdfelt + * @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 similarity index 83% rename from archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/lucene/LuceneIndexRecordConverter.java rename to 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 Brett Porter */ -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 Joakim Erdfelt + * @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 Brett Porter - */ -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 Brett Porter - */ -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 Brett Porter - * @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 Brett Porter + */ +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 Brett Porter + * @author Joakim Erdfelt + * + * @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 similarity index 85% rename from archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/record/RepositoryIndexRecord.java rename to 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 Brett Porter */ -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 Brett Porter - */ -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 Joakim Erdfelt + * @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 Joakim Erdfelt + * @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 Joakim Erdfelt + * @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 Joakim Erdfelt + * @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 Brett Porter - */ -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 Brett Porter - */ -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/MinimalIndexRecordFields.java b/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/record/MinimalIndexRecordFields.java deleted file mode 100644 index ae3104c57..000000000 --- a/archiva-base/archiva-indexer/src/main/java/org/apache/maven/archiva/indexer/record/MinimalIndexRecordFields.java +++ /dev/null @@ -1,44 +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 Brett Porter - * @todo should be an enum - */ -public class MinimalIndexRecordFields -{ - 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"; - - public static final String CLASSES = "c"; - - private MinimalIndexRecordFields() - { - // No touchy! - } -} 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 Brett Porter - */ -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 Brett Porter - */ -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 groupId:artifactId:version. - */ - private List dependencies; - - /** - * A list of developers in the POM, each a string of the form id:name:email. - */ - 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 Brett Porter - * @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.(Ljava/lang/String;Ljava/lang/Throwable;)V +METHOD|org.apache.maven.archiva.common.ArchivaException.(Ljava/lang/String;)V +METHOD|org.apache.maven.archiva.common.utils.BaseFile.(Ljava/io/File;)V +METHOD|org.apache.maven.archiva.common.utils.BaseFile.(Ljava/io/File;Ljava/io/File;)V +METHOD|org.apache.maven.archiva.common.utils.BaseFile.(Ljava/io/File;Ljava/lang/String;)V +METHOD|org.apache.maven.archiva.common.utils.BaseFile.(Ljava/lang/String;)V +METHOD|org.apache.maven.archiva.common.utils.BaseFile.(Ljava/lang/String;Ljava/io/File;)V +METHOD|org.apache.maven.archiva.common.utils.BaseFile.(Ljava/lang/String;Ljava/lang/String;)V +METHOD|org.apache.maven.archiva.common.utils.BaseFile.(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.()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.()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.()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.()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.()V +METHOD|org.apache.maven.continuum.web.action.AboutAction.doDefault()Ljava/lang/String; +METHOD|org.apache.maven.continuum.web.action.AddMavenOneProjectAction.()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.()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.()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.()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.()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.()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.()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.()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.()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.()V +METHOD|org.apache.maven.continuum.web.action.CheckConfigurationAction.execute()Ljava/lang/String; +METHOD|org.apache.maven.continuum.web.action.ContinuumActionSupport.()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.()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.()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.()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.()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.()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.()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.()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.()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.()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.()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.()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.()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.()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.()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.(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.(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.(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.(Lorg/apache/maven/continuum/web/action/SurefireReportAction;Lorg/apache/maven/continuum/web/action/SurefireReportAction$1;)V +METHOD|org.apache.maven.continuum.web.action.SurefireReportAction.()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.()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.()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.()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.()V +METHOD|org.apache.maven.continuum.web.action.admin.ConfigurationAction.()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.()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.()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.()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.()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.()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.()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.()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.()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.()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.()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.()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.()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.()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.()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.()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.()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.()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.()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.()V +METHOD|org.apache.maven.continuum.web.checks.security.RoleProfileEnvironmentCheck.validateEnvironment(Ljava/util/List;)V +METHOD|org.apache.maven.continuum.web.components.Data.(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.(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.(Ljava/lang/String;)V +METHOD|org.apache.maven.continuum.web.exception.ContinuumActionException.(Ljava/lang/String;Ljava/lang/Throwable;)V +METHOD|org.apache.maven.continuum.web.filter.FilterToComponentProxy.()V +METHOD|org.apache.maven.continuum.web.interceptor.ForceContinuumConfigurationInterceptor.()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.()V +METHOD|org.apache.maven.continuum.web.model.BuildDefinitionSummary.()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.()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.()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.()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.()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.()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.()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.()V +METHOD|org.apache.maven.continuum.web.util.StateGenerator.generate(ILjava/lang/String;)Ljava/lang/String; +METHOD|org.apache.maven.continuum.web.util.WorkingCopyContentGenerator.()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.()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.()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.()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.()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.()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.()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.()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.()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.()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.()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.()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.()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.()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.()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.()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.()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.()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.()V +METHOD|org.apache.maven.plugins.help.DescribeMojo$PluginInfo.()V +METHOD|org.apache.maven.plugins.help.DescribeMojo$PluginInfo.(Lorg/apache/maven/plugins/help/DescribeMojo$1;)V +METHOD|org.apache.maven.plugins.help.DescribeMojo.()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.()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.()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.()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.(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.()V +METHOD|bsh.BSHAmbiguousName.(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.(I)V +METHOD|bsh.BSHArguments.getArguments(Lbsh/CallStack;Lbsh/Interpreter;)[Ljava/lang/Object; +METHOD|bsh.BSHArrayDimensions.(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.(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.(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.(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.(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.(I)V +METHOD|bsh.BSHCastExpression.eval(Lbsh/CallStack;Lbsh/Interpreter;)Ljava/lang/Object; +METHOD|bsh.BSHClassDeclaration.(I)V +METHOD|bsh.BSHClassDeclaration.eval(Lbsh/CallStack;Lbsh/Interpreter;)Ljava/lang/Object; +METHOD|bsh.BSHClassDeclaration.toString()Ljava/lang/String; +METHOD|bsh.BSHEnhancedForStatement.(I)V +METHOD|bsh.BSHEnhancedForStatement.eval(Lbsh/CallStack;Lbsh/Interpreter;)Ljava/lang/Object; +METHOD|bsh.BSHForStatement.(I)V +METHOD|bsh.BSHForStatement.eval(Lbsh/CallStack;Lbsh/Interpreter;)Ljava/lang/Object; +METHOD|bsh.BSHFormalComment.(I)V +METHOD|bsh.BSHFormalParameter.(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.()V +METHOD|bsh.BSHFormalParameters.(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.(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.(I)V +METHOD|bsh.BSHImportDeclaration.eval(Lbsh/CallStack;Lbsh/Interpreter;)Ljava/lang/Object; +METHOD|bsh.BSHLiteral.(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.(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.(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.(I)V +METHOD|bsh.BSHPackageDeclaration.eval(Lbsh/CallStack;Lbsh/Interpreter;)Ljava/lang/Object; +METHOD|bsh.BSHPrimaryExpression.(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.(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.(I)V +METHOD|bsh.BSHPrimitiveType.getType()Ljava/lang/Class; +METHOD|bsh.BSHReturnStatement.(I)V +METHOD|bsh.BSHReturnStatement.eval(Lbsh/CallStack;Lbsh/Interpreter;)Ljava/lang/Object; +METHOD|bsh.BSHReturnType.(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.(I)V +METHOD|bsh.BSHStatementExpressionList.eval(Lbsh/CallStack;Lbsh/Interpreter;)Ljava/lang/Object; +METHOD|bsh.BSHSwitchLabel.(I)V +METHOD|bsh.BSHSwitchLabel.eval(Lbsh/CallStack;Lbsh/Interpreter;)Ljava/lang/Object; +METHOD|bsh.BSHSwitchStatement.(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.(I)V +METHOD|bsh.BSHTernaryExpression.eval(Lbsh/CallStack;Lbsh/Interpreter;)Ljava/lang/Object; +METHOD|bsh.BSHThrowStatement.(I)V +METHOD|bsh.BSHThrowStatement.eval(Lbsh/CallStack;Lbsh/Interpreter;)Ljava/lang/Object; +METHOD|bsh.BSHTryStatement.(I)V +METHOD|bsh.BSHTryStatement.eval(Lbsh/CallStack;Lbsh/Interpreter;)Ljava/lang/Object; +METHOD|bsh.BSHType.(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.(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.(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.(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.(I)V +METHOD|bsh.BSHWhileStatement.eval(Lbsh/CallStack;Lbsh/Interpreter;)Ljava/lang/Object; +METHOD|bsh.BlockNameSpace.(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.(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.()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.()V +METHOD|bsh.BshIterator.next()Ljava/lang/Object; +METHOD|bsh.BshIterator.hasNext()Z +METHOD|bsh.BshMethod.(Lbsh/BSHMethodDeclaration;Lbsh/NameSpace;Lbsh/Modifiers;)V +METHOD|bsh.BshMethod.(Ljava/lang/String;Ljava/lang/Class;[Ljava/lang/String;[Ljava/lang/Class;Lbsh/BSHBlock;Lbsh/NameSpace;Lbsh/Modifiers;)V +METHOD|bsh.BshMethod.(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.()V +METHOD|bsh.CallStack.(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.(Ljava/lang/String;)V +METHOD|bsh.Capabilities.()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.()V +METHOD|bsh.ClassGenerator.()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.(I)V +METHOD|bsh.ClassGeneratorImpl$ClassNodeFilter.isVisible(Lbsh/SimpleNode;)Z +METHOD|bsh.ClassGeneratorImpl$ClassNodeFilter.isStatic(Lbsh/SimpleNode;)Z +METHOD|bsh.ClassGeneratorImpl$ClassNodeFilter.()V +METHOD|bsh.ClassGeneratorImpl.()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.()V +METHOD|bsh.ClassGeneratorUtil$ConstructorArgs.(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.()V +METHOD|bsh.ClassGeneratorUtil.(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.(Ljava/lang/Class;)V +METHOD|bsh.ClassIdentifier.getTargetClass()Ljava/lang/Class; +METHOD|bsh.ClassIdentifier.toString()Ljava/lang/String; +METHOD|bsh.ClassPathException.(Ljava/lang/String;)V +METHOD|bsh.CollectionManager$1.(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.(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.()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.(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.()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.(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.(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.()V +METHOD|bsh.ExternalNameSpace.(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.(Ljava/io/InputStream;)V +METHOD|bsh.Interpreter$1.available()I +METHOD|bsh.Interpreter.(Ljava/io/Reader;Ljava/io/PrintStream;Ljava/io/PrintStream;ZLbsh/NameSpace;Lbsh/Interpreter;Ljava/lang/String;)V +METHOD|bsh.Interpreter.(Ljava/io/Reader;Ljava/io/PrintStream;Ljava/io/PrintStream;ZLbsh/NameSpace;)V +METHOD|bsh.Interpreter.(Ljava/io/Reader;Ljava/io/PrintStream;Ljava/io/PrintStream;Z)V +METHOD|bsh.Interpreter.(Lbsh/ConsoleInterface;Lbsh/NameSpace;)V +METHOD|bsh.Interpreter.(Lbsh/ConsoleInterface;)V +METHOD|bsh.Interpreter.()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.()V +METHOD|bsh.InterpreterError.(Ljava/lang/String;)V +METHOD|bsh.JJTParserState.()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.(Ljava/io/Reader;III)V +METHOD|bsh.JavaCharStream.(Ljava/io/Reader;II)V +METHOD|bsh.JavaCharStream.(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.(Ljava/io/InputStream;III)V +METHOD|bsh.JavaCharStream.(Ljava/io/InputStream;II)V +METHOD|bsh.JavaCharStream.(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.(Lbsh/NameSpace;Ljava/lang/String;)V +METHOD|bsh.LHS.(Lbsh/NameSpace;Ljava/lang/String;Z)V +METHOD|bsh.LHS.(Ljava/lang/reflect/Field;)V +METHOD|bsh.LHS.(Ljava/lang/Object;Ljava/lang/reflect/Field;)V +METHOD|bsh.LHS.(Ljava/lang/Object;Ljava/lang/String;)V +METHOD|bsh.LHS.(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.()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.(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.()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.(Lbsh/NameSpace;Ljava/lang/String;)V +METHOD|bsh.NameSpace.(Lbsh/BshClassManager;Ljava/lang/String;)V +METHOD|bsh.NameSpace.(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.()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.(Lbsh/Token;[[I[Ljava/lang/String;)V +METHOD|bsh.ParseException.()V +METHOD|bsh.ParseException.(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.()V +METHOD|bsh.Parser$LookaheadSuccess.(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.(Ljava/io/InputStream;)V +METHOD|bsh.Parser.ReInit(Ljava/io/InputStream;)V +METHOD|bsh.Parser.(Ljava/io/Reader;)V +METHOD|bsh.Parser.ReInit(Ljava/io/Reader;)V +METHOD|bsh.Parser.(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.()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.(Lbsh/JavaCharStream;)V +METHOD|bsh.ParserTokenManager.(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.()V +METHOD|bsh.ParserTreeConstants.()V +METHOD|bsh.Primitive$Special.()V +METHOD|bsh.Primitive$Special.()V +METHOD|bsh.Primitive.(Ljava/lang/Object;)V +METHOD|bsh.Primitive.(Z)V +METHOD|bsh.Primitive.(B)V +METHOD|bsh.Primitive.(S)V +METHOD|bsh.Primitive.(C)V +METHOD|bsh.Primitive.(I)V +METHOD|bsh.Primitive.(J)V +METHOD|bsh.Primitive.(F)V +METHOD|bsh.Primitive.(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.()V +METHOD|bsh.Reflect.()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.()V +METHOD|bsh.ReflectError.(Ljava/lang/String;)V +METHOD|bsh.ReflectManager.()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.()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.(ILjava/lang/Object;Lbsh/SimpleNode;)V +METHOD|bsh.SimpleNode$1.(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.(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.()V +METHOD|bsh.StringUtil.()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.(Ljava/lang/String;Ljava/lang/Throwable;Lbsh/SimpleNode;Lbsh/CallStack;Z)V +METHOD|bsh.TargetError.(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.(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.()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.()V +METHOD|bsh.TokenMgrError.(Ljava/lang/String;I)V +METHOD|bsh.TokenMgrError.(ZIIILjava/lang/String;CI)V +METHOD|bsh.Types.()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.()V +METHOD|bsh.UtilEvalError.()V +METHOD|bsh.UtilEvalError.(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.(Ljava/lang/String;Ljava/lang/Throwable;)V +METHOD|bsh.UtilTargetError.(Ljava/lang/Throwable;)V +METHOD|bsh.UtilTargetError.toEvalError(Ljava/lang/String;Lbsh/SimpleNode;Lbsh/CallStack;)Lbsh/EvalError; +METHOD|bsh.Variable.(Ljava/lang/String;Ljava/lang/Class;Lbsh/LHS;)V +METHOD|bsh.Variable.(Ljava/lang/String;Ljava/lang/Object;Lbsh/Modifiers;)V +METHOD|bsh.Variable.(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Object;Lbsh/Modifiers;)V +METHOD|bsh.Variable.(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.(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.(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.(Lbsh/BshClassManager;[Ljava/net/URL;)V +METHOD|bsh.classpath.BshClassLoader.(Lbsh/BshClassManager;Lbsh/classpath/BshClassPath;)V +METHOD|bsh.classpath.BshClassLoader.(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.()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.()V +METHOD|bsh.classpath.BshClassPath$ClassSource.getCode(Ljava/lang/String;)[B +METHOD|bsh.classpath.BshClassPath$DirClassSource.(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.([B)V +METHOD|bsh.classpath.BshClassPath$GeneratedClassSource.getCode(Ljava/lang/String;)[B +METHOD|bsh.classpath.BshClassPath$JarClassSource.(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.()V +METHOD|bsh.classpath.BshClassPath$UnqualifiedNameTable.add(Ljava/lang/String;)V +METHOD|bsh.classpath.BshClassPath.(Ljava/lang/String;)V +METHOD|bsh.classpath.BshClassPath.(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.()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.()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.(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.(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.()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.()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.()V +METHOD|bsh.org.objectweb.asm.ByteVector.()V +METHOD|bsh.org.objectweb.asm.ByteVector.(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.(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.()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.(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.()V +METHOD|bsh.org.objectweb.asm.Edge.()V +METHOD|bsh.org.objectweb.asm.Item.()V +METHOD|bsh.org.objectweb.asm.Item.(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.()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.(I)V +METHOD|bsh.org.objectweb.asm.Type.(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.()V +METHOD|bsh.reflect.ReflectManagerImpl.()V +METHOD|bsh.reflect.ReflectManagerImpl.setAccessible(Ljava/lang/Object;)Z +METHOD|bsh.servlet.BshServlet.()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.()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.(Ljava/lang/String;)V +METHOD|bsh.servlet.SimpleTemplate.(Ljava/io/Reader;)V +METHOD|bsh.servlet.SimpleTemplate.(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.()V +METHOD|bsh.util.AWTConsole$1.(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.(IILjava/io/InputStream;Ljava/io/OutputStream;)V +METHOD|bsh.util.AWTConsole.keyPressed(Ljava/awt/event/KeyEvent;)V +METHOD|bsh.util.AWTConsole.()V +METHOD|bsh.util.AWTConsole.(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.()V +METHOD|bsh.util.AWTDemoApplet.init()V +METHOD|bsh.util.AWTRemoteApplet.()V +METHOD|bsh.util.AWTRemoteApplet.init()V +METHOD|bsh.util.BeanShellBSFEngine.()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.()V +METHOD|bsh.util.BshCanvas.(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.(Lbsh/util/ClassBrowser;)V +METHOD|bsh.util.ClassBrowser$1.valueChanged(Ljavax/swing/event/TreeSelectionEvent;)V +METHOD|bsh.util.ClassBrowser$2.(Lbsh/util/ClassBrowser;)V +METHOD|bsh.util.ClassBrowser$2.valueChanged(Ljavax/swing/event/TreeSelectionEvent;)V +METHOD|bsh.util.ClassBrowser$PackageTree.(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.()V +METHOD|bsh.util.ClassBrowser.(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.()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.(I)V +METHOD|bsh.util.Httpd.run()V +METHOD|bsh.util.HttpdConnection.(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.(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.(Lbsh/util/JConsole;Ljava/lang/Object;)V +METHOD|bsh.util.JConsole$2.run()V +METHOD|bsh.util.JConsole$3.(Lbsh/util/JConsole;Ljavax/swing/Icon;)V +METHOD|bsh.util.JConsole$3.run()V +METHOD|bsh.util.JConsole$4.(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.(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.(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.()V +METHOD|bsh.util.JConsole.(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.()V +METHOD|bsh.util.JDemoApplet.init()V +METHOD|bsh.util.JRemoteApplet.()V +METHOD|bsh.util.JRemoteApplet.init()V +METHOD|bsh.util.NameCompletion.completeName(Ljava/lang/String;)[Ljava/lang/String; +METHOD|bsh.util.NameCompletionTable.()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.(Lbsh/NameSpace;I)V +METHOD|bsh.util.Sessiond.run()V +METHOD|bsh.util.SessiondConnection.(Lbsh/NameSpace;Ljava/net/Socket;)V +METHOD|bsh.util.SessiondConnection.run()V +METHOD|bsh.util.Util.()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.()V +METHOD|com.beust.testng.TestNGAntTask.()V +METHOD|com.thoughtworks.qdox.JavaDocBuilder$1.(Lcom/thoughtworks/qdox/JavaDocBuilder;)V +METHOD|com.thoughtworks.qdox.JavaDocBuilder$1.visitFile(Ljava/io/File;)V +METHOD|com.thoughtworks.qdox.JavaDocBuilder.()V +METHOD|com.thoughtworks.qdox.JavaDocBuilder.(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.()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.(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.(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.(Ljava/lang/String;)V +METHOD|com.thoughtworks.qdox.directorywalker.SuffixFilter.filter(Ljava/io/File;)Z +METHOD|com.thoughtworks.qdox.junit.APITestCase$1.()V +METHOD|com.thoughtworks.qdox.junit.APITestCase$1.compare(Ljava/lang/Object;Ljava/lang/Object;)I +METHOD|com.thoughtworks.qdox.junit.APITestCase.()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.()V +METHOD|com.thoughtworks.qdox.model.AbstractInheritableJavaEntity.getTagByName(Ljava/lang/String;Z)Lcom/thoughtworks/qdox/model/DocletTag; +METHOD|com.thoughtworks.qdox.model.AbstractInheritableJavaEntity.(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.(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.(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.(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.(Ljava/lang/String;Ljava/lang/String;Lcom/thoughtworks/qdox/model/AbstractJavaEntity;I)V +METHOD|com.thoughtworks.qdox.model.DefaultDocletTag.(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.()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.()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.(Lcom/thoughtworks/qdox/model/JavaClassParent;I)V +METHOD|com.thoughtworks.qdox.model.JavaClass.(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.()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.(Lcom/thoughtworks/qdox/model/JavaClass;I)V +METHOD|com.thoughtworks.qdox.model.JavaField.(Lcom/thoughtworks/qdox/model/JavaClass;)V +METHOD|com.thoughtworks.qdox.model.JavaField.()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.(Lcom/thoughtworks/qdox/model/JavaClass;I)V +METHOD|com.thoughtworks.qdox.model.JavaMethod.(Lcom/thoughtworks/qdox/model/JavaClass;)V +METHOD|com.thoughtworks.qdox.model.JavaMethod.()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.(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.()V +METHOD|com.thoughtworks.qdox.model.JavaSource.()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.()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.()V +METHOD|com.thoughtworks.qdox.model.ModelBuilder.(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.(Ljava/lang/String;Ljava/lang/String;ILcom/thoughtworks/qdox/model/JavaClassParent;)V +METHOD|com.thoughtworks.qdox.model.Type.(Ljava/lang/String;ILcom/thoughtworks/qdox/model/JavaClassParent;)V +METHOD|com.thoughtworks.qdox.model.Type.(Ljava/lang/String;I)V +METHOD|com.thoughtworks.qdox.model.Type.(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.()V +METHOD|com.thoughtworks.qdox.model.util.TagParser.()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.(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.(Ljava/io/Reader;)V +METHOD|com.thoughtworks.qdox.parser.impl.JFlexLexer.(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.()V +METHOD|com.thoughtworks.qdox.parser.impl.Parser$Value.(Lcom/thoughtworks/qdox/parser/impl/Parser;)V +METHOD|com.thoughtworks.qdox.parser.impl.Parser$Value.(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.(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.()V +METHOD|com.thoughtworks.qdox.parser.structs.ClassDef.()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.()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.()V +METHOD|com.thoughtworks.qdox.parser.structs.MethodDef.()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.(Ljava/lang/String;Ljava/lang/String;I)V +METHOD|com.thoughtworks.qdox.parser.structs.TagDef.(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.(Ljava/lang/String;I)V +METHOD|org.testng.Assert.()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.()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.([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.()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.()V +METHOD|org.testng.JUnitConverterTask.()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.()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.()V +METHOD|org.testng.SuiteResult$1.()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.(Ljava/lang/String;Lorg/testng/ITestContext;)V +METHOD|org.testng.SuiteResult.(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.()V +METHOD|org.testng.SuiteRunner$DefaultTestRunnerFactory.([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.([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.(Lorg/testng/xml/XmlSuite;Ljava/lang/String;)V +METHOD|org.testng.SuiteRunner.(Lorg/testng/xml/XmlSuite;Ljava/lang/String;Z)V +METHOD|org.testng.SuiteRunner.(Lorg/testng/xml/XmlSuite;Ljava/lang/String;Lorg/testng/ITestRunnerFactory;)V +METHOD|org.testng.SuiteRunner.(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.(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.(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.(Ljava/lang/String;)V +METHOD|org.testng.TestException.(Ljava/lang/Throwable;)V +METHOD|org.testng.TestListenerAdapter.()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.()V +METHOD|org.testng.TestNG.(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.()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.()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.()V +METHOD|org.testng.TestNGException.(Ljava/lang/Throwable;)V +METHOD|org.testng.TestNGException.(Ljava/lang/String;)V +METHOD|org.testng.TestNGException.(Ljava/lang/String;Ljava/lang/Throwable;)V +METHOD|org.testng.TestRunner.(Lorg/testng/ISuite;Lorg/testng/xml/XmlTest;Ljava/lang/String;Lorg/testng/internal/annotations/IAnnotationFinder;)V +METHOD|org.testng.TestRunner.(Lorg/testng/ISuite;Lorg/testng/xml/XmlTest;Lorg/testng/internal/annotations/IAnnotationFinder;)V +METHOD|org.testng.TestRunner.(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.()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.([[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.()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.()V +METHOD|org.testng.internal.BaseTestMethod$1.compare(Ljava/lang/Object;Ljava/lang/Object;)I +METHOD|org.testng.internal.BaseTestMethod.(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.()V +METHOD|org.testng.internal.ClassHelper.()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.(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.([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.(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.()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.()V +METHOD|org.testng.internal.ExtraOutput.()V +METHOD|org.testng.internal.ExtraOutput.getParameterOutput()Ljava/util/List; +METHOD|org.testng.internal.FactoryMethod.(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.(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.()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.()V +METHOD|org.testng.internal.HostFile.(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.(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.(Ljava/lang/Throwable;)V +METHOD|org.testng.internal.InvokeMethodRunnable.(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.(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.(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.(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.()V +METHOD|org.testng.internal.JUnitUtils.()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.()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.()V +METHOD|org.testng.internal.MethodInheritance.()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.(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.(Z)V +METHOD|org.testng.internal.PackageUtils$1.accept(Ljava/io/File;)Z +METHOD|org.testng.internal.PackageUtils.()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.()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.()V +METHOD|org.testng.internal.ResultMap.()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.()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.(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.([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.()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.(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.()V +METHOD|org.testng.internal.TestNGMethodFinder.(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.(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V +METHOD|org.testng.internal.TestNGProperty.(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.(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.()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.()V +METHOD|org.testng.internal.XmlMethodSelector.()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.()V +METHOD|org.testng.internal.annotations.AnnotationConfiguration.()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.()V +METHOD|org.testng.internal.annotations.AnnotationHelper.()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.()V +METHOD|org.testng.internal.annotations.BaseBeforeAfter.()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.()V +METHOD|org.testng.internal.annotations.ConfigurationAnnotation.()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.()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.()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.()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.()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.(Lorg/testng/internal/annotations/JDK14AnnotationFinder;)V +METHOD|org.testng.internal.annotations.JDK14AnnotationFinder$1.visitFile(Ljava/io/File;)V +METHOD|org.testng.internal.annotations.JDK14AnnotationFinder.()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.()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.()V +METHOD|org.testng.internal.annotations.JDK15AnnotationFinder.()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.()V +METHOD|org.testng.internal.annotations.JDK15TagFactory.()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.()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.()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.()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.()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.(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.(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.(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.(I)V +METHOD|org.testng.internal.thread.PooledExecutorAdapter.awaitTermination(J)V +METHOD|org.testng.internal.thread.TestNGThread.(Ljava/lang/String;)V +METHOD|org.testng.internal.thread.TestNGThread.(Ljava/lang/Runnable;Ljava/lang/String;)V +METHOD|org.testng.internal.thread.ThreadExecutionException.(Ljava/lang/Throwable;)V +METHOD|org.testng.internal.thread.ThreadTimeoutException.(Ljava/lang/String;)V +METHOD|org.testng.internal.thread.ThreadTimeoutException.(Ljava/lang/Throwable;)V +METHOD|org.testng.internal.thread.ThreadTimeoutException.(Ljava/lang/String;Ljava/lang/Throwable;)V +METHOD|org.testng.internal.thread.ThreadUtil$ThreadFactoryImpl.(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.()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.([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.(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.(Lorg/testng/junit/JUnitMethodFinder;)V +METHOD|org.testng.junit.JUnitMethodFinder$1.accept(Ljava/lang/reflect/Method;)Z +METHOD|org.testng.junit.JUnitMethodFinder$2.(Lorg/testng/junit/JUnitMethodFinder;)V +METHOD|org.testng.junit.JUnitMethodFinder$2.accept(Ljava/lang/reflect/Method;)Z +METHOD|org.testng.junit.JUnitMethodFinder$3.(Lorg/testng/junit/JUnitMethodFinder;)V +METHOD|org.testng.junit.JUnitMethodFinder$3.accept(Ljava/lang/reflect/Method;)Z +METHOD|org.testng.junit.JUnitMethodFinder.(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.([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.()V +METHOD|org.testng.log.TextFormatter.()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.(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.()V +METHOD|org.testng.remote.ConnectionInfo.()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.(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.(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.(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.(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.()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.(I)V +METHOD|org.testng.remote.strprotocol.GenericMessage.(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.()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.(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.(Lorg/testng/remote/strprotocol/StringMessageSenderHelper;)V +METHOD|org.testng.remote.strprotocol.StringMessageSenderHelper$ReaderThread.run()V +METHOD|org.testng.remote.strprotocol.StringMessageSenderHelper.(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.(Ljava/lang/String;ZI)V +METHOD|org.testng.remote.strprotocol.SuiteMessage.(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.(ZLjava/lang/String;Ljava/lang/String;IIIII)V +METHOD|org.testng.remote.strprotocol.TestMessage.(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.(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;JJLjava/lang/String;)V +METHOD|org.testng.remote.strprotocol.TestResultMessage.(Ljava/lang/String;Ljava/lang/String;Lorg/testng/ITestResult;)V +METHOD|org.testng.remote.strprotocol.TestResultMessage.(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.()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.()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.()V +METHOD|org.testng.reporters.FailedReporter.(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.()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.()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.(Lorg/testng/reporters/SuiteHTMLReporter;)V +METHOD|org.testng.reporters.SuiteHTMLReporter$1.compare(Ljava/lang/Object;Ljava/lang/Object;)I +METHOD|org.testng.reporters.SuiteHTMLReporter.()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.(Ljava/lang/String;Ljava/lang/String;)V +METHOD|org.testng.reporters.TestHTMLReporter$1.()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.()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.()V +METHOD|org.testng.reporters.TextReporter.(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.()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.(Ljava/lang/String;)V +METHOD|org.testng.reporters.XMLStringBuffer.setDocType(Ljava/lang/String;)V +METHOD|org.testng.reporters.XMLStringBuffer.(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.()V +METHOD|org.testng.reporters.XMLUtils.()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.(Ljava/lang/String;[Ljava/lang/Class;)V +METHOD|org.testng.xml.LaunchSuite$ClassListSuite.(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.(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.(Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;Ljava/lang/String;Lorg/testng/xml/LaunchSuite$1;)V +METHOD|org.testng.xml.LaunchSuite$ExistingSuite.(Ljava/io/File;)V +METHOD|org.testng.xml.LaunchSuite$ExistingSuite.save(Ljava/io/File;)Ljava/io/File; +METHOD|org.testng.xml.LaunchSuite$MethodsSuite.(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.(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.(Ljava/lang/String;Ljava/io/InputStream;)V +METHOD|org.testng.xml.Parser.(Ljava/lang/String;)V +METHOD|org.testng.xml.Parser.(Ljava/io/InputStream;)V +METHOD|org.testng.xml.Parser.()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.()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.(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.(Ljava/lang/String;)V +METHOD|org.testng.xml.XmlClass.(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.()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.()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.()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.(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.()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.(Ljava/lang/String;)V +METHOD|org.apache.maven.wagon.CommandExecutionException.(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.()V +METHOD|org.apache.maven.wagon.ConnectionException.(Ljava/lang/String;)V +METHOD|org.apache.maven.wagon.ConnectionException.(Ljava/lang/String;Ljava/lang/Throwable;)V +METHOD|org.apache.maven.wagon.InputData.()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.(Ljava/lang/String;)V +METHOD|org.apache.maven.wagon.LazyFileOutputStream.(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.()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.()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.()V +METHOD|org.apache.maven.wagon.PermissionModeUtils.getUserMaskFor(Ljava/lang/String;)Ljava/lang/String; +METHOD|org.apache.maven.wagon.ResourceDoesNotExistException.(Ljava/lang/String;)V +METHOD|org.apache.maven.wagon.ResourceDoesNotExistException.(Ljava/lang/String;Ljava/lang/Throwable;)V +METHOD|org.apache.maven.wagon.StreamWagon.()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.()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.(Ljava/lang/String;)V +METHOD|org.apache.maven.wagon.TransferFailedException.(Ljava/lang/String;Ljava/lang/Throwable;)V +METHOD|org.apache.maven.wagon.UnsupportedProtocolException.(Ljava/lang/String;)V +METHOD|org.apache.maven.wagon.UnsupportedProtocolException.(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.()V +METHOD|org.apache.maven.wagon.WagonConstants.()V +METHOD|org.apache.maven.wagon.WagonException.(Ljava/lang/String;Ljava/lang/Throwable;)V +METHOD|org.apache.maven.wagon.WagonException.(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.()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.(Ljava/lang/String;)V +METHOD|org.apache.maven.wagon.authentication.AuthenticationException.(Ljava/lang/String;Ljava/lang/Throwable;)V +METHOD|org.apache.maven.wagon.authentication.AuthenticationInfo.()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.(Ljava/lang/String;)V +METHOD|org.apache.maven.wagon.authorization.AuthorizationException.(Ljava/lang/String;Ljava/lang/Throwable;)V +METHOD|org.apache.maven.wagon.events.SessionEvent.(Lorg/apache/maven/wagon/Wagon;Lorg/apache/maven/wagon/repository/Repository;I)V +METHOD|org.apache.maven.wagon.events.SessionEvent.(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.()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.(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.(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.()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.(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.()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.()V +METHOD|org.apache.maven.wagon.observers.ChecksumObserver.(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.()V +METHOD|org.apache.maven.wagon.observers.Debug.(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.()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.()V +METHOD|org.apache.maven.wagon.repository.Repository.(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.()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.()V +METHOD|org.apache.maven.wagon.resource.Resource.(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 Joakim Erdfelt + * @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 Joakim Erdfelt + * @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 Joakim Erdfelt + * @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 Joakim Erdfelt + * @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 Joakim Erdfelt + * @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 similarity index 85% rename from archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/AllTests.java rename to 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 Joakim Erdfelt + * @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 Joakim Erdfelt + * @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 Joakim Erdfelt + * @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 Joakim Erdfelt + * @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 Joakim Erdfelt + * @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 Joakim Erdfelt + * @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 Joakim Erdfelt + * @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 Brett Porter - * @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 Brett Porter - */ -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 Brett Porter - * @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 Brett Porter - */ -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-repository-layer/src/test/java/org/apache/maven/archiva/layer/AllTests.java b/archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/query/AllTests.java similarity index 84% rename from archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/layer/AllTests.java rename to archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/query/AllTests.java index c87f2710e..2ab011b96 100644 --- a/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/layer/AllTests.java +++ b/archiva-base/archiva-indexer/src/test/java/org/apache/maven/archiva/indexer/query/AllTests.java @@ -1,4 +1,4 @@ -package org.apache.maven.archiva.layer; +package org.apache.maven.archiva.indexer.query; /* * Licensed to the Apache Software Foundation (ASF) under one @@ -23,7 +23,7 @@ import junit.framework.Test; import junit.framework.TestSuite; /** - * AllTests + * AllTests - conveinence test suite for IDE users. * * @author Joakim Erdfelt * @version $Id$ @@ -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.indexer.query" ); //$JUnit-BEGIN$ - suite.addTestSuite( CachedRepositoryQueryLayerTest.class ); - suite.addTestSuite( DefaultRepositoryQueryLayerTest.class ); + 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 Brett Porter - */ -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 Brett Porter - */ -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 @@ + + + + org.apache.maven.archiva.configuration.ArchivaConfiguration + mock + org.apache.maven.archiva.indexer.MockConfiguration + + + org.apache.maven.archiva.indexer.RepositoryContentIndexFactory + lucene + org.apache.maven.archiva.indexer.lucene.LuceneRepositoryContentIndexFactory + Factory for Lucene repository content index instances. + + + org.apache.maven.archiva.configuration.ArchivaConfiguration + mock + configuration + + + + + 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 @@ + + + + org.apache.maven.archiva.configuration.ArchivaConfiguration + mock + org.apache.maven.archiva.indexer.MockConfiguration + + + org.apache.maven.archiva.indexer.RepositoryContentIndexFactory + lucene + org.apache.maven.archiva.indexer.lucene.LuceneRepositoryContentIndexFactory + Factory for Lucene repository content index instances. + + + org.apache.maven.archiva.configuration.ArchivaConfiguration + mock + configuration + + + + + 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 @@ + + + + org.apache.maven.archiva.configuration.ArchivaConfiguration + mock + org.apache.maven.archiva.indexer.MockConfiguration + + + org.apache.maven.archiva.indexer.RepositoryContentIndexFactory + lucene + org.apache.maven.archiva.indexer.lucene.LuceneRepositoryContentIndexFactory + Factory for Lucene repository content index instances. + + + org.apache.maven.archiva.configuration.ArchivaConfiguration + mock + configuration + + + + + 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 @@ + + + + org.apache.maven.archiva.configuration.ArchivaConfiguration + mock + org.apache.maven.archiva.indexer.MockConfiguration + + + org.apache.maven.archiva.indexer.RepositoryContentIndexFactory + lucene + org.apache.maven.archiva.indexer.lucene.LuceneRepositoryContentIndexFactory + Factory for Lucene repository content index instances. + + + org.apache.maven.archiva.configuration.ArchivaConfiguration + mock + configuration + + + + + 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 @@ + + + + org.apache.maven.archiva.configuration.ArchivaConfiguration + mock + org.apache.maven.archiva.indexer.MockConfiguration + + + org.apache.maven.archiva.indexer.RepositoryContentIndexFactory + lucene + org.apache.maven.archiva.indexer.lucene.LuceneRepositoryContentIndexFactory + Factory for Lucene repository content index instances. + + + org.apache.maven.archiva.configuration.ArchivaConfiguration + mock + configuration + + + + + 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 similarity index 57% rename from archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/ArchivaArtifact.java rename to 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 similarity index 69% rename from archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/layer/DefaultRepositoryQueryLayerTest.java rename to 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 Joakim Erdfelt + * @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 similarity index 80% rename from archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/ArchivaRepository.java rename to 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 Joakim Erdfelt + * @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 similarity index 98% rename from archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/RepositoryURL.java rename to 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 Joakim Erdfelt + * @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 @@ ArchivaArtifactModel 1.0.0+ + contentKey true @@ -349,15 +356,35 @@ - checksumBytecode + lastModified + false + 1.0.0+ + Date + true + + The Last Modified Timestamp of this artifact. + + + + size + false + 1.0.0+ + long + true + + The size of the artifact on disk. + + + + platform false 1.0.0+ String - false + true - 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") + java whenIndexed @@ -381,6 +408,66 @@ + + ArchivaArtifactJavaDetails + + org.apache.maven.archiva.model.ArchivaArtifactPlatformDetails + + 1.0.0+ + + + contentKey + true + 1.0.0+ + true + + RepositoryContent + 1 + + + The content key for this java artifact details. + + + + checksumBytecode + false + 1.0.0+ + String + false + + The SHA1 checksum for the bytecode in the artifact file. (Can be empty if + the artifact contains no bytecode) + + + + jdk + false + 1.0.0+ + String + false + + The JDK revision of the bytecode. (Can be empty if the artifact contains no bytecode) + + + + + + 1.0.0+ + + + + ArchivaRepositoryMetadata @@ -423,23 +510,33 @@ - whenIndexed + lastModified false 1.0.0+ Date - false + true - The timestamp when this artifact was indexed. + The Last Modified Timestamp of this artifact. + + + + size + false + 1.0.0+ + long + true + + The size of the artifact on disk. - lastUpdated + whenIndexed false 1.0.0+ Date false - the timestamp when this artifact was indexed. + The timestamp when this artifact was indexed. @@ -505,6 +602,26 @@ The declared packaging for this project model. + + name + false + 1.0.0+ + false + String + + The name of this project. + + + + description + false + 1.0.0+ + false + String + + The description of this project. + + origin false @@ -953,14 +1070,14 @@ groupId - 4.0.0 + 1.0.0+ String true artifactId - 4.0.0 + 1.0.0+ String true @@ -974,7 +1091,7 @@ connection - 1.0.0 + 1.0.0+ developerConnection - 1.0.0 + 1.0.0+ connection, but for developers, i.e. this scm connection will not be read only. @@ -996,7 +1113,7 @@ url - 1.0.0 + 1.0.0+ String @@ -1010,7 +1127,7 @@ id - 4.0.0 + 1.0.0+ settings.xml file, for example. @@ -1019,7 +1136,7 @@ name - 4.0.0 + 1.0.0+ @@ -1027,7 +1144,7 @@ url - 4.0.0 + 1.0.0+ protocol://hostname/path. ]]> @@ -1035,7 +1152,7 @@ layout - 4.0.0 + 1.0.0+ legacy or default. 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,19 +26,23 @@ 1.0-SNAPSHOT 4.0.0 - org.apache.maven.archiva archiva-repository-layer Archiva Repository Interface Layer org.apache.maven.archiva - archiva-common + archiva-consumer-api org.apache.maven.archiva archiva-model 1.0-SNAPSHOT + + org.apache.maven.archiva + archiva-xml-tools + 1.0-SNAPSHOT + org.codehaus.plexus plexus-utils @@ -55,6 +59,7 @@ 1.0-alpha-2-SNAPSHOT compile + org.slf4j slf4j-log4j12 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 Brett Porter - * @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 Brett Porter - * @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 Joakim Erdfelt - * @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 Joakim Erdfelt - * @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 Joakim Erdfelt + * @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 Joakim Erdfelt + * @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 Joakim Erdfelt + * @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 Joakim Erdfelt + * @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 Joakim Erdfelt + * @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 similarity index 71% rename from archiva-base/archiva-common/src/main/java/org/apache/maven/archiva/common/artifact/builder/BuilderException.java rename to 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 Joakim Erdfelt + * @author Joakim Erdfelt * @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 Joakim Erdfelt + * @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 Joakim Erdfelt - * @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-api/src/test/java/org/apache/maven/archiva/AllTests.java b/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/layout/AllTests.java similarity index 76% rename from archiva-api/src/test/java/org/apache/maven/archiva/AllTests.java rename to archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/layout/AllTests.java index e037e09c3..966ddbd6c 100644 --- a/archiva-api/src/test/java/org/apache/maven/archiva/AllTests.java +++ b/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/layout/AllTests.java @@ -1,4 +1,4 @@ -package org.apache.maven.archiva; +package org.apache.maven.archiva.repository.layout; /* * Licensed to the Apache Software Foundation (ASF) under one @@ -23,7 +23,7 @@ import junit.framework.Test; import junit.framework.TestSuite; /** - * AllTests - added to allow IDE users to pull all tests into their tool. + * AllTests - Useful for developers using IDEs. * * @author Joakim Erdfelt * @version $Id$ @@ -33,10 +33,11 @@ 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.repository.layout" ); //$JUnit-BEGIN$ - suite.addTest( org.apache.maven.archiva.repositories.AllTests.suite() ); - suite.addTest( org.apache.maven.archiva.scheduler.executors.AllTests.suite() ); + 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-api/src/test/java/org/apache/maven/archiva/repositories/AllTests.java b/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/metadata/AllTests.java similarity index 88% rename from archiva-api/src/test/java/org/apache/maven/archiva/repositories/AllTests.java rename to archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/metadata/AllTests.java index 0b82640b9..76b6ab6dd 100644 --- a/archiva-api/src/test/java/org/apache/maven/archiva/repositories/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.repositories; +package org.apache.maven.archiva.repository.metadata; /* * Licensed to the Apache Software Foundation (ASF) under one @@ -33,9 +33,9 @@ public class AllTests public static Test suite() { - TestSuite suite = new TestSuite( "Test for org.apache.maven.archiva.repositories" ); + TestSuite suite = new TestSuite( "Test for org.apache.maven.archiva.repository.metadata" ); //$JUnit-BEGIN$ - suite.addTestSuite( DefaultActiveManagedRepositoriesTest.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 Joakim Erdfelt + * @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-api/src/test/java/org/apache/maven/archiva/scheduler/executors/AllTests.java b/archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/project/AllTests.java similarity index 88% rename from archiva-api/src/test/java/org/apache/maven/archiva/scheduler/executors/AllTests.java rename to archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/project/AllTests.java index 9fdfcc15b..a9646e935 100644 --- a/archiva-api/src/test/java/org/apache/maven/archiva/scheduler/executors/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.scheduler.executors; +package org.apache.maven.archiva.repository.project; /* * Licensed to the Apache Software Foundation (ASF) under one @@ -33,9 +33,9 @@ public class AllTests public static Test suite() { - TestSuite suite = new TestSuite( "Test for org.apache.maven.archiva.scheduler.executors" ); + TestSuite suite = new TestSuite( "Test for org.apache.maven.archiva.repository.project" ); //$JUnit-BEGIN$ - suite.addTestSuite( DataRefreshExecutorTest.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 Joakim Erdfelt + * @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-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/scanner/AllTests.java similarity index 82% rename from archiva-base/archiva-common/src/test/java/org/apache/maven/archiva/common/artifact/builder/AllTests.java rename to archiva-base/archiva-repository-layer/src/test/java/org/apache/maven/archiva/repository/scanner/AllTests.java index 45511c374..0cecdce3e 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/scanner/AllTests.java @@ -1,4 +1,4 @@ -package org.apache.maven.archiva.common.artifact.builder; +package org.apache.maven.archiva.repository.scanner; /* * Licensed to the Apache Software Foundation (ASF) under one @@ -23,22 +23,19 @@ import junit.framework.Test; import junit.framework.TestSuite; /** - * AllTests + * AllTests - Useful for developers using IDEs. * * @author Joakim Erdfelt * @version $Id$ */ 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.scanner" ); //$JUnit-BEGIN$ - suite.addTestSuite( LegacyLayoutArtifactBuilderTest.class ); - suite.addTestSuite( DefaultLayoutArtifactBuilderTest.class ); + 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 Joakim Erdfelt * @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 Joakim Erdfelt * @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 0000000000000000000000000000000000000000..ae0cb2e320facf4eb54f2f5ca71f3286b9001762 GIT binary patch literal 38527 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 Wyjg)~wKFiN0O2)Yi)C^*hz9^LtTqq; literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..faa0d98cccdc4478f73b5cc4b48b5712bdf712fd GIT binary patch literal 2819 zcmWIWW@h1H0Dfd*X9KYavNB&s zKTkK;;1E4ux6i(3PWyQ4>RsgZ*3~+9=KSU$gDb`lo)+nNojal9t?R_W{$xqm6fx}s zDiu5DbO#B02L+eR)pD%z`O;Hz_Kb+h6d7)=q9D;ZpNqM@yo0(+L~K4!`Z~p=a%aU( z2AFFY7>=Sjng!^Z{GxQYdofjTLscXeBqnF1;!!AwsxUXPEHw|0atUn8i!&07Qd98g zQpTezCBHl`CqFSIwFqti2iU`3_$GyjF)=W(axgGh5@&!*YFc7xPKgWLNWHAYvc$8Y zxAUY71#0iFm-y%+Xe8gDwKdDZ>&i0G%=oC#i&v}}mmj;=x0jpa+IgfYFku;jJztAh8Qp>>EQrYl$Q%`|$ikEAaxLdSOXS?U3XERgpZ*l$higBs< z`|{ZjD=&XK{7K8{*zNn`3NwvfUlFVj>eoADy_)+`$G)v~ImMIvrcE+hzvid-B+tqT z(_c)#EYg0n?g&%srld6{y#0KKv!iN4^p;pleyQU8@<8@kU7BRxg-B*rsUQ0;U3FcS zIn!D(SHU2q#zICV@}IXhXVBu}0$2VS+4Z8@^Bf``I{JQQ;9&bbyRb z>*qG9?LT4B^0Y~A-ljEwE`}|-m;KY`bN_q+p(I<^2}6#y0X*jTG^v_ho9>&{(W-$?e*8^yVbt1Q7S(r_0IWW=$-Y^wku}uo>zXi;G-e{fu1TC?Je>%Khgpq+E ziJ5`Hh{(i-mdb(-dNDil>^&d;PGdP3s&2VpJ#sJTywS3y4*ARQ-z6=YccyRKL@FO$GvczH5J5(Q<&j;Nt@E^;Ms?ZISj`lY4nu zyWyYR94x*nZqGK&o;mmC#uMu!1SG;$GA4R^P+vDP{B)IJ2sRatt4X3#YHgl9k zux850T$JWD&DwD%RDa2tu$@|#1+DiE*KLxE@-v&_X8gi2S3%ci&&}fp{IBU>X7f8Z zbr*wu-`fJ)s<;nRRkzQ)nj>JfP0e`T;c11_&Y8^6ZZgQX&ptB0z1}S9V~XOQWPj9f zxO`*T^&P-)_y`OKN7B-oUw(;Oera9`YIw}`GvqsDz;ov_SARh0TjpH`49v{jJ~??w zTSXQ7CT(d5`0tk)nAqS|(7o3B{!g7#%3>^Ux>$5iO`0TZmLe3tNO`J;o%GoiCsLi3 z1ga=Bv0hu4!Y=(KXMrPg`|5WsAvdh9Pi0wou{y$TZ8Tr@y56W*m74(@1urz}HTHb^ zkd$xxzvoBRyn}i>PKi8dH+&!4{GBmAx@dFY*{X%2|5J`9zcBf>^s(`?SqeS3Q`Y|Y z`{8(-z0L0rOGL{9ycwB9m~q$3z_0-V0fx7rP(rSyVcM|Q(;&qlu%uBPNWv?3q*@!< zVr+FQSUcF_tw1KEriIywy{<**xDM3;uX%B61l7F|0QMs=Ie@H!YJ}CqxV3}oVuW^m zY}(;9Gj3Brbu+@0R6M4j)YLEovDeiwBbPKTBhEnVH8&!jAl9Il(g>wTh D*3;c- literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..712c664dda8ea6bedb9163817453eb1b3cc2cbf4 GIT binary patch literal 6480 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 literal 0 HcmV?d00001 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 @@ + + + maven-shared-components + org.apache.maven.shared + 4 + + 4.0.0 + org.apache.maven.shared + maven-downloader + Maven Downloader + 1.0 + Provide a super simple interface for downloading a single artifact. + http://maven.apache.org + + scm:svn:https://svn.apache.org/repos/asf/maven/shared/tags/maven-downloader-1.0 + scm:svn:https://svn.apache.org/repos/asf/maven/shared/tags/maven-downloader-1.0 + https://svn.apache.org/repos/asf/maven/shared/tags/maven-downloader-1.0 + + + + + org.codehaus.plexus + plexus-maven-plugin + 1.1 + + + + descriptor + + + + + + + + + org.apache.maven + maven-artifact-manager + 2.0 + + + org.apache.maven + maven-artifact + 2.0 + + + junit + junit + 3.8.1 + test + + + + deployed + + \ 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 0000000000000000000000000000000000000000..3114e1ae642ae2adda79bb821ad03179a50500f0 GIT binary patch literal 38215 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 L2NqZ}*+D!20matL literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..ae6638b797da482d7ebb56c178095fa7717f798f GIT binary patch literal 6478 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 literal 0 HcmV?d00001 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 @@ + + + maven-shared-components + org.apache.maven.shared + 4 + + 4.0.0 + org.apache.maven.shared + maven-downloader + Maven Downloader + 1.1 + Provide a super simple interface for downloading a single artifact. + http://maven.apache.org + + scm:svn:https://svn.apache.org/repos/asf/maven/shared/tags/maven-downloader-1.1 + scm:svn:https://svn.apache.org/repos/asf/maven/shared/tags/maven-downloader-1.1 + https://svn.apache.org/repos/asf/maven/shared/tags/maven-downloader-1.1 + + + + + org.codehaus.plexus + plexus-maven-plugin + 1.1 + + + + descriptor + + + + + + + + + org.apache.maven + maven-artifact-manager + 2.0 + + + org.apache.maven + maven-artifact + 2.0 + + + junit + junit + 3.8.1 + test + + + + deployed + + \ 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 @@ + + org.apache.maven.shared + maven-downloader + 1.0 + + 1.1 + + 1.0 + 1.1 + + 20061212214311 + + \ 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 @@ + + + + + + org.apache.maven.archiva + archiva-base + 1.0-SNAPSHOT + + 4.0.0 + archiva-scheduled + Archiva Base :: Scheduled Tasks + + + org.apache.maven.archiva + archiva-configuration + + + org.codehaus.plexus + plexus-taskqueue + 1.0-alpha-6 + + + org.codehaus.plexus + plexus-quartz + 1.0-alpha-3 + + + org.codehaus.plexus + plexus-component-api + + + commons-lang + commons-lang + + + org.codehaus.plexus + plexus-container-default + + + + + + org.codehaus.plexus + plexus-maven-plugin + + + + diff --git a/archiva-api/src/main/java/org/apache/maven/archiva/scheduler/DefaultRepositoryTaskScheduler.java b/archiva-base/archiva-scheduled/src/main/java/org/apache/maven/archiva/scheduled/DefaultRepositoryTaskScheduler.java similarity index 99% rename from archiva-api/src/main/java/org/apache/maven/archiva/scheduler/DefaultRepositoryTaskScheduler.java rename to archiva-base/archiva-scheduled/src/main/java/org/apache/maven/archiva/scheduled/DefaultRepositoryTaskScheduler.java index bae351750..e5f1fcddf 100644 --- a/archiva-api/src/main/java/org/apache/maven/archiva/scheduler/DefaultRepositoryTaskScheduler.java +++ b/archiva-base/archiva-scheduled/src/main/java/org/apache/maven/archiva/scheduled/DefaultRepositoryTaskScheduler.java @@ -1,4 +1,4 @@ -package org.apache.maven.archiva.scheduler; +package org.apache.maven.archiva.scheduled; /* * Licensed to the Apache Software Foundation (ASF) under one diff --git a/archiva-api/src/main/java/org/apache/maven/archiva/scheduler/RepositoryTaskJob.java b/archiva-base/archiva-scheduled/src/main/java/org/apache/maven/archiva/scheduled/RepositoryTaskJob.java similarity index 93% rename from archiva-api/src/main/java/org/apache/maven/archiva/scheduler/RepositoryTaskJob.java rename to archiva-base/archiva-scheduled/src/main/java/org/apache/maven/archiva/scheduled/RepositoryTaskJob.java index 06152f244..113d693ab 100644 --- a/archiva-api/src/main/java/org/apache/maven/archiva/scheduler/RepositoryTaskJob.java +++ b/archiva-base/archiva-scheduled/src/main/java/org/apache/maven/archiva/scheduled/RepositoryTaskJob.java @@ -1,4 +1,4 @@ -package org.apache.maven.archiva.scheduler; +package org.apache.maven.archiva.scheduled; /* * Licensed to the Apache Software Foundation (ASF) under one @@ -19,8 +19,8 @@ package org.apache.maven.archiva.scheduler; * under the License. */ -import org.apache.maven.archiva.scheduler.task.DataRefreshTask; -import org.apache.maven.archiva.scheduler.task.RepositoryTask; +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; diff --git a/archiva-api/src/main/java/org/apache/maven/archiva/scheduler/RepositoryTaskScheduler.java b/archiva-base/archiva-scheduled/src/main/java/org/apache/maven/archiva/scheduled/RepositoryTaskScheduler.java similarity index 96% rename from archiva-api/src/main/java/org/apache/maven/archiva/scheduler/RepositoryTaskScheduler.java rename to archiva-base/archiva-scheduled/src/main/java/org/apache/maven/archiva/scheduled/RepositoryTaskScheduler.java index 08e511f3e..db0f47ab6 100644 --- a/archiva-api/src/main/java/org/apache/maven/archiva/scheduler/RepositoryTaskScheduler.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.scheduler; +package org.apache.maven.archiva.scheduled; /* * Licensed to the Apache Software Foundation (ASF) under one diff --git a/archiva-api/src/main/java/org/apache/maven/archiva/scheduler/executors/DataRefreshConsumers.java b/archiva-base/archiva-scheduled/src/main/java/org/apache/maven/archiva/scheduled/executors/DataRefreshConsumers.java similarity index 97% rename from archiva-api/src/main/java/org/apache/maven/archiva/scheduler/executors/DataRefreshConsumers.java rename to archiva-base/archiva-scheduled/src/main/java/org/apache/maven/archiva/scheduled/executors/DataRefreshConsumers.java index 783a44c27..643f85028 100644 --- a/archiva-api/src/main/java/org/apache/maven/archiva/scheduler/executors/DataRefreshConsumers.java +++ b/archiva-base/archiva-scheduled/src/main/java/org/apache/maven/archiva/scheduled/executors/DataRefreshConsumers.java @@ -1,4 +1,4 @@ -package org.apache.maven.archiva.scheduler.executors; +package org.apache.maven.archiva.scheduled.executors; /* * Licensed to the Apache Software Foundation (ASF) under one diff --git a/archiva-api/src/main/java/org/apache/maven/archiva/scheduler/executors/DataRefreshExecutor.java b/archiva-base/archiva-scheduled/src/main/java/org/apache/maven/archiva/scheduled/executors/DataRefreshExecutor.java similarity index 96% rename from archiva-api/src/main/java/org/apache/maven/archiva/scheduler/executors/DataRefreshExecutor.java rename to archiva-base/archiva-scheduled/src/main/java/org/apache/maven/archiva/scheduled/executors/DataRefreshExecutor.java index 8f0dd4d37..23a665837 100644 --- a/archiva-api/src/main/java/org/apache/maven/archiva/scheduler/executors/DataRefreshExecutor.java +++ b/archiva-base/archiva-scheduled/src/main/java/org/apache/maven/archiva/scheduled/executors/DataRefreshExecutor.java @@ -1,4 +1,4 @@ -package org.apache.maven.archiva.scheduler.executors; +package org.apache.maven.archiva.scheduled.executors; /* * Licensed to the Apache Software Foundation (ASF) under one @@ -73,16 +73,6 @@ public class DataRefreshExecutor */ private DataRefreshConsumers consumerNames; - /** - * @plexus.requirement - */ - private Discoverer discoverer; - - /** - * @plexus.requirement - */ - private ConsumerFactory consumerFactory; - public void executeTask( Task task ) throws TaskExecutionException { diff --git a/archiva-api/src/main/java/org/apache/maven/archiva/scheduler/task/DataRefreshTask.java b/archiva-base/archiva-scheduled/src/main/java/org/apache/maven/archiva/scheduled/tasks/DataRefreshTask.java similarity index 93% rename from archiva-api/src/main/java/org/apache/maven/archiva/scheduler/task/DataRefreshTask.java rename to archiva-base/archiva-scheduled/src/main/java/org/apache/maven/archiva/scheduled/tasks/DataRefreshTask.java index 57d4b683e..dbb7f12dc 100644 --- a/archiva-api/src/main/java/org/apache/maven/archiva/scheduler/task/DataRefreshTask.java +++ b/archiva-base/archiva-scheduled/src/main/java/org/apache/maven/archiva/scheduled/tasks/DataRefreshTask.java @@ -1,4 +1,4 @@ -package org.apache.maven.archiva.scheduler.task; +package org.apache.maven.archiva.scheduled.tasks; /** * DataRefreshTask - task for discovering changes in the repository diff --git a/archiva-api/src/main/java/org/apache/maven/archiva/scheduler/task/RepositoryTask.java b/archiva-base/archiva-scheduled/src/main/java/org/apache/maven/archiva/scheduled/tasks/RepositoryTask.java similarity index 96% rename from archiva-api/src/main/java/org/apache/maven/archiva/scheduler/task/RepositoryTask.java rename to archiva-base/archiva-scheduled/src/main/java/org/apache/maven/archiva/scheduled/tasks/RepositoryTask.java index 20618f803..39738dfa0 100644 --- a/archiva-api/src/main/java/org/apache/maven/archiva/scheduler/task/RepositoryTask.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.scheduler.task; +package org.apache.maven.archiva.scheduled.tasks; /* * Licensed to the Apache Software Foundation (ASF) under one diff --git a/archiva-api/src/test/java/org/apache/maven/archiva/scheduler/executors/DataRefreshExecutorTest.java b/archiva-base/archiva-scheduled/src/test/java/org/apache/maven/archiva/scheduled/executors/DataRefreshExecutorTest.java similarity index 95% rename from archiva-api/src/test/java/org/apache/maven/archiva/scheduler/executors/DataRefreshExecutorTest.java rename to archiva-base/archiva-scheduled/src/test/java/org/apache/maven/archiva/scheduled/executors/DataRefreshExecutorTest.java index ad9900795..486479bf9 100644 --- a/archiva-api/src/test/java/org/apache/maven/archiva/scheduler/executors/DataRefreshExecutorTest.java +++ b/archiva-base/archiva-scheduled/src/test/java/org/apache/maven/archiva/scheduled/executors/DataRefreshExecutorTest.java @@ -1,4 +1,4 @@ -package org.apache.maven.archiva.scheduler.executors; +package org.apache.maven.archiva.scheduled.executors; /* * Licensed to the Apache Software Foundation (ASF) under one @@ -22,7 +22,7 @@ package org.apache.maven.archiva.scheduler.executors; 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.scheduler.task.DataRefreshTask; +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; 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 @@ + + + + + + org.apache.maven.archiva + archiva-base + 1.0-SNAPSHOT + + 4.0.0 + archiva-xml-tools + Archiva Base :: XML Tools + + + org.apache.maven.archiva + archiva-common + + + dom4j + dom4j + 1.6.1 + + + jaxen + jaxen + 1.1 + + + org.codehaus.plexus + plexus-utils + + + org.slf4j + slf4j-log4j12 + + + + 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 Joakim Erdfelt + * @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 Joakim Erdfelt + * @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 similarity index 68% rename from archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/layer/RepositoryQueryLayerException.java rename to 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 Joakim Erdfelt + * @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 Joakim Erdfelt + * @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 @@ + + + + apple + + + + + + peach + + \ 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 @@ + + + Trygve Laugstøl + The ∞ Archiva + + \ 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 @@ + + + Trygve Laugstøl + The ∞ Archiva + + \ 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 @@ + + + + Trygve Laugstøl + The ∞ Archiva + + \ 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 Joakim Erdfelt + * @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 @@ archiva-consumers archiva-indexer archiva-model - archiva-proxy + archiva-repository-layer + archiva-xml-tools diff --git a/archiva-cli/pom.xml b/archiva-cli/pom.xml index 24242e435..0df3f78c9 100644 --- a/archiva-cli/pom.xml +++ b/archiva-cli/pom.xml @@ -32,10 +32,26 @@ org.apache.maven.archiva archiva-converter + + org.apache.maven.archiva + archiva-repository-layer + + org.codehaus.plexus plexus-cli - 1.0 + 1.1 commons-lang diff --git a/archiva-cli/src/main/java/org/apache/maven/archiva/cli/AbstractProgressConsumer.java b/archiva-cli/src/main/java/org/apache/maven/archiva/cli/AbstractProgressConsumer.java new file mode 100644 index 000000000..46500a44d --- /dev/null +++ b/archiva-cli/src/main/java/org/apache/maven/archiva/cli/AbstractProgressConsumer.java @@ -0,0 +1,61 @@ +package org.apache.maven.archiva.cli; + +/* + * 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; + +/** + * AbstractProgressConsumer + * + * @author Joakim Erdfelt + * @version $Id$ + */ +public abstract class AbstractProgressConsumer + extends AbstractMonitoredConsumer + implements RepositoryContentConsumer +{ + private int count = 0; + + public void beginScan( ArchivaRepository repository ) + throws ConsumerException + { + this.count = 0; + } + + public void processFile( String path ) + throws ConsumerException + { + count++; + if ( ( count % 1000 ) == 0 ) + { + System.out.println( "Files Processed: " + count ); + } + + } + + public void completeScan() + { + System.out.println( "Final Count of Artifacts processed by " + getId() + ": " + count ); + } + +} diff --git a/archiva-cli/src/main/java/org/apache/maven/archiva/cli/ArchivaCli.java b/archiva-cli/src/main/java/org/apache/maven/archiva/cli/ArchivaCli.java index 26ee4db77..921bd8883 100644 --- a/archiva-cli/src/main/java/org/apache/maven/archiva/cli/ArchivaCli.java +++ b/archiva-cli/src/main/java/org/apache/maven/archiva/cli/ArchivaCli.java @@ -20,19 +20,32 @@ package org.apache.maven.archiva.cli; */ import org.apache.commons.cli.CommandLine; -import org.apache.commons.cli.OptionBuilder; +import org.apache.commons.cli.Option; import org.apache.commons.cli.Options; import org.apache.commons.lang.StringUtils; +import org.apache.maven.archiva.common.utils.DateUtil; +import org.apache.maven.archiva.consumers.ConsumerException; +import org.apache.maven.archiva.consumers.RepositoryContentConsumer; import org.apache.maven.archiva.converter.RepositoryConversionException; import org.apache.maven.archiva.converter.legacy.LegacyRepositoryConverter; +import org.apache.maven.archiva.model.ArchivaRepository; +import org.apache.maven.archiva.model.RepositoryContentStatistics; +import org.apache.maven.archiva.repository.RepositoryException; +import org.apache.maven.archiva.repository.scanner.RepositoryScanner; import org.codehaus.plexus.PlexusContainer; +import org.codehaus.plexus.component.repository.exception.ComponentLookupException; import org.codehaus.plexus.tools.cli.AbstractCli; import java.io.File; import java.io.FileInputStream; import java.io.IOException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; import java.util.Arrays; +import java.util.Collection; +import java.util.Iterator; import java.util.List; +import java.util.Map; import java.util.Properties; /** @@ -47,6 +60,12 @@ public class ArchivaCli public static final char CONVERT = 'c'; + public static final char SCAN = 's'; + + public static final char CONSUMERS = 'u'; + + public static final char LIST_CONSUMERS = 'l'; + // ---------------------------------------------------------------------------- // Properties controlling Repository conversion // ---------------------------------------------------------------------------- @@ -68,11 +87,36 @@ public class ArchivaCli return "META-INF/maven/org.apache.maven.archiva/archiva-cli/pom.properties"; } + private Option createOption( char shortOpt, String longOpt, int argCount, String description ) + { + boolean hasArg = ( argCount > 0 ); + Option opt = new Option( String.valueOf( shortOpt ), hasArg, description ); + opt.setLongOpt( longOpt ); + if ( hasArg ) + { + opt.setArgs( argCount ); + } + return opt; + } + public Options buildCliOptions( Options options ) { - options.addOption( OptionBuilder.withLongOpt( "convert" ).hasArg().withDescription( - "Convert a legacy Maven 1.x repository to a Maven 2.x repository using a properties file to describe the conversion." ) - .create( CONVERT ) ); + Option convertOption = createOption( CONVERT, "convert", 1, "Convert a legacy Maven 1.x repository to a " + + "Maven 2.x repository using a properties file to describe the conversion." ); + convertOption.setArgName( "conversion.properties" ); + options.addOption( convertOption ); + + Option scanOption = createOption( SCAN, "scan", 1, "Scan the specified repository." ); + scanOption.setArgName( "repository directory" ); + options.addOption( scanOption ); + + Option consumerOption = createOption( CONSUMERS, "consumers", 1, "The consumers to use. " + + "(comma delimited. default: 'count-artifacts')" ); + consumerOption.setArgName( "consumer list" ); + options.addOption( consumerOption ); + + Option listConsumersOption = createOption( LIST_CONSUMERS, "listconsumers", 0, "List available consumers." ); + options.addOption( listConsumersOption ); return options; } @@ -80,47 +124,147 @@ public class ArchivaCli public void invokePlexusComponent( CommandLine cli, PlexusContainer plexus ) throws Exception { - LegacyRepositoryConverter legacyRepositoryConverter = - (LegacyRepositoryConverter) plexus.lookup( LegacyRepositoryConverter.ROLE ); - if ( cli.hasOption( CONVERT ) ) { - Properties p = new Properties(); + doConversion( cli, plexus ); + } + else if ( cli.hasOption( SCAN ) ) + { + doScan( cli, plexus ); + } + else if ( cli.hasOption( LIST_CONSUMERS ) ) + { + dumpAvailableConsumers( plexus ); + } + else + { + displayHelp(); + } + } - try - { - p.load( new FileInputStream( cli.getOptionValue( CONVERT ) ) ); - } - catch ( IOException e ) - { - showFatalError( "Cannot find properties file which describes the conversion.", e, true ); - } + private void doScan( CommandLine cli, PlexusContainer plexus ) + throws ConsumerException, ComponentLookupException + { + String path = cli.getOptionValue( SCAN ); - File oldRepositoryPath = new File( p.getProperty( SOURCE_REPO_PATH ) ); + ArchivaRepository repo = new ArchivaRepository( "cliRepo", "Archiva CLI Provided Repo", "file://" + path ); - File newRepositoryPath = new File( p.getProperty( TARGET_REPO_PATH ) ); + List consumerList = new ArrayList(); - System.out.println( "Converting " + oldRepositoryPath + " to " + newRepositoryPath ); + consumerList.addAll( getConsumerList( cli, plexus ) ); - List fileExclusionPatterns = null; + RepositoryScanner scanner = new RepositoryScanner(); - String s = p.getProperty( BLACKLISTED_PATTERNS ); + try + { + RepositoryContentStatistics stats = scanner.scan( repo, consumerList, true ); - if ( s != null ) - { - fileExclusionPatterns = Arrays.asList( StringUtils.split( s, "," ) ); - } + SimpleDateFormat df = new SimpleDateFormat(); + System.out.println( ".\\ Scan of " + repo.getId() + " \\.__________________________________________" ); + System.out.println( " Repository URL : " + repo.getUrl() ); + System.out.println( " Repository Name : " + repo.getModel().getName() ); + System.out.println( " Repository Layout : " + repo.getModel().getLayoutName() ); + 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 ) + { + e.printStackTrace( System.err ); + } + } - try - { - legacyRepositoryConverter.convertLegacyRepository( oldRepositoryPath, newRepositoryPath, - fileExclusionPatterns, - true ); - } - catch ( RepositoryConversionException e ) + private Collection getConsumerList( CommandLine cli, PlexusContainer plexus ) + throws ComponentLookupException, ConsumerException + { + String specifiedConsumers = "count-artifacts"; + + if ( cli.hasOption( CONSUMERS ) ) + { + specifiedConsumers = cli.getOptionValue( CONSUMERS ); + } + + List consumerList = new ArrayList(); + + Map availableConsumers = plexus.lookupMap( RepositoryContentConsumer.class ); + + String consumerArray[] = StringUtils.split( specifiedConsumers, ',' ); + + for ( int i = 0; i < consumerArray.length; i++ ) + { + String specifiedConsumer = consumerArray[i]; + if ( !availableConsumers.containsKey( specifiedConsumer ) ) { - showFatalError( "Error converting repository.", e, true ); + System.err.println( "Specified consumer [" + specifiedConsumer + "] not found." ); + dumpAvailableConsumers( plexus ); + System.exit( 1 ); } + + consumerList.add( availableConsumers.get( specifiedConsumer ) ); + } + + return consumerList; + } + + private void dumpAvailableConsumers( PlexusContainer plexus ) + throws ComponentLookupException + { + Map availableConsumers = plexus.lookupMap( RepositoryContentConsumer.class ); + + System.out.println( ".\\ Available Consumer List \\.______________________________" ); + + for ( Iterator iter = availableConsumers.entrySet().iterator(); iter.hasNext(); ) + { + Map.Entry entry = (Map.Entry) iter.next(); + String consumerHint = (String) entry.getKey(); + RepositoryContentConsumer consumer = (RepositoryContentConsumer) entry.getValue(); + System.out.println( " " + consumerHint + ": " + consumer.getDescription() + " (" + + consumer.getClass().getName() + ")" ); + } + } + + private void doConversion( CommandLine cli, PlexusContainer plexus ) + throws ComponentLookupException + { + LegacyRepositoryConverter legacyRepositoryConverter = (LegacyRepositoryConverter) plexus + .lookup( LegacyRepositoryConverter.ROLE ); + + Properties p = new Properties(); + + try + { + p.load( new FileInputStream( cli.getOptionValue( CONVERT ) ) ); + } + catch ( IOException e ) + { + showFatalError( "Cannot find properties file which describes the conversion.", e, true ); + } + + File oldRepositoryPath = new File( p.getProperty( SOURCE_REPO_PATH ) ); + + File newRepositoryPath = new File( p.getProperty( TARGET_REPO_PATH ) ); + + System.out.println( "Converting " + oldRepositoryPath + " to " + newRepositoryPath ); + + List fileExclusionPatterns = null; + + String s = p.getProperty( BLACKLISTED_PATTERNS ); + + if ( s != null ) + { + fileExclusionPatterns = Arrays.asList( StringUtils.split( s, "," ) ); + } + + try + { + legacyRepositoryConverter.convertLegacyRepository( oldRepositoryPath, newRepositoryPath, + fileExclusionPatterns, true ); + } + catch ( RepositoryConversionException e ) + { + showFatalError( "Error converting repository.", e, true ); } } } diff --git a/archiva-cli/src/main/java/org/apache/maven/archiva/cli/ArtifactCountConsumer.java b/archiva-cli/src/main/java/org/apache/maven/archiva/cli/ArtifactCountConsumer.java new file mode 100644 index 000000000..c4583427b --- /dev/null +++ b/archiva-cli/src/main/java/org/apache/maven/archiva/cli/ArtifactCountConsumer.java @@ -0,0 +1,95 @@ +package org.apache.maven.archiva.cli; + +/* + * 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.RepositoryContentConsumer; + +import java.util.ArrayList; +import java.util.List; + +/** + * ArtifactCountConsumer + * + * @author Joakim Erdfelt + * @version $Id$ + * + * @plexus.component role="org.apache.maven.archiva.consumers.RepositoryContentConsumer" + * role-hint="count-artifacts" + * instantiation-strategy="per-lookup" + */ +public class ArtifactCountConsumer + extends AbstractProgressConsumer + implements RepositoryContentConsumer +{ + /** + * @plexus.configuration default-value="count-artifacts" + */ + private String id; + + /** + * @plexus.configuration default-value="Count Artifacts" + */ + private String description; + + private List includes; + + public ArtifactCountConsumer() + { + includes = new ArrayList(); + includes.add( "**/*.pom" ); + includes.add( "**/*.jar" ); + includes.add( "**/*.war" ); + includes.add( "**/*.ear" ); + includes.add( "**/*.sar" ); + includes.add( "**/*.car" ); + includes.add( "**/*.mar" ); + includes.add( "**/*.dtd" ); + includes.add( "**/*.tld" ); + includes.add( "**/*.gz" ); + includes.add( "**/*.bz2" ); + includes.add( "**/*.zip" ); + } + + public String getDescription() + { + return description; + } + + public String getId() + { + return id; + } + + public boolean isPermanent() + { + return false; + } + + public List getExcludes() + { + return null; + } + + public List getIncludes() + { + return includes; + } + +} diff --git a/archiva-cli/src/main/java/org/apache/maven/archiva/cli/ProjectReaderConsumer.java b/archiva-cli/src/main/java/org/apache/maven/archiva/cli/ProjectReaderConsumer.java new file mode 100644 index 000000000..7832ff5be --- /dev/null +++ b/archiva-cli/src/main/java/org/apache/maven/archiva/cli/ProjectReaderConsumer.java @@ -0,0 +1,124 @@ +package org.apache.maven.archiva.cli; + +/* + * 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.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.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.util.ArrayList; +import java.util.List; + +/** + * ProjectReaderConsumer + * + * @author Joakim Erdfelt + * @version $Id$ + * + * @plexus.component role="org.apache.maven.archiva.consumers.RepositoryContentConsumer" + * role-hint="read-poms" + * instantiation-strategy="per-lookup" + */ +public class ProjectReaderConsumer + extends AbstractProgressConsumer + implements RepositoryContentConsumer +{ + /** + * @plexus.configuration default-value="read-poms" + */ + private String id; + + /** + * @plexus.configuration default-value="Read POMs and report anomolies." + */ + private String description; + + private ProjectModelReader reader; + + private ArchivaRepository repo; + + private List includes; + + public ProjectReaderConsumer() + { + reader = new ProjectModel400Reader(); + + includes = new ArrayList(); + includes.add( "**/*.pom" ); + } + + public String getDescription() + { + return description; + } + + public String getId() + { + return id; + } + + public boolean isPermanent() + { + return false; + } + + public List getExcludes() + { + return null; + } + + public List getIncludes() + { + return includes; + } + + public void beginScan( ArchivaRepository repository ) + throws ConsumerException + { + super.beginScan( repository ); + this.repo = repository; + } + + public void processFile( String path ) + throws ConsumerException + { + super.processFile( path ); + + File pomFile = new File( repo.getUrl().getPath(), path ); + try + { + ArchivaProjectModel model = reader.read( pomFile ); + if ( model == null ) + { + System.err.println( "Got null model on " + pomFile ); + } + } + catch ( ProjectModelException e ) + { + System.err.println( "Unable to process: " + pomFile ); + e.printStackTrace( System.out ); + } + } +} diff --git a/archiva-cli/src/main/resources/log4j.properties b/archiva-cli/src/main/resources/log4j.properties new file mode 100644 index 000000000..6d107570b --- /dev/null +++ b/archiva-cli/src/main/resources/log4j.properties @@ -0,0 +1,10 @@ +# Set root logger level to DEBUG and its only appender to A1. +log4j.rootLogger=INFO, A1 + +# A1 is set to be a ConsoleAppender. +log4j.appender.A1=org.apache.log4j.ConsoleAppender + +# A1 uses PatternLayout. +log4j.appender.A1.layout=org.apache.log4j.PatternLayout +log4j.appender.A1.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n + diff --git a/archiva-consumer-api/pom.xml b/archiva-consumer-api/pom.xml index b305f96c2..e20018f76 100755 --- a/archiva-consumer-api/pom.xml +++ b/archiva-consumer-api/pom.xml @@ -26,7 +26,7 @@ 1.0-SNAPSHOT 4.0.0 - archiva-consumer-api + archiva-consumer-api-OLD Archiva Consumer API diff --git a/archiva-consumer-api/src/main/java/org/apache/maven/archiva/consumers/AbstractConsumer.java b/archiva-consumer-api/src/main/java/org/apache/maven/archiva/consumers/AbstractConsumer.java deleted file mode 100644 index 1b6915c93..000000000 --- a/archiva-consumer-api/src/main/java/org/apache/maven/archiva/consumers/AbstractConsumer.java +++ /dev/null @@ -1,67 +0,0 @@ -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.repository.ArchivaRepository; -import org.apache.maven.archiva.repository.consumer.Consumer; -import org.apache.maven.artifact.factory.ArtifactFactory; -import org.codehaus.plexus.logging.AbstractLogEnabled; - -import java.util.Collections; -import java.util.List; - -/** - * AbstractDiscovererConsumer - * - * @author Joakim Erdfelt - * @version $Id$ - */ -public abstract class AbstractConsumer - extends AbstractLogEnabled - implements Consumer -{ - /** - * @plexus.requirement - */ - protected ArtifactFactory artifactFactory; - - protected ArchivaRepository repository; - - protected AbstractConsumer() - { - /* do nothing */ - } - - public List getExcludePatterns() - { - return Collections.EMPTY_LIST; - } - - public boolean init( ArchivaRepository repository ) - { - this.repository = repository; - return isEnabled(); - } - - protected boolean isEnabled() - { - return true; - } -} diff --git a/archiva-consumer-api/src/main/java/org/apache/maven/archiva/consumers/GenericArtifactConsumer.java b/archiva-consumer-api/src/main/java/org/apache/maven/archiva/consumers/GenericArtifactConsumer.java deleted file mode 100644 index 084c38881..000000000 --- a/archiva-consumer-api/src/main/java/org/apache/maven/archiva/consumers/GenericArtifactConsumer.java +++ /dev/null @@ -1,132 +0,0 @@ -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.artifact.builder.BuilderException; -import org.apache.maven.archiva.common.artifact.builder.DefaultLayoutArtifactBuilder; -import org.apache.maven.archiva.common.artifact.builder.LayoutArtifactBuilder; -import org.apache.maven.archiva.common.artifact.builder.LegacyLayoutArtifactBuilder; -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.artifact.Artifact; -import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout; -import org.apache.maven.artifact.repository.layout.DefaultRepositoryLayout; -import org.apache.maven.artifact.repository.layout.LegacyRepositoryLayout; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * DefaultArtifactConsumer - * - * @author Joakim Erdfelt - * @version $Id$ - */ -public abstract class GenericArtifactConsumer - extends AbstractConsumer - implements Consumer -{ - public abstract void processArtifact( Artifact artifact, BaseFile file ); - - private Map artifactBuilders = new HashMap(); - - private static final List includePatterns; - - static - { - includePatterns = new ArrayList(); - includePatterns.add( "**/*.pom" ); - includePatterns.add( "**/*.jar" ); - includePatterns.add( "**/*.war" ); - includePatterns.add( "**/*.ear" ); - includePatterns.add( "**/*.sar" ); - includePatterns.add( "**/*.zip" ); - includePatterns.add( "**/*.gz" ); - includePatterns.add( "**/*.bz2" ); - } - - private String layoutId = "default"; - - public boolean init( ArchivaRepository repository ) - { - this.artifactBuilders.clear(); - this.artifactBuilders.put( "default", new DefaultLayoutArtifactBuilder( artifactFactory ) ); - this.artifactBuilders.put( "legacy", new LegacyLayoutArtifactBuilder( artifactFactory ) ); - - if ( repository.getLayout() instanceof LegacyRepositoryLayout ) - { - this.layoutId = "legacy"; - } - - return super.init( repository ); - } - - public List getIncludePatterns() - { - return includePatterns; - } - - public boolean isEnabled() - { - ArtifactRepositoryLayout layout = repository.getLayout(); - return ( layout instanceof DefaultRepositoryLayout ) || ( layout instanceof LegacyRepositoryLayout ); - } - - public void processFile( BaseFile file ) - throws ConsumerException - { - if ( file.length() <= 0 ) - { - processFileProblem( file, "File is empty." ); - } - - if ( !file.canRead() ) - { - processFileProblem( file, "Not allowed to read file due to permission settings on file." ); - } - - try - { - Artifact artifact = buildArtifact( file ); - - processArtifact( artifact, file ); - } - catch ( BuilderException e ) - { - throw new ConsumerException( file, e.getMessage(), e ); - } - } - - private Artifact buildArtifact( BaseFile file ) - throws BuilderException - { - LayoutArtifactBuilder builder = (LayoutArtifactBuilder) artifactBuilders.get( layoutId ); - - Artifact artifact = builder.build( file.getRelativePath() ); -// artifact.setRepository( repository ); - artifact.setFile( file ); - - return artifact; - } -} diff --git a/archiva-consumer-api/src/main/java/org/apache/maven/archiva/consumers/GenericModelConsumer.java b/archiva-consumer-api/src/main/java/org/apache/maven/archiva/consumers/GenericModelConsumer.java deleted file mode 100644 index f44315d4e..000000000 --- a/archiva-consumer-api/src/main/java/org/apache/maven/archiva/consumers/GenericModelConsumer.java +++ /dev/null @@ -1,100 +0,0 @@ -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.repository.consumer.Consumer; -import org.apache.maven.archiva.repository.consumer.ConsumerException; -import org.apache.maven.model.Model; -import org.apache.maven.model.io.xpp3.MavenXpp3Reader; -import org.codehaus.plexus.util.IOUtil; -import org.codehaus.plexus.util.xml.pull.XmlPullParserException; - -import java.io.FileReader; -import java.io.IOException; -import java.io.Reader; -import java.util.ArrayList; -import java.util.List; - -/** - * GenericModelConsumer - consumer for pom files. - * - * @author Joakim Erdfelt - * @version $Id$ - */ -public abstract class GenericModelConsumer - extends AbstractConsumer - implements Consumer -{ - public abstract void processModel( Model model, BaseFile file ); - - private static final List includePatterns; - - static - { - includePatterns = new ArrayList(); - includePatterns.add( "**/*.pom" ); - } - - public List getIncludePatterns() - { - return includePatterns; - } - - public boolean isEnabled() - { - return true; - } - - public void processFile( BaseFile file ) - throws ConsumerException - { - Model model = buildModel( file ); - processModel( model, file ); - } - - private Model buildModel( BaseFile file ) - throws ConsumerException - { - Model model; - Reader reader = null; - try - { - reader = new FileReader( file ); - MavenXpp3Reader modelReader = new MavenXpp3Reader(); - - model = modelReader.read( reader ); - } - catch ( XmlPullParserException e ) - { - throw new ConsumerException( file, "Error parsing metadata file: " + e.getMessage(), e ); - } - catch ( IOException e ) - { - throw new ConsumerException( file, "Error reading metadata file: " + e.getMessage(), e ); - } - finally - { - IOUtil.close( reader ); - } - - return model; - } -} diff --git a/archiva-consumer-api/src/main/java/org/apache/maven/archiva/consumers/GenericRepositoryMetadataConsumer.java b/archiva-consumer-api/src/main/java/org/apache/maven/archiva/consumers/GenericRepositoryMetadataConsumer.java deleted file mode 100644 index 2c0573011..000000000 --- a/archiva-consumer-api/src/main/java/org/apache/maven/archiva/consumers/GenericRepositoryMetadataConsumer.java +++ /dev/null @@ -1,233 +0,0 @@ -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.commons.lang.StringUtils; -import org.apache.maven.archiva.common.utils.BaseFile; -import org.apache.maven.archiva.repository.consumer.Consumer; -import org.apache.maven.archiva.repository.consumer.ConsumerException; -import org.apache.maven.artifact.Artifact; -import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout; -import org.apache.maven.artifact.repository.layout.DefaultRepositoryLayout; -import org.apache.maven.artifact.repository.metadata.ArtifactRepositoryMetadata; -import org.apache.maven.artifact.repository.metadata.GroupRepositoryMetadata; -import org.apache.maven.artifact.repository.metadata.Metadata; -import org.apache.maven.artifact.repository.metadata.RepositoryMetadata; -import org.apache.maven.artifact.repository.metadata.SnapshotArtifactRepositoryMetadata; -import org.apache.maven.artifact.repository.metadata.io.xpp3.MetadataXpp3Reader; -import org.codehaus.plexus.util.IOUtil; -import org.codehaus.plexus.util.xml.pull.XmlPullParserException; - -import java.io.FileReader; -import java.io.IOException; -import java.io.Reader; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Iterator; -import java.util.List; -import java.util.StringTokenizer; - -/** - * GenericRepositoryMetadataConsumer - Consume any maven-metadata.xml files as {@link RepositoryMetadata} objects. - * - * @author Joakim Erdfelt - * @version $Id$ - */ -public abstract class GenericRepositoryMetadataConsumer - extends AbstractConsumer - implements Consumer -{ - public abstract void processRepositoryMetadata( RepositoryMetadata metadata, BaseFile file ); - - private static final List includePatterns; - - static - { - includePatterns = new ArrayList(); - includePatterns.add( "**/maven-metadata.xml" ); - } - - public List getIncludePatterns() - { - return includePatterns; - } - - public boolean isEnabled() - { - // the RepositoryMetadata objects only exist in 'default' layout repositories. - ArtifactRepositoryLayout layout = repository.getLayout(); - return ( layout instanceof DefaultRepositoryLayout ); - } - - public void processFile( BaseFile file ) - throws ConsumerException - { - if ( file.length() <= 0 ) - { - throw new ConsumerException( file, "File is empty." ); - } - - if ( !file.canRead() ) - { - throw new ConsumerException( file, "Not allowed to read file due to permission settings on file." ); - } - - RepositoryMetadata metadata = buildMetadata( file ); - processRepositoryMetadata( metadata, file ); - } - - private RepositoryMetadata buildMetadata( BaseFile metadataFile ) - throws ConsumerException - { - Metadata m; - Reader reader = null; - try - { - reader = new FileReader( metadataFile ); - MetadataXpp3Reader metadataReader = new MetadataXpp3Reader(); - - m = metadataReader.read( reader ); - } - catch ( XmlPullParserException e ) - { - throw new ConsumerException( metadataFile, "Error parsing metadata file: " + e.getMessage(), e ); - } - catch ( IOException e ) - { - throw new ConsumerException( metadataFile, "Error reading metadata file: " + e.getMessage(), e ); - } - finally - { - IOUtil.close( reader ); - } - - RepositoryMetadata repositoryMetadata = buildMetadata( m, metadataFile ); - - if ( repositoryMetadata == null ) - { - throw new ConsumerException( metadataFile, "Unable to build a repository metadata from path." ); - } - - return repositoryMetadata; - } - - /** - * Builds a RepositoryMetadata object from a Metadata object and its path. - * - * @param m Metadata - * @param metadataFile file information - * @return RepositoryMetadata if the parameters represent one; null if not - * @throws ConsumerException - */ - private RepositoryMetadata buildMetadata( Metadata m, BaseFile metadataFile ) - throws ConsumerException - { - if ( artifactFactory == null ) - { - throw new IllegalStateException( "Unable to build metadata with a null artifactFactory." ); - } - - String metaGroupId = m.getGroupId(); - String metaArtifactId = m.getArtifactId(); - String metaVersion = m.getVersion(); - - // check if the groupId, artifactId and version is in the - // metadataPath - // parse the path, in reverse order - List pathParts = new ArrayList(); - StringTokenizer st = new StringTokenizer( metadataFile.getRelativePath(), "/\\" ); - while ( st.hasMoreTokens() ) - { - pathParts.add( st.nextToken() ); - } - - Collections.reverse( pathParts ); - // remove the metadata file - pathParts.remove( 0 ); - Iterator it = pathParts.iterator(); - String tmpDir = (String) it.next(); - - Artifact artifact = null; - if ( StringUtils.isNotEmpty( metaVersion ) ) - { - artifact = artifactFactory.createProjectArtifact( metaGroupId, metaArtifactId, metaVersion ); - } - - // snapshotMetadata - RepositoryMetadata metadata = null; - if ( tmpDir != null && tmpDir.equals( metaVersion ) ) - { - if ( artifact != null ) - { - metadata = new SnapshotArtifactRepositoryMetadata( artifact ); - } - } - else if ( tmpDir != null && tmpDir.equals( metaArtifactId ) ) - { - // artifactMetadata - if ( artifact != null ) - { - metadata = new ArtifactRepositoryMetadata( artifact ); - } - else - { - artifact = artifactFactory.createProjectArtifact( metaGroupId, metaArtifactId, "1.0" ); - metadata = new ArtifactRepositoryMetadata( artifact ); - } - } - else - { - String groupDir = ""; - int ctr = 0; - for ( it = pathParts.iterator(); it.hasNext(); ) - { - String path = (String) it.next(); - if ( ctr == 0 ) - { - groupDir = path; - } - else - { - groupDir = path + "." + groupDir; - } - ctr++; - } - - // groupMetadata - if ( metaGroupId != null && metaGroupId.equals( groupDir ) ) - { - metadata = new GroupRepositoryMetadata( metaGroupId ); - } - else - { - /* If we reached this point, we have some bad metadata. - * We have a metadata file, with values for groupId / artifactId / version. - * But the information it is providing does not exist relative to the file location. - * - * See ${basedir}/src/test/repository/javax/maven-metadata.xml for example - */ - throw new ConsumerException( metadataFile, - "Contents of metadata are not appropriate for its location on disk." ); - } - } - - return metadata; - } -} diff --git a/archiva-consumer-api/src/test/java/org/apache/maven/archiva/consumers/MockArtifactConsumer.java b/archiva-consumer-api/src/test/java/org/apache/maven/archiva/consumers/MockArtifactConsumer.java index 2d1ccfe3c..66ad9a209 100644 --- a/archiva-consumer-api/src/test/java/org/apache/maven/archiva/consumers/MockArtifactConsumer.java +++ b/archiva-consumer-api/src/test/java/org/apache/maven/archiva/consumers/MockArtifactConsumer.java @@ -21,6 +21,7 @@ package org.apache.maven.archiva.consumers; import org.apache.maven.archiva.common.utils.BaseFile; import org.apache.maven.archiva.common.utils.PathUtil; +import org.apache.maven.archiva.consumers.core.GenericArtifactConsumer; import org.apache.maven.artifact.Artifact; import java.util.HashMap; diff --git a/archiva-consumer-api/src/test/java/org/apache/maven/archiva/consumers/MockModelConsumer.java b/archiva-consumer-api/src/test/java/org/apache/maven/archiva/consumers/MockModelConsumer.java index b52ec372c..98adf8ee9 100644 --- a/archiva-consumer-api/src/test/java/org/apache/maven/archiva/consumers/MockModelConsumer.java +++ b/archiva-consumer-api/src/test/java/org/apache/maven/archiva/consumers/MockModelConsumer.java @@ -20,7 +20,7 @@ package org.apache.maven.archiva.consumers; */ import org.apache.maven.archiva.common.utils.BaseFile; -import org.apache.maven.archiva.consumers.GenericModelConsumer; +import org.apache.maven.archiva.consumers.core.GenericModelConsumer; import org.apache.maven.model.Model; import java.util.HashMap; diff --git a/archiva-consumer-api/src/test/java/org/apache/maven/archiva/consumers/MockRepositoryMetadataConsumer.java b/archiva-consumer-api/src/test/java/org/apache/maven/archiva/consumers/MockRepositoryMetadataConsumer.java index a9a63eab5..b58dc57a9 100644 --- a/archiva-consumer-api/src/test/java/org/apache/maven/archiva/consumers/MockRepositoryMetadataConsumer.java +++ b/archiva-consumer-api/src/test/java/org/apache/maven/archiva/consumers/MockRepositoryMetadataConsumer.java @@ -20,7 +20,7 @@ package org.apache.maven.archiva.consumers; */ import org.apache.maven.archiva.common.utils.BaseFile; -import org.apache.maven.archiva.consumers.GenericRepositoryMetadataConsumer; +import org.apache.maven.archiva.consumers.core.GenericRepositoryMetadataConsumer; import org.apache.maven.artifact.repository.metadata.RepositoryMetadata; import java.util.HashMap; diff --git a/pom.xml b/pom.xml index db60e0488..c3a69b1a2 100644 --- a/pom.xml +++ b/pom.xml @@ -246,6 +246,16 @@ archiva-consumer-api ${archiva.version} + + org.apache.maven.archiva + archiva-model + ${archiva.version} + + + org.apache.maven.archiva + archiva-database + ${archiva.version} + org.apache.maven.archiva archiva-discoverer @@ -300,7 +310,7 @@ org.codehaus.plexus plexus-digest - 1.0 + 1.1-SNAPSHOT org.codehaus.plexus.security -- 2.39.5