Author: joakime Date: Tue May 22 07:43:07 2007 New Revision: 540599 URL: http://svn.apache.org/viewvc?view=rev&rev=540599 Log: [MRM-346]: Show Artifact results in error 500.
Modified: maven/archiva/trunk/archiva-base/archiva-model/src/main/mdo/archiva-base.xml maven/archiva/trunk/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/project/readers/ProjectModel400Reader.java maven/archiva/trunk/archiva-database/src/test/java/org/apache/maven/archiva/database/jdo/JdoProjectModelDAOTest.java maven/archiva/trunk/archiva-database/src/test/resources/projects/maven-shared-jar-1.0-SNAPSHOT.pom Modified: maven/archiva/trunk/archiva-base/archiva-model/src/main/mdo/archiva-base.xml URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-model/src/main/mdo/archiva-base.xml?view=diff&rev=540599&r1=540598&r2=540599 ============================================================================== --- maven/archiva/trunk/archiva-base/archiva-model/src/main/mdo/archiva-base.xml (original) +++ maven/archiva/trunk/archiva-base/archiva-model/src/main/mdo/archiva-base.xml Tue May 22 07:43:07 2007 @@ -596,7 +596,8 @@ <description> The snapshot version id. </description> - <association> + <association stash.part="true" + jpox.join="false"> <type>SnapshotVersion</type> <multiplicity>1</multiplicity> </association> @@ -736,36 +737,29 @@ --> <class stash.storable="true" - jpox.table="PROJECT_REFERENCE" - jpox.use-identifiers-as-primary-key="false" - jpox.identity-type="application" - jpox.identity-class="org.apache.maven.archiva.model.jpox.ProjectReferenceKey"> + jpox.table="PROJECT_REFERENCE"> <name>ProjectReference</name> <description>A reference to another (unversioned) Project</description> <version>1.0.0+</version> <fields> - <field jpox.primary-key="true" - jpox.value-strategy="off" - jpox.persistence-modifier="persistent"> + <field null-value="default"> <name>groupId</name> - <identifier>true</identifier> + <identifier>false</identifier> <version>1.0.0+</version> <type>String</type> <required>true</required> <description> - The Group ID of the repository content. + The Group ID of the project reference. </description> </field> - <field jpox.primary-key="true" - jpox.value-strategy="off" - jpox.persistence-modifier="persistent"> + <field null-value="default"> <name>artifactId</name> - <identifier>true</identifier> + <identifier>false</identifier> <version>1.0.0+</version> <type>String</type> <required>true</required> <description> - The Artifact ID of the repository content. + The Artifact ID of the project reference. </description> </field> </fields> @@ -776,23 +770,42 @@ private static final long serialVersionUID = 8947981859537138991L; ]]></code> </codeSegment> + <codeSegment> + <version>1.0.0+</version> + <code><![CDATA[ + private static String defaultString( String value ) + { + if ( value == null ) + { + return ""; + } + + return value.trim(); + } + + public static String toKey( ProjectReference reference ) + { + StringBuffer key = new StringBuffer(); + + key.append( defaultString( reference.getGroupId() ) ).append( ":" ); + key.append( defaultString( reference.getArtifactId() ) ).append( ":" ); + + return key.toString(); + } + ]]></code> + </codeSegment> </codeSegments> </class> <class stash.storable="true" - jpox.table="VERSIONED_REFERENCE" - jpox.use-identifiers-as-primary-key="false" - jpox.identity-type="application" - jpox.identity-class="org.apache.maven.archiva.model.jpox.VersionedReferenceKey"> + jpox.table="VERSIONED_REFERENCE"> <name>VersionedReference</name> <description>A reference to another Versioned Project</description> <version>1.0.0+</version> <fields> - <field jpox.primary-key="true" - jpox.value-strategy="off" - jpox.persistence-modifier="persistent"> + <field null-value="default"> <name>groupId</name> - <identifier>true</identifier> + <identifier>false</identifier> <version>1.0.0+</version> <type>String</type> <required>true</required> @@ -800,11 +813,9 @@ The Group ID of the repository content. </description> </field> - <field jpox.primary-key="true" - jpox.value-strategy="off" - jpox.persistence-modifier="persistent"> + <field null-value="default"> <name>artifactId</name> - <identifier>true</identifier> + <identifier>false</identifier> <version>1.0.0+</version> <type>String</type> <required>true</required> @@ -812,11 +823,9 @@ The Artifact ID of the repository content. </description> </field> - <field jpox.primary-key="true" - jpox.value-strategy="off" - jpox.persistence-modifier="persistent"> + <field null-value="default"> <name>version</name> - <identifier>true</identifier> + <identifier>false</identifier> <version>1.0.0+</version> <type>String</type> <required>false</required> @@ -832,22 +841,42 @@ private static final long serialVersionUID = -6990353165677563113L; ]]></code> </codeSegment> + <codeSegment> + <version>1.0.0+</version> + <code><![CDATA[ + private static String defaultString( String value ) + { + if ( value == null ) + { + return ""; + } + + return value.trim(); + } + + public static String toKey( VersionedReference reference ) + { + StringBuffer key = new StringBuffer(); + + key.append( defaultString( reference.getGroupId() ) ).append( ":" ); + key.append( defaultString( reference.getArtifactId() ) ).append( ":" ); + key.append( defaultString( reference.getVersion() ) ).append( ":" ); + + return key.toString(); + } + ]]></code> + </codeSegment> </codeSegments> </class> <class stash.storable="true" - jpox.table="ARTIFACT_REFERENCE" - jpox.use-identifiers-as-primary-key="false" - jpox.identity-type="application" - jpox.identity-class="org.apache.maven.archiva.model.jpox.ArtifactReferenceKey"> + jpox.table="ARTIFACT_REFERENCE"> <name>ArtifactReference</name> <version>1.0.0+</version> <fields> - <field jpox.primary-key="true" - jpox.value-strategy="off" - jpox.persistence-modifier="persistent"> + <field null-value="default"> <name>groupId</name> - <identifier>true</identifier> + <identifier>false</identifier> <version>1.0.0+</version> <type>String</type> <required>true</required> @@ -855,11 +884,9 @@ The Group ID of the repository content. </description> </field> - <field jpox.primary-key="true" - jpox.value-strategy="off" - jpox.persistence-modifier="persistent"> + <field null-value="default"> <name>artifactId</name> - <identifier>true</identifier> + <identifier>false</identifier> <version>1.0.0+</version> <type>String</type> <required>true</required> @@ -867,11 +894,9 @@ The Artifact ID of the repository content. </description> </field> - <field jpox.primary-key="true" - jpox.value-strategy="off" - jpox.persistence-modifier="persistent"> + <field null-value="default"> <name>version</name> - <identifier>true</identifier> + <identifier>false</identifier> <version>1.0.0+</version> <type>String</type> <required>false</required> @@ -879,11 +904,9 @@ The version of the repository content. </description> </field> - <field jpox.primary-key="true" - jpox.value-strategy="off" - jpox.persistence-modifier="persistent"> + <field null-value="default"> <name>classifier</name> - <identifier>true</identifier> + <identifier>false</identifier> <version>1.0.0+</version> <type>String</type> <required>true</required> @@ -891,12 +914,10 @@ The classifier for this artifact. </description> </field> - <field jpox.primary-key="true" - jpox.value-strategy="off" - jpox.persistence-modifier="persistent" + <field null-value="default" jpox.column="FILE_TYPE"> <name>type</name> - <identifier>true</identifier> + <identifier>false</identifier> <version>1.0.0+</version> <type>String</type> <required>true</required> @@ -915,19 +936,25 @@ <codeSegment> <version>1.0.0+</version> <code><![CDATA[ + private static String defaultString( String value ) + { + if ( value == null ) + { + return ""; + } + + return value.trim(); + } + public static String toKey( ArtifactReference artifactReference ) { StringBuffer key = new StringBuffer(); - key.append( artifactReference.getGroupId() ).append( ":" ); - key.append( artifactReference.getArtifactId() ).append( ":" ); - key.append( artifactReference.getVersion() ).append( ":" ); - if ( artifactReference.getClassifier() != null ) - { - key.append( artifactReference.getClassifier() ); - } - key.append( ":" ); - key.append( artifactReference.getType() ); + key.append( defaultString( artifactReference.getGroupId() ) ).append( ":" ); + key.append( defaultString( artifactReference.getArtifactId() ) ).append( ":" ); + key.append( defaultString( artifactReference.getVersion() ) ).append( ":" ); + key.append( defaultString( artifactReference.getClassifier() ) ).append( ":" ); + key.append( defaultString( artifactReference.getType() ) ); return key.toString(); } @@ -936,14 +963,10 @@ { StringBuffer key = new StringBuffer(); - key.append( artifactReference.getGroupId() ).append( ":" ); - key.append( artifactReference.getArtifactId() ).append( ":" ); - if ( artifactReference.getClassifier() != null ) - { - key.append( artifactReference.getClassifier() ); - } - key.append( ":" ); - key.append( artifactReference.getType() ); + key.append( defaultString( artifactReference.getGroupId() ) ).append( ":" ); + key.append( defaultString( artifactReference.getArtifactId() ) ).append( ":" ); + key.append( defaultString( artifactReference.getClassifier() ) ).append( ":" ); + key.append( defaultString( artifactReference.getType() ) ); return key.toString(); } @@ -1010,7 +1033,8 @@ <identifier>false</identifier> <version>1.0.0+</version> <required>false</required> - <association> + <association stash.part="true" + jpox.join="false"> <type>VersionedReference</type> <multiplicity>1</multiplicity> </association> @@ -1083,7 +1107,8 @@ <identifier>false</identifier> <version>1.0.0+</version> <required>false</required> - <association> + <association stash.part="true" + jpox.join="false"> <type>Organization</type> </association> </field> @@ -1092,7 +1117,8 @@ <identifier>false</identifier> <version>1.0.0+</version> <required>false</required> - <association> + <association stash.part="true" + jpox.join="false"> <type>License</type> <multiplicity>*</multiplicity> </association> @@ -1102,7 +1128,8 @@ <version>1.0.0+</version> <description>The mailing lists.</description> <required>false</required> - <association> + <association stash.part="true" + jpox.join="false"> <type>MailingList</type> <multiplicity>*</multiplicity> </association> @@ -1111,7 +1138,8 @@ <name>issueManagement</name> <version>1.0.0+</version> <description><![CDATA[The project's issue management system information.]]></description> - <association> + <association stash.part="true" + jpox.join="false"> <type>IssueManagement</type> </association> </field> @@ -1119,7 +1147,8 @@ <name>ciManagement</name> <version>1.0.0+</version> <description><![CDATA[The project's continuous integration information.]]></description> - <association> + <association stash.part="true" + jpox.join="false"> <type>CiManagement</type> </association> </field> @@ -1128,7 +1157,8 @@ <version>1.0.0+</version> <description> <![CDATA[Specification for the SCM used by the project, such as CVS, Subversion, etc.]]></description> - <association> + <association stash.part="true" + jpox.join="false"> <type>Scm</type> </association> </field> @@ -1138,7 +1168,8 @@ <description> The list of individuals around this project. </description> - <association> + <association stash.part="true" + jpox.join="false"> <type>Individual</type> <multiplicity>*</multiplicity> </association> @@ -1150,7 +1181,8 @@ This element describes all of the dependencies associated with a project. ]]></description> - <association> + <association stash.part="true" + jpox.join="false"> <type>Dependency</type> <multiplicity>*</multiplicity> </association> @@ -1161,7 +1193,8 @@ <description> The list of dependency management settings. </description> - <association> + <association stash.part="true" + jpox.join="false"> <type>Dependency</type> <multiplicity>*</multiplicity> </association> @@ -1172,7 +1205,8 @@ <description> The list project repositories in use by this project. </description> - <association> + <association stash.part="true" + jpox.join="false"> <type>ProjectRepository</type> <multiplicity>*</multiplicity> </association> @@ -1183,7 +1217,8 @@ <description> The list of plugins that this project uses. </description> - <association> + <association stash.part="true" + jpox.join="false"> <type>ArtifactReference</type> <multiplicity>*</multiplicity> </association> @@ -1194,7 +1229,8 @@ <description> The list of reports that this project uses. </description> - <association> + <association stash.part="true" + jpox.join="false"> <type>ArtifactReference</type> <multiplicity>*</multiplicity> </association> @@ -1205,7 +1241,8 @@ <description> The list of build extensions that this project uses. </description> - <association> + <association stash.part="true" + jpox.join="false"> <type>ArtifactReference</type> <multiplicity>*</multiplicity> </association> @@ -1673,7 +1710,8 @@ Lists a set of artifacts that should be excluded from this dependency's artifact list when it comes to calculating transitive dependencies. </description> - <association> + <association stash.part="true" + jpox.join="false"> <type>Exclusion</type> <multiplicity>*</multiplicity> </association> Modified: maven/archiva/trunk/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/project/readers/ProjectModel400Reader.java URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/project/readers/ProjectModel400Reader.java?view=diff&rev=540599&r1=540598&r2=540599 ============================================================================== --- maven/archiva/trunk/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/project/readers/ProjectModel400Reader.java (original) +++ maven/archiva/trunk/archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/project/readers/ProjectModel400Reader.java Tue May 22 07:43:07 2007 @@ -105,6 +105,8 @@ model.setReports( getReports( xml ) ); model.setProperties( getProperties( xml.getElement( "//project/properties" ) ) ); + model.setBuildExtensions( getBuildExtensions( xml ) ); + return model; } catch ( XMLException e ) @@ -126,6 +128,31 @@ return reference; } + /** + * Get List of [EMAIL PROTECTED] ArtifactReference} objects from xpath expr. + */ + private List getArtifactReferenceList( XMLReader xml, String xpathExpr, String defaultType ) + throws XMLException + { + List plugins = new ArrayList(); + + Iterator it = xml.getElementList( xpathExpr ).iterator(); + while ( it.hasNext() ) + { + Element elemPlugin = (Element) it.next(); + + plugins.add( getArtifactReference( elemPlugin, defaultType ) ); + } + + return plugins; + } + + private List getBuildExtensions( XMLReader xml ) + throws XMLException + { + return getArtifactReferenceList( xml, "//project/build/extensions/extension", "jar" ); + } + private CiManagement getCiManagement( XMLReader xml ) throws XMLException { @@ -305,6 +332,34 @@ 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 List getMailingLists( XMLReader xml ) throws XMLException { @@ -343,34 +398,6 @@ return mailingLists; } - 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 { @@ -404,26 +431,7 @@ private List getPlugins( XMLReader xml ) throws XMLException { - return getPlugins( xml, "//project/build/plugins/plugin" ); - } - - /** - * Get List of [EMAIL PROTECTED] 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( getArtifactReference( elemPlugin, "maven-plugin" ) ); - } - - return plugins; + return getArtifactReferenceList( xml, "//project/build/plugins/plugin", "maven-plugin" ); } private Properties getProperties( Element elemProperties ) @@ -448,7 +456,7 @@ private List getReports( XMLReader xml ) throws XMLException { - return getPlugins( xml, "//project/reporting/plugins/plugin" ); + return getArtifactReferenceList( xml, "//project/reporting/plugins/plugin", "maven-plugin" ); } private List getRepositories( XMLReader xml ) Modified: maven/archiva/trunk/archiva-database/src/test/java/org/apache/maven/archiva/database/jdo/JdoProjectModelDAOTest.java URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-database/src/test/java/org/apache/maven/archiva/database/jdo/JdoProjectModelDAOTest.java?view=diff&rev=540599&r1=540598&r2=540599 ============================================================================== --- maven/archiva/trunk/archiva-database/src/test/java/org/apache/maven/archiva/database/jdo/JdoProjectModelDAOTest.java (original) +++ maven/archiva/trunk/archiva-database/src/test/java/org/apache/maven/archiva/database/jdo/JdoProjectModelDAOTest.java Tue May 22 07:43:07 2007 @@ -19,6 +19,8 @@ * under the License. */ +import org.apache.commons.beanutils.PropertyUtils; +import org.apache.commons.lang.StringUtils; import org.apache.maven.archiva.database.AbstractArchivaDatabaseTestCase; import org.apache.maven.archiva.database.ProjectModelDAO; import org.apache.maven.archiva.model.ArchivaProjectModel; @@ -26,7 +28,9 @@ import org.apache.maven.archiva.repository.project.ProjectModelReader; import java.io.File; +import java.util.ArrayList; import java.util.Date; +import java.util.Iterator; import java.util.List; import javax.jdo.JDOHelper; @@ -111,7 +115,7 @@ assertEquals( 0, projectDao.queryProjectModels( null ).size() ); } - public void disabled_testSaveGetRealProjectModel() + public void testSaveGetRealProjectModel() throws Exception { String groupId = "org.apache.maven.shared"; @@ -129,7 +133,12 @@ ArchivaProjectModel model = modelReader.read( pomFile ); assertNotNull( "Model should not be null.", model ); - // Fill in missing (mandatory) fields + /* NOTE: We are intentionally using a basic project model in this unit test. + * The expansion of expressions, resolving of dependencies, and merging + * of parent poms is *NOT* performed to keep this unit test simple. + */ + + // Fill in mandatory/missing fields model.setGroupId( groupId ); model.setOrigin( "testcase" ); @@ -139,6 +148,39 @@ assertNotNull( "Project model should not be null.", savedModel ); // Test proper detachment of sub-objects. - assertNotNull( "model.parent != null", savedModel.getParentProject() ); + List exprs = new ArrayList(); + exprs.add( "parentProject.groupId" ); + exprs.add( "organization.name" ); + exprs.add( "issueManagement.system" ); + exprs.add( "ciManagement.system" ); + exprs.add( "scm.url" ); + exprs.add( "individuals[0].name" ); + exprs.add( "dependencies[0].groupId" ); + exprs.add( "dependencyManagement[0].artifactId" ); + exprs.add( "repositories[0].id" ); + exprs.add( "plugins[0].artifactId" ); + exprs.add( "reports[0].artifactId" ); + exprs.add( "buildExtensions[0].artifactId" ); + exprs.add( "licenses[0].url" ); + exprs.add( "mailingLists[0].name" ); + + Iterator it = exprs.iterator(); + while ( it.hasNext() ) + { + String expr = (String) it.next(); + try + { + Object obj = PropertyUtils.getProperty( model, expr ); + assertNotNull( "Expr \"" + expr + "\" != null", obj ); + assertTrue( "Expr \"" + expr + "\" should be a String.", ( obj instanceof String ) ); + String value = (String) obj; + assertTrue( "Expr \"" + expr + "\" value should not be blank.", StringUtils.isNotBlank( value ) ); + } + catch ( IndexOutOfBoundsException e ) + { + fail( "Expr \"" + expr + "\" unable to get indexed property: " + e.getClass().getName() + ": " + + e.getMessage() ); + } + } } } Modified: maven/archiva/trunk/archiva-database/src/test/resources/projects/maven-shared-jar-1.0-SNAPSHOT.pom URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-database/src/test/resources/projects/maven-shared-jar-1.0-SNAPSHOT.pom?view=diff&rev=540599&r1=540598&r2=540599 ============================================================================== --- maven/archiva/trunk/archiva-database/src/test/resources/projects/maven-shared-jar-1.0-SNAPSHOT.pom (original) +++ maven/archiva/trunk/archiva-database/src/test/resources/projects/maven-shared-jar-1.0-SNAPSHOT.pom Tue May 22 07:43:07 2007 @@ -39,7 +39,45 @@ <developerConnection>scm:svn:https://svn.apache.org/repos/asf/maven/sandbox/maven-shared-jar</developerConnection> <url>http://svn.apache.org/viewcvs.cgi/maven/sandbox/maven-shared-jar</url> </scm> - + + <organization> + <name>Apache</name> + </organization> + + <issueManagement> + <system>jira</system> + </issueManagement> + + <ciManagement> + <system>continuum</system> + </ciManagement> + + <developers> + <developer> + <id>joakime</id> + <email>[EMAIL PROTECTED]</email> + <name>Joakim Erdfelt</name> + </developer> + </developers> + + <contributors> + <contributor> + <name>Someone Else</name> + </contributor> + </contributors> + + <licenses> + <license> + <url>http://www.apache.org/licenses/LICENSE-2.0</url> + </license> + </licenses> + + <mailingLists> + <mailingList> + <name>Shared Mailing List</name> + </mailingList> + </mailingLists> + <build> <plugins> <plugin> @@ -65,6 +103,13 @@ </executions> </plugin> </plugins> + <extensions> + <extension> + <groupId>org.apache.maven.wagon</groupId> + <artifactId>wagon-webdav</artifactId> + <version>1.0-beta-2</version> + </extension> + </extensions> </build> <reporting> @@ -134,12 +179,21 @@ </snapshots> </repository> </repositories> + + <dependencyManagement> + <dependencies> + <dependency> + <groupId>org.apache.maven</groupId> + <artifactId>maven-model</artifactId> + <version>2.0.5</version> + </dependency> + </dependencies> + </dependencyManagement> <dependencies> <dependency> <groupId>org.apache.maven</groupId> <artifactId>maven-model</artifactId> - <version>2.0.2</version> <scope>compile</scope> </dependency>