protected void process()

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;
        }
      }
    }