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 2017/03/21 09:36:25 UTC

svn commit: r1787921 - /chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/QueryFrame.java

Author: fmui
Date: Tue Mar 21 09:36:25 2017
New Revision: 1787921

URL: http://svn.apache.org/viewvc?rev=1787921&view=rev
Log:
Workbench: enhanced query frame

Modified:
    chemistry/opencmis/trunk/chemistry-opencmis-workbench/chemistry-opencmis-workbench/src/main/java/org/apache/chemistry/opencmis/workbench/QueryFrame.java

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=1787921&r1=1787920&r2=1787921&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 Tue Mar 21 09:36:25 2017
@@ -25,6 +25,8 @@ import java.awt.Dimension;
 import java.awt.Point;
 import java.awt.Toolkit;
 import java.awt.Window;
+import java.awt.datatransfer.Clipboard;
+import java.awt.datatransfer.DataFlavor;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
 import java.awt.event.MouseAdapter;
@@ -38,6 +40,7 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
+import javax.swing.AbstractAction;
 import javax.swing.BoxLayout;
 import javax.swing.JButton;
 import javax.swing.JCheckBox;
@@ -54,10 +57,14 @@ import javax.swing.JTable;
 import javax.swing.JTextArea;
 import javax.swing.SwingConstants;
 import javax.swing.WindowConstants;
+import javax.swing.event.UndoableEditEvent;
+import javax.swing.event.UndoableEditListener;
 import javax.swing.table.AbstractTableModel;
 import javax.swing.table.TableCellRenderer;
 import javax.swing.table.TableColumn;
+import javax.swing.text.DefaultEditorKit;
 import javax.swing.text.NumberFormatter;
+import javax.swing.undo.UndoManager;
 
 import org.apache.chemistry.opencmis.client.api.ItemIterable;
 import org.apache.chemistry.opencmis.client.api.ObjectId;
@@ -85,6 +92,7 @@ public class QueryFrame extends JFrame {
     private final ClientModel model;
 
     private JTextArea queryText;
+    private UndoManager undoManager;
     private JFormattedTextField skipCountField;
     private JFormattedTextField maxHitsField;
     private JCheckBox searchAllVersionsCheckBox;
@@ -116,6 +124,18 @@ public class QueryFrame extends JFrame {
         queryText = new JTextArea(DEFAULT_QUERY, 5, 60);
         queryText.setLineWrap(true);
         queryText.setPreferredSize(new Dimension(Short.MAX_VALUE, queryText.getPreferredSize().height));
+
+        // undo
+        undoManager = new UndoManager();
+        queryText.getDocument().addUndoableEditListener(new UndoableEditListener() {
+            public void undoableEditHappened(UndoableEditEvent e) {
+                undoManager.addEdit(e.getEdit());
+            }
+        });
+
+        AbstractAction undoAction = ClientHelper.createAndAttachUndoAction(undoManager, queryText);
+        AbstractAction redoAction = ClientHelper.createAndAttachRedoAction(undoManager, queryText);
+
         inputPanel.add(queryText);
 
         JPanel inputPanel2 = new JPanel();
@@ -147,8 +167,8 @@ public class QueryFrame extends JFrame {
         searchAllVersionsCheckBox = new JCheckBox("search all versions", false);
         buttonPanel.add(searchAllVersionsCheckBox);
 
-        JButton queryButton = new JButton("Query", new QueryIcon(ClientHelper.BUTTON_ICON_SIZE,
-                ClientHelper.BUTTON_ICON_SIZE));
+        JButton queryButton = new JButton("Query",
+                new QueryIcon(ClientHelper.BUTTON_ICON_SIZE, ClientHelper.BUTTON_ICON_SIZE));
         queryButton.addActionListener(new ActionListener() {
             @Override
             public void actionPerformed(ActionEvent e) {
@@ -162,6 +182,40 @@ public class QueryFrame extends JFrame {
 
         // snippets
         final JPopupMenu queryPopup = new JPopupMenu("Snippets");
+
+        final JMenuItem cutItem = new JMenuItem(new DefaultEditorKit.CutAction());
+        cutItem.setText("Cut");
+        queryPopup.add(cutItem);
+
+        final JMenuItem copyItem = new JMenuItem(new DefaultEditorKit.CopyAction());
+        copyItem.setText("Copy");
+        queryPopup.add(copyItem);
+
+        final JMenuItem pasteItem = new JMenuItem(new DefaultEditorKit.PasteAction());
+        pasteItem.setText("Paste");
+        queryPopup.add(pasteItem);
+
+        queryPopup.addSeparator();
+
+        final JMenuItem undoItem = new JMenuItem(undoAction);
+        undoItem.setText("Undo");
+        queryPopup.add(undoItem);
+
+        final JMenuItem redoItem = new JMenuItem(redoAction);
+        redoItem.setText("Redo");
+        queryPopup.add(redoItem);
+
+        final JMenuItem clearItem = new JMenuItem("Clear History");
+        clearItem.addActionListener(new ActionListener() {
+            @Override
+            public void actionPerformed(ActionEvent e) {
+                undoManager.discardAllEdits();
+            }
+        });
+        queryPopup.add(clearItem);
+
+        queryPopup.addSeparator();
+
         queryPopup.add(createMenuGroup("Properties", readSnippets("properties.txt")));
         queryPopup.add(createMenuGroup("Queries", readSnippets("queries.txt")));
         queryPopup.add(createMenuGroup("SELECT", readSnippets("select.txt")));
@@ -186,6 +240,22 @@ public class QueryFrame extends JFrame {
 
             private void maybeShowPopup(MouseEvent e) {
                 if (e.isPopupTrigger()) {
+                    if (queryText.getSelectedText() != null) {
+                        cutItem.setEnabled(true);
+                        copyItem.setEnabled(true);
+
+                    } else {
+                        cutItem.setEnabled(false);
+                        copyItem.setEnabled(false);
+                    }
+
+                    Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
+                    pasteItem.setEnabled(clipboard.isDataFlavorAvailable(DataFlavor.stringFlavor));
+
+                    undoItem.setEnabled(undoManager.canUndo());
+                    redoItem.setEnabled(undoManager.canRedo());
+                    clearItem.setEnabled(undoManager.canUndo() || undoManager.canRedo());
+
                     queryPopup.show(e.getComponent(), e.getX(), e.getY());
                 }
             }
@@ -602,8 +672,8 @@ public class QueryFrame extends JFrame {
 
                 for (PropertyData<?> prop : qr.getProperties()) {
                     if (PropertyIds.OBJECT_ID.equals(prop.getId()) && (prop.getFirstValue() != null)) {
-                        resultTableModel.setValue(row, prop.getQueryName(), new ObjectIdImpl(prop.getFirstValue()
-                                .toString()));
+                        resultTableModel.setValue(row, prop.getQueryName(),
+                                new ObjectIdImpl(prop.getFirstValue().toString()));
                     } else {
                         resultTableModel.setValue(row, prop.getQueryName(), prop.getValues());
                     }