1 26 27 package org.nightlabs.editor2d.iofilter; 28 29 import java.util.Collection ; 30 import java.util.Iterator ; 31 32 import org.nightlabs.editor2d.ImageDrawComponent; 33 import org.nightlabs.editor2d.MultiLayerDrawComponent; 34 import org.nightlabs.editor2d.impl.ImageDrawComponentImpl; 35 36 public class ManifestWriter 37 { 38 public static final String DEFAULT_CONTENT_TYPE = "vnd.nightlabs.editor2d.mldc"; 39 public static final String DEFAULT_CONTENT_NAME = "content.xml"; 40 public static final String DEFAULT_XML_VERSION = "1.0"; 41 public static final String DEFAULT_ENCODING = "UTF-8"; 42 public static final String DEFAULT_IMAGE_DIR = "images"; 43 public static final String DEFAULT_CONTENT_MEDIA_TYPE = "text/xml"; 44 public static final String DEFAULT_XMLNS = "http://jfire.nightlabs.org/editor2d/manifest"; 45 46 public static final String DEFAULT_MANIFEST_DTD = "Manifest.dtd"; 47 public static final String DEFAULT_MANIFEST_IDENTIFIER = "-//NightLabs GmbH//DTD Editor2D 1.0//EN"; 48 public static final String DEFAULT_CONTENT_VERSION = "1.0"; 49 50 protected static final String ROW_BREAK = "\n"; 51 52 protected StringBuffer stringBuffer; 53 public ManifestWriter() 54 { 55 this(DEFAULT_CONTENT_TYPE, DEFAULT_CONTENT_NAME, DEFAULT_XML_VERSION, DEFAULT_ENCODING); 56 } 57 58 public ManifestWriter(String contentType) 59 { 60 this(contentType, DEFAULT_CONTENT_NAME, DEFAULT_XML_VERSION, DEFAULT_ENCODING); 61 } 62 63 public ManifestWriter(String contentType, String contentName, String xmlVersion, String encoding) 64 { 65 super(); 66 this.contentType = contentType; 67 this.contentName = contentName; 68 this.xmlVersion = xmlVersion; 69 this.encoding = encoding; 70 stringBuffer = new StringBuffer (); 71 } 72 73 76 protected String contentType = DEFAULT_CONTENT_TYPE; 77 public String getContentType() { 78 return contentType; 79 } 80 public void setContentType(String contentType) { 81 this.contentType = contentType; 82 } 83 84 87 protected String contentName = DEFAULT_CONTENT_NAME; 88 public String getContentName() { 89 return contentName; 90 } 91 public void setContentName(String contentName) { 92 this.contentName = contentName; 93 } 94 95 98 protected String xmlVersion = DEFAULT_XML_VERSION; 99 public String getXmlVersion() { 100 return xmlVersion; 101 } 102 public void setXmlVersion(String xmlVersion) { 103 this.xmlVersion = xmlVersion; 104 } 105 106 109 protected String encoding = DEFAULT_ENCODING; 110 public String getEncoding() { 111 return encoding; 112 } 113 public void setEncoding(String encoding) { 114 this.encoding = encoding; 115 } 116 117 120 protected String imageDirectory = DEFAULT_IMAGE_DIR; 121 public String getImageDirectory() { 122 return imageDirectory; 123 } 124 public void setImageDirectory(String imageDirectory) { 125 this.imageDirectory = imageDirectory; 126 } 127 128 131 protected String contentMediaType = DEFAULT_CONTENT_MEDIA_TYPE; 132 public String getContentMediaType() { 133 return contentMediaType; 134 } 135 public void setContentMediaType(String contentMediaType) { 136 this.contentMediaType = contentMediaType; 137 } 138 139 142 protected String xmlns = DEFAULT_XMLNS; 143 public String getXmlNS() { 144 return xmlns; 145 } 146 public void setXmlNS(String xmlns) { 147 this.xmlns = xmlns; 148 } 149 150 153 protected String manifestDTD = DEFAULT_MANIFEST_DTD; 154 public String getManifestDTD() { 155 return manifestDTD; 156 } 157 public void setManifestDTD(String manifestDTD) { 158 this.manifestDTD = manifestDTD; 159 } 160 161 164 protected String manifestIdentifier = DEFAULT_MANIFEST_IDENTIFIER; 165 public String getManifestIdentifier() { 166 return manifestIdentifier; 167 } 168 public void setManifestIdentifier(String manifestIdentifier) { 169 this.manifestIdentifier = manifestIdentifier; 170 } 171 172 180 protected void writeHeader(StringBuffer sb) 181 { 182 sb.append("<?xml version=\""); 183 sb.append(xmlVersion); 184 sb.append("\" encoding=\""); 185 sb.append(encoding); 186 sb.append("\"?>"); 187 sb.append(ROW_BREAK); 188 } 189 190 protected void writeNS(StringBuffer sb) 191 { 192 sb.append("<manifest:manifest "); 193 sb.append("xmlns:manifest=\""); 194 sb.append(xmlns); 195 sb.append("\">"); 196 sb.append(ROW_BREAK); 197 } 198 199 protected void writeDTD(StringBuffer sb) 200 { 201 sb.append("<!DOCTYPE manifest:manifest PUBLIC \""); 202 sb.append(manifestIdentifier); 203 sb.append("\" \""); 204 sb.append(manifestDTD); 205 sb.append("\">"); 206 sb.append(ROW_BREAK); 207 } 208 209 protected void writeContentType(StringBuffer sb) 210 { 211 sb.append("<manifest:file-entry manifest:media-type=\"application/"); 212 sb.append(contentType); 213 sb.append("\" manifest:full-path=\"/\"/>"); 214 sb.append(ROW_BREAK); 215 } 216 217 protected void writeContent(StringBuffer sb) 218 { 219 sb.append("<manifest:file-entry manifest:media-type=\""); 220 sb.append(contentMediaType); 221 sb.append("\" manifest:full-path=\""); 222 sb.append(contentName); 223 sb.append("\"/>"); 224 sb.append(ROW_BREAK); 225 } 226 227 233 protected void writeImages(StringBuffer sb, MultiLayerDrawComponent mldc) 234 { 235 Collection imageDCs = mldc.getDrawComponents(ImageDrawComponentImpl.class); 236 if (imageDCs != null) 237 { 238 for (Iterator it = imageDCs.iterator(); it.hasNext(); ) 239 { 240 ImageDrawComponent image = (ImageDrawComponent) it.next(); 241 String imageType = getImageType(image); 242 sb.append("<manifest:file-entry manifest:media-type=\""); 243 sb.append(imageType); 244 sb.append("\" manifest:full-path=\""); 245 sb.append(imageDirectory); 246 sb.append("/"); 247 sb.append(image.getName()); 248 sb.append("\"/>"); 249 sb.append(ROW_BREAK); 250 } 251 } 252 } 253 254 protected String getImageType(ImageDrawComponent img) 255 { 256 String fileExtension = getFileExtension(img.getName()); 257 StringBuffer sb = new StringBuffer (); 258 sb.append("image/"); 259 sb.append(fileExtension); 260 return sb.toString(); 261 } 262 263 protected String getFileExtension(String fileName) 264 { 265 StringBuffer sb = new StringBuffer (fileName); 266 int index = sb.lastIndexOf("."); 267 if (index == -1) { 268 return null; 269 } 270 return sb.substring(index+1); 271 } 272 273 public boolean containsImages(MultiLayerDrawComponent mldc) 274 { 275 Collection imageDCs = mldc.getDrawComponents(ImageDrawComponentImpl.class); 276 if (imageDCs != null) { 277 return true; 278 } 279 return false; 280 } 281 282 protected void closeHeader(StringBuffer sb) 283 { 284 sb.append("</manifest:manifest>"); 285 } 286 287 public StringBuffer writeManifest(MultiLayerDrawComponent mldc) 288 { 289 stringBuffer = new StringBuffer (); 290 writeHeader(stringBuffer); 291 writeDTD(stringBuffer); 293 writeNS(stringBuffer); 294 writeContentType(stringBuffer); 295 writeContent(stringBuffer); 296 writeImages(stringBuffer, mldc); 297 closeHeader(stringBuffer); 298 return stringBuffer; 299 } 300 } 301 | Popular Tags |