package org.maltparser.core.flow.spec;
import java.util.HashMap;
import org.maltparser.core.exception.MaltChainedException;
import org.maltparser.core.flow.FlowChartManager;
import org.maltparser.core.flow.item.ChartItem;
import org.w3c.dom.Attr;
import org.w3c.dom.Element;
import org.w3c.dom.NamedNodeMap;
/**
*
*
* @author Johan Hall
*/
public class ChartItemSpecification {
private String chartItemName;
private Class<? extends ChartItem> chartItemClass;
private HashMap<String, String> attributes;
public ChartItemSpecification() {
this(null, null);
}
public ChartItemSpecification(String chartItemName, Class<? extends ChartItem> chartItemClass) {
setChartItemName(chartItemName);
setChartItemClass(chartItemClass);
attributes = new HashMap<String, String>(3);
}
public String getChartItemName() {
return chartItemName;
}
public void setChartItemName(String chartItemName) {
this.chartItemName = chartItemName;
}
public Class<? extends ChartItem> getChartItemClass() {
return chartItemClass;
}
public void setChartItemClass(Class<? extends ChartItem> chartItemClass) {
this.chartItemClass = chartItemClass;
}
public HashMap<String, String> getChartItemAttributes() {
return attributes;
}
public String getChartItemAttribute(String key) {
return attributes.get(key);
}
public void addChartItemAttribute(String key, String value) {
attributes.put(key, value);
}
public void removeChartItemAttribute(String key) {
attributes.remove(key);
}
public void read(Element chartItemSpec, FlowChartManager flowCharts) throws MaltChainedException {
chartItemName = chartItemSpec.getAttribute("item");
chartItemClass = flowCharts.getFlowChartSystem().getChartElement(chartItemName).getChartItemClass();
NamedNodeMap attrs = chartItemSpec.getAttributes();
for (int i = 0; i < attrs.getLength(); i++) {
Attr attribute = (Attr) attrs.item(i);
addChartItemAttribute(attribute.getName(), attribute.getValue());
}
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((chartItemName == null) ? 0 : chartItemName.hashCode());
result = prime * result + ((attributes == null) ? 0 : attributes.hashCode());
result = prime * result + ((chartItemClass == null) ? 0 : chartItemClass.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
ChartItemSpecification other = (ChartItemSpecification) obj;
if (chartItemName == null) {
if (other.chartItemName != null) {
return false;
}
} else if (!chartItemName.equals(other.chartItemName)) {
return false;
}
if (attributes == null) {
if (other.attributes != null) {
return false;
}
} else if (!attributes.equals(other.attributes)) {
return false;
}
if (chartItemClass == null) {
if (other.chartItemClass != null) {
return false;
}
} else if (!chartItemClass.equals(other.chartItemClass)) {
return false;
}
return true;
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append(chartItemName);
sb.append(' ');
for (String key : attributes.keySet()) {
sb.append(key);
sb.append('=');
sb.append(attributes.get(key));
sb.append(' ');
}
return sb.toString();
}
}