]> source.dussan.org Git - archiva.git/commitdiff
[MRM-346]: Show Artifact results in error 500.
authorJoakim Erdfelt <joakime@apache.org>
Tue, 22 May 2007 14:43:07 +0000 (14:43 +0000)
committerJoakim Erdfelt <joakime@apache.org>
Tue, 22 May 2007 14:43:07 +0000 (14:43 +0000)
git-svn-id: https://svn.apache.org/repos/asf/maven/archiva/trunk@540599 13f79535-47bb-0310-9956-ffa450edef68

archiva-base/archiva-model/src/main/mdo/archiva-base.xml
archiva-base/archiva-repository-layer/src/main/java/org/apache/maven/archiva/repository/project/readers/ProjectModel400Reader.java
archiva-database/src/test/java/org/apache/maven/archiva/database/jdo/JdoProjectModelDAOTest.java
archiva-database/src/test/resources/projects/maven-shared-jar-1.0-SNAPSHOT.pom

index ffab35ce81479f6d966d1d41261a3b1b688e3f3a..16bd14693297dac88b15873ccd97bca26cb2e008 100644 (file)
           <description>
             The snapshot version id.
           </description>
-          <association>
+          <association stash.part="true"
+                       jpox.join="false">
             <type>SnapshotVersion</type>
             <multiplicity>1</multiplicity>
           </association>
      -->
 
     <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>
     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>
             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>
             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>
     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>
             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>
             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>
             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>
             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>
         <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();
     }
     {
         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();
     }
           <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>
           <identifier>false</identifier>
           <version>1.0.0+</version>
           <required>false</required>
-          <association>
+          <association stash.part="true"
+                       jpox.join="false">
             <type>Organization</type>
           </association>
         </field>
           <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>
           <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>
           <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>
           <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>
           <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>
           <description>
             The list of individuals around this project.
           </description>
-          <association>
+          <association stash.part="true"
+                       jpox.join="false">
             <type>Individual</type>
             <multiplicity>*</multiplicity>
           </association>
               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>
           <description>
             The list of dependency management settings.
           </description>
-          <association>
+          <association stash.part="true"
+                       jpox.join="false">
             <type>Dependency</type>
             <multiplicity>*</multiplicity>
           </association>
           <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>
           <description>
             The list of plugins that this project uses.
           </description>
-          <association>
+          <association stash.part="true"
+                       jpox.join="false">
             <type>ArtifactReference</type>
             <multiplicity>*</multiplicity>
           </association>
           <description>
             The list of reports that this project uses.
           </description>
-          <association>
+          <association stash.part="true"
+                       jpox.join="false">
             <type>ArtifactReference</type>
             <multiplicity>*</multiplicity>
           </association>
           <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>
             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>
index c11a97f8fa6bf6a973642361a98d6a3032338869..d6fdbd20f83683d6208c2fde83b0cd49c1f909b6 100644 (file)
@@ -105,6 +105,8 @@ public class ProjectModel400Reader
             model.setReports( getReports( xml ) );
             model.setProperties( getProperties( xml.getElement( "//project/properties" ) ) );
 
+            model.setBuildExtensions( getBuildExtensions( xml ) );
+
             return model;
         }
         catch ( XMLException e )
@@ -126,6 +128,31 @@ public class ProjectModel400Reader
         return reference;
     }
 
+    /**
+     * Get List of {@link 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 @@ public class ProjectModel400Reader
         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 @@ public class ProjectModel400Reader
         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 @@ public class ProjectModel400Reader
     private List getPlugins( XMLReader xml )
         throws XMLException
     {
-        return getPlugins( xml, "//project/build/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( getArtifactReference( elemPlugin, "maven-plugin" ) );
-        }
-
-        return plugins;
+        return getArtifactReferenceList( xml, "//project/build/plugins/plugin", "maven-plugin" );
     }
 
     private Properties getProperties( Element elemProperties )
@@ -448,7 +456,7 @@ public class ProjectModel400Reader
     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 )
index bca4e9553810cae8f957a1a9f6228d718895f9c5..fe4d96085ce2950d4ff9dec80755f62f3f290b3e 100644 (file)
@@ -19,6 +19,8 @@ package org.apache.maven.archiva.database.jdo;
  * 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.model.jpox.ArchivaProjectModelKey;
 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 @@ public class JdoProjectModelDAOTest
         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 @@ public class JdoProjectModelDAOTest
         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 @@ public class JdoProjectModelDAOTest
         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() );
+            }
+        }
     }
 }
index 9234995b71eec3538d8ca8f34a5d0bf17cb0b6c4..90ae915e6172e848fbd7295bed3ce9c053c3b92e 100644 (file)
     <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>joakime@apache.org</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>
         </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>
       </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>