From c9f6e74ddf229f879ea7df1b389d6018286ca1aa Mon Sep 17 00:00:00 2001 From: Mehdi Houshmand Date: Tue, 26 Jun 2012 12:31:50 +0000 Subject: Improved the handling of defaults for PDF config and general clean up git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/branches/Temp_URI_Unification@1353992 13f79535-47bb-0310-9956-ffa450edef68 --- .../org/apache/fop/afp/util/AFPResourceUtil.java | 60 ++++++++++++---------- 1 file changed, 32 insertions(+), 28 deletions(-) (limited to 'src/java/org/apache/fop/afp') diff --git a/src/java/org/apache/fop/afp/util/AFPResourceUtil.java b/src/java/org/apache/fop/afp/util/AFPResourceUtil.java index 538f2b880..979376b3e 100644 --- a/src/java/org/apache/fop/afp/util/AFPResourceUtil.java +++ b/src/java/org/apache/fop/afp/util/AFPResourceUtil.java @@ -92,13 +92,10 @@ public final class AFPResourceUtil { throws UnsupportedEncodingException { //The first 8 bytes of the field data represent the resource name byte[] nameBytes = new byte[8]; - - byte[] fieldData = field.getData(); - if (fieldData.length < 8) { - throw new IllegalArgumentException("Field data does not contain a resource name"); - } - System.arraycopy(fieldData, 0, nameBytes, 0, 8); - return new String(nameBytes, AFPConstants.EBCIDIC_ENCODING); + System.arraycopy(field.getData(), 0, nameBytes, 0, 8); + String asciiName; + asciiName = new String(nameBytes, AFPConstants.EBCIDIC_ENCODING); + return asciiName; } /** @@ -131,13 +128,12 @@ public final class AFPResourceUtil { public static void copyNamedResource(String name, final InputStream in, final OutputStream out) throws IOException { final MODCAParser parser = new MODCAParser(in); - Collection resourceNames = new java.util.HashSet(); + Collection resourceNames = new java.util.HashSet(); //Find matching "Begin" field final UnparsedStructuredField fieldBegin; while (true) { - final UnparsedStructuredField field = parser.readNextStructuredField(); - + UnparsedStructuredField field = parser.readNextStructuredField(); if (field == null) { throw new IOException("Requested resource '" + name + "' not found. Encountered resource names: " + resourceNames); @@ -146,10 +142,8 @@ public final class AFPResourceUtil { if (field.getSfTypeCode() != TYPE_CODE_BEGIN) { //0xA8=Begin continue; //Not a "Begin" field } - final String resourceName = getResourceName(field); - + String resourceName = getResourceName(field); resourceNames.add(resourceName); - if (resourceName.equals(name)) { if (LOG.isDebugEnabled()) { LOG.debug("Start of requested structured field found:\n" @@ -176,35 +170,45 @@ public final class AFPResourceUtil { if (wrapInResource) { ResourceObject resourceObject = new ResourceObject(name) { protected void writeContent(OutputStream os) throws IOException { - copyNamedStructuredFields(name, fieldBegin, parser, out); + copyStructuredFields(name, fieldBegin, parser, out); } }; resourceObject.setType(ResourceObject.TYPE_PAGE_SEGMENT); resourceObject.writeToStream(out); } else { - copyNamedStructuredFields(name, fieldBegin, parser, out); + copyStructuredFields(name, fieldBegin, parser, out); } } - private static void copyNamedStructuredFields(final String name, - UnparsedStructuredField fieldBegin, MODCAParser parser, - OutputStream out) throws IOException { + private static void copyStructuredFields(String name, UnparsedStructuredField fieldBegin, + MODCAParser parser, OutputStream out) throws IOException { + boolean inRequestedResource; - UnparsedStructuredField field = fieldBegin; + //The "Begin" field first + out.write(MODCAParser.CARRIAGE_CONTROL_CHAR); + fieldBegin.writeTo(out); + UnparsedStructuredField field; - while (true) { + //Then the rest of the fields until the corresponding "End" field + inRequestedResource = true; + do { + field = parser.readNextStructuredField(); if (field == null) { - throw new IOException("Ending structured field not found for resource " + name); + break; //Unexpected EOF } - out.write(MODCAParser.CARRIAGE_CONTROL_CHAR); - field.writeTo(out); - if (field.getSfTypeCode() == TYPE_CODE_END - && fieldBegin.getSfCategoryCode() == field.getSfCategoryCode() - && name.equals(getResourceName(field))) { - break; + if (field.getSfTypeCode() == TYPE_CODE_END) { + String resourceName = getResourceName(field); + if (resourceName.equals(name)) { + inRequestedResource = false; //Signal end of loop + } } - field = parser.readNextStructuredField(); + out.write(MODCAParser.CARRIAGE_CONTROL_CHAR); + field.writeTo(out); + } while (inRequestedResource); + if (inRequestedResource) { + throw new IOException("Ending structured field not found for resource " + name); } } + } -- cgit v1.2.3