r2937 - in isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui: input input/gear input/metier sensitivity
Author: chatellier Date: 2010-01-22 15:39:11 +0000 (Fri, 22 Jan 2010) New Revision: 2937 Added: isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityTableModel.java isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/TableBlockingLayerUI.java Modified: isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/input/InputContentUI.jaxx isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/input/gear/GearPopulationSelectivityModel.java isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/input/metier/MetierSeasonInfoTargetSpeciesTableModel.java isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/EditorHelper.java isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/EquationContinuousPanelUI.jaxx isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityAction.java isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityUI.jaxx Log: Enable to add factors from tables (target factor equation, selectivity equation) Modified: isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/input/InputContentUI.jaxx =================================================================== --- isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/input/InputContentUI.jaxx 2010-01-22 15:38:16 UTC (rev 2936) +++ isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/input/InputContentUI.jaxx 2010-01-22 15:39:11 UTC (rev 2937) @@ -47,6 +47,8 @@ } }}' /> + <fr.ifremer.isisfish.ui.sensitivity.TableBlockingLayerUI id="tableLayerUI" constructorParams='this' /> + <script><![CDATA[ import javax.swing.JComponent; import fr.ifremer.isisfish.entities.FisheryRegion; @@ -134,16 +136,25 @@ String sensitivityFactorName = className + "." + method; isSensitivityFactorEnabled = SensitivityUtils.isSensitivityFactorEnabled(sensitivityFactorName); } - + // install correct layer depending if factor enable if (isSensitivityFactorEnabled) { jaxx.runtime.swing.BlockingLayerUI2 ui = layerUI2.clone(); SwingUtil.getLayer(boxed).setUI(ui); } else { - jaxx.runtime.swing.BlockingLayerUI ui = layerUI.clone(); - ui.setBlock(true); - ui.setUseIcon(isActif()); - SwingUtil.getLayer(boxed).setUI(ui); + if (boxed instanceof JTable) { + //fr.ifremer.isisfish.ui.sensitivity.TableBlockingLayerUI layerui = + // new fr.ifremer.isisfish.ui.sensitivity.TableBlockingLayerUI(); + //layerui.parent = this; + //layerui.verifier = getVerifier(); + SwingUtil.getLayer(boxed).setUI(tableLayerUI); + } + else { + jaxx.runtime.swing.BlockingLayerUI ui = layerUI.clone(); + ui.setBlock(true); + ui.setUseIcon(isActif()); + SwingUtil.getLayer(boxed).setUI(ui); + } } } } @@ -160,9 +171,9 @@ } JComponent source = (JComponent) e.getSource(); - Class classBean = (Class)source.getClientProperty("bean"); + Class<? extends TopiaEntity> classBean = (Class<? extends TopiaEntity>)source.getClientProperty("bean"); String beanID = (String)source.getClientProperty("beanID"); - TopiaEntity bean = null; + /*TopiaEntity bean = null; if (beanID == null) { bean = getVerifier().getEntity(classBean); } @@ -174,7 +185,59 @@ wizard.initNew(source, bean, EditorHelper.canBeContinue(source, bean)); wizard.pack(); wizard.setVisible(true); + }*/ + + String property = (String)source.getClientProperty("method"); + displayFactorWizard(source, classBean, beanID, property); +} + +/** + * Display factor wizard for bean/property in registred in verifier. + */ +public void displayFactorWizard(JComponent source, Class<? extends TopiaEntity> classBean, String beanID, String property) { + + if (log.isDebugEnabled()) { + log.debug("Event intercepted " + source); + log.debug(" client property (bean) : " + classBean); + log.debug(" client property (beanID) : " + beanID); + log.debug(" client property (method) : " + property); } + + TopiaEntity bean = null; + if (beanID == null) { + bean = getVerifier().getEntity(classBean); + } + else { + bean = getVerifier().getEntity(classBean, beanID); + } + + if (bean != null) { + + JComponent editor = source; + + // This is a special case for table source component + // If current entity is displayed by a JTable component + // we need to find a better component than + // can display 'property' on 'bean' + if (editor instanceof JTable) { + editor = EditorHelper.getEditorForValue(bean, property); + } + + if (editor != null) { + FactorWizardUI wizard = new FactorWizardUI(this); + wizard.initNew(editor, bean, EditorHelper.canBeContinue(editor, bean)); + wizard.pack(); + wizard.setVisible(true); + } + else if (log.isWarnEnabled()) { + log.warn("Can't find editor for " + classBean.getSimpleName() + "#" + property); + } + } + else { + if (log.isErrorEnabled()) { + log.error("Can't find bean in current verifier (classBean = " + classBean + ", beanID = " + beanID + ")"); + } + } } /** Modified: isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/input/gear/GearPopulationSelectivityModel.java =================================================================== --- isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/input/gear/GearPopulationSelectivityModel.java 2010-01-22 15:38:16 UTC (rev 2936) +++ isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/input/gear/GearPopulationSelectivityModel.java 2010-01-22 15:39:11 UTC (rev 2937) @@ -1,5 +1,5 @@ /* *##% - * Copyright (C) 2009 Code Lutin + * Copyright (C) 2009-2010 Ifremer, Code Lutin * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -35,6 +35,7 @@ import fr.ifremer.isisfish.entities.Equation; import fr.ifremer.isisfish.entities.Gear; import fr.ifremer.isisfish.entities.Selectivity; +import fr.ifremer.isisfish.ui.sensitivity.SensitivityTableModel; /** * Table model for {@link Gear}#{@link Selectivity}. @@ -49,7 +50,7 @@ * Last update : $Date$ * By : $Author$ */ -public class GearPopulationSelectivityModel extends AbstractTableModel implements TableCellRenderer { +public class GearPopulationSelectivityModel extends AbstractTableModel implements TableCellRenderer, SensitivityTableModel { /** Log. */ private static Log log = LogFactory.getLog(GearPopulationSelectivityModel.class); @@ -228,4 +229,25 @@ return c; } + /* + * @see fr.ifremer.isisfish.ui.sensitivity.SensitivityTableModel#getPropertyAtColumn(int) + */ + @Override + public String getPropertyAtColumn(int column) { + String result = null; + if (column == 1) { + result = "equation"; + } + return result; + } + + /* + * @see fr.ifremer.isisfish.ui.sensitivity.SensitivityTableModel#getBeanAtRow(int) + */ + @Override + public Object getBeanAtRow(int rowIndex) { + Object result = null; + result = selectivities.get(rowIndex); + return result; + } } Modified: isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/input/metier/MetierSeasonInfoTargetSpeciesTableModel.java =================================================================== --- isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/input/metier/MetierSeasonInfoTargetSpeciesTableModel.java 2010-01-22 15:38:16 UTC (rev 2936) +++ isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/input/metier/MetierSeasonInfoTargetSpeciesTableModel.java 2010-01-22 15:39:11 UTC (rev 2937) @@ -1,5 +1,5 @@ /* *##% - * Copyright (C) 2009 Ifremer, Code Lutin + * Copyright (C) 2009-2010 Ifremer, Code Lutin * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -36,6 +36,7 @@ import fr.ifremer.isisfish.entities.Equation; import fr.ifremer.isisfish.entities.MetierSeasonInfo; import fr.ifremer.isisfish.entities.TargetSpecies; +import fr.ifremer.isisfish.ui.sensitivity.SensitivityTableModel; /** * Table model for {@link MetierSeasonInfo}#{@link TargetSpecies}. @@ -51,7 +52,7 @@ * Last update : $Date$ * By : $Author$ */ -public class MetierSeasonInfoTargetSpeciesTableModel extends AbstractTableModel implements TableCellRenderer { +public class MetierSeasonInfoTargetSpeciesTableModel extends AbstractTableModel implements TableCellRenderer, SensitivityTableModel { /** Log. */ private static Log log = LogFactory.getLog(MetierSeasonInfoTargetSpeciesTableModel.class); @@ -236,4 +237,25 @@ return c; } + /* + * @see fr.ifremer.isisfish.ui.sensitivity.SensitivityTableModel#getPropertyAtColumn(int) + */ + @Override + public String getPropertyAtColumn(int column) { + String property = null; + if (column == 1) { + property = "targetFactorEquation"; + } + return property; + } + + /* + * @see fr.ifremer.isisfish.ui.sensitivity.SensitivityTableModel#getBeanAtRow(int) + */ + @Override + public Object getBeanAtRow(int rowIndex) { + Object value = null; + value = targetSpeciesList.get(rowIndex); + return value; + } } Modified: isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/EditorHelper.java =================================================================== --- isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/EditorHelper.java 2010-01-22 15:38:16 UTC (rev 2936) +++ isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/EditorHelper.java 2010-01-22 15:39:11 UTC (rev 2937) @@ -161,11 +161,12 @@ InputOneEquationUI ui = new InputOneEquationUI( new JAXXInitialContext().add(new InputAction())); ui.setSelectedEquation(origine.getSelectedEquation()); - ui.setLblText(origine.getLblText()); - ui.setNameEquation(origine.getNameEquation()); + ui.setText(origine.getText()); + ui.setFormuleCategory(origine.getFormuleCategory()); ui.setClazz(origine.getClazz()); - ui.setMethodGet(origine.getMethodGet()); - ui.setMethodSet(origine.getMethodSet()); + //ui.setMethodGet(origine.getMethodGet()); + //ui.setMethodSet(origine.getMethodSet()); + ui.setBeanProperty(origine.getBeanProperty()); ui.setBean(entity); ui.setActif(true); ui.refresh(); @@ -264,11 +265,12 @@ EquationContinuousPanelUI ui = new EquationContinuousPanelUI( new JAXXInitialContext().add(new InputAction())); ui.setSelectedEquation(origine.getSelectedEquation()); - ui.setLblText(origine.getLblText()); - ui.setNameEquation(origine.getNameEquation()); + ui.setText(origine.getText()); + ui.setFormuleCategory(origine.getFormuleCategory()); ui.setClazz(origine.getClazz()); - ui.setMethodGet(origine.getMethodGet()); - ui.setMethodSet(origine.getMethodSet()); + //ui.setMethodGet(origine.getMethodGet()); + //ui.setMethodSet(origine.getMethodSet()); + ui.setBeanProperty(origine.getBeanProperty()); ui.setBean(entity); result = ui; } else if (component instanceof MatrixEditor) { @@ -321,12 +323,13 @@ InputOneEquationUI origine = (InputOneEquationUI) component; EquationContinuousPanelUI ui = new EquationContinuousPanelUI( new JAXXInitialContext().add(new InputAction())); - ui.setLblText(origine.getLblText()); - ui.setNameEquation(origine.getNameEquation()); + ui.setText(origine.getText()); + ui.setFormuleCategory(origine.getFormuleCategory()); ui.getEditor().getEditor().setText((String) factor.getValue()); ui.setClazz(origine.getClazz()); - ui.setMethodGet(origine.getMethodGet()); - ui.setMethodSet(origine.getMethodSet()); + //ui.setMethodGet(origine.getMethodGet()); + //ui.setMethodSet(origine.getMethodSet()); + ui.setBeanProperty(origine.getBeanProperty()); ui.setBean(origine.getBean()); EquationContinuousDomain equationDomain = (EquationContinuousDomain) domain; @@ -437,9 +440,11 @@ InputOneEquationUI origine = (InputOneEquationUI) component; InputOneEquationUI ui = new InputOneEquationUI(new JAXXInitialContext().add(new InputAction())); ui.getEditor().setText((String) value); - ui.setLblText(origine.getLblText()); - ui.setNameEquation(origine.getNameEquation()); + ui.setText(origine.getText()); + ui.setFormuleCategory(origine.getFormuleCategory()); ui.setClazz(origine.getClazz()); + /// ??? was not set before + ui.setBeanProperty(origine.getBeanProperty()); ui.setFormule((Formule) value); ui.setActif(true); ui.refresh(); @@ -702,14 +707,14 @@ * @param fieldName * @return method return value */ - protected static Object getMethodValue(TopiaEntity entity, String fieldName) { + protected static Object getMethodValue(Object entity, String fieldName) { Object result = null; try { // fieldName maybe be sometime lower case String getMethod = "get" + StringUtils.capitalize(fieldName); Method m = entity.getClass().getMethod(getMethod); - result = m.invoke(entity, (Object[]) null); + result = m.invoke(entity); } catch (Exception ex) { if (log.isErrorEnabled()) { log.error("Can't get entity value", ex); @@ -805,7 +810,8 @@ log.debug("Factor " + factor.getName() + " denoted entity " + entity); } - Method method = entity.getClass().getMethod("get" + property); + String getter = "get" + StringUtils.capitalize(property); + Method method = entity.getClass().getMethod(getter); typeClazz = method.getReturnType(); if (log.isDebugEnabled()) { @@ -856,4 +862,30 @@ return result; } + + /** + * Get editor for editing value. + * + * @param bean bean + * @param beanProperty bean property + * @return component + */ + public static JComponent getEditorForValue(Object bean, String beanProperty) { + Object basicType = getMethodValue(bean, beanProperty); + + JComponent component = null; + + if (basicType instanceof Equation) { + Equation basicEquation = (Equation)basicType; + InputOneEquationUI equationComponent = new InputOneEquationUI( + new JAXXInitialContext().add(new InputAction())); + equationComponent.setFormuleCategory(basicEquation.getCategory()); + equationComponent.setBean((TopiaEntity)bean); + equationComponent.setBeanProperty(beanProperty); + equationComponent.putClientProperty("method", beanProperty); + component = equationComponent; + } + + return component; + } } Modified: isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/EquationContinuousPanelUI.jaxx =================================================================== --- isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/EquationContinuousPanelUI.jaxx 2010-01-22 15:38:16 UTC (rev 2936) +++ isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/EquationContinuousPanelUI.jaxx 2010-01-22 15:39:11 UTC (rev 2937) @@ -1,6 +1,6 @@ <!-- /* *##% - * Copyright (C) 2005 - 2009 Ifremer, Code Lutin + * Copyright (C) 2005 - 2010 Ifremer, Code Lutin * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -19,17 +19,17 @@ --> <ContinuousPanelContainerUI> - <!-- bean property --> - <fr.ifremer.isisfish.entities.Formule id='formule' javaBean='null'/> - <String id='lblText' javaBean='null'/> + <String id='text' javaBean='null'/> <org.nuiton.topia.persistence.TopiaEntity id='bean' javaBean='null'/> + <String id='beanProperty' javaBean='null'/> + <!-- For editor doc purpose --> <Class id='clazz' javaBean='null'/> - <String id='methodGet' javaBean='null'/> - <String id='methodSet' javaBean='null'/> - <String id='nameEquation' javaBean='null'/> + <String id='formuleCategory' javaBean='null'/> <fr.ifremer.isisfish.entities.Equation id='selectedEquation' javaBean='null'/> + <!-- bean property --> + <fr.ifremer.isisfish.entities.Formule id='formule' javaBean='null'/> - <script><![CDATA[ + <script><![CDATA[ import javax.swing.table.AbstractTableModel; import javax.swing.table.DefaultTableModel; import fr.ifremer.isisfish.simulator.sensitivity.domain.EquationContinuousDomain; @@ -65,7 +65,7 @@ datas.add(domain); } -protected AbstractTableModel getTableModel(){ +protected AbstractTableModel getTableModel() { AbstractTableModel model = new AbstractTableModel() { @Override public int getRowCount() { @@ -168,7 +168,7 @@ Pattern p = Pattern.compile("(^.*\\s+" + variableName + "\\s*\\=\\s*)([\\d\\.]+).*\\;$"); Matcher matcher = p.matcher(line); if (matcher.find()) { - String fullVariableName = bean.toString() + "." + StringUtils.uncapitalize(methodGet) + "." + variableName; + String fullVariableName = bean.toString() + "." + StringUtils.uncapitalize(beanProperty) + "." + variableName; line = matcher.group(1) + "context.getValueAndCompute(\"" + fullVariableName + "\", " + matcher.group(2) + ");"; } result += line + "\n"; @@ -237,8 +237,7 @@ setTable(); } } - ]]> - </script> + ]]></script> <Table id='content' constraints='BorderLayout.CENTER'> <row> <cell fill='both' columns='2' weightx='1' weighty='0.5'> @@ -258,9 +257,9 @@ </row> <row> <cell fill='both' columns='2' weightx='1' weighty='0.5'> - <fr.ifremer.isisfish.ui.input.InputOneEquationUI id='editor' formule='{getFormule()}' lblText='{getLblText()}' - constructorParams='this' bean='{getBean()}' clazz='{getClazz()}' methodGet='{getMethodGet()}' actif='{isContinueSelected()}' - methodSet='{getMethodSet()}' nameEquation='{getNameEquation()}' selectedEquation='{getSelectedEquation()}' + <fr.ifremer.isisfish.ui.input.InputOneEquationUI id='editor' formule='{getFormule()}' text='{getText()}' + constructorParams='this' bean='{getBean()}' clazz='{getClazz()}' beanProperty='{getBeanProperty()}' actif='{isContinueSelected()}' + formuleCategory='{getFormuleCategory()}' selectedEquation='{getSelectedEquation()}' visible='{isContinuePossible()}' enabled='{isContinueSelected()}'/> </cell> </row> Modified: isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityAction.java =================================================================== --- isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityAction.java 2010-01-22 15:38:16 UTC (rev 2936) +++ isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityAction.java 2010-01-22 15:39:11 UTC (rev 2937) @@ -28,6 +28,8 @@ import java.util.List; import javax.swing.JComponent; import javax.swing.JOptionPane; + +import org.apache.commons.lang.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.math.matrix.MatrixND; @@ -65,9 +67,10 @@ EquationContinuousPanelUI equationPanel = (EquationContinuousPanelUI) panel; TopiaEntity bean = equationPanel.getBean(); - String methodSet = equationPanel.getMethodSet(); - Method m = bean.getClass().getMethod("set" + methodSet, - String.class); + //String methodSet = equationPanel.getMethodSet(); + String property = equationPanel.getBeanProperty(); + property = StringUtils.capitalize(property) + "Content"; + Method m = bean.getClass().getMethod("set" + property, String.class); m.invoke(bean, equationPanel.getEditor().getEditor().getText()); // Save equation Added: isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityTableModel.java =================================================================== --- isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityTableModel.java (rev 0) +++ isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityTableModel.java 2010-01-22 15:39:11 UTC (rev 2937) @@ -0,0 +1,52 @@ +/* *##% + * Copyright (C) 2010 Ifremer, Code Lutin, Chatellier Eric + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + *##%*/ + +package fr.ifremer.isisfish.ui.sensitivity; + +import javax.swing.table.TableModel; + +/** + * Sensitivity interface for {@link TableModel}. + * + * Used by {@link TableBlockingLayerUI} to known if event at mouse position + * is sensitivity enabled. + * + * @author chatellier + * @version $Revision$ + * + * Last update : $Date$ + * By : $Author$ + */ +public interface SensitivityTableModel { + + /** + * Get value at row. + * + * @param rowIndex row index + * @return value at row/column + */ + Object getBeanAtRow(int rowIndex); + + /** + * Get property name at column. + * + * @param column column + * @return property name at column (can be {@code null}) + */ + String getPropertyAtColumn(int column); +} \ No newline at end of file Property changes on: isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityTableModel.java ___________________________________________________________________ Added: svn:keywords + "Author Date Id Revision HeadURL" Modified: isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityUI.jaxx =================================================================== --- isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityUI.jaxx 2010-01-22 15:38:16 UTC (rev 2936) +++ isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/SensitivityUI.jaxx 2010-01-22 15:39:11 UTC (rev 2937) @@ -1,6 +1,6 @@ <!-- /* *##% - * Copyright (C) 2005 - 2009 Ifremer, Code Lutin + * Copyright (C) 2005 - 2010 Ifremer, Code Lutin * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License Added: isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/TableBlockingLayerUI.java =================================================================== --- isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/TableBlockingLayerUI.java (rev 0) +++ isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/TableBlockingLayerUI.java 2010-01-22 15:39:11 UTC (rev 2937) @@ -0,0 +1,149 @@ +/* *##% + * Copyright (C) 2010 Ifremer, Code Lutin, Chatellier Eric + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + *##%*/ + +package fr.ifremer.isisfish.ui.sensitivity; + +import java.awt.Cursor; +import java.awt.event.MouseEvent; + +import javax.swing.JComponent; +import javax.swing.JScrollBar; +import javax.swing.JTable; +import javax.swing.table.TableModel; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.jdesktop.jxlayer.JXLayer; +import org.jdesktop.jxlayer.plaf.AbstractLayerUI; +import org.jdesktop.jxlayer.plaf.LayerUI; +import org.nuiton.topia.persistence.TopiaEntity; + +import fr.ifremer.isisfish.ui.input.InputContentUI; + +/** + * A layer for factorizable entities properties in {@link JTable} component. + * + * This is a {@link LayerUI} that check if : + * <ul> + * <li>component is {@link JScrollBar} : clic allowed</li> + * <li>component is {@link JTable} and table model is {@link SensitivityTableModel} : do sensitivity stuff</li> + * </ul> + * + * Tree {@link MouseEvent}s are managed: + * <ul> + * <li>{@link MouseEvent#MOUSE_CLICKED} : display factor interface depending on sensitivity enabled table column</li> + * <li>{@link MouseEvent#MOUSE_MOVED} : change cursor depending on sensitivity enabled table column</li> + * <li>{@link MouseEvent#MOUSE_EXITED} : back to default cursor</li> + * </ul> + * + * @author chatellier + * @version $Revision$ + * + * Last update : $Date$ + * By : $Author$ + */ +public class TableBlockingLayerUI extends AbstractLayerUI<JComponent> { + + /** serialVersionUID. */ + private static final long serialVersionUID = 1877010363682882308L; + + /** Class logger. */ + private static Log log = LogFactory.getLog(TableBlockingLayerUI.class); + + /** Parent UI. */ + protected InputContentUI parent; + + /** + * Init layer with parent. + * + * @param parent parent + */ + public TableBlockingLayerUI(InputContentUI parent) { + this.parent = parent; + } + + /* + * @see org.jdesktop.jxlayer.plaf.AbstractLayerUI#processMouseEvent(java.awt.event.MouseEvent, org.jdesktop.jxlayer.JXLayer) + */ + @Override + protected void processMouseEvent(MouseEvent event, JXLayer</*? extends */JComponent> layer) { + + // scrollbar can be moved + if (!(event.getSource() instanceof JScrollBar)) { + event.consume(); + } + + if (event.getSource() instanceof JTable) { + + JTable tableSource = (JTable) event.getSource(); + TableModel model = tableSource.getModel(); + + if (model instanceof SensitivityTableModel) { + SensitivityTableModel sensitivityTableModel = (SensitivityTableModel) model; + + // mouse exit table + if (event.getID() == MouseEvent.MOUSE_EXITED) { + Cursor cursor = new Cursor(Cursor.DEFAULT_CURSOR); + tableSource.setCursor(cursor); + } else { + int rowIndex = tableSource.rowAtPoint(event.getPoint()); + int columnIndex = tableSource.columnAtPoint(event.getPoint()); + + if (rowIndex >= 0 && columnIndex >= 0) { + + // test if sensitivity property is enabled + SensitivityTableModel sensitivityModel = (SensitivityTableModel) model; + TopiaEntity value = (TopiaEntity) sensitivityTableModel.getBeanAtRow(rowIndex); + Class<? extends TopiaEntity> beanClass = value.getClass(); + String property = sensitivityModel.getPropertyAtColumn(columnIndex); + String sensitivityName = beanClass.getSimpleName().replaceFirst("Impl", "") + "." + property; + + if (SensitivityUtils.isSensitivityFactorEnabled(sensitivityName)) { + + // clic sur la table + if (event.getID() == MouseEvent.MOUSE_CLICKED) { + if (log.isDebugEnabled()) { + log.debug("Clic done on an enabled factor : " + sensitivityName); + } + + parent.displayFactorWizard(tableSource, beanClass, value.getTopiaId(), property); + } + + // mouse moved over table + else if (event.getID() == MouseEvent.MOUSE_MOVED) { + Cursor cursor = new Cursor(Cursor.CROSSHAIR_CURSOR); + tableSource.setCursor(cursor); + } + } else { + Cursor cursor = new Cursor(Cursor.DEFAULT_CURSOR); + tableSource.setCursor(cursor); + } + } + } + } + } + } + + /* + * @see org.jdesktop.jxlayer.plaf.AbstractLayerUI#processMouseMotionEvent(java.awt.event.MouseEvent, org.jdesktop.jxlayer.JXLayer) + */ + @Override + protected void processMouseMotionEvent(MouseEvent e, JXLayer<JComponent> l) { + processMouseEvent(e, l); + } +} \ No newline at end of file Property changes on: isis-fish/trunk/src/main/java/fr/ifremer/isisfish/ui/sensitivity/TableBlockingLayerUI.java ___________________________________________________________________ Added: svn:keywords + "Author Date Id Revision HeadURL"
participants (1)
-
chatellierï¼ users.labs.libre-entreprise.org