// Path: src/main/java/org/yy/mongodb/orm/engine/Config.java
// public interface Config extends Serializable {
// }
// 
// Path: src/main/java/org/yy/mongodb/orm/engine/entry/NodeEntry.java
// public class NodeEntry implements Serializable {
// 
//   private static final long serialVersionUID = -6974784211299835940L;
// 
//   /**
//    * Mapping id.
//    */
//   private String mappingId;
// 
//   /**
//    * Node parameter class type.
//    */
//   private Class<?> clazz;
// 
//   /**
//    * Node elements mapping entry.
//    */
//   private List<Entry> nodeMappings;
//   
//   /**
//    * Getting data into, and out of a mapped statement.
//    */
//   private TypeHandler<?> typeHandler;
//   
//   /**
//    * Mql node executor
//    */
//   private MqlExecutor<?> executor;
//   
//   public Object executorNode(String namespace, MqlMapConfiguration configuration, Object target) {
//     return executor.parser(namespace, configuration, this, target);
//   }
//   
//   public String getMappingId() {
//     return mappingId;
//   }
// 
//   public void setMappingId(String mappingId) {
//     this.mappingId = mappingId;
//   }
// 
//   public Class<?> getClazz() {
//     return clazz;
//   }
// 
//   public void setClazz(Class<?> clazz) {
//     this.clazz = clazz;
//   }
// 
//   public List<Entry> getNodeMappings() {
//     return nodeMappings;
//   }
// 
//   public void setNodeMappings(List<Entry> nodeMappings) {
//     this.nodeMappings = nodeMappings;
//   }
// 
//   public TypeHandler<?> getTypeHandler() {
//     return typeHandler;
//   }
// 
//   public void setTypeHandler(TypeHandler<?> typeHandler) {
//     this.typeHandler = typeHandler;
//   }
// 
//   public void setExecutor(MqlExecutor<?> executor) {
//     this.executor = executor;
//   }
// 
// }
// 
// Path: src/main/java/org/yy/mongodb/orm/engine/entry/Script.java
// public class Script {
// 
//   /**
//    * Mql script text source.
//    */
//   private String text;
// 
//   /**
//    * Getting data into, and out of a mapped statement.
//    */
//   private Analyer analyer;
// 
//   public Script(String text, Class<?> clazz) {
//     this.text = text;
//     if(clazz != null) {
//       this.analyer = AnalyerHelper.getAnalyer(clazz);
//     }
//   }
// 
//   public String getText() {
//     return text;
//   }
//   
//   public String getValue(String target, Object value) {
//     if(analyer == null) {
//       analyer = AnalyerHelper.getAnalyer(value.getClass());
//     }
//     return String.valueOf(analyer.getValue(target, value));
//   }
// 
//   static interface Analyer {
//     Object getValue(String target, Object value);
//   }
//   
//   static class CustomAnalyer implements Analyer {
//     @Override
//     public Object getValue(String target, Object value) {
//       try {
//         return BeanUtils.getProperty(value, target);
//       } catch (Exception e) {
//         throw new MongoORMException("No property '"+target+"'found. Class '"+value.getClass()+"'.", e);
//       }
//     }
//   }
//   
//   @SuppressWarnings("rawtypes")
//   static class MapAnalyer implements Analyer {
//     @Override
//     public Object getValue(String target, Object value) {
//       return ((Map)value).get(target);
//     }
//   }
//   
//   static class ValueAnalyer implements Analyer {
//     @Override
//     public Object getValue(String target, Object value) {
//       return value;
//     }
//   }
//   
//   private static class AnalyerHelper {
//     
//     static Analyer mapAnalyer = new MapAnalyer();
//     static Analyer customAnalyer = new CustomAnalyer();
//     static Analyer valueAnalyer = new ValueAnalyer();
//     
//     static List<Object> valueClass = Arrays.asList(String.class, Integer.class, int.class, Short.class, short.class, Long.class, long.class
//         ,Boolean.class, boolean.class, Double.class, double.class, Float.class, float.class, Byte.class, byte.class, Character.class, char.class);
//     
//     public static Analyer getAnalyer(Class<?> clazz) {
//       if(clazz.equals(Map.class)) {
//         return mapAnalyer;
//       }
//       if(valueClass.contains(clazz)) {
//         return valueAnalyer;
//       }
//       return customAnalyer;
//     }
//   }
// }


import org.yy.mongodb.orm.engine.Config;
import org.yy.mongodb.orm.engine.entry.NodeEntry;
import org.yy.mongodb.orm.engine.entry.Script;

package org.yy.mongodb.orm.engine.config;


/**
 * XML MapReduce config
 * @author yy
 */
public class MapReduceConfig implements Config {

  private static final long serialVersionUID = 1289646863161628083L;
  
  /**
   * ORM config namespace.
   */
  private String namespace;
  
  /**
   * ORM mapreduce config id.
   */
  private String id;
  
  /**
   * Mongo db collection.
   */
  private String collection;
  
  /**
   * MapReduce map.
   */
  private Script map;
  
  /**
   * MapReduce reduce.
   */
  private Script reduce;
  
  /**
   * MapReduce return field.
   */
  private NodeEntry field;
  

// Path: src/main/java/org/yy/mongodb/orm/engine/Config.java
// public interface Config extends Serializable {
// }
// 
// Path: src/main/java/org/yy/mongodb/orm/engine/entry/NodeEntry.java
// public class NodeEntry implements Serializable {
// 
//   private static final long serialVersionUID = -6974784211299835940L;
// 
//   /**
//    * Mapping id.
//    */
//   private String mappingId;
// 
//   /**
//    * Node parameter class type.
//    */
//   private Class<?> clazz;
// 
//   /**
//    * Node elements mapping entry.
//    */
//   private List<Entry> nodeMappings;
//   
//   /**
//    * Getting data into, and out of a mapped statement.
//    */
//   private TypeHandler<?> typeHandler;
//   
//   /**
//    * Mql node executor
//    */
//   private MqlExecutor<?> executor;
//   
//   public Object executorNode(String namespace, MqlMapConfiguration configuration, Object target) {
//     return executor.parser(namespace, configuration, this, target);
//   }
//   
//   public String getMappingId() {
//     return mappingId;
//   }
// 
//   public void setMappingId(String mappingId) {
//     this.mappingId = mappingId;
//   }
// 
//   public Class<?> getClazz() {
//     return clazz;
//   }
// 
//   public void setClazz(Class<?> clazz) {
//     this.clazz = clazz;
//   }
// 
//   public List<Entry> getNodeMappings() {
//     return nodeMappings;
//   }
// 
//   public void setNodeMappings(List<Entry> nodeMappings) {
//     this.nodeMappings = nodeMappings;
//   }
// 
//   public TypeHandler<?> getTypeHandler() {
//     return typeHandler;
//   }
// 
//   public void setTypeHandler(TypeHandler<?> typeHandler) {
//     this.typeHandler = typeHandler;
//   }
// 
//   public void setExecutor(MqlExecutor<?> executor) {
//     this.executor = executor;
//   }
// 
// }
// 
// Path: src/main/java/org/yy/mongodb/orm/engine/entry/Script.java
// public class Script {
// 
//   /**
//    * Mql script text source.
//    */
//   private String text;
// 
//   /**
//    * Getting data into, and out of a mapped statement.
//    */
//   private Analyer analyer;
// 
//   public Script(String text, Class<?> clazz) {
//     this.text = text;
//     if(clazz != null) {
//       this.analyer = AnalyerHelper.getAnalyer(clazz);
//     }
//   }
// 
//   public String getText() {
//     return text;
//   }
//   
//   public String getValue(String target, Object value) {
//     if(analyer == null) {
//       analyer = AnalyerHelper.getAnalyer(value.getClass());
//     }
//     return String.valueOf(analyer.getValue(target, value));
//   }
// 
//   static interface Analyer {
//     Object getValue(String target, Object value);
//   }
//   
//   static class CustomAnalyer implements Analyer {
//     @Override
//     public Object getValue(String target, Object value) {
//       try {
//         return BeanUtils.getProperty(value, target);
//       } catch (Exception e) {
//         throw new MongoORMException("No property '"+target+"'found. Class '"+value.getClass()+"'.", e);
//       }
//     }
//   }
//   
//   @SuppressWarnings("rawtypes")
//   static class MapAnalyer implements Analyer {
//     @Override
//     public Object getValue(String target, Object value) {
//       return ((Map)value).get(target);
//     }
//   }
//   
//   static class ValueAnalyer implements Analyer {
//     @Override
//     public Object getValue(String target, Object value) {
//       return value;
//     }
//   }
//   
//   private static class AnalyerHelper {
//     
//     static Analyer mapAnalyer = new MapAnalyer();
//     static Analyer customAnalyer = new CustomAnalyer();
//     static Analyer valueAnalyer = new ValueAnalyer();
//     
//     static List<Object> valueClass = Arrays.asList(String.class, Integer.class, int.class, Short.class, short.class, Long.class, long.class
//         ,Boolean.class, boolean.class, Double.class, double.class, Float.class, float.class, Byte.class, byte.class, Character.class, char.class);
//     
//     public static Analyer getAnalyer(Class<?> clazz) {
//       if(clazz.equals(Map.class)) {
//         return mapAnalyer;
//       }
//       if(valueClass.contains(clazz)) {
//         return valueAnalyer;
//       }
//       return customAnalyer;
//     }
//   }
// }


// Path: src/main/java/org/yy/mongodb/orm/engine/config/MapReduceConfig.java
import org.yy.mongodb.orm.engine.Config;
import org.yy.mongodb.orm.engine.entry.NodeEntry;
import org.yy.mongodb.orm.engine.entry.Script;

package org.yy.mongodb.orm.engine.config;


/**
 * XML MapReduce config
 * @author yy
 */
public class MapReduceConfig implements Config {

  private static final long serialVersionUID = 1289646863161628083L;
  
  /**
   * ORM config namespace.
   */
  private String namespace;
  
  /**
   * ORM mapreduce config id.
   */
  private String id;
  
  /**
   * Mongo db collection.
   */
  private String collection;
  
  /**
   * MapReduce map.
   */
  private Script map;
  
  /**
   * MapReduce reduce.
   */
  private Script reduce;
  
  /**
   * MapReduce return field.
   */
  private NodeEntry field;
  

  public MapReduceConfig(String namespace, String id, String collection) {
