From continuum-commits-return-3127-apmail-maven-continuum-commits-archive=maven.apache.org@maven.apache.org Fri May 11 16:22:48 2007 Return-Path: Delivered-To: apmail-maven-continuum-commits-archive@www.apache.org Received: (qmail 21080 invoked from network); 11 May 2007 16:22:48 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 11 May 2007 16:22:48 -0000 Received: (qmail 71935 invoked by uid 500); 11 May 2007 16:22:54 -0000 Delivered-To: apmail-maven-continuum-commits-archive@maven.apache.org Received: (qmail 71886 invoked by uid 500); 11 May 2007 16:22:54 -0000 Mailing-List: contact continuum-commits-help@maven.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: continuum-dev@maven.apache.org Delivered-To: mailing list continuum-commits@maven.apache.org Received: (qmail 71873 invoked by uid 99); 11 May 2007 16:22:54 -0000 Received: from herse.apache.org (HELO herse.apache.org) (140.211.11.133) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 11 May 2007 09:22:54 -0700 X-ASF-Spam-Status: No, hits=-99.5 required=10.0 tests=ALL_TRUSTED,NO_REAL_NAME X-Spam-Check-By: apache.org Received: from [140.211.11.3] (HELO eris.apache.org) (140.211.11.3) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 11 May 2007 09:22:45 -0700 Received: by eris.apache.org (Postfix, from userid 65534) id 8D7691A983E; Fri, 11 May 2007 09:22:25 -0700 (PDT) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r537223 [2/2] - in /maven/continuum/trunk: ./ continuum-webapp/ continuum-webapp/src/main/java/org/apache/maven/continuum/web/xmlrpc/ continuum-webapp/src/main/resources/META-INF/plexus/ continuum-webapp/src/main/webapp/WEB-INF/ continuum-x... Date: Fri, 11 May 2007 16:22:23 -0000 To: continuum-commits@maven.apache.org From: evenisse@apache.org X-Mailer: svnmailer-1.1.0 Message-Id: <20070511162225.8D7691A983E@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Added: maven/continuum/trunk/continuum-xmlrpc/continuum-xmlrpc-server/src/main/java/org/apache/maven/continuum/xmlrpc/server/ContinuumServiceImpl.java URL: http://svn.apache.org/viewvc/maven/continuum/trunk/continuum-xmlrpc/continuum-xmlrpc-server/src/main/java/org/apache/maven/continuum/xmlrpc/server/ContinuumServiceImpl.java?view=auto&rev=537223 ============================================================================== --- maven/continuum/trunk/continuum-xmlrpc/continuum-xmlrpc-server/src/main/java/org/apache/maven/continuum/xmlrpc/server/ContinuumServiceImpl.java (added) +++ maven/continuum/trunk/continuum-xmlrpc/continuum-xmlrpc-server/src/main/java/org/apache/maven/continuum/xmlrpc/server/ContinuumServiceImpl.java Fri May 11 09:22:15 2007 @@ -0,0 +1,488 @@ +package org.apache.maven.continuum.xmlrpc.server; + +/* + * 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.Continuum; +import org.apache.maven.continuum.ContinuumException; +import org.apache.maven.continuum.project.ContinuumProjectState; +import org.apache.maven.continuum.project.builder.ContinuumProjectBuildingResult; +import org.apache.maven.continuum.xmlrpc.ContinuumService; +import org.apache.maven.continuum.xmlrpc.project.AddingResult; +import org.apache.maven.continuum.xmlrpc.project.BuildResult; +import org.apache.maven.continuum.xmlrpc.project.BuildResultSummary; +import org.apache.maven.continuum.xmlrpc.project.Project; +import org.apache.maven.continuum.xmlrpc.project.ProjectDependency; +import org.apache.maven.continuum.xmlrpc.project.ProjectGroup; +import org.apache.maven.continuum.xmlrpc.project.ProjectGroupSummary; +import org.apache.maven.continuum.xmlrpc.project.ProjectSummary; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.Iterator; +import java.util.List; + +/** + * @author Emmanuel Venisse + * @version $Id$ + * @plexus.component role="org.apache.maven.continuum.xmlrpc.ContinuumXmlRpcComponent" role-hint="org.apache.maven.continuum.xmlrpc.ContinuumService" + */ +public class ContinuumServiceImpl + implements ContinuumService, ContinuumXmlRpcComponent +{ + /** + * @plexus.requirement + */ + private Continuum continuum; + + private ContinuumXmlRpcConfig config; + + public void setConfig( ContinuumXmlRpcConfig config ) + { + this.config = config; + } + + // ---------------------------------------------------------------------- + // Projects + // ---------------------------------------------------------------------- + + public List getProjects() + throws ContinuumException + { + List projectsList = new ArrayList(); + + Collection projects = continuum.getProjects(); + if ( projects != null ) + { + for ( Iterator i = projects.iterator(); i.hasNext(); ) + { + org.apache.maven.continuum.model.project.Project project = + (org.apache.maven.continuum.model.project.Project) i.next(); + ProjectSummary ps = populateProjectSummary( project ); + projectsList.add( ps ); + } + } + return projectsList; + } + + public ProjectSummary getProjectSummary( int projectId ) + throws ContinuumException + { + org.apache.maven.continuum.model.project.Project project = continuum.getProject( projectId ); + return populateProjectSummary( project ); + } + + public Project getProjectWithAllDetails( int projectId ) + throws ContinuumException + { + org.apache.maven.continuum.model.project.Project project = continuum.getProjectWithAllDetails( projectId ); + return populateProject( project ); + } + + + public int removeProject( int projectId ) + throws ContinuumException + { + continuum.removeProject( projectId ); + return 0; + } + + // ---------------------------------------------------------------------- + // Projects Groups + // ---------------------------------------------------------------------- + + public ProjectGroupSummary getProjectGroupSummary( int projectGroupId ) + throws ContinuumException + { + org.apache.maven.continuum.model.project.ProjectGroup projectGroup = + continuum.getProjectGroup( projectGroupId ); + return populateProjectGroupSummary( projectGroup ); + } + + public ProjectGroup getProjectGroupWithProjects( int projectGroupId ) + throws ContinuumException + { + org.apache.maven.continuum.model.project.ProjectGroup projectGroup = + continuum.getProjectGroupWithProjects( projectGroupId ); + return populateProjectGroupWithProjects( projectGroup ); + } + + public int removeProjectGroup( int projectGroupId ) + throws ContinuumException + { + continuum.removeProjectGroup( projectGroupId ); + return 0; + } + + // ---------------------------------------------------------------------- + // Building + // ---------------------------------------------------------------------- + + public int addProjectToBuildQueue( int projectId ) + throws ContinuumException + { + continuum.buildProject( projectId, ContinuumProjectState.TRIGGER_SCHEDULED ); + return 0; + } + + public int addProjectToBuildQueue( int projectId, int buildDefinitionId ) + throws ContinuumException + { + continuum.buildProject( projectId, buildDefinitionId, ContinuumProjectState.TRIGGER_SCHEDULED ); + return 0; + } + + public int buildProject( int projectId ) + throws ContinuumException + { + continuum.buildProject( projectId ); + return 0; + } + + public int buildProject( int projectId, int buildDefintionId ) + throws ContinuumException + { + continuum.buildProject( projectId, buildDefintionId ); + return 0; + } + + // ---------------------------------------------------------------------- + // Build Results + // ---------------------------------------------------------------------- + + public BuildResult getBuildResult( int projectId, int buildId ) + throws ContinuumException + { + return populateBuildResult( continuum.getBuildResult( buildId ) ); + } + + public List getBuildResultsForProject( int projectId ) + throws ContinuumException + { + List result = new ArrayList(); + Collection buildResults = continuum.getBuildResultsForProject( projectId ); + if ( buildResults != null ) + { + for ( Iterator i = buildResults.iterator(); i.hasNext(); ) + { + org.apache.maven.continuum.model.project.BuildResult buildResult = + (org.apache.maven.continuum.model.project.BuildResult) i.next(); + BuildResultSummary br = populateBuildResultSummary( buildResult ); + result.add( br ); + } + } + + return result; + } + + public String getBuildOutput( int projectId, int buildId ) + throws ContinuumException + { + return continuum.getBuildOutput( projectId, buildId ); + } + + // ---------------------------------------------------------------------- + // Maven 2.x projects + // ---------------------------------------------------------------------- + + public AddingResult addMavenTwoProject( String url ) + throws ContinuumException + { + ContinuumProjectBuildingResult result = continuum.addMavenTwoProject( url ); + return populateAddingResult( result ); + } + + public AddingResult addMavenTwoProject( String url, int projectGroupId ) + throws ContinuumException + { + ContinuumProjectBuildingResult result = continuum.addMavenTwoProject( url, projectGroupId ); + return populateAddingResult( result ); + } + + // ---------------------------------------------------------------------- + // Maven 1.x projects + // ---------------------------------------------------------------------- + + public AddingResult addMavenOneProject( String url ) + throws ContinuumException + { + ContinuumProjectBuildingResult result = continuum.addMavenOneProject( url ); + return populateAddingResult( result ); + } + + public AddingResult addMavenOneProject( String url, int projectGroupId ) + throws ContinuumException + { + ContinuumProjectBuildingResult result = continuum.addMavenOneProject( url, projectGroupId ); + return populateAddingResult( result ); + } + + // ---------------------------------------------------------------------- + // Maven ANT projects + // ---------------------------------------------------------------------- + + public ProjectSummary addAntProject( ProjectSummary project ) + throws ContinuumException + { + int projectId = continuum.addProject( populateProject( project ), "ant" ); + return getProjectSummary( projectId ); + } + + // ---------------------------------------------------------------------- + // Maven Shell projects + // ---------------------------------------------------------------------- + + public ProjectSummary addShellProject( ProjectSummary project ) + throws ContinuumException + { + int projectId = continuum.addProject( populateProject( project ), "shell" ); + return getProjectSummary( projectId ); + } + + // ---------------------------------------------------------------------- + // Converters + // ---------------------------------------------------------------------- + + private ProjectSummary populateProjectSummary( org.apache.maven.continuum.model.project.Project project ) + { + if ( project == null ) + { + return null; + } + + Project ps = new Project(); + ps.setArtifactId( project.getArtifactId() ); + ps.setBuildNumber( project.getBuildNumber() ); + ps.setDescription( project.getDescription() ); + ps.setExecutorId( project.getExecutorId() ); + ps.setGroupId( project.getGroupId() ); + ps.setId( project.getId() ); + ps.setLatestBuildId( project.getLatestBuildId() ); + ps.setName( project.getName() ); + ps.setProjectGroup( populateProjectGroupSummary( project.getProjectGroup() ) ); + ps.setScmTag( project.getScmTag() ); + ps.setScmUrl( project.getScmUrl() ); + ps.setScmUseCache( project.isScmUseCache() ); + ps.setScmUsername( project.getScmUsername() ); + ps.setState( project.getState() ); + ps.setUrl( project.getUrl() ); + ps.setVersion( project.getVersion() ); + ps.setWorkingDirectory( project.getWorkingDirectory() ); + return ps; + } + + private Project populateProject( org.apache.maven.continuum.model.project.Project project ) + { + if ( project == null ) + { + return null; + } + + Project p = (Project) populateProjectSummary( project ); + + p.setParent( populateProjectDependency( project.getParent() ) ); + + if ( project.getDependencies() != null ) + { + List deps = new ArrayList(); + for ( Iterator i = project.getDependencies().iterator(); i.hasNext(); ) + { + org.apache.maven.continuum.model.project.ProjectDependency d = + (org.apache.maven.continuum.model.project.ProjectDependency) i.next(); + deps.add( populateProjectDependency( d ) ); + } + p.setDependencies( deps ); + } + + //TODO + //p.setBuildDefinitions( ); + //p.setDevelopers( ); + //p.setNotifiers( ); + return p; + } + + private org.apache.maven.continuum.model.project.Project populateProject( ProjectSummary projectSummary ) + { + if ( projectSummary == null ) + { + return null; + } + + org.apache.maven.continuum.model.project.Project project = + new org.apache.maven.continuum.model.project.Project(); + project.setArtifactId( projectSummary.getArtifactId() ); + project.setBuildNumber( projectSummary.getBuildNumber() ); + project.setDescription( projectSummary.getDescription() ); + project.setExecutorId( projectSummary.getExecutorId() ); + project.setGroupId( projectSummary.getGroupId() ); + project.setId( projectSummary.getId() ); + project.setLatestBuildId( projectSummary.getLatestBuildId() ); + project.setName( projectSummary.getName() ); + //project.setProjectGroup( populateProjectGroupSummary( projectSummary.getProjectGroup() ) ); + project.setScmTag( projectSummary.getScmTag() ); + project.setScmUrl( projectSummary.getScmUrl() ); + project.setScmUseCache( projectSummary.isScmUseCache() ); + project.setScmUsername( projectSummary.getScmUsername() ); + project.setState( projectSummary.getState() ); + project.setUrl( projectSummary.getUrl() ); + project.setVersion( projectSummary.getVersion() ); + project.setWorkingDirectory( projectSummary.getWorkingDirectory() ); + return project; + } + + private ProjectDependency populateProjectDependency( + org.apache.maven.continuum.model.project.ProjectDependency dependency ) + { + if ( dependency == null ) + { + return null; + } + + ProjectDependency dep = new ProjectDependency(); + dep.setArtifactId( dependency.getArtifactId() ); + dep.setGroupId( dependency.getGroupId() ); + dep.setVersion( dependency.getVersion() ); + return dep; + } + + private ProjectGroupSummary populateProjectGroupSummary( + org.apache.maven.continuum.model.project.ProjectGroup group ) + { + if ( group == null ) + { + return null; + } + + ProjectGroup g = new ProjectGroup(); + g.setDescription( group.getDescription() ); + g.setGroupId( group.getGroupId() ); + g.setId( group.getId() ); + g.setName( group.getName() ); + return g; + } + + private ProjectGroup populateProjectGroupWithProjects( org.apache.maven.continuum.model.project.ProjectGroup group ) + { + if ( group == null ) + { + return null; + } + ProjectGroup g = (ProjectGroup) populateProjectGroupSummary( group ); + + if ( group.getProjects() != null ) + { + List projects = new ArrayList(); + for ( Iterator i = group.getProjects().iterator(); i.hasNext(); ) + { + org.apache.maven.continuum.model.project.Project p = + (org.apache.maven.continuum.model.project.Project) i.next(); + ProjectSummary ps = populateProjectSummary( p ); + projects.add( ps ); + } + g.setProjects( projects ); + } + return g; + } + + private BuildResultSummary populateBuildResultSummary( + org.apache.maven.continuum.model.project.BuildResult buildResult ) + { + if ( buildResult == null ) + { + return null; + } + BuildResult br = new BuildResult(); + br.setBuildNumber( buildResult.getBuildNumber() ); + br.setEndTime( buildResult.getEndTime() ); + br.setError( buildResult.getError() ); + br.setExitCode( buildResult.getExitCode() ); + br.setId( buildResult.getId() ); + br.setStartTime( buildResult.getStartTime() ); + br.setState( buildResult.getState() ); + br.setSuccess( buildResult.isSuccess() ); + br.setTrigger( buildResult.getTrigger() ); + return br; + } + + private BuildResult populateBuildResult( org.apache.maven.continuum.model.project.BuildResult buildResult ) + { + if ( buildResult == null ) + { + return null; + } + BuildResult br = (BuildResult) populateBuildResultSummary( buildResult ); + //TODO: + //br.setScmResult( populateScmResult(br.getScmResult())); + if ( buildResult.getModifiedDependencies() != null ) + { + List deps = new ArrayList(); + for ( Iterator i = buildResult.getModifiedDependencies().iterator(); i.hasNext(); ) + { + org.apache.maven.continuum.model.project.ProjectDependency dependency = + (org.apache.maven.continuum.model.project.ProjectDependency) i.next(); + ProjectDependency dep = populateProjectDependency( dependency ); + deps.add( dep ); + } + //br.setModifiedDependencies( deps ); + } + //br.setProject( populateProjectSummary(buildResult.getProject() ) ); + //br.setTestResult( populateTestResult( buildResult.getTestResult() ) ); + return br; + } + + private AddingResult populateAddingResult( ContinuumProjectBuildingResult result ) + { + if ( result == null ) + { + return null; + } + AddingResult res = new AddingResult(); + + if ( result.hasErrors() ) + { + for ( Iterator i = result.getErrors().iterator(); i.hasNext(); ) + { + String error = (String) i.next(); + res.addError( error ); + } + } + + if ( result.getProjects() != null ) + { + for ( Iterator i = result.getProjects().iterator(); i.hasNext(); ) + { + org.apache.maven.continuum.model.project.Project project = + (org.apache.maven.continuum.model.project.Project) i.next(); + res.addProject( populateProjectSummary( project ) ); + } + } + + if ( result.getProjectGroups() != null ) + { + for ( Iterator i = result.getProjectGroups().iterator(); i.hasNext(); ) + { + org.apache.maven.continuum.model.project.ProjectGroup projectGroup = + (org.apache.maven.continuum.model.project.ProjectGroup) i.next(); + res.addProjectGroup( populateProjectGroupSummary( projectGroup ) ); + } + } + + return res; + } +} Propchange: maven/continuum/trunk/continuum-xmlrpc/continuum-xmlrpc-server/src/main/java/org/apache/maven/continuum/xmlrpc/server/ContinuumServiceImpl.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: maven/continuum/trunk/continuum-xmlrpc/continuum-xmlrpc-server/src/main/java/org/apache/maven/continuum/xmlrpc/server/ContinuumServiceImpl.java ------------------------------------------------------------------------------ svn:keywords = "Author Date Id Revision" Added: maven/continuum/trunk/continuum-xmlrpc/continuum-xmlrpc-server/src/main/java/org/apache/maven/continuum/xmlrpc/server/ContinuumXmlRpcComponent.java URL: http://svn.apache.org/viewvc/maven/continuum/trunk/continuum-xmlrpc/continuum-xmlrpc-server/src/main/java/org/apache/maven/continuum/xmlrpc/server/ContinuumXmlRpcComponent.java?view=auto&rev=537223 ============================================================================== --- maven/continuum/trunk/continuum-xmlrpc/continuum-xmlrpc-server/src/main/java/org/apache/maven/continuum/xmlrpc/server/ContinuumXmlRpcComponent.java (added) +++ maven/continuum/trunk/continuum-xmlrpc/continuum-xmlrpc-server/src/main/java/org/apache/maven/continuum/xmlrpc/server/ContinuumXmlRpcComponent.java Fri May 11 09:22:15 2007 @@ -0,0 +1,29 @@ +package org.apache.maven.continuum.xmlrpc.server; + +/* + * 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. + */ + +/** + * @author Emmanuel Venisse + * @version $Id$ + */ +public interface ContinuumXmlRpcComponent +{ + public void setConfig( ContinuumXmlRpcConfig config ); +} Propchange: maven/continuum/trunk/continuum-xmlrpc/continuum-xmlrpc-server/src/main/java/org/apache/maven/continuum/xmlrpc/server/ContinuumXmlRpcComponent.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: maven/continuum/trunk/continuum-xmlrpc/continuum-xmlrpc-server/src/main/java/org/apache/maven/continuum/xmlrpc/server/ContinuumXmlRpcComponent.java ------------------------------------------------------------------------------ svn:keywords = "Author Date Id Revision" Added: maven/continuum/trunk/continuum-xmlrpc/continuum-xmlrpc-server/src/main/java/org/apache/maven/continuum/xmlrpc/server/ContinuumXmlRpcConfig.java URL: http://svn.apache.org/viewvc/maven/continuum/trunk/continuum-xmlrpc/continuum-xmlrpc-server/src/main/java/org/apache/maven/continuum/xmlrpc/server/ContinuumXmlRpcConfig.java?view=auto&rev=537223 ============================================================================== --- maven/continuum/trunk/continuum-xmlrpc/continuum-xmlrpc-server/src/main/java/org/apache/maven/continuum/xmlrpc/server/ContinuumXmlRpcConfig.java (added) +++ maven/continuum/trunk/continuum-xmlrpc/continuum-xmlrpc-server/src/main/java/org/apache/maven/continuum/xmlrpc/server/ContinuumXmlRpcConfig.java Fri May 11 09:22:15 2007 @@ -0,0 +1,44 @@ +package org.apache.maven.continuum.xmlrpc.server; + +/* + * 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.xmlrpc.common.XmlRpcHttpRequestConfigImpl; + +import javax.servlet.http.HttpServletRequest; + +/** + * @author Emmanuel Venisse + * @version $Id$ + */ +public class ContinuumXmlRpcConfig + extends XmlRpcHttpRequestConfigImpl +{ + private HttpServletRequest httpServletRequest; + + public HttpServletRequest getHttpServletRequest() + { + return httpServletRequest; + } + + public void setHttpServletRequest( HttpServletRequest httpServletRequest ) + { + this.httpServletRequest = httpServletRequest; + } +} Propchange: maven/continuum/trunk/continuum-xmlrpc/continuum-xmlrpc-server/src/main/java/org/apache/maven/continuum/xmlrpc/server/ContinuumXmlRpcConfig.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: maven/continuum/trunk/continuum-xmlrpc/continuum-xmlrpc-server/src/main/java/org/apache/maven/continuum/xmlrpc/server/ContinuumXmlRpcConfig.java ------------------------------------------------------------------------------ svn:keywords = "Author Date Id Revision" Added: maven/continuum/trunk/continuum-xmlrpc/continuum-xmlrpc-server/src/main/java/org/apache/maven/continuum/xmlrpc/server/ContinuumXmlRpcServlet.java URL: http://svn.apache.org/viewvc/maven/continuum/trunk/continuum-xmlrpc/continuum-xmlrpc-server/src/main/java/org/apache/maven/continuum/xmlrpc/server/ContinuumXmlRpcServlet.java?view=auto&rev=537223 ============================================================================== --- maven/continuum/trunk/continuum-xmlrpc/continuum-xmlrpc-server/src/main/java/org/apache/maven/continuum/xmlrpc/server/ContinuumXmlRpcServlet.java (added) +++ maven/continuum/trunk/continuum-xmlrpc/continuum-xmlrpc-server/src/main/java/org/apache/maven/continuum/xmlrpc/server/ContinuumXmlRpcServlet.java Fri May 11 09:22:15 2007 @@ -0,0 +1,219 @@ +package org.apache.maven.continuum.xmlrpc.server; + +/* + * 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.xmlrpc.XmlRpcException; +import org.apache.xmlrpc.XmlRpcRequest; +import org.apache.xmlrpc.common.XmlRpcHttpRequestConfig; +import org.apache.xmlrpc.server.AbstractReflectiveHandlerMapping; +import org.apache.xmlrpc.server.PropertyHandlerMapping; +import org.apache.xmlrpc.server.RequestProcessorFactoryFactory; +import org.apache.xmlrpc.server.XmlRpcServerConfigImpl; +import org.codehaus.plexus.DefaultPlexusContainer; +import org.codehaus.plexus.PlexusConstants; +import org.codehaus.plexus.PlexusContainer; +import org.codehaus.plexus.PlexusContainerException; +import org.codehaus.plexus.classworlds.ClassWorld; +import org.codehaus.plexus.component.repository.exception.ComponentLifecycleException; +import org.codehaus.plexus.component.repository.exception.ComponentLookupException; +import org.codehaus.plexus.xwork.PlexusLifecycleListener; + +import javax.servlet.ServletConfig; +import javax.servlet.ServletContext; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +/** + * @author Emmanuel Venisse + * @version $Id$ + */ +public class ContinuumXmlRpcServlet + extends HttpServlet +{ + private ContinuumXmlRpcServletServer server; + + public String getServletInfo() + { + return "Continuum XMLRPC Servlet"; + } + + public void destroy() + { + if ( server != null ) + { + try + { + getPlexusContainer().release( server ); + } + catch ( ServletException e ) + { + log( "Unable to release XmlRpcServletServer.", e ); + } + catch ( ComponentLifecycleException e ) + { + log( "Unable to release XmlRpcServletServer.", e ); + } + } + } + + public void init( ServletConfig servletConfig ) + throws ServletException + { + super.init( servletConfig ); + + ensureContainerSet( servletConfig ); + + initServer(); + } + + public void initServer() + throws ServletException + { + server = new ContinuumXmlRpcServletServer(); + try + { + XmlRpcServerConfigImpl cfg = (XmlRpcServerConfigImpl) server.getConfig(); + cfg.setEnabledForExtensions( true ); + PropertiesHandlerMapping mapping = + (PropertiesHandlerMapping) lookup( PropertyHandlerMapping.class.getName() ); + mapping.setRequestProcessorFactoryFactory( + (RequestProcessorFactoryFactory) lookup( RequestProcessorFactoryFactory.class.getName() ) ); + mapping.load(); + mapping.setAuthenticationHandler( getAuthenticationHandler() ); + server.setHandlerMapping( mapping ); + } + catch ( XmlRpcException e ) + { + throw new ServletException( "Can't init the xml rpc server", e ); + } + } + + private AbstractReflectiveHandlerMapping.AuthenticationHandler getAuthenticationHandler() + { + AbstractReflectiveHandlerMapping.AuthenticationHandler handler = + new AbstractReflectiveHandlerMapping.AuthenticationHandler() + { + public boolean isAuthorized( XmlRpcRequest pRequest ) + { + XmlRpcHttpRequestConfig config = (XmlRpcHttpRequestConfig) pRequest.getConfig(); + return isAuthenticated( config.getBasicUserName(), config.getBasicPassword() ); + } + }; + return handler; + } + + protected boolean isAuthenticated( String username, String password ) + { + //TODO: Add authentication there. + return true; + } + + public void doPost( HttpServletRequest pRequest, HttpServletResponse pResponse ) + throws IOException, ServletException + { + server.execute( pRequest, pResponse ); + } + + private void ensureContainerSet( ServletConfig sc ) + throws ServletException + { + // TODO: unify this code with the lifecycle listener and application server + + ServletContext context = sc.getServletContext(); + + // Attempt to find it already loaded by xwork. + PlexusContainer xworkContainer = (PlexusContainer) context.getAttribute( PlexusLifecycleListener.KEY ); + + if ( xworkContainer != null ) + { + context.setAttribute( PlexusConstants.PLEXUS_KEY, xworkContainer ); + + return; + } + + // Container not found. + + if ( context.getAttribute( PlexusConstants.PLEXUS_KEY ) != null ) + { + context.log( "Plexus container already in context." ); + + return; + } + + // Create container. + + Map keys = new HashMap(); + + PlexusContainer pc; + try + { + pc = new DefaultPlexusContainer( "default", keys, "META-INF/plexus/application.xml", + new ClassWorld( "plexus.core", getClass().getClassLoader() ) ); + + context.setAttribute( PlexusConstants.PLEXUS_KEY, pc ); + } + catch ( PlexusContainerException e ) + { + throw new ServletException( "Unable to initialize Plexus Container.", e ); + } + } + + private PlexusContainer getPlexusContainer() + throws ServletException + { + PlexusContainer container = (PlexusContainer) getServletContext().getAttribute( PlexusConstants.PLEXUS_KEY ); + if ( container == null ) + { + throw new ServletException( "Unable to find plexus container." ); + } + return container; + } + + public Object lookup( String role ) + throws ServletException + { + try + { + return getPlexusContainer().lookup( role ); + } + catch ( ComponentLookupException e ) + { + throw new ServletException( "Unable to lookup role [" + role + "]", e ); + } + } + + public Object lookup( String role, String hint ) + throws ServletException + { + try + { + return getPlexusContainer().lookup( role, hint ); + } + catch ( ComponentLookupException e ) + { + throw new ServletException( "Unable to lookup role [" + role + "] hint [" + hint + "]", e ); + } + } +} Propchange: maven/continuum/trunk/continuum-xmlrpc/continuum-xmlrpc-server/src/main/java/org/apache/maven/continuum/xmlrpc/server/ContinuumXmlRpcServlet.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: maven/continuum/trunk/continuum-xmlrpc/continuum-xmlrpc-server/src/main/java/org/apache/maven/continuum/xmlrpc/server/ContinuumXmlRpcServlet.java ------------------------------------------------------------------------------ svn:keywords = "Author Date Id Revision" Added: maven/continuum/trunk/continuum-xmlrpc/continuum-xmlrpc-server/src/main/java/org/apache/maven/continuum/xmlrpc/server/ContinuumXmlRpcServletServer.java URL: http://svn.apache.org/viewvc/maven/continuum/trunk/continuum-xmlrpc/continuum-xmlrpc-server/src/main/java/org/apache/maven/continuum/xmlrpc/server/ContinuumXmlRpcServletServer.java?view=auto&rev=537223 ============================================================================== --- maven/continuum/trunk/continuum-xmlrpc/continuum-xmlrpc-server/src/main/java/org/apache/maven/continuum/xmlrpc/server/ContinuumXmlRpcServletServer.java (added) +++ maven/continuum/trunk/continuum-xmlrpc/continuum-xmlrpc-server/src/main/java/org/apache/maven/continuum/xmlrpc/server/ContinuumXmlRpcServletServer.java Fri May 11 09:22:15 2007 @@ -0,0 +1,40 @@ +package org.apache.maven.continuum.xmlrpc.server; + +/* + * 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.xmlrpc.common.XmlRpcHttpRequestConfigImpl; +import org.apache.xmlrpc.webserver.XmlRpcServletServer; + +import javax.servlet.http.HttpServletRequest; + +/** + * @author Emmanuel Venisse + * @version $Id$ + */ +public class ContinuumXmlRpcServletServer + extends XmlRpcServletServer +{ + protected XmlRpcHttpRequestConfigImpl newConfig( HttpServletRequest request ) + { + ContinuumXmlRpcConfig config = new ContinuumXmlRpcConfig(); + config.setHttpServletRequest( request ); + return config; + } +} Propchange: maven/continuum/trunk/continuum-xmlrpc/continuum-xmlrpc-server/src/main/java/org/apache/maven/continuum/xmlrpc/server/ContinuumXmlRpcServletServer.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: maven/continuum/trunk/continuum-xmlrpc/continuum-xmlrpc-server/src/main/java/org/apache/maven/continuum/xmlrpc/server/ContinuumXmlRpcServletServer.java ------------------------------------------------------------------------------ svn:keywords = "Author Date Id Revision" Added: maven/continuum/trunk/continuum-xmlrpc/continuum-xmlrpc-server/src/main/java/org/apache/maven/continuum/xmlrpc/server/Listener.java URL: http://svn.apache.org/viewvc/maven/continuum/trunk/continuum-xmlrpc/continuum-xmlrpc-server/src/main/java/org/apache/maven/continuum/xmlrpc/server/Listener.java?view=auto&rev=537223 ============================================================================== --- maven/continuum/trunk/continuum-xmlrpc/continuum-xmlrpc-server/src/main/java/org/apache/maven/continuum/xmlrpc/server/Listener.java (added) +++ maven/continuum/trunk/continuum-xmlrpc/continuum-xmlrpc-server/src/main/java/org/apache/maven/continuum/xmlrpc/server/Listener.java Fri May 11 09:22:15 2007 @@ -0,0 +1,37 @@ +package org.apache.maven.continuum.xmlrpc.server; + +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import org.codehaus.plexus.logging.AbstractLogEnabled; +import org.codehaus.plexus.logging.Logger; + +/** + * @author Emmanuel Venisse + * @version $Id$ + * @plexus.component role="org.apache.maven.continuum.xmlrpc.server.Listener" + */ +public class Listener + extends AbstractLogEnabled +{ + public Logger getLogger() + { + return super.getLogger(); + } +} Propchange: maven/continuum/trunk/continuum-xmlrpc/continuum-xmlrpc-server/src/main/java/org/apache/maven/continuum/xmlrpc/server/Listener.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: maven/continuum/trunk/continuum-xmlrpc/continuum-xmlrpc-server/src/main/java/org/apache/maven/continuum/xmlrpc/server/Listener.java ------------------------------------------------------------------------------ svn:keywords = "Author Date Id Revision" Added: maven/continuum/trunk/continuum-xmlrpc/continuum-xmlrpc-server/src/main/java/org/apache/maven/continuum/xmlrpc/server/PropertiesHandlerMapping.java URL: http://svn.apache.org/viewvc/maven/continuum/trunk/continuum-xmlrpc/continuum-xmlrpc-server/src/main/java/org/apache/maven/continuum/xmlrpc/server/PropertiesHandlerMapping.java?view=auto&rev=537223 ============================================================================== --- maven/continuum/trunk/continuum-xmlrpc/continuum-xmlrpc-server/src/main/java/org/apache/maven/continuum/xmlrpc/server/PropertiesHandlerMapping.java (added) +++ maven/continuum/trunk/continuum-xmlrpc/continuum-xmlrpc-server/src/main/java/org/apache/maven/continuum/xmlrpc/server/PropertiesHandlerMapping.java Fri May 11 09:22:15 2007 @@ -0,0 +1,68 @@ +package org.apache.maven.continuum.xmlrpc.server; + +/* + * 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.xmlrpc.XmlRpcException; +import org.apache.xmlrpc.server.PropertyHandlerMapping; + +import java.util.Iterator; +import java.util.Map; + +/** + * @author Emmanuel Venisse + * @version $Id$ + * @plexus.component role="org.apache.xmlrpc.server.PropertyHandlerMapping" + */ +public class PropertiesHandlerMapping + extends PropertyHandlerMapping +{ + /** + * @plexus.requirement role="org.apache.maven.continuum.xmlrpc.ContinuumXmlRpcComponent" + */ + private Map xmlrpcComponents; + + /** + * @plexus.requirement + */ + private Listener listener; + + public void load() + throws XmlRpcException + { + for ( Iterator i = xmlrpcComponents.keySet().iterator(); i.hasNext(); ) + { + String key = (String) i.next(); + Class cl = xmlrpcComponents.get( key ).getClass(); + listener.getLogger().debug( key + " => " + cl.getName() ); + + registerPublicMethods( key, cl ); + } + + if ( listener.getLogger().isDebugEnabled() ) + { + String[] methods = getListMethods(); + for ( int i = 0; i < methods.length; i++ ) + { + listener.getLogger().debug( methods[i] ); + } + } + } + +} Propchange: maven/continuum/trunk/continuum-xmlrpc/continuum-xmlrpc-server/src/main/java/org/apache/maven/continuum/xmlrpc/server/PropertiesHandlerMapping.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: maven/continuum/trunk/continuum-xmlrpc/continuum-xmlrpc-server/src/main/java/org/apache/maven/continuum/xmlrpc/server/PropertiesHandlerMapping.java ------------------------------------------------------------------------------ svn:keywords = "Author Date Id Revision" Modified: maven/continuum/trunk/continuum-xmlrpc/pom.xml URL: http://svn.apache.org/viewvc/maven/continuum/trunk/continuum-xmlrpc/pom.xml?view=diff&rev=537223&r1=537222&r2=537223 ============================================================================== --- maven/continuum/trunk/continuum-xmlrpc/pom.xml (original) +++ maven/continuum/trunk/continuum-xmlrpc/pom.xml Fri May 11 09:22:15 2007 @@ -1,3 +1,22 @@ + + continuum-parent @@ -6,48 +25,11 @@ 4.0.0 continuum-xmlrpc - Continuum XMLRPC Interface - - - - org.codehaus.plexus - plexus-maven-plugin - - - - descriptor - - - - - - - - - org.apache.maven.continuum - continuum-test - test - - - org.apache.maven.continuum - continuum-model - - - org.apache.maven.continuum - continuum-core - - - org.apache.maven.continuum - continuum-api - - - org.codehaus.plexus - plexus-utils - - - hsqldb - hsqldb - test - - + Continuum XMLRPC :: Parent + pom + + continuum-xmlrpc-api + continuum-xmlrpc-client + continuum-xmlrpc-server + Modified: maven/continuum/trunk/pom.xml URL: http://svn.apache.org/viewvc/maven/continuum/trunk/pom.xml?view=diff&rev=537223&r1=537222&r2=537223 ============================================================================== --- maven/continuum/trunk/pom.xml (original) +++ maven/continuum/trunk/pom.xml Fri May 11 09:22:15 2007 @@ -330,7 +330,17 @@ org.apache.maven.continuum - continuum-xmlrpc + continuum-xmlrpc-api + ${project.version} + + + org.apache.maven.continuum + continuum-xmlrpc-client + ${project.version} + + + org.apache.maven.continuum + continuum-xmlrpc-server ${pom.version} @@ -485,6 +495,11 @@ org.codehaus.plexus plexus-quartz 1.0-alpha-3 + + + org.codehaus.plexus + plexus-xwork-integration + 1.0-alpha-6