com.adobe.xmp.impl.xpath.XMPPath Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of xmpcore Show documentation
Show all versions of xmpcore Show documentation
The XMP Library for Java is based on the C++ XMPCore library
and the API is similar.
// =================================================================================================
// 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();
}
}