You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by nt...@apache.org on 2017/02/21 08:33:02 UTC
cayenne git commit: CAY-2207 Modeler: “Java Type” and "DbAttribute Path" are not saved with using TAB to move forward plus related code cleanup
Repository: cayenne
Updated Branches:
refs/heads/master 5502c691d -> e1823c3e2
CAY-2207 Modeler: \u201cJava Type\u201d and "DbAttribute Path" are not saved with using TAB to move forward
plus related code cleanup
Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo
Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/e1823c3e
Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/e1823c3e
Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/e1823c3e
Branch: refs/heads/master
Commit: e1823c3e2bdd8ee998077e49e7de3d1a2a3aae5f
Parents: 5502c69
Author: Nikita Timofeev <st...@gmail.com>
Authored: Tue Feb 21 11:32:45 2017 +0300
Committer: Nikita Timofeev <st...@gmail.com>
Committed: Tue Feb 21 11:32:45 2017 +0300
----------------------------------------------------------------------
.../modeler/editor/ObjAttributeTableModel.java | 3 +-
.../modeler/editor/ObjEntityAttributePanel.java | 44 ++++----------
.../editor/ObjEntityRelationshipPanel.java | 4 +-
.../editor/ObjRelationshipTableModel.java | 49 +++++----------
.../cayenne/modeler/util/CayenneTable.java | 15 ++---
.../cayenne/modeler/util/CayenneTableModel.java | 63 +++++---------------
.../modeler/util/DefaultWidgetFactory.java | 3 +-
.../modeler/util/combo/AutoCompletion.java | 18 ++----
.../modeler/util/combo/ComboBoxCellEditor.java | 15 +----
.../util/combo/CustomTypeComboBoxEditor.java | 14 ++---
.../modeler/util/combo/EditorTextField.java | 41 ++++++++++++-
.../modeler/util/combo/SuggestionList.java | 7 +--
12 files changed, 102 insertions(+), 174 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cayenne/blob/e1823c3e/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjAttributeTableModel.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjAttributeTableModel.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjAttributeTableModel.java
index 8881829..41739ac 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjAttributeTableModel.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjAttributeTableModel.java
@@ -339,8 +339,7 @@ public class ObjAttributeTableModel extends CayenneTableModel<ObjAttributeWrappe
}
private void setColumnLocking(ObjAttributeWrapper attribute, Object value) {
- attribute.setUsedForLocking((value instanceof Boolean)
- && ((Boolean) value).booleanValue());
+ attribute.setUsedForLocking((value instanceof Boolean) && (Boolean) value);
}
private void setDbAttribute(ObjAttributeWrapper attribute, Object value) {
http://git-wip-us.apache.org/repos/asf/cayenne/blob/e1823c3e/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjEntityAttributePanel.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjEntityAttributePanel.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjEntityAttributePanel.java
index 1d6645a..7c03193 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjEntityAttributePanel.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjEntityAttributePanel.java
@@ -127,9 +127,7 @@ public class ObjEntityAttributePanel extends JPanel implements ObjEntityDisplayL
ObjAttributeTableModel.class,
"objEntity/attributeTable");
- /**
- * Create and install a popup
- */
+ // Create and install a popup
Icon ico = ModelerUtil.buildIcon("icon-info.gif");
resolveMenu = new JMenuItem("Database Mapping", ico);
@@ -164,13 +162,10 @@ public class ObjEntityAttributePanel extends JPanel implements ObjEntityDisplayL
// ... show dialog...
new ObjAttributeInfoDialog(mediator, row, model).startupAction();
- /**
- * This is required for a table to be updated properly
- */
+ // This is required for a table to be updated properly
table.cancelEditing();
- // need to refresh selected row... do this by unselecting/selecting the
- // row
+ // need to refresh selected row... do this by unselecting/selecting the row
table.getSelectionModel().clearSelection();
table.select(row);
enabledResolve = false;
@@ -188,14 +183,10 @@ public class ObjEntityAttributePanel extends JPanel implements ObjEntityDisplayL
}
public void initComboBoxes() {
- List<String> embeddableNames = new ArrayList<String>();
- List<String> typeNames = new ArrayList<String>();
-
- Iterator it = ((DataChannelDescriptor) mediator.getProject().getRootNode())
- .getDataMaps()
- .iterator();
- while (it.hasNext()) {
- DataMap dataMap = (DataMap) it.next();
+ List<String> embeddableNames = new ArrayList<>();
+ List<String> typeNames = new ArrayList<>();
+
+ for (DataMap dataMap : ((DataChannelDescriptor) mediator.getProject().getRootNode()).getDataMaps()) {
for (Embeddable emb : dataMap.getEmbeddables()) {
embeddableNames.add(emb.getClassName());
}
@@ -205,15 +196,11 @@ public class ObjEntityAttributePanel extends JPanel implements ObjEntityDisplayL
Collections.addAll(typeNames, registeredTypes);
typeNames.addAll(embeddableNames);
- TableColumn typeColumn = table.getColumnModel().getColumn(
- ObjAttributeTableModel.OBJ_ATTRIBUTE_TYPE);
+ TableColumn typeColumn = table.getColumnModel().getColumn(ObjAttributeTableModel.OBJ_ATTRIBUTE_TYPE);
- JComboBox javaTypesCombo = Application.getWidgetFactory().createComboBox(
- typeNames.toArray(),
- false);
+ JComboBox javaTypesCombo = Application.getWidgetFactory().createComboBox(typeNames.toArray(), false);
AutoCompletion.enable(javaTypesCombo, false, true);
- typeColumn.setCellEditor(Application.getWidgetFactory().createCellEditor(
- javaTypesCombo));
+ typeColumn.setCellEditor(Application.getWidgetFactory().createCellEditor(javaTypesCombo));
}
/**
@@ -399,13 +386,7 @@ public class ObjEntityAttributePanel extends JPanel implements ObjEntityDisplayL
int row,
int column) {
- super.getTableCellRendererComponent(
- table,
- value,
- isSelected,
- hasFocus,
- row,
- column);
+ super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
ObjAttributeTableModel model = (ObjAttributeTableModel) table.getModel();
column = table.getColumnModel().getColumn(column).getModelIndex();
@@ -415,8 +396,7 @@ public class ObjEntityAttributePanel extends JPanel implements ObjEntityDisplayL
if (!model.isCellEditable(row, column)) {
setForeground(Color.GRAY);
} else {
- setForeground(isSelected && !hasFocus ? table
- .getSelectionForeground() : table.getForeground());
+ setForeground(isSelected && !hasFocus ? table.getSelectionForeground() : table.getForeground());
}
if (attribute.isInherited()) {
http://git-wip-us.apache.org/repos/asf/cayenne/blob/e1823c3e/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjEntityRelationshipPanel.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjEntityRelationshipPanel.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjEntityRelationshipPanel.java
index 7a4c2af..d2ee56d 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjEntityRelationshipPanel.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjEntityRelationshipPanel.java
@@ -277,8 +277,8 @@ public class ObjEntityRelationshipPanel extends JPanel implements ObjEntityDispl
public void objRelationshipRemoved(RelationshipEvent e) {
ObjRelationshipTableModel model = (ObjRelationshipTableModel) table.getModel();
- int ind = model.getObjectList().indexOf(e.getRelationship());
- model.removeRow(e.getRelationship());
+ int ind = model.getObjectList().indexOf((ObjRelationship)e.getRelationship());
+ model.removeRow((ObjRelationship) e.getRelationship());
table.select(ind);
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/e1823c3e/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjRelationshipTableModel.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjRelationshipTableModel.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjRelationshipTableModel.java
index e05608d..db7668a 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjRelationshipTableModel.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/editor/ObjRelationshipTableModel.java
@@ -34,7 +34,7 @@ import java.util.Comparator;
* Table model to display ObjRelationships.
*
*/
-public class ObjRelationshipTableModel extends CayenneTableModel {
+public class ObjRelationshipTableModel extends CayenneTableModel<ObjRelationship> {
// Columns
public static final int REL_NAME = 0;
@@ -47,20 +47,14 @@ public class ObjRelationshipTableModel extends CayenneTableModel {
private ObjEntity entity;
- public ObjRelationshipTableModel(ObjEntity entity, ProjectController mediator,
- Object eventSource) {
- super(mediator, eventSource, new ArrayList(entity.getRelationships()));
+ public ObjRelationshipTableModel(ObjEntity entity, ProjectController mediator, Object eventSource) {
+ super(mediator, eventSource, new ArrayList<>(entity.getRelationships()));
this.entity = entity;
// order using local comparator
Collections.sort(objectList, new RelationshipComparator());
}
- @Override
- protected void orderList() {
- // NOOP
- }
-
public ObjEntity getEntity() {
return entity;
}
@@ -110,8 +104,7 @@ public class ObjRelationshipTableModel extends CayenneTableModel {
}
public ObjRelationship getRelationship(int row) {
- return (row >= 0 && row < objectList.size()) ? (ObjRelationship) objectList
- .get(row) : null;
+ return (row >= 0 && row < objectList.size()) ? objectList.get(row) : null;
}
public Object getValueAt(int row, int column) {
@@ -150,7 +143,7 @@ public class ObjRelationshipTableModel extends CayenneTableModel {
.toLowerCase();
}
- semantics.append(", " + collection);
+ semantics.append(", ").append(collection);
}
return semantics.toString();
}
@@ -169,9 +162,7 @@ public class ObjRelationshipTableModel extends CayenneTableModel {
ObjEntity target = (ObjEntity) value;
relationship.setTargetEntityName(target);
- /**
- * Clear existing relationships, otherwise addDbRelationship() might fail
- */
+ // Clear existing relationships, otherwise addDbRelationship() might fail
relationship.clearDbRelationships();
// now try to connect DbEntities if we can do it in one step
@@ -192,8 +183,7 @@ public class ObjRelationshipTableModel extends CayenneTableModel {
relationship.setDeleteRule(DeleteRule.deleteRuleForName((String) value));
fireTableCellUpdated(row, column);
} else if (column == REL_LOCKING) {
- relationship.setUsedForLocking((value instanceof Boolean)
- && ((Boolean) value).booleanValue());
+ relationship.setUsedForLocking((value instanceof Boolean) && (Boolean) value);
fireTableCellUpdated(row, column);
} else if (column == REL_TARGET_PATH) {
relationship.setDbRelationshipPath((String) value);
@@ -223,20 +213,13 @@ public class ObjRelationshipTableModel extends CayenneTableModel {
@Override
public boolean isCellEditable(int row, int col) {
- return !isInherited(row) && col != REL_SEMANTICS
- && col != REL_TARGET;
+ return !isInherited(row) && col != REL_SEMANTICS && col != REL_TARGET;
}
- final class RelationshipComparator implements Comparator {
-
- public int compare(Object o1, Object o2) {
- ObjRelationship r1 = (ObjRelationship) o1;
- ObjRelationship r2 = (ObjRelationship) o2;
-
- int delta = getWeight(r1) - getWeight(r2);
-
- return (delta != 0) ? delta : Util.nullSafeCompare(true, r1.getName(), r2
- .getName());
+ final class RelationshipComparator implements Comparator<ObjRelationship> {
+ public int compare(ObjRelationship o1, ObjRelationship o2) {
+ int delta = getWeight(o1) - getWeight(o2);
+ return (delta != 0) ? delta : Util.nullSafeCompare(true, o1.getName(), o2.getName());
}
private int getWeight(ObjRelationship r) {
@@ -278,18 +261,16 @@ public class ObjRelationshipTableModel extends CayenneTableModel {
private int sortCol;
- public ObjRelationshipTableComparator(int sortCol) {
+ ObjRelationshipTableComparator(int sortCol) {
this.sortCol = sortCol;
}
public int compare(ObjRelationship o1, ObjRelationship o2) {
if ((o1 == null && o2 == null) || o1 == o2) {
return 0;
- }
- else if (o1 == null && o2 != null) {
+ } else if (o1 == null) {
return -1;
- }
- else if (o1 != null && o2 == null) {
+ } else if (o2 == null) {
return 1;
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/e1823c3e/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/CayenneTable.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/CayenneTable.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/CayenneTable.java
index bbbbfa0..b73026f 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/CayenneTable.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/CayenneTable.java
@@ -59,16 +59,14 @@ public class CayenneTable extends JTable {
@Override
public void setModel(TableModel dataModel) {
-
super.setModel(dataModel);
+
if (!(dataModel instanceof DefaultTableModel)) {
TableColumnModel model = getColumnModel();
for (int i = 0; i < getColumnCount(); i++) {
model.getColumn(i).setHeaderRenderer(renderer);
-
}
-
}
}
@@ -77,9 +75,7 @@ public class CayenneTable extends JTable {
super.createDefaultEditors();
JTextField textField = new JTextField(20);
- final DefaultCellEditor textEditor = Application
- .getWidgetFactory()
- .createCellEditor(textField);
+ final DefaultCellEditor textEditor = Application.getWidgetFactory().createCellEditor(textField);
textEditor.setClickCountToStart(1);
setDefaultEditor(Object.class, textEditor);
@@ -161,8 +157,7 @@ public class CayenneTable extends JTable {
}
/**
- * ListSelectionModel for Cayenne table. Has a method to set multiple rows selection
- * at once.
+ * ListSelectionModel for Cayenne table. Has a method to set multiple rows selection at once.
*/
class CayenneListSelectionModel extends DefaultListSelectionModel {
@@ -173,9 +168,7 @@ public class CayenneTable extends JTable {
* ListSelectionEvent
*/
public void setSelection(int[] rows) {
- /**
- * First check if we must do anything at all
- */
+ // First check if we must do anything at all
boolean selectionChanged = false;
for (int row : rows) {
if (!isRowSelected(row)) {
http://git-wip-us.apache.org/repos/asf/cayenne/blob/e1823c3e/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/CayenneTableModel.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/CayenneTableModel.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/CayenneTableModel.java
index 6ba39fb..01c4354 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/CayenneTableModel.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/CayenneTableModel.java
@@ -41,7 +41,6 @@ import org.apache.commons.logging.LogFactory;
/**
* Superclass of CayenneModeler table model classes.
- *
*/
public abstract class CayenneTableModel<T> extends AbstractTableModel {
@@ -54,15 +53,11 @@ public abstract class CayenneTableModel<T> extends AbstractTableModel {
/**
* Constructor for CayenneTableModel.
*/
- public CayenneTableModel(ProjectController mediator, Object eventSource,
- java.util.List<T> objectList) {
-
+ public CayenneTableModel(ProjectController mediator, Object eventSource, List<T> objectList) {
super();
this.eventSource = eventSource;
this.mediator = mediator;
this.objectList = objectList;
-
- //orderList();
}
public void setValueAt(Object newVal, int row, int col) {
@@ -70,14 +65,12 @@ public abstract class CayenneTableModel<T> extends AbstractTableModel {
Object oldValue = getValueAt(row, col);
if (!Util.nullSafeEquals(newVal, oldValue)) {
-
setUpdatedValueAt(newVal, row, col);
this.mediator.getApplication().getUndoManager().addEdit(
new CayenneTableModelUndoableEdit(this, oldValue, newVal, row, col));
}
- }
- catch (IllegalArgumentException e) {
+ } catch (IllegalArgumentException e) {
logObj.error("Error setting table model value", e);
JOptionPane.showMessageDialog(
Application.getFrame(),
@@ -94,32 +87,11 @@ public abstract class CayenneTableModel<T> extends AbstractTableModel {
public abstract void setUpdatedValueAt(Object newVal, int row, int col);
/**
- * Orders internal object list. Key returned by <code>getOrderingKey</code> is used
- * for comparison.
- */
- protected void orderList() {
- String key = getOrderingKey();
- if (key != null) {
- Collections.sort(objectList, new PropertyComparator(
- getOrderingKey(),
- getElementsClass()));
- }
- }
-
- /**
* Returns Java class of the internal list elements.
*/
public abstract Class<?> getElementsClass();
/**
- * Returns the key by which to order elements in the object list. Default value is
- * "name".
- */
- public String getOrderingKey() {
- return "name";
- }
-
- /**
* Returns the number of objects on the list.
*/
public int getRowCount() {
@@ -152,7 +124,7 @@ public abstract class CayenneTableModel<T> extends AbstractTableModel {
fireTableDataChanged();
}
- public void removeRow(Object row) {
+ public void removeRow(T row) {
objectList.remove(row);
fireTableDataChanged();
}
@@ -160,7 +132,7 @@ public abstract class CayenneTableModel<T> extends AbstractTableModel {
/**
* Moves a row up, jumping down if row is already at the top.
*/
- public int moveRowUp(Object row) {
+ public int moveRowUp(T row) {
int len = objectList.size();
if (len < 2) {
return -1;
@@ -183,7 +155,7 @@ public abstract class CayenneTableModel<T> extends AbstractTableModel {
/**
* Moves a row down, jumping up if row is already at the bottom.
*/
- public int moveRowDown(Object row) {
+ public int moveRowDown(T row) {
int len = objectList.size();
if (len < 2) {
return -1;
@@ -220,21 +192,19 @@ public abstract class CayenneTableModel<T> extends AbstractTableModel {
return true;
}
- protected class PropertyComparator implements Comparator {
+ protected class PropertyComparator<C> implements Comparator<C> {
Method getter;
PropertyComparator(String propertyName, Class beanClass) {
try {
getter = findGetter(beanClass, propertyName);
- }
- catch (IntrospectionException e) {
+ } catch (IntrospectionException e) {
throw new CayenneRuntimeException("Introspection error", e);
}
}
- Method findGetter(Class beanClass, String propertyName)
- throws IntrospectionException {
+ Method findGetter(Class beanClass, String propertyName) throws IntrospectionException {
BeanInfo info = Introspector.getBeanInfo(beanClass);
PropertyDescriptor[] descriptors = info.getPropertyDescriptors();
@@ -247,25 +217,22 @@ public abstract class CayenneTableModel<T> extends AbstractTableModel {
throw new IntrospectionException("No getter found for " + propertyName);
}
- public int compare(Object o1, Object o2) {
+ @SuppressWarnings("unchecked")
+ public int compare(C o1, C o2) {
if ((o1 == null && o2 == null) || o1 == o2) {
return 0;
- }
- else if (o1 == null && o2 != null) {
+ } else if (o1 == null) {
return -1;
- }
- else if (o1 != null && o2 == null) {
+ } else if (o2 == null) {
return 1;
}
try {
Comparable p1 = (Comparable) getter.invoke(o1);
Comparable p2 = (Comparable) getter.invoke(o2);
-
return (p1 == null) ? -1 : (p2 == null)? 1 : p1.compareTo(p2);
- }
- catch (Exception ex) {
+ } catch (Exception ex) {
throw new CayenneRuntimeException("Error reading property.", ex);
}
}
@@ -276,9 +243,7 @@ public abstract class CayenneTableModel<T> extends AbstractTableModel {
public abstract boolean isColumnSortable(int sortCol);
public void sortByElementProperty(String string, boolean isAscent) {
- Collections.sort(objectList, new PropertyComparator(
- string,
- getElementsClass()));
+ Collections.sort(objectList, new PropertyComparator<>(string, getElementsClass()));
if(!isAscent){
Collections.reverse(objectList);
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/e1823c3e/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/DefaultWidgetFactory.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/DefaultWidgetFactory.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/DefaultWidgetFactory.java
index e4fea78..1fa56a7 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/DefaultWidgetFactory.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/DefaultWidgetFactory.java
@@ -97,8 +97,7 @@ public class DefaultWidgetFactory implements WidgetFactory {
*/
public TableCellEditor createCellEditor(JComboBox<?> combo) {
combo.setBorder(BorderFactory.createEmptyBorder(0,5,0,0));
- if (Boolean.TRUE.equals(combo
- .getClientProperty(AutoCompletion.AUTOCOMPLETION_PROPERTY))) {
+ if (Boolean.TRUE.equals(combo.getClientProperty(AutoCompletion.AUTOCOMPLETION_PROPERTY))) {
return new ComboBoxCellEditor(combo);
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/e1823c3e/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/combo/AutoCompletion.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/combo/AutoCompletion.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/combo/AutoCompletion.java
index e5839da..30b85ad 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/combo/AutoCompletion.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/combo/AutoCompletion.java
@@ -55,14 +55,10 @@ public class AutoCompletion implements FocusListener, KeyListener, Runnable {
protected AutoCompletion(final JComboBox comboBox, boolean strict, boolean allowsUserValues) {
this.comboBox = comboBox;
textEditor = ((JTextComponent)comboBox.getEditor().getEditorComponent());
-
this.allowsUserValues = allowsUserValues;
-
suggestionList = new SuggestionList(comboBox, strict);
-
- /**
- * Marking combobox as auto-completing
- */
+
+ // Marking combobox as auto-completing
comboBox.putClientProperty(AUTOCOMPLETION_PROPERTY, Boolean.TRUE);
}
@@ -108,9 +104,7 @@ public class AutoCompletion implements FocusListener, KeyListener, Runnable {
}
public void keyReleased(KeyEvent e) {
- if (e.getKeyCode() == KeyEvent.VK_BACK_SPACE ||
- e.getKeyCode() == KeyEvent.VK_ENTER) {
-
+ if (e.getKeyCode() == KeyEvent.VK_BACK_SPACE || e.getKeyCode() == KeyEvent.VK_ENTER) {
String text = textEditor.getText();
if (comboBox.isShowing()) {
suggestionList.hide();
@@ -147,8 +141,7 @@ public class AutoCompletion implements FocusListener, KeyListener, Runnable {
if (suggest) {
processKeyPressedWhenSuggestionListIsVisible(e);
- }
- else {
+ } else {
processKeyPressedWhenSuggestionListIsInvisible(e);
}
@@ -156,7 +149,7 @@ public class AutoCompletion implements FocusListener, KeyListener, Runnable {
suggestionListScrolling();
}
- private void processKeyPressedWhenSuggestionListIsInvisible(KeyEvent e){
+ private void processKeyPressedWhenSuggestionListIsInvisible(KeyEvent e){
int sel = comboBox.getSelectedIndex();
int max = comboBox.getItemCount() - 1;
@@ -183,7 +176,6 @@ public class AutoCompletion implements FocusListener, KeyListener, Runnable {
next = max;
break;
case KeyEvent.VK_ENTER:
- return;
case KeyEvent.VK_ESCAPE:
return;
default:
http://git-wip-us.apache.org/repos/asf/cayenne/blob/e1823c3e/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/combo/ComboBoxCellEditor.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/combo/ComboBoxCellEditor.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/combo/ComboBoxCellEditor.java
index 5ce8f38..2429ce0 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/combo/ComboBoxCellEditor.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/combo/ComboBoxCellEditor.java
@@ -22,8 +22,6 @@ package org.apache.cayenne.modeler.util.combo;
import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
-import java.awt.event.FocusEvent;
-import java.awt.event.FocusListener;
import java.awt.event.MouseEvent;
import java.io.Serializable;
import java.util.EventObject;
@@ -40,7 +38,7 @@ import javax.swing.table.TableCellEditor;
*
*/
public class ComboBoxCellEditor extends AbstractCellEditor
- implements ActionListener, TableCellEditor, FocusListener, Serializable {
+ implements ActionListener, TableCellEditor, Serializable {
static final String IS_TABLE_CELL_EDITOR_PROPERTY = "JComboBox.isTableCellEditor";
@@ -57,7 +55,7 @@ public class ComboBoxCellEditor extends AbstractCellEditor
// otherwise the value may get lost (e.g. see CAY-1104)
// LATER: this turned out to be the wrong fix, so I commented
// out the code in focusLost to fix CAY-1719 and fixed CAY-1104 differently.
- this.comboBox.getEditor().getEditorComponent().addFocusListener(this);
+ // this.comboBox.getEditor().getEditorComponent().addFocusListener(this);
// remove the editor's border - the cell itself already has one
((JComponent) comboBox.getEditor().getEditorComponent()).setBorder(null);
@@ -109,13 +107,4 @@ public class ComboBoxCellEditor extends AbstractCellEditor
return true;
}
-
- public void focusGained(FocusEvent e) {
- }
-
- public void focusLost(FocusEvent e) {
- if (e.getOppositeComponent() != null) {
- //stopCellEditing(); // Commented out to fix CAY-1719
- }
- }
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/e1823c3e/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/combo/CustomTypeComboBoxEditor.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/combo/CustomTypeComboBoxEditor.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/combo/CustomTypeComboBoxEditor.java
index 74369e6..7fb36b6 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/combo/CustomTypeComboBoxEditor.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/combo/CustomTypeComboBoxEditor.java
@@ -84,8 +84,7 @@ public class CustomTypeComboBoxEditor extends BasicComboBoxEditor {
// original type.
if (newValue.equals(localOldValue.toString())) {
return localOldValue;
- }
- else {
+ } else {
// Must take the value from the editor and get the value and cast it to the new type.
Class cls = localOldValue.getClass();
try {
@@ -121,22 +120,21 @@ public class CustomTypeComboBoxEditor extends BasicComboBoxEditor {
*
* @return value of classTo type, or null if conversion is impossible
*/
- protected Object convert(String value, Class classTo) {
+ protected Object convert(String value, Class<?> classTo) {
if (classTo == String.class) {
return value;
}
- /**
+ /*
* We still try to it in BasicComboBox's way, so that primary object
* types (such as numbers) would still be supported
*/
try {
- Method method = classTo.getMethod("valueOf", new Class[]{String.class});
+ Method method = classTo.getMethod("valueOf", String.class);
return method.invoke(null, value);
- }
- catch (Exception ignored) {}
+ } catch (Exception ignored) {}
- /**
+ /*
* We could manually convert strings to dbentities, attrs and other, but
* in this implementation we use reverse operation instead, and convert
* combobox model's items to String.
http://git-wip-us.apache.org/repos/asf/cayenne/blob/e1823c3e/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/combo/EditorTextField.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/combo/EditorTextField.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/combo/EditorTextField.java
index 88e4ce9..1d1d978 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/combo/EditorTextField.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/combo/EditorTextField.java
@@ -22,13 +22,19 @@ import java.awt.Color;
import java.awt.Component;
import java.awt.Graphics;
import java.awt.Insets;
+import java.awt.event.ActionEvent;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
+import javax.swing.AbstractAction;
import javax.swing.CellRendererPane;
+import javax.swing.InputMap;
import javax.swing.JComboBox;
+import javax.swing.JComponent;
import javax.swing.JList;
+import javax.swing.JTable;
import javax.swing.JTextField;
+import javax.swing.KeyStroke;
import javax.swing.ListCellRenderer;
/**
@@ -63,6 +69,36 @@ public class EditorTextField extends JTextField implements FocusListener {
rendererPane = new CellRendererPane();
addFocusListener(this);
+ // hook up to TAB handler to keep entered value after TAB is pressed
+ initTabHandler();
+ }
+
+ private void initTabHandler() {
+ this.combo.setFocusTraversalKeysEnabled(false);
+ this.combo.getActionMap().put("tab-action", new AbstractAction() {
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ combo.setSelectedItem(getText());
+ Component component = getParent().getParent();
+ if(component instanceof JTable) {
+ JTable table = (JTable)component;
+ if((e.getModifiers() & ActionEvent.SHIFT_MASK) > 0) {
+ table.changeSelection(table.getEditingRow(), table.getEditingColumn()-1, false, false);
+ } else {
+ table.changeSelection(table.getEditingRow(), table.getEditingColumn()+1, false, false);
+ }
+ } else {
+ if((e.getModifiers() & ActionEvent.SHIFT_MASK) > 0) {
+ transferFocusBackward();
+ } else {
+ transferFocus();
+ }
+ }
+ }
+ });
+ InputMap inputMap = this.combo.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
+ inputMap.put(KeyStroke.getKeyStroke("TAB"), "tab-action");
+ inputMap.put(KeyStroke.getKeyStroke("shift TAB"), "tab-action");
}
@Override
@@ -73,8 +109,8 @@ public class EditorTextField extends JTextField implements FocusListener {
list.setEnabled(combo.isEnabled());
ListCellRenderer renderer = combo.getRenderer();
- Component c = renderer.getListCellRendererComponent(list, combo
- .getSelectedItem(), -1, false, false);
+ Component c = renderer.getListCellRendererComponent(list, combo.getSelectedItem(),
+ -1, false, false);
//fill background first
Color oldColor = g.getColor();
@@ -90,7 +126,6 @@ public class EditorTextField extends JTextField implements FocusListener {
public void focusGained(FocusEvent e) {
hasFocus = true;
-
combo.repaint();
}
http://git-wip-us.apache.org/repos/asf/cayenne/blob/e1823c3e/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/combo/SuggestionList.java
----------------------------------------------------------------------
diff --git a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/combo/SuggestionList.java b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/combo/SuggestionList.java
index 9d4e6ba..b384759 100644
--- a/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/combo/SuggestionList.java
+++ b/modeler/cayenne-modeler/src/main/java/org/apache/cayenne/modeler/util/combo/SuggestionList.java
@@ -85,8 +85,7 @@ public class SuggestionList extends BasicComboPopup {
protected boolean matches(String item, String pattern) {
if (strict) {
return item.toLowerCase().startsWith(pattern.toLowerCase());
- }
- else {
+ } else {
return item.toLowerCase().contains(pattern.toLowerCase());
}
}
@@ -99,9 +98,7 @@ public class SuggestionList extends BasicComboPopup {
*/
@Override
protected int getPopupHeightForRowCount(int maxRowCount) {
- int h = super.getPopupHeightForRowCount(Math.min(maxRowCount, list.getModel().getSize()));
-
- return h;
+ return super.getPopupHeightForRowCount(Math.min(maxRowCount, list.getModel().getSize()));
}
/**