You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@continuum.apache.org by ev...@apache.org on 2006/03/06 18:08:26 UTC

svn commit: r383586 - in /maven/continuum/branches/continuum-1.0.x: ./ continuum-rpc-client/ continuum-rpc-client/src/ continuum-rpc-client/src/main/ continuum-rpc-client/src/main/java/ continuum-rpc-client/src/main/java/org/ continuum-rpc-client/src/m...

Author: evenisse
Date: Mon Mar  6 09:08:19 2006
New Revision: 383586

URL: http://svn.apache.org/viewcvs?rev=383586&view=rev
Log:
[CONTINUUM-544] Add XML-RPC client
Submitted by Milos Kleint

Added:
    maven/continuum/branches/continuum-1.0.x/continuum-rpc-client/
    maven/continuum/branches/continuum-1.0.x/continuum-rpc-client/pom.xml   (with props)
    maven/continuum/branches/continuum-1.0.x/continuum-rpc-client/src/
    maven/continuum/branches/continuum-1.0.x/continuum-rpc-client/src/main/
    maven/continuum/branches/continuum-1.0.x/continuum-rpc-client/src/main/java/
    maven/continuum/branches/continuum-1.0.x/continuum-rpc-client/src/main/java/org/
    maven/continuum/branches/continuum-1.0.x/continuum-rpc-client/src/main/java/org/apache/
    maven/continuum/branches/continuum-1.0.x/continuum-rpc-client/src/main/java/org/apache/maven/
    maven/continuum/branches/continuum-1.0.x/continuum-rpc-client/src/main/java/org/apache/maven/continuum/
    maven/continuum/branches/continuum-1.0.x/continuum-rpc-client/src/main/java/org/apache/maven/continuum/rpc/
    maven/continuum/branches/continuum-1.0.x/continuum-rpc-client/src/main/java/org/apache/maven/continuum/rpc/ProjectsReader.java   (with props)
Modified:
    maven/continuum/branches/continuum-1.0.x/pom.xml

Added: maven/continuum/branches/continuum-1.0.x/continuum-rpc-client/pom.xml
URL: http://svn.apache.org/viewcvs/maven/continuum/branches/continuum-1.0.x/continuum-rpc-client/pom.xml?rev=383586&view=auto
==============================================================================
--- maven/continuum/branches/continuum-1.0.x/continuum-rpc-client/pom.xml (added)
+++ maven/continuum/branches/continuum-1.0.x/continuum-rpc-client/pom.xml Mon Mar  6 09:08:19 2006
@@ -0,0 +1,57 @@
+<project>
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <artifactId>continuum-parent</artifactId>
+    <groupId>org.apache.maven.continuum</groupId>
+    <version>1.0.3-SNAPSHOT</version>
+  </parent>
+  <artifactId>continuum-rpc-client</artifactId>
+  <version>1.0.3-SNAPSHOT</version>
+  <name>Continuum client XML-RPC</name>
+  <description>XML-RPC client code for accessing Apache Continuum servers</description>
+
+  <dependencies>
+    <dependency>
+      <groupId>xmlrpc</groupId>
+      <artifactId>xmlrpc</artifactId>
+      <version>2.0</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>
+    <dependency>
+      <groupId>commons-logging</groupId>
+      <artifactId>commons-logging</artifactId>
+      <version>1.0.2</version>
+    </dependency>
+  </dependencies>
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.codehaus.modello</groupId>
+        <artifactId>modello-maven-plugin</artifactId>
+        <version>1.0-alpha-9-SNAPSHOT</version>
+        <executions>
+          <execution>
+            <goals>
+              <goal>java</goal>
+            </goals>
+          </execution>
+        </executions>
+        <configuration>
+          <version>1.0.0</version>
+          <packageWithVersion>false</packageWithVersion>
+          <model>../continuum-model/src/main/mdo/continuum.mdo</model>
+        </configuration>
+      </plugin>
+    </plugins>
+  </build>
+</project>

Propchange: maven/continuum/branches/continuum-1.0.x/continuum-rpc-client/pom.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/continuum/branches/continuum-1.0.x/continuum-rpc-client/pom.xml
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Added: maven/continuum/branches/continuum-1.0.x/continuum-rpc-client/src/main/java/org/apache/maven/continuum/rpc/ProjectsReader.java
URL: http://svn.apache.org/viewcvs/maven/continuum/branches/continuum-1.0.x/continuum-rpc-client/src/main/java/org/apache/maven/continuum/rpc/ProjectsReader.java?rev=383586&view=auto
==============================================================================
--- maven/continuum/branches/continuum-1.0.x/continuum-rpc-client/src/main/java/org/apache/maven/continuum/rpc/ProjectsReader.java (added)
+++ maven/continuum/branches/continuum-1.0.x/continuum-rpc-client/src/main/java/org/apache/maven/continuum/rpc/ProjectsReader.java Mon Mar  6 09:08:19 2006
@@ -0,0 +1,317 @@
+package org.apache.maven.continuum.rpc;
+
+/*
+ * Copyright 2001-2006 The Apache Software Foundation.
+ *
+ * Licensed 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.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.xmlrpc.XmlRpcClient;
+import org.apache.xmlrpc.XmlRpcException;
+
+import java.io.IOException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Hashtable;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Vector;
+
+/**
+ * @author mkleint
+ */
+public class ProjectsReader
+{
+
+    private URL server;
+
+    private Hashtable executorMap;
+
+    /**
+     * Creates a new instance of ProjectsReader
+     */
+    public ProjectsReader( URL serverUrl )
+    {
+        server = serverUrl;
+        executorMap = new Hashtable();
+        executorMap.put( "shell", "Shell" );
+        executorMap.put( "ant", "Ant" );
+        executorMap.put( "maven-1", "MavenOne" );
+        executorMap.put( "maven-2", "MavenTwo" );
+    }
+
+    public Project[] readProjects()
+        throws XmlRpcException, IOException
+    {
+        XmlRpcClient client = new XmlRpcClient( server );
+        Object obj = client.execute( "continuum.getProjects", new Vector() );
+        Collection set = new ArrayList();
+        if ( obj instanceof Hashtable )
+        {
+            Hashtable table = (Hashtable) obj;
+            Vector projects = (Vector) table.get( "projects" );
+            Iterator it = projects.iterator();
+            while ( it.hasNext() )
+            {
+                Hashtable proj = (Hashtable) it.next();
+                set.add( populateProject( proj, new Project() ) );
+            }
+        }
+        return (Project[]) set.toArray( new Project[set.size()] );
+    }
+
+    public void refreshProject( Project proj )
+        throws XmlRpcException, IOException
+    {
+        XmlRpcClient client = new XmlRpcClient( server );
+        Vector vect = new Vector();
+        vect.add( new Integer( proj.getId() ) );
+        Object obj = client.execute( "continuum.getProject", vect );
+        if ( obj instanceof Hashtable )
+        {
+            Hashtable table = (Hashtable) obj;
+            populateProject( (Hashtable) table.get( "project" ), proj );
+        }
+    }
+
+    public void buildProject( Project proj )
+        throws XmlRpcException, IOException
+    {
+        XmlRpcClient client = new XmlRpcClient( server );
+        Vector vect = new Vector();
+        vect.add( new Integer( proj.getId() ) );
+        //trigger
+        vect.add( new Integer( 1 ) );
+        Object obj = client.execute( "continuum.buildProject", vect );
+    }
+
+    public void editProject( Project proj )
+        throws XmlRpcException, IOException
+    {
+        XmlRpcClient client = new XmlRpcClient( server );
+        Vector vect = new Vector();
+        vect.add( projectToHashtable( proj ) );
+        Object obj = client.execute( "continuum.update" + executorMap.get( proj.getExecutorId() ) + "Project", vect );
+        if ( obj instanceof Hashtable )
+        {
+            Hashtable table = (Hashtable) obj;
+            if ( !table.get( "result" ).equals( "ok" ) )
+            {
+                throw new RuntimeException( "Edit failed" );
+            }
+        }
+    }
+
+    public void addProject( Project proj )
+        throws XmlRpcException, IOException
+    {
+        XmlRpcClient client = new XmlRpcClient( server );
+        Vector vect = new Vector();
+        vect.add( projectToHashtable( proj ) );
+        Object obj = client.execute( "continuum.add" + executorMap.get( proj.getExecutorId() ) + "Project", vect );
+        if ( obj instanceof Hashtable )
+        {
+            Hashtable table = (Hashtable) obj;
+            if ( !table.get( "result" ).equals( "ok" ) )
+            {
+                throw new RuntimeException( "Edit failed" );
+            }
+        }
+    }
+
+    private Project populateProject( Hashtable hashtable, Project instance )
+    {
+        instance.setArtifactId( (String) hashtable.get( "artifactId" ) );
+        instance.setGroupId( (String) hashtable.get( "groupId" ) );
+        instance.setName( (String) hashtable.get( "name" ) );
+        instance.setDescription( (String) hashtable.get( "description" ) );
+        instance.setVersion( (String) hashtable.get( "version" ) );
+        instance.setUrl( (String) hashtable.get( "url" ) );
+        instance.setExecutorId( (String) hashtable.get( "executorId" ) );
+        instance.setWorkingDirectory( (String) hashtable.get( "workingDirectory" ) );
+        instance.setScmUsername( (String) hashtable.get( "scmUsername" ) );
+        instance.setScmPassword( (String) hashtable.get( "scmPassword" ) );
+        instance.setScmTag( (String) hashtable.get( "scmTag" ) );
+        instance.setScmUrl( (String) hashtable.get( "scmUrl" ) );
+        instance.setId( Integer.parseInt( (String) hashtable.get( "id" ) ) );
+        instance.setLatestBuildId( Integer.parseInt( (String) hashtable.get( "latestBuildId" ) ) );
+        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 buildDefinitions = (Vector) hashtable.get( "buildDefinitions" );
+        if ( buildDefinitions != null )
+        {
+            Iterator it = buildDefinitions.iterator();
+            List defs = new ArrayList();
+            while ( it.hasNext() )
+            {
+                Hashtable table = (Hashtable) it.next();
+                BuildDefinition def = new BuildDefinition();
+                def.setId( Integer.parseInt( (String) table.get( "id" ) ) );
+                def.setArguments( (String) table.get( "arguments" ) );
+                def.setBuildFile( (String) table.get( "buildFile" ) );
+                def.setDefaultForProject( Boolean.getBoolean( (String) table.get( "defaultForProject" ) ) );
+                def.setGoals( (String) table.get( "goals" ) );
+                Vector prof = (Vector) table.get( "profile" );
+                if ( prof != null )
+                {
+                    Profile profile = new Profile();
+                    //TODO
+                    def.setProfile( profile );
+                }
+                Object obj = table.get( "schedule" );
+                Hashtable sched = (Hashtable) obj;
+                if ( sched != null )
+                {
+                    Schedule schedule = new Schedule();
+                    schedule.setActive( Boolean.getBoolean( (String) sched.get( "active" ) ) );
+                    schedule.setCronExpression( (String) sched.get( "cronExpression" ) );
+                    schedule.setDelay( Integer.parseInt( (String) sched.get( "delay" ) ) );
+                    schedule.setDescription( (String) sched.get( "description" ) );
+                    schedule.setId( Integer.parseInt( (String) sched.get( "id" ) ) );
+                    schedule.setName( (String) sched.get( "name" ) );
+                    def.setSchedule( schedule );
+                }
+                defs.add( def );
+            }
+            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 )
+        {
+            Iterator it = devs.iterator();
+            List vals = new ArrayList();
+            while ( it.hasNext() )
+            {
+                Hashtable dep = (Hashtable) it.next();
+                ProjectDeveloper developer = new ProjectDeveloper();
+                developer.setContinuumId( Integer.parseInt( (String) dep.get( "continuumId" ) ) );
+                developer.setName( (String) dep.get( "name" ) );
+                developer.setEmail( (String) dep.get( "email" ) );
+                developer.setScmId( (String) dep.get( "scmId" ) );
+                vals.add( developer );
+            }
+            instance.setDevelopers( vals );
+        }
+//        Vector nots = (Vector)hashtable.get("notifiers");
+//        if (nots != null) {
+//            Iterator it = nots.iterator();
+//            List vals = new ArrayList();
+//            while (it.hasNext()) {
+//                Hashtable not = (Hashtable)it.next();
+//                ProjectNotifier notifier = new ProjectNotifier();
+//                //TODO...
+////                notifier.setConfiguration();
+//                notifier.setType((String)not.get("type"));
+//                vals.add(notifier);
+//            }
+//            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;
+    }
+
+    private Hashtable projectToHashtable( Project project )
+    {
+        Hashtable map = new Hashtable();
+        mapPut( map, "id", "" + project.getId() );
+        mapPut( map, "name", project.getName() );
+        mapPut( map, "version", project.getVersion() );
+        mapPut( map, "executorId", project.getExecutorId() );
+        mapPut( map, "workingDirectory", project.getWorkingDirectory() );
+        mapPut( map, "scmUsername", project.getScmUsername() );
+        mapPut( map, "scmPassword", project.getScmPassword() );
+        mapPut( map, "scmTag", project.getScmTag() );
+        mapPut( map, "scmUrl", project.getScmUrl() );
+        mapPut( map, "name", project.getName() );
+        return map;
+    }
+
+    private static void mapPut( Hashtable table, String key, Object value )
+    {
+        if ( value != null )
+        {
+            table.put( key, value );
+        }
+    }
+
+}

Propchange: maven/continuum/branches/continuum-1.0.x/continuum-rpc-client/src/main/java/org/apache/maven/continuum/rpc/ProjectsReader.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/continuum/branches/continuum-1.0.x/continuum-rpc-client/src/main/java/org/apache/maven/continuum/rpc/ProjectsReader.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Modified: maven/continuum/branches/continuum-1.0.x/pom.xml
URL: http://svn.apache.org/viewcvs/maven/continuum/branches/continuum-1.0.x/pom.xml?rev=383586&r1=383585&r2=383586&view=diff
==============================================================================
--- maven/continuum/branches/continuum-1.0.x/pom.xml (original)
+++ maven/continuum/branches/continuum-1.0.x/pom.xml Mon Mar  6 09:08:19 2006
@@ -125,6 +125,7 @@
     <module>continuum-model</module>
     <module>continuum-notifiers</module>
     <module>continuum-plexus-application</module>
+    <module>continuum-rpc-client</module>
     <module>continuum-store</module>
     <module>continuum-test</module>
     <module>continuum-web</module>
@@ -261,7 +262,7 @@
       <dependency>
         <groupId>org.apache.maven.wagon</groupId>
         <artifactId>wagon-ssh</artifactId>
-        <version>1.0-alpha-6</version>
+        <version>1.0-alpha-7</version>
       </dependency>
       <dependency>
         <groupId>org.apache.maven.wagon</groupId>