Migrate deploy developments to main project
authorMathieu Baudier <mbaudier@argeo.org>
Sat, 31 May 2008 15:37:38 +0000 (15:37 +0000)
committerMathieu Baudier <mbaudier@argeo.org>
Sat, 31 May 2008 15:37:38 +0000 (15:37 +0000)
git-svn-id: https://svn.argeo.org/slc/trunk@1151 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc

org.argeo.slc.core/pom.xml
org.argeo.slc.core/src/main/java/org/argeo/slc/ant/RemoveRootDirMapper.java [new file with mode: 0644]
org.argeo.slc.core/src/main/java/org/argeo/slc/core/deploy/DeployEnvironment.java [new file with mode: 0644]
org.argeo.slc.core/src/main/java/org/argeo/slc/support/deploy/ApacheHttpdServer.java [new file with mode: 0644]
org.argeo.slc.core/src/main/java/org/argeo/slc/support/deploy/BasicDeployEnvironment.java [new file with mode: 0644]
org.argeo.slc.core/src/main/java/org/argeo/slc/support/deploy/HttpdApplicationDeployment.java [new file with mode: 0644]
org.argeo.slc.core/src/main/java/org/argeo/slc/support/deploy/HttpdApplicationTargetData.java [new file with mode: 0644]
org.argeo.slc.core/src/main/java/org/argeo/slc/support/deploy/SimpleHttpdApplication.java [new file with mode: 0644]
org.argeo.slc.core/src/main/java/org/argeo/slc/support/deploy/WebApplication.java [new file with mode: 0644]
org.argeo.slc.core/src/main/java/org/argeo/slc/support/deploy/WebServer.java [new file with mode: 0644]
org.argeo.slc.core/src/main/resources/org/argeo/slc/support/deploy/ant/build.xml [new file with mode: 0644]

index 45425d271146eb9c5d70b44442300409a7ca20c1..6eecd543cb1b43de619da12363fff7f7527ea700 100644 (file)
-<?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
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 (file)
index 0000000..43b247c
--- /dev/null
@@ -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 (file)
index 0000000..ca747f6
--- /dev/null
@@ -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<String, String> 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 (file)
index 0000000..6d77cdd
--- /dev/null
@@ -0,0 +1,47 @@
+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
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 (file)
index 0000000..60dfea0
--- /dev/null
@@ -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<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;
+       }
+
+}
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 (file)
index 0000000..79eb0bd
--- /dev/null
@@ -0,0 +1,79 @@
+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
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 (file)
index 0000000..7097289
--- /dev/null
@@ -0,0 +1,44 @@
+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
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 (file)
index 0000000..bb98c38
--- /dev/null
@@ -0,0 +1,41 @@
+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
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 (file)
index 0000000..da0b112
--- /dev/null
@@ -0,0 +1,11 @@
+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
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 (file)
index 0000000..fc747bc
--- /dev/null
@@ -0,0 +1,9 @@
+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
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 (file)
index 0000000..693f5ec
--- /dev/null
@@ -0,0 +1,23 @@
+<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