diff options
Diffstat (limited to 'XMPCore/src/com/adobe/xmp/impl/xpath/XMPPath.java')
-rw-r--r-- | XMPCore/src/com/adobe/xmp/impl/xpath/XMPPath.java | 106 |
1 files changed, 106 insertions, 0 deletions
diff --git a/XMPCore/src/com/adobe/xmp/impl/xpath/XMPPath.java b/XMPCore/src/com/adobe/xmp/impl/xpath/XMPPath.java new file mode 100644 index 0000000..ff810dc --- /dev/null +++ b/XMPCore/src/com/adobe/xmp/impl/xpath/XMPPath.java @@ -0,0 +1,106 @@ +// ================================================================================================= +// ADOBE SYSTEMS INCORPORATED +// Copyright 2006 Adobe Systems Incorporated +// All Rights Reserved +// +// NOTICE: Adobe permits you to use, modify, and distribute this file in accordance with the terms +// of the Adobe license agreement accompanying it. +// ================================================================================================= + +package com.adobe.xmp.impl.xpath; + +import java.util.ArrayList; +import java.util.List; + + +/** + * Representates an XMP XMPPath with segment accessor methods. + * + * @since 28.02.2006 + */ +public class XMPPath +{ + // Bits for XPathStepInfo options. + + /** Marks a struct field step , also for top level nodes (schema "fields"). */ + public static final int STRUCT_FIELD_STEP = 0x01; + /** Marks a qualifier step. + * Note: Order is significant to separate struct/qual from array kinds! */ + public static final int QUALIFIER_STEP = 0x02; // + /** Marks an array index step */ + public static final int ARRAY_INDEX_STEP = 0x03; + /** */ + public static final int ARRAY_LAST_STEP = 0x04; + /** */ + public static final int QUAL_SELECTOR_STEP = 0x05; + /** */ + public static final int FIELD_SELECTOR_STEP = 0x06; + /** */ + public static final int SCHEMA_NODE = 0x80000000; + /** */ + public static final int STEP_SCHEMA = 0; + /** */ + public static final int STEP_ROOT_PROP = 1; + + + /** stores the segments of an XMPPath */ + private List segments = new ArrayList(5); + + + /** + * Append a path segment + * + * @param segment the segment to add + */ + public void add(XMPPathSegment segment) + { + segments.add(segment); + } + + + /** + * @param index the index of the segment to return + * @return Returns a path segment. + */ + public XMPPathSegment getSegment(int index) + { + return (XMPPathSegment) segments.get(index); + } + + + /** + * @return Returns the size of the xmp path. + */ + public int size() + { + return segments.size(); + } + + + /** + * Serializes the normalized XMP-path. + * @see Object#toString() + */ + public String toString() + { + StringBuffer result = new StringBuffer(); + int index = 1; + while (index < size()) + { + result.append(getSegment(index)); + if (index < size() - 1) + { + int kind = getSegment(index + 1).getKind(); + if (kind == STRUCT_FIELD_STEP || + kind == QUALIFIER_STEP) + { + // all but last and array indices + result.append('/'); + } + } + index++; + } + + return result.toString(); + } +}
\ No newline at end of file |