1 18 19 package de.gulden.framework.amoda.generic.metadata; 20 21 import de.gulden.framework.amoda.generic.data.*; 22 import de.gulden.framework.amoda.model.core.*; 23 import de.gulden.framework.amoda.model.metadata.*; 24 import de.gulden.framework.amoda.model.metadata.Metadata; 25 import de.gulden.util.Toolbox; 26 import de.gulden.util.xml.*; 27 import de.gulden.util.xml.XMLToolbox; 28 import de.gulden.util.xml.serializer.*; 29 import de.gulden.util.xml.serializer.XMLSerializableActive; 30 import java.lang.*; 31 import java.net.*; 32 import java.util.*; 33 import javax.swing.*; 34 import org.w3c.dom.*; 35 36 42 public class GenericMetadata implements Metadata, XMLSerializableActive { 43 44 48 protected static Hashtable titlesCache = new Hashtable(); 49 50 protected static Hashtable iconsCache = new Hashtable(); 51 52 protected Hashtable metadataEntries; 53 54 protected GenericMetadataSchema genericMetadataSchema; 55 56 public Collection genericMetadataEntry = new ArrayList(); 57 58 59 63 public GenericMetadata() { 64 metadataEntries=new Hashtable(); 65 } 66 67 68 72 public GenericMetadataSchema getGenericMetadataSchema() { 73 return genericMetadataSchema; 74 } 75 76 public void setGenericMetadataSchema(GenericMetadataSchema genericMetadataSchema) { 77 this.genericMetadataSchema = genericMetadataSchema; 78 } 79 80 public Collection getGenericMetadataEntrys() { 81 return genericMetadataEntry; 82 } 83 84 public void addGenericMetadataEntry(GenericMetadataEntry genericMetadataEntry) { 85 if (! this.genericMetadataEntry.contains(genericMetadataEntry)) { 86 this.genericMetadataEntry.add(genericMetadataEntry); 87 genericMetadataEntry.setGenericMetadata(this); 88 } 89 } 90 91 public void removeGenericMetadataEntry(GenericMetadataEntry genericMetadataEntry) { 92 boolean removed = this.genericMetadataEntry.remove(genericMetadataEntry); 93 if (removed) genericMetadataEntry.setGenericMetadata((GenericMetadata)null); 94 } 95 96 public String get(String name) { 97 return get(name,""); 98 } 99 100 public String get(String name, String def) { 101 GenericMetadataEntry entry=(GenericMetadataEntry)getEntry(name); 103 if (entry!=null) { 104 String s=entry.getString(); 105 if (s!=null) { 106 s = s.trim(); 107 s = replaceMultipleBlanksWithLineBreaks(s); 108 return s; 109 } else { 110 return def; 111 } 112 } else { 113 return def; 114 } 115 } 116 117 public Collection getEntries() { 118 return getGenericMetadataEntrys(); 119 } 120 121 public MetadataEntry getEntry(String name) { 122 return (MetadataEntry)metadataEntries.get(name); 123 } 124 125 public String toString() { 126 StringBuffer sb=new StringBuffer (); 127 for (Iterator it=getEntries().iterator();it.hasNext();) { 128 MetadataEntry entry=(MetadataEntry)it.next(); 129 sb.append(entry.toString()+de.gulden.framework.amoda.generic.core.GenericApplicationEnvironment.NL); 130 } 131 return sb.toString(); 132 } 133 134 public void set(String name, Object value) { 135 GenericMetadataEntry m=new GenericMetadataEntry(name,value); 136 addEntry(m); 137 } 138 139 public Element xmlSerialize(Document document, XMLSerializer serializer) { 140 throw new Error ("NOT IMPLEMENTED"); 141 } 142 143 public void xmlDeserialize(Element element, XMLSerializer serializer) throws XMLException { 144 Element schemaTag=XMLToolbox.getChild(element,"metadata-schema"); 145 if (schemaTag!=null) { 146 GenericMetadataSchema schema=new GenericMetadataSchema(); 147 serializer.xmlDeserialize(schema,schemaTag); 148 setGenericMetadataSchema(schema); 149 } 150 Element e=XMLToolbox.getFirstChild(element); 152 while (e!=null) { 153 String name=e.getTagName(); 154 String source=e.getAttribute("source"); String valueStr=XMLToolbox.getText(e); 156 if (Toolbox.empty(valueStr)) { 157 valueStr=XMLToolbox.getLangstring(e); 158 } 159 if (!Toolbox.empty(valueStr)) { 160 GenericMetadataEntry m=new GenericMetadataEntry(); 161 m.setName(name); 162 m.setSource(source); 163 m.parseString(valueStr); 164 this.addEntry(m); 165 } 166 e=XMLToolbox.getNextSibling(e); 167 } 168 } 169 170 public MetadataSchema getSchema() { 171 return getGenericMetadataSchema(); 172 } 173 174 protected void addEntry(GenericMetadataEntry entry) { 175 addGenericMetadataEntry(entry); 176 metadataEntries.put(entry.getName(),entry); 177 } 178 179 180 184 public static String findTitle(ApplicationMember member) { 185 String title=(String )titlesCache.get(member); 186 if (title==null) { title=member.getMetadata().get("title"); 189 if (Toolbox.isEmpty(title)) { 190 if (member instanceof de.gulden.framework.amoda.generic.core.GenericApplicationMemberAbstract) { 192 de.gulden.framework.amoda.generic.core.GenericApplicationMemberAbstract m=(de.gulden.framework.amoda.generic.core.GenericApplicationMemberAbstract)member; 193 String id = m.getId(); 194 de.gulden.framework.amoda.model.data.CompositeGroup parent = m.getParent(); 195 if (parent != null) { 196 String parentId = parent.getId(); 197 if (id.startsWith(parentId + ".")) { id = id.substring(parentId.length()+1); 199 } 200 } 201 title=Toolbox.capitalize(id).replace('-',' ').replace('_',' ').replace('.',' '); 202 } 203 } 204 titlesCache.put(member,title); 205 } 206 return title; 207 } 208 209 public static ImageIcon findIcon(ApplicationMember member) { 210 ImageIcon icon=(ImageIcon)iconsCache.get(member); 211 if (icon==null) { java.net.URL url=findIconResource(member); 213 if (url!=null) { 214 icon=new ImageIcon(url); 215 iconsCache.put(member,icon); 216 } 217 } 218 return icon; 219 } 220 221 public static URL findIconResource(ApplicationMember member) { 222 java.net.URL url=null; 223 String icon=member.getMetadata().get("icon").trim(); 225 String base=member.getApplication().getOptions().getString("resource-base-icons"); 226 if (!base.endsWith("/")) { 227 base+="/"; 228 } 229 if (!Toolbox.empty(icon)) { 230 if (!icon.startsWith("/")) { icon=base+icon; 232 } 233 url=member.getClass().getResource(icon); 234 } 235 if (member instanceof de.gulden.framework.amoda.generic.core.GenericApplicationMemberAbstract) { 237 de.gulden.framework.amoda.generic.core.GenericApplicationMemberAbstract m=(de.gulden.framework.amoda.generic.core.GenericApplicationMemberAbstract)member; 238 icon=base+m.getId()+".png"; 239 url=member.getClass().getResource(icon); 240 if (url==null) { 241 icon=base+m.getId()+".gif"; 242 url=member.getClass().getResource(icon); 243 } 244 if (url==null) { 245 icon=base+m.getId()+".bmp"; 246 url=member.getClass().getResource(icon); 247 } 248 if (url==null) { 249 icon=base+m.getId()+".jpg"; 250 url=member.getClass().getResource(icon); 251 } 252 } 253 return url; 254 } 255 256 protected static String replaceMultipleBlanksWithLineBreaks(String s) { 257 int pos = 0; 258 char prev = 'X'; 259 int startblank = -1; 260 while (pos < s.length()) { 261 char c = s.charAt(pos); 262 if (Character.isWhitespace(c)) { 263 if (!Character.isWhitespace(prev)) { 264 startblank = pos; 265 } 266 } else { if (Character.isWhitespace(prev)) { if ((pos - startblank) > 1) { return s.substring(0, startblank) + "\n" + replaceMultipleBlanksWithLineBreaks(s.substring(pos)); 270 } 271 } 272 } 273 prev = c; 274 pos++; 275 } 276 if (Character.isWhitespace(prev)) { if ((pos - startblank) > 1) { return s.substring(0, startblank) + "\n"; 279 } 280 } 281 return s; 282 } 283 284 } | Popular Tags |