From fb1f473a0fa4f3b11ebbf7a676983ea946fbdac0 Mon Sep 17 00:00:00 2001 From: Mathieu Baudier Date: Sat, 31 May 2008 15:37:38 +0000 Subject: [PATCH] Migrate deploy developments to main project git-svn-id: https://svn.argeo.org/slc/trunk@1151 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc --- org.argeo.slc.core/pom.xml | 289 +++++++++--------- .../argeo/slc/ant/RemoveRootDirMapper.java | 40 +++ .../slc/core/deploy/DeployEnvironment.java | 9 + .../slc/support/deploy/ApacheHttpdServer.java | 47 +++ .../deploy/BasicDeployEnvironment.java | 75 +++++ .../deploy/HttpdApplicationDeployment.java | 79 +++++ .../deploy/HttpdApplicationTargetData.java | 44 +++ .../deploy/SimpleHttpdApplication.java | 41 +++ .../slc/support/deploy/WebApplication.java | 11 + .../argeo/slc/support/deploy/WebServer.java | 9 + .../argeo/slc/support/deploy/ant/build.xml | 23 ++ 11 files changed, 527 insertions(+), 140 deletions(-) create mode 100644 org.argeo.slc.core/src/main/java/org/argeo/slc/ant/RemoveRootDirMapper.java create mode 100644 org.argeo.slc.core/src/main/java/org/argeo/slc/core/deploy/DeployEnvironment.java create mode 100644 org.argeo.slc.core/src/main/java/org/argeo/slc/support/deploy/ApacheHttpdServer.java create mode 100644 org.argeo.slc.core/src/main/java/org/argeo/slc/support/deploy/BasicDeployEnvironment.java create mode 100644 org.argeo.slc.core/src/main/java/org/argeo/slc/support/deploy/HttpdApplicationDeployment.java create mode 100644 org.argeo.slc.core/src/main/java/org/argeo/slc/support/deploy/HttpdApplicationTargetData.java create mode 100644 org.argeo.slc.core/src/main/java/org/argeo/slc/support/deploy/SimpleHttpdApplication.java create mode 100644 org.argeo.slc.core/src/main/java/org/argeo/slc/support/deploy/WebApplication.java create mode 100644 org.argeo.slc.core/src/main/java/org/argeo/slc/support/deploy/WebServer.java create mode 100644 org.argeo.slc.core/src/main/resources/org/argeo/slc/support/deploy/ant/build.xml diff --git a/org.argeo.slc.core/pom.xml b/org.argeo.slc.core/pom.xml index 45425d271..6eecd543c 100644 --- a/org.argeo.slc.core/pom.xml +++ b/org.argeo.slc.core/pom.xml @@ -1,122 +1,122 @@ - - - 4.0.0 - - org.argeo.slc - argeo-slc - 0.9-SNAPSHOT - ../org.argeo.slc - - argeo-slc-core - Argeo SLC Core - SLC Core - - - scm:svn:https://www.argeo.org/svn/slc/trunk/org.argeo.slc.core - - - https://www.argeo.org/svn/slc/trunk/org.argeo.slc.core - - - - - - - org.apache.maven.plugins - maven-compiler-plugin - - - org.apache.maven.plugins - maven-source-plugin - - - org.apache.maven.plugins - maven-assembly-plugin - - - src/assembly/base.xml - - - - - assembly-base - package - - single - - - - - - org.apache.maven.plugins - maven-surefire-plugin - - - **/*IntegrationTest*.java - - - - - - - - javax.transaction - jta - - - log4j - log4j - - - org.hibernate - hibernate - - - - org.springframework - spring-context - - - org.springframework - spring-orm - - - org.springframework - spring-jdbc - - - org.springframework.ws - spring-ws-core - - - org.springframework.ws - spring-oxm - - - - org.codehaus.castor - castor - - - xerces - xercesImpl - - - - javax.xml.soap - saaj-api - - - com.sun.xml.messaging.saaj - saaj-impl - - - javax.activation - activation - - + + + 4.0.0 + + org.argeo.slc + argeo-slc + 0.9-SNAPSHOT + ../org.argeo.slc + + argeo-slc-core + Argeo SLC Core + SLC Core + + + scm:svn:https://www.argeo.org/svn/slc/trunk/org.argeo.slc.core + + + https://www.argeo.org/svn/slc/trunk/org.argeo.slc.core + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + + org.apache.maven.plugins + maven-source-plugin + + + org.apache.maven.plugins + maven-assembly-plugin + + + src/assembly/base.xml + + + + + assembly-base + package + + single + + + + + + org.apache.maven.plugins + maven-surefire-plugin + + + **/*IntegrationTest*.java + + + + + + + + javax.transaction + jta + + + log4j + log4j + + + org.hibernate + hibernate + + + + org.springframework + spring-context + + + org.springframework + spring-orm + + + org.springframework + spring-jdbc + + + org.springframework.ws + spring-ws-core + + + org.springframework.ws + spring-oxm + + + + org.codehaus.castor + castor + + + xerces + xercesImpl + + + + javax.xml.soap + saaj-api + + + com.sun.xml.messaging.saaj + saaj-impl + + + javax.activation + activation + + org.apache.ant ant @@ -126,25 +126,34 @@ ant-commons-logging - - org.apache.commons - commons-io - - - org.dbunit - dbunit - - - junit - junit - - - hsqldb - hsqldb - - - xalan - xalan - - + + org.apache.commons + commons-io + + + org.dbunit + dbunit + + + junit + junit + + + hsqldb + hsqldb + + + xalan + xalan + + + org.apache.maven + maven-embedder + + + org.apache.maven + maven-settings + + + \ No newline at end of file diff --git a/org.argeo.slc.core/src/main/java/org/argeo/slc/ant/RemoveRootDirMapper.java b/org.argeo.slc.core/src/main/java/org/argeo/slc/ant/RemoveRootDirMapper.java new file mode 100644 index 000000000..43b247c2b --- /dev/null +++ b/org.argeo.slc.core/src/main/java/org/argeo/slc/ant/RemoveRootDirMapper.java @@ -0,0 +1,40 @@ +package org.argeo.slc.ant; + +import java.util.StringTokenizer; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.tools.ant.util.FileNameMapper; + +public class RemoveRootDirMapper implements FileNameMapper { + private Log log = LogFactory.getLog(RemoveRootDirMapper.class); + private String to = "enabled"; + + public String[] mapFileName(String sourceFileName) { + StringTokenizer st = new StringTokenizer(sourceFileName, "/"); + boolean first = true; + boolean skipRoot = !to.equals("disabled"); + StringBuffer buf = new StringBuffer(""); + while (st.hasMoreTokens()) { + if (first && skipRoot) { // skip + st.nextToken(); + first = false; + } else { + buf.append(st.nextToken()).append('/'); + } + } + + if (log.isTraceEnabled()) { + log.trace("Source: " + sourceFileName + " - out: " + buf); + } + return new String[] { buf.toString() }; + } + + public void setFrom(String from) { + } + + public void setTo(String to) { + this.to = to; + } + +} diff --git a/org.argeo.slc.core/src/main/java/org/argeo/slc/core/deploy/DeployEnvironment.java b/org.argeo.slc.core/src/main/java/org/argeo/slc/core/deploy/DeployEnvironment.java new file mode 100644 index 000000000..ca747f65e --- /dev/null +++ b/org.argeo.slc.core/src/main/java/org/argeo/slc/core/deploy/DeployEnvironment.java @@ -0,0 +1,9 @@ +package org.argeo.slc.core.deploy; + +import java.io.File; +import java.util.Map; + +public interface DeployEnvironment { + public void unpackTo(Object packg, File targetLocation, + Map filter); +} diff --git a/org.argeo.slc.core/src/main/java/org/argeo/slc/support/deploy/ApacheHttpdServer.java b/org.argeo.slc.core/src/main/java/org/argeo/slc/support/deploy/ApacheHttpdServer.java new file mode 100644 index 000000000..6d77cdd51 --- /dev/null +++ b/org.argeo.slc.core/src/main/java/org/argeo/slc/support/deploy/ApacheHttpdServer.java @@ -0,0 +1,47 @@ +package org.argeo.slc.support.deploy; + +import java.io.File; +import java.io.IOException; +import java.net.URL; + +import org.argeo.slc.core.SlcException; +import org.argeo.slc.core.build.Distribution; +import org.springframework.core.io.Resource; + +public class ApacheHttpdServer implements WebServer { + private Resource baseUrlRes; + private File baseLocation; + + public URL getBaseUrl() { + try { + return baseUrlRes.getURL(); + } catch (IOException e) { + throw new SlcException("Cannot get url from "+baseUrlRes,e); + } + } + + public void setBaseUrlRes(Resource baseUrlRes){ + this.baseUrlRes = baseUrlRes; + } + + + + public File getBaseLocation() { + return baseLocation; + } + + public void setBaseLocation(File baseLocation) { + this.baseLocation = baseLocation; + } + + public String getDeployedSystemId() { + // TODO Auto-generated method stub + return null; + } + + public Distribution getDistribution() { + // TODO Auto-generated method stub + return null; + } + +} diff --git a/org.argeo.slc.core/src/main/java/org/argeo/slc/support/deploy/BasicDeployEnvironment.java b/org.argeo.slc.core/src/main/java/org/argeo/slc/support/deploy/BasicDeployEnvironment.java new file mode 100644 index 000000000..60dfea024 --- /dev/null +++ b/org.argeo.slc.core/src/main/java/org/argeo/slc/support/deploy/BasicDeployEnvironment.java @@ -0,0 +1,75 @@ +package org.argeo.slc.support.deploy; + +import java.io.File; +import java.net.URL; +import java.util.Map; +import java.util.Properties; +import java.util.UUID; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.argeo.slc.ant.AntRegistryUtil; +import org.argeo.slc.core.SlcException; +import org.argeo.slc.core.deploy.DeployEnvironment; +import org.argeo.slc.maven.MavenFile; +import org.argeo.slc.maven.MavenManager; + +public class BasicDeployEnvironment implements DeployEnvironment { + private static final Log log = LogFactory + .getLog(BasicDeployEnvironment.class); + private MavenManager mavenManager; + + public void unpackTo(Object packg, File targetLocation, + Map filter) { + File packageLocation; + String type = null; + String removeRootDir = "enabled"; + if (packg instanceof MavenFile) { + packageLocation = mavenManager + .getPackageLocation((MavenFile) packg); + type = ((MavenFile) packg).getType(); + } else if (packg instanceof File) { + packageLocation = (File) packg; + // TODO: type based on extension + } else { + throw new SlcException("Unrecognized package type " + + packg.getClass()); + } + if (log.isDebugEnabled()) { + log.debug("Unpack " + packageLocation + " of type " + type + " to " + + targetLocation); + } + + try { + File tempDir = new File("/tmp/"+UUID.randomUUID().toString()); + tempDir.mkdirs(); + targetLocation.mkdirs(); + Properties props = new Properties(); + props.setProperty("dest", targetLocation.getAbsolutePath()); + props.setProperty("src", packageLocation.getAbsolutePath()); + props.setProperty("tempDir", tempDir.getAbsolutePath()); + props.setProperty("removeRootDir", removeRootDir); + + URL antUrl = getClass().getClassLoader().getResource( + "org/argeo/slc/support/deploy/ant/build.xml"); + + if (type == null || type.equals("zip")) { + AntRegistryUtil.runAll(antUrl, "deployZip", props); + } else if (type.equals("tar.gz")) { + AntRegistryUtil.runAll(antUrl, "deployTarGz", props); + } else { + throw new SlcException("Unknow package type " + type); + } + } catch (SlcException e) { + throw e; + } catch (Exception e) { + throw new SlcException("Cannot unpack package " + packg + " to " + + targetLocation, e); + } + } + + public void setMavenManager(MavenManager mavenManager) { + this.mavenManager = mavenManager; + } + +} diff --git a/org.argeo.slc.core/src/main/java/org/argeo/slc/support/deploy/HttpdApplicationDeployment.java b/org.argeo.slc.core/src/main/java/org/argeo/slc/support/deploy/HttpdApplicationDeployment.java new file mode 100644 index 000000000..79eb0bd4f --- /dev/null +++ b/org.argeo.slc.core/src/main/java/org/argeo/slc/support/deploy/HttpdApplicationDeployment.java @@ -0,0 +1,79 @@ +package org.argeo.slc.support.deploy; + +import java.io.File; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.argeo.slc.core.SlcException; +import org.argeo.slc.core.build.Distribution; +import org.argeo.slc.core.deploy.DeployEnvironment; +import org.argeo.slc.core.deploy.DeployedSystem; +import org.argeo.slc.core.deploy.DeploymentData; +import org.argeo.slc.core.deploy.ExecutableDeployment; +import org.argeo.slc.core.deploy.TargetData; + +public class HttpdApplicationDeployment implements ExecutableDeployment { + private static final Log log = LogFactory + .getLog(HttpdApplicationDeployment.class); + + private HttpdApplicationTargetData targetData; + private DeploymentData deploymentData; + private SimpleHttpdApplication deployedSystem; + private Distribution distribution; + + private DeployEnvironment deployEnvironment; + + public void execute() { + try { + deployEnvironment.unpackTo(getDistribution(), targetData + .getTargetRootLocation(), null); + + // FIXME: make it generic + String deployDataPath = targetData.getTargetRootLocation() + .getCanonicalPath(); + + deployEnvironment.unpackTo(getDeploymentData(), new File( + deployDataPath), null); + deployedSystem = new SimpleHttpdApplication(); + deployedSystem.setTargetData(targetData); + + } catch (Exception e) { + throw new SlcException("Cannot deploy " + deploymentData + " to " + + targetData, e); + } + + } + + public void setTargetData(TargetData targetData) { + this.targetData = (HttpdApplicationTargetData) targetData; + } + + public void setDeploymentData(DeploymentData deploymentData) { + this.deploymentData = deploymentData; + } + + public DeployedSystem getDeployedSystem() { + return deployedSystem; + } + + public DeploymentData getDeploymentData() { + return deploymentData; + } + + public TargetData getTargetData() { + return targetData; + } + + public Distribution getDistribution() { + return distribution; + } + + public void setDistribution(Distribution distribution) { + this.distribution = distribution; + } + + public void setDeployEnvironment(DeployEnvironment deployEnvironment) { + this.deployEnvironment = deployEnvironment; + } + +} diff --git a/org.argeo.slc.core/src/main/java/org/argeo/slc/support/deploy/HttpdApplicationTargetData.java b/org.argeo.slc.core/src/main/java/org/argeo/slc/support/deploy/HttpdApplicationTargetData.java new file mode 100644 index 000000000..7097289ec --- /dev/null +++ b/org.argeo.slc.core/src/main/java/org/argeo/slc/support/deploy/HttpdApplicationTargetData.java @@ -0,0 +1,44 @@ +package org.argeo.slc.support.deploy; + +import java.io.File; +import java.net.MalformedURLException; +import java.net.URL; + +import org.argeo.slc.core.SlcException; +import org.argeo.slc.core.deploy.TargetData; + +public class HttpdApplicationTargetData implements TargetData { + private ApacheHttpdServer webServer; + private String relativePath; + + public ApacheHttpdServer getWebServer() { + return webServer; + } + + public void setWebServer(ApacheHttpdServer webServer) { + this.webServer = webServer; + } + + public String getRelativePath() { + return relativePath; + } + + public void setRelativePath(String relativePath) { + this.relativePath = relativePath; + } + + public URL getTargetBaseUrl() { + try { + URL wsUrl = getWebServer().getBaseUrl(); + return new URL(wsUrl, wsUrl.getFile() + '/' + relativePath); + } catch (MalformedURLException e) { + throw new SlcException("Cannot get base url for " + relativePath, e); + } + } + + public File getTargetRootLocation() { + return new File(getWebServer().getBaseLocation().getPath() + + File.separator + getRelativePath()); + } + +} diff --git a/org.argeo.slc.core/src/main/java/org/argeo/slc/support/deploy/SimpleHttpdApplication.java b/org.argeo.slc.core/src/main/java/org/argeo/slc/support/deploy/SimpleHttpdApplication.java new file mode 100644 index 000000000..bb98c383f --- /dev/null +++ b/org.argeo.slc.core/src/main/java/org/argeo/slc/support/deploy/SimpleHttpdApplication.java @@ -0,0 +1,41 @@ +package org.argeo.slc.support.deploy; + +import java.io.File; +import java.net.URL; + +import org.argeo.slc.core.build.Distribution; + +public class SimpleHttpdApplication implements WebApplication { + private HttpdApplicationTargetData targetData; + private Distribution distribution; + + public void setDistribution(Distribution distribution) { + this.distribution = distribution; + } + + public URL getBaseUrl() { + return targetData.getTargetBaseUrl(); + } + + public File getRootLocation() { + return targetData.getTargetRootLocation(); + } + + public String getDeployedSystemId() { + // TODO Auto-generated method stub + return null; + } + + public HttpdApplicationTargetData getTargetData() { + return targetData; + } + + public void setTargetData(HttpdApplicationTargetData targetData) { + this.targetData = targetData; + } + + public Distribution getDistribution() { + return distribution; + } + +} diff --git a/org.argeo.slc.core/src/main/java/org/argeo/slc/support/deploy/WebApplication.java b/org.argeo.slc.core/src/main/java/org/argeo/slc/support/deploy/WebApplication.java new file mode 100644 index 000000000..da0b1129e --- /dev/null +++ b/org.argeo.slc.core/src/main/java/org/argeo/slc/support/deploy/WebApplication.java @@ -0,0 +1,11 @@ +package org.argeo.slc.support.deploy; + +import java.io.File; +import java.net.URL; + +import org.argeo.slc.core.deploy.DeployedSystem; + +public interface WebApplication extends DeployedSystem{ + public URL getBaseUrl(); + public File getRootLocation(); +} diff --git a/org.argeo.slc.core/src/main/java/org/argeo/slc/support/deploy/WebServer.java b/org.argeo.slc.core/src/main/java/org/argeo/slc/support/deploy/WebServer.java new file mode 100644 index 000000000..fc747bc94 --- /dev/null +++ b/org.argeo.slc.core/src/main/java/org/argeo/slc/support/deploy/WebServer.java @@ -0,0 +1,9 @@ +package org.argeo.slc.support.deploy; + +import java.net.URL; + +import org.argeo.slc.core.deploy.DeployedSystem; + +public interface WebServer extends DeployedSystem { + public URL getBaseUrl(); +} diff --git a/org.argeo.slc.core/src/main/resources/org/argeo/slc/support/deploy/ant/build.xml b/org.argeo.slc.core/src/main/resources/org/argeo/slc/support/deploy/ant/build.xml new file mode 100644 index 000000000..693f5ecb9 --- /dev/null +++ b/org.argeo.slc.core/src/main/resources/org/argeo/slc/support/deploy/ant/build.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file -- 2.39.2