private object[] compile(string obj0) { if (path == null) { return(new object[0]); } var list = new List <object>(); var tok = new StringTokenizer(path, ":."); while (tok.hasMoreTokens()) { string token = tok.nextToken(); OpEnum op = OpEnum.getInstance(token); if (op == null) { throw new Error("Bad path compiled " + path); } list.Add(op); if (op == OpEnum.RELATION) { list.Add(tok.nextToken()); } } return(list.ToArray()); }
public virtual Item findItem(Item item) { if (INTERPRET_PATHS) { return(item.findItem(path)); } if (compiledPath == null) { compiledPath = compile(path); } Item pitem = item; for (int i = 0; pitem != null && i < compiledPath.Length;) { OpEnum op = (OpEnum)compiledPath[i++]; if (op == OpEnum.NEXT) { pitem = pitem.getNext(); } else if (op == OpEnum.PREV) { pitem = pitem.getPrevious(); } else if (op == OpEnum.NEXT_NEXT) { pitem = pitem.getNext(); if (pitem != null) { pitem = pitem.getNext(); } } else if (op == OpEnum.PREV_PREV) { pitem = pitem.getPrevious(); if (pitem != null) { pitem = pitem.getPrevious(); } } else if (op == OpEnum.PARENT) { pitem = pitem.getParent(); } else if (op == OpEnum.DAUGHTER) { pitem = pitem.getDaughter(); } else if (op == OpEnum.LAST_DAUGHTER) { pitem = pitem.getLastDaughter(); } else if (op == OpEnum.RELATION) { string relationName = (string)compiledPath[i++]; pitem = pitem.getSharedContents() .getItemRelation(relationName); } else { this.LoggerInfo("findItem: bad feature " + op + " in " + path); } } return(pitem); }