001    package org.maltparser.parser.history;
002    
003    import java.util.ArrayList;
004    
005    import org.maltparser.core.exception.MaltChainedException;
006    import org.maltparser.core.pool.ObjectPoolList;
007    import org.maltparser.parser.history.action.GuideUserAction;
008    /**
009     * 
010     * @author Johan Hall
011    */
012    public class HistoryList extends HistoryStructure {
013            protected ArrayList<HistoryNode> list;
014            protected final ObjectPoolList<HistoryNode> nodePool;
015    //      protected BufferedWriter writer;
016            
017            public HistoryList() throws MaltChainedException {
018                    super();
019                    list = new ArrayList<HistoryNode>();
020                    nodePool = new ObjectPoolList<HistoryNode>() {
021                            protected HistoryNode create() throws MaltChainedException { return new HistoryListNode(null, null); }
022                            public void resetObject(HistoryNode o) throws MaltChainedException { o.clear(); }
023                    };
024    //              try {
025    //                      writer = new BufferedWriter(new FileWriter("tseq.dat"));
026    //              } catch (IOException e) {
027    //                      throw new MaltChainedException("", e);
028    //              }
029            }
030            
031            public HistoryNode getNewHistoryNode(HistoryNode previousNode, GuideUserAction action) throws MaltChainedException {
032                    HistoryNode node = nodePool.checkOut();
033                    node.setAction(action);
034                    node.setPreviousNode(previousNode);
035                    list.add(node);
036                    return node;
037            }
038            
039            public void clear() throws MaltChainedException {
040                    nodePool.checkInAll();
041                    list.clear();
042            }
043            
044            public boolean equals(Object obj) {
045                    return super.equals(obj);
046            }
047    
048            public int hashCode() {
049                    return super.hashCode();
050            }
051            
052            public void toFile() throws MaltChainedException {
053    //              try {
054    //                      for (int i = 0; i < list.size(); i++) {
055    //                              writer.write(((ComplexDecisionAction)list.get(i).getAction()).getSingleDecision(0).getDecisionSymbol());
056    //                              writer.write("\n");
057    //                              writer.flush();
058    //                      }
059    //                      writer.write("\n");
060    //              } catch (IOException e) {
061    //                      throw new MaltChainedException("", e);
062    //              }
063            }
064            
065            public void close() throws MaltChainedException {
066    //              if (writer != null) {
067    //                      try {
068    //                              writer.flush();
069    //                              writer.close();
070    //                              writer = null;
071    //                      } catch (IOException e) {
072    //                              throw new MaltChainedException("", e);
073    //                      }
074    //              }
075            }
076            
077            public String toString() {
078                    final StringBuilder sb = new StringBuilder();
079                    for (int i = 0; i < list.size(); i++) {
080                            sb.append(list.get(i));
081                            if (i < list.size()-1) {
082                                    sb.append(", ");
083                            }
084                    }
085                    return sb.toString();
086            }
087            
088    }