in impl/src/main/java/org/apache/tuscany/sdo/util/DataObjectUtil.java [2218:2300]
protected void process(String pathString)
{
TokenList tokens = new TokenList(pathString.toCharArray());
String token;
int size = tokens.size();
int x = 0;
if ("/".equals(tokens.peek(0)))
{
setEObject(EcoreUtil.getRootContainer(eObject));
x++;
}
for (; x < size; x++)
{
token = tokens.peek(x);
char c = token.charAt(0);
if ('/' == c)
{
setEObject((EObject)get());
if (eObject == null) break;
}
else if ("..".equals(token))
{
setEObject(eObject.eContainer());
if (eObject == null) break;
}
else if ('[' == c)
{
x++; // skip [
token = tokens.peek(x); // name or index
char following = tokens.peek(x + 1).charAt(0);
if ('=' != following)
{
try
{
setIndex(Integer.parseInt(token) - 1);
// runtimeException may be recorded
}
catch(NumberFormatException eNumberFormat)
{
runtimeException = eNumberFormat;
setEObject(null);
break;
}
if (runtimeException != null)
break;
x++; // skip ]
}
else
{
x++; // done name
x++; // skip =
String attributeValue = tokens.peek(x); // value
if ("\"".equals(attributeValue))
{
x++; // skip "
attributeValue = tokens.peek(++x);
}
x++; // skip ]
int index = matchingIndex((List)get(), token, attributeValue);
if (index < 0)
{
setEObject(null);
break;
}
else
{
setIndex(index);
}
}
}
else if ('@' == c)
{
// skip @
}
else
{
setFeatureName(token);
if (eObject == null) break;
}
}
}