r29 - trunk/jmexico-swing-editor/src/main/java/fr/reseaumexico/editor/ui/editor/factorValue
Author: sletellier Date: 2012-01-18 12:41:27 +0100 (Wed, 18 Jan 2012) New Revision: 29 Url: http://forge.codelutin.com/repositories/revision/jmexico/29 Log: Add cache on editor factory Modified: trunk/jmexico-swing-editor/src/main/java/fr/reseaumexico/editor/ui/editor/factorValue/FactorValueCellEditor.java trunk/jmexico-swing-editor/src/main/java/fr/reseaumexico/editor/ui/editor/factorValue/FactorValueCellRenderer.java trunk/jmexico-swing-editor/src/main/java/fr/reseaumexico/editor/ui/editor/factorValue/FactorValueEditorFactory.java Modified: trunk/jmexico-swing-editor/src/main/java/fr/reseaumexico/editor/ui/editor/factorValue/FactorValueCellEditor.java =================================================================== --- trunk/jmexico-swing-editor/src/main/java/fr/reseaumexico/editor/ui/editor/factorValue/FactorValueCellEditor.java 2012-01-18 11:35:09 UTC (rev 28) +++ trunk/jmexico-swing-editor/src/main/java/fr/reseaumexico/editor/ui/editor/factorValue/FactorValueCellEditor.java 2012-01-18 11:41:27 UTC (rev 29) @@ -85,7 +85,6 @@ @Override public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) { // get factor - // TODO sletellier 20111221 : Take care of type factor = (Factor) table.getValueAt(row, 0); currentValue = value; @@ -106,6 +105,19 @@ }); } + component.addFocusListener(new FocusListener() { + + @Override + public void focusGained(FocusEvent e) { + // do nothing + } + + @Override + public void focusLost(FocusEvent e) { + fireEditingStopped(); + } + }); + return component; } defaultInlineEditor.setText(currentValue == null ? "" : String.valueOf(currentValue)); @@ -116,7 +128,6 @@ public void focusGained(FocusEvent e) { // get factor - // TODO sletellier 20111221 : Take care of type FactorValueEditor editor = factory.getDialogEditor(factor, currentValue); if (editor == null) { isEditing = true; @@ -131,5 +142,6 @@ @Override public void focusLost(FocusEvent e) { + fireEditingStopped(); } } Modified: trunk/jmexico-swing-editor/src/main/java/fr/reseaumexico/editor/ui/editor/factorValue/FactorValueCellRenderer.java =================================================================== --- trunk/jmexico-swing-editor/src/main/java/fr/reseaumexico/editor/ui/editor/factorValue/FactorValueCellRenderer.java 2012-01-18 11:35:09 UTC (rev 28) +++ trunk/jmexico-swing-editor/src/main/java/fr/reseaumexico/editor/ui/editor/factorValue/FactorValueCellRenderer.java 2012-01-18 11:41:27 UTC (rev 29) @@ -40,6 +40,7 @@ protected TableCellRenderer delegate; public FactorValueCellRenderer(JAXXContext context) { + // search specific factory in context factory = context.getContextValue(FactorValueEditorFactory.class); @@ -53,17 +54,18 @@ } @Override - public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { + public Component getTableCellRendererComponent(final JTable table, final Object value, final boolean isSelected, final boolean hasFocus, final int row, final int column) { Factor factor = (Factor) table.getValueAt(row, 0); - FactorValueEditorFactory.FactorValueCellRenderer specificEditor = factory.getRenderedComponent(factor, value); + FactorValueEditorFactory.FactorValueCellRenderer specificRenderer = factory.getRenderedComponent(factor, value); Component result; - if (specificEditor == null) { + if (specificRenderer == null) { result = delegate.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); } else { - result = specificEditor.getComponent(); + result = specificRenderer.getComponent(); } + return result; } } Modified: trunk/jmexico-swing-editor/src/main/java/fr/reseaumexico/editor/ui/editor/factorValue/FactorValueEditorFactory.java =================================================================== --- trunk/jmexico-swing-editor/src/main/java/fr/reseaumexico/editor/ui/editor/factorValue/FactorValueEditorFactory.java 2012-01-18 11:35:09 UTC (rev 28) +++ trunk/jmexico-swing-editor/src/main/java/fr/reseaumexico/editor/ui/editor/factorValue/FactorValueEditorFactory.java 2012-01-18 11:41:27 UTC (rev 29) @@ -24,10 +24,12 @@ */ package fr.reseaumexico.editor.ui.editor.factorValue; +import com.google.common.collect.Maps; import fr.reseaumexico.model.Domain; import fr.reseaumexico.model.Factor; import fr.reseaumexico.model.ValueType; import java.awt.Component; +import java.util.Map; import javax.swing.JCheckBox; import javax.swing.JTextField; import jaxx.runtime.swing.editor.NumberEditor; @@ -40,6 +42,8 @@ * @since 0.1 */ public class FactorValueEditorFactory { + + protected Map<Factor, FactorValueCellEditor<?>> factorValueEditorCache = Maps.newHashMap(); /** * Provide specific {@link javax.swing.JDialog} editor for factor value @@ -65,6 +69,14 @@ return null; } + protected FactorValueCellEditor<?> getFactorValueCellEditor(Factor factor) { + return factorValueEditorCache.get(factor); + } + + protected void setFactorValueCellEditor(Factor factor, FactorValueCellEditor<?> editor) { + factorValueEditorCache.put(factor, editor); + } + /** * Provide specific cell editor for factor value * @@ -74,17 +86,28 @@ */ public FactorValueCellEditor getCellEditor(Factor factor, Object value) { + FactorValueCellEditor<?> factorValueCellEditor = getFactorValueCellEditor(factor); + // get type Domain domain = factor.getDomain(); + ValueType valueType = ValueType.STRING; if (domain != null) { - ValueType valueType = domain.getValueType(); + valueType = domain.getValueType(); + } + + if (factorValueCellEditor == null) { switch (valueType) { - case INTEGER: return new IntegerFactorValueInlineEditor((Integer)value); - case DECIMAL: return new DecimalFactorValueInlineEditor((Double)value); - case BOOLEAN: return new BooleanFactorValueInlineEditor((Boolean)value); + case INTEGER: factorValueCellEditor = new IntegerFactorValueInlineEditor(); break; + case DECIMAL: factorValueCellEditor = new DecimalFactorValueInlineEditor(); break; + case BOOLEAN: factorValueCellEditor = new BooleanFactorValueInlineEditor(); break; + default: factorValueCellEditor = new DefaultFactorValueInlineEditor(); } } - return new DefaultFactorValueInlineEditor(value); + + setFactorValueCellEditor(factor, factorValueCellEditor); + + factorValueCellEditor.setValue(value); + return factorValueCellEditor; } /** @@ -101,11 +124,13 @@ protected static interface FactorValueCellRenderer { public abstract Component getComponent(); + public abstract void setValue(Object value); } protected static interface FactorValueCellEditor<B> extends FactorValueCellRenderer { public abstract B getValue(); + public abstract void setValue(Object value); public abstract Component getComponent(); } @@ -113,12 +138,17 @@ protected JTextField component; - public DefaultFactorValueInlineEditor(Object value) { - this.component = new JTextField(getStringValue(value)); + public DefaultFactorValueInlineEditor() { + this.component = new JTextField(); this.component.setBorder(null); } @Override + public void setValue(Object value) { + component.setText(getStringValue(value)); + } + + @Override public String getValue() { return component.getText(); } @@ -133,11 +163,8 @@ protected JCheckBox checkBox; - public BooleanFactorValueInlineEditor(Boolean value) { + public BooleanFactorValueInlineEditor() { this.checkBox = new JCheckBox(); - if (value != null) { - this.checkBox.setSelected(value); - } } @Override @@ -146,6 +173,13 @@ } @Override + public void setValue(Object value) { + if (value != null) { + this.checkBox.setSelected((Boolean)value); + } + } + + @Override public Component getComponent() { return checkBox; } @@ -155,12 +189,10 @@ protected NumberEditor numberEditor; - public IntegerFactorValueInlineEditor(Integer value) { + public IntegerFactorValueInlineEditor() { this.numberEditor = new NumberEditor(); - numberEditor.setModel(value); + numberEditor.getTextField().setBorder(null); - // FIXME sletellier 20120105 : we dont need to set modelText - numberEditor.setModelText(getStringValue(value)); numberEditor.setUseFloat(false); numberEditor.setUseSign(true); } @@ -171,6 +203,13 @@ } @Override + public void setValue(Object value) { + // FIXME sletellier 20120105 : we dont need to set modelText + numberEditor.setModel((Integer)value); + numberEditor.setModelText(getStringValue(value)); + } + + @Override public Component getComponent() { return numberEditor; } @@ -180,12 +219,10 @@ protected NumberEditor numberEditor; - public DecimalFactorValueInlineEditor(Double value) { + public DecimalFactorValueInlineEditor() { this.numberEditor = new NumberEditor(); - numberEditor.setModel(value); + numberEditor.getTextField().setBorder(null); - // FIXME sletellier 20120105 : we dont need to set modelText - numberEditor.setModelText(getStringValue(value)); numberEditor.setModelType(Double.class); numberEditor.setUseFloat(true); numberEditor.setUseSign(true); @@ -197,6 +234,13 @@ } @Override + public void setValue(Object value) { + numberEditor.setModel((Double)value); + // FIXME sletellier 20120105 : we dont need to set modelText + numberEditor.setModelText(getStringValue(value)); + } + + @Override public Component getComponent() { return numberEditor; }
participants (1)
-
sletellier@users.forge.codelutin.com