1 package sourceforge.org.qmc2.options.editor.model; 2 3 import java.util.ArrayList; 4 import java.util.HashMap; 5 import java.util.List; 6 import java.util.Map; 7 import java.util.Set; 8 9 import org.w3c.dom.Document; 10 import org.w3c.dom.Element; 11 import org.w3c.dom.Node; 12 import org.w3c.dom.NodeList; 13 14 public abstract class DescriptableItem { 15 16 private final Map<String, Description> descriptionsMap = new HashMap<String, Description>(); 17 18 private final List<Description> descriptions = new ArrayList<Description>(); 19 20 private static final String TAG_DESCRIPTION = "description"; 21 22 protected static final String ATTRIBUTE_NAME = "name"; 23 24 private static final String ATTRIBUTE_LANG = "lang"; 25 26 private static final String ATTRIBUTE_TEXT = "text"; 27 28 private Object parent = null; 29 30 private String name; 31 32 private int index; 33 DescriptableItem(String name)34 public DescriptableItem(String name) { 35 this.name = name; 36 } 37 getName()38 public String getName() { 39 return name; 40 } 41 getDescription(String language)42 public String getDescription(String language) { 43 return descriptionsMap.get(language) != null ? descriptionsMap.get( 44 language).getDescription() : null; 45 } 46 47 /** 48 * Set a description to some language. Set value to null or "" to remove 49 * 50 * @param language 51 * the language to set the description 52 * @param value 53 * the description 54 */ setDescription(String language, String value)55 public void setDescription(String language, String value) { 56 if (value == null || value.trim().length() == 0) { 57 descriptionsMap.remove(language); 58 } else { 59 Description descr = descriptionsMap.get(language); 60 if (descr == null) { 61 descr = new Description(language, null); 62 descriptionsMap.put(language, descr); 63 descriptions.add(descr); 64 } 65 descr.setDescription(value); 66 } 67 68 } 69 getLanguages()70 public Set<String> getLanguages() { 71 return descriptionsMap.keySet(); 72 } 73 getParent()74 public Object getParent() { 75 return parent; 76 } 77 setParent(Object parent)78 public void setParent(Object parent) { 79 this.parent = parent; 80 } 81 parseDescriptions(Node parentNode)82 public void parseDescriptions(Node parentNode) { 83 NodeList children = parentNode.getChildNodes(); 84 85 for (int i = 0; i < children.getLength(); i++) { 86 Node node = children.item(i); 87 if (TAG_DESCRIPTION.equals(node.getNodeName())) { 88 String language = node.getAttributes() 89 .getNamedItem(ATTRIBUTE_LANG).getNodeValue(); 90 String text = node.getAttributes().getNamedItem(ATTRIBUTE_TEXT) 91 .getNodeValue(); 92 Description descr = new Description(language, text); 93 descriptionsMap.put(language, descr); 94 descriptions.add(descr); 95 } 96 } 97 98 } 99 toXML(Document document)100 public Element toXML(Document document) { 101 Element descriptableItem = document.createElement(getTagName()); 102 descriptableItem.setAttribute(ATTRIBUTE_NAME, name); 103 104 for (Description description : descriptions) { 105 if (description.getDescription() != null 106 && description.getDescription().trim().length() > 0) { 107 Element descriptionElement = document 108 .createElement(TAG_DESCRIPTION); 109 descriptionElement.setAttribute(ATTRIBUTE_LANG, 110 description.getLanguage()); 111 descriptionElement.setAttribute(ATTRIBUTE_TEXT, 112 description.getDescription()); 113 descriptableItem.appendChild(descriptionElement); 114 } 115 } 116 117 return descriptableItem; 118 } 119 getTagName()120 public abstract String getTagName(); 121 setName(String name)122 public void setName(String name) { 123 this.name = name; 124 } 125 getIndex()126 public int getIndex() { 127 return index; 128 } 129 setIndex(int index)130 public void setIndex(int index) { 131 this.index = index; 132 } 133 134 } 135