// Path: webcrawler-downloader/src/main/java/com/zongtui/webcrawler/sourceer/ResultItems.java
// public class ResultItems {
// 
//     private Map<String, Object> fields = new LinkedHashMap<String, Object>();
// 
//     private Request request;
// 
//     private boolean skip;
// 
//     public <T> T get(String key) {
//         Object o = fields.get(key);
//         if (o == null) {
//             return null;
//         }
//         return (T) fields.get(key);
//     }
// 
//     public Map<String, Object> getAll() {
//         return fields;
//     }
// 
//     public <T> ResultItems put(String key, T value) {
//         fields.put(key, value);
//         return this;
//     }
// 
//     public Request getRequest() {
//         return request;
//     }
// 
//     public ResultItems setRequest(Request request) {
//         this.request = request;
//         return this;
//     }
// 
//     /**
//      * Whether to skip the result.<br>
//      * Result which is skipped will not be processed by Pipeline.
//      *
//      * @return whether to skip the result
//      */
//     public boolean isSkip() {
//         return skip;
//     }
// 
// 
//     /**
//      * Set whether to skip the result.<br>
//      * Result which is skipped will not be processed by Pipeline.
//      *
//      * @param skip whether to skip the result
//      * @return this
//      */
//     public ResultItems setSkip(boolean skip) {
//         this.skip = skip;
//         return this;
//     }
// 
//     @Override
//     public String toString() {
//         return "ResultItems{" +
//                 "fields=" + fields +
//                 ", request=" + request +
//                 ", skip=" + skip +
//                 '}';
//     }
// }
// 
// Path: webcrawler-downloader/src/main/java/com/zongtui/webcrawler/sourceer/Task.java
// public interface Task {
// 
//     /**
//      * unique id for a task.
//      *
//      * @return uuid
//      */
//     public String getUUID();
// 
//     /**
//      * site of a task
//      *
//      * @return site
//      */
//     public Site getSite();
// 
// }
// 
// Path: webcrawler-downloader/src/main/java/com/zongtui/webcrawler/sourceer/utils/FilePersistentBase.java
// public class FilePersistentBase {
// 
//     protected String path;
// 
//     public static String PATH_SEPERATOR = "/";
// 
//     static {
//         String property = System.getProperties().getProperty("file.separator");
//         if (property != null) {
//             PATH_SEPERATOR = property;
//         }
//     }
// 
//     public void setPath(String path) {
//         if (!path.endsWith(PATH_SEPERATOR)) {
//             path += PATH_SEPERATOR;
//         }
//         this.path = path;
//     }
// 
//     public File getFile(String fullName) {
//         checkAndMakeParentDirecotry(fullName);
//         return new File(fullName);
//     }
// 
//     public void checkAndMakeParentDirecotry(String fullName) {
//         int index = fullName.lastIndexOf(PATH_SEPERATOR);
//         if (index > 0) {
//             String path = fullName.substring(0, index);
//             File file = new File(path);
//             if (!file.exists()) {
//                 file.mkdirs();
//             }
//         }
//     }
// 
//     public String getPath() {
//         return path;
//     }
// }


import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.util.Map;
import org.apache.commons.codec.digest.DigestUtils;
import org.apache.http.annotation.ThreadSafe;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.zongtui.webcrawler.sourceer.ResultItems;
import com.zongtui.webcrawler.sourceer.Task;
import com.zongtui.webcrawler.sourceer.utils.FilePersistentBase;

package com.zongtui.webcrawler.sourceer.pipeline;




/**
 * Store results in files.<br>
 *
 * @author code4crafter@gmail.com <br>
 * @since 0.1.0
 */
@ThreadSafe
public class FilePipeline extends FilePersistentBase implements Pipeline {

    private Logger logger = LoggerFactory.getLogger(getClass());

    /**
     * create a FilePipeline with default path"/data/webmagic/"
     */
    public FilePipeline() {
        setPath("/data/webmagic/");
    }

    public FilePipeline(String path) {
        setPath(path);
    }

    @Override

// Path: webcrawler-downloader/src/main/java/com/zongtui/webcrawler/sourceer/ResultItems.java
// public class ResultItems {
// 
//     private Map<String, Object> fields = new LinkedHashMap<String, Object>();
// 
//     private Request request;
// 
//     private boolean skip;
// 
//     public <T> T get(String key) {
//         Object o = fields.get(key);
//         if (o == null) {
//             return null;
//         }
//         return (T) fields.get(key);
//     }
// 
//     public Map<String, Object> getAll() {
//         return fields;
//     }
// 
//     public <T> ResultItems put(String key, T value) {
//         fields.put(key, value);
//         return this;
//     }
// 
//     public Request getRequest() {
//         return request;
//     }
// 
//     public ResultItems setRequest(Request request) {
//         this.request = request;
//         return this;
//     }
// 
//     /**
//      * Whether to skip the result.<br>
//      * Result which is skipped will not be processed by Pipeline.
//      *
//      * @return whether to skip the result
//      */
//     public boolean isSkip() {
//         return skip;
//     }
// 
// 
//     /**
//      * Set whether to skip the result.<br>
//      * Result which is skipped will not be processed by Pipeline.
//      *
//      * @param skip whether to skip the result
//      * @return this
//      */
//     public ResultItems setSkip(boolean skip) {
//         this.skip = skip;
//         return this;
//     }
// 
//     @Override
//     public String toString() {
//         return "ResultItems{" +
//                 "fields=" + fields +
//                 ", request=" + request +
//                 ", skip=" + skip +
//                 '}';
//     }
// }
// 
// Path: webcrawler-downloader/src/main/java/com/zongtui/webcrawler/sourceer/Task.java
// public interface Task {
// 
//     /**
//      * unique id for a task.
//      *
//      * @return uuid
//      */
//     public String getUUID();
// 
//     /**
//      * site of a task
//      *
//      * @return site
//      */
//     public Site getSite();
// 
// }
// 
// Path: webcrawler-downloader/src/main/java/com/zongtui/webcrawler/sourceer/utils/FilePersistentBase.java
// public class FilePersistentBase {
// 
//     protected String path;
// 
//     public static String PATH_SEPERATOR = "/";
// 
//     static {
//         String property = System.getProperties().getProperty("file.separator");
//         if (property != null) {
//             PATH_SEPERATOR = property;
//         }
//     }
// 
//     public void setPath(String path) {
//         if (!path.endsWith(PATH_SEPERATOR)) {
//             path += PATH_SEPERATOR;
//         }
//         this.path = path;
//     }
// 
//     public File getFile(String fullName) {
//         checkAndMakeParentDirecotry(fullName);
//         return new File(fullName);
//     }
// 
//     public void checkAndMakeParentDirecotry(String fullName) {
//         int index = fullName.lastIndexOf(PATH_SEPERATOR);
//         if (index > 0) {
//             String path = fullName.substring(0, index);
//             File file = new File(path);
//             if (!file.exists()) {
//                 file.mkdirs();
//             }
//         }
//     }
// 
//     public String getPath() {
//         return path;
//     }
// }


// Path: webcrawler-downloader/src/main/java/com/zongtui/webcrawler/sourceer/pipeline/FilePipeline.java
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.util.Map;
import org.apache.commons.codec.digest.DigestUtils;
import org.apache.http.annotation.ThreadSafe;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.zongtui.webcrawler.sourceer.ResultItems;
import com.zongtui.webcrawler.sourceer.Task;
import com.zongtui.webcrawler.sourceer.utils.FilePersistentBase;

package com.zongtui.webcrawler.sourceer.pipeline;




/**
 * Store results in files.<br>
 *
 * @author code4crafter@gmail.com <br>
 * @since 0.1.0
 */
@ThreadSafe
public class FilePipeline extends FilePersistentBase implements Pipeline {

    private Logger logger = LoggerFactory.getLogger(getClass());

    /**
     * create a FilePipeline with default path"/data/webmagic/"
     */
    public FilePipeline() {
        setPath("/data/webmagic/");
    }

    public FilePipeline(String path) {
        setPath(path);
    }

    @Override

    public void process(ResultItems resultItems, Task task) {
