From 62bca43d2a0ecc773977dbc408644a140d5f5234 Mon Sep 17 00:00:00 2001 From: Mathieu Baudier Date: Sun, 5 Oct 2008 13:43:10 +0000 Subject: [PATCH] Integrate XML-based file exchanges. git-svn-id: https://svn.argeo.org/slc/trunk@1703 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc --- org.argeo.slc.detached/.classpath | 2 - org.argeo.slc.detached/pom.xml | 22 +++-- .../slc/detached/DetachedXmlConverter.java | 9 +-- .../detached/DetachedXmlConverterCompat.java | 61 ++++++++++++-- .../slc/detached/drivers/AbstractDriver.java | 11 +++ .../slc/detached/drivers/FileDriver.java | 80 +++++++++++++++---- .../src/main/resources/META-INF/MANIFEST.MF | 29 ++++--- .../org/argeo/slc/detached/spring.xml | 18 +---- 8 files changed, 166 insertions(+), 66 deletions(-) diff --git a/org.argeo.slc.detached/.classpath b/org.argeo.slc.detached/.classpath index 7dc80e91b..4972669ed 100644 --- a/org.argeo.slc.detached/.classpath +++ b/org.argeo.slc.detached/.classpath @@ -2,8 +2,6 @@ - - diff --git a/org.argeo.slc.detached/pom.xml b/org.argeo.slc.detached/pom.xml index 1588b1163..7083a9f8a 100644 --- a/org.argeo.slc.detached/pom.xml +++ b/org.argeo.slc.detached/pom.xml @@ -32,6 +32,15 @@ org.argeo.slc.detached.* + + *, + org.springframework.beans.factory;version="2.0", + org.springframework.beans.factory.support;version="2.0", + org.springframework.beans.factory.xml;version="2.0", + org.springframework.context;version="2.0", + org.springframework.context.support;version="2.0", + org.springframework.core.io;version="2.0" + @@ -58,19 +67,6 @@ org.springframework spring-context - 2.0.8 - - - - org.codehaus.castor - castor - 1.1.2 - - - adaptx - adaptx - - diff --git a/org.argeo.slc.detached/src/main/java/org/argeo/slc/detached/DetachedXmlConverter.java b/org.argeo.slc.detached/src/main/java/org/argeo/slc/detached/DetachedXmlConverter.java index 455597d54..0843a8885 100644 --- a/org.argeo.slc.detached/src/main/java/org/argeo/slc/detached/DetachedXmlConverter.java +++ b/org.argeo.slc.detached/src/main/java/org/argeo/slc/detached/DetachedXmlConverter.java @@ -4,11 +4,8 @@ import javax.xml.transform.Result; import javax.xml.transform.Source; public interface DetachedXmlConverter { - public void marshallRequest(DetachedRequest request, Result result); + public void marshallCommunication(DetachedCommunication detCom, + Result result); - public DetachedRequest unmarshallRequest(Source source); - - public void marshallAnswer(DetachedAnswer answer, Result result); - - public DetachedAnswer unmarshallAnswer(Source source); + public DetachedCommunication unmarshallCommunication(Source source); } diff --git a/org.argeo.slc.detached/src/main/java/org/argeo/slc/detached/DetachedXmlConverterCompat.java b/org.argeo.slc.detached/src/main/java/org/argeo/slc/detached/DetachedXmlConverterCompat.java index 1a361dfa1..7ad49fada 100644 --- a/org.argeo.slc.detached/src/main/java/org/argeo/slc/detached/DetachedXmlConverterCompat.java +++ b/org.argeo.slc.detached/src/main/java/org/argeo/slc/detached/DetachedXmlConverterCompat.java @@ -33,6 +33,61 @@ public class DetachedXmlConverterCompat implements DetachedXmlConverter { } } + public void marshallCommunication(DetachedCommunication detCom, + Result result) { + if (detCom instanceof DetachedRequest) { + marshallRequest((DetachedRequest) detCom, result); + } else if (detCom instanceof DetachedAnswer) { + marshallAnswer((DetachedAnswer) detCom, result); + } else { + throw new DetachedException("Unkown communication type " + + detCom.getClass()); + } + } + + public DetachedCommunication unmarshallCommunication(Source source) { + // Parse + DOMResult result = new DOMResult(); + try { + copy.transform(source, result); + } catch (TransformerException e) { + throw new DetachedException("Could not copy xml source", e); + } + Element root = (Element) ((Document) result.getNode()) + .getDocumentElement(); + + // Create objects + String requestType = root.getLocalName(); + if (requestType.equals("detached-request")) { + DetachedRequest request = new DetachedRequest(); + request.setUuid(root.getElementsByTagNameNS( + SLC_DETACHED_NAMESPACE_URI, "uuid").item(0) + .getTextContent()); + request + .setRef(root.getElementsByTagNameNS( + SLC_DETACHED_NAMESPACE_URI, "ref").item(0) + .getTextContent()); + request.setPath(root.getElementsByTagNameNS( + SLC_DETACHED_NAMESPACE_URI, "path").item(0) + .getTextContent()); + Element propertiesElement = (Element) root.getElementsByTagNameNS( + SLC_DETACHED_NAMESPACE_URI, "properties").item(0); + NodeList propElements = propertiesElement.getElementsByTagNameNS( + SLC_DETACHED_NAMESPACE_URI, "prop"); + Properties properties = new Properties(); + for (int i = 0; i < propElements.getLength(); i++) { + Element propElement = (Element) propElements.item(i); + String key = propElement.getAttribute("key"); + String value = propElement.getTextContent(); + properties.setProperty(key, value); + } + request.setProperties(properties); + return request; + } else { + throw new DetachedException(requestType + " not implemented."); + } + } + public void marshallAnswer(DetachedAnswer answer, Result result) { StringBuffer buf = new StringBuffer(""); buf.append(" 0) file = files[0]; else { @@ -91,18 +123,36 @@ public class FileDriver extends AbstractDriver implements DetachedClient, File lockFile = nameLockFile(file); while (lockFile.exists()) - // TODO: implements time out + // FIXME: implements time out Thread.sleep(100); - ObjectInputStream in = new ObjectInputStream(new FileInputStream(file)); - DetachedCommunication detCom = (DetachedCommunication) in.readObject(); - in.close(); - + // Read the file + final DetachedCommunication detCom; + if (FilenameUtils.getExtension(file.getName()).equals("xml")) { + if (getXmlConverter() == null) + throw new DetachedException("No XML converter defined."); + FileInputStream in = new FileInputStream(file); + try { + StreamSource source = new StreamSource(in); + detCom = getXmlConverter().unmarshallCommunication(source); + } finally { + IOUtils.closeQuietly(in); + } + } else { + ObjectInputStream in = new ObjectInputStream(new FileInputStream( + file)); + try { + detCom = (DetachedCommunication) in.readObject(); + } finally { + IOUtils.closeQuietly(in); + } + } // Move to processed dir - file.renameTo(new File(processedDir.getAbsolutePath() + File.separator - + file.getName())); + FileUtils.moveFileToDirectory(file, processedDir, false); + // file.renameTo(new File(processedDir.getAbsolutePath() + + // File.separator + // + file.getName())); return detCom; - } protected File createLockFile(File file) { @@ -116,7 +166,7 @@ public class FileDriver extends AbstractDriver implements DetachedClient, } protected File nameLockFile(File file) { - return new File(file.getAbsolutePath() + ".lck"); + return new File(file.getAbsolutePath() + "." + lockFileExt); } public void setBaseDir(File baseDir) { diff --git a/org.argeo.slc.detached/src/main/resources/META-INF/MANIFEST.MF b/org.argeo.slc.detached/src/main/resources/META-INF/MANIFEST.MF index 13b37eb50..2c4bd2d7d 100644 --- a/org.argeo.slc.detached/src/main/resources/META-INF/MANIFEST.MF +++ b/org.argeo.slc.detached/src/main/resources/META-INF/MANIFEST.MF @@ -4,10 +4,13 @@ Export-Package: org.argeo.slc.detached.admin;uses:="org.apache.commons ached.ui;uses:="org.argeo.slc.detached",org.argeo.slc.detached;uses:= "org.apache.commons.logging,org.springframework.context.support,org.s pringframework.core.io,org.springframework.context,org.springframewor - k.beans.factory.xml,org.argeo.slc.detached.drivers,org.springframewor - k.beans.factory.support,org.argeo.slc.detached.admin,org.osgi.framewo - rk,org.springframework.beans.factory",org.argeo.slc.detached.drivers; - uses:="org.apache.commons.logging,org.argeo.slc.detached,org.springfr + k.beans.factory.xml,javax.xml.transform.dom,org.argeo.slc.detached.dr + ivers,org.w3c.dom,org.springframework.beans.factory.support,org.argeo + .slc.detached.admin,javax.xml.transform,javax.xml.transform.stream,or + g.osgi.framework,org.apache.commons.io,org.springframework.beans.fact + ory",org.argeo.slc.detached.drivers;uses:="org.apache.commons.logging + ,org.apache.commons.io.filefilter,javax.xml.transform,javax.xml.trans + form.stream,org.apache.commons.io,org.argeo.slc.detached,org.springfr amework.beans.factory" Built-By: mbaudier Tool: Bnd-0.0.255 @@ -16,17 +19,21 @@ Created-By: Apache Maven Bundle Plugin Bundle-Vendor: Argeo Build-Jdk: 1.6.0 Bundle-Version: 0.11.1.SNAPSHOT -Bnd-LastModified: 1223022716810 +Bnd-LastModified: 1223214001545 Bundle-ManifestVersion: 2 Bundle-Activator: org.argeo.slc.detached.Activator Bundle-License: http://www.apache.org/licenses/LICENSE-2.0.txt Bundle-Description: SLC Distribution -Import-Package: org.apache.commons.logging,org.argeo.slc.detached,org. - argeo.slc.detached.admin,org.argeo.slc.detached.drivers,org.argeo.slc - .detached.ui,org.osgi.framework,org.springframework.beans.factory,org - .springframework.beans.factory.support,org.springframework.beans.fact - ory.xml,org.springframework.context,org.springframework.context.suppo - rt,org.springframework.core.io +Import-Package: javax.xml.transform,javax.xml.transform.dom,javax.xml. + transform.stream,org.apache.commons.io;version="1.4",org.apache.commo + ns.io.filefilter;version="1.4",org.apache.commons.logging,org.argeo.s + lc.detached,org.argeo.slc.detached.admin,org.argeo.slc.detached.drive + rs,org.argeo.slc.detached.ui,org.osgi.framework,org.springframework.b + eans.factory;version="2.0",org.springframework.beans.factory.support; + version="2.0",org.springframework.beans.factory.xml;version="2.0",org + .springframework.context;version="2.0",org.springframework.context.su + pport;version="2.0",org.springframework.core.io;version="2.0",org.w3c + .dom Bundle-SymbolicName: org.argeo.slc.detached Bundle-DocURL: http://www.argeo.org Originally-Created-By: Apache Maven Bundle Plugin diff --git a/org.argeo.slc.detached/src/main/resources/org/argeo/slc/detached/spring.xml b/org.argeo.slc.detached/src/main/resources/org/argeo/slc/detached/spring.xml index 3655d99a0..720240881 100644 --- a/org.argeo.slc.detached/src/main/resources/org/argeo/slc/detached/spring.xml +++ b/org.argeo.slc.detached/src/main/resources/org/argeo/slc/detached/spring.xml @@ -10,18 +10,8 @@ - + + + \ No newline at end of file -- 2.39.2