Changeset 673
- Timestamp:
- 03/15/09 17:47:12 (3 years ago)
- Location:
- trunk/docx4j/src/main/java/org/docx4j/openpackaging
- Files:
-
- 1 added
- 12 edited
-
io/Load.java (modified) (4 diffs)
-
io/LoadFromJCR.java (modified) (1 diff)
-
io/LoadFromVFSZipFile.java (modified) (1 diff)
-
io/LoadFromZipFile.java (modified) (1 diff)
-
packages/Package.java (modified) (4 diffs)
-
parts/ExternalTarget.java (added)
-
parts/WordprocessingML/BinaryPart.java (modified) (2 diffs)
-
parts/WordprocessingML/BinaryPartAbstractImage.java (modified) (2 diffs)
-
parts/WordprocessingML/ImageGifPart.java (modified) (2 diffs)
-
parts/WordprocessingML/ImageJpegPart.java (modified) (2 diffs)
-
parts/WordprocessingML/ImagePngPart.java (modified) (2 diffs)
-
parts/WordprocessingML/ImageTiffPart.java (modified) (2 diffs)
-
parts/relationships/RelationshipsPart.java (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/docx4j/src/main/java/org/docx4j/openpackaging/io/Load.java
r608 r673 29 29 import javax.jcr.Session; 30 30 31 import org.apache.commons.vfs.FileContent; 32 import org.apache.commons.vfs.FileObject; 33 import org.apache.commons.vfs.FileSystemException; 34 import org.apache.commons.vfs.VFS; 31 35 import org.apache.log4j.Logger; 32 36 import org.docx4j.JcrNodeMapper.NodeMapper; … … 40 44 import org.docx4j.openpackaging.packages.Package; 41 45 import org.docx4j.openpackaging.packages.WordprocessingMLPackage; 46 import org.docx4j.openpackaging.parts.ExternalTarget; 42 47 import org.docx4j.openpackaging.parts.Part; 43 48 import org.docx4j.openpackaging.parts.PartName; 44 49 import org.docx4j.openpackaging.parts.WordprocessingML.BinaryPart; 50 import org.docx4j.openpackaging.parts.WordprocessingML.ImageGifPart; 51 import org.docx4j.openpackaging.parts.WordprocessingML.ImageJpegPart; 52 import org.docx4j.openpackaging.parts.WordprocessingML.ImagePngPart; 45 53 import org.dom4j.Document; 46 54 import org.dom4j.io.OutputFormat; … … 58 66 public ContentTypeManager ctm; 59 67 68 protected boolean loadExternalTargets = false; 69 public void loadExternalTargets(boolean loadExternalTargets) { 70 this.loadExternalTargets = loadExternalTargets; 71 } 72 60 73 protected static void debugPrint( Document coreDoc) { 61 74 try { … … 158 171 } 159 172 160 173 public static BinaryPart getExternalResource(String absoluteTarget) throws Docx4JException { 174 175 try { 176 FileObject fo = VFS.getManager().resolveFile(absoluteTarget); 177 178 ExternalTarget externalTarget = new ExternalTarget(absoluteTarget); 179 180 // Assume it is a binary part, though there is no reason in principle 181 // that it couldn't be an XML part.. 182 BinaryPart bp; 183 if (absoluteTarget.toLowerCase().endsWith(".gif" )) { 184 185 bp = new ImageGifPart(externalTarget); 186 187 } else if (absoluteTarget.toLowerCase().endsWith(".jpeg" ) 188 || absoluteTarget.toLowerCase().endsWith(".jpg" )) { 189 190 bp = new ImageJpegPart(externalTarget); 191 192 } else if (absoluteTarget.toLowerCase().endsWith(".png" )) { 193 194 bp = new ImagePngPart(externalTarget); 195 196 } else { 197 log.warn("Using simple BinaryPart for " + absoluteTarget); 198 bp = new BinaryPart(externalTarget); 199 } 200 201 FileContent fc = fo.getContent(); 202 bp.setBinaryData(fc.getInputStream()); 203 204 return bp; 205 206 } catch (FileSystemException exc) { 207 exc.printStackTrace(); 208 throw new Docx4JException("Couldn't get FileObject", exc); 209 } 210 211 } 161 212 162 213 } -
trunk/docx4j/src/main/java/org/docx4j/openpackaging/io/LoadFromJCR.java
r638 r673 500 500 501 501 } else { 502 // EXTERNAL 503 /* "When set to External, the target attribute may be a relative 504 * reference or a URI. If the target attribute is a relative 505 * reference, then that reference is interpreted relative to the 506 * location of the package." 507 */ 508 509 log.warn("Encountered external resource " + r.getTarget() 510 + " of type " + r.getType() ); 511 512 // As of 1 May 2008, we don't do anything with these yet. 513 // No need to create a Part out of them until such time as 514 // we need to read the contents. (External resources don't 515 // seem to necessarily be described in [ContentTypes].xml ) 516 517 // When the document is saved, the relationship is simply 518 // written again. 519 502 // EXTERNAL 503 if (loadExternalTargets) { 504 log.warn("Loading external resource " + r.getTarget() 505 + " of type " + r.getType() ); 506 BinaryPart bp = getExternalResource(r.getTarget()); 507 pkg.getExternalResources().put(bp.getExternalTarget(), bp); 508 } else { 509 log.warn("Encountered (but not loading) external resource " + r.getTarget() 510 + " of type " + r.getType() ); 511 } 520 512 return; 521 513 } -
trunk/docx4j/src/main/java/org/docx4j/openpackaging/io/LoadFromVFSZipFile.java
r298 r673 54 54 // "webdav://jojada:password@192.168.23.129:8080/alfresco/webdav/User%20Homes/jojada/This%20is%20Heading1.docx"; 55 55 log.info("Path: " + filepath ); 56 LoadFromVFSZipFile loader = new LoadFromVFSZipFile( );56 LoadFromVFSZipFile loader = new LoadFromVFSZipFile(true); 57 57 loader.get(filepath); 58 58 } 59 59 60 60 private LoadFromZipFile _loadFromZipFile; 61 62 public LoadFromVFSZipFile() { 63 this(true); 64 } 61 65 62 public LoadFromVFSZipFile( ) {66 public LoadFromVFSZipFile(boolean loadExternalTargets) { 63 67 _loadFromZipFile = new LoadFromZipFile(); 68 _loadFromZipFile.loadExternalTargets(loadExternalTargets); 64 69 } 65 70 66 public LoadFromVFSZipFile(ContentTypeManager ctm ) {71 public LoadFromVFSZipFile(ContentTypeManager ctm, boolean loadExternalTargets) { 67 72 _loadFromZipFile = new LoadFromZipFile(ctm); 73 _loadFromZipFile.loadExternalTargets(loadExternalTargets); 68 74 } 69 75 -
trunk/docx4j/src/main/java/org/docx4j/openpackaging/io/LoadFromZipFile.java
r669 r673 354 354 355 355 } else { 356 // EXTERNAL 357 /* "When set to External, the target attribute may be a relative 358 * reference or a URI. If the target attribute is a relative 359 * reference, then that reference is interpreted relative to the 360 * location of the package." 361 */ 362 363 log.warn("Encountered external resource " + r.getTarget() 364 + " of type " + r.getType() ); 365 366 // As of 1 May 2008, we don't do anything with these yet. 367 // No need to create a Part out of them until such time as 368 // we need to read the contents. (External resources don't 369 // seem to necessarily be described in [ContentTypes].xml ) 370 371 // When the document is saved, the relationship is simply 372 // written again. 373 356 // EXTERNAL 357 if (loadExternalTargets) { 358 log.warn("Loading external resource " + r.getTarget() 359 + " of type " + r.getType() ); 360 BinaryPart bp = getExternalResource(r.getTarget()); 361 pkg.getExternalResources().put(bp.getExternalTarget(), bp); 362 } else { 363 log.warn("Encountered (but not loading) external resource " + r.getTarget() 364 + " of type " + r.getType() ); 365 } 374 366 return; 375 367 } -
trunk/docx4j/src/main/java/org/docx4j/openpackaging/packages/Package.java
r587 r673 21 21 22 22 package org.docx4j.openpackaging.packages; 23 24 import java.util.HashMap; 23 25 24 26 import org.apache.log4j.Logger; … … 31 33 import org.docx4j.openpackaging.parts.DocPropsCustomPart; 32 34 import org.docx4j.openpackaging.parts.DocPropsExtendedPart; 35 import org.docx4j.openpackaging.parts.ExternalTarget; 33 36 import org.docx4j.openpackaging.parts.Part; 34 37 import org.docx4j.openpackaging.parts.PartName; … … 51 54 * parts in the package (_except_ relationship parts), 52 55 * not just those referred to by the package-level relationships. 56 * It doesn't include external resources. 53 57 */ 54 58 protected Parts parts = new Parts(); … … 59 63 public Parts getParts() { 60 64 65 // Having a separate Parts object doesn't really buy 66 // us much, but live with it... 67 61 68 return parts; 62 69 } 70 71 protected HashMap<ExternalTarget, Part> externalResources 72 = new HashMap<ExternalTarget, Part>(); 73 public HashMap<ExternalTarget, Part> getExternalResources() { 74 return externalResources; 75 } 63 76 64 77 protected ContentTypeManager contentTypeManager; -
trunk/docx4j/src/main/java/org/docx4j/openpackaging/parts/WordprocessingML/BinaryPart.java
r610 r673 27 27 import org.apache.poi.poifs.filesystem.DocumentInputStream; 28 28 import org.docx4j.openpackaging.exceptions.InvalidFormatException; 29 import org.docx4j.openpackaging.parts.ExternalTarget; 29 30 import org.docx4j.openpackaging.parts.Part; 30 31 import org.docx4j.openpackaging.parts.PartName; … … 41 42 // provide that information. 42 43 44 } 45 46 47 ExternalTarget externalTarget = null; 48 public BinaryPart(ExternalTarget externalTarget) { 49 50 this.externalTarget = externalTarget; 51 52 } 53 public ExternalTarget getExternalTarget() { 54 return externalTarget; 43 55 } 44 56 -
trunk/docx4j/src/main/java/org/docx4j/openpackaging/parts/WordprocessingML/BinaryPartAbstractImage.java
r633 r673 47 47 import org.docx4j.openpackaging.exceptions.InvalidFormatException; 48 48 import org.docx4j.openpackaging.packages.WordprocessingMLPackage; 49 import org.docx4j.openpackaging.parts.ExternalTarget; 49 50 import org.docx4j.openpackaging.parts.Part; 50 51 import org.docx4j.openpackaging.parts.PartName; … … 70 71 71 72 } 73 74 public BinaryPartAbstractImage(ExternalTarget externalTarget) { 75 super(externalTarget); 76 } 77 72 78 73 79 public static String generateName() { -
trunk/docx4j/src/main/java/org/docx4j/openpackaging/parts/WordprocessingML/ImageGifPart.java
r605 r673 26 26 import org.docx4j.openpackaging.contenttype.ContentTypes; 27 27 import org.docx4j.openpackaging.exceptions.InvalidFormatException; 28 import org.docx4j.openpackaging.parts.ExternalTarget; 28 29 import org.docx4j.openpackaging.parts.Part; 29 30 import org.docx4j.openpackaging.parts.PartName; … … 43 44 } 44 45 46 public ImageGifPart(ExternalTarget externalTarget) { 47 super(externalTarget); 48 init(); 49 } 50 45 51 public void init() { 46 52 // Used if this Part is added to [Content_Types].xml -
trunk/docx4j/src/main/java/org/docx4j/openpackaging/parts/WordprocessingML/ImageJpegPart.java
r605 r673 26 26 import org.docx4j.openpackaging.contenttype.ContentTypes; 27 27 import org.docx4j.openpackaging.exceptions.InvalidFormatException; 28 import org.docx4j.openpackaging.parts.ExternalTarget; 28 29 import org.docx4j.openpackaging.parts.Part; 29 30 import org.docx4j.openpackaging.parts.PartName; … … 43 44 } 44 45 46 public ImageJpegPart(ExternalTarget externalTarget) { 47 super(externalTarget); 48 init(); 49 } 50 51 45 52 public void init() { 46 53 // Used if this Part is added to [Content_Types].xml -
trunk/docx4j/src/main/java/org/docx4j/openpackaging/parts/WordprocessingML/ImagePngPart.java
r605 r673 26 26 import org.docx4j.openpackaging.contenttype.ContentTypes; 27 27 import org.docx4j.openpackaging.exceptions.InvalidFormatException; 28 import org.docx4j.openpackaging.parts.ExternalTarget; 28 29 import org.docx4j.openpackaging.parts.Part; 29 30 import org.docx4j.openpackaging.parts.PartName; … … 44 45 } 45 46 47 public ImagePngPart(ExternalTarget externalTarget) { 48 super(externalTarget); 49 init(); 50 } 51 46 52 public void init() { 47 53 // Used if this Part is added to [Content_Types].xml -
trunk/docx4j/src/main/java/org/docx4j/openpackaging/parts/WordprocessingML/ImageTiffPart.java
r605 r673 26 26 import org.docx4j.openpackaging.contenttype.ContentTypes; 27 27 import org.docx4j.openpackaging.exceptions.InvalidFormatException; 28 import org.docx4j.openpackaging.parts.ExternalTarget; 28 29 import org.docx4j.openpackaging.parts.Part; 29 30 import org.docx4j.openpackaging.parts.PartName; … … 43 44 } 44 45 46 public ImageTiffPart(ExternalTarget externalTarget) { 47 super(externalTarget); 48 init(); 49 } 50 45 51 public void init() { 46 52 // Used if this Part is added to [Content_Types].xml -
trunk/docx4j/src/main/java/org/docx4j/openpackaging/parts/relationships/RelationshipsPart.java
r668 r673 74 74 import org.docx4j.openpackaging.Base; 75 75 import org.docx4j.openpackaging.packages.Package; 76 import org.docx4j.openpackaging.parts.ExternalTarget; 76 77 import org.docx4j.openpackaging.parts.Part; 77 78 import org.docx4j.openpackaging.parts.PartName; … … 292 293 log.info(" source is " + sourceP.getPartName().toString() ); 293 294 // eg rId1 points to fonts/font1.odttf 294 295 URI uri = null; 296 297 try { 298 uri = org.docx4j.openpackaging.URIHelper 299 .resolvePartUri(sourceP.partName.getURI(), new URI( 300 r.getTarget())); 301 } catch (URISyntaxException e) { 302 log.error("Cannot convert " + r.getTarget() 303 + " in a valid relationship URI-> ignored", e); 304 } 305 306 307 try { 308 return getPackage().getParts().get( new PartName(uri, true )); 309 } catch (InvalidFormatException e) { 310 log.error("Couldn't get part using PartName: " + uri, e); 311 return null; 295 296 if (r.getTargetMode() == null 297 || !r.getTargetMode().equals("External") ) { 298 299 // Usual case 300 URI uri = null; 301 302 try { 303 uri = org.docx4j.openpackaging.URIHelper 304 .resolvePartUri(sourceP.partName.getURI(), new URI( 305 r.getTarget())); 306 } catch (URISyntaxException e) { 307 log.error("Cannot convert " + r.getTarget() 308 + " in a valid relationship URI-> ignored", e); 309 } 310 311 try { 312 return getPackage().getParts().get( new PartName(uri, true )); 313 } catch (InvalidFormatException e) { 314 log.error("Couldn't get part using PartName: " + uri, e); 315 return null; 316 } 317 318 } else { 319 // EXTERNAL 320 return getPackage().getExternalResources().get( 321 new ExternalTarget( r.getTarget() ) ); 322 // TODO - doesn't handle a relative reference, 323 // because the keys are absolute references 312 324 } 313 325 }
Note: See TracChangeset
for help on using the changeset viewer.
