001    package org.maltparser.core.flow.item;
002    
003    import org.maltparser.core.exception.MaltChainedException;
004    import org.maltparser.core.flow.FlowChartInstance;
005    import org.maltparser.core.flow.spec.ChartItemSpecification;
006    import org.maltparser.core.flow.system.elem.ChartElement;
007    /**
008    *
009    *
010    * @author Johan Hall
011    */
012    public abstract class ChartItem {
013            protected FlowChartInstance flowChartinstance;
014            protected ChartItemSpecification chartItemSpecification;
015            
016            // Signals
017            public final static int CONTINUE = 1;
018            public final static int TERMINATE = 2;
019            public final static int NEWITERATION = 3;
020            
021            public ChartItem() {  }
022            
023            /**
024             * Initialize the chart item
025             * 
026             * @param flowChartinstance the flow chart instance that the chart item belongs to
027             * @param chartItemSpecification a specification of the chart item
028             * @throws MaltChainedException
029             */
030            public void initialize(FlowChartInstance flowChartinstance, ChartItemSpecification chartItemSpecification) throws MaltChainedException {
031                    setFlowChartInstance(flowChartinstance);
032                    setChartItemSpecification(chartItemSpecification);
033            }
034            
035            /**
036             * Cause the chart item to perform the preprocess tasks
037             * 
038             * @param signal returned by the previous chart item
039             * @return true if every thing is ok, otherwise false
040             * @throws MaltChainedException
041             */
042            public abstract int preprocess(int signal) throws MaltChainedException;
043            
044            /**
045             * Cause the chart item to perform the process task (for every sentence)
046             * 
047             * @param signal returned by the previous chart item
048             * @return true if it is ready to perform the next sentence, otherwise false
049             * @throws MaltChainedException
050             */
051            public abstract int process(int signal) throws MaltChainedException;
052            
053            /**
054             * Cause the chart item to perform the postprocess tasks
055             * 
056             * @param signal returned by the previous chart item
057             * @return true if every thing is ok, otherwise false
058             * @throws MaltChainedException
059             */
060            public abstract int postprocess(int signal) throws MaltChainedException;
061            
062            /**
063             * Terminates and cleans up the chart item
064             * 
065             * @throws MaltChainedException
066             */
067            public abstract void terminate() throws MaltChainedException;
068    
069            /**
070             * Returns the flow chart instance that the chart item belongs to
071             * 
072             * @return the flow chart instance that the chart item belongs to
073             */
074            public FlowChartInstance getFlowChartInstance() {
075                    return flowChartinstance;
076            }
077    
078            /**
079             * Sets the flow chart instance that the chart item belongs to
080             * 
081             * @param flowChartinstance a flow chart instance
082             */
083            protected void setFlowChartInstance(FlowChartInstance flowChartinstance) {
084                    this.flowChartinstance = flowChartinstance;
085            }
086    
087            /**
088             * Returns the option container index
089             * 
090             * @return the option container index
091             */
092            public int getOptionContainerIndex() {
093                    return flowChartinstance.getOptionContainerIndex();
094            }
095    
096            /**
097             * Returns the chart element in the flow chart system description
098             * 
099             * @param key a chart element key
100             * @return the chart element in the flow chart system description
101             */
102            public ChartElement getChartElement(String key) {
103                    return flowChartinstance.getFlowChartManager().getFlowChartSystem().getChartElement(key);
104            }
105            
106            /**
107             * Returns a chart item specification
108             * 
109             * @return a chart item specification
110             */
111            public ChartItemSpecification getChartItemSpecification() {
112                    return chartItemSpecification;
113            }
114    
115            /**
116             * Sets the specification of the chart item
117             * 
118             * @param chartItemSpecification a chart item specification
119             */
120            public void setChartItemSpecification(ChartItemSpecification chartItemSpecification) {
121                    this.chartItemSpecification = chartItemSpecification;
122            }
123    }