    001    package org.maltparser.core.flow.spec;
    002
    003    import java.util.HashMap;
    004
    005    import org.maltparser.core.exception.MaltChainedException;
    006    import org.maltparser.core.flow.FlowChartManager;
    007    import org.maltparser.core.flow.item.ChartItem;
    008    import org.w3c.dom.Attr;
    009    import org.w3c.dom.Element;
    010    import org.w3c.dom.NamedNodeMap;
    011    /**
    012    *
    013    *
    014    * @author Johan Hall
    015    */
    016    public class ChartItemSpecification {
    017            private String chartItemName;
    018            private Class<? extends ChartItem> chartItemClass;
    019            private HashMap<String,String> attributes;
    020
    021            public ChartItemSpecification() {
    022                    this(null,null);
    023            }
    024
    025            public ChartItemSpecification(String chartItemName, Class<? extends ChartItem> chartItemClass) {
    026                    setChartItemName(chartItemName);
    027                    setChartItemClass(chartItemClass);
    028                    attributes = new HashMap<String,String>(3);
    029            }
    030
    031            public String getChartItemName() {
    032                    return chartItemName;
    033            }
    034
    035            public void setChartItemName(String chartItemName) {
    036                    this.chartItemName = chartItemName;
    037            }
    038
    039            public Class<? extends ChartItem> getChartItemClass() {
    040                    return chartItemClass;
    041            }
    042
    043            public void setChartItemClass(Class<? extends ChartItem> chartItemClass) {
    044                    this.chartItemClass = chartItemClass;
    045            }
    046
    047            public HashMap<String, String> getChartItemAttributes() {
    048                    return attributes;
    049            }
    050
    051            public String getChartItemAttribute(String key) {
    052                    return attributes.get(key);
    053            }
    054
    055            public void addChartItemAttribute(String key, String value) {
    056                    attributes.put(key, value);
    057            }
    058
    059            public void removeChartItemAttribute(String key) {
    060                    attributes.remove(key);
    061            }
    062
    063            public void read(Element chartItemSpec, FlowChartManager flowCharts) throws MaltChainedException {
    064                    chartItemName = chartItemSpec.getAttribute("item");
    065                    chartItemClass = flowCharts.getFlowChartSystem().getChartElement(chartItemName).getChartItemClass();
    066
    067                    NamedNodeMap attrs = chartItemSpec.getAttributes();
    068                    for(int i = 0 ; i < attrs.getLength() ; i++) {
    069                            Attr attribute = (Attr)attrs.item(i);
    070                            addChartItemAttribute(attribute.getName(),attribute.getValue());
    071                    }
    072            }
    073
    074            public int hashCode() {
    075                    final int prime = 31;
    076                    int result = 1;
    077                    result = prime * result + ((chartItemName == null) ? 0 : chartItemName.hashCode());
    078                    result = prime * result + ((attributes == null) ? 0 : attributes.hashCode());
    079                    result = prime * result + ((chartItemClass == null) ? 0 : chartItemClass.hashCode());
    080                    return result;
    081            }
    082
    083            public boolean equals(Object obj) {
    084                    if (this == obj)
    085                            return true;
    086                    if (obj == null)
    087                            return false;
    088                    if (getClass() != obj.getClass())
    089                            return false;
    090                    ChartItemSpecification other = (ChartItemSpecification) obj;
    091                    if (chartItemName == null) {
    092                            if (other.chartItemName != null)
    093                                    return false;
    094                    } else if (!chartItemName.equals(other.chartItemName))
    095                            return false;
    096
    097                    if (attributes == null) {
    098                            if (other.attributes != null)
    099                                    return false;
    100                    } else if (!attributes.equals(other.attributes))
    101                            return false;
    102
    103                    if (chartItemClass == null) {
    104                            if (other.chartItemClass != null)
    105                                    return false;
    106                    } else if (!chartItemClass.equals(other.chartItemClass))
    107                            return false;
    108
    109                    return true;
    110            }
    111
    112            public String toString() {
    113                    StringBuilder sb = new StringBuilder();
    114                    sb.append(chartItemName);sb.append(' ');
    115                    for (String key : attributes.keySet()) {
    116                            sb.append(key);sb.append('=');sb.append(attributes.get(key));sb.append(' ');
    117                    }
    118                    return sb.toString();
    119            }
    120
    121    }