package abbot.swt;
import java.util.Collection;
import java.util.HashMap;
import java.util.WeakHashMap;
import org.eclipse.swt.widgets.Widget;
import abbot.Log;
import abbot.script.swt.WidgetReference;
/**
* A simple implementation of the Resolver interface.
*/
public class SimpleResolver extends Resolver {
public static final String copyright = "Licensed Materials -- Property of IBM\n"+
"(c) Copyright International Business Machines Corporation, 2003\nUS Government "+
"Users Restricted Rights - Use, duplication or disclosure restricted by GSA "+
"ADP Schedule Contract with IBM Corp.";
private HashMap refs = new HashMap();
private WeakHashMap widgets = new WeakHashMap();
private HashMap properties = new HashMap();
public WidgetReference getWidgetReference(String name) {
synchronized(refs) {
Log.debug("Looking for reference with id '" + name + "' among "
+ refs.size() + " references");
return (WidgetReference)refs.get(name);
}
}
// public WidgetReference getWidgetReference(Widget widget) {
// synchronized(refs) {
// WidgetReference match =
// (WidgetReference)widgets.get(widget);
// if (match == null) {
// /* want to get a widget reference from a given widget */
// DefaultWidgetFinder.getFinder().matchWidget(widget,
// refs.values().iterator(),
// WidgetFinder.MATCH_EXACT);
// if (match != null) {
// Log.debug("Cacheing component match");
// widgets.put(widget, match);
// }
// }
// return match;
// }
// }
public WidgetReference addWidget(Widget widget) {
// See if we've already got it
synchronized(refs) {
WidgetReference ref =
getWidgetReference(widget);
/* references are being used here to track widgets */
if (ref == null) {
// Nope, create a new one
/*Log.debug("Component " + ComponentTester.toString(comp)
+ " not yet referenced, adding it");*/
if(widget==null){
System.out.print("");
}
ref = new WidgetReference(this, widget);
refs.put(ref.getID(), ref);
widgets.put(widget, ref);
if (ref.getID().equals("")) {
Log.warn("Reference id is empty: " + ref);
}
}
else {
/*Log.debug("Component " + ComponentTester.toString(comp)
+ " already referenced, using " + ref);*/
}
return ref;
}
}
public void addWidgetReference(WidgetReference ref) {
synchronized(refs) {
refs.put(ref.getID(), ref);
}
}
public String getUniqueID(WidgetReference ref) {
// Use the component's name, if available
String id = ref.getID();
String cname = ref.getRefClassName();
cname = cname.substring(cname.lastIndexOf(".") + 1);
if (id == null) {
// Don't ever use an empty string for the ID
if (ref.getName() != null
&& !"".equals(ref.getName())) {
id = ref.getName();
}
else if (ref.getTag() != null
&& !"".equals(ref.getTag())) {
id = ref.getTag();
}
else {
id = cname + " Instance";
}
}
String ext = "";
int count = 1;
while (refs.get(id + ext) != null) {
ext = " " + count++;
}
return id + ext;
}
public Collection getWidgetReferences() {
synchronized(refs) {
return ((HashMap)refs.clone()).values();
}
}
public String getProperty(String name) {
return (String)properties.get(name);
}
public void setProperty(String name, String value) {
properties.put(name, value);
}
}