]> git.argeo.org Git - gpl/argeo-slc.git/blobdiff - org.argeo.slc.detached/src/main/java/org/argeo/slc/detached/drivers/FileDriver.java
Remove moved projects
[gpl/argeo-slc.git] / org.argeo.slc.detached / src / main / java / org / argeo / slc / detached / drivers / FileDriver.java
diff --git a/org.argeo.slc.detached/src/main/java/org/argeo/slc/detached/drivers/FileDriver.java b/org.argeo.slc.detached/src/main/java/org/argeo/slc/detached/drivers/FileDriver.java
deleted file mode 100644 (file)
index ce88f5b..0000000
+++ /dev/null
@@ -1,243 +0,0 @@
-package org.argeo.slc.detached.drivers;
-
-import java.io.File;
-import java.io.FileFilter;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutputStream;
-import java.text.SimpleDateFormat;
-import java.util.Date;
-
-import javax.xml.transform.stream.StreamResult;
-import javax.xml.transform.stream.StreamSource;
-
-import org.apache.commons.io.FileUtils;
-import org.apache.commons.io.FilenameUtils;
-import org.apache.commons.io.IOUtils;
-import org.apache.commons.io.filefilter.NotFileFilter;
-import org.apache.commons.io.filefilter.SuffixFileFilter;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.argeo.slc.detached.DetachedAnswer;
-import org.argeo.slc.detached.DetachedClient;
-import org.argeo.slc.detached.DetachedCommunication;
-import org.argeo.slc.detached.DetachedException;
-import org.argeo.slc.detached.DetachedRequest;
-import org.springframework.beans.factory.InitializingBean;
-
-public class FileDriver extends AbstractDriver implements DetachedClient,
-               InitializingBean {
-       private final static Log log = LogFactory.getLog(FileDriver.class);
-       private final static SimpleDateFormat sdf = new SimpleDateFormat(
-                       "yyMMdd_HHmmss_SSS");
-
-       private File baseDir;
-       private File requestsDir;
-       private File answersDir;
-       private File processedRequestsDir;
-       private File processedAnswersDir;
-       private File cleanedRequestsDir;
-       private File cleanedAnswersDir;
-
-       private String lockFileExt = "lck";
-       private FileFilter notLockFileFilter = new NotFileFilter(
-                       new SuffixFileFilter("." + lockFileExt));
-
-       public synchronized DetachedRequest receiveRequest() throws Exception {
-               DetachedRequest request = (DetachedRequest) receiveFile(requestsDir,
-                               processedRequestsDir, 0);
-               if (request != null)
-                       if (log.isTraceEnabled())
-                               log.trace("Received detached request #" + request.getUuid()
-                                               + " for ref '" + request.getRef() + "', path="
-                                               + request.getPath());
-               return request;
-       }
-
-       public void sendAnswer(DetachedAnswer answer) throws Exception {
-               sendFile(answersDir, answer);
-               if (log.isTraceEnabled())
-                       log.trace("Sent     detached answer  #" + answer.getUuid());
-       }
-
-       public DetachedAnswer receiveAnswer() throws Exception {
-               DetachedAnswer answer = (DetachedAnswer) receiveFile(answersDir,
-                               processedAnswersDir, getReceiveAnswerTimeout());
-               if (answer != null)
-                       if (log.isTraceEnabled())
-                               log.trace("Received detached answer  #" + answer.getUuid());
-               return answer;
-       }
-
-       public void sendRequest(DetachedRequest request) throws Exception {
-               sendFile(requestsDir, request);
-               if (log.isTraceEnabled())
-                       log.trace("Sent     detached request #" + request.getUuid()
-                                       + " for ref '" + request.getRef() + "', path="
-                                       + request.getPath());
-       }
-
-       protected void sendFile(File dir, DetachedCommunication detCom)
-                       throws Exception {
-               final File file;
-               if (getXmlConverter() != null)
-                       file = new File(dir.getPath() + File.separator
-                                       + sdf.format(new Date()) + '-' + detCom.getUuid() + ".xml");
-               else
-                       file = new File(dir.getPath() + File.separator + detCom.getUuid());
-
-               File lockFile = createLockFile(file);
-               if (getXmlConverter() != null) {
-                       FileOutputStream outFile = new FileOutputStream(file);
-                       try {
-                               StreamResult result = new StreamResult(outFile);
-                               getXmlConverter().marshallCommunication(detCom, result);
-                       } finally {
-                               IOUtils.closeQuietly(outFile);
-                       }
-               } else {
-                       ObjectOutputStream out = new ObjectOutputStream(
-                                       new FileOutputStream(file));
-                       try {
-                               out.writeObject(detCom);
-                       } finally {
-                               IOUtils.closeQuietly(out);
-                       }
-               }
-               lockFile.delete();
-       }
-
-       /**
-        * @param timeout
-        *            in ms, 0 is no timeout
-        */
-       protected synchronized DetachedCommunication receiveFile(File dir,
-                       File processedDir, long timeout) throws Exception {
-               long begin = System.currentTimeMillis();
-               File file = null;
-               while (file == null && isActive()) {
-                       if (!dir.exists())
-                               throw new DetachedException("Dir " + dir + " does not exist.");
-
-                       File[] files = dir.listFiles(notLockFileFilter);
-                       if (files.length > 0)
-                               file = files[0];
-                       else {
-                               try {
-                                       wait(100);
-                               } catch (InterruptedException e) {
-                                       // silent
-                               }
-                       }
-
-                       long duration = System.currentTimeMillis() - begin;
-                       if (timeout != 0 && duration > timeout) {
-                               throw new DetachedException("Receive file timed out after "
-                                               + duration + "ms.");
-                       }
-               }
-
-               if (!isActive())
-                       return null;
-
-               File lockFile = nameLockFile(file);
-               while (lockFile.exists())
-                       // FIXME: implements time out
-                       Thread.sleep(100);
-
-               // 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
-               FileUtils.moveFileToDirectory(file, processedDir, false);
-               return detCom;
-       }
-
-       protected File createLockFile(File file) {
-               File lockFile = nameLockFile(file);
-               try {
-                       lockFile.createNewFile();
-               } catch (IOException e) {
-                       throw new DetachedException("Cannot create lock file " + lockFile);
-               }
-               return lockFile;
-       }
-
-       protected File nameLockFile(File file) {
-               return new File(file.getAbsolutePath() + "." + lockFileExt);
-       }
-
-       public void setBaseDir(File baseDir) {
-               this.baseDir = baseDir;
-       }
-
-       private void createIfNotExist(File dir) {
-               if (!dir.exists()) {
-                       log.warn("Dir " + dir.getAbsolutePath()
-                                       + " does not exist. Creating it...");
-                       dir.mkdirs();
-               }
-       }
-
-       public void afterPropertiesSet() throws Exception {
-               this.requestsDir = new File(baseDir.getAbsolutePath() + File.separator
-                               + "requests");
-               this.answersDir = new File(baseDir.getAbsolutePath() + File.separator
-                               + "answers");
-               this.processedRequestsDir = new File(baseDir.getAbsolutePath()
-                               + File.separator + "processed" + File.separator + "requests");
-               this.processedAnswersDir = new File(baseDir.getAbsolutePath()
-                               + File.separator + "processed" + File.separator + "answers");
-               this.cleanedRequestsDir = new File(baseDir.getAbsolutePath()
-                               + File.separator + "cleaned" + File.separator + "requests");
-               this.cleanedAnswersDir = new File(baseDir.getAbsolutePath()
-                               + File.separator + "cleaned" + File.separator + "answers");
-
-               createIfNotExist(requestsDir);
-               createIfNotExist(answersDir);
-               createIfNotExist(processedRequestsDir);
-               createIfNotExist(processedAnswersDir);
-               createIfNotExist(cleanedRequestsDir);
-               createIfNotExist(cleanedAnswersDir);
-               log.info("Detached File Driver initialized on " + baseDir);
-       }
-
-       public void cleanPreviousRuns() throws Exception {
-
-               // Clean requests and answers from previous builds
-               File[] remainingRequests = requestsDir.listFiles();
-               for (int i = 0; i < remainingRequests.length; i++) {
-                       FileUtils.moveFileToDirectory(remainingRequests[i],
-                                       cleanedRequestsDir, false);
-               }
-
-               File[] remainingAnswers = answersDir.listFiles();
-               for (int i = 0; i < remainingAnswers.length; i++) {
-                       FileUtils.moveFileToDirectory(remainingAnswers[i],
-                                       cleanedAnswersDir, false);
-               }
-               log.info("Clean previous runs of File Driver on " + baseDir);
-
-       }
-
-}