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 2012/05/17 15:17:23 UTC
svn commit: r1339590 - in
/chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main:
java/org/apache/chemistry/opencmis/workbench/ resources/images/
Author: fmui
Date: Thu May 17 13:17:23 2012
New Revision: 1339590
URL: http://svn.apache.org/viewvc?rev=1339590&view=rev
Log:
Workbench: Query frame enhancements
Added:
chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/images/paste.png (with props)
Modified:
chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/CreateDocumentDialog.java
chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/CreateFolderDialog.java
chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/CreateRelationshipDialog.java
chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/QueryFrame.java
chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/TckDialog.java
Modified: chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/CreateDocumentDialog.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/CreateDocumentDialog.java?rev=1339590&r1=1339589&r2=1339590&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/CreateDocumentDialog.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/CreateDocumentDialog.java Thu May 17 13:17:23 2012
@@ -223,7 +223,7 @@ public class CreateDocumentDialog extend
verifyAfterUploadButton = new JCheckBox("Verify content after upload");
createRow("", verifyAfterUploadButton, 6);
- JButton createButton = new JButton("Create Document");
+ JButton createButton = new JButton("Create Document", ClientHelper.getIcon("newdocument.png"));
createButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
String name = nameField.getText();
Modified: chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/CreateFolderDialog.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/CreateFolderDialog.java?rev=1339590&r1=1339589&r2=1339590&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/CreateFolderDialog.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/CreateFolderDialog.java Thu May 17 13:17:23 2012
@@ -62,7 +62,7 @@ public class CreateFolderDialog extends
typeBox.setSelectedIndex(0);
createRow("Type:", typeBox, 1);
- JButton createButton = new JButton("Create Folder");
+ JButton createButton = new JButton("Create Folder", ClientHelper.getIcon("newfolder.png"));
createButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
String name = nameField.getText();
Modified: chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/CreateRelationshipDialog.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/CreateRelationshipDialog.java?rev=1339590&r1=1339589&r2=1339590&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/CreateRelationshipDialog.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/CreateRelationshipDialog.java Thu May 17 13:17:23 2012
@@ -73,7 +73,7 @@ public class CreateRelationshipDialog ex
targetIdField = new JTextField(60);
createRow("Target Id:", targetIdField, 3);
- JButton createButton = new JButton("Create Relationship");
+ JButton createButton = new JButton("Create Relationship", ClientHelper.getIcon("newrelationship.png"));
createButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
String name = nameField.getText();
Modified: chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/QueryFrame.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/QueryFrame.java?rev=1339590&r1=1339589&r2=1339590&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/QueryFrame.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/QueryFrame.java Thu May 17 13:17:23 2012
@@ -18,10 +18,11 @@
*/
package org.apache.chemistry.opencmis.workbench;
+import java.awt.BorderLayout;
+import java.awt.Component;
import java.awt.Cursor;
import java.awt.Dimension;
-import java.awt.GridBagConstraints;
-import java.awt.GridBagLayout;
+import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
@@ -29,6 +30,7 @@ import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import java.util.GregorianCalendar;
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
import javax.swing.BoxLayout;
@@ -44,7 +46,10 @@ import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.JTable;
import javax.swing.JTextArea;
+import javax.swing.SwingConstants;
import javax.swing.table.AbstractTableModel;
+import javax.swing.table.TableCellRenderer;
+import javax.swing.table.TableColumn;
import javax.swing.text.NumberFormatter;
import org.apache.chemistry.opencmis.client.api.ItemIterable;
@@ -66,12 +71,25 @@ public class QueryFrame extends JFrame {
private static final String WINDOW_TITLE = "CMIS Query";
private static final String DEFAULT_QUERY = "SELECT * FROM cmis:document";
+ private static final String[] QUERY_SNIPPETS = new String[] { //
+ "SELECT * FROM cmis:document", //
+ "SELECT * FROM cmis:folder", //
+ "SELECT cmis:objectId, cmis:name, SCORE() AS score FROM cmis:document WHERE CONTAINS('?')", //
+ "WHERE cmis:name LIKE '%'", //
+ "WHERE ? IN (?, ?, ?)", //
+ "WHERE IN_FOLDER('?')", //
+ "WHERE IN_TREE('?')", //
+ "WHERE ? = TIMESTAMP 'YYYY-MM-DDThh:mm:ss.sss[Z|+hh:mm|-hh:mm]'", //
+ "WHERE '?' = ANY ?", //
+ "ORDER BY cmis:name", //
+ "ORDER BY cmis:creationDate" };
+
private final ClientModel model;
private JTextArea queryText;
private JFormattedTextField maxHitsField;
private JCheckBox searchAllVersionsCheckBox;
- private JTable resultsTable;
+ private ResultTable resultsTable;
private JLabel queryTimeLabel;
public QueryFrame(ClientModel model) {
@@ -90,66 +108,80 @@ public class QueryFrame extends JFrame {
// input
JPanel inputPanel = new JPanel();
- inputPanel.setLayout(new BoxLayout(inputPanel, BoxLayout.LINE_AXIS));
+ inputPanel.setLayout(new BoxLayout(inputPanel, BoxLayout.PAGE_AXIS));
+ // query text area
queryText = new JTextArea(DEFAULT_QUERY, 5, 60);
+ queryText.setLineWrap(true);
+ queryText.setPreferredSize(new Dimension(Short.MAX_VALUE, queryText.getPreferredSize().height));
inputPanel.add(queryText);
JPanel inputPanel2 = new JPanel();
- inputPanel2.setPreferredSize(new Dimension(160, 100));
- inputPanel2.setMaximumSize(inputPanel.getPreferredSize());
- inputPanel2.setLayout(new GridBagLayout());
+ inputPanel2.setLayout(new BorderLayout());
+
+ // buttons
+ JPanel buttonPanel = new JPanel();
+
+ maxHitsField = new JFormattedTextField(new NumberFormatter());
+ maxHitsField.setValue(Integer.valueOf(100));
+ maxHitsField.setColumns(5);
+
+ JLabel maxHitsLabel = new JLabel("Max hits:");
+ maxHitsLabel.setLabelFor(maxHitsField);
- GridBagConstraints c = new GridBagConstraints();
- c.fill = GridBagConstraints.HORIZONTAL;
+ buttonPanel.add(maxHitsLabel);
+ buttonPanel.add(maxHitsField);
- JButton queryButton = new JButton("Query");
+ searchAllVersionsCheckBox = new JCheckBox("search all versions", false);
+ buttonPanel.add(searchAllVersionsCheckBox);
+
+ JButton queryButton = new JButton("Query", ClientHelper.getIcon("query.png"));
queryButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
doQuery();
}
});
- c.gridx = 0;
- c.gridy = 0;
- c.gridwidth = 2;
- inputPanel2.add(queryButton, c);
+ buttonPanel.add(queryButton);
- maxHitsField = new JFormattedTextField(new NumberFormatter());
- maxHitsField.setValue(Integer.valueOf(100));
- maxHitsField.setColumns(5);
+ inputPanel2.add(buttonPanel, BorderLayout.LINE_END);
- JLabel maxHitsLabel = new JLabel("Max hits:");
- maxHitsLabel.setLabelFor(maxHitsField);
+ // snippets
+ final JPopupMenu snippetsPopup = new JPopupMenu();
+ for (final String s : QUERY_SNIPPETS) {
+ JMenuItem menuItem = new JMenuItem(s);
+ menuItem.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ queryText.insert(s, queryText.getCaretPosition());
+ }
+ });
+ snippetsPopup.add(menuItem);
+ }
+
+ final JButton snippetButton = new JButton("Query Snippets", ClientHelper.getIcon("paste.png"));
+ snippetButton.setFocusPainted(true);
+ snippetButton.setBorderPainted(false);
+ snippetButton.setContentAreaFilled(false);
+ snippetButton.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ snippetsPopup.show(snippetButton, 0, snippetButton.getHeight());
+ }
+ });
- c.gridx = 0;
- c.gridy = 1;
- c.gridwidth = 1;
- inputPanel2.add(maxHitsLabel, c);
- c.gridx = 1;
- c.gridy = 1;
- c.gridwidth = 1;
- inputPanel2.add(maxHitsField, c);
+ inputPanel2.add(snippetButton, BorderLayout.LINE_START);
- searchAllVersionsCheckBox = new JCheckBox("search all versions", false);
- c.gridx = 0;
- c.gridy = 2;
- c.gridwidth = 2;
- inputPanel2.add(searchAllVersionsCheckBox, c);
-
- queryTimeLabel = new JLabel("(-- hits in -- seconds)");
- c.gridx = 0;
- c.gridy = 3;
- c.gridwidth = 2;
- inputPanel2.add(queryTimeLabel, c);
+ // query time label
+ queryTimeLabel = new JLabel("");
+ queryTimeLabel.setHorizontalAlignment(SwingConstants.CENTER);
+ inputPanel2.add(queryTimeLabel, BorderLayout.CENTER);
+ inputPanel2.setMaximumSize(new Dimension(Short.MAX_VALUE, inputPanel2.getPreferredSize().height));
inputPanel.add(inputPanel2);
// table
- resultsTable = new JTable();
- resultsTable.setDefaultRenderer(ObjectIdImpl.class, new IdRenderer());
- resultsTable.setFillsViewportHeight(true);
- resultsTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
+ resultsTable = new ResultTable();
final JPopupMenu popup = new JPopupMenu();
JMenuItem menuItem = new JMenuItem("Copy to clipboard");
@@ -207,9 +239,9 @@ public class QueryFrame extends JFrame {
add(new JSplitPane(JSplitPane.VERTICAL_SPLIT, inputPanel, new JScrollPane(resultsTable)));
getRootPane().setDefaultButton(queryButton);
-
+
ClientHelper.installEscapeBinding(this, getRootPane(), true);
-
+
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
pack();
@@ -247,7 +279,7 @@ public class QueryFrame extends JFrame {
if (PropertyIds.OBJECT_ID.equals(prop.getId()) && (prop.getFirstValue() != null)) {
rtm.setValue(row, prop.getQueryName(), new ObjectIdImpl(prop.getFirstValue().toString()));
} else {
- rtm.setValue(row, prop.getQueryName(), prop.getFirstValue());
+ rtm.setValue(row, prop.getQueryName(), prop.getValues());
}
}
@@ -257,7 +289,7 @@ public class QueryFrame extends JFrame {
long stopTime = System.currentTimeMillis();
float time = ((float) (stopTime - startTime)) / 1000f;
- queryTimeLabel.setText("(" + row + " hits in " + time + " seconds)");
+ queryTimeLabel.setText(" " + row + " hits (" + time + " seconds)");
resultsTable.setModel(rtm);
} catch (Exception ex) {
@@ -276,6 +308,7 @@ public class QueryFrame extends JFrame {
private int rowCount = 0;
private final Map<String, Integer> columnMapping = new HashMap<String, Integer>();
private final Map<Integer, Map<Integer, Object>> data = new HashMap<Integer, Map<Integer, Object>>();
+ private final Map<Integer, Map<Integer, List<?>>> multivalue = new HashMap<Integer, Map<Integer, List<?>>>();
private final Map<Integer, Class<?>> columnClass = new HashMap<Integer, Class<?>>();
public ResultTableModel() {
@@ -297,7 +330,7 @@ public class QueryFrame extends JFrame {
return rowCount;
}
- public void setValue(int rowIndex, String queryName, Object value) {
+ public void setValue(final int rowIndex, final String queryName, Object value) {
Integer col = columnMapping.get(queryName);
if (col == null) {
col = columnMapping.size();
@@ -308,6 +341,24 @@ public class QueryFrame extends JFrame {
return;
}
+ if (value instanceof List<?>) {
+ List<?> values = (List<?>) value;
+ if (values.size() == 0) {
+ return;
+ }
+
+ value = values.get(0);
+
+ if (values.size() > 1) {
+ Map<Integer, List<?>> mvrow = multivalue.get(rowIndex);
+ if (mvrow == null) {
+ mvrow = new HashMap<Integer, List<?>>();
+ multivalue.put(rowIndex, mvrow);
+ }
+ mvrow.put(col, values);
+ }
+ }
+
if (value instanceof GregorianCalendar) {
value = ClientHelper.getDateString((GregorianCalendar) value);
}
@@ -332,6 +383,15 @@ public class QueryFrame extends JFrame {
return row.get(columnIndex);
}
+ public List<?> getMultiValueAt(int rowIndex, int columnIndex) {
+ Map<Integer, List<?>> row = multivalue.get(rowIndex);
+ if (row == null) {
+ return null;
+ }
+
+ return row.get(columnIndex);
+ }
+
@Override
public String getColumnName(int column) {
for (Map.Entry<String, Integer> e : columnMapping.entrySet()) {
@@ -353,4 +413,75 @@ public class QueryFrame extends JFrame {
return String.class;
}
}
+
+ static class ResultTable extends JTable {
+
+ private static final long serialVersionUID = 1L;
+
+ public ResultTable() {
+ super();
+
+ setDefaultRenderer(ObjectIdImpl.class, new IdRenderer());
+ setFillsViewportHeight(true);
+ setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
+ }
+
+ @Override
+ public String getToolTipText(final MouseEvent e) {
+ String result = null;
+
+ Point p = e.getPoint();
+ int rowIndex = rowAtPoint(p);
+ int columnIndex = convertColumnIndexToModel(columnAtPoint(p));
+
+ final ResultTableModel model = (ResultTableModel) getModel();
+
+ final List<?> values = model.getMultiValueAt(rowIndex, columnIndex);
+ if (values != null) {
+ StringBuilder sb = new StringBuilder();
+
+ for (Object value : values) {
+ if (sb.length() == 0) {
+ sb.append("<html>");
+ } else {
+ sb.append("<br>");
+ }
+ sb.append(value.toString());
+ }
+
+ result = sb.toString();
+ } else {
+ final Object value = model.getValueAt(rowIndex, columnIndex);
+ if (value != null) {
+ result = value.toString();
+ }
+ }
+
+ return result;
+ }
+
+ @Override
+ public Component prepareRenderer(final TableCellRenderer renderer, final int rowIndex, final int columnIndex) {
+ final Component prepareRenderer = super.prepareRenderer(renderer, rowIndex, columnIndex);
+ final TableColumn column = getColumnModel().getColumn(columnIndex);
+
+ final int currentWidth = column.getPreferredWidth();
+ if (currentWidth < 200) {
+ int width = prepareRenderer.getPreferredSize().width;
+ if (currentWidth < width) {
+ if (width < 50) {
+ width = 50;
+ } else if (width > 200) {
+ width = 200;
+ }
+
+ if (width != currentWidth) {
+ column.setPreferredWidth(width);
+ }
+ }
+ }
+
+ return prepareRenderer;
+ }
+ }
}
Modified: chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/TckDialog.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/TckDialog.java?rev=1339590&r1=1339589&r2=1339590&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/TckDialog.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/TckDialog.java Thu May 17 13:17:23 2012
@@ -223,7 +223,7 @@ public class TckDialog {
mainPanel.add(configPanel, BorderLayout.LINE_END);
add(mainPanel, BorderLayout.CENTER);
- final JButton runButton = new JButton("Run TCK");
+ final JButton runButton = new JButton("Run TCK", ClientHelper.getIcon("tck.png"));
runButton.setDefaultCapable(true);
runButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
Added: chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/images/paste.png
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/images/paste.png?rev=1339590&view=auto
==============================================================================
Binary file - no diff available.
Propchange: chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/resources/images/paste.png
------------------------------------------------------------------------------
svn:mime-type = image/png