summaryrefslogtreecommitdiff
path: root/XMPCore/src/com/adobe/xmp/impl/xpath/XMPPath.java
diff options
context:
space:
mode:
Diffstat (limited to 'XMPCore/src/com/adobe/xmp/impl/xpath/XMPPath.java')
-rw-r--r--XMPCore/src/com/adobe/xmp/impl/xpath/XMPPath.java106
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