//private void getPart(ZipFile zf, Package pkg, RelationshipsPart rp, Relationship r)
private void getPart(HashMap<String, ByteArray> partByteArrays, OpcPackage pkg, RelationshipsPart rp,
Relationship r, ContentTypeManager ctm)
throws Docx4JException, InvalidFormatException, URISyntaxException {
Base source = null;
String resolvedPartUri = null;
if (r.getType().equals(Namespaces.HYPERLINK)) {
// Could be Internal or External
// Example of Internal is w:drawing/wp:inline/wp:docPr/a:hlinkClick
log.info("Encountered (but not loading) hyperlink " + r.getTarget() );
return;
} else
if (r.getTargetMode() == null
|| !r.getTargetMode().equals("External") ) {
// Usual case
source = rp.getSourceP();
resolvedPartUri = URIHelper.resolvePartUri(rp.getSourceURI(), new URI(r.getTarget() ) ).toString();
// Now drop leading "/'
resolvedPartUri = resolvedPartUri.substring(1);
// Now normalise it .. ie abc/def/../ghi
// becomes abc/ghi
// Maybe this isn't necessary with a zip file,
// - ZipFile class may be smart enough to do it.
// But it is certainly necessary in the JCR case.
// resolvedPartUri = (new java.net.URI(resolvedPartUri)).normalize().toString();
// log.info("Normalised, it is " + resolvedPartUri );
} else {
// EXTERNAL
if (loadExternalTargets &&
r.getType().equals( Namespaces.IMAGE ) ) {
// It could instead be, for example, of type hyperlink,
// and we don't want to try to fetch that
log.info("Loading external resource " + r.getTarget()
+ " of type " + r.getType() );
BinaryPart bp = ExternalResourceUtils.getExternalResource(r.getTarget());
pkg.getExternalResources().put(bp.getExternalTarget(), bp);
} else {
log.info("Encountered (but not loading) external resource " + r.getTarget()
+ " of type " + r.getType() );
}
return;
}
String relationshipType = r.getType();
Part part;
if (pkg.handled.get(resolvedPartUri)!=null) {
// The source Part (or Package) might have a convenience
// method for this
part = pkg.getParts().getParts().get(new PartName("/" + resolvedPartUri));
if (source.setPartShortcut(part, relationshipType ) ) {
log.debug("Convenience method established from " + source.getPartName()
+ " to " + part.getPartName());
}
// v3.2.1: also note this additional source rel
part.getSourceRelationships().add(r);
return;
}
part = getRawPart(partByteArrays, ctm, resolvedPartUri, r); // will throw exception if null
// The source Part (or Package) might have a convenience
// method for this
if (source.setPartShortcut(part, relationshipType ) ) {
log.debug("Convenience method established from " + source.getPartName()
+ " to " + part.getPartName());
}
if (part instanceof BinaryPart