aboutsummaryrefslogtreecommitdiffstats
path: root/src/java
diff options
context:
space:
mode:
Diffstat (limited to 'src/java')
-rw-r--r--src/java/org/apache/fop/render/afp/AFPRenderer.java27
-rw-r--r--src/java/org/apache/fop/render/afp/DataObjectInfo.java38
-rw-r--r--src/java/org/apache/fop/render/afp/ImageObjectInfo.java1
-rw-r--r--src/java/org/apache/fop/render/afp/ResourceInfo.java130
-rw-r--r--src/java/org/apache/fop/render/afp/ResourceLevel.java160
-rw-r--r--src/java/org/apache/fop/render/afp/modca/AFPConstants.java5
-rw-r--r--src/java/org/apache/fop/render/afp/modca/AFPDataStream.java97
-rw-r--r--src/java/org/apache/fop/render/afp/modca/AbstractPageObject.java2
-rw-r--r--src/java/org/apache/fop/render/afp/modca/AbstractResourceEnvironmentGroupContainer.java12
-rw-r--r--src/java/org/apache/fop/render/afp/modca/AbstractResourceGroupContainer.java6
-rw-r--r--src/java/org/apache/fop/render/afp/modca/AbstractStructuredAFPObject.java17
-rw-r--r--src/java/org/apache/fop/render/afp/modca/DataObjectAccessor.java5
-rw-r--r--src/java/org/apache/fop/render/afp/modca/ImageSegment.java2
-rw-r--r--src/java/org/apache/fop/render/afp/modca/IncludeObject.java61
-rw-r--r--src/java/org/apache/fop/render/afp/modca/MapDataResource.java12
-rw-r--r--src/java/org/apache/fop/render/afp/modca/MapPageOverlay.java4
-rw-r--r--src/java/org/apache/fop/render/afp/modca/ObjectContainer.java14
-rw-r--r--src/java/org/apache/fop/render/afp/modca/PageObject.java110
-rw-r--r--src/java/org/apache/fop/render/afp/modca/ResourceEnvironmentGroup.java16
-rw-r--r--src/java/org/apache/fop/render/afp/modca/ResourceGroup.java35
-rw-r--r--src/java/org/apache/fop/render/afp/modca/ResourceObject.java56
-rw-r--r--src/java/org/apache/fop/render/afp/modca/triplets/FullyQualifiedNameTriplet.java10
-rw-r--r--src/java/org/apache/fop/render/afp/modca/triplets/MappingOptionTriplet.java68
-rw-r--r--src/java/org/apache/fop/render/afp/modca/triplets/MeasurementUnitsTriplet.java9
24 files changed, 556 insertions, 341 deletions
diff --git a/src/java/org/apache/fop/render/afp/AFPRenderer.java b/src/java/org/apache/fop/render/afp/AFPRenderer.java
index 90f07cb8b..fbcd368fd 100644
--- a/src/java/org/apache/fop/render/afp/AFPRenderer.java
+++ b/src/java/org/apache/fop/render/afp/AFPRenderer.java
@@ -513,18 +513,20 @@ public class AFPRenderer extends AbstractPathOrientedRenderer {
int res = getResolution();
final int rotation = 0;
getAFPDataStream().startOverlay(x, y, w, h, res, res, rotation);
+// Color col = back.getColor();
+// getAFPDataStream().createShading(x, y, w, h, col);
}
}
- /**
- * {@inheritDoc}
- */
+// /**
+// * {@inheritDoc}
+// */
protected void renderBlock(Block block) {
- // new block so start page segment
- getAFPDataStream().startPageSegment();
+// // new block so start page segment
+//// getAFPDataStream().startPageSegment();
super.renderBlock(block);
getAFPDataStream().endOverlay();
- getAFPDataStream().endPageSegment();
+//// getAFPDataStream().endPageSegment();
}
/**
@@ -763,13 +765,12 @@ public class AFPRenderer extends AbstractPathOrientedRenderer {
* {@inheritDoc}
*/
public void fillRect(float x, float y, float width, float height) {
- /*
- * getAFPDataStream().createShading( pts2units(x), pts2units(y),
- * pts2units(width), pts2units(height), currentColor);
- */
- getAFPDataStream().createLine(pts2units(x), pts2units(y),
- pts2units(x + width), pts2units(y), pts2units(height),
+ getAFPDataStream().createShading(
+ pts2units(x), pts2units(y), pts2units(width), pts2units(height),
currentColor);
+// getAFPDataStream().createLine(pts2units(x), pts2units(y),
+// pts2units(x + width), pts2units(y), pts2units(height),
+// currentColor);
}
/**
@@ -921,7 +922,7 @@ public class AFPRenderer extends AbstractPathOrientedRenderer {
int x = origin.x + posInt.x;
int y = origin.y + posInt.y;
- String name = (String) getPageSegments().get(uri);
+ String name = (String)getPageSegments().get(uri);
if (name != null) {
getAFPDataStream().createIncludePageSegment(name, mpts2units(x),
mpts2units(y));
diff --git a/src/java/org/apache/fop/render/afp/DataObjectInfo.java b/src/java/org/apache/fop/render/afp/DataObjectInfo.java
index e56e6338c..00044da96 100644
--- a/src/java/org/apache/fop/render/afp/DataObjectInfo.java
+++ b/src/java/org/apache/fop/render/afp/DataObjectInfo.java
@@ -57,6 +57,12 @@ public class DataObjectInfo {
private ResourceInfo resourceInfo = DEFAULT_RESOURCE_INFO;
/**
+ * Default constructor
+ */
+ public DataObjectInfo() {
+ }
+
+ /**
* Sets the data object uri
* @param uri the data object uri
*/
@@ -111,12 +117,6 @@ public class DataObjectInfo {
protected void setHeightRes(int heightRes) {
this.heightRes = heightRes;
}
-
- /**
- * Default constructor
- */
- public DataObjectInfo() {
- }
/**
* @return the uri of this data object
@@ -226,16 +226,19 @@ public class DataObjectInfo {
}
QName resourceLevelKey = new QName(AFPElementMapping.NAMESPACE, RESOURCE_LEVEL);
if (foreignAttributes.containsKey(resourceLevelKey)) {
- String level = (String)foreignAttributes.get(resourceLevelKey);
- if (resourceInfo.setLevel(level)) {
- if (resourceInfo.isExternal()) {
+ String level = (String)foreignAttributes.get(resourceLevelKey);
+ ResourceLevel resourceLevel = null;
+ try {
+ resourceLevel = ResourceLevel.valueOf(level);
+ resourceInfo.setLevel(resourceLevel);
+ if (resourceLevel.isExternal()) {
QName resourceGroupFileKey = new QName(AFPElementMapping.NAMESPACE,
RESOURCE_GROUP_FILE);
String resourceExternalDest
= (String)foreignAttributes.get(resourceGroupFileKey);
if (resourceExternalDest == null) {
String msg = RESOURCE_GROUP_FILE + " not specified";
- log.warn(msg);
+ log.error(msg);
throw new UnsupportedOperationException(msg);
}
File resourceExternalGroupFile = new File(resourceExternalDest);
@@ -245,25 +248,26 @@ public class DataObjectInfo {
security.checkWrite(resourceExternalGroupFile.getPath());
}
} catch (SecurityException ex) {
- log.warn("unable to gain write access to external resource file: "
+ log.error("unable to gain write access to external resource file: "
+ resourceExternalDest);
}
-
+
try {
boolean exists = resourceExternalGroupFile.exists();
if (exists) {
log.warn("overwritting external resource file: "
+ resourceExternalDest);
}
- resourceInfo.setExternalResourceGroupFile(resourceExternalGroupFile);
+ resourceLevel.setExternalResourceGroupFile(resourceExternalGroupFile);
} catch (SecurityException ex) {
- log.warn("unable to gain read access to external resource file: "
+ log.error("unable to gain read access to external resource file: "
+ resourceExternalDest);
}
}
- } else {
- String msg = RESOURCE_LEVEL + " is null or not valid";
- log.warn(msg);
+ } catch (IllegalArgumentException e) {
+ // default to print-file resource level if invalid resource level provided
+ resourceLevel = new ResourceLevel(ResourceLevel.PRINT_FILE);
+ log.error(e.getMessage() + ", defaulting to '" + resourceLevel + "' level");
}
}
}
diff --git a/src/java/org/apache/fop/render/afp/ImageObjectInfo.java b/src/java/org/apache/fop/render/afp/ImageObjectInfo.java
index 16f9d1103..cf5e7f951 100644
--- a/src/java/org/apache/fop/render/afp/ImageObjectInfo.java
+++ b/src/java/org/apache/fop/render/afp/ImageObjectInfo.java
@@ -35,6 +35,7 @@ public class ImageObjectInfo extends DataObjectInfo {
* Default constructor
*/
public ImageObjectInfo() {
+ super();
}
/**
diff --git a/src/java/org/apache/fop/render/afp/ResourceInfo.java b/src/java/org/apache/fop/render/afp/ResourceInfo.java
index 86add31d2..3c95b2f65 100644
--- a/src/java/org/apache/fop/render/afp/ResourceInfo.java
+++ b/src/java/org/apache/fop/render/afp/ResourceInfo.java
@@ -19,124 +19,21 @@
package org.apache.fop.render.afp;
-import java.io.File;
-
/**
* The level at which a resource is to reside in the AFP output
*/
public class ResourceInfo {
- private static final String LEVEL_EXTERNAL = "external";
-
- private static final String LEVEL_PRINT_FILE = "print-file";
-
- private static final String LEVEL_DOCUMENT = "document";
-
- private static final String LEVEL_PAGE_GROUP = "page-group";
-
- private static final String LEVEL_PAGE = "page";
-
+
/**
* the reference name of this resource
*/
private String name = null;
-
+
/**
- * where the resource will reside in the AFP output
+ * the resource level (default to print-file)
*/
- private String level = LEVEL_PAGE; // default is page level
+ private ResourceLevel level = new ResourceLevel(ResourceLevel.PRINT_FILE);
- /**
- * the external resource group file
- */
- private File externalResourceGroupFile = null;
-
- /**
- * @return true if this is a page level resource group
- */
- public boolean isPage() {
- return level.equals(LEVEL_PAGE);
- }
-
- /**
- * @return true if this is a page group level resource group
- */
- public boolean isPageGroup() {
- return level.equals(LEVEL_PAGE_GROUP);
- }
-
- /**
- * @return true if this is a document level resource group
- */
- public boolean isDocument() {
- return level.equals(LEVEL_DOCUMENT);
- }
-
- /**
- * @return true if this is an external level resource group
- */
- public boolean isExternal() {
- return level.equals(LEVEL_EXTERNAL);
- }
-
- /**
- * @return true if this is a print-file level resource group
- */
- public boolean isPrintFile() {
- return level.equals(LEVEL_PRINT_FILE);
- }
-
- private boolean isValid(String lvl) {
- return lvl.equals(LEVEL_EXTERNAL)
- || lvl.equals(LEVEL_PRINT_FILE)
- || lvl.equals(LEVEL_DOCUMENT)
- || lvl.equals(LEVEL_PAGE_GROUP)
- || lvl.equals(LEVEL_PAGE);
- }
-
- /**
- * Sets the resource placement level within the AFP output
- * @param lvl the resource level (page, page-group, document, print-file or external)
- * @return true if the resource level was successfully set
- */
- public boolean setLevel(String lvl) {
- if (lvl != null && isValid(lvl)) {
- this.level = lvl;
- return true;
- }
- return false;
- }
-
- /**
- * @return the external resource group file of this resource
- */
- public File getExternalResourceGroupFile() {
- return this.externalResourceGroupFile;
- }
-
- /**
- * @return the destination file path of the external resource group file
- */
- public String getExternalResourceGroupDest() {
- if (externalResourceGroupFile != null) {
- return externalResourceGroupFile.getAbsolutePath();
- }
- return null;
- }
-
- /**
- * @return true if this resource has a defined external resource group file destination
- */
- public boolean hasExternalResourceGroupFile() {
- return getExternalResourceGroupFile() != null;
- }
-
- /**
- * Sets the external destination of the resource
- * @param file the external resource group file
- */
- public void setExternalResourceGroupFile(File file) {
- this.externalResourceGroupFile = file;
- }
/**
* Sets the resource reference name
@@ -157,8 +54,21 @@ public class ResourceInfo {
* {@inheritDoc}
*/
public String toString() {
- return "ResourceInfo(name=" + name + ", level=" + level
- + (isExternal() ? ", externalResourceGroupFile=" + externalResourceGroupFile : "")
- + ")";
+ return "ResourceInfo(" + (name != null ? "name=" + name : "" ) + ", level=" + level + ")";
+ }
+
+ /**
+ * @return the resource level
+ */
+ public ResourceLevel getLevel() {
+ return this.level;
+ }
+
+ /**
+ * Sets the resource level
+ * @param resourceLevel the resource level
+ */
+ public void setLevel(ResourceLevel resourceLevel) {
+ this.level = resourceLevel;
}
} \ No newline at end of file
diff --git a/src/java/org/apache/fop/render/afp/ResourceLevel.java b/src/java/org/apache/fop/render/afp/ResourceLevel.java
new file mode 100644
index 000000000..37a8e6dce
--- /dev/null
+++ b/src/java/org/apache/fop/render/afp/ResourceLevel.java
@@ -0,0 +1,160 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Id$ */
+
+package org.apache.fop.render.afp;
+
+import java.io.File;
+
+/**
+ * A resource level
+ */
+public class ResourceLevel {
+ /** page level **/
+ public static final int PAGE = 0;
+
+ /** page group level **/
+ public static final int PAGE_GROUP = 1;
+
+ /** document level **/
+ public static final int DOCUMENT = 2;
+
+ /** print file level **/
+ public static final int PRINT_FILE = 3;
+
+ /** external level **/
+ public static final int EXTERNAL = 4;
+
+ private static final String NAME_PAGE = "page";
+ private static final String NAME_PAGE_GROUP = "page-group";
+ private static final String NAME_DOCUMENT = "document";
+ private static final String NAME_PRINT_FILE = "print-file";
+ private static final String NAME_EXTERNAL = "external";
+
+ private static final String[] NAMES
+ = new String[] {NAME_PAGE, NAME_PAGE_GROUP, NAME_DOCUMENT, NAME_PRINT_FILE, NAME_EXTERNAL};
+
+ /**
+ * where the resource will reside in the AFP output
+ */
+ private int level = PRINT_FILE; // default is print-file level
+
+ /**
+ * the external resource group file
+ */
+ private File externalResourceGroupFile = null;
+
+ /**
+ * Sets the resource placement level within the AFP output
+ * @param lvl the resource level (page, page-group, document, print-file or external)
+ * @return true if the resource level was successfully set
+ */
+ public static ResourceLevel valueOf(String lvl) {
+ ResourceLevel level = null;
+ for (int i = 0; i < NAMES.length; i++) {
+ if (NAMES[i].equals(lvl)) {
+ level = new ResourceLevel(i);
+ break;
+ }
+ }
+ if (lvl == null) {
+ throw new IllegalArgumentException("Unknown resource level '" + lvl + "'");
+ }
+ return level;
+ }
+
+ /**
+ * Main constructor
+ * @param level the resource level
+ */
+ public ResourceLevel(int level) {
+ this.level = level;
+ }
+
+ /**
+ * @return true if this is a page level resource group
+ */
+ public boolean isPage() {
+ return level == PAGE;
+ }
+
+ /**
+ * @return true if this is a page group level resource group
+ */
+ public boolean isPageGroup() {
+ return level == PAGE_GROUP;
+ }
+
+ /**
+ * @return true if this is a document level resource group
+ */
+ public boolean isDocument() {
+ return level == DOCUMENT;
+ }
+
+ /**
+ * @return true if this is an external level resource group
+ */
+ public boolean isExternal() {
+ return level == EXTERNAL;
+ }
+
+ /**
+ * @return true if this is a print-file level resource group
+ */
+ public boolean isPrintFile() {
+ return level == PRINT_FILE;
+ }
+
+ /**
+ * @return the external resource group file of this resource
+ */
+ public File getExternalResourceGroupFile() {
+ return this.externalResourceGroupFile;
+ }
+
+ /**
+ * @return the destination file path of the external resource group file
+ */
+ public String getExternalResourceGroupFilePath() {
+ if (externalResourceGroupFile != null) {
+ return externalResourceGroupFile.getAbsolutePath();
+ }
+ return null;
+ }
+
+ /**
+ * Sets the external destination of the resource
+ * @param file the external resource group file
+ */
+ public void setExternalResourceGroupFile(File file) {
+ this.externalResourceGroupFile = file;
+ }
+
+ /**
+ * @return true if this resource has a defined external resource group file destination
+ */
+ public boolean hasExternalResourceGroupFile() {
+ return getExternalResourceGroupFile() != null;
+ }
+
+ /** {@inheritDoc} */
+ public String toString() {
+ return NAMES[level] + (isExternal() ? ", file=" + externalResourceGroupFile : "");
+ }
+} \ No newline at end of file
diff --git a/src/java/org/apache/fop/render/afp/modca/AFPConstants.java b/src/java/org/apache/fop/render/afp/modca/AFPConstants.java
index 73c39f2f0..e2e2a8bbe 100644
--- a/src/java/org/apache/fop/render/afp/modca/AFPConstants.java
+++ b/src/java/org/apache/fop/render/afp/modca/AFPConstants.java
@@ -34,4 +34,9 @@ public interface AFPConstants {
* The encoding to use to convert to ASCII
*/
String ASCII_ENCODING = "Cp1252";
+
+ /**
+ * The encoding to use to convert to US ASCII (7 bit)
+ */
+ String US_ASCII_ENCODING = "US-ASCII";
}
diff --git a/src/java/org/apache/fop/render/afp/modca/AFPDataStream.java b/src/java/org/apache/fop/render/afp/modca/AFPDataStream.java
index ace60e331..fdb0e5cc3 100644
--- a/src/java/org/apache/fop/render/afp/modca/AFPDataStream.java
+++ b/src/java/org/apache/fop/render/afp/modca/AFPDataStream.java
@@ -31,6 +31,7 @@ import org.apache.commons.logging.LogFactory;
import org.apache.fop.render.afp.AFPFontAttributes;
import org.apache.fop.render.afp.DataObjectInfo;
import org.apache.fop.render.afp.ResourceInfo;
+import org.apache.fop.render.afp.ResourceLevel;
import org.apache.fop.render.afp.fonts.AFPFont;
import org.apache.fop.render.afp.modca.triplets.FullyQualifiedNameTriplet;
import org.apache.fop.render.afp.tools.StringUtils;
@@ -170,7 +171,7 @@ public class AFPDataStream extends AbstractResourceGroupContainer {
/**
* @return the current page
*/
- private AbstractPageObject getCurrentPage() {
+ protected AbstractPageObject getCurrentPage() {
return this.currentPage;
}
@@ -225,14 +226,16 @@ public class AFPDataStream extends AbstractResourceGroupContainer {
endPageGroup();
}
- // Write out any external resource groups
- getExternalResourceGroupManager().writeExternalResources();
-
- // Write out any print-file level resources
- if (hasResources()) {
- getResourceGroup().write(this.outputStream);
+ if (interchangeSet.supportsLevel2()) {
+ // Write out any external resource groups
+ getExternalResourceGroupManager().writeExternalResources();
+
+ // Write out any print-file level resources
+ if (hasResources()) {
+ getResourceGroup().write(this.outputStream);
+ }
}
-
+
// Write out document
if (document != null) {
document.endDocument();
@@ -303,7 +306,14 @@ public class AFPDataStream extends AbstractResourceGroupContainer {
this.currentOverlay = new Overlay(overlayName, width, height, widthRes,
heightRes, overlayRotation);
- getResourceGroup().addObject(currentOverlay);
+ if (interchangeSet.supportsLevel2()) {
+ ResourceObject resourceObject = new ResourceObject(overlayName);
+ resourceObject.setDataObject(currentOverlay);
+ getResourceGroup().addObject(resourceObject);
+ }
+// currentPageGroup.getResourceEnvironmentGroup().addObject(currentOverlay);
+// currentPageObject.getActiveEnvironmentGroup().createOverlay(overlayName);
+
currentPageObject.createIncludePageOverlay(overlayName, x, y, 0);
currentPage = currentOverlay;
setOffsets(0, 0, 0);
@@ -462,13 +472,14 @@ public class AFPDataStream extends AbstractResourceGroupContainer {
dataObjectInfo.setObjectType(objectType);
ResourceInfo resourceInfo = dataObjectInfo.getResourceInfo();
-
+ ResourceLevel resourceLevel = resourceInfo.getLevel();
+
// is MO:DCA-L available?
if (interchangeSet.supportsLevel2()) {
// can this data object use the include object (IOB) referencing
// mechanism?
if (objectType.canBeIncluded()) {
- ResourceGroup resourceGroup = getResourceGroup(resourceInfo);
+ ResourceGroup resourceGroup = getResourceGroup(resourceLevel);
IncludeObject includeObject = resourceGroup.createObject(dataObjectInfo);
// add include to current page
@@ -479,7 +490,7 @@ public class AFPDataStream extends AbstractResourceGroupContainer {
+ "' cannot be referenced with an include so it will be embedded directly");
}
} else {
- if (resourceInfo.isExternal()) {
+ if (resourceLevel.isExternal()) {
log.warn( interchangeSet
+ ": not available, object " + getName() + " will reside inline");
}
@@ -776,23 +787,23 @@ public class AFPDataStream extends AbstractResourceGroupContainer {
/**
* Returns the resource group for a given resource into
*
- * @param resourceInfo
+ * @param level
* resource info
* @return a resource group container for the given resource info
*/
- private ResourceGroup getResourceGroup(ResourceInfo resourceInfo) {
+ private ResourceGroup getResourceGroup(ResourceLevel level) {
ResourceGroup resourceGroup = null;
- if (resourceInfo.isPrintFile()) {
+ if (level.isPrintFile()) {
resourceGroup = getResourceGroup();
- } else if (resourceInfo.isDocument()) {
+ } else if (level.isDocument()) {
resourceGroup = getDocument().getResourceGroup();
- } else if (resourceInfo.isPageGroup()) {
+ } else if (level.isPageGroup()) {
resourceGroup = getCurrentPageGroup().getResourceGroup();
- } else if (resourceInfo.isPage()) {
+ } else if (level.isPage()) {
resourceGroup = currentPageObject.getResourceGroup();
- } else if (resourceInfo.isExternal()) {
+ } else if (level.isExternal()) {
resourceGroup = getExternalResourceGroupManager()
- .getExternalResourceGroup(resourceInfo);
+ .getExternalResourceGroup(level);
}
return resourceGroup;
}
@@ -889,28 +900,28 @@ public class AFPDataStream extends AbstractResourceGroupContainer {
}
/**
- * Returns the corresponding resource group for the given resource info
+ * Returns the corresponding resource group for the given resource level
*
- * @param resourceInfo
- * resource info
- * @return the corresponding resource group for the given resource info
+ * @param level
+ * the resource level
+ * @return the corresponding resource group for the given resource level
*/
- private ResourceGroup getExternalResourceGroup(ResourceInfo resourceInfo) {
+ private ResourceGroup getExternalResourceGroup(ResourceLevel level) {
ResourceGroup resourceGroup;
- // this resource info does not have a an external resource group
+ // this resource info does not have an external resource group
// file definition
- if (!resourceInfo.hasExternalResourceGroupFile()) {
+ if (!level.hasExternalResourceGroupFile()) {
if (defaultResourceGroupFile != null) {
// fallback to default resource group file
- resourceInfo.setExternalResourceGroupFile(defaultResourceGroupFile);
- resourceGroup = getExternalResourceGroup(resourceInfo);
+ level.setExternalResourceGroupFile(defaultResourceGroupFile);
+ resourceGroup = getExternalResourceGroup(level);
} else {
// use print-file level resource group in the absence
// of an external resource group file definition
resourceGroup = container.getResourceGroup();
}
} else {
- File resourceGroupFile = resourceInfo
+ File resourceGroupFile = level
.getExternalResourceGroupFile();
resourceGroup = (ResourceGroup)getExternalResourceGroups().get(resourceGroupFile);
if (resourceGroup == null) {
@@ -930,19 +941,19 @@ public class AFPDataStream extends AbstractResourceGroupContainer {
}
}
- /**
- * Starts a new page segment.
- */
- public void startPageSegment() {
- currentPageObject.startPageSegment();
- }
-
- /**
- * Ends the current page segment.
- */
- public void endPageSegment() {
- currentPageObject.endPageSegment();
- }
+// /**
+// * Starts a new page segment.
+// */
+// public void startPageSegment() {
+// currentPageObject.startPageSegment();
+// }
+//
+// /**
+// * Ends the current page segment.
+// */
+// public void endPageSegment() {
+// currentPageObject.endPageSegment();
+// }
/**
* Sets the MO:DCA interchange set to use
diff --git a/src/java/org/apache/fop/render/afp/modca/AbstractPageObject.java b/src/java/org/apache/fop/render/afp/modca/AbstractPageObject.java
index e1035a6c6..065886a49 100644
--- a/src/java/org/apache/fop/render/afp/modca/AbstractPageObject.java
+++ b/src/java/org/apache/fop/render/afp/modca/AbstractPageObject.java
@@ -355,7 +355,7 @@ public abstract class AbstractPageObject extends AbstractNamedAFPObject {
*/
protected void writeContent(OutputStream os) throws IOException {
super.writeContent(os);
- if (this instanceof PageObject) {
+ if (this instanceof PageObject || this instanceof Overlay) {
getActiveEnvironmentGroup().write(os);
}
writeObjects(this.includePageSegments, os);
diff --git a/src/java/org/apache/fop/render/afp/modca/AbstractResourceEnvironmentGroupContainer.java b/src/java/org/apache/fop/render/afp/modca/AbstractResourceEnvironmentGroupContainer.java
index 9449108eb..4a5785981 100644
--- a/src/java/org/apache/fop/render/afp/modca/AbstractResourceEnvironmentGroupContainer.java
+++ b/src/java/org/apache/fop/render/afp/modca/AbstractResourceEnvironmentGroupContainer.java
@@ -81,18 +81,10 @@ public abstract class AbstractResourceEnvironmentGroupContainer
/**
* @return the resource environment group
*/
- private ResourceEnvironmentGroup getResourceEnvironmentGroup() {
+ protected ResourceEnvironmentGroup getResourceEnvironmentGroup() {
if (resourceEnvironmentGroup == null) {
this.resourceEnvironmentGroup = new ResourceEnvironmentGroup();
}
return this.resourceEnvironmentGroup;
- }
-
- /**
- * Adds a resource mapping to this resource environment group
- * @param obj a resource to be referenced in this resource environment group
- */
- protected void addResource(AbstractStructuredAFPObject obj) {
- getResourceEnvironmentGroup().addObject(obj);
- }
+ }
}
diff --git a/src/java/org/apache/fop/render/afp/modca/AbstractResourceGroupContainer.java b/src/java/org/apache/fop/render/afp/modca/AbstractResourceGroupContainer.java
index 1bdf7d8bd..5df2ed3e8 100644
--- a/src/java/org/apache/fop/render/afp/modca/AbstractResourceGroupContainer.java
+++ b/src/java/org/apache/fop/render/afp/modca/AbstractResourceGroupContainer.java
@@ -169,8 +169,8 @@ public abstract class AbstractResourceGroupContainer extends AbstractPageObject
private static final String GRAPHIC_NAME_PREFIX = "GRA";
// not currently used/implemented
- private static final String BARCODE_NAME_PREFIX = "BAR";
- private static final String OTHER_NAME_PREFIX = "OTH";
+// private static final String BARCODE_NAME_PREFIX = "BAR";
+// private static final String OTHER_NAME_PREFIX = "OTH";
/**
* Helper method to create an image on the current container and to return
@@ -248,9 +248,9 @@ public abstract class AbstractResourceGroupContainer extends AbstractPageObject
* {@inheritDoc}
*/
protected void writeContent(OutputStream os) throws IOException {
- super.writeContent(os);
if (resourceGroup != null) {
resourceGroup.write(os);
}
+ super.writeContent(os);
}
}
diff --git a/src/java/org/apache/fop/render/afp/modca/AbstractStructuredAFPObject.java b/src/java/org/apache/fop/render/afp/modca/AbstractStructuredAFPObject.java
index 1573ea1a4..1a23511f5 100644
--- a/src/java/org/apache/fop/render/afp/modca/AbstractStructuredAFPObject.java
+++ b/src/java/org/apache/fop/render/afp/modca/AbstractStructuredAFPObject.java
@@ -28,6 +28,7 @@ import java.util.Iterator;
import java.util.List;
import org.apache.fop.render.afp.modca.triplets.FullyQualifiedNameTriplet;
+import org.apache.fop.render.afp.modca.triplets.MappingOptionTriplet;
import org.apache.fop.render.afp.modca.triplets.MeasurementUnitsTriplet;
import org.apache.fop.render.afp.modca.triplets.ObjectAreaSizeTriplet;
import org.apache.fop.render.afp.modca.triplets.ObjectClassificationTriplet;
@@ -232,7 +233,7 @@ public abstract class AbstractStructuredAFPObject extends AbstractAFPObject {
}
/**
- * Specifies the extent of an object area in the X and Y directions
+ * Sets the extent of an object area in the X and Y directions
* @param x the x direction extent
* @param y the y direction extent
*/
@@ -242,12 +243,22 @@ public abstract class AbstractStructuredAFPObject extends AbstractAFPObject {
/**
* Sets the measurement units used to specify the units of measure
+ * @param xRes units per base on the x-axis
+ * @param yRes units per base on the y-axis
*/
- public void setMeasurementUnits() {
- addTriplet(new MeasurementUnitsTriplet());
+ public void setMeasurementUnits(int xRes, int yRes) {
+ addTriplet(new MeasurementUnitsTriplet(xRes, xRes));
}
/**
+ * Sets the mapping option
+ * @param optionValue the mapping option value
+ */
+ public void setMappingOption(byte optionValue) {
+ addTriplet(new MappingOptionTriplet(optionValue));
+ }
+
+ /**
* Sets a comment on this resource
* @param comment a comment string
*/
diff --git a/src/java/org/apache/fop/render/afp/modca/DataObjectAccessor.java b/src/java/org/apache/fop/render/afp/modca/DataObjectAccessor.java
index f8a779707..b1d8aeb2a 100644
--- a/src/java/org/apache/fop/render/afp/modca/DataObjectAccessor.java
+++ b/src/java/org/apache/fop/render/afp/modca/DataObjectAccessor.java
@@ -41,4 +41,9 @@ public interface DataObjectAccessor extends Writable {
* @param dataObjectInfo the data object info
*/
void setDataObjectInfo(DataObjectInfo dataObjectInfo);
+
+ /**
+ * @return the data object accessor name
+ */
+ String getName();
}
diff --git a/src/java/org/apache/fop/render/afp/modca/ImageSegment.java b/src/java/org/apache/fop/render/afp/modca/ImageSegment.java
index e579052b0..813dffed2 100644
--- a/src/java/org/apache/fop/render/afp/modca/ImageSegment.java
+++ b/src/java/org/apache/fop/render/afp/modca/ImageSegment.java
@@ -36,7 +36,7 @@ public class ImageSegment extends AbstractNamedAFPObject {
/**
* Default name for the object environment group
*/
- private static final String DEFAULT_NAME = "IS01";
+ private static final String DEFAULT_NAME = "IS000001";
/**
* The ImageContent for the image segment
diff --git a/src/java/org/apache/fop/render/afp/modca/IncludeObject.java b/src/java/org/apache/fop/render/afp/modca/IncludeObject.java
index 1817bc8cc..1b1b6c1ed 100644
--- a/src/java/org/apache/fop/render/afp/modca/IncludeObject.java
+++ b/src/java/org/apache/fop/render/afp/modca/IncludeObject.java
@@ -23,6 +23,8 @@ import java.io.IOException;
import java.io.OutputStream;
import org.apache.fop.render.afp.DataObjectInfo;
+import org.apache.fop.render.afp.modca.triplets.FullyQualifiedNameTriplet;
+import org.apache.fop.render.afp.modca.triplets.MappingOptionTriplet;
import org.apache.fop.render.afp.modca.triplets.ObjectClassificationTriplet;
import org.apache.fop.render.afp.tools.BinaryUtils;
@@ -74,27 +76,27 @@ public class IncludeObject extends AbstractNamedAFPObject implements DataObjectA
/**
* The orientation on the include object
*/
- private int orientation = -1;
+ private int orientation = 0;
/**
* The X-axis origin of the object area
*/
- private int xOffset = -1;
+ private int xOffset = 0;
/**
* The Y-axis origin of the object area
*/
- private int yOffset = -1;
+ private int yOffset = 0;
/**
* The X-axis origin defined in the object
*/
- private int xContentOffset = -1;
+ private int xContentOffset = 0;
/**
* The Y-axis origin defined in the object
*/
- private int yContentOffset = -1;
+ private int yContentOffset = 0;
/**
* the referenced data object
@@ -115,7 +117,6 @@ public class IncludeObject extends AbstractNamedAFPObject implements DataObjectA
this.dataObjectAccessor = dataObjectAccessor;
AbstractNamedAFPObject dataObject = dataObjectAccessor.getDataObject();
-
// Strip any object container
if (dataObject instanceof ObjectContainer) {
ObjectContainer objectContainer = (ObjectContainer)dataObject;
@@ -129,30 +130,28 @@ public class IncludeObject extends AbstractNamedAFPObject implements DataObjectA
this.dataObjectType = TYPE_PAGE_SEGMENT;
} else {
this.dataObjectType = TYPE_OTHER;
- DataObjectInfo dataObjectInfo = dataObjectAccessor.getDataObjectInfo();
- Registry registry = Registry.getInstance();
- Registry.ObjectType objectType = registry.getObjectType(dataObjectInfo);
- // When other type must set object classification
- super.setObjectClassification(
- ObjectClassificationTriplet.CLASS_TIME_INVARIANT_PAGINATED_PRESENTATION_OBJECT,
- objectType);
}
+
+ DataObjectInfo dataObjectInfo = dataObjectAccessor.getDataObjectInfo();
+
+ setObjectArea(dataObjectInfo.getX(), dataObjectInfo.getY());
+
+ super.setFullyQualifiedName(
+ FullyQualifiedNameTriplet.TYPE_REPLACE_FIRST_GID_NAME,
+ FullyQualifiedNameTriplet.FORMAT_CHARSTR,
+ dataObjectInfo.getUri());
+
+ Registry registry = Registry.getInstance();
+ Registry.ObjectType objectType = registry.getObjectType(dataObjectInfo);
+ super.setObjectClassification(
+ ObjectClassificationTriplet.CLASS_TIME_INVARIANT_PAGINATED_PRESENTATION_OBJECT,
+ objectType);
+
+ super.setMeasurementUnits(dataObjectInfo.getWidthRes(), dataObjectInfo.getHeightRes());
-// ResourceInfo resourceInfo = dataObjectAccessor.getDataObjectInfo().getResourceInfo();
-// // Set data object reference triplet
-// if (resourceInfo != null && resourceInfo.isExternal()) {
-// String dest = resourceInfo.getExternalResourceGroupDest();
-// super.setFullyQualifiedName(
-// FullyQualifiedNameTriplet.TYPE_DATA_OBJECT_EXTERNAL_RESOURCE_REF,
-// FullyQualifiedNameTriplet.FORMAT_URL, dest);
-// } else {
-// super.setFullyQualifiedName(
-// FullyQualifiedNameTriplet.TYPE_DATA_OBJECT_INTERNAL_RESOURCE_REF,
-// FullyQualifiedNameTriplet.FORMAT_CHARSTR, dataObject.getName());
-// }
+ super.setMappingOption(MappingOptionTriplet.SCALE_TO_FIT);
- // Set measurement units triplet
- setMeasurementUnits();
+ super.setObjectAreaSize(dataObjectInfo.getWidth(), dataObjectInfo.getHeight());
}
/**
@@ -241,7 +240,7 @@ public class IncludeObject extends AbstractNamedAFPObject implements DataObjectA
data[18] = dataObjectType;
//XoaOset (object area)
- if (xOffset > 0) {
+ if (xOffset >= -1) {
byte[] x = BinaryUtils.convert(xOffset, 3);
data[19] = x[0];
data[20] = x[1];
@@ -253,7 +252,7 @@ public class IncludeObject extends AbstractNamedAFPObject implements DataObjectA
}
// YoaOset (object area)
- if (yOffset > 0) {
+ if (yOffset > -1) {
byte[] y = BinaryUtils.convert(yOffset, 3);
data[22] = y[0];
data[23] = y[1];
@@ -298,7 +297,7 @@ public class IncludeObject extends AbstractNamedAFPObject implements DataObjectA
}
// XocaOset (object content)
- if (xContentOffset > 0) {
+ if (xContentOffset > -1) {
byte[] y = BinaryUtils.convert(xContentOffset, 3);
data[29] = y[0];
data[30] = y[1];
@@ -310,7 +309,7 @@ public class IncludeObject extends AbstractNamedAFPObject implements DataObjectA
}
// YocaOset (object content)
- if (yContentOffset > 0) {
+ if (yContentOffset > -1) {
byte[] y = BinaryUtils.convert(yContentOffset, 3);
data[32] = y[0];
data[33] = y[1];
diff --git a/src/java/org/apache/fop/render/afp/modca/MapDataResource.java b/src/java/org/apache/fop/render/afp/modca/MapDataResource.java
index 3c9794e7d..9b1abe06c 100644
--- a/src/java/org/apache/fop/render/afp/modca/MapDataResource.java
+++ b/src/java/org/apache/fop/render/afp/modca/MapDataResource.java
@@ -22,12 +22,11 @@ package org.apache.fop.render.afp.modca;
import java.io.IOException;
import java.io.OutputStream;
-//import org.apache.fop.render.afp.ResourceLevel;
import org.apache.fop.render.afp.DataObjectInfo;
import org.apache.fop.render.afp.ResourceInfo;
+import org.apache.fop.render.afp.ResourceLevel;
import org.apache.fop.render.afp.modca.triplets.FullyQualifiedNameTriplet;
import org.apache.fop.render.afp.modca.triplets.ObjectClassificationTriplet;
-import org.apache.fop.render.afp.modca.triplets.StrucFlgs;
import org.apache.fop.render.afp.tools.BinaryUtils;
/**
@@ -48,12 +47,13 @@ public class MapDataResource extends AbstractStructuredAFPObject {
AbstractNamedAFPObject namedDataObject = dataObjectAccessor.getDataObject();
DataObjectInfo dataObjectInfo = dataObjectAccessor.getDataObjectInfo();
ResourceInfo resourceInfo = dataObjectInfo.getResourceInfo();
- if (resourceInfo.isExternal()) {
- String dest = resourceInfo.getExternalResourceGroupDest();
- if (dest != null) {
+ ResourceLevel resourceLevel = resourceInfo.getLevel();
+ if (resourceLevel.isExternal()) {
+ String url = resourceLevel.getExternalResourceGroupFilePath();
+ if (url != null) {
super.setFullyQualifiedName(
FullyQualifiedNameTriplet.TYPE_DATA_OBJECT_EXTERNAL_RESOURCE_REF,
- FullyQualifiedNameTriplet.FORMAT_URL, dest);
+ FullyQualifiedNameTriplet.FORMAT_CHARSTR, url);
}
} else {
String fqName = namedDataObject.getFullyQualifiedName();
diff --git a/src/java/org/apache/fop/render/afp/modca/MapPageOverlay.java b/src/java/org/apache/fop/render/afp/modca/MapPageOverlay.java
index 02237ca90..67dcaa74f 100644
--- a/src/java/org/apache/fop/render/afp/modca/MapPageOverlay.java
+++ b/src/java/org/apache/fop/render/afp/modca/MapPageOverlay.java
@@ -33,6 +33,8 @@ import org.apache.fop.render.afp.tools.BinaryUtils;
*/
public class MapPageOverlay extends AbstractAFPObject {
+ private static final int MAX_SIZE = 253;
+
/**
* The collection of overlays (maximum of 254 stored as byte[])
*/
@@ -59,7 +61,7 @@ public class MapPageOverlay extends AbstractAFPObject {
* @throws MaximumSizeExceededException if the maximum size is reached
*/
public void addOverlay(String name) throws MaximumSizeExceededException {
- if (getOverlays().size() > 253) {
+ if (getOverlays().size() > MAX_SIZE) {
throw new MaximumSizeExceededException();
}
if (name.length() != 8) {
diff --git a/src/java/org/apache/fop/render/afp/modca/ObjectContainer.java b/src/java/org/apache/fop/render/afp/modca/ObjectContainer.java
index ebc402954..2e06c1b2c 100644
--- a/src/java/org/apache/fop/render/afp/modca/ObjectContainer.java
+++ b/src/java/org/apache/fop/render/afp/modca/ObjectContainer.java
@@ -24,6 +24,7 @@ import java.io.IOException;
import java.io.OutputStream;
import org.apache.fop.render.afp.DataObjectInfo;
+import org.apache.fop.render.afp.modca.triplets.FullyQualifiedNameTriplet;
import org.apache.fop.render.afp.modca.triplets.ObjectClassificationTriplet;
import org.apache.fop.render.afp.tools.BinaryUtils;
@@ -32,6 +33,8 @@ import org.apache.fop.render.afp.tools.BinaryUtils;
*/
public class ObjectContainer extends AbstractNamedAFPObject implements DataObjectAccessor {
+ private static final String DEFAULT_NAME = "OC000001";
+
/**
* the data object
*/
@@ -48,6 +51,13 @@ public class ObjectContainer extends AbstractNamedAFPObject implements DataObjec
private DataObjectInfo dataObjectInfo;
/**
+ * Default constructor
+ */
+ public ObjectContainer() {
+ super(DEFAULT_NAME);
+ }
+
+ /**
* Main constructor
* @param name the name of this object container
*/
@@ -92,6 +102,10 @@ public class ObjectContainer extends AbstractNamedAFPObject implements DataObjec
} else {
log.warn("no object type for " + dataObjectInfo.getUri());
}
+ super.setFullyQualifiedName(
+ FullyQualifiedNameTriplet.TYPE_REPLACE_FIRST_GID_NAME,
+ FullyQualifiedNameTriplet.FORMAT_CHARSTR,
+ dataObjectInfo.getUri());
}
/**
diff --git a/src/java/org/apache/fop/render/afp/modca/PageObject.java b/src/java/org/apache/fop/render/afp/modca/PageObject.java
index 1d9dc6985..1db9c4c41 100644
--- a/src/java/org/apache/fop/render/afp/modca/PageObject.java
+++ b/src/java/org/apache/fop/render/afp/modca/PageObject.java
@@ -46,15 +46,15 @@ import org.apache.fop.render.afp.tools.StringUtils;
*/
public class PageObject extends AbstractResourceGroupContainer {
- /**
- * The page segment count
- */
- private int pageSegmentCount = 0;
-
- /**
- * The current page segment
- */
- private PageSegment currentPageSegment = null;
+// /**
+// * The page segment count
+// */
+// private int pageSegmentCount = 0;
+//
+// /**
+// * The current page segment
+// */
+// private PageSegment currentPageSegment = null;
/**
* Construct a new page object for the specified name argument, the page
@@ -91,56 +91,58 @@ public class PageObject extends AbstractResourceGroupContainer {
* the orientation required for the overlay
*/
public void createIncludePageOverlay(String name, int x, int y, int orientation) {
- addObject(new IncludePageOverlay(name, x, y, orientation));
+ getActiveEnvironmentGroup().createOverlay(name);
+ IncludePageOverlay ipo = new IncludePageOverlay(name, x, y, orientation);
+ addObject(ipo);
}
- /**
- * @return a new page segment object
- */
- private PageSegment createPageSegment() {
- String name = PAGE_SEGMENT_NAME_PREFIX
- + StringUtils.lpad(String.valueOf(++pageSegmentCount), '0', 5);
- PageSegment pageSegment = new PageSegment(name);
- return pageSegment;
- }
-
- /**
- * @return the current page segment
- */
- private PageSegment getCurrentPageSegment() {
- if (currentPageSegment == null) {
- this.currentPageSegment = createPageSegment();
- super.addObject(currentPageSegment);
- }
- return this.currentPageSegment;
- }
+// /**
+// * @return a new page segment object
+// */
+// private PageSegment createPageSegment() {
+// String name = PAGE_SEGMENT_NAME_PREFIX
+// + StringUtils.lpad(String.valueOf(++pageSegmentCount), '0', 5);
+// PageSegment pageSegment = new PageSegment(name);
+// return pageSegment;
+// }
- private static final String PAGE_SEGMENT_NAME_PREFIX = "PSG";
+// /**
+// * @return the current page segment
+// */
+// private PageSegment getCurrentPageSegment() {
+// if (currentPageSegment == null) {
+// this.currentPageSegment = createPageSegment();
+// super.addObject(currentPageSegment);
+// }
+// return this.currentPageSegment;
+// }
+//
+// private static final String PAGE_SEGMENT_NAME_PREFIX = "PSG";
- /**
- * Starts a new page segment and makes it current.
- */
- public void startPageSegment() {
- getCurrentPageSegment();
- }
-
- /**
- * Ends the current page segment.
- */
- public void endPageSegment() {
- this.currentPageSegment = null;
- }
+// /**
+// * Starts a new page segment and makes it current.
+// */
+// public void startPageSegment() {
+// getCurrentPageSegment();
+// }
+//
+// /**
+// * Ends the current page segment.
+// */
+// public void endPageSegment() {
+// this.currentPageSegment = null;
+// }
- /**
- * {@inheritDoc}
- */
- protected void addObject(AbstractAFPObject obj) {
- if (currentPageSegment != null) {
- getCurrentPageSegment().addObject(obj);
- } else {
- super.addObject(obj);
- }
- }
+// /**
+// * {@inheritDoc}
+// */
+// protected void addObject(AbstractAFPObject obj) {
+//// if (currentPageSegment != null) {
+//// getCurrentPageSegment().addObject(obj);
+//// } else {
+// super.addObject(obj);
+//// }
+// }
/**
* This method will create shading on the page using the specified
diff --git a/src/java/org/apache/fop/render/afp/modca/ResourceEnvironmentGroup.java b/src/java/org/apache/fop/render/afp/modca/ResourceEnvironmentGroup.java
index aff5cc6eb..219dfd8cb 100644
--- a/src/java/org/apache/fop/render/afp/modca/ResourceEnvironmentGroup.java
+++ b/src/java/org/apache/fop/render/afp/modca/ResourceEnvironmentGroup.java
@@ -91,15 +91,15 @@ public class ResourceEnvironmentGroup extends AbstractEnvironmentGroup {
super(name);
}
- /**
- * Adds an AFP object mapping reference to this resource environment group
- * @param obj the object to add
- */
- public void addObject(AbstractStructuredAFPObject obj) {
- // TODO: AC - fix
+// /**
+// * Adds an AFP object mapping reference to this resource environment group
+// * @param obj the object to add
+// */
+// public void addObject(AbstractStructuredAFPObject obj) {
// getMapDataResources().add(new MapDataResource(obj));
- getPreprocessPresentationObjects().add(new PreprocessPresentationObject(obj));
- }
+// createOverlay(obj.get);
+// getPreprocessPresentationObjects().add(new PreprocessPresentationObject(obj));
+// }
/**
* Returns an indication if the resource environment group is complete
diff --git a/src/java/org/apache/fop/render/afp/modca/ResourceGroup.java b/src/java/org/apache/fop/render/afp/modca/ResourceGroup.java
index f8c9d5fc0..cd369b876 100644
--- a/src/java/org/apache/fop/render/afp/modca/ResourceGroup.java
+++ b/src/java/org/apache/fop/render/afp/modca/ResourceGroup.java
@@ -28,6 +28,8 @@ import java.util.Map;
import org.apache.fop.render.afp.DataObjectInfo;
import org.apache.fop.render.afp.ImageObjectInfo;
import org.apache.fop.render.afp.ResourceInfo;
+import org.apache.fop.render.afp.ResourceLevel;
+import org.apache.fop.render.afp.tools.StringUtils;
/**
* A Resource Group contains a set of overlays.
@@ -72,6 +74,14 @@ public final class ResourceGroup extends AbstractNamedAFPObject {
return this.container;
}
+ private static final String OBJECT_CONTAINER_NAME_PREFIX = "OC";
+
+ private ObjectContainer createObjectContainer() {
+ String name = OBJECT_CONTAINER_NAME_PREFIX
+ + StringUtils.lpad(String.valueOf(getResourceCount() + 1), '0', 6);
+ return new ObjectContainer(name);
+ }
+
/**
* Creates a data object in this resource group
* @param dataObjectInfo the data object info
@@ -81,6 +91,7 @@ public final class ResourceGroup extends AbstractNamedAFPObject {
DataObjectAccessor dataObjectAccessor
= (DataObjectAccessor)getResourceMap().get(dataObjectInfo.getUri());
ResourceInfo resourceInfo = dataObjectInfo.getResourceInfo();
+ ResourceLevel resourceLevel = resourceInfo.getLevel();
AbstractDataObject dataObj;
if (dataObjectAccessor == null) {
if (dataObjectInfo instanceof ImageObjectInfo) {
@@ -94,27 +105,31 @@ public final class ResourceGroup extends AbstractNamedAFPObject {
dataObjectInfo.getWidthRes(), dataObjectInfo.getHeightRes(),
dataObjectInfo.getRotation());
+ ObjectContainer objectContainer = null;
String resourceName = resourceInfo.getName();
- ObjectContainer objectContainer = new ObjectContainer(resourceName);
+ if (resourceName != null) {
+ objectContainer = new ObjectContainer(resourceName);
+ } else {
+ objectContainer = createObjectContainer();
+ resourceName = objectContainer.getName();
+ }
objectContainer.setDataObject(dataObj);
objectContainer.setDataObjectInfo(dataObjectInfo);
// When externally located, wrap the object container in a resource object
- if (resourceInfo.isExternal()) {
+ if (resourceLevel.isPrintFile() || resourceLevel.isExternal()) {
ResourceObject resourceObject = new ResourceObject(resourceName);
resourceObject.setDataObject(objectContainer);
+ resourceObject.setDataObjectInfo(dataObjectInfo);
dataObjectAccessor = resourceObject;
} else { // Access data object through container
dataObjectAccessor = objectContainer;
}
- dataObjectAccessor.setDataObjectInfo(dataObjectInfo);
// Add to resource map
getResourceMap().put(dataObjectInfo.getUri(), dataObjectAccessor);
}
- // Return include object
- AbstractNamedAFPObject dataObject = dataObjectAccessor.getDataObject();
- String name = dataObject.getName();
+ String name = dataObjectAccessor.getName();
IncludeObject includeObj = new IncludeObject(name, dataObjectAccessor);
return includeObj;
}
@@ -126,13 +141,15 @@ public final class ResourceGroup extends AbstractNamedAFPObject {
*/
private boolean isValidObjectType(AbstractNamedAFPObject namedObj) {
return (namedObj instanceof Overlay
+ || namedObj instanceof ResourceObject
|| namedObj instanceof PageSegment
- // || namedObj instanceof FormMap
- // || namedObj instanceof BarcodeObject
|| namedObj instanceof GraphicsObject
|| namedObj instanceof ImageObject
|| namedObj instanceof ObjectContainer
- || namedObj instanceof Document);
+ || namedObj instanceof Document
+ // || namedObj instanceof FormMap
+ // || namedObj instanceof BarcodeObject
+ );
}
/**
* Adds a named object to this resource group
diff --git a/src/java/org/apache/fop/render/afp/modca/ResourceObject.java b/src/java/org/apache/fop/render/afp/modca/ResourceObject.java
index 58c61fc58..e0ba1b4b7 100644
--- a/src/java/org/apache/fop/render/afp/modca/ResourceObject.java
+++ b/src/java/org/apache/fop/render/afp/modca/ResourceObject.java
@@ -23,6 +23,7 @@ import java.io.IOException;
import java.io.OutputStream;
import org.apache.fop.render.afp.DataObjectInfo;
+import org.apache.fop.render.afp.modca.triplets.FullyQualifiedNameTriplet;
import org.apache.fop.render.afp.modca.triplets.ObjectClassificationTriplet;
import org.apache.fop.render.afp.modca.triplets.Triplet;
import org.apache.fop.render.afp.tools.BinaryUtils;
@@ -54,10 +55,37 @@ public class ResourceObject extends AbstractPreparedAFPObject implements DataObj
/**
* Sets the data object referenced by this resource object
- * @param namedObject the named data object
+ * @param obj the named data object
*/
- public void setDataObject(AbstractNamedAFPObject namedObject) {
- this.namedObject = namedObject;
+ public void setDataObject(AbstractNamedAFPObject obj) {
+ this.namedObject = obj;
+
+ String fqn = obj.getFullyQualifiedName();
+ if (fqn != null) {
+ super.setFullyQualifiedName(
+ FullyQualifiedNameTriplet.TYPE_REPLACE_FIRST_GID_NAME,
+ FullyQualifiedNameTriplet.FORMAT_CHARSTR,
+ fqn);
+ }
+
+ byte type;
+ if (obj instanceof ObjectContainer) {
+ type = ResourceObjectTypeTriplet.OBJECT_CONTAINER;
+ } else if (obj instanceof ImageObject) {
+ type = ResourceObjectTypeTriplet.IMAGE_OBJECT;
+ } else if (obj instanceof GraphicsObject) {
+ type = ResourceObjectTypeTriplet.GRAPHICS_OBJECT;
+ } else if (obj instanceof Document) {
+ type = ResourceObjectTypeTriplet.DOCUMENT_OBJECT;
+ } else if (obj instanceof PageSegment) {
+ type = ResourceObjectTypeTriplet.PAGE_SEGMENT_OBJECT;
+ } else if (obj instanceof Overlay) {
+ type = ResourceObjectTypeTriplet.OVERLAY_OBJECT;
+ } else {
+ throw new UnsupportedOperationException(
+ "Unsupported resource object type " + obj);
+ }
+ getTriplets().add(new ResourceObjectTypeTriplet(type));
}
/**
@@ -80,34 +108,12 @@ public class ResourceObject extends AbstractPreparedAFPObject implements DataObj
public void setDataObjectInfo(DataObjectInfo dataObjectInfo) {
this.dataObjectInfo = dataObjectInfo;
- byte type;
if (namedObject instanceof ObjectContainer) {
- type = ResourceObjectTypeTriplet.OBJECT_CONTAINER;
-
-// ObjectContainer objectContainer = (ObjectContainer)namedObject;
-// DataObjectInfo dataObjectInfo = objectContainer.getDataObjectInfo();
Registry.ObjectType objectType = dataObjectInfo.getObjectType();
super.setObjectClassification(
ObjectClassificationTriplet.CLASS_TIME_INVARIANT_PAGINATED_PRESENTATION_OBJECT,
objectType);
-
- } else if (namedObject instanceof ImageObject) {
- type = ResourceObjectTypeTriplet.IMAGE_OBJECT;
- } else if (namedObject instanceof GraphicsObject) {
- type = ResourceObjectTypeTriplet.GRAPHICS_OBJECT;
- } else if (namedObject instanceof Document) {
- type = ResourceObjectTypeTriplet.DOCUMENT_OBJECT;
- } else if (namedObject instanceof PageSegment) {
- type = ResourceObjectTypeTriplet.PAGE_SEGMENT_OBJECT;
- } else if (namedObject instanceof Overlay) {
- type = ResourceObjectTypeTriplet.OVERLAY_OBJECT;
- } else {
- throw new UnsupportedOperationException(
- "Unsupported resource object type " + namedObject);
}
-
- getTriplets().add(new ResourceObjectTypeTriplet(type));
-
}
/**
diff --git a/src/java/org/apache/fop/render/afp/modca/triplets/FullyQualifiedNameTriplet.java b/src/java/org/apache/fop/render/afp/modca/triplets/FullyQualifiedNameTriplet.java
index 2be37b818..705a8d41d 100644
--- a/src/java/org/apache/fop/render/afp/modca/triplets/FullyQualifiedNameTriplet.java
+++ b/src/java/org/apache/fop/render/afp/modca/triplets/FullyQualifiedNameTriplet.java
@@ -160,13 +160,17 @@ public class FullyQualifiedNameTriplet extends Triplet {
super(FULLY_QUALIFIED_NAME);
this.fqName = fqName;
-
+
byte[] fqNameBytes;
+ String encoding = AFPConstants.EBCIDIC_ENCODING;
+ if (format == FORMAT_URL) {
+ encoding = AFPConstants.US_ASCII_ENCODING;
+ }
try {
- fqNameBytes = fqName.getBytes(AFPConstants.ASCII_ENCODING);
+ fqNameBytes = fqName.getBytes(encoding);
} catch (UnsupportedEncodingException e) {
throw new IllegalArgumentException(
- AFPConstants.ASCII_ENCODING + " encoding failed");
+ encoding + " encoding failed");
}
byte[] data = new byte[2 + fqNameBytes.length];
diff --git a/src/java/org/apache/fop/render/afp/modca/triplets/MappingOptionTriplet.java b/src/java/org/apache/fop/render/afp/modca/triplets/MappingOptionTriplet.java
new file mode 100644
index 000000000..daebb6183
--- /dev/null
+++ b/src/java/org/apache/fop/render/afp/modca/triplets/MappingOptionTriplet.java
@@ -0,0 +1,68 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Id$ */
+
+package org.apache.fop.render.afp.modca.triplets;
+
+/**
+ * Specifies the mapping of data object presentation space to object area
+ */
+public class MappingOptionTriplet extends Triplet {
+ /**
+ * the data object is placed in the upper left corner, all data must be presented
+ * within the object area extents
+ */
+ public static final byte POSITION = 0x00;
+
+ /**
+ * the data object is placed in the upper left corner, all data that falls within
+ * the object area extents will be presented but data that falls outside will not be presented
+ */
+ public static final byte POSITION_AND_TRIM = 0x10;
+
+ /**
+ * the data object is centred and symmetrically scaled up or down
+ * while preserving aspect ratio
+ */
+ public static final byte SCALE_TO_FIT = 0x20;
+
+ /**
+ * the data object is centred, all data that falls within the object area extents
+ * will be presented but data that falls outside will not be presented
+ */
+ public static final byte CENTER_AND_TRIM = 0x30;
+
+// public static final byte MIGRATION_MAPPING_1 = 0x41;
+// public static final byte MIGRATION_MAPPING_2 = 0x42;
+// public static final byte MIGRATION_MAPPING_3 = 0x50;
+
+ /** the data object is centred, aspect ratio is not always preserved */
+ public static final byte SCALE_TO_FILL = 0x60;
+
+ /** used to map ip3i print data objects */
+ public static final byte UP3I_PRINT_DATA = 0x70;
+
+ /**
+ * Main constructor
+ *
+ * @param mapValue the mapping option to use
+ */
+ public MappingOptionTriplet(byte mapValue) {
+ super(Triplet.MAPPING_OPTION, mapValue);
+ }
+}
diff --git a/src/java/org/apache/fop/render/afp/modca/triplets/MeasurementUnitsTriplet.java b/src/java/org/apache/fop/render/afp/modca/triplets/MeasurementUnitsTriplet.java
index 7350db27f..71da6e059 100644
--- a/src/java/org/apache/fop/render/afp/modca/triplets/MeasurementUnitsTriplet.java
+++ b/src/java/org/apache/fop/render/afp/modca/triplets/MeasurementUnitsTriplet.java
@@ -32,12 +32,15 @@ public class MeasurementUnitsTriplet extends Triplet {
/**
* Main constructor
+ *
+ * @param xRes units per base on the x-axis
+ * @param yRes units per base on the y-axis
*/
- public MeasurementUnitsTriplet() {
+ public MeasurementUnitsTriplet(int xRes, int yRes) {
super(MEASUREMENT_UNITS);
//TODO: units correct?
- byte[] xUnits = BinaryUtils.convert(1, 2);
- byte[] yUnits = BinaryUtils.convert(1, 2);
+ byte[] xUnits = BinaryUtils.convert(xRes * 10, 2);
+ byte[] yUnits = BinaryUtils.convert(yRes * 10, 2);
byte[] data = new byte[] {
TEN_INCHES, // XoaBase
TEN_INCHES, // YoaBase