You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@chemistry.apache.org by fm...@apache.org on 2011/04/24 14:47:49 UTC
svn commit: r1096321 - in
/chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main:
java/org/apache/chemistry/opencmis/workbench/
java/org/apache/chemistry/opencmis/workbench/details/
java/org/apache/chemistry/opencm...
Author: fmui
Date: Sun Apr 24 12:47:48 2011
New Revision: 1096321
URL: http://svn.apache.org/viewvc?rev=1096321&view=rev
Log:
- added mutli value support to the CMIS Workbench property editor
- a few other Workbench improvements (content URL, paths, etc.)
Added:
chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/images/add.png (with props)
chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/images/down.png (with props)
chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/images/remove.png (with props)
chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/images/up.png (with props)
Removed:
chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/META-INF/build-timestamp.txt
Modified:
chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/ClientHelper.java
chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/PropertyEditorFrame.java
chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/details/AbstractDetailsTable.java
chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/details/ObjectPanel.java
chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/details/PropertyTable.java
chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/model/ClientModel.java
chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/swing/CollectionRenderer.java
chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/swing/InfoPanel.java
chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/META-INF/README
Modified: chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/ClientHelper.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/ClientHelper.java?rev=1096321&r1=1096320&r2=1096321&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/ClientHelper.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/ClientHelper.java Sun Apr 24 12:47:48 2011
@@ -76,7 +76,12 @@ public class ClientHelper {
}
}
- JOptionPane.showMessageDialog(parent, ex.getClass().getSimpleName() + "\n" + ex.getMessage(), "Error",
+ String exceptionName = ex.getClass().getSimpleName();
+ if (ex instanceof CmisBaseException) {
+ exceptionName = ((CmisBaseException) ex).getExceptionName();
+ }
+
+ JOptionPane.showMessageDialog(parent, exceptionName + ":\n" + ex.getMessage(), "Error",
JOptionPane.ERROR_MESSAGE);
}
@@ -159,6 +164,7 @@ public class ClientHelper {
file = createTempFileFromDocument(object, streamId);
} catch (Exception e) {
showError(component, e);
+ return;
}
try {
Modified: chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/PropertyEditorFrame.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/PropertyEditorFrame.java?rev=1096321&r1=1096320&r2=1096321&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/PropertyEditorFrame.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/PropertyEditorFrame.java Sun Apr 24 12:47:48 2011
@@ -21,6 +21,7 @@ package org.apache.chemistry.opencmis.wo
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
+import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
@@ -30,13 +31,16 @@ import java.text.Format;
import java.text.NumberFormat;
import java.util.ArrayList;
import java.util.Calendar;
+import java.util.Collections;
import java.util.GregorianCalendar;
import java.util.HashMap;
+import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import javax.swing.BorderFactory;
import javax.swing.BoxLayout;
+import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JComponent;
@@ -45,12 +49,10 @@ import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
-import javax.swing.JSeparator;
import javax.swing.JSpinner;
import javax.swing.JTextField;
import javax.swing.SpinnerListModel;
import javax.swing.SpinnerNumberModel;
-import javax.swing.SwingConstants;
import javax.swing.UIManager;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
@@ -72,12 +74,13 @@ public class PropertyEditorFrame extends
private static final long serialVersionUID = 1L;
private static final String WINDOW_TITLE = "Property Editor";
+ private static final ImageIcon ICON_ADD = ClientHelper.getIcon("add.png");
private final ClientModel model;
private final CmisObject object;
private List<PropertyInputPanel> propertyPanels;
- public PropertyEditorFrame(ClientModel model, CmisObject object) {
+ public PropertyEditorFrame(final ClientModel model, final CmisObject object) {
super();
this.model = model;
@@ -88,19 +91,32 @@ public class PropertyEditorFrame extends
private void createGUI() {
setTitle(WINDOW_TITLE);
- setPreferredSize(new Dimension(600, 600));
- setMinimumSize(new Dimension(200, 60));
+ setPreferredSize(new Dimension(800, 600));
+ setMinimumSize(new Dimension(300, 120));
setLayout(new BorderLayout());
- JPanel panel = new JPanel();
+ final JPanel panel = new JPanel();
panel.setLayout(new BoxLayout(panel, BoxLayout.PAGE_AXIS));
+ final Font labelFont = UIManager.getFont("Label.font");
+ final Font boldFont = labelFont.deriveFont(Font.BOLD, labelFont.getSize2D() * 1.2f);
+
+ final JPanel topPanel = new JPanel();
+ topPanel.setLayout(new BoxLayout(topPanel, BoxLayout.Y_AXIS));
+ topPanel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
+ final JLabel nameLabel = new JLabel(object.getName());
+ nameLabel.setFont(boldFont);
+ topPanel.add(nameLabel);
+ topPanel.add(new JLabel(object.getId()));
+ add(topPanel, BorderLayout.PAGE_START);
+
JScrollPane scrollPane = new JScrollPane(panel);
add(scrollPane, BorderLayout.CENTER);
propertyPanels = new ArrayList<PropertyEditorFrame.PropertyInputPanel>();
+ int position = 0;
for (PropertyDefinition<?> propDef : object.getType().getPropertyDefinitions().values()) {
boolean isUpdatable = (propDef.getUpdatability() == Updatability.READWRITE)
|| (propDef.getUpdatability() == Updatability.WHENCHECKEDOUT && object.getAllowableActions()
@@ -108,7 +124,7 @@ public class PropertyEditorFrame extends
if (isUpdatable) {
PropertyInputPanel propertyPanel = new PropertyInputPanel(propDef, object.getPropertyValue(propDef
- .getId()));
+ .getId()), position++);
propertyPanels.add(propertyPanel);
panel.add(propertyPanel);
@@ -116,6 +132,7 @@ public class PropertyEditorFrame extends
}
JButton updateButton = new JButton("Update");
+ updateButton.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
updateButton.setDefaultCapable(true);
updateButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
@@ -151,14 +168,12 @@ public class PropertyEditorFrame extends
ObjectId newId = object.updateProperties(properties, false);
- if (newId != null) {
- if (newId.getId().equals(model.getCurrentObject().getId())) {
- try {
- model.reloadObject();
- model.reloadFolder();
- } catch (Exception ex) {
- ClientHelper.showError(null, ex);
- }
+ if ((newId != null) && newId.getId().equals(model.getCurrentObject().getId())) {
+ try {
+ model.reloadObject();
+ model.reloadFolder();
+ } catch (Exception ex) {
+ ClientHelper.showError(null, ex);
}
}
@@ -169,7 +184,7 @@ public class PropertyEditorFrame extends
}
}
- public interface UpdateStatus {
+ interface UpdateStatus {
enum StatusFlag {
DontChange, Update, Unset
}
@@ -179,49 +194,73 @@ public class PropertyEditorFrame extends
StatusFlag getStatus();
}
+ interface MultivalueManager {
+ void addNewValue();
+
+ void removeValue(int pos);
+
+ void moveUp(int pos);
+
+ void moveDown(int pos);
+ }
+
/**
* Property input panel.
*/
- public static class PropertyInputPanel extends JPanel implements UpdateStatus {
+ public static class PropertyInputPanel extends JPanel implements UpdateStatus, MultivalueManager {
private static final long serialVersionUID = 1L;
+ private static final Color BACKGROUND1 = UIManager.getColor("Table:\"Table.cellRenderer\".background");
+ private static final Color BACKGROUND2 = UIManager.getColor("Table.alternateRowColor");
+ private static final Color LINE = new Color(0xB8, 0xB8, 0xB8);
+
private final PropertyDefinition<?> propDef;
private final Object value;
+ private final Color bgColor;
private JComboBox changeBox;
- private List<JComponent> valueComponents;
+ private LinkedList<JComponent> valueComponents;
- public PropertyInputPanel(PropertyDefinition<?> propDef, Object value) {
+ public PropertyInputPanel(PropertyDefinition<?> propDef, Object value, int position) {
super();
this.propDef = propDef;
this.value = value;
+ bgColor = (position % 2 == 0 ? BACKGROUND1 : BACKGROUND2);
createGUI();
}
- protected void createGUI() {
+ private void createGUI() {
setLayout(new BoxLayout(this, BoxLayout.PAGE_AXIS));
- setBackground(Color.WHITE);
- setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
+ setBackground(bgColor);
+ setBorder(BorderFactory.createCompoundBorder(BorderFactory.createMatteBorder(0, 0, 1, 0, LINE),
+ BorderFactory.createEmptyBorder(10, 5, 10, 5)));
Font labelFont = UIManager.getFont("Label.font");
Font boldFont = labelFont.deriveFont(Font.BOLD, labelFont.getSize2D() * 1.2f);
JPanel titlePanel = new JPanel();
titlePanel.setLayout(new BorderLayout());
- titlePanel.setBackground(Color.WHITE);
+ titlePanel.setBackground(bgColor);
titlePanel.setToolTipText("<html><b>" + propDef.getPropertyType().value() + "</b> ("
+ propDef.getCardinality().value() + " value)"
+ (propDef.getDescription() != null ? "<br>" + propDef.getDescription() : ""));
add(titlePanel);
- JLabel label = new JLabel(propDef.getDisplayName() + " (" + propDef.getId() + ")");
- label.setFont(boldFont);
- titlePanel.add(label, BorderLayout.LINE_START);
+ JPanel namePanel = new JPanel();
+ namePanel.setLayout(new BoxLayout(namePanel, BoxLayout.Y_AXIS));
+ namePanel.setBackground(bgColor);
+ JLabel displayNameLabel = new JLabel(propDef.getDisplayName());
+ displayNameLabel.setFont(boldFont);
+ namePanel.add(displayNameLabel);
+ JLabel idLabel = new JLabel(propDef.getId());
+ namePanel.add(idLabel);
+
+ titlePanel.add(namePanel, BorderLayout.LINE_START);
changeBox = new JComboBox(new Object[] { "Don't change ", "Update ", "Unset " });
titlePanel.add(changeBox, BorderLayout.LINE_END);
- valueComponents = new ArrayList<JComponent>();
+ valueComponents = new LinkedList<JComponent>();
if (propDef.getCardinality() == Cardinality.SINGLE) {
JComponent valueField = createInputField(value);
valueComponents.add(valueField);
@@ -229,33 +268,100 @@ public class PropertyEditorFrame extends
} else {
if (value instanceof List<?>) {
for (Object v : (List<?>) value) {
- JComponent valueField = createInputField(v);
+ JComponent valueField = new MultiValuePropertyInputField(createInputField(v), this, bgColor);
valueComponents.add(valueField);
add(valueField);
}
+
+ JPanel addPanel = new JPanel(new BorderLayout());
+ addPanel.setBackground(bgColor);
+ JButton addButton = new JButton(ICON_ADD);
+ addButton.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ addNewValue();
+ setStatus(StatusFlag.Update);
+ }
+ });
+ addPanel.add(addButton, BorderLayout.LINE_END);
+ add(addPanel);
+
+ updatePositions();
}
}
- add(new JSeparator(SwingConstants.HORIZONTAL));
-
setMaximumSize(new Dimension(Short.MAX_VALUE, getPreferredSize().height));
}
protected JComponent createInputField(Object value) {
switch (propDef.getPropertyType()) {
case INTEGER:
- return new IntegerPropertyInputField(value, this);
+ return new IntegerPropertyInputField(value, this, bgColor);
case DECIMAL:
- return new DecimalPropertyInputField(value, this);
+ return new DecimalPropertyInputField(value, this, bgColor);
case DATETIME:
- return new DateTimePropertyInputField(value, this);
+ return new DateTimePropertyInputField(value, this, bgColor);
case BOOLEAN:
- return new BooleanPropertyInputField(value, this);
+ return new BooleanPropertyInputField(value, this, bgColor);
default:
- return new StringPropertyInputField(value, this);
+ return new StringPropertyInputField(value, this, bgColor);
+ }
+ }
+
+ private void updatePositions() {
+ int n = valueComponents.size();
+ for (int i = 0; i < n; i++) {
+ MultiValuePropertyInputField comp = (MultiValuePropertyInputField) valueComponents.get(i);
+ comp.updatePosition(i, i + 1 == n);
}
}
+ public void addNewValue() {
+ JComponent valueField = new MultiValuePropertyInputField(createInputField(null), this, bgColor);
+ valueComponents.add(valueField);
+ add(valueField, getComponentCount() - 1);
+
+ updatePositions();
+ setStatus(StatusFlag.Update);
+
+ revalidate();
+ }
+
+ public void removeValue(int pos) {
+ remove(valueComponents.remove(pos));
+
+ updatePositions();
+ setStatus(StatusFlag.Update);
+
+ revalidate();
+ }
+
+ public void moveUp(int pos) {
+ JComponent comp = valueComponents.get(pos);
+ Collections.swap(valueComponents, pos, pos - 1);
+
+ remove(comp);
+ add(comp, pos);
+
+ updatePositions();
+ setStatus(StatusFlag.Update);
+
+ revalidate();
+ }
+
+ public void moveDown(int pos) {
+ JComponent comp = valueComponents.get(pos);
+ Collections.swap(valueComponents, pos, pos + 1);
+
+ remove(comp);
+ add(comp, pos + 2);
+
+ updatePositions();
+ setStatus(StatusFlag.Update);
+
+ revalidate();
+ }
+
public String getId() {
return propDef.getId();
}
@@ -309,6 +415,12 @@ public class PropertyEditorFrame extends
return StatusFlag.DontChange;
}
}
+
+ public Dimension getMaximumSize() {
+ Dimension size = getPreferredSize();
+ size.width = Short.MAX_VALUE;
+ return size;
+ }
}
/**
@@ -324,7 +436,7 @@ public class PropertyEditorFrame extends
public static class StringPropertyInputField extends JTextField implements PropertyValue {
private static final long serialVersionUID = 1L;
- public StringPropertyInputField(final Object value, final UpdateStatus status) {
+ public StringPropertyInputField(final Object value, final UpdateStatus status, final Color bgColor) {
super(value == null ? "" : value.toString());
addKeyListener(new KeyListener() {
@@ -354,7 +466,8 @@ public class PropertyEditorFrame extends
public static class AbstractFormattedPropertyInputField extends JFormattedTextField implements PropertyValue {
private static final long serialVersionUID = 1L;
- public AbstractFormattedPropertyInputField(final Object value, final Format format, final UpdateStatus status) {
+ public AbstractFormattedPropertyInputField(final Object value, final Format format, final UpdateStatus status,
+ final Color bgColor) {
super(format);
if (value != null) {
setValue(value);
@@ -388,8 +501,8 @@ public class PropertyEditorFrame extends
public static class IntegerPropertyInputField extends AbstractFormattedPropertyInputField {
private static final long serialVersionUID = 1L;
- public IntegerPropertyInputField(final Object value, final UpdateStatus status) {
- super(value, NumberFormat.getIntegerInstance(), status);
+ public IntegerPropertyInputField(final Object value, final UpdateStatus status, final Color bgColor) {
+ super(value, NumberFormat.getIntegerInstance(), status, bgColor);
setHorizontalAlignment(JTextField.RIGHT);
}
}
@@ -400,8 +513,8 @@ public class PropertyEditorFrame extends
public static class DecimalPropertyInputField extends AbstractFormattedPropertyInputField {
private static final long serialVersionUID = 1L;
- public DecimalPropertyInputField(final Object value, final UpdateStatus status) {
- super(value, NumberFormat.getInstance(), status);
+ public DecimalPropertyInputField(final Object value, final UpdateStatus status, final Color bgColor) {
+ super(value, NumberFormat.getInstance(), status, bgColor);
setHorizontalAlignment(JTextField.RIGHT);
}
}
@@ -412,7 +525,7 @@ public class PropertyEditorFrame extends
public static class BooleanPropertyInputField extends JComboBox implements PropertyValue {
private static final long serialVersionUID = 1L;
- public BooleanPropertyInputField(final Object value, final UpdateStatus status) {
+ public BooleanPropertyInputField(final Object value, final UpdateStatus status, final Color bgColor) {
super(new Object[] { true, false });
setSelectedItem(value == null ? true : value);
@@ -450,15 +563,16 @@ public class PropertyEditorFrame extends
}
}
- private SpinnerNumberModel day;
- private SpinnerListModel month;
- private SpinnerNumberModel year;
- private SpinnerNumberModel hour;
- private SpinnerNumberModel min;
- private SpinnerNumberModel sec;
-
- public DateTimePropertyInputField(final Object value, final UpdateStatus status) {
- setBackground(Color.WHITE);
+ private final SpinnerNumberModel day;
+ private final SpinnerListModel month;
+ private final SpinnerNumberModel year;
+ private final SpinnerNumberModel hour;
+ private final SpinnerNumberModel min;
+ private final SpinnerNumberModel sec;
+
+ public DateTimePropertyInputField(final Object value, final UpdateStatus status, final Color bgColor) {
+ setLayout(new FlowLayout(FlowLayout.LEFT, 0, 0));
+ setBackground(bgColor);
GregorianCalendar cal = (value == null ? new GregorianCalendar() : (GregorianCalendar) value);
@@ -479,23 +593,26 @@ public class PropertyEditorFrame extends
year = new SpinnerNumberModel(cal.get(Calendar.YEAR), 0, 9999, 1);
JSpinner yearSpinner = new JSpinner(year);
yearSpinner.setEditor(new JSpinner.NumberEditor(yearSpinner, "#"));
- editor = yearSpinner.getEditor();
+ yearSpinner.getEditor().setBackground(bgColor);
addSpinner(yearSpinner, status);
add(new JLabel(" "));
hour = new SpinnerNumberModel(cal.get(Calendar.HOUR_OF_DAY), 0, 23, 1);
- addSpinner(new JSpinner(hour), status);
+ JSpinner hourSpinner = new JSpinner(hour);
+ addSpinner(hourSpinner, status);
add(new JLabel(":"));
min = new SpinnerNumberModel(cal.get(Calendar.MINUTE), 0, 59, 1);
- addSpinner(new JSpinner(min), status);
+ JSpinner minSpinner = new JSpinner(min);
+ addSpinner(minSpinner, status);
add(new JLabel(":"));
sec = new SpinnerNumberModel(cal.get(Calendar.SECOND), 0, 59, 1);
- addSpinner(new JSpinner(sec), status);
+ JSpinner secSpinner = new JSpinner(sec);
+ addSpinner(secSpinner, status);
}
private void addSpinner(final JSpinner spinner, final UpdateStatus status) {
@@ -530,4 +647,74 @@ public class PropertyEditorFrame extends
return result;
}
}
+
+ /**
+ * Multi value property.
+ */
+ public static class MultiValuePropertyInputField extends JPanel implements PropertyValue {
+ private static final long serialVersionUID = 1L;
+
+ private static final ImageIcon ICON_UP = ClientHelper.getIcon("up.png");
+ private static final ImageIcon ICON_DOWN = ClientHelper.getIcon("down.png");
+ private static final ImageIcon ICON_REMOVE = ClientHelper.getIcon("remove.png");
+
+ private final JComponent component;
+ private int position;
+
+ private JButton upButton;
+ private JButton downButton;
+
+ public MultiValuePropertyInputField(final JComponent component, final MultivalueManager mutlivalueManager,
+ final Color bgColor) {
+ super();
+ this.component = component;
+
+ setLayout(new BorderLayout());
+ setBackground(bgColor);
+
+ add(component, BorderLayout.CENTER);
+
+ JPanel buttonPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT, 0, 0));
+ buttonPanel.setBackground(bgColor);
+
+ upButton = new JButton(ICON_UP);
+ upButton.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ mutlivalueManager.moveUp(MultiValuePropertyInputField.this.position);
+ }
+ });
+ buttonPanel.add(upButton);
+
+ downButton = new JButton(ICON_DOWN);
+ downButton.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ mutlivalueManager.moveDown(MultiValuePropertyInputField.this.position);
+ }
+ });
+ buttonPanel.add(downButton);
+
+ JButton removeButton = new JButton(ICON_REMOVE);
+ removeButton.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ mutlivalueManager.removeValue(MultiValuePropertyInputField.this.position);
+ }
+ });
+ buttonPanel.add(removeButton);
+
+ add(buttonPanel, BorderLayout.LINE_END);
+ }
+
+ public void updatePosition(int position, boolean isLast) {
+ this.position = position;
+ upButton.setEnabled(position > 0);
+ downButton.setEnabled(!isLast);
+ }
+
+ public Object getPropertyValue() throws Exception {
+ return ((PropertyValue) component).getPropertyValue();
+ }
+ }
}
Modified: chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/details/AbstractDetailsTable.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/details/AbstractDetailsTable.java?rev=1096321&r1=1096320&r2=1096321&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/details/AbstractDetailsTable.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/details/AbstractDetailsTable.java Sun Apr 24 12:47:48 2011
@@ -129,6 +129,10 @@ public abstract class AbstractDetailsTab
return model.getCurrentObject();
}
+ public ClientModel getClientModel() {
+ return model;
+ }
+
public String[] getColumnNames() {
return columnNames;
}
Modified: chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/details/ObjectPanel.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/details/ObjectPanel.java?rev=1096321&r1=1096320&r2=1096321&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/details/ObjectPanel.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/details/ObjectPanel.java Sun Apr 24 12:47:48 2011
@@ -21,17 +21,18 @@ package org.apache.chemistry.opencmis.wo
import java.awt.Cursor;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
-import java.lang.reflect.Method;
+import java.util.Collections;
+import java.util.List;
import javax.swing.JButton;
-import javax.swing.JList;
import javax.swing.JTextField;
+import javax.swing.SwingUtilities;
import org.apache.chemistry.opencmis.client.api.CmisObject;
+import org.apache.chemistry.opencmis.client.api.FileableCmisObject;
+import org.apache.chemistry.opencmis.client.api.Folder;
import org.apache.chemistry.opencmis.client.api.Session;
-import org.apache.chemistry.opencmis.client.bindings.spi.atompub.AbstractAtomPubService;
-import org.apache.chemistry.opencmis.client.bindings.spi.atompub.AtomPubParser;
-import org.apache.chemistry.opencmis.client.bindings.spi.atompub.ObjectServiceImpl;
+import org.apache.chemistry.opencmis.client.bindings.spi.atompub.LinkAccess;
import org.apache.chemistry.opencmis.workbench.ClientHelper;
import org.apache.chemistry.opencmis.workbench.model.ClientModel;
import org.apache.chemistry.opencmis.workbench.model.ClientModelEvent;
@@ -48,8 +49,9 @@ public class ObjectPanel extends InfoPan
private JTextField idField;
private JTextField typeField;
private JTextField basetypeField;
- // private JTextField contentUrlField;
- private JList allowableActionsList;
+ private JTextField contentUrlField;
+ private InfoList paths;
+ private InfoList allowableActionsList;
private JButton refreshButton;
public ObjectPanel(ClientModel model) {
@@ -69,7 +71,8 @@ public class ObjectPanel extends InfoPan
idField.setText("");
typeField.setText("");
basetypeField.setText("");
- // contentUrlField.setText("");
+ paths.removeAll();
+ contentUrlField.setText("");
allowableActionsList.removeAll();
refreshButton.setEnabled(false);
} else {
@@ -78,19 +81,54 @@ public class ObjectPanel extends InfoPan
idField.setText(object.getId());
typeField.setText(object.getType().getId());
basetypeField.setText(object.getBaseTypeId().toString());
- // String docUrl = getDocumentURL(object,
- // model.getClientSession().getSession());
- // contentUrlField.setText(docUrl == null ? "" : docUrl);
+
+ if (object instanceof FileableCmisObject) {
+ if (object instanceof Folder) {
+ paths.setList(Collections.singletonList(((Folder) object).getPath()));
+ } else {
+ paths.setList(Collections.singletonList(""));
+ final FileableCmisObject pathObject = (FileableCmisObject) object;
+ SwingUtilities.invokeLater(new Runnable() {
+ @Override
+ public void run() {
+ try {
+ List<String> pathsList = (pathObject).getPaths();
+ if ((pathsList == null) || (pathsList.size() == 0)) {
+ paths.setList(Collections.singletonList("(unfiled)"));
+ } else {
+ paths.setList(pathsList);
+ }
+ } catch (Exception e) {
+ paths.setList(Collections.singletonList("(???)"));
+ }
+ ObjectPanel.this.revalidate();
+ }
+ });
+ }
+ } else {
+ paths.setList(Collections.singletonList("(not filable)"));
+ }
+
+ String docUrl = getDocumentURL(object, model.getClientSession().getSession());
+ if (docUrl != null) {
+ contentUrlField.setText(docUrl);
+ } else {
+ contentUrlField.setText("(not available)");
+ }
+
if (object.getAllowableActions() != null) {
- allowableActionsList.setListData(object.getAllowableActions().getAllowableActions().toArray());
+ allowableActionsList.setList(object.getAllowableActions().getAllowableActions());
} else {
- allowableActionsList.setListData(new String[] { "(missing)" });
+ allowableActionsList.setList(Collections.singletonList("(missing)"));
}
+
refreshButton.setEnabled(true);
} catch (Exception e) {
ClientHelper.showError(this, e);
}
}
+
+ revalidate();
}
private void createGUI() {
@@ -100,8 +138,9 @@ public class ObjectPanel extends InfoPan
idField = addLine("Id:");
typeField = addLine("Type:");
basetypeField = addLine("Base Type:");
- // contentUrlField = addLine("Content URL:");
- allowableActionsList = addComponent("Allowable Actions:", new JList());
+ paths = addComponent("Paths:", new InfoList());
+ contentUrlField = addLink("Content URL:");
+ allowableActionsList = addComponent("Allowable Actions:", new InfoList());
refreshButton = addComponent("", new JButton("Refresh"));
refreshButton.setEnabled(false);
@@ -120,22 +159,11 @@ public class ObjectPanel extends InfoPan
}
public String getDocumentURL(final CmisObject document, final Session session) {
- String link = null;
-
- if (!(session.getBinding().getObjectService() instanceof ObjectServiceImpl)) {
- return null;
- }
-
- try {
- Method loadLink = AbstractAtomPubService.class.getDeclaredMethod("loadLink", new Class[] { String.class,
- String.class, String.class, String.class });
- loadLink.setAccessible(true);
- link = (String) loadLink.invoke(session.getBinding().getObjectService(), session.getRepositoryInfo()
- .getId(), document.getId(), AtomPubParser.LINK_REL_CONTENT, null);
- } catch (Exception e) {
- e.printStackTrace();
+ if (session.getBinding().getObjectService() instanceof LinkAccess) {
+ return ((LinkAccess) session.getBinding().getObjectService()).loadContentLink(session.getRepositoryInfo()
+ .getId(), document.getId());
}
- return link;
+ return null;
}
}
Modified: chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/details/PropertyTable.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/details/PropertyTable.java?rev=1096321&r1=1096320&r2=1096321&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/details/PropertyTable.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/details/PropertyTable.java Sun Apr 24 12:47:48 2011
@@ -18,9 +18,13 @@
*/
package org.apache.chemistry.opencmis.workbench.details;
+import java.awt.event.MouseEvent;
import java.util.Collection;
import org.apache.chemistry.opencmis.client.api.Property;
+import org.apache.chemistry.opencmis.commons.data.AllowableActions;
+import org.apache.chemistry.opencmis.commons.enums.Action;
+import org.apache.chemistry.opencmis.workbench.PropertyEditorFrame;
import org.apache.chemistry.opencmis.workbench.model.ClientModel;
public class PropertyTable extends AbstractDetailsTable {
@@ -35,6 +39,16 @@ public class PropertyTable extends Abstr
init(model, COLUMN_NAMES, COLUMN_WIDTHS);
}
+ @Override
+ public void doubleClickAction(MouseEvent e, int rowIndex) {
+ AllowableActions aa = getObject().getAllowableActions();
+
+ if ((aa == null) || (aa.getAllowableActions() == null)
+ || aa.getAllowableActions().contains(Action.CAN_UPDATE_PROPERTIES)) {
+ new PropertyEditorFrame(getClientModel(), getObject());
+ }
+ }
+
public int getDetailRowCount() {
return getObject().getProperties().size();
}
Modified: chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/model/ClientModel.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/model/ClientModel.java?rev=1096321&r1=1096320&r2=1096321&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/model/ClientModel.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/model/ClientModel.java Sun Apr 24 12:47:48 2011
@@ -31,6 +31,7 @@ import java.util.Map;
import javax.swing.event.EventListenerList;
import org.apache.chemistry.opencmis.client.api.CmisObject;
+import org.apache.chemistry.opencmis.client.api.FileableCmisObject;
import org.apache.chemistry.opencmis.client.api.Folder;
import org.apache.chemistry.opencmis.client.api.ItemIterable;
import org.apache.chemistry.opencmis.client.api.ObjectType;
@@ -140,7 +141,16 @@ public class ClientModel {
}
if (!(folderObject instanceof Folder)) {
- throw new Exception("Not a folder!");
+ if (folderObject instanceof FileableCmisObject) {
+ List<Folder> parents = ((FileableCmisObject) folderObject).getParents();
+ if (parents != null && parents.size() > 0) {
+ folderObject = parents.get(0);
+ } else {
+ throw new Exception("The object is not a folder and not in a folder!");
+ }
+ } else {
+ throw new Exception("The object is a relationship and not in a folder!");
+ }
}
List<CmisObject> children = new ArrayList<CmisObject>();
Modified: chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/swing/CollectionRenderer.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/swing/CollectionRenderer.java?rev=1096321&r1=1096320&r2=1096321&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/swing/CollectionRenderer.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/swing/CollectionRenderer.java Sun Apr 24 12:47:48 2011
@@ -68,9 +68,9 @@ public class CollectionRenderer extends
} else {
sb.append(o.toString());
}
- sb.append("</span><br/>");
+ // sb.append("</span><br/>");
}
- sb.append("</html>");
+ // sb.append("</html>");
super.setValue(sb.toString());
}
Modified: chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/swing/InfoPanel.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/swing/InfoPanel.java?rev=1096321&r1=1096320&r2=1096321&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/swing/InfoPanel.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/swing/InfoPanel.java Sun Apr 24 12:47:48 2011
@@ -19,112 +19,214 @@
package org.apache.chemistry.opencmis.workbench.swing;
import java.awt.Color;
+import java.awt.Cursor;
+import java.awt.Desktop;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseListener;
+import java.net.URI;
+import java.util.Collection;
import javax.swing.BorderFactory;
+import javax.swing.BoxLayout;
import javax.swing.JCheckBox;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
+import javax.swing.SwingUtilities;
import javax.swing.UIManager;
+import javax.swing.event.DocumentEvent;
+import javax.swing.event.DocumentListener;
-public abstract class InfoPanel extends JPanel {
-
- private static final long serialVersionUID = 1L;
-
- private JPanel gridPanel;
- private GridBagConstraints gbc;
- private Font boldFont;
-
- protected void setupGUI() {
- setLayout(new FlowLayout(FlowLayout.LEFT));
- setBackground(Color.WHITE);
-
- gridPanel = new JPanel(new GridBagLayout());
- gridPanel.setBackground(Color.WHITE);
- add(gridPanel);
-
- gbc = new GridBagConstraints();
-
- gbc.fill = GridBagConstraints.BOTH;
- gbc.gridy = 0;
- gbc.insets = new Insets(3, 3, 3, 3);
-
- Font labelFont = UIManager.getFont("Label.font");
- boldFont = labelFont
- .deriveFont(Font.BOLD, labelFont.getSize2D() * 1.2f);
- }
-
- protected JTextField addLine(String label) {
- return addLine(label, false);
- }
-
- protected JTextField addLine(String label, boolean bold) {
- JTextField textField = new JTextField();
- textField.setEditable(false);
- textField.setBorder(BorderFactory.createEmptyBorder());
- if (bold) {
- textField.setFont(boldFont);
- }
-
- JLabel textLable = new JLabel(label);
- textLable.setLabelFor(textField);
- if (bold) {
- textLable.setFont(boldFont);
- }
-
- gbc.gridy++;
+import org.apache.chemistry.opencmis.workbench.ClientHelper;
- gbc.gridx = 0;
- gbc.anchor = GridBagConstraints.BASELINE_TRAILING;
- gridPanel.add(textLable, gbc);
-
- gbc.gridx = 1;
- gbc.anchor = GridBagConstraints.BASELINE_LEADING;
- gridPanel.add(textField, gbc);
-
- return textField;
- }
-
- protected JCheckBox addCheckBox(String label) {
- JCheckBox checkBox = new JCheckBox();
- checkBox.setEnabled(false);
-
- JLabel textLable = new JLabel(label);
- textLable.setLabelFor(checkBox);
-
- gbc.gridy++;
-
- gbc.gridx = 0;
- gbc.anchor = GridBagConstraints.BASELINE_TRAILING;
- gridPanel.add(textLable, gbc);
-
- gbc.gridx = 1;
- gbc.anchor = GridBagConstraints.BASELINE_LEADING;
- gridPanel.add(checkBox, gbc);
-
- return checkBox;
- }
-
- protected <T extends JComponent> T addComponent(String label, T comp) {
- JLabel textLable = new JLabel(label);
- textLable.setLabelFor(comp);
-
- gbc.gridy++;
-
- gbc.gridx = 0;
- gbc.anchor = GridBagConstraints.BASELINE_TRAILING;
- gridPanel.add(textLable, gbc);
+public abstract class InfoPanel extends JPanel {
- gbc.gridx = 1;
- gbc.anchor = GridBagConstraints.BASELINE_LEADING;
- gridPanel.add(comp, gbc);
+ private static final long serialVersionUID = 1L;
- return comp;
- }
+ private JPanel gridPanel;
+ private GridBagConstraints gbc;
+ private Font boldFont;
+
+ protected void setupGUI() {
+ setLayout(new FlowLayout(FlowLayout.LEFT));
+ setBackground(Color.WHITE);
+
+ gridPanel = new JPanel(new GridBagLayout());
+ gridPanel.setBackground(Color.WHITE);
+ add(gridPanel);
+
+ gbc = new GridBagConstraints();
+
+ gbc.fill = GridBagConstraints.BOTH;
+ gbc.gridy = 0;
+ gbc.insets = new Insets(3, 3, 3, 3);
+
+ Font labelFont = UIManager.getFont("Label.font");
+ boldFont = labelFont.deriveFont(Font.BOLD, labelFont.getSize2D() * 1.2f);
+ }
+
+ protected JTextField addLine(final String label) {
+ return addLine(label, false);
+ }
+
+ protected JTextField addLine(final String label, final boolean bold) {
+ JTextField textField = new JTextField();
+ textField.setEditable(false);
+ textField.setBorder(BorderFactory.createEmptyBorder());
+ if (bold) {
+ textField.setFont(boldFont);
+ }
+
+ JLabel textLable = new JLabel(label);
+ textLable.setLabelFor(textField);
+ if (bold) {
+ textLable.setFont(boldFont);
+ }
+
+ gbc.gridy++;
+
+ gbc.gridx = 0;
+ gbc.anchor = GridBagConstraints.BASELINE_TRAILING;
+ gridPanel.add(textLable, gbc);
+
+ gbc.gridx = 1;
+ gbc.anchor = GridBagConstraints.BASELINE_LEADING;
+ gridPanel.add(textField, gbc);
+
+ return textField;
+ }
+
+ protected JTextField addLink(final String label) {
+ final JTextField textField = addLine(label, false);
+
+ if (Desktop.isDesktopSupported()) {
+ textField.getDocument().addDocumentListener(new DocumentListener() {
+ @Override
+ public void removeUpdate(DocumentEvent e) {
+
+ }
+
+ @Override
+ public void insertUpdate(DocumentEvent e) {
+ String uri = textField.getText().toLowerCase();
+ if (uri.startsWith("http://") || uri.startsWith("https://")) {
+ textField.setForeground(Color.BLUE);
+ textField.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
+ } else {
+ textField.setForeground(UIManager.getColor("textForeground"));
+ textField.setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
+ }
+ }
+
+ @Override
+ public void changedUpdate(DocumentEvent e) {
+ }
+ });
+
+ textField.addMouseListener(new MouseListener() {
+ @Override
+ public void mouseReleased(MouseEvent e) {
+ }
+
+ @Override
+ public void mousePressed(MouseEvent e) {
+ }
+
+ @Override
+ public void mouseExited(MouseEvent e) {
+ }
+
+ @Override
+ public void mouseEntered(MouseEvent e) {
+ }
+
+ @Override
+ public void mouseClicked(MouseEvent e) {
+ if (SwingUtilities.isLeftMouseButton(e) && e.getClickCount() == 1) {
+ String uri = textField.getText().toLowerCase();
+ if (uri.startsWith("http://") || uri.startsWith("https://")) {
+ try {
+ Desktop.getDesktop().browse(new URI(textField.getText()));
+ } catch (Exception ex) {
+ ClientHelper.showError(InfoPanel.this, ex);
+ }
+ }
+ }
+ }
+ });
+ }
+
+ return textField;
+ }
+
+ protected JCheckBox addCheckBox(String label) {
+ JCheckBox checkBox = new JCheckBox();
+ checkBox.setEnabled(false);
+
+ JLabel textLable = new JLabel(label);
+ textLable.setLabelFor(checkBox);
+
+ gbc.gridy++;
+
+ gbc.gridx = 0;
+ gbc.anchor = GridBagConstraints.BASELINE_TRAILING;
+ gridPanel.add(textLable, gbc);
+
+ gbc.gridx = 1;
+ gbc.anchor = GridBagConstraints.BASELINE_LEADING;
+ gridPanel.add(checkBox, gbc);
+
+ return checkBox;
+ }
+
+ protected <T extends JComponent> T addComponent(String label, T comp) {
+ JLabel textLable = new JLabel(label);
+ textLable.setLabelFor(comp);
+
+ gbc.gridy++;
+
+ gbc.gridx = 0;
+ gbc.anchor = GridBagConstraints.BASELINE_TRAILING;
+ gridPanel.add(textLable, gbc);
+
+ gbc.gridx = 1;
+ gbc.anchor = GridBagConstraints.BASELINE_LEADING;
+ gridPanel.add(comp, gbc);
+
+ return comp;
+ }
+
+ public static class InfoList extends JPanel {
+ private static final long serialVersionUID = 1L;
+
+ public InfoList() {
+ setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
+ setBackground(Color.WHITE);
+ }
+
+ public void clear() {
+ removeAll();
+ }
+
+ public void setList(Collection<?> list) {
+ clear();
+
+ if (list == null || list.size() == 0) {
+ return;
+ }
+
+ for (Object o : list) {
+ JTextField textField = new JTextField(o == null ? "" : o.toString());
+ textField.setEditable(false);
+ textField.setBorder(BorderFactory.createEmptyBorder(0, 0, 2, 0));
+ add(textField);
+ }
+ }
+ }
}
Modified: chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/META-INF/README
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/META-INF/README?rev=1096321&r1=1096320&r2=1096321&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/META-INF/README (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/META-INF/README Sun Apr 24 12:47:48 2011
@@ -1,7 +1,7 @@
CMIS Workbench
This is a simple Content Management Interoperability Services (CMIS) client based on Swing and
-Apache Chemistry OpenCMIS (http://incubator.apache.org/chemistry/opencmis.html).
+Apache Chemistry OpenCMIS (http://chemistry.apache.org/java/opencmis.html).
This CMIS client is distributed under the Apache License, version 2.0.
Please see the NOTICE and LICENSE files for details.
Added: chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/images/add.png
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/images/add.png?rev=1096321&view=auto
==============================================================================
Binary file - no diff available.
Propchange: chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/images/add.png
------------------------------------------------------------------------------
svn:mime-type = image/png
Added: chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/images/down.png
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/images/down.png?rev=1096321&view=auto
==============================================================================
Binary file - no diff available.
Propchange: chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/images/down.png
------------------------------------------------------------------------------
svn:mime-type = image/png
Added: chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/images/remove.png
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/images/remove.png?rev=1096321&view=auto
==============================================================================
Binary file - no diff available.
Propchange: chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/images/remove.png
------------------------------------------------------------------------------
svn:mime-type = image/png
Added: chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/images/up.png
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/images/up.png?rev=1096321&view=auto
==============================================================================
Binary file - no diff available.
Propchange: chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/images/up.png
------------------------------------------------------------------------------
svn:mime-type = image/png