You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by an...@apache.org on 2009/12/09 19:34:07 UTC
svn commit: r888911 - in
/cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler:
editor/ editor/datanode/ undo/ util/
Author: andrey
Date: Wed Dec 9 18:34:07 2009
New Revision: 888911
URL: http://svn.apache.org/viewvc?rev=888911&view=rev
Log:
CAY-1191 Undo/Redo support in modeler. patch by Anton Sakalouski
Added:
cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/JTextFieldUndoable.java
Modified:
cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/EjbqlQueryScriptsTab.java
cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/SQLTemplateScriptsTab.java
cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/datanode/AdapterView.java
cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/datanode/CustomDataSourceView.java
cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/datanode/DBCPDataSourceView.java
cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/datanode/JDBCDataSourceView.java
cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/datanode/JNDIDataSourceView.java
cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/datanode/MainDataNodeEditor.java
cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/datanode/MainDataNodeView.java
cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/datanode/PasswordEncoderView.java
cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/undo/JTextFieldUndoListener.java
cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/undo/TextCompoundEdit.java
cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/CayenneWidgetFactory.java
Modified: cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/EjbqlQueryScriptsTab.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/EjbqlQueryScriptsTab.java?rev=888911&r1=888910&r2=888911&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/EjbqlQueryScriptsTab.java (original)
+++ cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/EjbqlQueryScriptsTab.java Wed Dec 9 18:34:07 2009
@@ -32,15 +32,14 @@
import org.apache.cayenne.map.event.QueryEvent;
import org.apache.cayenne.modeler.ProjectController;
+import org.apache.cayenne.modeler.undo.JTextFieldUndoListener;
import org.apache.cayenne.modeler.util.CayenneWidgetFactory;
-import org.apache.cayenne.modeler.util.TextAdapter;
import org.apache.cayenne.project.validator.EJBQLQueryValidator;
import org.apache.cayenne.project.validator.EJBQLQueryValidator.PositionException;
import org.apache.cayenne.query.EJBQLQuery;
import org.apache.cayenne.query.Query;
import org.apache.cayenne.swing.components.textpane.JCayenneTextPane;
import org.apache.cayenne.util.Util;
-import org.apache.cayenne.validation.ValidationException;
public class EjbqlQueryScriptsTab extends JPanel implements DocumentListener {
@@ -64,12 +63,8 @@
scriptArea = CayenneWidgetFactory.createJEJBQLTextPane();
- new TextAdapter(scriptArea.getPane()) {
- @Override
- protected void updateModel(String text) throws ValidationException {
- }
- };
-
+ scriptArea.getPane().getDocument().addUndoableEditListener(new JTextFieldUndoListener(scriptArea.getPane()));
+
scriptArea.getDocument().addDocumentListener(this);
scriptArea.getDocument().addDocumentListener(new DocumentListener() {
Modified: cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/SQLTemplateScriptsTab.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/SQLTemplateScriptsTab.java?rev=888911&r1=888910&r2=888911&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/SQLTemplateScriptsTab.java (original)
+++ cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/SQLTemplateScriptsTab.java Wed Dec 9 18:34:07 2009
@@ -45,11 +45,9 @@
import org.apache.cayenne.modeler.ProjectController;
import org.apache.cayenne.modeler.util.CayenneWidgetFactory;
import org.apache.cayenne.modeler.util.DbAdapterInfo;
-import org.apache.cayenne.modeler.util.TextAdapter;
import org.apache.cayenne.query.Query;
import org.apache.cayenne.query.SQLTemplate;
import org.apache.cayenne.util.Util;
-import org.apache.cayenne.validation.ValidationException;
import org.syntax.jedit.JEditTextArea;
import org.syntax.jedit.KeywordMap;
import org.syntax.jedit.tokenmarker.PLSQLTokenMarker;
@@ -143,12 +141,6 @@
scriptArea = CayenneWidgetFactory.createJEditTextArea();
- new TextAdapter(scriptArea) {
- @Override
- protected void updateModel(String text) throws ValidationException {
- }
- };
-
scriptArea.setTokenMarker(SQL_TEMPLATE_MARKER);
scriptArea.getDocument().addDocumentListener(this);
Modified: cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/datanode/AdapterView.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/datanode/AdapterView.java?rev=888911&r1=888910&r2=888911&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/datanode/AdapterView.java (original)
+++ cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/datanode/AdapterView.java Wed Dec 9 18:34:07 2009
@@ -24,22 +24,17 @@
import javax.swing.JPanel;
import javax.swing.JTextField;
-import org.apache.cayenne.modeler.util.TextAdapter;
-import org.apache.cayenne.validation.ValidationException;
+import org.apache.cayenne.modeler.util.CayenneWidgetFactory;
import com.jgoodies.forms.builder.DefaultFormBuilder;
import com.jgoodies.forms.layout.FormLayout;
public class AdapterView extends JPanel {
- protected TextAdapter customAdapter;
+ protected JTextField customAdapter;
public AdapterView() {
- this.customAdapter = new TextAdapter(new JTextField()) {
- @Override
- protected void updateModel(String text) throws ValidationException {
- }
- };
+ this.customAdapter = CayenneWidgetFactory.createUndoableTextField();
// assemble
@@ -49,13 +44,13 @@
topPanelBuilder.setDefaultDialogBorder();
topPanelBuilder.appendSeparator("DbAdapter Configuration");
- topPanelBuilder.append("Custom Adapter (optional):", customAdapter.getComponent());
+ topPanelBuilder.append("Custom Adapter (optional):", customAdapter);
setLayout(new BorderLayout());
add(topPanelBuilder.getPanel(), BorderLayout.CENTER);
}
public JTextField getCustomAdapter() {
- return (JTextField) customAdapter.getComponent();
+ return customAdapter;
}
}
Modified: cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/datanode/CustomDataSourceView.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/datanode/CustomDataSourceView.java?rev=888911&r1=888910&r2=888911&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/datanode/CustomDataSourceView.java (original)
+++ cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/datanode/CustomDataSourceView.java Wed Dec 9 18:34:07 2009
@@ -24,8 +24,7 @@
import javax.swing.JPanel;
import javax.swing.JTextField;
-import org.apache.cayenne.modeler.util.TextAdapter;
-import org.apache.cayenne.validation.ValidationException;
+import org.apache.cayenne.modeler.util.CayenneWidgetFactory;
import com.jgoodies.forms.builder.DefaultFormBuilder;
import com.jgoodies.forms.layout.FormLayout;
@@ -34,16 +33,11 @@
*/
public class CustomDataSourceView extends JPanel {
- protected TextAdapter locationHint;
+ protected JTextField locationHint;
public CustomDataSourceView() {
- locationHint = new TextAdapter(new JTextField()) {
- @Override
- protected void updateModel(String text) throws ValidationException {
- }
-
- };
+ locationHint = CayenneWidgetFactory.createUndoableTextField();
// assemble
FormLayout layout = new FormLayout("right:80dlu, 3dlu, fill:200dlu", "");
@@ -52,13 +46,13 @@
builder.appendSeparator("Custom Configuration");
- builder.append("Location Hint:", getLocationHint());
+ builder.append("Location Hint:", locationHint);
this.setLayout(new BorderLayout());
this.add(builder.getPanel(), BorderLayout.CENTER);
}
public JTextField getLocationHint() {
- return (JTextField) locationHint.getComponent();
+ return locationHint;
}
}
Modified: cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/datanode/DBCPDataSourceView.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/datanode/DBCPDataSourceView.java?rev=888911&r1=888910&r2=888911&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/datanode/DBCPDataSourceView.java (original)
+++ cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/datanode/DBCPDataSourceView.java Wed Dec 9 18:34:07 2009
@@ -17,6 +17,7 @@
* under the License.
****************************************************************/
+
package org.apache.cayenne.modeler.editor.datanode;
import java.awt.BorderLayout;
@@ -24,8 +25,7 @@
import javax.swing.JPanel;
import javax.swing.JTextField;
-import org.apache.cayenne.modeler.util.TextAdapter;
-import org.apache.cayenne.validation.ValidationException;
+import org.apache.cayenne.modeler.util.CayenneWidgetFactory;
import com.jgoodies.forms.builder.DefaultFormBuilder;
import com.jgoodies.forms.layout.FormLayout;
@@ -34,16 +34,11 @@
*/
public class DBCPDataSourceView extends JPanel {
- protected TextAdapter propertiesFile;
+ protected JTextField propertiesFile;
public DBCPDataSourceView() {
- propertiesFile = new TextAdapter(new JTextField()) {
-
- @Override
- protected void updateModel(String text) throws ValidationException {
- }
- };
+ propertiesFile = CayenneWidgetFactory.createUndoableTextField();
// assemble
FormLayout layout = new FormLayout("right:80dlu, 3dlu, fill:200dlu", "");
@@ -52,13 +47,13 @@
builder.appendSeparator("Apache DBCP Configuration");
- builder.append("DBCP Properties File:", getPropertiesFile());
+ builder.append("DBCP Properties File:", propertiesFile);
setLayout(new BorderLayout());
add(builder.getPanel(), BorderLayout.CENTER);
}
public JTextField getPropertiesFile() {
- return (JTextField) propertiesFile.getComponent();
+ return propertiesFile;
}
}
Modified: cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/datanode/JDBCDataSourceView.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/datanode/JDBCDataSourceView.java?rev=888911&r1=888910&r2=888911&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/datanode/JDBCDataSourceView.java (original)
+++ cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/datanode/JDBCDataSourceView.java Wed Dec 9 18:34:07 2009
@@ -26,8 +26,7 @@
import javax.swing.JPasswordField;
import javax.swing.JTextField;
-import org.apache.cayenne.modeler.util.TextAdapter;
-import org.apache.cayenne.validation.ValidationException;
+import org.apache.cayenne.modeler.util.CayenneWidgetFactory;
import com.jgoodies.forms.builder.PanelBuilder;
import com.jgoodies.forms.layout.CellConstraints;
@@ -35,83 +34,59 @@
public class JDBCDataSourceView extends JPanel {
- protected TextAdapter driver;
- protected TextAdapter url;
- protected TextAdapter userName;
-
+ protected JTextField driver;
+ protected JTextField url;
+ protected JTextField userName;
protected JPasswordField password;
- protected TextAdapter minConnections;
- protected TextAdapter maxConnections;
-
- protected JButton syncWithLocal;
-
- public JDBCDataSourceView() {
-
- driver = new TextAdapter(new JTextField()) {
+ protected JTextField minConnections;
+ protected JTextField maxConnections;
+ protected JButton syncWithLocal;
- @Override
- protected void updateModel(String text) throws ValidationException {
- }
- };
- url = new TextAdapter(new JTextField()) {
- @Override
- protected void updateModel(String text) throws ValidationException {
- }
- };
- userName = new TextAdapter(new JTextField()) {
- @Override
- protected void updateModel(String text) throws ValidationException {
- }
- };
- password = new JPasswordField();
- minConnections = new TextAdapter(new JTextField(6)) {
- @Override
- protected void updateModel(String text) throws ValidationException {
- }
- };
+ public JDBCDataSourceView() {
- maxConnections = new TextAdapter(new JTextField(6)) {
+ driver = CayenneWidgetFactory.createUndoableTextField();
+ url = CayenneWidgetFactory.createUndoableTextField();
+ userName = CayenneWidgetFactory.createUndoableTextField();
+ password = new JPasswordField();
+ minConnections = CayenneWidgetFactory.createUndoableTextField(6);
+ maxConnections = CayenneWidgetFactory.createUndoableTextField(6);
+ syncWithLocal = new JButton("Sync with Local");
+ syncWithLocal.setToolTipText("Update from local DataSource");
- @Override
- protected void updateModel(String text) throws ValidationException {
- }
- };
- syncWithLocal = new JButton("Sync with Local");
- syncWithLocal.setToolTipText("Update from local DataSource");
// assemble
CellConstraints cc = new CellConstraints();
- // FormLayout layout = new FormLayout(
- // "right:80dlu, 3dlu, fill:50dlu, 3dlu, fill:74dlu, 3dlu, fill:70dlu",
- // "p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p");
- FormLayout layout = new FormLayout(
- "right:80dlu, 3dlu, fill:50dlu, 3dlu, fill:74dlu, 3dlu, fill:70dlu", // Columns
- "p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p"); // Rows
+// FormLayout layout = new FormLayout(
+// "right:80dlu, 3dlu, fill:50dlu, 3dlu, fill:74dlu, 3dlu, fill:70dlu",
+// "p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p");
+ FormLayout layout =
+ new FormLayout("right:80dlu, 3dlu, fill:50dlu, 3dlu, fill:74dlu, 3dlu, fill:70dlu", // Columns
+ "p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p"); // Rows
PanelBuilder builder = new PanelBuilder(layout);
builder.setDefaultDialogBorder();
-
+
builder.addSeparator("JDBC Configuration", cc.xywh(1, 1, 7, 1));
builder.addLabel("JDBC Driver:", cc.xy(1, 3));
- builder.add(getDriver(), cc.xywh(3, 3, 5, 1));
+ builder.add(driver, cc.xywh(3, 3, 5, 1));
builder.addLabel("DB URL:", cc.xy(1, 5));
- builder.add(getUrl(), cc.xywh(3, 5, 5, 1));
+ builder.add(url, cc.xywh(3, 5, 5, 1));
builder.addLabel("Username:", cc.xy(1, 7));
- builder.add(getUserName(), cc.xywh(3, 7, 5, 1));
+ builder.add(userName, cc.xywh(3, 7, 5, 1));
builder.addLabel("Password:", cc.xy(1, 9));
builder.add(password, cc.xywh(3, 9, 5, 1));
builder.addLabel("Min Connections:", cc.xy(1, 11));
- builder.add(getMinConnections(), cc.xy(3, 11));
+ builder.add(minConnections, cc.xy(3, 11));
builder.addLabel("Max Connections:", cc.xy(1, 13));
- builder.add(getMaxConnections(), cc.xy(3, 13));
+ builder.add(maxConnections, cc.xy(3, 13));
builder.add(syncWithLocal, cc.xy(7, 15));
this.setLayout(new BorderLayout());
@@ -119,7 +94,7 @@
}
public JTextField getDriver() {
- return (JTextField) driver.getComponent();
+ return driver;
}
public JPasswordField getPassword() {
@@ -127,19 +102,19 @@
}
public JTextField getUrl() {
- return (JTextField) url.getComponent();
+ return url;
}
public JTextField getUserName() {
- return (JTextField) userName.getComponent();
+ return userName;
}
public JTextField getMaxConnections() {
- return (JTextField) maxConnections.getComponent();
+ return maxConnections;
}
public JTextField getMinConnections() {
- return (JTextField) minConnections.getComponent();
+ return minConnections;
}
public JButton getSyncWithLocal() {
Modified: cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/datanode/JNDIDataSourceView.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/datanode/JNDIDataSourceView.java?rev=888911&r1=888910&r2=888911&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/datanode/JNDIDataSourceView.java (original)
+++ cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/datanode/JNDIDataSourceView.java Wed Dec 9 18:34:07 2009
@@ -24,8 +24,7 @@
import javax.swing.JPanel;
import javax.swing.JTextField;
-import org.apache.cayenne.modeler.util.TextAdapter;
-import org.apache.cayenne.validation.ValidationException;
+import org.apache.cayenne.modeler.util.CayenneWidgetFactory;
import com.jgoodies.forms.builder.DefaultFormBuilder;
import com.jgoodies.forms.layout.FormLayout;
@@ -34,15 +33,11 @@
*/
public class JNDIDataSourceView extends JPanel {
- protected TextAdapter jndiPath;
+ protected JTextField jndiPath;
public JNDIDataSourceView() {
- jndiPath = new TextAdapter(new JTextField()) {
- @Override
- protected void updateModel(String text) throws ValidationException {
- }
- };
+ jndiPath = CayenneWidgetFactory.createUndoableTextField();
// assemble
FormLayout layout = new FormLayout("right:80dlu, 3dlu, fill:200dlu", "");
@@ -51,13 +46,13 @@
builder.appendSeparator("JNDI Configuration");
- builder.append("JNDI Location:", getJndiPath());
+ builder.append("JNDI Location:", jndiPath);
this.setLayout(new BorderLayout());
this.add(builder.getPanel(), BorderLayout.CENTER);
}
public JTextField getJndiPath() {
- return (JTextField) jndiPath.getComponent();
+ return jndiPath;
}
}
Modified: cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/datanode/MainDataNodeEditor.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/datanode/MainDataNodeEditor.java?rev=888911&r1=888910&r2=888911&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/datanode/MainDataNodeEditor.java (original)
+++ cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/datanode/MainDataNodeEditor.java Wed Dec 9 18:34:07 2009
@@ -89,7 +89,7 @@
super(parent);
this.tabbedPaneController = tabController;
- this.view = new MainDataNodeView();
+ this.view = new MainDataNodeView((ProjectController) getParent());
this.datasourceEditors = new HashMap();
this.localDataSources = new HashMap();
Modified: cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/datanode/MainDataNodeView.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/datanode/MainDataNodeView.java?rev=888911&r1=888910&r2=888911&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/datanode/MainDataNodeView.java (original)
+++ cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/datanode/MainDataNodeView.java Wed Dec 9 18:34:07 2009
@@ -29,9 +29,8 @@
import javax.swing.JPanel;
import javax.swing.JTextField;
+import org.apache.cayenne.modeler.ProjectController;
import org.apache.cayenne.modeler.util.CayenneWidgetFactory;
-import org.apache.cayenne.modeler.util.TextAdapter;
-import org.apache.cayenne.validation.ValidationException;
import com.jgoodies.forms.builder.DefaultFormBuilder;
import com.jgoodies.forms.layout.FormLayout;
@@ -42,8 +41,7 @@
*/
public class MainDataNodeView extends JPanel {
- protected TextAdapter dataNodeName;
-
+ protected JTextField dataNodeName;
protected JComboBox factories;
protected JPanel dataSourceDetail;
protected CardLayout dataSourceDetailLayout;
@@ -51,17 +49,13 @@
protected JButton configLocalDataSources;
protected JComboBox schemaUpdateStrategy;
- public MainDataNodeView() {
+ public MainDataNodeView(final ProjectController projectController) {
// create widgets
- this.dataNodeName = new TextAdapter(new JTextField()) {
- @Override
- protected void updateModel(String text) throws ValidationException {
- }
- };
-
+ this.dataNodeName = CayenneWidgetFactory.createUndoableTextField();
+
this.factories = CayenneWidgetFactory.createUndoableComboBox();
-
+
this.localDataSources = CayenneWidgetFactory.createUndoableComboBox();
this.schemaUpdateStrategy = CayenneWidgetFactory.createUndoableComboBox();
@@ -107,7 +101,7 @@
}
public JTextField getDataNodeName() {
- return (JTextField) dataNodeName.getComponent();
+ return dataNodeName;
}
public JPanel getDataSourceDetail() {
Modified: cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/datanode/PasswordEncoderView.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/datanode/PasswordEncoderView.java?rev=888911&r1=888910&r2=888911&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/datanode/PasswordEncoderView.java (original)
+++ cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/datanode/PasswordEncoderView.java Wed Dec 9 18:34:07 2009
@@ -34,164 +34,148 @@
import org.apache.cayenne.conf.PasswordEncoding;
import org.apache.cayenne.conn.DataSourceInfo;
import org.apache.cayenne.modeler.util.CayenneWidgetFactory;
-import org.apache.cayenne.modeler.util.TextAdapter;
-import org.apache.cayenne.validation.ValidationException;
import com.jgoodies.forms.builder.PanelBuilder;
import com.jgoodies.forms.layout.CellConstraints;
import com.jgoodies.forms.layout.FormLayout;
-public class PasswordEncoderView extends JPanel {
- protected JComboBox passwordEncoder;
- protected JComboBox passwordLocation;
-
- protected TextAdapter passwordKey;
- protected TextAdapter passwordSource;
-
- protected JLabel passwordSourceLabel;
-
- private static final String PASSWORD_CLASSPATH = "Classpath Search (File System)";
+public class PasswordEncoderView extends JPanel{
+
+ protected JComboBox passwordEncoder;
+ protected JComboBox passwordLocation;
+ protected JTextField passwordKey;
+ protected JTextField passwordSource;
+ protected JLabel passwordSourceLabel;
+
+ private static final String PASSWORD_CLASSPATH = "Classpath Search (File System)";
private static final String PASSWORD_EXECUTABLE = "Executable Program";
- private static final String PASSWORD_MODEL = "Cayenne Model";
- private static final String PASSWORD_URL = "URL (file:, http:, etc)";
-
+ private static final String PASSWORD_MODEL = "Cayenne Model";
+ private static final String PASSWORD_URL = "URL (file:, http:, etc)";
+
private static final Object[] PASSWORD_LOCATIONS = new Object[] {
- DataSourceInfo.PASSWORD_LOCATION_MODEL,
- DataSourceInfo.PASSWORD_LOCATION_CLASSPATH,
- DataSourceInfo.PASSWORD_LOCATION_EXECUTABLE,
- DataSourceInfo.PASSWORD_LOCATION_URL
- };
-
+ DataSourceInfo.PASSWORD_LOCATION_MODEL,
+ DataSourceInfo.PASSWORD_LOCATION_CLASSPATH,
+ DataSourceInfo.PASSWORD_LOCATION_EXECUTABLE,
+ DataSourceInfo.PASSWORD_LOCATION_URL };
+
private static final Map<String, String> passwordSourceLabels = new TreeMap<String, String>();
- static {
- passwordSourceLabels.put(DataSourceInfo.PASSWORD_LOCATION_MODEL, PASSWORD_MODEL);
- passwordSourceLabels.put(
- DataSourceInfo.PASSWORD_LOCATION_CLASSPATH,
- PASSWORD_CLASSPATH);
- passwordSourceLabels.put(
- DataSourceInfo.PASSWORD_LOCATION_EXECUTABLE,
- PASSWORD_EXECUTABLE);
- passwordSourceLabels.put(DataSourceInfo.PASSWORD_LOCATION_URL, PASSWORD_URL);
- }
-
- final class PasswordLocationRenderer extends DefaultListCellRenderer {
-
- public Component getListCellRendererComponent(
- JList list,
- Object object,
- int arg2,
- boolean arg3,
- boolean arg4) {
- if (object != null)
- object = passwordSourceLabels.get(object);
- else
- object = PASSWORD_MODEL;
-
- return super.getListCellRendererComponent(list, object, arg2, arg3, arg4);
- }
- }
-
- public PasswordEncoderView() {
-
- this.passwordEncoder = CayenneWidgetFactory.createUndoableComboBox();
+ static
+ {
+ passwordSourceLabels.put(DataSourceInfo.PASSWORD_LOCATION_MODEL, PASSWORD_MODEL);
+ passwordSourceLabels.put(DataSourceInfo.PASSWORD_LOCATION_CLASSPATH, PASSWORD_CLASSPATH);
+ passwordSourceLabels.put(DataSourceInfo.PASSWORD_LOCATION_EXECUTABLE, PASSWORD_EXECUTABLE);
+ passwordSourceLabels.put(DataSourceInfo.PASSWORD_LOCATION_URL, PASSWORD_URL);
+ }
+
+ final class PasswordLocationRenderer extends DefaultListCellRenderer
+ {
+ public Component getListCellRendererComponent(JList list,
+ Object object,
+ int arg2,
+ boolean arg3,
+ boolean arg4)
+ {
+ if (object != null)
+ object = passwordSourceLabels.get(object);
+ else
+ object = PASSWORD_MODEL;
+
+ return super.getListCellRendererComponent(list, object, arg2, arg3, arg4);
+ }
+ }
+
+ public PasswordEncoderView(){
+
+ this.passwordEncoder = CayenneWidgetFactory.createUndoableComboBox();
this.passwordLocation = CayenneWidgetFactory.createUndoableComboBox();
-
- this.passwordSource = new TextAdapter(new JTextField()) {
-
- @Override
- protected void updateModel(String text) throws ValidationException {
- }
- };
-
- this.passwordKey = new TextAdapter(new JTextField()) {
-
- @Override
- protected void updateModel(String text) throws ValidationException {
- }
- };
-
- // init combo box choices
- passwordEncoder.setModel(new DefaultComboBoxModel(
- PasswordEncoding.standardEncoders));
+ this.passwordSource = CayenneWidgetFactory.createUndoableTextField();
+ this.passwordKey = CayenneWidgetFactory.createUndoableTextField();
+
+
+
+ // init combo box choices
+ passwordEncoder.setModel(new DefaultComboBoxModel(PasswordEncoding.standardEncoders));
passwordEncoder.setEditable(true);
passwordLocation = CayenneWidgetFactory.createUndoableComboBox();
passwordLocation.setRenderer(new PasswordLocationRenderer());
- DefaultComboBoxModel passwordLocationModel = new DefaultComboBoxModel(
- PASSWORD_LOCATIONS);
+ DefaultComboBoxModel passwordLocationModel = new DefaultComboBoxModel(PASSWORD_LOCATIONS);
passwordLocation.setModel(passwordLocationModel);
+
CellConstraints cc = new CellConstraints();
- FormLayout layout = new FormLayout(
- "right:80dlu, 3dlu, fill:50dlu, 3dlu, fill:74dlu, 3dlu, fill:70dlu", // Columns
- "p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p"); // Rows
-
+ FormLayout layout =
+ new FormLayout("right:80dlu, 3dlu, fill:50dlu, 3dlu, fill:74dlu, 3dlu, fill:70dlu", // Columns
+ "p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p, 3dlu, p"); // Rows
+
PanelBuilder builder = new PanelBuilder(layout);
builder.setDefaultDialogBorder();
-
+
builder.addSeparator("Encoder", cc.xywh(1, 1, 7, 1));
-
+
builder.addLabel("Password Encoder:", cc.xy(1, 11));
builder.add(passwordEncoder, cc.xywh(3, 11, 5, 1));
builder.addLabel("Password Encoder Key:", cc.xy(1, 13));
- builder.add(getPasswordKey(), cc.xywh(3, 13, 5, 1));
+ builder.add(passwordKey, cc.xywh(3, 13, 5, 1));
- builder.addLabel("Note: Cayenne supplied encoders do not use a key.", cc.xywh(
- 3,
- 15,
- 5,
- 1));
+ builder.addLabel("Note: Cayenne supplied encoders do not use a key.", cc.xywh(3, 15, 5, 1));
builder.addLabel("Password Location:", cc.xy(1, 17));
builder.add(passwordLocation, cc.xywh(3, 17, 5, 1));
passwordSourceLabel = builder.addLabel("Password Source:", cc.xy(1, 19));
- builder.add(getPasswordSource(), cc.xywh(3, 19, 5, 1));
+ builder.add(passwordSource, cc.xywh(3, 19, 5, 1));
+
this.setLayout(new BorderLayout());
this.add(builder.getPanel(), BorderLayout.CENTER);
}
-
+
/**
* @return the passwordEncoder
*/
- public JComboBox getPasswordEncoder() {
- return passwordEncoder;
+ public JComboBox getPasswordEncoder()
+ {
+ return passwordEncoder;
}
/**
* @return the passwordLocation
*/
- public JComboBox getPasswordLocation() {
- return passwordLocation;
+ public JComboBox getPasswordLocation()
+ {
+ return passwordLocation;
}
/**
* @return the passwordKey
*/
- public JTextField getPasswordKey() {
- return (JTextField) passwordKey.getComponent();
+ public JTextField getPasswordKey()
+ {
+ return passwordKey;
}
/**
* @return the passwordSource
*/
- public JTextField getPasswordSource() {
- return (JTextField) passwordSource.getComponent();
+ public JTextField getPasswordSource()
+ {
+ return passwordSource;
}
/**
* @return the passwordLocationLabel
*/
- public JLabel getPasswordSourceLabel() {
- return passwordSourceLabel;
+ public JLabel getPasswordSourceLabel()
+ {
+ return passwordSourceLabel;
}
}
Modified: cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/undo/JTextFieldUndoListener.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/undo/JTextFieldUndoListener.java?rev=888911&r1=888910&r2=888911&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/undo/JTextFieldUndoListener.java (original)
+++ cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/undo/JTextFieldUndoListener.java Wed Dec 9 18:34:07 2009
@@ -35,31 +35,32 @@
public class JTextFieldUndoListener implements UndoableEditListener {
public CompoundEdit compoundEdit;
-
+
private TextAdapter adapter;
+ private JTextComponent editor;
private int lastOffset;
private int lastLength;
public JTextFieldUndoListener(TextAdapter adapter) {
+ this(adapter.getComponent());
this.adapter = adapter;
+ }
+
+ public JTextFieldUndoListener(JTextComponent editor) {
+ this.editor = editor;
- this.adapter.getComponent().addFocusListener(new FocusAdapter() {
+ this.editor.addFocusListener(new FocusAdapter() {
@Override
public void focusLost(FocusEvent e) {
- if (compoundEdit != null) {
- compoundEdit.end();
- compoundEdit = null;
- }
+ finishCurrentEdit();
}
});
}
public void undoableEditHappened(UndoableEditEvent e) {
-
- JTextComponent editor = adapter.getComponent();
-
+
if (compoundEdit == null || !compoundEdit.canUndo()) {
compoundEdit = startCompoundEdit(e.getEdit());
lastLength = editor.getDocument().getLength();
@@ -89,17 +90,25 @@
}
private CompoundEdit startCompoundEdit(UndoableEdit anEdit) {
-
- JTextComponent editor = adapter.getComponent();
-
+
lastOffset = editor.getCaretPosition();
lastLength = editor.getDocument().getLength();
- compoundEdit = new TextCompoundEdit(adapter);
+ compoundEdit = (this.adapter != null)
+ ? new TextCompoundEdit(adapter, this)
+ : new TextCompoundEdit(editor, this);
+
compoundEdit.addEdit(anEdit);
Application.getInstance().getUndoManager().addEdit(compoundEdit);
return compoundEdit;
}
+
+ public void finishCurrentEdit() {
+ if (compoundEdit != null) {
+ compoundEdit.end();
+ compoundEdit = null;
+ }
+ }
}
Modified: cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/undo/TextCompoundEdit.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/undo/TextCompoundEdit.java?rev=888911&r1=888910&r2=888911&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/undo/TextCompoundEdit.java (original)
+++ cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/undo/TextCompoundEdit.java Wed Dec 9 18:34:07 2009
@@ -45,19 +45,29 @@
public class TextCompoundEdit extends CompoundEdit implements DocumentListener {
private TextAdapter adapter;
+ private JTextComponent editor;
private TreePath treePath;
private int selectedTabIndex;
private JTabbedPane tabbedPane;
-
+
private Object targetObject;
+ private JTextFieldUndoListener listener;
+
public Object getTargetObject() {
return targetObject;
}
- public TextCompoundEdit(TextAdapter adapter) {
+ public TextCompoundEdit(TextAdapter adapter, JTextFieldUndoListener listener) {
+ this(adapter.getComponent(), listener);
this.adapter = adapter;
+ }
+
+ public TextCompoundEdit(JTextComponent editor, JTextFieldUndoListener listener) {
+
+ this.editor = editor;
+ this.listener = listener;
EditorView editorView = ((CayenneModelerFrame) Application
.getInstance()
@@ -127,17 +137,14 @@
public void run() {
int offset = e.getOffset() + e.getLength();
- offset = Math.min(offset, adapter
- .getComponent()
- .getDocument()
- .getLength());
- adapter.getComponent().setCaretPosition(offset);
+ offset = Math.min(offset, editor.getDocument().getLength());
+ editor.setCaretPosition(offset);
}
});
}
public void removeUpdate(DocumentEvent e) {
- adapter.getComponent().setCaretPosition(e.getOffset());
+ editor.setCaretPosition(e.getOffset());
}
public void changedUpdate(DocumentEvent e) {
@@ -151,22 +158,34 @@
public void redo() throws CannotRedoException {
restoreSelections();
- super.redo();
+ if (canRedo()) {
+ super.redo();
+ }
+ else {
+ die();
+ }
- adapter.getComponent().requestFocusInWindow();
+ editor.requestFocusInWindow();
}
public void undo() throws CannotUndoException {
restoreSelections();
- end();
+ listener.finishCurrentEdit();
- super.undo();
+ if (canUndo()) {
+ super.undo();
+ }
+ else {
+ die();
+ }
- adapter.updateModel();
+ if (adapter != null) {
+ adapter.updateModel();
+ }
- adapter.getComponent().requestFocusInWindow();
- adapter.getComponent().selectAll();
+ editor.requestFocusInWindow();
+ editor.selectAll();
}
@Override
@@ -180,14 +199,14 @@
}
public JTextComponent getEditor() {
- return adapter.getComponent();
+ return editor;
}
public void watchCaretPosition() {
- adapter.getComponent().getDocument().addDocumentListener(this);
+ editor.getDocument().addDocumentListener(this);
}
public void stopWatchingCaretPosition() {
- adapter.getComponent().getDocument().removeDocumentListener(this);
+ editor.getDocument().removeDocumentListener(this);
}
}
\ No newline at end of file
Modified: cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/CayenneWidgetFactory.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/CayenneWidgetFactory.java?rev=888911&r1=888910&r2=888911&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/CayenneWidgetFactory.java (original)
+++ cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/CayenneWidgetFactory.java Wed Dec 9 18:34:07 2009
@@ -35,10 +35,11 @@
import javax.swing.JTextField;
import javax.swing.SwingConstants;
import javax.swing.table.TableCellEditor;
-import javax.swing.text.JTextComponent;
import org.apache.cayenne.modeler.ModelerPreferences;
import org.apache.cayenne.modeler.undo.JComboBoxUndoListener;
+import org.apache.cayenne.modeler.undo.JEditTextAreaUndoableAdapter;
+import org.apache.cayenne.modeler.undo.JTextFieldUndoListener;
import org.apache.cayenne.modeler.util.combo.AutoCompletion;
import org.apache.cayenne.modeler.util.combo.ComboBoxCellEditor;
import org.apache.cayenne.swing.components.textpane.JCayenneTextPane;
@@ -109,6 +110,22 @@
}
/**
+ * Creates undoable JTextField.
+ *
+ */
+ public static JTextField createUndoableTextField() {
+ return new JTextFieldUndoable();
+ }
+
+ /**
+ * Creates undoable JTextField.
+ *
+ */
+ public static JTextField createUndoableTextField(int size) {
+ return new JTextFieldUndoable(size);
+ }
+
+ /**
* Creates cell editor for text field
*/
public static DefaultCellEditor createCellEditor(JTextField textField) {
@@ -203,6 +220,9 @@
area.setInputHandler(new MacInputHandler());
}
+ area.getDocument().addUndoableEditListener(
+ new JTextFieldUndoListener(new JEditTextAreaUndoableAdapter(area)));
+
return area;
}
Added: cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/JTextFieldUndoable.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/JTextFieldUndoable.java?rev=888911&view=auto
==============================================================================
--- cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/JTextFieldUndoable.java (added)
+++ cayenne/main/trunk/framework/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/JTextFieldUndoable.java Wed Dec 9 18:34:07 2009
@@ -0,0 +1,52 @@
+/*****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ ****************************************************************/
+package org.apache.cayenne.modeler.util;
+
+import javax.swing.JTextField;
+import javax.swing.event.UndoableEditListener;
+
+import org.apache.cayenne.modeler.undo.JTextFieldUndoListener;
+
+class JTextFieldUndoable extends JTextField {
+
+ private UndoableEditListener undoListener;
+
+ JTextFieldUndoable() {
+ super();
+ this.undoListener = new JTextFieldUndoListener(this);
+ this.getDocument().addUndoableEditListener(this.undoListener);
+ }
+
+ JTextFieldUndoable(int size) {
+ super(size);
+ this.undoListener = new JTextFieldUndoListener(this);
+ this.getDocument().addUndoableEditListener(this.undoListener);
+ }
+
+ @Override
+ public void setText(String t) {
+ this.getDocument().removeUndoableEditListener(this.undoListener);
+ try {
+ super.setText(t);
+ }
+ finally {
+ this.getDocument().addUndoableEditListener(this.undoListener);
+ }
+ }
+}