Package org.maltparserx.core.flow

Source Code of org.maltparserx.core.flow.FlowChartInstance

package org.maltparserx.core.flow;

import java.util.HashMap;
import java.util.LinkedHashSet;

import org.maltparserx.core.exception.MaltChainedException;
import org.maltparserx.core.flow.item.ChartItem;
import org.maltparserx.core.flow.spec.ChartItemSpecification;
import org.maltparserx.core.flow.spec.ChartSpecification;

/**
*
*
* @author Johan Hall
*/
public class FlowChartInstance {
  private FlowChartManager flowChartManager;
  private int optionContainerIndex;
  private String name;
  private ChartSpecification chartSpecification;
  private final LinkedHashSet<ChartItem> preProcessChartItems;
  private final LinkedHashSet<ChartItem> processChartItems;
  private final LinkedHashSet<ChartItem> postProcessChartItems;
 
//  private SymbolTableHandler symbolTables;
//  private DataFormatManager dataFormatManager;
//  private final HashMap<String,DataFormatInstance> dataFormatInstances;
  private final HashMap<String,Object> flowChartRegistry;
  private final HashMap<String,Object> engineRegistry;
  private final StringBuilder flowChartRegistryKey;

 
  public FlowChartInstance(int optionContainerIndex, ChartSpecification chartSpecification, FlowChartManager flowChartManager) throws MaltChainedException {
    setFlowChartManager(flowChartManager);
    setOptionContainerIndex(optionContainerIndex);
    setChartSpecification(chartSpecification);

    flowChartRegistry = new HashMap<String,Object>();
    engineRegistry = new HashMap<String,Object>();
    flowChartRegistryKey = new StringBuilder();
//    dataFormatInstances = new HashMap<String, DataFormatInstance>(3);
//   
//    String inputFormatName = OptionManager.instance().getOptionValue(0, "input", "format").toString();
//    String outputFormatName = OptionManager.instance().getOptionValue(0, "output", "format").toString();
//    SystemLogger.logger().info(inputFormatName + "\n");
//    SystemLogger.logger().info(outputFormatName + "\n");
////    featureModelFileName = configDir.copyToConfig(Util.findURLinJars(featureModelFileName));
//    dataFormatManager = new DataFormatManager(inputFormatName, outputFormatName);
//    symbolTables = new TrieSymbolTableHandler();

    preProcessChartItems = new LinkedHashSet<ChartItem>();
    for (ChartItemSpecification chartItemSpecification : chartSpecification.getPreProcessChartItemSpecifications()) {
      preProcessChartItems.add(initChartItem(chartItemSpecification));
    }
    processChartItems = new LinkedHashSet<ChartItem>();
    for (ChartItemSpecification chartItemSpecification : chartSpecification.getProcessChartItemSpecifications()) {
      processChartItems.add(initChartItem(chartItemSpecification));
    }
   
    postProcessChartItems = new LinkedHashSet<ChartItem>();
    for (ChartItemSpecification chartItemSpecification : chartSpecification.getPostProcessChartItemSpecifications()) {
      postProcessChartItems.add(initChartItem(chartItemSpecification));
    }
   

  }
 
  protected ChartItem initChartItem(ChartItemSpecification chartItemSpecification) throws MaltChainedException {
    ChartItem chartItem = null;
    try {
      chartItem = chartItemSpecification.getChartItemClass().newInstance();
      chartItem.initialize(this, chartItemSpecification);
    } catch (InstantiationException e) {
      throw new FlowException("The chart item '"+chartItemSpecification.getChartItemName()+"' could not be created. ", e);
    } catch (IllegalAccessException e) {
      throw new FlowException("The chart item '"+chartItemSpecification.getChartItemName()+"' could not be created. ", e);
    }
    return chartItem;
  }
 
//  public SymbolTableHandler getSymbolTables() {
//    return symbolTables;
//  }
//
//  public void setSymbolTables(SymbolTableHandler symbolTables) {
//    this.symbolTables = symbolTables;
//  }
//
//  public DataFormatManager getDataFormatManager() {
//    return dataFormatManager;
//  }
//
//  public void setDataFormatManager(DataFormatManager dataFormatManager) {
//    this.dataFormatManager = dataFormatManager;
//  }
 
  private void setFlowChartRegistryKey(Class<?> entryClass, String identifier) {
    flowChartRegistryKey.setLength(0);
    flowChartRegistryKey.append(identifier.toString());
    flowChartRegistryKey.append(entryClass.toString());
  }
 
  public void addFlowChartRegistry(Class<?> entryClass, String identifier, Object entry) {
    setFlowChartRegistryKey(entryClass, identifier);
    flowChartRegistry.put(flowChartRegistryKey.toString(), entry);
  }
 
  public void removeFlowChartRegistry(Class<?> entryClass, String identifier) {
    setFlowChartRegistryKey(entryClass, identifier);
    flowChartRegistry.remove(flowChartRegistryKey.toString());
  }
 
  public Object getFlowChartRegistry(Class<?> entryClass, String identifier) {
    setFlowChartRegistryKey(entryClass, identifier);
    return flowChartRegistry.get(flowChartRegistryKey.toString());
  }

  public void setEngineRegistry(String key, Object value) {
    engineRegistry.put(key, value);
  }
 
  public Object getEngineRegistry(String key) {
    return engineRegistry.get(key);
  }
 
//  public HashMap<String, DataFormatInstance> getDataFormatInstances() {
//    return dataFormatInstances;
//  }
 
  public FlowChartManager getFlowChartManager() {
    return flowChartManager;
  }

  protected void setFlowChartManager(FlowChartManager flowChartManager) {
    this.flowChartManager = flowChartManager;
  }

  public int getOptionContainerIndex() {
    return optionContainerIndex;
  }

  protected void setOptionContainerIndex(int optionContainerIndex) {
    this.optionContainerIndex = optionContainerIndex;
  }

  public ChartSpecification getChartSpecification() {
    return chartSpecification;
  }

  protected void setChartSpecification(ChartSpecification chartSpecification) {
    this.chartSpecification = chartSpecification;
  }

  public LinkedHashSet<ChartItem> getPreProcessChartItems() {
    return preProcessChartItems;
  }

  public LinkedHashSet<ChartItem> getProcessChartItems() {
    return processChartItems;
  }
 
  public LinkedHashSet<ChartItem> getPostProcessChartItems() {
    return postProcessChartItems;
  }

  public boolean hasPreProcessChartItems() {
    return !(preProcessChartItems.size() == 0);
  }
 
  public boolean hasProcessChartItems() {
    return !(processChartItems.size() == 0);
  }
 
  public boolean hasPostProcessChartItems() {
    return !(postProcessChartItems.size() == 0);
  }
 
  public int preprocess() throws MaltChainedException {
    LinkedHashSet<ChartItem> chartItems = getPreProcessChartItems();
    if (chartItems.size() == 0) {
      return ChartItem.TERMINATE;
    }
    int signal = ChartItem.CONTINUE;
    for (ChartItem chartItem : chartItems) {
      signal = chartItem.preprocess(signal);
      if (signal == ChartItem.TERMINATE) {
        return signal;
      }
    }
    return signal;
  }
 
  public int process()  throws MaltChainedException {
    LinkedHashSet<ChartItem> chartItems = getProcessChartItems();
    if (chartItems.size() == 0) {
      return ChartItem.TERMINATE;
    }
    int signal = ChartItem.CONTINUE;
    for (ChartItem chartItem : chartItems) {
      signal = chartItem.process(signal);
//      if (!more) {
//        return false;
//      }
    }
    return signal;
  }
 
  public int postprocess() throws MaltChainedException {
    LinkedHashSet<ChartItem> chartItems = getPostProcessChartItems();
    if (chartItems.size() == 0) {
      return ChartItem.TERMINATE;
    }
    int signal = ChartItem.CONTINUE;
    for (ChartItem chartItem : chartItems) {
      signal = chartItem.postprocess(signal);
      if (signal == ChartItem.TERMINATE) {
        return signal;
      }
    }
    return signal;
  }
 
  public void terminate() throws MaltChainedException {
    LinkedHashSet<ChartItem> chartItems = getPreProcessChartItems();
    for (ChartItem chartItem : chartItems) {
      chartItem.terminate();
    }
    chartItems = getProcessChartItems();
    for (ChartItem chartItem : chartItems) {
      chartItem.terminate();
    }
    chartItems = getPostProcessChartItems();
    for (ChartItem chartItem : chartItems) {
      chartItem.terminate();
    }
    flowChartRegistry.clear();
    engineRegistry.clear();
    flowChartRegistryKey.setLength(0);
//    symbolTables = null;
   
  }
 
  public String getName() {
    return name;
  }
 
  public void setName(String name) {
    this.name = name;
  }

  public int hashCode() {
    final int prime = 31;
    int result = 1;
    result = prime * result + optionContainerIndex;
    result = prime * result + ((name == null) ? 0 : name.hashCode());
    result = prime * result + ((chartSpecification == null) ? 0 : chartSpecification.hashCode());
//    result = prime * result + ((dataFormatInstances == null) ? 0 : dataFormatInstances.hashCode());
//    result = prime * result + ((dataFormatManager == null) ? 0 : dataFormatManager.hashCode());
    result = prime * result + ((flowChartRegistry == null) ? 0 : flowChartRegistry.hashCode());
    result = prime * result + ((postProcessChartItems == null) ? 0 : postProcessChartItems.hashCode());
    result = prime * result + ((preProcessChartItems == null) ? 0 : preProcessChartItems.hashCode());
    result = prime * result + ((processChartItems == null) ? 0 : processChartItems.hashCode());
//    result = prime * result + ((symbolTables == null) ? 0 : symbolTables.hashCode());
    return result;
  }

  public boolean equals(Object obj) {
    if (this == obj)
      return true;
    if (obj == null)
      return false;
    if (getClass() != obj.getClass())
      return false;
    FlowChartInstance other = (FlowChartInstance) obj;
    if (optionContainerIndex != other.optionContainerIndex)
      return false;
    if (name == null) {
      if (other.name != null)
        return false;
    } else if (!name.equals(other.name))
      return false;
    if (chartSpecification == null) {
      if (other.chartSpecification != null)
        return false;
    } else if (!chartSpecification.equals(other.chartSpecification))
      return false;
//    if (dataFormatInstances == null) {
//      if (other.dataFormatInstances != null)
//        return false;
//    } else if (!dataFormatInstances.equals(other.dataFormatInstances))
//      return false;
//    if (dataFormatManager == null) {
//      if (other.dataFormatManager != null)
//        return false;
//    } else if (!dataFormatManager.equals(other.dataFormatManager))
//      return false;
    if (flowChartRegistry == null) {
      if (other.flowChartRegistry != null)
        return false;
    } else if (!flowChartRegistry.equals(other.flowChartRegistry))
      return false;
    if (postProcessChartItems == null) {
      if (other.postProcessChartItems != null)
        return false;
    } else if (!postProcessChartItems.equals(other.postProcessChartItems))
      return false;
    if (preProcessChartItems == null) {
      if (other.preProcessChartItems != null)
        return false;
    } else if (!preProcessChartItems.equals(other.preProcessChartItems))
      return false;
    if (processChartItems == null) {
      if (other.processChartItems != null)
        return false;
    } else if (!processChartItems.equals(other.processChartItems))
      return false;
//    if (symbolTables == null) {
//      if (other.symbolTables != null)
//        return false;
//    } else if (!symbolTables.equals(other.symbolTables))
//      return false;
    return true;
  }

  public String toString() {
    final StringBuilder sb = new StringBuilder();
    sb.append(name);sb.append('\n');
    if (preProcessChartItems.size() > 0) {
      sb.append("  preprocess:");sb.append('\n');
      for (ChartItem key : preProcessChartItems) {
        sb.append(key);
        sb.append('\n');
      }
    }
    if (processChartItems.size() > 0) {
      sb.append("  process:");sb.append('\n');
      for (ChartItem key : processChartItems) {
        sb.append(key);
        sb.append('\n');
      }
    }
    if (postProcessChartItems.size() > 0) {
      sb.append("  postprocess:");sb.append('\n');
      for (ChartItem key : postProcessChartItems) {
        sb.append(key);
        sb.append('\n');
      }
    }

    return sb.toString();
  }
}
TOP

Related Classes of org.maltparserx.core.flow.FlowChartInstance

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.