http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/fb641cfc/taverna-uibuilder/src/test/java/net/sf/taverna/t2/lang/uibuilder/PrimitiveTypeBean.java ---------------------------------------------------------------------- diff --git a/taverna-uibuilder/src/test/java/net/sf/taverna/t2/lang/uibuilder/PrimitiveTypeBean.java b/taverna-uibuilder/src/test/java/net/sf/taverna/t2/lang/uibuilder/PrimitiveTypeBean.java new file mode 100644 index 0000000..8240fea --- /dev/null +++ b/taverna-uibuilder/src/test/java/net/sf/taverna/t2/lang/uibuilder/PrimitiveTypeBean.java @@ -0,0 +1,101 @@ +package net.sf.taverna.t2.lang.uibuilder; + +/** + * Bean containing all the primitive types in Java (AFAIK) + * + * @author Tom Oinn + * + */ +public class PrimitiveTypeBean { + + private int intValue = 1; + private short shortValue = 2; + private long longValue = (long) 3.0123; + private double doubleValue = 4.01234; + private boolean booleanValue = false; + private byte byteValue = 5; + private float floatValue = 6.012345f; + private char charValue = 'a'; + + public PrimitiveTypeBean() { + // + } + + public void setIntValue(int intValue) { + this.intValue = intValue; + } + + public String toString() { + return intValue + "," + shortValue + "," + longValue + "," + + doubleValue + "," + booleanValue + "," + byteValue + "," + + floatValue + "," + charValue; + } + + public int getIntValue() { + return intValue; + } + + public void setShortValue(short shortValue) { + this.shortValue = shortValue; + System.out.println(this); + } + + public short getShortValue() { + return shortValue; + } + + public void setLongValue(long longValue) { + this.longValue = longValue; + System.out.println(this); + } + + public long getLongValue() { + return longValue; + } + + public void setDoubleValue(double doubleValue) { + this.doubleValue = doubleValue; + System.out.println(this); + } + + public double getDoubleValue() { + return doubleValue; + } + + public void setBooleanValue(boolean booleanValue) { + this.booleanValue = booleanValue; + System.out.println(this); + } + + public boolean getBooleanValue() { + return booleanValue; + } + + public void setByteValue(byte byteValue) { + this.byteValue = byteValue; + System.out.println(this); + } + + public byte getByteValue() { + return byteValue; + } + + public void setFloatValue(float floatValue) { + this.floatValue = floatValue; + System.out.println(this); + } + + public float getFloatValue() { + return floatValue; + } + + public void setCharValue(char charValue) { + this.charValue = charValue; + System.out.println(this); + } + + public char getCharValue() { + return charValue; + } + +}
http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/fb641cfc/taverna-uibuilder/src/test/java/net/sf/taverna/t2/lang/uibuilder/SampleEnum.java ---------------------------------------------------------------------- diff --git a/taverna-uibuilder/src/test/java/net/sf/taverna/t2/lang/uibuilder/SampleEnum.java b/taverna-uibuilder/src/test/java/net/sf/taverna/t2/lang/uibuilder/SampleEnum.java new file mode 100644 index 0000000..c5ed446 --- /dev/null +++ b/taverna-uibuilder/src/test/java/net/sf/taverna/t2/lang/uibuilder/SampleEnum.java @@ -0,0 +1,13 @@ +package net.sf.taverna.t2.lang.uibuilder; + +/** + * Very simple example enumeration + * + * @author Tom Oinn + * + */ +public enum SampleEnum { + + ABCD, EFGH, IJKL; + +} http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/fb641cfc/taverna-uibuilder/src/test/java/net/sf/taverna/t2/lang/uibuilder/TopLevelBean.java ---------------------------------------------------------------------- diff --git a/taverna-uibuilder/src/test/java/net/sf/taverna/t2/lang/uibuilder/TopLevelBean.java b/taverna-uibuilder/src/test/java/net/sf/taverna/t2/lang/uibuilder/TopLevelBean.java new file mode 100644 index 0000000..3a4d74e --- /dev/null +++ b/taverna-uibuilder/src/test/java/net/sf/taverna/t2/lang/uibuilder/TopLevelBean.java @@ -0,0 +1,43 @@ +package net.sf.taverna.t2.lang.uibuilder; + +/** + * Bean containing the various other sub-beans + * + * @author Tom Oinn + * + */ +public class TopLevelBean { + + private SampleEnum enumeratedField = SampleEnum.ABCD; + private BeanWithBoundProps boundBean = new BeanWithBoundProps(); + private BeanWithNestedList nest = new BeanWithNestedList(); + + public TopLevelBean() { + // + } + + public void setEnumeratedField(SampleEnum enumeratedField) { + this.enumeratedField = enumeratedField; + } + + public SampleEnum getEnumeratedField() { + return enumeratedField; + } + + public void setBoundBean(BeanWithBoundProps boundBean) { + this.boundBean = boundBean; + } + + public BeanWithBoundProps getBoundBean() { + return boundBean; + } + + public void setNest(BeanWithNestedList nest) { + this.nest = nest; + } + + public BeanWithNestedList getNest() { + return nest; + } + +} http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/fb641cfc/uibuilder/pom.xml ---------------------------------------------------------------------- diff --git a/uibuilder/pom.xml b/uibuilder/pom.xml deleted file mode 100644 index bc84391..0000000 --- a/uibuilder/pom.xml +++ /dev/null @@ -1,26 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> - <modelVersion>4.0.0</modelVersion> - <parent> - <groupId>net.sf.taverna.t2</groupId> - <artifactId>lang</artifactId> - <version>2.0.1-SNAPSHOT</version> - </parent> - <groupId>net.sf.taverna.t2.lang</groupId> - <artifactId>uibuilder</artifactId> - <packaging>bundle</packaging> - <name>UI builder based on beans</name> - <dependencies> - <dependency> - <groupId>net.sf.taverna.t2.lang</groupId> - <artifactId>ui</artifactId> - <version>${project.version}</version> - </dependency> - <dependency> - <groupId>org.apache.log4j</groupId> - <artifactId>com.springsource.org.apache.log4j</artifactId> - <version>${log4j.version}</version> - </dependency> - </dependencies> -</project> http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/fb641cfc/uibuilder/src/main/java/net/sf/taverna/t2/lang/uibuilder/AbstractListComponent.java ---------------------------------------------------------------------- diff --git a/uibuilder/src/main/java/net/sf/taverna/t2/lang/uibuilder/AbstractListComponent.java b/uibuilder/src/main/java/net/sf/taverna/t2/lang/uibuilder/AbstractListComponent.java deleted file mode 100644 index 9a7761c..0000000 --- a/uibuilder/src/main/java/net/sf/taverna/t2/lang/uibuilder/AbstractListComponent.java +++ /dev/null @@ -1,521 +0,0 @@ -package net.sf.taverna.t2.lang.uibuilder; - -import static net.sf.taverna.t2.lang.uibuilder.Icons.getIcon; - -import java.awt.BorderLayout; -import java.awt.Color; -import java.awt.Component; -import java.awt.Dimension; -import java.awt.GridLayout; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.lang.reflect.InvocationTargetException; -import java.net.MalformedURLException; -import java.net.URL; -import java.util.List; -import java.util.Map; -import java.util.Properties; -import java.util.Timer; -import java.util.TimerTask; - -import javax.swing.BorderFactory; -import javax.swing.Box; -import javax.swing.BoxLayout; -import javax.swing.JButton; -import javax.swing.JComponent; -import javax.swing.JPanel; -import javax.swing.JSeparator; -import javax.swing.SwingConstants; -import javax.swing.SwingUtilities; - -import org.apache.log4j.Logger; - -/** - * Superclass for list and wrapped list components generated by the UI builder. - * Accepts properties to determine whether the 'new', 'move' and 'delete' - * controls should be displayed and what, if any, concrete class should be used - * when constructing new items. Properties are as follows: - * <p> - * <ul> - * <li><code>nodelete</code> If set do not show the 'delete item' button</li> - * <li><code>nomove</code> If set do not show the 'move up' and 'move down' - * buttons</li> - * <li><code>new=some.class.Name</code> If set then use the specified class, - * loaded with the target object's classloader, when adding new items. Also adds - * the 'New Item' button to the top of the list panel. The specified class must - * be valid to insert into the list and must have a no-argument constructor</li> - * </ul> - * - * @author Tom Oinn - * - */ -public abstract class AbstractListComponent extends JPanel { - - private static final long serialVersionUID = 2067559836729348490L; - - private static Logger logger = Logger - .getLogger(AbstractListComponent.class); - - private String fieldName; - @SuppressWarnings("unchecked") - private List theList; - private Properties props; - private Map<String, Properties> fieldProps; - private List<String> subFields; - private String parent; - private JPanel listItemContainer; - private boolean showDelete = true; - private boolean showMove = true; - @SuppressWarnings("unchecked") - private Class newItemClass = null; - protected static Color deferredButtonColour = Color.orange; - private static Object[] prototypes; - - static { - try { - prototypes = new Object[] { new URL("http://some.host.com/path"), - new Boolean(true), new Integer(1), new Float(1), - new Short((short) 1), new Long((long) 1), - new Character('a'), new Double((double) 1), - new Byte((byte) 1) }; - } catch (MalformedURLException e) { - logger.error("Unable to generate URL", e); - } - } - - /** - * Build a generic list component - * - * @param fieldName - * the name of the field this component represents in its parent - * bean - * @param theList - * the list value of the field - * @param props - * properties for this field - * @param fieldProps - * aggregated properties for all fields in the UI builder scope - * @param newItemClass - * the class to use for construction of new item instances, or - * null if this is not supported - * @param subFields - * all field names within this field, this will be empty for a - * wrapped list - * @param parent - * the parent field ID used to access subfield properties - * @throws NoSuchMethodException - * @throws ClassNotFoundException - * @throws InvocationTargetException - * @throws IllegalAccessException - * @throws IllegalArgumentException - */ - @SuppressWarnings("unchecked") - protected AbstractListComponent(String fieldName, List theList, - Properties props, Map<String, Properties> fieldProps, - final Class<?> newItemClass, List<String> subFields, String parent) - throws NoSuchMethodException, IllegalArgumentException, - IllegalAccessException, InvocationTargetException, - ClassNotFoundException { - super(); - this.fieldName = fieldName; - this.theList = theList; - this.props = props; - this.fieldProps = fieldProps; - this.subFields = subFields; - this.parent = parent; - if (props.containsKey("nodelete")) { - showDelete = false; - } - if (props.containsKey("nomove")) { - showMove = false; - } - this.newItemClass = newItemClass; - setOpaque(false); - setLayout(new BorderLayout()); - String displayName = fieldName; - if (props.containsKey("name")) { - displayName = props.getProperty("name"); - } - setBorder(BorderFactory.createTitledBorder(displayName)); - if (newItemClass != null) { - // Generate 'add new' UI here - JPanel newItemPanel = new JPanel(); - newItemPanel.setOpaque(false); - newItemPanel.setLayout(new BoxLayout(newItemPanel, - BoxLayout.LINE_AXIS)); - newItemPanel.add(Box.createHorizontalGlue()); - - final JButton newItemButton = new JButton("New Item", - getIcon("new")); - newItemPanel.add(newItemButton); - newItemButton.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - try { - Object instance = null; - try { - instance = newItemClass.newInstance(); - } catch (InstantiationException ie) { - // Probably because the class has no default - // constructor, use the prototype list - for (Object prototype : prototypes) { - if (newItemClass.isAssignableFrom(prototype - .getClass())) { - instance = prototype; - break; - } - } - if (instance == null) { - throw ie; - } - } - addNewItemToList(instance); - newItemButton.setForeground(BeanComponent.validColour); - } catch (Exception ex) { - newItemButton - .setForeground(BeanComponent.invalidColour); - logger.error("", ex); - } - } - }); - add(newItemPanel, BorderLayout.NORTH); - } - listItemContainer = new JPanel(); - listItemContainer.setOpaque(false); - listItemContainer.setLayout(new BoxLayout(listItemContainer, - BoxLayout.PAGE_AXIS)); - updateListContents(); - add(listItemContainer, BorderLayout.CENTER); - } - - protected void updateListContents() throws NoSuchMethodException, - IllegalArgumentException, IllegalAccessException, - InvocationTargetException, ClassNotFoundException { - listItemContainer.removeAll(); - boolean first = true; - int index = 0; - List<JComponent> listComponents = getListComponents(); - for (JComponent component : listComponents) { - if (first && newItemClass == null) { - first = false; - } else { - List<Component> c = getSeparatorComponents(); - if (c != null) { - for (Component jc : c) { - listItemContainer.add(jc); - } - } - } - JComponent wrappedComponent = wrapWithControls(component, index++, - listComponents.size()); - if (wrappedComponent != null) { - listItemContainer.add(wrappedComponent); - } else { - listItemContainer.add(component); - } - } - revalidate(); - } - - /** - * Wrap the given component in a panel including whatever list manipulation - * controls are needed. The index of the item being wrapped is supplied to - * inform the various actions the controls can perform. By default this - * returns a JPanel with delete and move controls - * - * @param component - * @param index - * @return - */ - protected JPanel wrapWithControls(JComponent component, final int index, - int listSize) { - int numberOfButtons = 3; - if (!showDelete) { - numberOfButtons--; - } - if (!showMove) { - numberOfButtons -= 2; - } - if (numberOfButtons == 0) { - return null; - } - JPanel result = new JPanel(); - result.setOpaque(false); - result.setLayout(new BorderLayout()); - result.add(component, BorderLayout.CENTER); - // Construct the controls - JPanel controls = new JPanel(); - controls.setOpaque(false); - controls.setLayout(new BorderLayout()); - controls - .add(new JSeparator(SwingConstants.VERTICAL), BorderLayout.WEST); - result.add(controls, BorderLayout.EAST); - JPanel buttons = new JPanel(); - buttons.setOpaque(false); - buttons.setLayout(new GridLayout(0, numberOfButtons)); - - if (showMove) { - // Move up button, or spacer if already at index 0 - if (index > 0) { - JButton moveUpButton = createButton("up", false); - moveUpButton.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - try { - itemMoved(index, index - 1); - } catch (Exception ex) { - logger.error("Unable to move item", ex); - } - } - }); - buttons.add(moveUpButton); - } else { - buttons.add(Box.createGlue()); - } - - // Move down button, or spacer if index == listSize-1 - if (index < (listSize - 1)) { - JButton moveDownButton = createButton("down", false); - moveDownButton.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - try { - itemMoved(index, index + 1); - } catch (Exception ex) { - logger.error("Unable to move item", ex); - } - } - }); - buttons.add(moveDownButton); - } else { - buttons.add(Box.createGlue()); - } - } - - if (showDelete) { - // Delete button - JButton deleteButton = createButton("delete", true); - deleteButton.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - try { - deleteItemAtIndex(index); - } catch (Exception ex) { - logger.error("Unable to delete item", ex); - } - } - }); - buttons.add(deleteButton); - } - JPanel buttonWrapper = new JPanel(); - buttonWrapper.setLayout(new BorderLayout()); - buttonWrapper.setOpaque(false); - buttonWrapper.add(buttons, BorderLayout.NORTH); - controls.add(buttonWrapper, BorderLayout.CENTER); - return result; - } - - private static Timer timer = new Timer(); - - @SuppressWarnings("serial") - private JButton createButton(String iconName, final boolean deferActions) { - JButton result = new JButton(getIcon(iconName)) { - @Override - public Dimension getPreferredSize() { - return new Dimension(getIcon().getIconWidth() + 8, (int) super - .getPreferredSize().getHeight()); - } - - @Override - public Dimension getMinimumSize() { - return new Dimension(getIcon().getIconWidth() + 8, (int) super - .getMinimumSize().getHeight()); - } - - private boolean active = false; - private Color defaultBackground = null; - - @Override - public void addActionListener(final ActionListener theListener) { - if (defaultBackground == null) { - defaultBackground = getBackground(); - } - if (!deferActions) { - super.addActionListener(theListener); - return; - } else { - super.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent ae) { - if (active) { - theListener.actionPerformed(ae); - } else { - setActive(true); - timer.schedule(new TimerTask() { - - @Override - public void run() { - SwingUtilities - .invokeLater(new Runnable() { - public void run() { - setActive(false); - } - }); - } - }, 1000); - } - } - }); - } - } - - private synchronized void setActive(boolean isActive) { - if (isActive == active) { - return; - } else { - active = isActive; - setBackground(active ? deferredButtonColour - : defaultBackground); - - } - } - }; - result.setFocusable(false); - return result; - } - - /** - * Called when building the UI, must return a list of editor components - * corresponding to items in the list - * - * @throws NoSuchMethodException - * @throws ClassNotFoundException - * @throws InvocationTargetException - * @throws IllegalAccessException - * @throws IllegalArgumentException - */ - protected abstract List<JComponent> getListComponents() - throws NoSuchMethodException, IllegalArgumentException, - IllegalAccessException, InvocationTargetException, - ClassNotFoundException; - - /** - * Override to specify a separator component to be used inbetween internal - * list components, by default no component is used (this returns null). - * - * @return - */ - protected List<Component> getSeparatorComponents() { - return null; - } - - /** - * Called when the user has clicked on the 'new item' button, this method is - * passed the new instance of the specified type and should handle the - * addition of this item to the list and the update of the UI to reflect - * this change - * - * @param o - * the object to add to the list - * @throws ClassNotFoundException - * @throws InvocationTargetException - * @throws IllegalAccessException - * @throws NoSuchMethodException - * @throws IllegalArgumentException - */ - protected abstract void addNewItemToList(Object o) - throws IllegalArgumentException, NoSuchMethodException, - IllegalAccessException, InvocationTargetException, - ClassNotFoundException; - - /** - * Called when the user has clicked on the 'delete item' button next to a - * particular item in the list, this method is passed the index within the - * list of the item to be deleted and must update the UI appropriately - * - * @param index - * @throws ClassNotFoundException - * @throws InvocationTargetException - * @throws IllegalAccessException - * @throws NoSuchMethodException - * @throws IllegalArgumentException - */ - protected abstract void deleteItemAtIndex(int index) - throws IllegalArgumentException, NoSuchMethodException, - IllegalAccessException, InvocationTargetException, - ClassNotFoundException; - - /** - * Called when the user has moved an item from one index to another, passed - * the old index of the item and the desired new index. This method must - * effect the actual move within the list and the update of the UI. - * - * @throws ClassNotFoundException - * @throws InvocationTargetException - * @throws IllegalAccessException - * @throws NoSuchMethodException - * @throws IllegalArgumentException - */ - protected abstract void itemMoved(int fromIndex, int toIndex) - throws IllegalArgumentException, NoSuchMethodException, - IllegalAccessException, InvocationTargetException, - ClassNotFoundException; - - /** - * Get the field name of this component - * - * @return - */ - protected final String getFieldName() { - return this.fieldName; - } - - /** - * Return the underlying list presented by this component - * - * @return - */ - @SuppressWarnings("unchecked") - protected final List getUnderlyingList() { - return this.theList; - } - - /** - * Get a list of (renamed) sub-fields of this field, so if this field was - * foo.bar.someList and had a foo.bar.someList.urgle this would contain - * 'urgle' - * - * @return - */ - protected final List<String> getSubFields() { - return this.subFields; - } - - /** - * Get the properties applied to this list component - * - * @return - */ - protected final Properties getProperties() { - return this.props; - } - - /** - * The parent field name is the name of this field plus its parent string - * and is used when recursively building sub-panels within the list. Pass - * this into the 'parent' argument of the UIBuilder's construction methods. - * - * @return - */ - protected final String getParentFieldName() { - return this.parent; - } - - /** - * Get the map of all field->property object block defined by the UI builder - * constructing this component. This is used along with the parent field - * name to determine properties of sub-components when recursing into a - * nested collection. - * - * @return - */ - protected final Map<String, Properties> getFieldProperties() { - return this.fieldProps; - } - -} http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/fb641cfc/uibuilder/src/main/java/net/sf/taverna/t2/lang/uibuilder/AlignableComponent.java ---------------------------------------------------------------------- diff --git a/uibuilder/src/main/java/net/sf/taverna/t2/lang/uibuilder/AlignableComponent.java b/uibuilder/src/main/java/net/sf/taverna/t2/lang/uibuilder/AlignableComponent.java deleted file mode 100644 index 483771b..0000000 --- a/uibuilder/src/main/java/net/sf/taverna/t2/lang/uibuilder/AlignableComponent.java +++ /dev/null @@ -1,29 +0,0 @@ -package net.sf.taverna.t2.lang.uibuilder; - -/** - * Superinterface for components which have a label and which may be mutually - * aligned within a panel. This assumes the component is laid out with a label - * to the left of the main editing area, and that we want to ensure that all - * editing areas line up and can do this by setting the preferred size of the - * label. - * - * @author Tom Oinn - * - */ -public interface AlignableComponent { - - /** - * Set the preferred width of the label for this alignable component - * - * @param newWidth - */ - public void setLabelWidth(int newWidth); - - /** - * Get the current preferred width of the label for this alignable component - * - * @return - */ - public int getLabelWidth(); - -} http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/fb641cfc/uibuilder/src/main/java/net/sf/taverna/t2/lang/uibuilder/Alignment.java ---------------------------------------------------------------------- diff --git a/uibuilder/src/main/java/net/sf/taverna/t2/lang/uibuilder/Alignment.java b/uibuilder/src/main/java/net/sf/taverna/t2/lang/uibuilder/Alignment.java deleted file mode 100644 index 6143887..0000000 --- a/uibuilder/src/main/java/net/sf/taverna/t2/lang/uibuilder/Alignment.java +++ /dev/null @@ -1,66 +0,0 @@ -package net.sf.taverna.t2.lang.uibuilder; - -import java.awt.Component; -import java.awt.Container; -import java.lang.reflect.InvocationTargetException; -import java.util.ArrayList; -import java.util.List; - -import javax.swing.SwingUtilities; - -import org.apache.log4j.Logger; - -/** - * Static utility method to align alignable components within a container - * - * @author Tom Oinn - * - */ -public abstract class Alignment { - - private static Logger logger = Logger - .getLogger(Alignment.class); - - /** - * Find all instances of BeanFieldTextArea in the specified container and - * set all label widths to the same as the widest of them, aligning the - * content areas as a result - * - * @param container - */ - public static void alignInContainer(Container container) { - int widestLabel = 0; - final List<AlignableComponent> fields = new ArrayList<AlignableComponent>(); - for (Component comp : container.getComponents()) { - if (comp instanceof AlignableComponent) { - AlignableComponent field = (AlignableComponent) comp; - int fieldWidth = field.getLabelWidth(); - if (fieldWidth > widestLabel) { - widestLabel = fieldWidth; - } - fields.add(field); - } - } - final int widestLabelVal = widestLabel; - if (!SwingUtilities.isEventDispatchThread()) { - try { - SwingUtilities.invokeAndWait(new Runnable() { - public void run() { - for (AlignableComponent field : fields) { - field.setLabelWidth(widestLabelVal); - } - } - }); - } catch (InterruptedException e) { - logger.error("", e); - } catch (InvocationTargetException e) { - logger.error("", e); - } - } else { - for (AlignableComponent field : fields) { - field.setLabelWidth(widestLabelVal); - } - } - } - -} http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/fb641cfc/uibuilder/src/main/java/net/sf/taverna/t2/lang/uibuilder/BeanCheckBox.java ---------------------------------------------------------------------- diff --git a/uibuilder/src/main/java/net/sf/taverna/t2/lang/uibuilder/BeanCheckBox.java b/uibuilder/src/main/java/net/sf/taverna/t2/lang/uibuilder/BeanCheckBox.java deleted file mode 100644 index 1d86f4a..0000000 --- a/uibuilder/src/main/java/net/sf/taverna/t2/lang/uibuilder/BeanCheckBox.java +++ /dev/null @@ -1,54 +0,0 @@ -package net.sf.taverna.t2.lang.uibuilder; - -import java.awt.BorderLayout; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.util.Properties; - -import javax.swing.Box; -import javax.swing.JCheckBox; - -/** - * Bean field editor using a JCheckBox to handle boolean and Boolean field types - * - * @author Tom Oinn - */ -public class BeanCheckBox extends BeanComponent implements AlignableComponent { - - private static final long serialVersionUID = -2842617445268734650L; - private JCheckBox value; - - public BeanCheckBox(Object target, String propertyName, Properties props) - throws NoSuchMethodException { - this(target, propertyName, true, props); - } - - public BeanCheckBox(Object target, String propertyName, boolean useLabel, - Properties props) throws NoSuchMethodException { - super(target, propertyName, useLabel, props); - setLayout(new BorderLayout()); - value = new JCheckBox(); - value.setSelected(getBooleanProperty()); - value.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent ae) { - boolean isSelected = value.isSelected(); - currentObjectValue = isSelected; - setProperty(); - } - }); - addLabel(); - value.setOpaque(false); - add(Box.createHorizontalGlue(), BorderLayout.CENTER); - add(value, BorderLayout.EAST); - } - - @Override - protected void updateComponent() { - value.setSelected(getBooleanProperty()); - } - - private boolean getBooleanProperty() { - return (Boolean) getProperty(); - } - -} http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/fb641cfc/uibuilder/src/main/java/net/sf/taverna/t2/lang/uibuilder/BeanComponent.java ---------------------------------------------------------------------- diff --git a/uibuilder/src/main/java/net/sf/taverna/t2/lang/uibuilder/BeanComponent.java b/uibuilder/src/main/java/net/sf/taverna/t2/lang/uibuilder/BeanComponent.java deleted file mode 100644 index 27014e1..0000000 --- a/uibuilder/src/main/java/net/sf/taverna/t2/lang/uibuilder/BeanComponent.java +++ /dev/null @@ -1,420 +0,0 @@ -package net.sf.taverna.t2.lang.uibuilder; - -import java.awt.BorderLayout; -import java.awt.Color; -import java.awt.Dimension; -import java.beans.PropertyChangeEvent; -import java.beans.PropertyChangeListener; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.util.Properties; - -import javax.swing.Box; -import javax.swing.JLabel; -import javax.swing.JPanel; -import javax.swing.SwingUtilities; -import javax.swing.event.AncestorEvent; -import javax.swing.event.AncestorListener; - -import org.apache.log4j.Logger; - -/** - * Superclass of all bean component editors acting on a single (non collection) - * property within a POJO. This handles bound properties, using reflection to - * determine whether an appropriate addPropertyChangeListener method exists on - * the target bean and registering a listener if so. It also registers an - * ancestor listener to de-register this property listener if the component is - * removed from the display heirarchy and to re-attach it if the component is - * added. Implement updateComponent with the code to update the UI state from - * the underlying object, this is called when a property change is received by - * the listener (but not used for unbound properties). - * <p> - * This superclass also defines the name property: - * <ul> - * <li><code>name=SomeName</code> by default field labels use the field name - * defined in the configuration, including any case used. If this property is - * defined then the specified name is used instead</li> - * </ul> - * - * @author Tom Oinn - */ -public abstract class BeanComponent extends JPanel { - - private static Logger logger = Logger - .getLogger(BeanComponent.class); - - private static final long serialVersionUID = -6044009506938335937L; - protected Object target; - protected String propertyName; - protected Method getMethod, setMethod = null; - protected boolean editable = true; - protected Class<?> propertyType; - protected static Color invalidColour = Color.red; - protected static Color validColour = Color.black; - protected static Color uneditedColour = Color.white; - protected static Color editedColour = new Color(255, 245, 200); - protected boolean currentValueValid = true; - protected Object currentObjectValue = null; - protected JLabel label; - private boolean useLabel = false; - protected static int height = 16; - private Properties properties; - private PropertyChangeListener propertyListener = null; - - /** - * Equivalent to BeanComponent(target, propertyName, true, props) - */ - public BeanComponent(Object target, String propertyName, Properties props) - throws NoSuchMethodException { - this(target, propertyName, true, props); - } - - /** - * Superclass constructor for BeanComponent instances. - * - * @param target - * the object containing the property this component acts as a - * view and controller for - * @param propertyName - * name of the property in the target object - * @param useLabel - * whether to show the label component (we set this to false for - * wrapped lists, for example) - * @param props - * a component specific properties object, passing in any - * properties defined in the configuration passed to UIBuilder - * @throws NoSuchMethodException - * if the appropriate get method for the named property can't be - * found - */ - public BeanComponent(Object target, String propertyName, boolean useLabel, - Properties props) throws NoSuchMethodException { - super(); - setOpaque(false); - // Find methods - this.properties = props; - this.useLabel = useLabel; - this.target = target; - this.propertyName = propertyName; - - // If the target implements property change support then we can attach a - // listener to update the UI if the bound property changes. This - // listener is attached and detached in response to an ancestor listener - // so the bound property is only monitored when the component is visible - // in the UI. - try { - target.getClass().getMethod("addPropertyChangeListener", - String.class, PropertyChangeListener.class); - setUpPropertyListener(); - addAncestorListener(new AncestorListener() { - public void ancestorAdded(AncestorEvent event) { - setUpPropertyListener(); - } - - public void ancestorMoved(AncestorEvent event) { - // Ignore - } - - public void ancestorRemoved(AncestorEvent event) { - tearDownPropertyListener(); - } - }); - } catch (NoSuchMethodException nsme) { - // Means we don't have a bound property listener - } - - getMethod = findMethodWithPrefix("get"); - try { - setMethod = findMethodWithPrefix("set"); - } catch (NoSuchMethodException nsme) { - logger.error("Unable to find set method", nsme); - editable = false; - } - propertyType = getPropertyType(target, propertyName); - } - - /** - * Attempts to create and bind a property change listener to the target - * bean, failing silently if the bean doesn't implement the appropriate - * methods - */ - private synchronized void setUpPropertyListener() { - if (propertyListener == null) { - Method addListener = null; - try { - addListener = target.getClass().getMethod( - "addPropertyChangeListener", String.class, - PropertyChangeListener.class); - } catch (NoSuchMethodException nsme) { - return; - } - propertyListener = new PropertyChangeListener() { - public void propertyChange(PropertyChangeEvent evt) { - Object newValue = evt.getNewValue(); - if (currentObjectValue == null - || (newValue != currentObjectValue && !newValue - .equals(currentObjectValue))) { - // System.out.println("Property change, source was "+evt.getSource()); - if (SwingUtilities.isEventDispatchThread()) { - updateComponent(); - } else { - // try { - SwingUtilities.invokeLater(new Runnable() { - public void run() { - updateComponent(); - } - }); - } - } - } - }; - try { - addListener.invoke(target, propertyName, propertyListener); - } catch (IllegalArgumentException e) { - logger.error("Unable to set up property listener", e); - } catch (IllegalAccessException e) { - logger.error("Unable to set up property listener", e); - } catch (InvocationTargetException e) { - logger.error("Unable to set up property listener", e); - } - } - } - - /** - * If the property listener for bound properties exists then this method - * unregisters it from the target, attempting to use a variety of the - * standard method names to do so - */ - private synchronized void tearDownPropertyListener() { - if (propertyListener == null) { - return; - } - try { - Method removeListener = null; - try { - removeListener = target.getClass().getMethod( - "removePropertyChangeListener", String.class, - PropertyChangeListener.class); - removeListener.invoke(target, propertyName, propertyListener); - } catch (NoSuchMethodException nsme) { - try { - removeListener = target.getClass().getMethod( - "removePropertyChangeListener", - PropertyChangeListener.class); - removeListener.invoke(target, propertyListener); - } catch (NoSuchMethodException nsme2) { - return; - } - } - } catch (IllegalArgumentException e) { - logger.error("Unable to remove property listener", e); - } catch (IllegalAccessException e) { - logger.error("Unable to remove property listener", e); - } catch (InvocationTargetException e) { - logger.error("Unable to remove property listener", e); - } - propertyListener = null; - } - - /** - * Called by the bound property listener, implementing components must - * update their UI state in this method to match the value of the underlying - * component. This method is always called in the AWT dispatch thread so - * implementations can safely modify the state of UI components without - * worrying about swing thread handling - */ - protected abstract void updateComponent(); - - /** - * Adds the label to the component if labels are enabled - */ - protected void addLabel() { - if (useLabel) { - String labelName = propertyName; - if (getProperties().containsKey("name")) { - labelName = getProperties().getProperty("name"); - } - label = new JLabel(labelName); - label.setOpaque(false); - label.setPreferredSize(new Dimension( - label.getPreferredSize().width, height)); - JPanel labelPanel = new JPanel(); - labelPanel.setOpaque(false); - labelPanel.add(label); - labelPanel.add(Box.createHorizontalStrut(5)); - add(labelPanel, BorderLayout.WEST); - } - } - - /** - * Return the type of the property on the target object, trying to locate a - * matching 'get' method for the supplied property name and returning the - * class of that method's return type. - * <p> - * Attempts to, in order : - * <ol> - * <li>Call the method and get the concrete type of the returned value</li> - * <li>Get the declared return type of the get method</li> - * </ol> - * - * @param target - * @param propertyName - * @return - * @throws NoSuchMethodException - * if the get method can't be found for the given property name - * on the target - */ - public static Class<?> getPropertyType(Object target, String propertyName) - throws NoSuchMethodException { - Method getMethod = findMethodWithPrefix("get", target, propertyName); - try { - Object value = getMethod.invoke(target); - if (value != null) { - return value.getClass(); - } - } catch (InvocationTargetException ite) { - // - } catch (IllegalArgumentException e) { - // - } catch (IllegalAccessException e) { - // - } - // if (target instanceof ListHandler.ListItem) { - // return ((ListHandler.ListItem) target).getTargetClass(); - // } - return getMethod.getReturnType(); - } - - /** - * Searches for the specified method on the target object, throwing an - * exception if it can't be found. Searches for - * target.[prefix][propertyname]() - * - * @throws NoSuchMethodException - */ - static Method findMethodWithPrefix(String prefix, Object target, - String propertyName) throws NoSuchMethodException { - for (Method m : target.getClass().getMethods()) { - if (m.getName().equalsIgnoreCase(prefix + propertyName)) { - return m; - } - } - throw new NoSuchMethodException("Can't find method matching '" + prefix - + propertyName + "' in " + target.getClass().getCanonicalName()); - } - - /** - * Calls the static findMethodWithPrefix passing in the property name and - * the target assigned to this instance - * - * @param prefix - * a string prefix to use when finding the name, searches for - * [prefix][propertyname]() - * @return a Method matching the query - * @throws NoSuchMethodException - * if the method can't be found. - */ - protected final Method findMethodWithPrefix(String prefix) - throws NoSuchMethodException { - return findMethodWithPrefix(prefix, target, propertyName); - } - - /** - * Returns the toString value of the current bean property, or the empty - * string if the get method returns null - */ - protected final String getPropertyAsString() { - Object value = getProperty(); - if (value == null) { - return ""; - } - currentObjectValue = value; - return value.toString(); - } - - /** - * Uses reflection to call the get[property name] method on the target bean - * and returns the result - * - * @return current value of the bean property - */ - protected final Object getProperty() { - try { - Object value = getMethod.invoke(target); - return value; - } catch (Exception ex) { - logger.error("Unable to get property", ex); - return null; - } - } - - /** - * Sets the property on the object to the current object value for this UI - * component, effectively pushing any changes into the underlying target - * bean - */ - protected final void setProperty() { - if (currentValueValid && editable) { - if (setMethod != null) { - try { - setMethod.invoke(target, currentObjectValue); - } catch (IllegalArgumentException e) { - logger.error("Unable to set property", e); - } catch (IllegalAccessException e) { - logger.error("Unable to set property", e); - } catch (InvocationTargetException e) { - logger.error("Unable to set property", e); - } - } - } - } - - /** - * If using labels (as determined by the useLabel property) this sets the - * preferred width of the label for this component - * - * @param newWidth - * new label width in pixels - */ - public void setLabelWidth(int newWidth) { - if (useLabel) { - label.setPreferredSize(new Dimension(newWidth, height)); - } - } - - /** - * If using labels (as determined by the useLabel property) this returns the - * current preferred size of the label associated with this component - * - * @return label width in pixels - */ - public int getLabelWidth() { - if (useLabel) { - return this.label.getPreferredSize().width; - } else { - return 0; - } - } - - /** - * If using the label then set its text (foreground) colour - * - * @param colour - */ - public void setLabelColour(Color colour) { - if (useLabel) { - this.label.setForeground(colour); - } - } - - /** - * Get the properties object associated with this component. This is - * generated from the configuration passed to UIBuilder - * - * @return a Properties object containing named properties applying to this - * component in the UI - */ - public Properties getProperties() { - return this.properties; - } -} http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/fb641cfc/uibuilder/src/main/java/net/sf/taverna/t2/lang/uibuilder/BeanEnumComboBox.java ---------------------------------------------------------------------- diff --git a/uibuilder/src/main/java/net/sf/taverna/t2/lang/uibuilder/BeanEnumComboBox.java b/uibuilder/src/main/java/net/sf/taverna/t2/lang/uibuilder/BeanEnumComboBox.java deleted file mode 100644 index 34646a4..0000000 --- a/uibuilder/src/main/java/net/sf/taverna/t2/lang/uibuilder/BeanEnumComboBox.java +++ /dev/null @@ -1,89 +0,0 @@ -package net.sf.taverna.t2.lang.uibuilder; - -import java.awt.BorderLayout; -import java.awt.Dimension; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.util.Properties; - -import javax.swing.JComboBox; - -/** - * Bean property editor for enumerated property types, rendering the enumeration - * as a combo box - * - * @author Tom Oinn - * - */ -public class BeanEnumComboBox extends BeanComponent implements - AlignableComponent { - - private static final long serialVersionUID = -6892016525599793149L; - - private Object[] possibleValues; - private static int height = 24; - private JComboBox value; - - public BeanEnumComboBox(Object target, String propertyName, Properties props) - throws NoSuchMethodException { - this(target, propertyName, true, props); - } - - public BeanEnumComboBox(Object target, String propertyName, - boolean useLabel, Properties props) throws NoSuchMethodException { - super(target, propertyName, useLabel, props); - setLayout(new BorderLayout()); - // Check that this is actually an enumeration type - if (!propertyType.isEnum()) { - throw new IllegalArgumentException( - "Can't use BeanEnumComboBox on a non Enumeration property"); - } - possibleValues = propertyType.getEnumConstants(); - value = new JComboBox(possibleValues) { - - private static final long serialVersionUID = -7712225463703816146L; - - @Override - public Dimension getMinimumSize() { - return new Dimension(super.getMinimumSize().width, height); - } - - @Override - public Dimension getPreferredSize() { - return new Dimension(super.getPreferredSize().width, height); - } - - @Override - public Dimension getMaximumSize() { - return new Dimension(super.getMaximumSize().width, height); - } - }; - value.setSelectedIndex(currentValueIndex()); - value.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - synchronized (this) { - currentObjectValue = value.getSelectedItem(); - setProperty(); - } - } - }); - addLabel(); - add(value, BorderLayout.CENTER); - } - - private int currentValueIndex() { - Object currentValue = getProperty(); - for (int i = 0; i < possibleValues.length; i++) { - if (currentValue.equals(possibleValues[i])) { - return i; - } - } - return -1; - } - - @Override - protected void updateComponent() { - value.setSelectedIndex(currentValueIndex()); - } - -} http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/fb641cfc/uibuilder/src/main/java/net/sf/taverna/t2/lang/uibuilder/BeanTextArea.java ---------------------------------------------------------------------- diff --git a/uibuilder/src/main/java/net/sf/taverna/t2/lang/uibuilder/BeanTextArea.java b/uibuilder/src/main/java/net/sf/taverna/t2/lang/uibuilder/BeanTextArea.java deleted file mode 100644 index 740a592..0000000 --- a/uibuilder/src/main/java/net/sf/taverna/t2/lang/uibuilder/BeanTextArea.java +++ /dev/null @@ -1,89 +0,0 @@ -package net.sf.taverna.t2.lang.uibuilder; - -import java.awt.Dimension; -import java.awt.KeyboardFocusManager; -import java.util.HashSet; -import java.util.Properties; -import java.util.Set; - -import javax.swing.KeyStroke; -import javax.swing.UIManager; -import javax.swing.text.JTextComponent; - -import net.sf.taverna.t2.lang.ui.DialogTextArea; - -/** - * Bean editor based on a DialogTextArea for use with longer strings such as - * descriptions. Supports the 'nofilter' property, if this is not specified then - * the text inserted initially (but not on subsequent events such as property - * change messages) will be filtered to remove multiple whitespace elements, - * replacing them with spaces, and to trim leading and trailing whitespace. - * - * @author Tom Oinn - * - */ -public class BeanTextArea extends BeanTextComponent implements - AlignableComponent { - - private static final long serialVersionUID = 6418526320837944375L; - boolean initialized = false; - - public BeanTextArea(Object target, String propertyName, Properties props) - throws NoSuchMethodException { - super(target, propertyName, props); - initialized = true; - } - - @SuppressWarnings( { "serial", "unchecked" }) - @Override - protected JTextComponent getTextComponent() { - DialogTextArea result = new DialogTextArea() { - @Override - public void setText(String text) { - if (!initialized && !getProperties().containsKey("nofilter")) { - super.setText(text.replaceAll("[ \\t\\n\\x0B\\f\\r]+", " ") - .trim()); - } else { - super.setText(text); - } - } - - @Override - public Dimension getPreferredSize() { - return new Dimension(0, super.getPreferredSize().height); - } - - @Override - public Dimension getMinimumSize() { - return new Dimension(0, super.getPreferredSize().height); - } - }; - // Fix to add borders to DialogTextArea on old look and feel implementations, - // the new one (Nimbus) already has this - if (!UIManager.getLookAndFeel().getName().equals("Nimbus")) { - result.setBorder(UIManager.getBorder("TextField.border")); - result.setFont(UIManager.getFont("TextField.font")); - } - // Change tab behaviour to allow tab to move to the next field - this - // effectively prevents a tab being placed in the text area but hey, we - // don't really want people doing that anyway in these cases. - Set set = new HashSet( - result - .getFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS)); - set.add(KeyStroke.getKeyStroke("TAB")); - result.setFocusTraversalKeys( - KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS, set); - - set = new HashSet( - result - .getFocusTraversalKeys(KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS)); - set.add(KeyStroke.getKeyStroke("shift TAB")); - result.setFocusTraversalKeys( - KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS, set); - - result.setLineWrap(true); - result.setWrapStyleWord(true); - return result; - } - -} http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/fb641cfc/uibuilder/src/main/java/net/sf/taverna/t2/lang/uibuilder/BeanTextComponent.java ---------------------------------------------------------------------- diff --git a/uibuilder/src/main/java/net/sf/taverna/t2/lang/uibuilder/BeanTextComponent.java b/uibuilder/src/main/java/net/sf/taverna/t2/lang/uibuilder/BeanTextComponent.java deleted file mode 100644 index 791f1a8..0000000 --- a/uibuilder/src/main/java/net/sf/taverna/t2/lang/uibuilder/BeanTextComponent.java +++ /dev/null @@ -1,174 +0,0 @@ -package net.sf.taverna.t2.lang.uibuilder; - -import java.awt.BorderLayout; -import java.awt.event.FocusEvent; -import java.awt.event.FocusListener; -import java.lang.reflect.Constructor; -import java.util.Properties; - -import javax.swing.event.DocumentEvent; -import javax.swing.event.DocumentListener; -import javax.swing.text.JTextComponent; - -/** - * Abstract superclass for all bean property editors based on text components - * - * @author Tom Oinn - */ -public abstract class BeanTextComponent extends BeanComponent { - - private static final long serialVersionUID = -9133735782847457090L; - private String regex = null; - private JTextComponent text; - private String originalValue = null; - private boolean edited = false; - - protected BeanTextComponent(Object target, String propertyName, - Properties props) throws NoSuchMethodException { - this(target, propertyName, true, props); - } - - protected BeanTextComponent(Object target, String propertyName, - boolean useLabel, Properties props) throws NoSuchMethodException { - super(target, propertyName, useLabel, props); - setLayout(new BorderLayout()); - if (propertyType.equals(Boolean.class)) { - setRegex("\\A((true)|(false))\\Z"); - } else if (propertyType.equals(Character.class)) { - setRegex("\\A.\\Z"); - } - text = getTextComponent(); - originalValue = getPropertyAsString(); - text.setText(originalValue); - text.setEditable(editable); - add(text, BorderLayout.CENTER); - if (editable) { - text.getDocument().addDocumentListener(new DocumentListener() { - public void changedUpdate(DocumentEvent e) { - valueChangedInEditor(); - } - - public void insertUpdate(DocumentEvent e) { - valueChangedInEditor(); - } - - public void removeUpdate(DocumentEvent e) { - valueChangedInEditor(); - } - - private void valueChangedInEditor() { - BeanTextComponent.this.valueChangedInEditor(); - } - }); - text.addFocusListener(new FocusListener() { - public void focusGained(FocusEvent e) { - // - } - - public void focusLost(FocusEvent e) { - // System.out.println("Focus lost : valid = " - // + currentValueValid); - if (currentValueValid) { - if (isEdited()) { - BeanTextComponent.this.setProperty(); - originalValue = text.getText(); - } - } else { - originalValue = getPropertyAsString(); - text.setText(originalValue); - } - setEdited(false); - } - - }); - } - addLabel(); - } - - private boolean isEdited() { - return this.edited; - } - - private void setEdited(boolean edited) { - if (edited == this.edited) { - return; - } - this.edited = edited; - text.setBackground(edited ? editedColour : uneditedColour); - if (!edited) { - setValid(true); - } - } - - public void updateComponent() { - originalValue = getPropertyAsString(); - text.setText(originalValue); - setEdited(false); - } - - private void valueChangedInEditor() { - if (text.getText().equals(originalValue)) { - setEdited(false); - return; - } - setEdited(true); - // Check for regex - if (regex != null) { - if (text.getText().matches(regex) == false) { - // System.out.println(text.getText() + ".matches(" + regex - // + ")==false"); - setValid(false); - return; - } - } - // Delegate to constructor for non-string classes - if (!propertyType.equals(String.class)) { - try { - Constructor<?> cons = null; - if (propertyType.equals(Character.class) - && text.getText().length() > 0) { - currentObjectValue = text.getText().toCharArray()[0]; - } else { - cons = propertyType.getConstructor(String.class); - currentObjectValue = cons.newInstance(text.getText()); - } - } catch (Throwable t) { - setValid(false); - return; - } - } else { - currentObjectValue = text.getText(); - } - setValid(true); - } - - private void setValid(final boolean valid) { - if (valid == currentValueValid) { - return; - } - currentValueValid = valid; - text.setForeground(valid ? validColour : invalidColour); - setLabelColour(valid ? validColour : invalidColour); - text.repaint(); - } - - /** - * Implement this to provide the actual UI component used to show the - * content of the field. Done this way so you can choose what component to - * use. - * - * @return - */ - protected abstract JTextComponent getTextComponent(); - - /** - * Set the regular expression used to validate the contents of the text - * field - * - * @param regex - */ - public void setRegex(String regex) { - this.regex = regex; - } - -} http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/fb641cfc/uibuilder/src/main/java/net/sf/taverna/t2/lang/uibuilder/BeanTextField.java ---------------------------------------------------------------------- diff --git a/uibuilder/src/main/java/net/sf/taverna/t2/lang/uibuilder/BeanTextField.java b/uibuilder/src/main/java/net/sf/taverna/t2/lang/uibuilder/BeanTextField.java deleted file mode 100644 index 63ed107..0000000 --- a/uibuilder/src/main/java/net/sf/taverna/t2/lang/uibuilder/BeanTextField.java +++ /dev/null @@ -1,60 +0,0 @@ -package net.sf.taverna.t2.lang.uibuilder; - -import java.awt.Dimension; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.util.Properties; - -import javax.swing.JTextField; -import javax.swing.text.JTextComponent; - -/** - * Bean field editor using a JTextField for short values - * - * @author Tom Oinn - */ -public class BeanTextField extends BeanTextComponent implements - AlignableComponent { - - private static final long serialVersionUID = 5968203948656812060L; - - public BeanTextField(Object target, String propertyName, boolean useLabel, - Properties props) throws NoSuchMethodException { - super(target, propertyName, useLabel, props); - } - - public BeanTextField(Object target, String propertyName, Properties props) - throws NoSuchMethodException { - this(target, propertyName, true, props); - } - - @SuppressWarnings("serial") - @Override - protected JTextComponent getTextComponent() { - final JTextField result = new JTextField() { - - @Override - public Dimension getMinimumSize() { - return new Dimension(0, height); - } - - @Override - public Dimension getPreferredSize() { - return new Dimension(0, height); - } - - @Override - public Dimension getMaximumSize() { - return new Dimension(super.getMaximumSize().width, height); - } - }; - result.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - setProperty(); - result.transferFocus(); - } - }); - return new JTextField(); - } - -} http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/fb641cfc/uibuilder/src/main/java/net/sf/taverna/t2/lang/uibuilder/Icons.java ---------------------------------------------------------------------- diff --git a/uibuilder/src/main/java/net/sf/taverna/t2/lang/uibuilder/Icons.java b/uibuilder/src/main/java/net/sf/taverna/t2/lang/uibuilder/Icons.java deleted file mode 100644 index b8fc58e..0000000 --- a/uibuilder/src/main/java/net/sf/taverna/t2/lang/uibuilder/Icons.java +++ /dev/null @@ -1,41 +0,0 @@ -package net.sf.taverna.t2.lang.uibuilder; - -import java.net.URL; -import java.util.HashMap; -import java.util.Map; - -import javax.swing.ImageIcon; - -import org.apache.log4j.Logger; - -/** - * Manage icons for the UIBuilder - * - * @author Tom Oinn - * - */ -public abstract class Icons { - - private static Logger logger = Logger - .getLogger(Icons.class); - - private static Map<String, ImageIcon> icons; - - static { - icons = new HashMap<String, ImageIcon>(); - } - - static synchronized ImageIcon getIcon(String iconName) { - String iconNameLC = iconName.toLowerCase(); - if (!icons.containsKey(iconNameLC)) { - try { - URL iconURL = Icons.class.getResource(iconName + ".png"); - icons.put(iconNameLC, new ImageIcon(iconURL)); - } catch (Exception ex) { - logger.error("Unable to get icon resource", ex); - } - } - return icons.get(iconNameLC); - } - -} http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/fb641cfc/uibuilder/src/main/java/net/sf/taverna/t2/lang/uibuilder/ListHandler.java ---------------------------------------------------------------------- diff --git a/uibuilder/src/main/java/net/sf/taverna/t2/lang/uibuilder/ListHandler.java b/uibuilder/src/main/java/net/sf/taverna/t2/lang/uibuilder/ListHandler.java deleted file mode 100644 index e7a2db8..0000000 --- a/uibuilder/src/main/java/net/sf/taverna/t2/lang/uibuilder/ListHandler.java +++ /dev/null @@ -1,67 +0,0 @@ -package net.sf.taverna.t2.lang.uibuilder; - -import java.util.ArrayList; -import java.util.List; - -import org.apache.log4j.Logger; - -/** - * The list handler is used to allow the reflection based UI builder to handle - * lists of non-bean value types such as String etc. - * - * @author Tom Oinn - * - */ -public class ListHandler extends - ArrayList<ListHandler.ListItem> { - - private static Logger logger = Logger - .getLogger(ListHandler.class); - - private static final long serialVersionUID = -1361470859975889856L; - - private List<Object> wrappedList; - - public ListHandler(List<Object> theList) { - this.wrappedList = theList; - for (Object o : wrappedList) { - this.add(new ListItem(o)); - } - } - - /**@Override - public boolean add(ListHandler.ListItem newItem) { - wrappedList.add((T) newItem.getValue()); - return super.add(newItem); - }*/ - - /** - * Simple container class to handle list items, allowing them to present a - * bean interface - * - * @author Tom Oinn - * - */ - class ListItem { - Object value; - - public ListItem(Object o) { - this.value = o; - } - - public void setValue(Object o) { - try { - wrappedList.set(indexOf(this), o); - this.value = o; - } - catch (Exception ex) { - logger.error("Unable to set value", ex); - } - } - - public Object getValue() { - return this.value; - } - } - -} http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/fb641cfc/uibuilder/src/main/java/net/sf/taverna/t2/lang/uibuilder/RecursiveListComponent.java ---------------------------------------------------------------------- diff --git a/uibuilder/src/main/java/net/sf/taverna/t2/lang/uibuilder/RecursiveListComponent.java b/uibuilder/src/main/java/net/sf/taverna/t2/lang/uibuilder/RecursiveListComponent.java deleted file mode 100644 index 7db727d..0000000 --- a/uibuilder/src/main/java/net/sf/taverna/t2/lang/uibuilder/RecursiveListComponent.java +++ /dev/null @@ -1,98 +0,0 @@ -package net.sf.taverna.t2.lang.uibuilder; - -import java.awt.Component; -import java.lang.reflect.InvocationTargetException; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.Properties; - -import javax.swing.Box; -import javax.swing.BoxLayout; -import javax.swing.JComponent; -import javax.swing.JPanel; -import javax.swing.JSeparator; -import javax.swing.SwingConstants; - -import net.sf.taverna.t2.lang.uibuilder.UIBuilder; - -/** - * Handles lists where the elements in the list are beans with declared fields - * in the UIBuilder configuration. - * - * @author Tom Oinn - * - */ -public class RecursiveListComponent extends AbstractListComponent { - - private static final long serialVersionUID = -3760308074241973969L; - - @SuppressWarnings("unchecked") - public RecursiveListComponent(String fieldName, List theList, - Properties props, Map<String, Properties> fieldProps, - Class<?> newItemClass, List<String> subFields, String parent) - throws NoSuchMethodException, IllegalArgumentException, - IllegalAccessException, InvocationTargetException, - ClassNotFoundException { - super(fieldName, theList, props, fieldProps, newItemClass, subFields, - parent); - // TODO Auto-generated constructor stub - } - - @SuppressWarnings("unchecked") - @Override - protected void addNewItemToList(Object o) throws IllegalArgumentException, - NoSuchMethodException, IllegalAccessException, - InvocationTargetException, ClassNotFoundException { - getUnderlyingList().add(0, o); - updateListContents(); - } - - @Override - protected void deleteItemAtIndex(int index) - throws IllegalArgumentException, NoSuchMethodException, - IllegalAccessException, InvocationTargetException, - ClassNotFoundException { - getUnderlyingList().remove(index); - updateListContents(); - } - - @Override - protected List<JComponent> getListComponents() - throws NoSuchMethodException, IllegalArgumentException, - IllegalAccessException, InvocationTargetException, - ClassNotFoundException { - List<JComponent> result = new ArrayList<JComponent>(); - for (Object target : getUnderlyingList()) { - JPanel listItem = new JPanel(); - listItem.setOpaque(false); - listItem.setLayout(new BoxLayout(listItem, BoxLayout.PAGE_AXIS)); - UIBuilder.buildEditor(target, getSubFields(), getFieldProperties(), - listItem, getParentFieldName()); - result.add(listItem); - } - return result; - } - - @Override - public List<Component> getSeparatorComponents() { - List<Component> result = new ArrayList<Component>(); - result.add(Box.createVerticalStrut(3)); - result.add(new JSeparator(SwingConstants.HORIZONTAL)); - result.add(Box.createVerticalStrut(3)); - return result; - } - - @SuppressWarnings("unchecked") - @Override - protected void itemMoved(int fromIndex, int toIndex) - throws IllegalArgumentException, NoSuchMethodException, - IllegalAccessException, InvocationTargetException, - ClassNotFoundException { - Object toMove = getUnderlyingList().remove(fromIndex); - getUnderlyingList().add(toIndex, toMove); - updateListContents(); - - } - -} http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/fb641cfc/uibuilder/src/main/java/net/sf/taverna/t2/lang/uibuilder/UIBuilder.java ---------------------------------------------------------------------- diff --git a/uibuilder/src/main/java/net/sf/taverna/t2/lang/uibuilder/UIBuilder.java b/uibuilder/src/main/java/net/sf/taverna/t2/lang/uibuilder/UIBuilder.java deleted file mode 100644 index 2501046..0000000 --- a/uibuilder/src/main/java/net/sf/taverna/t2/lang/uibuilder/UIBuilder.java +++ /dev/null @@ -1,236 +0,0 @@ -package net.sf.taverna.t2.lang.uibuilder; - -import java.awt.BorderLayout; -import java.awt.Container; -import java.lang.reflect.InvocationTargetException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Properties; - -import javax.swing.BorderFactory; -import javax.swing.Box; -import javax.swing.BoxLayout; -import javax.swing.JPanel; - -/** - * Static methods to build bean editor UIs through reflection and (minimal) - * configuration - * - * @author Tom Oinn - * - */ -public abstract class UIBuilder { - - /** - * Build an editor component for the specified target, the configuration - * string determines which properties are exposed to the UI and whether to - * drill into nested collections and composite bean types - * - * @param target - * @param configuration - * @return - * @throws NoSuchMethodException - * @throws InvocationTargetException - * @throws IllegalAccessException - * @throws IllegalArgumentException - * @throws ClassNotFoundException - */ - public static JPanel buildEditor(Object target, String configuration) - throws UIConstructionException { - String[] fields = configuration.split(";"); - return buildEditor(target, fields); - } - - public static JPanel buildEditor(Object target, String[] fields) - throws UIConstructionException { - // Now go through the configuration... - JPanel result = new JPanel(); - result.setLayout(new BorderLayout()); - JPanel contents = new JPanel(); - contents.setOpaque(false); - contents.setLayout(new BoxLayout(contents, BoxLayout.PAGE_AXIS)); - List<String> fieldNames = new ArrayList<String>(); - Map<String, Properties> fieldProps = new HashMap<String, Properties>(); - for (String field : fields) { - String fieldName = field.split(":")[0]; - fieldNames.add(fieldName); - if (field.split(":").length > 1) { - String propertiesString = field.split(":")[1]; - String[] props = propertiesString.split(","); - if (props.length == 0) { - props = new String[] { propertiesString }; - } - Properties properties = new Properties(); - for (String prop : props) { - if (prop.contains("=")) { - String[] p = prop.split("="); - properties.put(p[0], p[1]); - } else { - properties.put(prop, "true"); - } - } - fieldProps.put(fieldName, properties); - } - } - try { - buildEditor(target, fieldNames, fieldProps, contents, ""); - } catch (Exception ex) { - throw new UIConstructionException( - "Unable to construct UI from POJO", ex); - } - result.add(contents, BorderLayout.NORTH); - result.add(Box.createVerticalGlue(), BorderLayout.CENTER); - return result; - } - - @SuppressWarnings("unchecked") - static void buildEditor(Object target, List<String> fieldNames, - Map<String, Properties> fieldProps, Container contents, - String parent) throws NoSuchMethodException, - IllegalArgumentException, IllegalAccessException, - InvocationTargetException, ClassNotFoundException { - - // Get all top level fields to render in this pass - List<String> activeFields = new ArrayList<String>(); - for (String field : fieldNames) { - if (!field.contains(".")) { - activeFields.add(field); - } - } - // For each field generate the appropriate component - for (String field : activeFields) { - - // Fetch the properties block for this field - Properties props = getProperties(field, parent, fieldProps); - - // First check whether there are any subfields for this field, in - // which case we need to treat it differently - boolean simpleField = true; - for (String subField : fieldNames) { - if (!subField.equals(field) && subField.startsWith(field + ".")) { - simpleField = false; - break; - } - } - List<String> subFields = new ArrayList<String>(); - // Create filtered list of the field names - // to ensure that this is now the top level - // field and recurse - String newParent = field; - if (!parent.equals("")) { - newParent = parent + "." + field; - } - for (String f : fieldNames) { - if (f.startsWith(field + ".")) { - subFields.add(f.substring(field.length() + 1)); - } - } - - // Secondly check whether this is a list - boolean listField = false; - Class<?> fieldType = BeanComponent.getPropertyType(target, field); - if (List.class.isAssignableFrom(fieldType)) { - listField = true; - } - - // Now handle the four possible cases. If a non-list non-compound - // field we have a terminator and can obtain an appropriate subclass - // of BeanComponent to render it - if (!listField) { - // If a non-list non-compound field we have a terminator and can - // obtain an appropriate subclass of BeanComponent to render it - if (simpleField) { - if (fieldType.isEnum()) { - contents - .add(new BeanEnumComboBox(target, field, props)); - } else if (Boolean.class.isAssignableFrom(fieldType) - || boolean.class.isAssignableFrom(fieldType)) { - contents.add(new BeanCheckBox(target, field, props)); - } else { - if (props.get("type") != null) { - if (props.get("type").equals("textarea")) { - BeanTextArea bta = new BeanTextArea(target, - field, props); - contents.add(bta); - } else { - contents.add(new BeanTextField(target, field, - props)); - } - } else { - contents - .add(new BeanTextField(target, field, props)); - } - } - } else { - Object value = BeanComponent.findMethodWithPrefix("get", - target, field).invoke(target); - if (value != null) { - String displayName = field; - if (props.containsKey("name")) { - displayName = props.getProperty("name"); - } - JPanel itemContainer = new JPanel(); - itemContainer.setOpaque(false); - itemContainer.setBorder(BorderFactory - .createTitledBorder(displayName)); - itemContainer.setLayout(new BoxLayout(itemContainer, - BoxLayout.PAGE_AXIS)); - buildEditor(value, subFields, fieldProps, - itemContainer, newParent); - contents.add(itemContainer); - } - } - } else { - // Handle the case where this is a simple field (i.e. no - // sub-fields defined) but is a list type. In this case we need - // to build an appropriate wrapper list panel around this - // returned list. - List value = (List) BeanComponent.findMethodWithPrefix("get", - target, field).invoke(target); - // If the 'new' property is defined then fetch the Class object - // to be used to instantiate new list items - Class<?> newItemClass = null; - if (props.containsKey("new")) { - String newItemClassName = props.getProperty("new"); - newItemClass = target.getClass().getClassLoader() - .loadClass(newItemClassName); - } - if (value != null) { - if (simpleField) { - contents.add(new WrappedListComponent(field, value, - props, fieldProps, newItemClass, subFields, - newParent)); - // contents.add(buildWrappedList(field, value, props, - // newItemClass)); - } else { - contents.add(new RecursiveListComponent(field, value, - props, fieldProps, newItemClass, subFields, - newParent)); - // contents.add(buildList(field, value, props, - // fieldProps, - // newItemClass, subFields, newParent)); - } - } - } - } - // Finally align any labels where appropriate - Alignment.alignInContainer(contents); - } - - private static Properties getProperties(String field, String parent, - Map<String, Properties> props) { - String fullName = parent; - if (!parent.equals("")) { - fullName = fullName + "."; - } - fullName = fullName + field; - if (props.containsKey(fullName)) { - return props.get(fullName); - } else { - return new Properties(); - } - } - -} http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/fb641cfc/uibuilder/src/main/java/net/sf/taverna/t2/lang/uibuilder/UIConstructionException.java ---------------------------------------------------------------------- diff --git a/uibuilder/src/main/java/net/sf/taverna/t2/lang/uibuilder/UIConstructionException.java b/uibuilder/src/main/java/net/sf/taverna/t2/lang/uibuilder/UIConstructionException.java deleted file mode 100644 index 54167db..0000000 --- a/uibuilder/src/main/java/net/sf/taverna/t2/lang/uibuilder/UIConstructionException.java +++ /dev/null @@ -1,29 +0,0 @@ -package net.sf.taverna.t2.lang.uibuilder; - -/** - * Used to wrap checked exceptions from the various reflection based UI - * construction methods - * - * @author Tom Oinn - */ -public class UIConstructionException extends RuntimeException { - - private static final long serialVersionUID = 3396809563793962316L; - - public UIConstructionException() { - // - } - - public UIConstructionException(String message) { - super(message); - } - - public UIConstructionException(Throwable cause) { - super(cause); - } - - public UIConstructionException(String message, Throwable cause) { - super(message, cause); - } - -} http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/fb641cfc/uibuilder/src/main/java/net/sf/taverna/t2/lang/uibuilder/WrappedListComponent.java ---------------------------------------------------------------------- diff --git a/uibuilder/src/main/java/net/sf/taverna/t2/lang/uibuilder/WrappedListComponent.java b/uibuilder/src/main/java/net/sf/taverna/t2/lang/uibuilder/WrappedListComponent.java deleted file mode 100644 index e44b036..0000000 --- a/uibuilder/src/main/java/net/sf/taverna/t2/lang/uibuilder/WrappedListComponent.java +++ /dev/null @@ -1,105 +0,0 @@ -package net.sf.taverna.t2.lang.uibuilder; - -import java.lang.reflect.InvocationTargetException; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.Properties; - -import javax.swing.BoxLayout; -import javax.swing.JComponent; -import javax.swing.JPanel; - -/** - * Models lists requiring use of the ListHandler helper class within the UI - * - * @author Tom Oinn - */ -public class WrappedListComponent extends AbstractListComponent { - - private static final long serialVersionUID = -4457073442579747674L; - private ListHandler lh = null; - - @SuppressWarnings("unchecked") - public WrappedListComponent(String fieldName, List theList, - Properties props, Map<String, Properties> fieldProps, - Class<?> newItemClass, List<String> subFields, String parent) - throws NoSuchMethodException, IllegalArgumentException, - IllegalAccessException, InvocationTargetException, - ClassNotFoundException { - super(fieldName, theList, props, fieldProps, newItemClass, subFields, - parent); - } - - @SuppressWarnings("unchecked") - @Override - protected void addNewItemToList(Object o) throws IllegalArgumentException, - NoSuchMethodException, IllegalAccessException, - InvocationTargetException, ClassNotFoundException { - // Keep lists in sync - getListHandler(); - synchronized (lh) { - getUnderlyingList().add(0, o); - lh.add(0, lh.new ListItem(o)); - } - updateListContents(); - } - - @Override - protected void deleteItemAtIndex(int index) - throws IllegalArgumentException, NoSuchMethodException, - IllegalAccessException, InvocationTargetException, - ClassNotFoundException { - getListHandler(); - synchronized (lh) { - getUnderlyingList().remove(index); - lh.remove(index); - } - updateListContents(); - } - - @SuppressWarnings("unchecked") - @Override - protected void itemMoved(int fromIndex, int toIndex) - throws IllegalArgumentException, NoSuchMethodException, - IllegalAccessException, InvocationTargetException, - ClassNotFoundException { - getListHandler(); - synchronized (lh) { - Object toMove = getUnderlyingList().remove(fromIndex); - ListHandler.ListItem wrapperToMove = lh.remove(fromIndex); - getUnderlyingList().add(toIndex, toMove); - lh.add(toIndex, wrapperToMove); - } - updateListContents(); - } - - @Override - protected List<JComponent> getListComponents() throws NoSuchMethodException { - getListHandler(); - List<JComponent> result = new ArrayList<JComponent>(); - for (ListHandler.ListItem item : lh) { - JPanel listItem = new JPanel(); - listItem.setOpaque(false); - listItem.setLayout(new BoxLayout(listItem, BoxLayout.PAGE_AXIS)); - Class<?> itemClass = item.getValue().getClass(); - if (itemClass.isEnum()) { - result.add(new BeanEnumComboBox(item, "value", false, - new Properties())); - } else { - result.add(new BeanTextField(item, "value", false, - new Properties())); - } - } - return result; - } - - @SuppressWarnings("unchecked") - private ListHandler getListHandler() { - if (this.lh == null) { - lh = new ListHandler(getUnderlyingList()); - } - return lh; - } - -} http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/fb641cfc/uibuilder/src/main/java/net/sf/taverna/t2/lang/uibuilder/package.html ---------------------------------------------------------------------- diff --git a/uibuilder/src/main/java/net/sf/taverna/t2/lang/uibuilder/package.html b/uibuilder/src/main/java/net/sf/taverna/t2/lang/uibuilder/package.html deleted file mode 100644 index 7ee4684..0000000 --- a/uibuilder/src/main/java/net/sf/taverna/t2/lang/uibuilder/package.html +++ /dev/null @@ -1,4 +0,0 @@ -<body> -Swing components to control and render the PluginManager and associated -bean classes, most obviously PluginDescription -</body> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/fb641cfc/uibuilder/src/main/resources/net/sf/taverna/t2/lang/uibuilder/delete.png ---------------------------------------------------------------------- diff --git a/uibuilder/src/main/resources/net/sf/taverna/t2/lang/uibuilder/delete.png b/uibuilder/src/main/resources/net/sf/taverna/t2/lang/uibuilder/delete.png deleted file mode 100644 index 4ad6a58..0000000 Binary files a/uibuilder/src/main/resources/net/sf/taverna/t2/lang/uibuilder/delete.png and /dev/null differ http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/fb641cfc/uibuilder/src/main/resources/net/sf/taverna/t2/lang/uibuilder/down.png ---------------------------------------------------------------------- diff --git a/uibuilder/src/main/resources/net/sf/taverna/t2/lang/uibuilder/down.png b/uibuilder/src/main/resources/net/sf/taverna/t2/lang/uibuilder/down.png deleted file mode 100644 index c7b2f03..0000000 Binary files a/uibuilder/src/main/resources/net/sf/taverna/t2/lang/uibuilder/down.png and /dev/null differ http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/fb641cfc/uibuilder/src/main/resources/net/sf/taverna/t2/lang/uibuilder/new.png ---------------------------------------------------------------------- diff --git a/uibuilder/src/main/resources/net/sf/taverna/t2/lang/uibuilder/new.png b/uibuilder/src/main/resources/net/sf/taverna/t2/lang/uibuilder/new.png deleted file mode 100644 index 7c437cf..0000000 Binary files a/uibuilder/src/main/resources/net/sf/taverna/t2/lang/uibuilder/new.png and /dev/null differ http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/fb641cfc/uibuilder/src/main/resources/net/sf/taverna/t2/lang/uibuilder/up.png ---------------------------------------------------------------------- diff --git a/uibuilder/src/main/resources/net/sf/taverna/t2/lang/uibuilder/up.png b/uibuilder/src/main/resources/net/sf/taverna/t2/lang/uibuilder/up.png deleted file mode 100644 index bace5c1..0000000 Binary files a/uibuilder/src/main/resources/net/sf/taverna/t2/lang/uibuilder/up.png and /dev/null differ http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/fb641cfc/uibuilder/src/test/java/net/sf/taverna/t2/lang/uibuilder/Application.java ---------------------------------------------------------------------- diff --git a/uibuilder/src/test/java/net/sf/taverna/t2/lang/uibuilder/Application.java b/uibuilder/src/test/java/net/sf/taverna/t2/lang/uibuilder/Application.java deleted file mode 100644 index 3f90241..0000000 --- a/uibuilder/src/test/java/net/sf/taverna/t2/lang/uibuilder/Application.java +++ /dev/null @@ -1,48 +0,0 @@ -package net.sf.taverna.t2.lang.uibuilder; - -import java.awt.Color; - -import javax.swing.JFrame; -import javax.swing.JPanel; -import javax.swing.JScrollPane; -import javax.swing.UIManager; -import javax.swing.UnsupportedLookAndFeelException; - -import net.sf.taverna.t2.lang.uibuilder.UIBuilder; - -/** - * Torture test for the UIBuilder, run this as an application - * - * @author Tom Oinn - * - */ -public class Application { - - private static final String NUMBUS = "com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel"; - - public static void main(String[] args) throws ClassNotFoundException, - InstantiationException, IllegalAccessException, - UnsupportedLookAndFeelException { - try { - UIManager.setLookAndFeel(NUMBUS); - } catch (ClassNotFoundException ex) { - // ignore - } - Object bean = new TopLevelBean(); - JFrame win = new JFrame(); - JPanel contents = UIBuilder.buildEditor(bean, new String[] { - "boundbean", "boundbean.string:type=textarea", "boundbean.url", - "boundbean.uri", - "boundbean.string:type=textarea", "boundbean.url", - "enumeratedfield", "nest", "nest.list", "nest.list.list1", - "nest.list.list2", "nest.list.list2.string", - "nest.list.list2.url" }); - contents.setBackground(new Color(240, 230, 200)); - win.setContentPane(new JScrollPane(contents)); - win.setTitle("Bean test"); - win.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); - win.pack(); - win.setVisible(true); - } - -} http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/fb641cfc/uibuilder/src/test/java/net/sf/taverna/t2/lang/uibuilder/Application2.java ---------------------------------------------------------------------- diff --git a/uibuilder/src/test/java/net/sf/taverna/t2/lang/uibuilder/Application2.java b/uibuilder/src/test/java/net/sf/taverna/t2/lang/uibuilder/Application2.java deleted file mode 100644 index bf689c9..0000000 --- a/uibuilder/src/test/java/net/sf/taverna/t2/lang/uibuilder/Application2.java +++ /dev/null @@ -1,44 +0,0 @@ -package net.sf.taverna.t2.lang.uibuilder; - -import java.awt.Color; - -import javax.swing.JFrame; -import javax.swing.JPanel; -import javax.swing.JScrollPane; -import javax.swing.UIManager; -import javax.swing.UnsupportedLookAndFeelException; - -import net.sf.taverna.t2.lang.uibuilder.UIBuilder; - -/** - * Torture test for the UIBuilder, run this as an application - * - * @author Tom Oinn - * - */ -public class Application2 { - - private static final String NUMBUS = "com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel"; - - public static void main(String[] args) throws ClassNotFoundException, - InstantiationException, IllegalAccessException, - UnsupportedLookAndFeelException { - try { - UIManager.setLookAndFeel(NUMBUS); - } catch (ClassNotFoundException ex) { - // ignore - } - Object bean = new PrimitiveTypeBean(); - JFrame win = new JFrame(); - JPanel contents = UIBuilder.buildEditor(bean, new String[] { - "intvalue", "shortValue", "longValue", "doubleValue", - "booleanValue", "byteValue", "floatValue", "charValue" }); - contents.setBackground(new Color(240, 230, 200)); - win.setContentPane(new JScrollPane(contents)); - win.setTitle("Primitive type test"); - win.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); - win.pack(); - win.setVisible(true); - } - -} http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/fb641cfc/uibuilder/src/test/java/net/sf/taverna/t2/lang/uibuilder/BeanWithBoundProps.java ---------------------------------------------------------------------- diff --git a/uibuilder/src/test/java/net/sf/taverna/t2/lang/uibuilder/BeanWithBoundProps.java b/uibuilder/src/test/java/net/sf/taverna/t2/lang/uibuilder/BeanWithBoundProps.java deleted file mode 100644 index 3f91ea2..0000000 --- a/uibuilder/src/test/java/net/sf/taverna/t2/lang/uibuilder/BeanWithBoundProps.java +++ /dev/null @@ -1,74 +0,0 @@ -package net.sf.taverna.t2.lang.uibuilder; - -import java.beans.PropertyChangeListener; -import java.beans.PropertyChangeSupport; -import java.net.MalformedURLException; -import java.net.URI; -import java.net.URL; - -/** - * Example bean with string and URL properties, both of which fire property - * change events - * - * @author Tom Oinn - * - */ -public class BeanWithBoundProps { - - private String string = "Default value"; - private URL url; - private PropertyChangeSupport pcs; - private URI uri; - - - public BeanWithBoundProps() { - try { - this.url = new URL("http://some.default.url"); - this.pcs = new PropertyChangeSupport(this); - this.uri = URI.create("http://google.com/"); - } catch (MalformedURLException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - - public void setUrl(URL url) { - URL old = this.url; - this.url = url; - this.pcs.firePropertyChange("url", old, url); - } - - public URL getUrl() { - return url; - } - - - - public void setString(String string) { - String old = this.string; - this.string = string; - this.pcs.firePropertyChange("string", old, string); - } - - public String getString() { - return string; - } - - public void addPropertyChangeListener(String propertyName, - PropertyChangeListener l) { - pcs.addPropertyChangeListener(propertyName, l); - } - - public void removePropertyChangeListener(PropertyChangeListener l) { - pcs.removePropertyChangeListener(l); - } - - public void setUri(URI uri) { - this.uri = uri; - } - - public URI getUri() { - return uri; - } - -} http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/fb641cfc/uibuilder/src/test/java/net/sf/taverna/t2/lang/uibuilder/BeanWithListProperties.java ---------------------------------------------------------------------- diff --git a/uibuilder/src/test/java/net/sf/taverna/t2/lang/uibuilder/BeanWithListProperties.java b/uibuilder/src/test/java/net/sf/taverna/t2/lang/uibuilder/BeanWithListProperties.java deleted file mode 100644 index 90d7c6a..0000000 --- a/uibuilder/src/test/java/net/sf/taverna/t2/lang/uibuilder/BeanWithListProperties.java +++ /dev/null @@ -1,35 +0,0 @@ -package net.sf.taverna.t2.lang.uibuilder; - -import java.util.List; -import java.util.ArrayList; - -/** - * Sample bean with a couple of list properties - * - * @author Tom Oinn - * - */ -public class BeanWithListProperties { - - private List<String> list1; - private List<BeanWithBoundProps> list2; - - public BeanWithListProperties() { - this.list1 = new ArrayList<String>(); - this.list2 = new ArrayList<BeanWithBoundProps>(); - list1.add("A list item"); - list1.add("Another item"); - for (int i = 0; i < 10; i++) { - list2.add(new BeanWithBoundProps()); - } - } - - public List<String> getList1() { - return this.list1; - } - - public List<BeanWithBoundProps> getList2() { - return this.list2; - } - -} http://git-wip-us.apache.org/repos/asf/incubator-taverna-workbench/blob/fb641cfc/uibuilder/src/test/java/net/sf/taverna/t2/lang/uibuilder/BeanWithNestedList.java ---------------------------------------------------------------------- diff --git a/uibuilder/src/test/java/net/sf/taverna/t2/lang/uibuilder/BeanWithNestedList.java b/uibuilder/src/test/java/net/sf/taverna/t2/lang/uibuilder/BeanWithNestedList.java deleted file mode 100644 index 231f068..0000000 --- a/uibuilder/src/test/java/net/sf/taverna/t2/lang/uibuilder/BeanWithNestedList.java +++ /dev/null @@ -1,28 +0,0 @@ -package net.sf.taverna.t2.lang.uibuilder; - -import java.util.ArrayList; -import java.util.List; - -/** - * Simple bean with a list of the BeanWithListProperties to check nested list - * management - * - * @author Tom Oinn - * - */ -public class BeanWithNestedList { - - private List<BeanWithListProperties> list; - - public BeanWithNestedList() { - this.list = new ArrayList<BeanWithListProperties>(); - for (int i = 0; i < 3; i++) { - list.add(new BeanWithListProperties()); - } - } - - public List<BeanWithListProperties> getList() { - return this.list; - } - -}
