001package org.maltparser.core.flow.spec; 002 003import java.util.HashMap; 004 005import org.maltparser.core.exception.MaltChainedException; 006import org.maltparser.core.flow.FlowChartManager; 007import org.maltparser.core.flow.item.ChartItem; 008import org.w3c.dom.Attr; 009import org.w3c.dom.Element; 010import org.w3c.dom.NamedNodeMap; 011/** 012* 013* 014* @author Johan Hall 015*/ 016public 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}