Author: tobr
Date: Mon Sep 10 15:18:24 2012
New Revision: 1382935

URL: http://svn.apache.org/viewvc?rev=1382935&view=rev
Log:
applied patch from DROIDS-119

Added:
    
incubator/droids/trunk/droids-core/src/main/java/org/apache/droids/handle/DefaultSaveContentHandlerStrategy.java
   (with props)
    
incubator/droids/trunk/droids-core/src/main/java/org/apache/droids/handle/SaveContentHandlerStrategy.java
   (with props)
Modified:
    
incubator/droids/trunk/droids-core/src/main/java/org/apache/droids/handle/SaveHandler.java
    
incubator/droids/trunk/droids-spring/src/test/resources/droids-core-test-context.xml

Added: 
incubator/droids/trunk/droids-core/src/main/java/org/apache/droids/handle/DefaultSaveContentHandlerStrategy.java
URL: 
http://svn.apache.org/viewvc/incubator/droids/trunk/droids-core/src/main/java/org/apache/droids/handle/DefaultSaveContentHandlerStrategy.java?rev=1382935&view=auto
==============================================================================
--- 
incubator/droids/trunk/droids-core/src/main/java/org/apache/droids/handle/DefaultSaveContentHandlerStrategy.java
 (added)
+++ 
incubator/droids/trunk/droids-core/src/main/java/org/apache/droids/handle/DefaultSaveContentHandlerStrategy.java
 Mon Sep 10 15:18:24 2012
@@ -0,0 +1,62 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.droids.handle;
+
+import org.apache.droids.api.ContentEntity;
+
+import java.net.URI;
+
+/**
+ * Implementation of the {@link SaveContentHandlerStrategy} that saves
+ * all data in a path associated with the {@link URI} for the content.
+ *
+ * @version 1.0
+ */
+public class DefaultSaveContentHandlerStrategy
+    implements SaveContentHandlerStrategy {
+
+    private String outputDir;
+    private boolean includeHost;
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public String calculateFilePath(URI uri, ContentEntity entity) {
+        String filePath = outputDir;
+        if (includeHost) {
+          filePath += uri.getHost() + uri.getPath();
+        } else {
+          filePath += uri.getPath().substring(1);
+        }
+        return filePath;
+    }
+
+    /**
+     * @param outputDir the output directory to set
+     */
+    public void setOutputDir(String outputDir) {
+        this.outputDir = outputDir;
+    }
+
+    /**
+     * @param includeHost if we want to include the host in the path
+     */
+    public void setIncludeHost(boolean includeHost) {
+        this.includeHost = includeHost;
+    }
+}
\ No newline at end of file

Propchange: 
incubator/droids/trunk/droids-core/src/main/java/org/apache/droids/handle/DefaultSaveContentHandlerStrategy.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
incubator/droids/trunk/droids-core/src/main/java/org/apache/droids/handle/DefaultSaveContentHandlerStrategy.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Propchange: 
incubator/droids/trunk/droids-core/src/main/java/org/apache/droids/handle/DefaultSaveContentHandlerStrategy.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: 
incubator/droids/trunk/droids-core/src/main/java/org/apache/droids/handle/SaveContentHandlerStrategy.java
URL: 
http://svn.apache.org/viewvc/incubator/droids/trunk/droids-core/src/main/java/org/apache/droids/handle/SaveContentHandlerStrategy.java?rev=1382935&view=auto
==============================================================================
--- 
incubator/droids/trunk/droids-core/src/main/java/org/apache/droids/handle/SaveContentHandlerStrategy.java
 (added)
+++ 
incubator/droids/trunk/droids-core/src/main/java/org/apache/droids/handle/SaveContentHandlerStrategy.java
 Mon Sep 10 15:18:24 2012
@@ -0,0 +1,37 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.droids.handle;
+
+import org.apache.droids.api.ContentEntity;
+
+import java.net.URI;
+
+/**
+ * A strategy for allowing {@link SaveHandler}s to better control where 
content is saved.
+ *
+ * @version 1.0
+ */
+public interface SaveContentHandlerStrategy {
+
+    /**
+     * Calculate the filepath to use for {@link URI} and {@link ContentEntity}.
+     * @param uri the uri
+     * @param entity the entity
+     * @return the filepath
+     */
+    String calculateFilePath(URI uri, ContentEntity entity);
+}
\ No newline at end of file

Propchange: 
incubator/droids/trunk/droids-core/src/main/java/org/apache/droids/handle/SaveContentHandlerStrategy.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
incubator/droids/trunk/droids-core/src/main/java/org/apache/droids/handle/SaveContentHandlerStrategy.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Propchange: 
incubator/droids/trunk/droids-core/src/main/java/org/apache/droids/handle/SaveContentHandlerStrategy.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: 
incubator/droids/trunk/droids-core/src/main/java/org/apache/droids/handle/SaveHandler.java
URL: 
http://svn.apache.org/viewvc/incubator/droids/trunk/droids-core/src/main/java/org/apache/droids/handle/SaveHandler.java?rev=1382935&r1=1382934&r2=1382935&view=diff
==============================================================================
--- 
incubator/droids/trunk/droids-core/src/main/java/org/apache/droids/handle/SaveHandler.java
 (original)
+++ 
incubator/droids/trunk/droids-core/src/main/java/org/apache/droids/handle/SaveHandler.java
 Mon Sep 10 15:18:24 2012
@@ -34,113 +34,114 @@ import org.slf4j.LoggerFactory;
 /**
  * Handler which is writing the stream to the file system.
  * <p>
- * Before using make sure you have set the export directory
- * {@link #setOutputDir(String outputDir)} and whether you want to use the host
- * as prefix {@link #setIncludeHost(boolean includeHost)}.
+ * Before using make sure you have set the {@link SaveContentHandlerStrategy}.
  * 
  * @version 1.0
  * 
  */
 public class SaveHandler extends WriterHandler implements Handler {
-  
-  private final Logger log = LoggerFactory.getLogger(SaveHandler.class);
 
-  private String outputDir;
+       private final Logger log = LoggerFactory.getLogger(SaveHandler.class);
 
-  private URI uri;
+       private URI uri;
 
-  private boolean includeHost;
+       private SaveContentHandlerStrategy saveContentHandlerStrategy;
 
-  public SaveHandler() {
-    super();
-  }
-
-  public void handle(URI uri, ContentEntity entity) throws IOException {
-    this.uri = uri;
-    InputStream instream = entity.obtainContent();
-    try {
-      writeOutput(instream);
-    } finally {
-      instream.close();
-    }
-  }
-
-  private void writeOutput(InputStream stream) throws IOException {
-    if (!uri.getPath().endsWith("/")) {
-      String filePath = calculateFilePath();
-      log.info("Trying to save " + uri + " to " + filePath);
-      File cache = new File(filePath);
-      FileUtil.createFile(cache);
-      
-      writeContentToFile(stream, cache);
-    }
-  }
-
-  private void writeContentToFile(InputStream stream, File cache) throws 
FileNotFoundException,
-      IOException {
-    OutputStream output = null;
-    final int bufferSize = 8192;
-    byte[] buffer = new byte[bufferSize];
-    int length = -1;
-    try {
-      output = new BufferedOutputStream(new FileOutputStream(cache));
-      while ((length = stream.read(buffer)) > -1) {
-        output.write(buffer, 0, length);
-      }
-    } finally {
-      if (null != output) {
-        output.flush();
-        output.close();
-      }
-    }
-  }
-  
-  protected String calculateFilePath() {
-    String filePath = outputDir;
-    if (includeHost) {
-      filePath += uri.getHost() + uri.getPath();
-    } else {
-      filePath += uri.getPath().substring(1);
-    }
-    return filePath;
-  }
-
-  /**
-   * Get the directory where we want to save the stream.
-   * 
-   * @return directory where we want to save the stream.
-   */
-  public String getOutputDir() {
-    return outputDir;
-  }
-
-  /**
-   * Set the directory where we want to save the stream.
-   * 
-   * @param outputDir
-   *          the directory where we want to save the stream.
-   */
-  public void setOutputDir(String outputDir) {
-    this.outputDir = outputDir;
-  }
-
-  /**
-   * Do we want to prefix the export dir with the host name.
-   * 
-   * @return true if we want to use the prefix; false otherwise
-   */
-  public boolean isIncludeHost() {
-    return includeHost;
-  }
-
-  /**
-   * Do we want to prefix the export dir with the host name.
-   * 
-   * @param includeHost
-   *          true if we want to use the prefix; false otherwise
-   */
-  public void setIncludeHost(boolean includeHost) {
-    this.includeHost = includeHost;
-  }
+       public SaveHandler() {
+               super();
+       }
+
+       /**
+        * Handle saving content.
+        * 
+        * @param uri
+        *            the uri we are currently processing
+        * @param entity
+        *            the entity to save
+        * 
+        * @throws IOException
+        *             on error
+        */
+       public void handle(URI uri, ContentEntity entity) throws IOException {
+               this.uri = uri;
+               InputStream instream = entity.obtainContent();
+               String path = saveContentHandlerStrategy.calculateFilePath(uri, 
entity);
+               try {
+                       writeOutput(path, instream);
+               } finally {
+                       instream.close();
+               }
+       }
+
+       /**
+        * Write the output.
+        * 
+        * @param path
+        *            the path to write to
+        * @param stream
+        *            the stream
+        * @throws IOException
+        *             on error
+        */
+       private void writeOutput(String path, InputStream stream)
+                       throws IOException {
+               if (!uri.getPath().endsWith("/")) {
+                       log.info("Trying to save " + uri + " to " + path);
+                       File cache = new File(path);
+                       FileUtil.createFile(cache);
+
+                       writeContentToFile(stream, cache);
+               }
+       }
+
+       /**
+        * Write contents to a file.
+        * 
+        * @param stream
+        *            the stream
+        * @param cache
+        *            the file
+        * @throws FileNotFoundException
+        *             on file not found
+        * @throws IOException
+        *             on error
+        */
+       private void writeContentToFile(InputStream stream, File cache)
+                       throws FileNotFoundException, IOException {
+               OutputStream output = null;
+               final int bufferSize = 8192;
+               byte[] buffer = new byte[bufferSize];
+               int length = -1;
+               try {
+                       output = new BufferedOutputStream(new 
FileOutputStream(cache));
+                       while ((length = stream.read(buffer)) > -1) {
+                               output.write(buffer, 0, length);
+                       }
+               } finally {
+                       if (null != output) {
+                               output.flush();
+                               output.close();
+                       }
+               }
+       }
+
+       /**
+        * 
+        * @return the {@link SaveContentHandlerStrategy}.
+        * 
+        */
+       public SaveContentHandlerStrategy getSaveContentHandlerStrategy() {
+               return saveContentHandlerStrategy;
+       }
+
+       /**
+        * 
+        * @param saveContentHandlerStrategy
+        *            the {@link SaveContentHandlerStrategy} to set.
+        */
+       public void setSaveContentHandlerStrategy(
+                       SaveContentHandlerStrategy saveContentHandlerStrategy) {
+               this.saveContentHandlerStrategy = saveContentHandlerStrategy;
+       }
 
 }

Modified: 
incubator/droids/trunk/droids-spring/src/test/resources/droids-core-test-context.xml
URL: 
http://svn.apache.org/viewvc/incubator/droids/trunk/droids-spring/src/test/resources/droids-core-test-context.xml?rev=1382935&r1=1382934&r2=1382935&view=diff
==============================================================================
--- 
incubator/droids/trunk/droids-spring/src/test/resources/droids-core-test-context.xml
 (original)
+++ 
incubator/droids/trunk/droids-spring/src/test/resources/droids-core-test-context.xml
 Mon Sep 10 15:18:24 2012
@@ -100,9 +100,16 @@
   <bean 
     name="org.apache.droids.api.Handler/org.apache.droids.handle.SaveHandler"
     class="org.apache.droids.handle.SaveHandler">
-    <property name="outputDir" value="${droids.handler.save.dir}"/>
-    <property name="includeHost" value="${droids.handler.save.includeHost}"/>
+    <property name="saveContentHandlerStrategy" 
+    
ref="org.apache.droids.api.Handler/org.apache.droids.handle.DefaultSaveContentHandlerStrategy"
 />
   </bean>
+  <bean
+    
name="org.apache.droids.api.Handler/org.apache.droids.handle.DefaultSaveContentHandlerStrategy"
+    class="org.apache.droids.handle.DefaultSaveContentHandlerStrategy">
+      <property name="includeHost" value="true" />
+      <property name="outputDir" value="tmp/" />
+  </bean>
+
   
   <bean 
     name="org.apache.droids.delay.SimpleDelayTimer"


Reply via email to