home *** CD-ROM | disk | FTP | other *** search
- package com.extensibility.saf.impl;
-
- import org.w3c.dom.Attr;
- import org.w3c.dom.Element;
- import org.w3c.dom.Node;
-
- public class SelectorXPath {
- private String pathString;
- private boolean isSimplePath;
- private boolean isAbsolutePath;
-
- public SelectorXPath(String var1) {
- if (var1.startsWith("//")) {
- var1 = var1.substring(2);
- }
-
- this.pathString = var1;
- this.isSimplePath = this.pathString.indexOf("//", 0) == -1;
- this.isAbsolutePath = this.pathString.startsWith("/");
- }
-
- public boolean matches(SelectorXPath var1) {
- if (var1.isAbsolutePath && var1.isSimplePath) {
- if (this.isSimplePath) {
- if (this.isAbsolutePath) {
- return this.pathString.equals(var1.pathString);
- } else {
- String var7 = String.valueOf("/").concat(String.valueOf(this.pathString));
- return var1.pathString.endsWith(var7);
- }
- } else {
- ReversePathTokenizer var2 = new ReversePathTokenizer(this.pathString);
- ReversePathTokenizer var3 = new ReversePathTokenizer(var1.pathString);
- boolean var4 = false;
-
- while(var2.hasMoreTokens()) {
- String var5 = var2.nextToken();
- if (var5.equals("")) {
- var4 = true;
- } else {
- if (!var3.hasMoreTokens()) {
- return false;
- }
-
- String var6;
- for(var6 = var3.nextToken(); !var5.equals(var6) && var4 && var3.hasMoreTokens(); var6 = var3.nextToken()) {
- }
-
- if (!var5.equals(var6)) {
- return false;
- }
-
- var4 = false;
- }
- }
-
- if (this.isAbsolutePath) {
- return !var3.hasMoreTokens();
- } else {
- return true;
- }
- }
- } else {
- throw new RuntimeException("matchPath must be a full path.");
- }
- }
-
- public boolean matches(Element var1) {
- return this.matches(var1, (Attr)null);
- }
-
- public boolean matches(Element var1, Attr var2) {
- ReversePathTokenizer var3 = new ReversePathTokenizer(this.pathString);
- boolean var4 = false;
-
- while(var3.hasMoreTokens()) {
- String var5 = var3.nextToken();
- if (!var5.equals("")) {
- if (var2 != null) {
- if (!var5.startsWith("@") || !var5.substring(1).equals(var2.getName())) {
- return false;
- }
-
- var2 = null;
- } else {
- if (var1 == null) {
- return false;
- }
-
- String var6;
- do {
- var6 = var1.getNodeName();
- Node var7 = var1.getParentNode();
- if (var7 instanceof Element) {
- var1 = (Element)var7;
- } else {
- var1 = null;
- }
- } while(!var5.equals(var6) && var4 && var1 != null);
-
- if (!var5.equals(var6)) {
- return false;
- }
-
- var4 = false;
- }
- } else {
- var4 = true;
- }
- }
-
- if (this.isAbsolutePath) {
- return var1 == null;
- } else {
- return true;
- }
- }
-
- public static void main(String[] var0) {
- try {
- boolean var5 = (new SelectorXPath("xyz")).matches(new SelectorXPath("abc"));
- } catch (RuntimeException var4) {
- boolean var1 = true;
- }
-
- try {
- boolean var7 = (new SelectorXPath("xyz")).matches(new SelectorXPath("/a//xyz"));
- } catch (RuntimeException var3) {
- boolean var6 = true;
- }
-
- boolean var8 = (new SelectorXPath("xyz")).matches(new SelectorXPath("/abc"));
- var8 = (new SelectorXPath("xyz")).matches(new SelectorXPath("/xyz/a"));
- var8 = (new SelectorXPath("/xyz")).matches(new SelectorXPath("/a/xyz"));
- var8 = (new SelectorXPath("abc//xyz")).matches(new SelectorXPath("/abc"));
- var8 = (new SelectorXPath("xyz/@a")).matches(new SelectorXPath("/xyz"));
- var8 = (new SelectorXPath("xyz")).matches(new SelectorXPath("/xyz/@a"));
- var8 = (new SelectorXPath("xyz/@aa")).matches(new SelectorXPath("/xyz/@a"));
- var8 = (new SelectorXPath("a//b//x")).matches(new SelectorXPath("/a/x"));
- var8 = (new SelectorXPath("a//b//x")).matches(new SelectorXPath("/b/a/x"));
- var8 = (new SelectorXPath("a//b/c//x")).matches(new SelectorXPath("/a/c/x"));
- var8 = (new SelectorXPath("x")).matches(new SelectorXPath("/x"));
- var8 = (new SelectorXPath("/x")).matches(new SelectorXPath("/x"));
- var8 = (new SelectorXPath("x")).matches(new SelectorXPath("/a/x"));
- var8 = (new SelectorXPath("a/x")).matches(new SelectorXPath("/a/x"));
- var8 = (new SelectorXPath("/a/x")).matches(new SelectorXPath("/a/x"));
- var8 = (new SelectorXPath("a//x")).matches(new SelectorXPath("/a/x"));
- var8 = (new SelectorXPath("a//x")).matches(new SelectorXPath("/a/b/x"));
- var8 = (new SelectorXPath("a//b//x")).matches(new SelectorXPath("/a/b/x"));
- var8 = (new SelectorXPath("a//b//x")).matches(new SelectorXPath("/a/b/a/x"));
- var8 = (new SelectorXPath("a//b/c//x")).matches(new SelectorXPath("/a/b/c/x"));
- var8 = (new SelectorXPath("x/@a")).matches(new SelectorXPath("/x/@a"));
- var8 = (new SelectorXPath("b/x/@a")).matches(new SelectorXPath("/a/b/x/@a"));
- var8 = (new SelectorXPath("a/b/x/@a")).matches(new SelectorXPath("/a/b/x/@a"));
- var8 = (new SelectorXPath("a//@a")).matches(new SelectorXPath("/a/b/x/@a"));
- var8 = (new SelectorXPath("a//x/@a")).matches(new SelectorXPath("/a/b/x/@a"));
- var8 = true;
- }
- }
-