001package org.maltparser.core.flow.system.elem; 002 003import java.util.LinkedHashMap; 004 005import org.maltparser.core.exception.MaltChainedException; 006import org.maltparser.core.flow.FlowException; 007import org.maltparser.core.flow.item.ChartItem; 008import org.maltparser.core.flow.system.FlowChartSystem; 009import org.maltparser.core.plugin.PluginLoader; 010import org.w3c.dom.Element; 011import org.w3c.dom.NodeList; 012/** 013* 014* 015* @author Johan Hall 016*/ 017public class ChartElement { 018 private String item; 019 private Class<? extends ChartItem> chartItemClass; 020 private LinkedHashMap<String,ChartAttribute> attributes; 021 022 public ChartElement() { 023 attributes = new LinkedHashMap<String,ChartAttribute>(); 024 } 025 026 public String getItem() { 027 return item; 028 } 029 030 public void setItem(String item) { 031 this.item = item; 032 } 033 034 public void addAttribute(String name, ChartAttribute attribute) { 035 attributes.put(name, attribute); 036 } 037 038 public ChartAttribute getAttribute(String name) { 039 return attributes.get(name); 040 } 041 042 public Class<? extends ChartItem> getChartItemClass() { 043 return chartItemClass; 044 } 045 046 047 public LinkedHashMap<String, ChartAttribute> getAttributes() { 048 return attributes; 049 } 050 051 public void read(Element chartElem, FlowChartSystem flowChartSystem) throws MaltChainedException { 052 setItem(chartElem.getAttribute("item")); 053 String chartItemClassName = chartElem.getAttribute("class"); 054 Class<?> clazz = null; 055 try { 056 if (PluginLoader.instance() != null) { 057 clazz = PluginLoader.instance().getClass(chartItemClassName); 058 } 059 if (clazz == null) { 060 clazz = Class.forName(chartItemClassName); 061 } 062 this.chartItemClass = clazz.asSubclass(org.maltparser.core.flow.item.ChartItem.class); 063 } catch (ClassCastException e) { 064 throw new FlowException("The class '"+clazz.getName()+"' is not a subclass of '"+org.maltparser.core.flow.item.ChartItem.class.getName()+"'. ", e); 065 } catch (ClassNotFoundException e) { 066 throw new FlowException("The class "+chartItemClassName+" could not be found. ", e); 067 } 068 NodeList attrElements = chartElem.getElementsByTagName("attribute"); 069 for (int i = 0; i < attrElements.getLength(); i++) { 070 ChartAttribute attribute = new ChartAttribute(); 071 attribute.read((Element)attrElements.item(i),flowChartSystem); 072 attributes.put(((Element)attrElements.item(i)).getAttribute("name"), attribute); 073 } 074 } 075 076 public String toString() { 077 StringBuilder sb = new StringBuilder(); 078 sb.append(" "); 079 sb.append(item); 080 sb.append(' '); 081 sb.append(chartItemClass.getName()); 082 sb.append('\n'); 083 for (String key : attributes.keySet()) { 084 sb.append(" "); 085 sb.append(attributes.get(key)); 086 sb.append('\n'); 087 } 088 return sb.toString(); 089 } 090}