blob: 991e2a171cf5eb896ff551dea629cd363460c71d [file] [log] [blame]
/*
* Created on Feb 15, 2004
*
*/
package groovy.swt.factory;
import groovy.jface.impl.ApplicationWindowImpl;
import groovy.swt.SwtHelper;
import java.lang.reflect.Field;
import java.util.Iterator;
import java.util.Map;
import org.codehaus.groovy.GroovyException;
import org.codehaus.groovy.runtime.InvokerHelper;
import org.eclipse.jface.window.ApplicationWindow;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Widget;
import org.eclipse.ui.forms.widgets.Form;
import org.eclipse.ui.forms.widgets.ScrolledForm;
import org.eclipse.ui.forms.widgets.Section;
/**
* @author <a href="mailto:ckl@dacelo.nl">Christiaan ten Klooster </a>
* @version $Revision$
*/
public abstract class AbstractSwtFactory {
public abstract Object newInstance(Map properties, Object parent)
throws GroovyException;
/**
* set the properties
*
* @param bean
* @param properties
*/
protected void setBeanProperties(Object bean, Map properties) {
for (Iterator iter = properties.entrySet().iterator(); iter.hasNext();) {
Map.Entry entry = (Map.Entry) iter.next();
String property = entry.getKey().toString();
Object value = entry.getValue();
Field field = null;
try {
field = bean.getClass().getDeclaredField(property);
if (value instanceof String) {
int style = SwtHelper.parseStyle(SWT.class, (String) value);
field.setInt(bean, style);
}
else if (value instanceof Boolean) {
field.setBoolean(bean, ((Boolean) value).booleanValue());
}
else if (value instanceof Integer) {
field.setInt(bean, ((Integer) value).intValue());
}
else if (value instanceof Double) {
field.setDouble(bean, ((Double) value).doubleValue());
}
else if (value instanceof Float) {
field.setFloat(bean, ((Float) value).floatValue());
}
else {
InvokerHelper.setProperty(bean, property, value);
}
}
catch (Exception e) {
}
if (field == null) {
InvokerHelper.setProperty(bean, property, value);
}
}
}
/**
* return the parent widget
*
* @param parent
* @return
*/
protected Widget getParentWidget(Object parent) {
if (parent instanceof ApplicationWindow) {
return (Composite) ((ApplicationWindowImpl) parent).getContents();
}
else if (parent instanceof Form) {
return ((Form) parent).getBody();
}
else if (parent instanceof ScrolledForm) {
return ((ScrolledForm) parent).getBody();
}
else if (parent instanceof Section) {
return ((Section) parent).getClient();
}
else if (parent instanceof Composite) {
return (Composite) parent;
}
else {
return null;
}
}
/**
* return the parent shell
*
* @param parent
* @return
*/
protected Shell getParentShell(Object parent) {
if (parent instanceof ApplicationWindow) {
return ((ApplicationWindowImpl) parent).getShell();
}
else if (parent instanceof Shell) {
return (Shell) parent;
}
else {
return null;
}
}
}