-<?xml version="1.0" encoding="UTF-8"?>\r
-<project xmlns="http://maven.apache.org/POM/4.0.0"\r
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"\r
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">\r
- <modelVersion>4.0.0</modelVersion>\r
- <parent>\r
- <groupId>org.argeo.slc</groupId>\r
- <artifactId>argeo-slc</artifactId>\r
- <version>0.9-SNAPSHOT</version>\r
- <relativePath>../org.argeo.slc</relativePath>\r
- </parent>\r
- <artifactId>argeo-slc-core</artifactId>\r
- <name>Argeo SLC Core</name>\r
- <description>SLC Core</description>\r
- <scm>\r
- <connection>\r
- scm:svn:https://www.argeo.org/svn/slc/trunk/org.argeo.slc.core\r
- </connection>\r
- <url>\r
- https://www.argeo.org/svn/slc/trunk/org.argeo.slc.core\r
- </url>\r
- </scm>\r
- <build>\r
- <plugins>\r
- <!-- Look to parent pom for inheritances -->\r
- <plugin>\r
- <groupId>org.apache.maven.plugins</groupId>\r
- <artifactId>maven-compiler-plugin</artifactId>\r
- </plugin>\r
- <plugin>\r
- <groupId>org.apache.maven.plugins</groupId>\r
- <artifactId>maven-source-plugin</artifactId>\r
- </plugin>\r
- <plugin>\r
- <groupId>org.apache.maven.plugins</groupId>\r
- <artifactId>maven-assembly-plugin</artifactId>\r
- <configuration>\r
- <descriptors>\r
- <descriptor>src/assembly/base.xml</descriptor>\r
- </descriptors>\r
- </configuration>\r
- <executions>\r
- <execution>\r
- <id>assembly-base</id>\r
- <phase>package</phase>\r
- <goals>\r
- <goal>single</goal>\r
- </goals>\r
- </execution>\r
- </executions>\r
- </plugin>\r
- <plugin>\r
- <groupId>org.apache.maven.plugins</groupId>\r
- <artifactId>maven-surefire-plugin</artifactId>\r
- <configuration>\r
- <excludes>\r
- <exclude>**/*IntegrationTest*.java</exclude>\r
- </excludes>\r
- </configuration>\r
- </plugin>\r
- </plugins>\r
- </build>\r
- <dependencies>\r
- <dependency>\r
- <groupId>javax.transaction</groupId>\r
- <artifactId>jta</artifactId>\r
- </dependency>\r
- <dependency>\r
- <groupId>log4j</groupId>\r
- <artifactId>log4j</artifactId>\r
- </dependency>\r
- <dependency>\r
- <groupId>org.hibernate</groupId>\r
- <artifactId>hibernate</artifactId>\r
- </dependency>\r
-\r
- <dependency>\r
- <groupId>org.springframework</groupId>\r
- <artifactId>spring-context</artifactId>\r
- </dependency>\r
- <dependency>\r
- <groupId>org.springframework</groupId>\r
- <artifactId>spring-orm</artifactId>\r
- </dependency>\r
- <dependency>\r
- <groupId>org.springframework</groupId>\r
- <artifactId>spring-jdbc</artifactId>\r
- </dependency>\r
- <dependency>\r
- <groupId>org.springframework.ws</groupId>\r
- <artifactId>spring-ws-core</artifactId>\r
- </dependency>\r
- <dependency>\r
- <groupId>org.springframework.ws</groupId>\r
- <artifactId>spring-oxm</artifactId>\r
- </dependency>\r
-\r
- <dependency>\r
- <groupId>org.codehaus.castor</groupId>\r
- <artifactId>castor</artifactId>\r
- </dependency>\r
- <dependency>\r
- <groupId>xerces</groupId>\r
- <artifactId>xercesImpl</artifactId>\r
- </dependency>\r
-\r
- <dependency>\r
- <groupId>javax.xml.soap</groupId>\r
- <artifactId>saaj-api</artifactId>\r
- </dependency>\r
- <dependency>\r
- <groupId>com.sun.xml.messaging.saaj</groupId>\r
- <artifactId>saaj-impl</artifactId>\r
- </dependency>\r
- <dependency>\r
- <groupId>javax.activation</groupId>\r
- <artifactId>activation</artifactId>\r
- </dependency>\r
-\r
+<?xml version="1.0" encoding="UTF-8"?>
+<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">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.argeo.slc</groupId>
+ <artifactId>argeo-slc</artifactId>
+ <version>0.9-SNAPSHOT</version>
+ <relativePath>../org.argeo.slc</relativePath>
+ </parent>
+ <artifactId>argeo-slc-core</artifactId>
+ <name>Argeo SLC Core</name>
+ <description>SLC Core</description>
+ <scm>
+ <connection>
+ scm:svn:https://www.argeo.org/svn/slc/trunk/org.argeo.slc.core
+ </connection>
+ <url>
+ https://www.argeo.org/svn/slc/trunk/org.argeo.slc.core
+ </url>
+ </scm>
+ <build>
+ <plugins>
+ <!-- Look to parent pom for inheritances -->
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-compiler-plugin</artifactId>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-source-plugin</artifactId>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-assembly-plugin</artifactId>
+ <configuration>
+ <descriptors>
+ <descriptor>src/assembly/base.xml</descriptor>
+ </descriptors>
+ </configuration>
+ <executions>
+ <execution>
+ <id>assembly-base</id>
+ <phase>package</phase>
+ <goals>
+ <goal>single</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <configuration>
+ <excludes>
+ <exclude>**/*IntegrationTest*.java</exclude>
+ </excludes>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+ <dependencies>
+ <dependency>
+ <groupId>javax.transaction</groupId>
+ <artifactId>jta</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>log4j</groupId>
+ <artifactId>log4j</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.hibernate</groupId>
+ <artifactId>hibernate</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>spring-context</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>spring-orm</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>spring-jdbc</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework.ws</groupId>
+ <artifactId>spring-ws-core</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework.ws</groupId>
+ <artifactId>spring-oxm</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>org.codehaus.castor</groupId>
+ <artifactId>castor</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>xerces</groupId>
+ <artifactId>xercesImpl</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>javax.xml.soap</groupId>
+ <artifactId>saaj-api</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>com.sun.xml.messaging.saaj</groupId>
+ <artifactId>saaj-impl</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>javax.activation</groupId>
+ <artifactId>activation</artifactId>
+ </dependency>
+
<dependency>
<groupId>org.apache.ant</groupId>
<artifactId>ant</artifactId>
<artifactId>ant-commons-logging</artifactId>
</dependency>
- <dependency>\r
- <groupId>org.apache.commons</groupId>\r
- <artifactId>commons-io</artifactId>\r
- </dependency>\r
- <dependency>\r
- <groupId>org.dbunit</groupId>\r
- <artifactId>dbunit</artifactId>\r
- </dependency>\r
- <dependency>\r
- <groupId>junit</groupId>\r
- <artifactId>junit</artifactId>\r
- </dependency>\r
- <dependency>\r
- <groupId>hsqldb</groupId>\r
- <artifactId>hsqldb</artifactId>\r
- </dependency>\r
- <dependency>\r
- <groupId>xalan</groupId>\r
- <artifactId>xalan</artifactId>\r
- </dependency>\r
- </dependencies>\r
+ <dependency>
+ <groupId>org.apache.commons</groupId>
+ <artifactId>commons-io</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.dbunit</groupId>
+ <artifactId>dbunit</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>hsqldb</groupId>
+ <artifactId>hsqldb</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>xalan</groupId>
+ <artifactId>xalan</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-embedder</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-settings</artifactId>
+ </dependency>
+
+ </dependencies>
</project>
\ No newline at end of file
--- /dev/null
+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;
+ }
+
+}
--- /dev/null
+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<String, String> filter);
+}
--- /dev/null
+package org.argeo.slc.support.deploy;\r
+\r
+import java.io.File;\r
+import java.io.IOException;\r
+import java.net.URL;\r
+\r
+import org.argeo.slc.core.SlcException;\r
+import org.argeo.slc.core.build.Distribution;\r
+import org.springframework.core.io.Resource;\r
+\r
+public class ApacheHttpdServer implements WebServer {\r
+ private Resource baseUrlRes;\r
+ private File baseLocation;\r
+\r
+ public URL getBaseUrl() {\r
+ try {\r
+ return baseUrlRes.getURL();\r
+ } catch (IOException e) {\r
+ throw new SlcException("Cannot get url from "+baseUrlRes,e);\r
+ }\r
+ }\r
+\r
+ public void setBaseUrlRes(Resource baseUrlRes){\r
+ this.baseUrlRes = baseUrlRes;\r
+ }\r
+ \r
+ \r
+ \r
+ public File getBaseLocation() {\r
+ return baseLocation;\r
+ }\r
+\r
+ public void setBaseLocation(File baseLocation) {\r
+ this.baseLocation = baseLocation;\r
+ }\r
+\r
+ public String getDeployedSystemId() {\r
+ // TODO Auto-generated method stub\r
+ return null;\r
+ }\r
+\r
+ public Distribution getDistribution() {\r
+ // TODO Auto-generated method stub\r
+ return null;\r
+ }\r
+\r
+}\r
--- /dev/null
+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<String, String> 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;
+ }
+
+}
--- /dev/null
+package org.argeo.slc.support.deploy;\r
+\r
+import java.io.File;\r
+\r
+import org.apache.commons.logging.Log;\r
+import org.apache.commons.logging.LogFactory;\r
+import org.argeo.slc.core.SlcException;\r
+import org.argeo.slc.core.build.Distribution;\r
+import org.argeo.slc.core.deploy.DeployEnvironment;\r
+import org.argeo.slc.core.deploy.DeployedSystem;\r
+import org.argeo.slc.core.deploy.DeploymentData;\r
+import org.argeo.slc.core.deploy.ExecutableDeployment;\r
+import org.argeo.slc.core.deploy.TargetData;\r
+\r
+public class HttpdApplicationDeployment implements ExecutableDeployment {\r
+ private static final Log log = LogFactory\r
+ .getLog(HttpdApplicationDeployment.class);\r
+\r
+ private HttpdApplicationTargetData targetData;\r
+ private DeploymentData deploymentData;\r
+ private SimpleHttpdApplication deployedSystem;\r
+ private Distribution distribution;\r
+\r
+ private DeployEnvironment deployEnvironment;\r
+\r
+ public void execute() {\r
+ try {\r
+ deployEnvironment.unpackTo(getDistribution(), targetData\r
+ .getTargetRootLocation(), null);\r
+ \r
+ // FIXME: make it generic\r
+ String deployDataPath = targetData.getTargetRootLocation()\r
+ .getCanonicalPath();\r
+ \r
+ deployEnvironment.unpackTo(getDeploymentData(), new File(\r
+ deployDataPath), null);\r
+ deployedSystem = new SimpleHttpdApplication();\r
+ deployedSystem.setTargetData(targetData);\r
+\r
+ } catch (Exception e) {\r
+ throw new SlcException("Cannot deploy " + deploymentData + " to "\r
+ + targetData, e);\r
+ }\r
+\r
+ }\r
+\r
+ public void setTargetData(TargetData targetData) {\r
+ this.targetData = (HttpdApplicationTargetData) targetData;\r
+ }\r
+\r
+ public void setDeploymentData(DeploymentData deploymentData) {\r
+ this.deploymentData = deploymentData;\r
+ }\r
+\r
+ public DeployedSystem getDeployedSystem() {\r
+ return deployedSystem;\r
+ }\r
+\r
+ public DeploymentData getDeploymentData() {\r
+ return deploymentData;\r
+ }\r
+\r
+ public TargetData getTargetData() {\r
+ return targetData;\r
+ }\r
+\r
+ public Distribution getDistribution() {\r
+ return distribution;\r
+ }\r
+\r
+ public void setDistribution(Distribution distribution) {\r
+ this.distribution = distribution;\r
+ }\r
+\r
+ public void setDeployEnvironment(DeployEnvironment deployEnvironment) {\r
+ this.deployEnvironment = deployEnvironment;\r
+ }\r
+\r
+}\r
--- /dev/null
+package org.argeo.slc.support.deploy;\r
+\r
+import java.io.File;\r
+import java.net.MalformedURLException;\r
+import java.net.URL;\r
+\r
+import org.argeo.slc.core.SlcException;\r
+import org.argeo.slc.core.deploy.TargetData;\r
+\r
+public class HttpdApplicationTargetData implements TargetData {\r
+ private ApacheHttpdServer webServer;\r
+ private String relativePath;\r
+\r
+ public ApacheHttpdServer getWebServer() {\r
+ return webServer;\r
+ }\r
+\r
+ public void setWebServer(ApacheHttpdServer webServer) {\r
+ this.webServer = webServer;\r
+ }\r
+\r
+ public String getRelativePath() {\r
+ return relativePath;\r
+ }\r
+\r
+ public void setRelativePath(String relativePath) {\r
+ this.relativePath = relativePath;\r
+ }\r
+\r
+ public URL getTargetBaseUrl() {\r
+ try {\r
+ URL wsUrl = getWebServer().getBaseUrl();\r
+ return new URL(wsUrl, wsUrl.getFile() + '/' + relativePath);\r
+ } catch (MalformedURLException e) {\r
+ throw new SlcException("Cannot get base url for " + relativePath, e);\r
+ }\r
+ }\r
+\r
+ public File getTargetRootLocation() {\r
+ return new File(getWebServer().getBaseLocation().getPath()\r
+ + File.separator + getRelativePath());\r
+ }\r
+\r
+}\r
--- /dev/null
+package org.argeo.slc.support.deploy;\r
+\r
+import java.io.File;\r
+import java.net.URL;\r
+\r
+import org.argeo.slc.core.build.Distribution;\r
+\r
+public class SimpleHttpdApplication implements WebApplication {\r
+ private HttpdApplicationTargetData targetData;\r
+ private Distribution distribution;\r
+\r
+ public void setDistribution(Distribution distribution) {\r
+ this.distribution = distribution;\r
+ }\r
+\r
+ public URL getBaseUrl() {\r
+ return targetData.getTargetBaseUrl();\r
+ }\r
+\r
+ public File getRootLocation() {\r
+ return targetData.getTargetRootLocation();\r
+ }\r
+\r
+ public String getDeployedSystemId() {\r
+ // TODO Auto-generated method stub\r
+ return null;\r
+ }\r
+\r
+ public HttpdApplicationTargetData getTargetData() {\r
+ return targetData;\r
+ }\r
+\r
+ public void setTargetData(HttpdApplicationTargetData targetData) {\r
+ this.targetData = targetData;\r
+ }\r
+\r
+ public Distribution getDistribution() {\r
+ return distribution;\r
+ }\r
+\r
+}\r
--- /dev/null
+package org.argeo.slc.support.deploy;\r
+\r
+import java.io.File;\r
+import java.net.URL;\r
+\r
+import org.argeo.slc.core.deploy.DeployedSystem;\r
+\r
+public interface WebApplication extends DeployedSystem{\r
+ public URL getBaseUrl();\r
+ public File getRootLocation();\r
+}\r
--- /dev/null
+package org.argeo.slc.support.deploy;\r
+\r
+import java.net.URL;\r
+\r
+import org.argeo.slc.core.deploy.DeployedSystem;\r
+\r
+public interface WebServer extends DeployedSystem {\r
+ public URL getBaseUrl();\r
+}\r
--- /dev/null
+<project>\r
+\r
+ <target name="deployZip">
+ <unzip src="${src}" dest="${tempDir}" />
+ <copyFromTemp />
+ </target>
+
+ <target name="deployTarGz">
+ <untar src="${src}" dest="${tempDir}" compression="gzip" />
+ <copyFromTemp />
+ </target>
+
+ <macrodef name="copyFromTemp">
+ <sequential>
+ <copy todir="${dest}" includeemptydirs="true">
+ <fileset dir="${tempDir}">
+ <include name="**/*" />
+ </fileset>
+ <mapper classname="org.argeo.slc.ant.RemoveRootDirMapper" to="${removeRootDir}" />
+ </copy>
+ </sequential>
+ </macrodef>
+</project>
\ No newline at end of file