/*
* 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.afp.modca.triplets;
import java.io.IOException;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import org.apache.fop.afp.AFPConstants;
/**
* A Fully Qualified Name triplet enable the identification and referencing of
* objects using Gloabl Identifiers (GIDs).
*/
public class FullyQualifiedNameTriplet extends AbstractTriplet {
// Specifies how the GID will be used
/** This GID replaces the first parameter in the structured field that contains a GID name. */
public static final byte TYPE_REPLACE_FIRST_GID_NAME = 0x01;
/** This triplet contains the name of a font family. */
public static final byte TYPE_FONT_FAMILY_NAME = 0x07;
/** This triplet contains the name of a font typeface. */
public static final byte TYPE_FONT_TYPEFACE_NAME = 0x08;
/** This triplet specifies a reference to the MO:DCA resource hierarchy. */
public static final byte TYPE_MODCA_RESOURCE_HIERARCHY_REF = 0x09;
/** The triplet contains a GID reference to a begin resource group structured field. */
public static final byte TYPE_BEGIN_RESOURCE_GROUP_REF = 0x0A;
/** The triplet contains a GID reference to a document attribute. */
public static final byte TYPE_ATTRIBUTE_GID = 0x0B;
/** The triplet contains the GID of a process element. */
public static final byte TYPE_PROCESS_ELEMENT_GID = 0x0C;
/** The triplet contains a reference to a begin page group structured field. */
public static final byte TYPE_BEGIN_PAGE_GROUP_REF = 0x0D;
/** The triplet contains a reference to a media type. */
public static final byte TYPE_MEDIA_TYPE_REF = 0x11;
/** The triplet contains a reference to a color management resource. */
public static final byte TYPE_COLOR_MANAGEMENT_RESOURCE_REF = 0x41;
/** The triplet contains a reference to a data-object font file that defines a base font. */
public static final byte TYPE_DATA_OBJECT_FONT_BASE_FONT_ID = 0x6E;
/** The triplet contains a reference to a data-object font file that defines a linked font. */
public static final byte TYPE_DATA_OBJECT_FONT_LINKED_FONT_ID = 0x7E;
/** The triplet contains a reference to a begin document structured field. */
public static final byte TYPE_BEGIN_DOCUMENT_REF = (byte)0x83;
/**
* The triplet contains a reference to a begin structured field associated with a resource;
* or contains a GID reference to a coded font.
*/
public static final byte TYPE_BEGIN_RESOURCE_OBJECT_REF = (byte)0x84;
/**
* The triplet contains a GID reference to a code page that specifies the code points and
* graphic character names for a coded font.
*/
public static final byte TYPE_CODE_PAGE_NAME_REF = (byte)0x85;
/**
* The triplet contains a GID name reference to a font character set that specifies
* a set of graphics characters.
*/
public static final byte TYPE_FONT_CHARSET_NAME_REF = (byte)0x86;
/** The triplet contains a GID reference to a begin page structured field. */
public static final byte TYPE_BEGIN_PAGE_REF = (byte)0x87;
/** The triplet contains a GID reference to a begin medium map structured field. */
public static final byte TYPE_BEGIN_MEDIUM_MAP_REF = (byte)0x8D;
/**
* The triplet contains a GID reference to a coded font, which identifies a specific
* code page and a specific font character set.
*/
public static final byte TYPE_CODED_FONT_NAME_REF = (byte)0x8E;
/** The triplet contains a GID reference to a begin document index structured field. */
public static final byte TYPE_BEGIN_DOCUMENT_INDEX_REF = (byte)0x98;
/** The triplet contains a GID reference to a begin overlay structured field. */
public static final byte TYPE_BEGIN_OVERLAY_REF = (byte)0xB0;
/** The triplet contains a GID reference to a resource used by a data object. */
public static final byte TYPE_DATA_OBJECT_INTERNAL_RESOURCE_REF = (byte)0xBE;
/** The triplet contains a GID reference to an index element structured field. */
public static final byte TYPE_INDEX_ELEMENT_GID = (byte)0xCA;
/**
* The triplet contains a reference to other object data which may or may
* not be defined by an IBM presentation architecture.
*/
public static final byte TYPE_OTHER_OBJECT_DATA_REF = (byte)0xCE;
/**
* The triplet contains a reference to a resource used by a data object.
* The GID may be a filename or any other identifier associated with the
* resource and is used to located the resource object in the resource hierarchy.
* The data object that uses the resource may or may not be defined by an
* IBM presentation architecture.
*/
public static final byte TYPE_DATA_OBJECT_EXTERNAL_RESOURCE_REF = (byte)0xDE;
// GID Format
/** The GID is a character encoded name. */
public static final byte FORMAT_CHARSTR = (byte)0x00;
/** the GID is a ASN.1 object identifier (OID). */
public static final byte FORMAT_OID = (byte)0x10;
/** the GID is a uniform resource locator (URL). */
public static final byte FORMAT_URL = (byte)0x20;
/** the fully qualified name type */
private final byte type;
/** the fully qualified name format */
private final byte format;
/** the actual fully qualified name */
private final String fqName;
private String encoding = AFPConstants.EBCIDIC_ENCODING;
private int charlen = 1;
/**
* Main constructor
*
* @param type the fully qualified name type
* @param format the fully qualified name format
* @param fqName the fully qualified name
*/
public FullyQualifiedNameTriplet(byte type, byte format, String fqName, boolean utf16be) {
super(FULLY_QUALIFIED_NAME);
this.type = type;
this.format = format;
this.fqName = fqName;
if (utf16be) {
encoding = "UTF-16BE";
charlen = 2;
}
}
/**
* Returns the actual fully qualified name
*
* @return the actual fully qualified name
*/
public String getFullyQualifiedName() {
return fqName;
}
/** {@inheritDoc} */
public String toString() {
return this.fqName;
}
/** {@inheritDoc} */
public int getDataLength() {
return 4 + (fqName.length() * charlen);
}
/** {@inheritDoc} */
public void writeToStream(OutputStream os) throws IOException {
byte[] data = getData();
data[2] = type;
data[3] = format;
// FQName
byte[] fqNameBytes;
if (format == FORMAT_URL) {
encoding = AFPConstants.US_ASCII_ENCODING;
}
try {
fqNameBytes = fqName.getBytes(encoding);
} catch (UnsupportedEncodingException e) {
throw new IllegalArgumentException(
encoding + " encoding failed");
}
System.arraycopy(fqNameBytes, 0, data, 4, fqNameBytes.length);
os.write(data);
}
}