org.jdesktop.beansbinding.PropertyPath Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of swixml Show documentation
Show all versions of swixml Show documentation
GUI generating engine for Java applications
/*
* Copyright (C) 2006-2007 Sun Microsystems, Inc. All rights reserved. Use is
* subject to license terms.
*/
package org.jdesktop.beansbinding;
import java.util.StringTokenizer;
import java.util.ArrayList;
/**
* @author Shannon Hickey
* @author Scott Violet
*/
abstract class PropertyPath {
private PropertyPath() {}
public abstract int length();
// throws ArrayIndexOutBoundsException if not valid
public abstract String get(int index);
public String getLast() {
return get(length() - 1);
}
public abstract String toString();
public static PropertyPath createPropertyPath(String path) {
if (path == null) {
throw new IllegalArgumentException("path must be non-null");
}
StringTokenizer tokenizer = new StringTokenizer(path, ".");
ArrayList list = new ArrayList();
while (tokenizer.hasMoreTokens()) {
list.add(tokenizer.nextToken());
}
int size = list.size();
if (size == 0) {
throw new IllegalArgumentException("path must be non-empty");
} else if (list.size() == 1) {
return new SinglePropertyPath(list.get(0));
} else {
String[] multi = new String[list.size()];
return new MultiPropertyPath(list.toArray(multi));
}
}
public boolean equals(Object o) {
if (o == this) {
return true;
}
if (o instanceof PropertyPath) {
PropertyPath oPath = (PropertyPath)o;
int length = length();
if (length != oPath.length()) {
return false;
}
for (int i = 0; i < length; i++) {
if (!get(i).equals(oPath.get(i))) {
return false;
}
return true;
}
}
return false;
}
public int hashCode() {
int result = 17;
int length = length();
for (int i = 0; i < length; i++) {
result = 37 * result + get(i).hashCode();
}
return result;
}
static final class MultiPropertyPath extends PropertyPath {
private final String[] path;
public MultiPropertyPath(String[] path) {
this.path = path;
for (int i = 0; i < path.length; i++) {
path[i] = path[i].intern();
}
assert (path.length > 0);
}
public int length() {
return path.length;
}
public String get(int index) {
return path[index];
}
public String toString() {
StringBuilder builder = new StringBuilder();
builder.append(path[0]);
for (int i = 1; i < path.length; i++) {
builder.append('.');
builder.append(path[i]);
}
return builder.toString();
}
}
static final class SinglePropertyPath extends PropertyPath {
private final String path;
public SinglePropertyPath(String path) {
this.path = path.intern();
}
public int length() {
return 1;
}
public String get(int index) {
if (index == 0) {
return path;
}
throw new ArrayIndexOutOfBoundsException();
}
public String getLast() {
return path;
}
public String toString() {
return path;
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy