package org.xmind.ui.internal.editor;
import java.net.URI;
import java.util.regex.Pattern;
import org.eclipse.core.expressions.PropertyTester;
import org.eclipse.core.runtime.Assert;
import org.xmind.gef.ui.editor.Editable;
import org.xmind.ui.mindmap.IWorkbookRef;
public class WorkbookRefPropertyTester extends PropertyTester {
private static final String P_URI = "uri"; //$NON-NLS-1$
private static final String P_URI_SCHEME = "uriScheme"; //$NON-NLS-1$
private static final String P_EXIST = "exist"; //$NON-NLS-1$
public WorkbookRefPropertyTester() {
}
@Override
public boolean test(Object receiver, String property, Object[] args,
Object expectedValue) {
Assert.isLegal(receiver instanceof IWorkbookRef);
IWorkbookRef workbookRef = (IWorkbookRef) receiver;
if (P_URI.equals(property)) {
String uriString = workbookRef.getURI().toString();
if (expectedValue instanceof String
&& ((String) expectedValue).startsWith("^")) { //$NON-NLS-1$
return Pattern.matches((String) expectedValue, uriString);
}
return testStringValue(uriString, expectedValue);
} else if (P_URI_SCHEME.equals(property)) {
URI uri = workbookRef.getURI();
return testStringValue(uri == null ? null : uri.getScheme(),
expectedValue);
} else if (P_EXIST.equals(property)) {
boolean exists = ((Editable) workbookRef).exists();
if (expectedValue == null || expectedValue.equals("") //$NON-NLS-1$
|| expectedValue.equals(Boolean.TRUE.toString())) {
return exists;
} else if (expectedValue.equals(Boolean.FALSE.toString())) {
return !exists;
}
}
Assert.isTrue(false, "Unrecognized property: " + property); //$NON-NLS-1$
return false;
}
private static boolean testStringValue(String actualValue,
Object expectedValue) {
if ("".equals(expectedValue)) //$NON-NLS-1$
expectedValue = null;
else if (expectedValue != null)
expectedValue = expectedValue.toString();
return actualValue == expectedValue
|| (actualValue != null && actualValue.equals(expectedValue));
}
}