Author: handyande
Date: Mon Feb 26 12:11:37 2007
New Revision: 511984
URL: http://svn.apache.org/viewvc?view=rev&rev=511984
Log:
Import a cleaner version of continuum-rpc-client, this makes more sense to the
user with a clear definition of ProjectSummary vs. Project. See the main
ContinuumClient class for the clean api, other classes have the same API as
before (where possible)...
Added:
maven/sandbox/trunk/continuum/continuum-client/ (with props)
maven/sandbox/trunk/continuum/continuum-client/pom.xml
maven/sandbox/trunk/continuum/continuum-client/src/
maven/sandbox/trunk/continuum/continuum-client/src/main/
maven/sandbox/trunk/continuum/continuum-client/src/main/java/
maven/sandbox/trunk/continuum/continuum-client/src/main/java/org/
maven/sandbox/trunk/continuum/continuum-client/src/main/java/org/apache/
maven/sandbox/trunk/continuum/continuum-client/src/main/java/org/apache/maven/
maven/sandbox/trunk/continuum/continuum-client/src/main/java/org/apache/maven/continuum/
maven/sandbox/trunk/continuum/continuum-client/src/main/java/org/apache/maven/continuum/client/
maven/sandbox/trunk/continuum/continuum-client/src/main/java/org/apache/maven/continuum/client/ClientException.java
maven/sandbox/trunk/continuum/continuum-client/src/main/java/org/apache/maven/continuum/client/ContinuumClient.java
maven/sandbox/trunk/continuum/continuum-client/src/main/java/org/apache/maven/continuum/client/ProjectsReader.java
- copied, changed from r511586,
maven/continuum/trunk/continuum-rpc-client/src/main/java/org/apache/maven/continuum/rpc/ProjectsReader.java
maven/sandbox/trunk/continuum/continuum-client/src/main/java/org/apache/maven/continuum/client/SampleClient.java
maven/sandbox/trunk/continuum/continuum-client/src/main/mdo/
maven/sandbox/trunk/continuum/continuum-client/src/main/mdo/continuum-client.xml
Propchange: maven/sandbox/trunk/continuum/continuum-client/
------------------------------------------------------------------------------
--- svn:ignore (added)
+++ svn:ignore Mon Feb 26 12:11:37 2007
@@ -0,0 +1,14 @@
+target
+*~
+.*.swp
+*.log
+*.patch
+*.diff
+*.ipr
+*.iws
+*.iml
+.classpath
+.project
+.settings
+.wtpmodules
+cobertura.ser
Added: maven/sandbox/trunk/continuum/continuum-client/pom.xml
URL:
http://svn.apache.org/viewvc/maven/sandbox/trunk/continuum/continuum-client/pom.xml?view=auto&rev=511984
==============================================================================
--- maven/sandbox/trunk/continuum/continuum-client/pom.xml (added)
+++ maven/sandbox/trunk/continuum/continuum-client/pom.xml Mon Feb 26 12:11:37
2007
@@ -0,0 +1,88 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+ ~ Licensed to the Apache Software Foundation (ASF) under one
+ ~ or more contributor license agreements. See the NOTICE file
+ ~ distributed with this work for additional information
+ ~ regarding copyright ownership. The ASF licenses this file
+ ~ to you under the Apache License, Version 2.0 (the
+ ~ "License"); you may not use this file except in compliance
+ ~ with the License. You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing,
+ ~ software distributed under the License is distributed on an
+ ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ ~ KIND, either express or implied. See the License for the
+ ~ specific language governing permissions and limitations
+ ~ under the License.
+ -->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/maven-v4_0_0.xsd">
+ <parent>
+ <artifactId>continuum-parent</artifactId>
+ <groupId>org.apache.maven.continuum</groupId>
+ <version>1.1-SNAPSHOT</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+ <artifactId>continuum-client</artifactId>
+ <name>Continuum remote client</name>
+ <description>Client code for accessing Apache Continuum servers</description>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.codehaus.modello</groupId>
+ <artifactId>modello-maven-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>modello-continuum</id>
+ <goals>
+ <goal>java</goal>
+ </goals>
+ <configuration>
+ <model>src/main/mdo/continuum-client.xml</model>
+ </configuration>
+ </execution>
+ </executions>
+ <configuration>
+ <version>1.1.0</version>
+ <packageWithVersion>false</packageWithVersion>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>exec-maven-plugin</artifactId>
+ <configuration>
+ <mainClass>org.apache.maven.continuum.client.SampleClient</mainClass>
+ <arguments>
+ <argument>${xmlRpcUrl}</argument>
+ </arguments>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+ <dependencies>
+ <dependency>
+ <groupId>xmlrpc</groupId>
+ <artifactId>xmlrpc</artifactId>
+ <version>2.0</version>
+ </dependency>
+ <dependency>
+ <groupId>commons-logging</groupId>
+ <artifactId>commons-logging</artifactId>
+ <version>1.0.2</version>
+ </dependency>
+ <dependency>
+ <groupId>commons-codec</groupId>
+ <artifactId>commons-codec</artifactId>
+ <version>1.3</version>
+ </dependency>
+ <dependency>
+ <groupId>commons-httpclient</groupId>
+ <artifactId>commons-httpclient</artifactId>
+ <version>2.0.2</version>
+ </dependency>
+ </dependencies>
+</project>
Added:
maven/sandbox/trunk/continuum/continuum-client/src/main/java/org/apache/maven/continuum/client/ClientException.java
URL:
http://svn.apache.org/viewvc/maven/sandbox/trunk/continuum/continuum-client/src/main/java/org/apache/maven/continuum/client/ClientException.java?view=auto&rev=511984
==============================================================================
---
maven/sandbox/trunk/continuum/continuum-client/src/main/java/org/apache/maven/continuum/client/ClientException.java
(added)
+++
maven/sandbox/trunk/continuum/continuum-client/src/main/java/org/apache/maven/continuum/client/ClientException.java
Mon Feb 26 12:11:37 2007
@@ -0,0 +1,25 @@
+package org.apache.maven.continuum.client;
+
+/**
+ * A wrapper for the specific protocol exceptions that may be encountered.
+ *
+ * @author Andrew Williams
+ */
+public class ClientException
+ extends Exception
+{
+ public ClientException( String message )
+ {
+ super( message );
+ }
+
+ public ClientException( Throwable cause )
+ {
+ super( cause );
+ }
+
+ public ClientException( String message, Throwable cause )
+ {
+ super( message, cause );
+ }
+}
Added:
maven/sandbox/trunk/continuum/continuum-client/src/main/java/org/apache/maven/continuum/client/ContinuumClient.java
URL:
http://svn.apache.org/viewvc/maven/sandbox/trunk/continuum/continuum-client/src/main/java/org/apache/maven/continuum/client/ContinuumClient.java?view=auto&rev=511984
==============================================================================
---
maven/sandbox/trunk/continuum/continuum-client/src/main/java/org/apache/maven/continuum/client/ContinuumClient.java
(added)
+++
maven/sandbox/trunk/continuum/continuum-client/src/main/java/org/apache/maven/continuum/client/ContinuumClient.java
Mon Feb 26 12:11:37 2007
@@ -0,0 +1,132 @@
+package org.apache.maven.continuum.client;
+
+/*
+ * 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.continuum.client.project.ContinuumProjectState;
+import org.apache.maven.continuum.client.ProjectsReader;
+import org.apache.maven.continuum.client.ClientException;
+import org.apache.maven.continuum.client.project.Project;
+import org.apache.maven.continuum.client.project.ProjectSummary;
+
+import java.util.Hashtable;
+import java.net.URL;
+
+/**
+ * A clean class for accessing the Continuum server.
+ * Contains a few utility methods for clients too.
+ *
+ * @author Andrew Williams
+ */
+public class ContinuumClient
+{
+ private static Hashtable statusMap;
+
+ private ProjectsReader source;
+
+ static
+ {
+ statusMap = new Hashtable();
+ statusMap.put( new Integer( ContinuumProjectState.NEW ), "New" );
+ statusMap.put( new Integer( ContinuumProjectState.CHECKEDOUT ), "New"
);
+ statusMap.put( new Integer( ContinuumProjectState.OK ), "OK" );
+ statusMap.put( new Integer( ContinuumProjectState.FAILED ), "Failed" );
+ statusMap.put( new Integer( ContinuumProjectState.ERROR ), "Error" );
+ statusMap.put( new Integer( ContinuumProjectState.BUILDING ),
"Building" );
+ statusMap.put( new Integer( ContinuumProjectState.CHECKING_OUT ),
"Checking out" );
+ statusMap.put( new Integer( ContinuumProjectState.UPDATING ),
"Updating" );
+ statusMap.put( new Integer( ContinuumProjectState.WARNING ), "Warning"
);
+ }
+
+ /**
+ * Get the textual representation (in English) of a status code.
+ *
+ * @param status The status code to look up.
+ * @return The title of the status code.
+ */
+ public static String getStatusMessage( int status )
+ {
+ Integer statusInt = new Integer( status );
+
+ if ( statusMap.containsKey( statusInt ) )
+ {
+ return (String) statusMap.get( new Integer( status ) );
+ }
+
+ return "Unknown";
+ }
+
+ public ContinuumClient( URL serverUrl )
+ {
+ source = new ProjectsReader( serverUrl );
+ }
+
+ /**
+ * Get a list of the configured projects from the connected XMLRPC server.
+ * Note that the returned project objects are not fully populated. To get
all the project information one must
+ * call <code>getProject( id )</code>.
+ *
+ * @return A list of project objects containing summary information about
each project on the server.
+ * @throws ClientException
+ * @see #getProject(int)
+ */
+ public ProjectSummary[] getProjects()
+ throws ClientException
+ {
+ try
+ {
+ return source.readProjects();
+ }
+ catch ( Exception e )
+ {
+ throw new ClientException( e );
+ }
+ }
+
+ /**
+ * Get a project with a complete set of information retrieved from the
XMLRPC server.
+ *
+ * @param id The id of the project to look up.
+ * @return The project object populated with all information available
from the server.
+ * @throws ClientException
+ */
+ public Project getProject( int id )
+ throws ClientException
+ {
+ try
+ {
+ Project ret = new Project();
+
+ ret.setId( id );
+ source.refreshProject( ret );
+
+ return ret;
+ }
+ catch ( Exception e )
+ {
+ throw new ClientException( e );
+ }
+ }
+
+ public Project getProject( ProjectSummary summary )
+ throws ClientException
+ {
+ return getProject( summary.getId() );
+ }
+}
Copied:
maven/sandbox/trunk/continuum/continuum-client/src/main/java/org/apache/maven/continuum/client/ProjectsReader.java
(from r511586,
maven/continuum/trunk/continuum-rpc-client/src/main/java/org/apache/maven/continuum/rpc/ProjectsReader.java)
URL:
http://svn.apache.org/viewvc/maven/sandbox/trunk/continuum/continuum-client/src/main/java/org/apache/maven/continuum/client/ProjectsReader.java?view=diff&rev=511984&p1=maven/continuum/trunk/continuum-rpc-client/src/main/java/org/apache/maven/continuum/rpc/ProjectsReader.java&r1=511586&p2=maven/sandbox/trunk/continuum/continuum-client/src/main/java/org/apache/maven/continuum/client/ProjectsReader.java&r2=511984
==============================================================================
---
maven/continuum/trunk/continuum-rpc-client/src/main/java/org/apache/maven/continuum/rpc/ProjectsReader.java
(original)
+++
maven/sandbox/trunk/continuum/continuum-client/src/main/java/org/apache/maven/continuum/client/ProjectsReader.java
Mon Feb 26 12:11:37 2007
@@ -1,4 +1,4 @@
-package org.apache.maven.continuum.rpc;
+package org.apache.maven.continuum.client;
/*
* Licensed to the Apache Software Foundation (ASF) under one
@@ -19,14 +19,13 @@
* under the License.
*/
-import org.apache.maven.continuum.model.project.BuildDefinition;
-import org.apache.maven.continuum.model.project.BuildResult;
-import org.apache.maven.continuum.model.project.Profile;
-import org.apache.maven.continuum.model.project.Project;
-import org.apache.maven.continuum.model.project.ProjectDependency;
-import org.apache.maven.continuum.model.project.ProjectDeveloper;
-import org.apache.maven.continuum.model.project.Schedule;
-import org.apache.maven.continuum.model.scm.ScmResult;
+import org.apache.maven.continuum.client.project.BuildDefinition;
+import org.apache.maven.continuum.client.project.Profile;
+import org.apache.maven.continuum.client.project.Project;
+import org.apache.maven.continuum.client.project.ProjectDependency;
+import org.apache.maven.continuum.client.project.ProjectDeveloper;
+import org.apache.maven.continuum.client.project.Schedule;
+import org.apache.maven.continuum.client.project.ProjectSummary;
import org.apache.xmlrpc.XmlRpcClient;
import org.apache.xmlrpc.XmlRpcException;
@@ -51,6 +50,8 @@
/**
* Creates a new instance of ProjectsReader
+ *
+ * @param serverUrl the URL of the XMLRPC server we wish to query.
*/
public ProjectsReader( URL serverUrl )
{
@@ -62,7 +63,17 @@
executorMap.put( "maven2", "MavenTwo" );
}
- public Project[] readProjects()
+ /**
+ * Get a list of the configured projects from the connected XMLRPC server.
+ * Note that the returned project objects are not fully populated. To get
all the project information one must
+ * call <code>refreshProject( project )</code>.
+ *
+ * @return A list of project objects containing summary information about
each project on the server.
+ * @throws XmlRpcException
+ * @throws IOException
+ * @see #refreshProject(Project)
+ */
+ public ProjectSummary[] readProjects()
throws XmlRpcException, IOException
{
XmlRpcClient client = new XmlRpcClient( server );
@@ -76,7 +87,7 @@
while ( it.hasNext() )
{
Hashtable proj = (Hashtable) it.next();
- set.add( populateProject( proj, new Project() ) );
+ set.add( populateProjectSummary( proj, new ProjectSummary() )
);
}
}
else if ( obj instanceof XmlRpcException )
@@ -84,9 +95,17 @@
throw (XmlRpcException) obj;
}
- return (Project[]) set.toArray( new Project[set.size()] );
+ return (ProjectSummary[]) set.toArray( new ProjectSummary[set.size()]
);
}
+ /**
+ * Populate a project with a complete set of information retrieved from
the XMLRPC server.
+ * Note that the Project object must already have it's id set (by calling
<code>setId(int)</code>).
+ *
+ * @param proj The project to populate (it must have at least the id set).
+ * @throws XmlRpcException
+ * @throws IOException
+ */
public void refreshProject( Project proj )
throws XmlRpcException, IOException
{
@@ -198,7 +217,7 @@
}
}
- private Project populateProject( Hashtable hashtable, Project instance )
+ private ProjectSummary populateProjectSummary( Hashtable hashtable,
ProjectSummary instance )
{
instance.setArtifactId( (String) hashtable.get( "artifactId" ) );
instance.setGroupId( (String) hashtable.get( "groupId" ) );
@@ -217,7 +236,41 @@
instance.setState( Integer.parseInt( (String) hashtable.get( "state" )
) );
instance.setOldState( Integer.parseInt( (String) hashtable.get(
"oldState" ) ) );
instance.setBuildNumber( Integer.parseInt( (String) hashtable.get(
"buildNumber" ) ) );
+ Vector deps = (Vector) hashtable.get( "dependencies" );
+ if ( deps != null )
+ {
+ Iterator it = deps.iterator();
+ List vals = new ArrayList();
+ while ( it.hasNext() )
+ {
+ Hashtable dep = (Hashtable) it.next();
+ ProjectDependency dependency = new ProjectDependency();
+ dependency.setArtifactId( (String) dep.get( "artifactId" ) );
+ dependency.setGroupId( (String) dep.get( "groupId" ) );
+ dependency.setVersion( (String) dep.get( "version" ) );
+ vals.add( dependency );
+ }
+ instance.setDependencies( vals );
+ }
+ Hashtable par = (Hashtable) hashtable.get( "parent" );
+ if ( par != null )
+ {
+ ProjectDependency parent = new ProjectDependency();
+ parent.setArtifactId( (String) par.get( "artifactId" ) );
+ parent.setGroupId( (String) par.get( "groupId" ) );
+ parent.setVersion( (String) par.get( "version" ) );
+ instance.setParent( parent );
+ }
+
+ return instance;
+ }
+
+ private Project populateProject( Hashtable hashtable, Project instance )
+ {
+ populateProjectSummary( hashtable, instance );
+
Vector buildDefinitions = (Vector) hashtable.get( "buildDefinitions" );
+
if ( buildDefinitions != null )
{
Iterator it = buildDefinitions.iterator();
@@ -255,54 +308,6 @@
}
instance.setBuildDefinitions( defs );
}
- Vector buildRes = (Vector) hashtable.get( "buildResults" );
- if ( buildRes != null )
- {
- Iterator it = buildRes.iterator();
- List results = new ArrayList();
- while ( it.hasNext() )
- {
- Hashtable res = (Hashtable) it.next();
- BuildResult result = new BuildResult();
- result.setBuildNumber( Integer.parseInt( (String) res.get(
"buildNumber" ) ) );
- result.setEndTime( Long.parseLong( (String) res.get( "endTime"
) ) );
- result.setError( (String) res.get( "error" ) );
- result.setExitCode( Integer.parseInt( (String) res.get(
"exitCode" ) ) );
- result.setId( Integer.parseInt( (String) res.get( "id" ) ) );
-//TODO result.setScmResult();
- result.setStartTime( Long.parseLong( (String) res.get(
"startTime" ) ) );
- result.setState( Integer.parseInt( (String) res.get( "state" )
) );
- result.setSuccess( Boolean.getBoolean( (String) res.get(
"success" ) ) );
- result.setTrigger( Integer.parseInt( (String) res.get(
"trigger" ) ) );
- results.add( result );
- }
- instance.setBuildResults( results );
- }
- Vector deps = (Vector) hashtable.get( "dependencies" );
- if ( deps != null )
- {
- Iterator it = deps.iterator();
- List vals = new ArrayList();
- while ( it.hasNext() )
- {
- Hashtable dep = (Hashtable) it.next();
- ProjectDependency dependency = new ProjectDependency();
- dependency.setArtifactId( (String) dep.get( "artifactId" ) );
- dependency.setGroupId( (String) dep.get( "groupId" ) );
- dependency.setVersion( (String) dep.get( "version" ) );
- vals.add( dependency );
- }
- instance.setDependencies( vals );
- }
- Hashtable par = (Hashtable) hashtable.get( "parent" );
- if ( par != null )
- {
- ProjectDependency parent = new ProjectDependency();
- parent.setArtifactId( (String) par.get( "artifactId" ) );
- parent.setGroupId( (String) par.get( "groupId" ) );
- parent.setVersion( (String) par.get( "version" ) );
- instance.setParent( parent );
- }
Vector devs = (Vector) hashtable.get( "developers" );
if ( devs != null )
{
@@ -334,19 +339,6 @@
// }
// instance.setNotifiers(vals);
// }
- Hashtable checkout = (Hashtable) hashtable.get( "checkoutResult" );
- if ( checkout != null )
- {
- ScmResult res = new ScmResult();
- res.setSuccess( Boolean.getBoolean( (String) checkout.get(
"success" ) ) );
- res.setCommandLine( (String) checkout.get( "commandLine" ) );
-//TODO res.setChanges();
- res.setCommandOutput( (String) checkout.get( "commandOutput" ) );
- res.setException( (String) checkout.get( "exception" ) );
- res.setProviderMessage( (String) checkout.get( "providerMessage" )
);
- instance.setCheckoutResult( res );
-
- }
return instance;
}
Added:
maven/sandbox/trunk/continuum/continuum-client/src/main/java/org/apache/maven/continuum/client/SampleClient.java
URL:
http://svn.apache.org/viewvc/maven/sandbox/trunk/continuum/continuum-client/src/main/java/org/apache/maven/continuum/client/SampleClient.java?view=auto&rev=511984
==============================================================================
---
maven/sandbox/trunk/continuum/continuum-client/src/main/java/org/apache/maven/continuum/client/SampleClient.java
(added)
+++
maven/sandbox/trunk/continuum/continuum-client/src/main/java/org/apache/maven/continuum/client/SampleClient.java
Mon Feb 26 12:11:37 2007
@@ -0,0 +1,89 @@
+package org.apache.maven.continuum.client;
+
+import org.apache.maven.continuum.client.project.Project;
+import org.apache.maven.continuum.client.project.ProjectSummary;
+
+import java.net.URL;
+
+/*
+ * 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.
+ */
+
+public class SampleClient
+{
+
+ public static void main( String[] args )
+ throws Exception
+ {
+ String address = "http://localhost:8000/continuum";
+
+ if ( args.length > 0 && args[0] != null && args[0].length() > 0 )
+ {
+ address = args[0];
+ }
+
+ System.out.println( "Connecting to: " + address );
+
+ ContinuumClient client = new ContinuumClient( new URL( address ) );
+
+ ProjectSummary[] projects = null;
+
+ try
+ {
+ System.out.println( "******************************" );
+ System.out.println( "Projects list" );
+ System.out.println( "******************************" );
+
+ projects = client.getProjects();
+
+ for ( int i = 0; i < projects.length; i++ )
+ {
+ System.out.println( projects[i] + " - Name=" +
projects[i].getName() );
+ }
+ }
+ catch ( Exception e )
+ {
+ e.printStackTrace();
+ }
+
+ if ( projects != null && projects.length > 0 )
+ {
+
+ System.out.println( "******************************" );
+ System.out.println( "Project detail" );
+ System.out.println( "******************************" );
+
+ for ( int i = 0; i < projects.length; i++ )
+ {
+ try
+ {
+ Project project = client.getProject( projects[i] );
+
+ System.out.println( "Name for project " + project.getId()
+ " : " + project.getName() );
+
+ System.out.println( "State: " +
ContinuumClient.getStatusMessage( project.getState() ) );
+
+ }
+ catch ( Exception e )
+ {
+ e.printStackTrace();
+ }
+ }
+ }
+ }
+}
Added:
maven/sandbox/trunk/continuum/continuum-client/src/main/mdo/continuum-client.xml
URL:
http://svn.apache.org/viewvc/maven/sandbox/trunk/continuum/continuum-client/src/main/mdo/continuum-client.xml?view=auto&rev=511984
==============================================================================
---
maven/sandbox/trunk/continuum/continuum-client/src/main/mdo/continuum-client.xml
(added)
+++
maven/sandbox/trunk/continuum/continuum-client/src/main/mdo/continuum-client.xml
Mon Feb 26 12:11:37 2007
@@ -0,0 +1,963 @@
+<!--
+ ~ 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.
+ -->
+
+<model>
+ <id>continuum-client</id>
+ <name>Continuum Client</name>
+ <description>Continuum's remote client object model.</description>
+ <defaults>
+ <default>
+ <key>package</key>
+ <value>org.apache.maven.continuum.client.project</value>
+ </default>
+ </defaults>
+
+ <classes>
+ <class>
+ <name>ProjectGroup</name>
+ <version>1.1.0+</version>
+ <fields>
+ <field>
+ <name>id</name>
+ <version>1.1.0+</version>
+ <required>true</required>
+ <type>int</type>
+ <identifier>true</identifier>
+ </field>
+ <field>
+ <name>groupId</name>
+ <version>1.1.0+</version>
+ <type>String</type>
+ </field>
+ <field>
+ <name>name</name>
+ <version>1.1.0+</version>
+ <type>String</type>
+ </field>
+ <field>
+ <name>description</name>
+ <version>1.1.0+</version>
+ <type>String</type>
+ </field>
+ <field>
+ <name>projects</name>
+ <version>1.1.0+</version>
+ <association>
+ <type>Project</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
+ <field>
+ <name>notifiers</name>
+ <version>1.1.0+</version>
+ <association>
+ <type>ProjectNotifier</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
+ <field>
+ <name>buildDefinitions</name>
+ <version>1.1.0+</version>
+ <association>
+ <type>BuildDefinition</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
+ </fields>
+ </class>
+
+ <class>
+ <name>ProjectSummary</name>
+ <version>1.1.0+</version>
+ <fields>
+ <field>
+ <name>id</name>
+ <required>true</required>
+ <identifier>true</identifier>
+ <version>1.1.0+</version>
+ <type>int</type>
+ </field>
+ <field>
+ <name>groupId</name>
+ <version>1.1.0+</version>
+ <type>String</type>
+ </field>
+ <field>
+ <name>artifactId</name>
+ <version>1.1.0+</version>
+ <type>String</type>
+ </field>
+ <field>
+ <name>executorId</name>
+ <version>1.1.0+</version>
+ <type>String</type>
+ </field>
+ <field>
+ <name>name</name>
+ <version>1.1.0+</version>
+ <type>String</type>
+ </field>
+ <field>
+ <name>description</name>
+ <version>1.1.0+</version>
+ <type>String</type>
+ </field>
+ <field>
+ <name>url</name>
+ <version>1.1.0+</version>
+ <type>String</type>
+ </field>
+ <field>
+ <name>scmUrl</name>
+ <version>1.1.0+</version>
+ <type>String</type>
+ </field>
+ <field>
+ <name>scmTag</name>
+ <version>1.1.0+</version>
+ <type>String</type>
+ </field>
+ <field>
+ <name>scmUsername</name>
+ <version>1.1.0+</version>
+ <type>String</type>
+ </field>
+ <field>
+ <name>scmPassword</name>
+ <version>1.1.0+</version>
+ <type>String</type>
+ </field>
+ <field>
+ <name>scmUseCache</name>
+ <version>1.1.0+</version>
+ <type>boolean</type>
+ </field>
+ <field>
+ <name>version</name>
+ <version>1.1.0+</version>
+ <type>String</type>
+ </field>
+ <!-- TODO: should these 3 just be queried from the builds list? -->
+ <field>
+ <name>state</name>
+ <version>1.1.0+</version>
+ <type>int</type>
+ <defaultValue>1</defaultValue>
+ </field>
+ <field>
+ <name>oldState</name>
+ <version>1.1.0+</version>
+ <type>int</type>
+ </field>
+ <!-- TODO: maybe buildresult itself? -->
+ <field>
+ <name>latestBuildId</name>
+ <version>1.1.0+</version>
+ <type>int</type>
+ </field>
+ <field>
+ <name>buildNumber</name>
+ <version>1.1.0+</version>
+ <type>int</type>
+ </field>
+ <field>
+ <name>workingDirectory</name>
+ <version>1.1.0+</version>
+ <type>String</type>
+ </field>
+ <field>
+ <name>parent</name>
+ <version>1.1.0+</version>
+ <association>
+ <type>ProjectDependency</type>
+ </association>
+ </field>
+ <field>
+ <name>dependencies</name>
+ <version>1.1.0+</version>
+ <association>
+ <type>ProjectDependency</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
+ <!-- TODO, this is not exported over XMLRPC yet -->
+ <field>
+ <name>projectGroup</name>
+ <version>1.1.0+</version>
+ <required>true</required>
+ <association xml.reference="true">
+ <type>ProjectGroup</type>
+ </association>
+ </field>
+ </fields>
+ </class>
+
+ <class>
+ <name>Project</name>
+ <version>1.1.0+</version>
+ <superClass>ProjectSummary</superClass>
+ <fields>
+ <field>
+ <name>developers</name>
+ <version>1.1.0+</version>
+ <association>
+ <type>ProjectDeveloper</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
+ <field>
+ <name>notifiers</name>
+ <version>1.1.0+</version>
+ <association>
+ <type>ProjectNotifier</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
+ <field>
+ <name>buildDefinitions</name>
+ <version>1.1.0+</version>
+ <association>
+ <type>BuildDefinition</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
+ </fields>
+ </class>
+
+ <class>
+ <name>ProjectNotifier</name>
+ <version>1.1.0+</version>
+ <description>
+ Configures one method for notifying users/developers when a build
breaks.
+ </description>
+ <fields>
+ <field>
+ <name>id</name>
+ <required>true</required>
+ <identifier>true</identifier>
+ <version>1.1.0+</version>
+ <type>int</type>
+ </field>
+ <field>
+ <name>type</name>
+ <version>1.1.0+</version>
+ <defaultValue>mail</defaultValue>
+ <type>String</type>
+ <description>The mechanism used to deliver
notifications.</description>
+ </field>
+ <field>
+ <name>from</name>
+ <version>1.1.0+</version>
+ <type>int</type>
+ <description>The origin of the notifier (pom or user).</description>
+ </field>
+ <field>
+ <name>enabled</name>
+ <version>1.1.0+</version>
+ <defaultValue>true</defaultValue>
+ <type>boolean</type>
+ </field>
+ <field>
+ <name>recipientType</name>
+ <version>1.1.0+</version>
+ <type>int</type>
+ </field>
+ <field>
+ <name>sendOnSuccess</name>
+ <version>1.1.0+</version>
+ <type>boolean</type>
+ <defaultValue>true</defaultValue>
+ </field>
+ <field>
+ <name>sendOnFailure</name>
+ <version>1.1.0+</version>
+ <type>boolean</type>
+ <defaultValue>true</defaultValue>
+ </field>
+ <field>
+ <name>sendOnError</name>
+ <version>1.1.0+</version>
+ <type>boolean</type>
+ <defaultValue>true</defaultValue>
+ </field>
+ <field>
+ <name>sendOnWarning</name>
+ <version>1.1.0+</version>
+ <type>boolean</type>
+ <defaultValue>true</defaultValue>
+ </field>
+ <field>
+ <name>configuration</name>
+ <version>1.1.0+</version>
+ <description>Extended configuration specific to this notifier goes
here.</description>
+ <type>Map</type>
+ <association xml.mapStyle="inline">
+ <type>String</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
+ </fields>
+ <codeSegments>
+ <codeSegment>
+ <version>1.1.0+</version>
+ <code><![CDATA[
+
+ public static final int FROM_PROJECT = 1;
+
+ public static final int FROM_USER = 2;
+
+ public boolean isFromProject()
+ {
+ return from == FROM_PROJECT;
+ }
+
+ public boolean isFromUser()
+ {
+ return from == FROM_USER;
+ }
+ ]]></code>
+ </codeSegment>
+ </codeSegments>
+ </class>
+
+ <class>
+ <name>ProjectDeveloper</name>
+ <version>1.1.0+</version>
+ <fields>
+ <field>
+ <name>scmId</name>
+ <version>1.1.0+</version>
+ <type>String</type>
+ </field>
+ <field>
+ <name>name</name>
+ <version>1.1.0+</version>
+ <type>String</type>
+ </field>
+ <field>
+ <name>email</name>
+ <version>1.1.0+</version>
+ <type>String</type>
+ </field>
+ <field>
+ <name>continuumId</name>
+ <version>1.1.0+</version>
+ <type>int</type>
+ </field>
+ </fields>
+ </class>
+
+ <class>
+ <name>ProjectDependency</name>
+ <version>1.1.0+</version>
+ <fields>
+ <field>
+ <name>groupId</name>
+ <version>1.1.0+</version>
+ <type>String</type>
+ </field>
+ <field>
+ <name>artifactId</name>
+ <version>1.1.0+</version>
+ <type>String</type>
+ </field>
+ <field>
+ <name>version</name>
+ <version>1.1.0+</version>
+ <type>String</type>
+ </field>
+ </fields>
+ </class>
+
+ <class>
+ <name>BuildResult</name>
+ <version>1.1.0+</version>
+ <description><![CDATA[
+ This class is a single continuum build.
+ ]]></description>
+ <fields>
+ <field>
+ <name>project</name>
+ <version>1.1.0+</version>
+ <!-- required>true</required -->
+ <association xml.reference="true">
+ <type>Project</type>
+ </association>
+ </field>
+ <field>
+ <name>id</name>
+ <version>1.1.0+</version>
+ <type>int</type>
+ <identifier>true</identifier>
+ </field>
+ <field>
+ <name>buildNumber</name>
+ <version>1.1.0+</version>
+ <type>int</type>
+ </field>
+ <field>
+ <name>state</name>
+ <version>1.1.0+</version>
+ <type>int</type>
+ </field>
+ <field>
+ <name>trigger</name>
+ <version>1.1.0+</version>
+ <type>int</type>
+ </field>
+ <field>
+ <name>startTime</name>
+ <version>1.1.0+</version>
+ <!-- TODO: Because JPOX persists as UTC and pulls back using the
local time, we have to take over -->
+ <type>long</type>
+ </field>
+ <field>
+ <name>endTime</name>
+ <version>1.1.0+</version>
+ <!-- TODO: Because JPOX persists as UTC and pulls back using the
local time, we have to take over -->
+ <type>long</type>
+ </field>
+ <field>
+ <name>error</name>
+ <version>1.1.0+</version>
+ <type>String</type>
+ </field>
+ <field>
+ <name>success</name>
+ <version>1.1.0+</version>
+ <type>boolean</type>
+ </field>
+ <field>
+ <name>exitCode</name>
+ <version>1.1.0+</version>
+ <type>int</type>
+ </field>
+ <field>
+ <name>scmResult</name>
+ <version>1.1.0+</version>
+ <association>
+ <type>ScmResult</type>
+ </association>
+ </field>
+ <field>
+ <name>testResult</name>
+ <version>1.1.0+</version>
+ <association>
+ <type>TestResult</type>
+ </association>
+ </field>
+ <field>
+ <name>modifiedDependencies</name>
+ <version>1.1.0+</version>
+ <association>
+ <type>ProjectDependency</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
+ </fields>
+ </class>
+
+ <class>
+ <name>ScmResult</name>
+ <packageName>org.apache.maven.continuum.client.scm</packageName>
+ <version>1.1.0+</version>
+ <fields>
+ <field>
+ <name>success</name>
+ <version>1.1.0+</version>
+ <type>boolean</type>
+ </field>
+ <field>
+ <name>commandLine</name>
+ <version>1.1.0+</version>
+ <type>String</type>
+ </field>
+ <field>
+ <name>providerMessage</name>
+ <version>1.1.0+</version>
+ <type>String</type>
+ </field>
+ <field>
+ <name>commandOutput</name>
+ <version>1.1.0+</version>
+ <type>String</type>
+ </field>
+ <field>
+ <name>exception</name>
+ <version>1.1.0+</version>
+ <type>String</type>
+ </field>
+ <field>
+ <name>changes</name>
+ <version>1.1.0+</version>
+ <association>
+ <type>ChangeSet</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
+ </fields>
+ </class>
+
+ <class>
+ <name>ChangeSet</name>
+ <packageName>org.apache.maven.continuum.client.scm</packageName>
+ <version>1.1.0+</version>
+ <fields>
+ <field>
+ <name>id</name>
+ <version>1.1.0+</version>
+ <type>String</type>
+ <identity>true</identity>
+ </field>
+ <field>
+ <name>author</name>
+ <version>1.1.0+</version>
+ <type>String</type>
+ </field>
+ <field stash.maxSize="8192">
+ <name>comment</name>
+ <version>1.1.0+</version>
+ <type>String</type>
+ </field>
+ <field>
+ <name>date</name>
+ <version>1.1.0+</version>
+ <!-- TODO: Because JPOX persists as UTC and pulls back using the
local time, we have to take over -->
+ <type>long</type>
+ </field>
+ <field>
+ <name>files</name>
+ <version>1.1.0+</version>
+ <association>
+ <type>ChangeFile</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
+ </fields>
+ <codeSegments>
+ <codeSegment>
+ <version>1.1.0+</version>
+ <code><![CDATA[
+ /**
+ * @return Returns string representation of the changeset
+ */
+ public String toString()
+ {
+ String result = author + "\n" + date + "\n";
+
+ if ( files != null )
+ {
+ for ( java.util.Iterator i = files.iterator();
i.hasNext(); )
+ {
+ ChangeFile file = (ChangeFile) i.next();
+
+ result += file + "\n";
+ }
+ }
+
+ result += comment;
+
+ return result;
+ }
+
+ /**
+ * @see java.lang.Object#equals(java.lang.Object)
+ */
+ public boolean equals( Object obj )
+ {
+ if ( obj instanceof ChangeSet )
+ {
+ ChangeSet changeSet = (ChangeSet) obj;
+
+ if ( toString().equals( changeSet.toString() ) )
+ {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ public java.util.Date getDateAsDate()
+ {
+ if ( date > 0 )
+ {
+ return new java.util.Date( date );
+ }
+
+ return null;
+ }
+ ]]></code>
+ </codeSegment>
+ </codeSegments>
+ </class>
+
+ <class>
+ <name>ChangeFile</name>
+ <packageName>org.apache.maven.continuum.client.scm</packageName>
+ <version>1.1.0+</version>
+ <fields>
+ <field>
+ <name>name</name>
+ <version>1.1.0+</version>
+ <type>String</type>
+ </field>
+ <field>
+ <name>revision</name>
+ <version>1.1.0+</version>
+ <type>String</type>
+ </field>
+ <field>
+ <name>status</name>
+ <version>1.1.0+</version>
+ <type>String</type>
+ </field>
+ </fields>
+ <codeSegments>
+ <codeSegment>
+ <version>1.1.0+</version>
+ <code><![CDATA[
+ /**
+ * Provide a version of the object as a string for debugging
purposes
+ *
+ * @return a [EMAIL PROTECTED] String}made up of the properties of
the object
+ */
+ public String toString()
+ {
+ StringBuffer buffer = new StringBuffer( getName() );
+
+ if ( getRevision() != null )
+ {
+ buffer.append( ", " ).append( getRevision() );
+ }
+
+ return buffer.toString();
+ }
+ ]]></code>
+ </codeSegment>
+ </codeSegments>
+ </class>
+
+ <class>
+ <name>TestResult</name>
+ <packageName>org.apache.maven.continuum.client.test</packageName>
+ <version>1.1.0+</version>
+ <fields>
+ <field>
+ <name>testCount</name>
+ <version>1.1.0+</version>
+ <type>int</type>
+ </field>
+ <field>
+ <name>failureCount</name>
+ <version>1.1.0+</version>
+ <type>int</type>
+ </field>
+ <field>
+ <name>totalTime</name>
+ <version>1.1.0+</version>
+ <type>long</type>
+ </field>
+ <field>
+ <name>suiteResults</name>
+ <version>1.1.0+</version>
+ <association>
+ <type>SuiteResult</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
+ </fields>
+ </class>
+
+ <class>
+ <name>SuiteResult</name>
+ <packageName>org.apache.maven.continuum.client.test</packageName>
+ <version>1.1.0+</version>
+ <fields>
+ <field>
+ <name>name</name>
+ <version>1.1.0+</version>
+ <type>String</type>
+ </field>
+ <field>
+ <name>testCount</name>
+ <version>1.1.0+</version>
+ <type>int</type>
+ </field>
+ <field>
+ <name>failureCount</name>
+ <version>1.1.0+</version>
+ <type>int</type>
+ </field>
+ <field>
+ <name>totalTime</name>
+ <version>1.1.0+</version>
+ <type>long</type>
+ </field>
+ <field>
+ <name>failures</name>
+ <version>1.1.0+</version>
+ <association>
+ <type>TestCaseFailure</type>
+ <multiplicity>*</multiplicity>
+ </association>
+ </field>
+ </fields>
+ </class>
+
+ <class>
+ <name>TestCaseFailure</name>
+ <packageName>org.apache.maven.continuum.client.test</packageName>
+ <version>1.1.0+</version>
+ <fields>
+ <field>
+ <name>name</name>
+ <version>1.1.0+</version>
+ <type>String</type>
+ </field>
+ <field>
+ <name>exception</name>
+ <version>1.1.0+</version>
+ <type>String</type>
+ </field>
+ </fields>
+ </class>
+
+ <class>
+ <name>BuildDefinition</name>
+ <version>1.1.0+</version>
+ <fields>
+ <field>
+ <name>id</name>
+ <required>true</required>
+ <identifier>true</identifier>
+ <version>1.1.0+</version>
+ <type>int</type>
+ </field>
+ <field>
+ <name>defaultForProject</name>
+ <version>1.1.0+</version>
+ <type>boolean</type>
+ <defaultValue>false</defaultValue>
+ </field>
+ <field>
+ <name>goals</name>
+ <version>1.1.0+</version>
+ <type>String</type>
+ </field>
+ <field>
+ <name>arguments</name>
+ <version>1.1.0+</version>
+ <type>String</type>
+ </field>
+ <field>
+ <name>buildFile</name>
+ <version>1.1.0+</version>
+ <type>String</type>
+ </field>
+ <field>
+ <name>buildFresh</name>
+ <version>1.1.0+</version>
+ <type>boolean</type>
+ <defaultValue>false</defaultValue>
+ <description>
+ true if the build is to be smoked and checked back out from the
scm each build
+ </description>
+ </field>
+ <field>
+ <name>schedule</name>
+ <version>1.1.0+</version>
+ <association xml.reference="true">
+ <type>Schedule</type>
+ </association>
+ </field>
+ <field>
+ <name>profile</name>
+ <version>1.1.0+</version>
+ <association xml.reference="true">
+ <type>Profile</type>
+ </association>
+ </field>
+ <field>
+ <name>latestBuildId</name>
+ <version>1.1.0+</version>
+ <type>int</type>
+ <defaultValue>0</defaultValue>
+ </field>
+ </fields>
+ </class>
+
+ <class>
+ <name>Schedule</name>
+ <version>1.1.0+</version>
+ <description><![CDATA[
+ Schedule for a project.
+ ]]></description>
+ <fields>
+ <field>
+ <name>id</name>
+ <identifier>true</identifier>
+ <version>1.1.0+</version>
+ <type>int</type>
+ </field>
+ <field>
+ <name>active</name>
+ <version>1.1.0+</version>
+ <type>boolean</type>
+ </field>
+ <field>
+ <name>name</name>
+ <version>1.1.0+</version>
+ <type>String</type>
+ </field>
+ <field>
+ <name>description</name>
+ <version>1.1.0+</version>
+ <type>String</type>
+ </field>
+ <field>
+ <name>delay</name>
+ <description><![CDATA[
+ Delay in seconds.
+ ]]></description>
+ <version>1.1.0+</version>
+ <type>int</type>
+ </field>
+ <field>
+ <name>maxJobExecutionTime</name>
+ <description>
+ Maximum execution time of a job in seconds before it's
+ terminated.
+ </description>
+ <version>1.1.0+</version>
+ <type>int</type>
+ <defaultValue>3600</defaultValue>
+ </field>
+ <field>
+ <name>cronExpression</name>
+ <version>1.1.0+</version>
+ <type>String</type>
+ </field>
+ </fields>
+ </class>
+
+ <class>
+ <name>Profile</name>
+ <version>1.1.0+</version>
+ <fields>
+ <field>
+ <name>id</name>
+ <identifier>true</identifier>
+ <version>1.1.0+</version>
+ <type>int</type>
+ </field>
+ <field>
+ <name>active</name>
+ <version>1.1.0+</version>
+ <type>boolean</type>
+ </field>
+ <field>
+ <name>name</name>
+ <version>1.1.0+</version>
+ <type>String</type>
+ </field>
+ <field>
+ <name>description</name>
+ <version>1.1.0+</version>
+ <type>String</type>
+ </field>
+ <field>
+ <name>scmMode</name>
+ <version>1.1.0+</version>
+ <type>int</type>
+ </field>
+ <field>
+ <name>buildWithoutChanges</name>
+ <version>1.1.0+</version>
+ <type>boolean</type>
+ </field>
+ </fields>
+ </class>
+
+ <!-- TODO: this isn't really appropriate to generate with Modello -->
+ <class>
+ <name>ContinuumProjectState</name>
+ <packageName>org.apache.maven.continuum.client.project</packageName>
+ <version>1.1.0+</version>
+ <fields>
+ <field>
+ <name>name</name>
+ <version>1.1.0+</version>
+ <type>String</type>
+ </field>
+ </fields>
+ <codeSegments>
+ <codeSegment>
+ <version>1.1.0+</version>
+ <code><![CDATA[
+ public final static int NEW = 1;
+ public final static int OK = 2;
+ public final static int FAILED = 3;
+ public final static int ERROR = 4;
+ public final static int BUILDING = 6;
+ public final static int CHECKING_OUT = 7;
+ public final static int UPDATING = 8;
+ public final static int WARNING = 9;
+ public final static int CHECKEDOUT = 10;
+
+ // TODO: maybe move these to another class
+ public static final int TRIGGER_FORCED = 1;
+
+ // TODO: remove
+ public static final int TRIGGER_SCHEDULED = 0;
+
+ public static final int TRIGGER_UNKNOWN = TRIGGER_SCHEDULED;
+
+ public String getI18nKey()
+ {
+ return "org.apache.maven.continuum.project.state." + name;
+ }
+
+ public boolean equals( Object object )
+ {
+ if ( !( object instanceof ContinuumProjectState ) )
+ {
+ return false;
+ }
+
+ ContinuumProjectState other = (ContinuumProjectState) object;
+
+ return name.equals( other.name );
+ }
+
+ public int hashCode()
+ {
+ return name.hashCode();
+ }
+
+ public String toString()
+ {
+ return name;
+ }
+ ]]></code>
+ </codeSegment>
+ </codeSegments>
+ </class>
+ </classes>
+</model>