Jaxx-commits
Threads by month
- ----- 2026 -----
- June
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2006 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2005 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2004 -----
- December
- November
- October
- September
- August
July 2012
- 6 participants
- 101 discussions
30 Jul '12
Author: tchemit
Date: 2012-07-30 20:29:11 +0200 (Mon, 30 Jul 2012)
New Revision: 2452
Url: http://nuiton.org/repositories/revision/jaxx/2452
Log:
2214: Add method in SwingUtil to auto-select a cell content in a table when the cell is selected
Modified:
trunk/jaxx-runtime/src/main/java/jaxx/runtime/SwingUtil.java
Modified: trunk/jaxx-runtime/src/main/java/jaxx/runtime/SwingUtil.java
===================================================================
--- trunk/jaxx-runtime/src/main/java/jaxx/runtime/SwingUtil.java 2012-07-30 17:34:31 UTC (rev 2451)
+++ trunk/jaxx-runtime/src/main/java/jaxx/runtime/SwingUtil.java 2012-07-30 18:29:11 UTC (rev 2452)
@@ -50,10 +50,13 @@
import javax.swing.JTabbedPane;
import javax.swing.JTable;
import javax.swing.JTree;
+import javax.swing.ListSelectionModel;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.event.HyperlinkEvent;
+import javax.swing.event.ListSelectionEvent;
+import javax.swing.event.ListSelectionListener;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.table.DefaultTableCellRenderer;
@@ -1296,4 +1299,42 @@
+ (model.getColumnCount() - 1) + "]");
}
}
+
+ /**
+ * Add to a given table a selec tion model listener to always scroll to
+ * current cell selection.
+ *
+ * @param table the table
+ * @since 2.5.3
+ */
+ public static void scrollToTableSelection(final JTable table) {
+
+ table.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
+ @Override
+ public void valueChanged(ListSelectionEvent e) {
+ ListSelectionModel listSelectionModel =
+ (ListSelectionModel) e.getSource();
+ int firstIndex = e.getFirstIndex();
+ int lastIndex = e.getLastIndex();
+ Integer newSelectedRow = null;
+
+ if (listSelectionModel.isSelectionEmpty()) {
+
+ // no selection
+ } else if (listSelectionModel.isSelectedIndex(firstIndex)) {
+
+ // use first index
+ newSelectedRow = firstIndex;
+ } else if (listSelectionModel.isSelectedIndex(lastIndex)) {
+
+ // use last index
+ newSelectedRow = lastIndex;
+ }
+ if (newSelectedRow != null) {
+ Rectangle rect = table.getCellRect(newSelectedRow, 0, true);
+ table.scrollRectToVisible(rect);
+ }
+ }
+ });
+ }
}
1
0
r2451 - trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/config
by tchemit@users.nuiton.org 30 Jul '12
by tchemit@users.nuiton.org 30 Jul '12
30 Jul '12
Author: tchemit
Date: 2012-07-30 19:34:31 +0200 (Mon, 30 Jul 2012)
New Revision: 2451
Url: http://nuiton.org/repositories/revision/jaxx/2451
Log:
fixes #2213: NPE when no file selected within the FileCellEditor
Modified:
trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/config/ConfigTableEditor.java
Modified: trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/config/ConfigTableEditor.java
===================================================================
--- trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/config/ConfigTableEditor.java 2012-07-30 13:47:18 UTC (rev 2450)
+++ trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/config/ConfigTableEditor.java 2012-07-30 17:34:31 UTC (rev 2451)
@@ -26,15 +26,6 @@
package jaxx.runtime.swing.editor.config;
import com.google.common.io.Files;
-import java.awt.Component;
-import java.io.File;
-import java.util.EventObject;
-import java.util.Locale;
-import javax.swing.DefaultCellEditor;
-import javax.swing.JTable;
-import javax.swing.KeyStroke;
-import javax.swing.event.CellEditorListener;
-import javax.swing.table.TableCellEditor;
import jaxx.runtime.swing.JAXXWidgetUtil;
import jaxx.runtime.swing.editor.ClassCellEditor;
import jaxx.runtime.swing.editor.EnumEditor;
@@ -44,6 +35,16 @@
import jaxx.runtime.swing.editor.config.model.OptionModel;
import org.apache.commons.lang3.StringUtils;
+import javax.swing.DefaultCellEditor;
+import javax.swing.JTable;
+import javax.swing.KeyStroke;
+import javax.swing.event.CellEditorListener;
+import javax.swing.table.TableCellEditor;
+import java.awt.Component;
+import java.io.File;
+import java.util.EventObject;
+import java.util.Locale;
+
/**
* L'éditeur des valeurs des propriétés d'une configuration
*
@@ -146,7 +147,7 @@
@Override
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
- String fileExtension = Files.getFileExtension(((File)value).getName());
+ String fileExtension = value == null ? null : Files.getFileExtension(((File) value).getName());
if (StringUtils.isNotEmpty(fileExtension)) {
fileEditor.setExts(fileExtension);
fileEditor.setAcceptAllFileFilterUsed(true);
1
0
r2450 - trunk/jaxx-validator/src/main/java/jaxx/runtime/validator/swing
by tchemit@users.nuiton.org 30 Jul '12
by tchemit@users.nuiton.org 30 Jul '12
30 Jul '12
Author: tchemit
Date: 2012-07-30 15:47:18 +0200 (Mon, 30 Jul 2012)
New Revision: 2450
Url: http://nuiton.org/repositories/revision/jaxx/2450
Log:
improve hightlight api
Modified:
trunk/jaxx-validator/src/main/java/jaxx/runtime/validator/swing/SwingListValidatorHighlightPredicate.java
trunk/jaxx-validator/src/main/java/jaxx/runtime/validator/swing/SwingValidatorUtil.java
Modified: trunk/jaxx-validator/src/main/java/jaxx/runtime/validator/swing/SwingListValidatorHighlightPredicate.java
===================================================================
--- trunk/jaxx-validator/src/main/java/jaxx/runtime/validator/swing/SwingListValidatorHighlightPredicate.java 2012-07-30 11:07:06 UTC (rev 2449)
+++ trunk/jaxx-validator/src/main/java/jaxx/runtime/validator/swing/SwingListValidatorHighlightPredicate.java 2012-07-30 13:47:18 UTC (rev 2450)
@@ -107,8 +107,12 @@
int rowIndex = adapter.convertRowIndexToModel(adapter.row);
JTable component = (JTable) adapter.getComponent();
O bean = dataLocator.locateBean(component.getModel(), rowIndex);
- BeanListValidator.NuitonValidatorContext<O> context = validator.getContext(bean);
- NuitonValidatorScope highestScope = context.getHighestScope(fieldName);
- return scope == highestScope;
+ boolean result = false;
+ if (bean != null && dataLocator.acceptType(bean.getClass())) {
+ BeanListValidator.NuitonValidatorContext<O> context = validator.getContext(bean);
+ NuitonValidatorScope highestScope = context.getHighestScope(fieldName);
+ result = scope == highestScope;
+ }
+ return result;
}
}
Modified: trunk/jaxx-validator/src/main/java/jaxx/runtime/validator/swing/SwingValidatorUtil.java
===================================================================
--- trunk/jaxx-validator/src/main/java/jaxx/runtime/validator/swing/SwingValidatorUtil.java 2012-07-30 11:07:06 UTC (rev 2449)
+++ trunk/jaxx-validator/src/main/java/jaxx/runtime/validator/swing/SwingValidatorUtil.java 2012-07-30 13:47:18 UTC (rev 2450)
@@ -24,7 +24,6 @@
*/
package jaxx.runtime.validator.swing;
-import com.google.common.collect.Sets;
import jaxx.runtime.JAXXObject;
import jaxx.runtime.JAXXValidator;
import jaxx.runtime.SwingUtil;
@@ -34,7 +33,6 @@
import org.apache.commons.logging.LogFactory;
import org.jdesktop.swingx.JXTable;
import org.jdesktop.swingx.decorator.ColorHighlighter;
-import org.jdesktop.swingx.decorator.Highlighter;
import org.nuiton.util.ReflectUtil;
import org.nuiton.validator.NuitonValidatorScope;
import org.nuiton.validator.bean.BeanValidatorUtil;
@@ -59,7 +57,6 @@
import java.util.HashMap;
import java.util.List;
import java.util.Map;
-import java.util.Set;
import static org.nuiton.i18n.I18n.n_;
@@ -359,7 +356,6 @@
SwingListValidatorDataLocator<O> dataLocator,
NuitonValidatorScope... scopes) {
- Set<ColorHighlighter> highlighters = Sets.newHashSet();
for (NuitonValidatorScope scope : scopes) {
SwingListValidatorHighlightPredicate<O> predicate = SwingListValidatorHighlightPredicate.newPredicate(
@@ -369,11 +365,8 @@
ColorHighlighter highlighter = new ColorHighlighter(predicate);
highlighter.setBackground(SwingValidatorUtil.getColor(scope));
- highlighters.add(highlighter);
+ editor.addHighlighter(highlighter);
}
-
- editor.setHighlighters(
- highlighters.toArray(new Highlighter[highlighters.size()]));
}
/**
1
0
r2449 - in trunk: jaxx-demo/src/main/java/jaxx/demo/feature/validation/list jaxx-validator/src/main/java/jaxx/runtime/validator/swing
by tchemit@users.nuiton.org 30 Jul '12
by tchemit@users.nuiton.org 30 Jul '12
30 Jul '12
Author: tchemit
Date: 2012-07-30 13:07:06 +0200 (Mon, 30 Jul 2012)
New Revision: 2449
Url: http://nuiton.org/repositories/revision/jaxx/2449
Log:
improve BeanListValidator stuff
Modified:
trunk/jaxx-demo/src/main/java/jaxx/demo/feature/validation/list/ListBeanValidationDemoHandler.java
trunk/jaxx-validator/src/main/java/jaxx/runtime/validator/swing/SwingListValidatorDataLocator.java
trunk/jaxx-validator/src/main/java/jaxx/runtime/validator/swing/SwingListValidatorMessageTableMouseListener.java
trunk/jaxx-validator/src/main/java/jaxx/runtime/validator/swing/SwingListValidatorTableEditorModelListener.java
trunk/jaxx-validator/src/main/java/jaxx/runtime/validator/swing/SwingValidatorUtil.java
Modified: trunk/jaxx-demo/src/main/java/jaxx/demo/feature/validation/list/ListBeanValidationDemoHandler.java
===================================================================
--- trunk/jaxx-demo/src/main/java/jaxx/demo/feature/validation/list/ListBeanValidationDemoHandler.java 2012-07-30 08:04:01 UTC (rev 2448)
+++ trunk/jaxx-demo/src/main/java/jaxx/demo/feature/validation/list/ListBeanValidationDemoHandler.java 2012-07-30 11:07:06 UTC (rev 2449)
@@ -58,29 +58,34 @@
// register validator
BeanListValidator<People> validator = ui.getValidator();
- ui.getErrorTableModel().registerValidator(validator);
// customize error table
JTable errorTable = ui.getErrorTable();
- IdentityValidatorDataLocator dataLocator = new IdentityValidatorDataLocator();
+ PeopleValidatorDataLocator dataLocator = new PeopleValidatorDataLocator();
- SwingValidatorUtil.installUI(
- validator, dataTable, errorTable, dataLocator,
- new SwingListValidatorMessageTableRenderer() {
+ SwingValidatorUtil.installUI(errorTable,
+ new SwingListValidatorMessageTableRenderer() {
- private static final long serialVersionUID = 1L;
+ private static final long serialVersionUID = 1L;
- Decorator<People> decorator
- = new DemoDecoratorProvider().getDecoratorByType(People.class);
+ Decorator<People> decorator
+ = new DemoDecoratorProvider().getDecoratorByType(People.class);
- @Override
- protected String decorateBean(Object bean) {
- return decorator.toString(bean);
- }
- });
+ @Override
+ protected String decorateBean(Object bean) {
+ return decorator.toString(bean);
+ }
+ });
+ SwingValidatorUtil.registerListValidator(
+ validator,
+ ui.getErrorTableModel(),
+ dataTable,
+ errorTable,
+ dataLocator);
+
SwingValidatorUtil.addHightLighterOnEditor(
validator, dataTable, dataLocator,
NuitonValidatorScope.ERROR,
@@ -121,9 +126,14 @@
ui.getOk().setEnabled(valid);
}
- private static class IdentityValidatorDataLocator implements SwingListValidatorDataLocator<People> {
+ private static class PeopleValidatorDataLocator implements SwingListValidatorDataLocator<People> {
@Override
+ public boolean acceptType(Class<?> beanType) {
+ return People.class.isAssignableFrom(beanType);
+ }
+
+ @Override
public Pair<Integer, Integer> locateDataCell(TableModel tableModel,
People bean,
String fieldName) {
Modified: trunk/jaxx-validator/src/main/java/jaxx/runtime/validator/swing/SwingListValidatorDataLocator.java
===================================================================
--- trunk/jaxx-validator/src/main/java/jaxx/runtime/validator/swing/SwingListValidatorDataLocator.java 2012-07-30 08:04:01 UTC (rev 2448)
+++ trunk/jaxx-validator/src/main/java/jaxx/runtime/validator/swing/SwingListValidatorDataLocator.java 2012-07-30 11:07:06 UTC (rev 2449)
@@ -14,6 +14,17 @@
public interface SwingListValidatorDataLocator<O> {
/**
+ * Tests if the given type can be managed by this locator.
+ * <p/>
+ * Useful if there is more than one locator used for a same list
+ * validation table model.
+ *
+ * @param beanType the type of bean to test
+ * @return {@code true} if this locator can manage this bean type.
+ */
+ boolean acceptType(Class<?> beanType);
+
+ /**
* Locate the cell of the given data.
*
* @param tableModel the table model where data are edited
@@ -21,7 +32,9 @@
* @param fieldName the field to locate
* @return the cell where to find data
*/
- Pair<Integer, Integer> locateDataCell(TableModel tableModel, O bean, String fieldName);
+ Pair<Integer, Integer> locateDataCell(TableModel tableModel,
+ O bean,
+ String fieldName);
/**
* Locate the index of the row of the given bean.
Modified: trunk/jaxx-validator/src/main/java/jaxx/runtime/validator/swing/SwingListValidatorMessageTableMouseListener.java
===================================================================
--- trunk/jaxx-validator/src/main/java/jaxx/runtime/validator/swing/SwingListValidatorMessageTableMouseListener.java 2012-07-30 08:04:01 UTC (rev 2448)
+++ trunk/jaxx-validator/src/main/java/jaxx/runtime/validator/swing/SwingListValidatorMessageTableMouseListener.java 2012-07-30 11:07:06 UTC (rev 2449)
@@ -66,12 +66,16 @@
return;
}
- Pair<Integer, Integer> cell = dataLocator.locateDataCell(
- editor.getModel(),
- entry.getBean(),
- entry.getField());
+ if (dataLocator.acceptType(entry.getBean().getClass())) {
- SwingUtil.editCell(editor, cell.getLeft(), cell.getRight());
+ Pair<Integer, Integer> cell = dataLocator.locateDataCell(
+ editor.getModel(),
+ entry.getBean(),
+ entry.getField());
+
+ SwingUtil.editCell(editor, cell.getLeft(), cell.getRight());
+ }
+
}
}
Modified: trunk/jaxx-validator/src/main/java/jaxx/runtime/validator/swing/SwingListValidatorTableEditorModelListener.java
===================================================================
--- trunk/jaxx-validator/src/main/java/jaxx/runtime/validator/swing/SwingListValidatorTableEditorModelListener.java 2012-07-30 08:04:01 UTC (rev 2448)
+++ trunk/jaxx-validator/src/main/java/jaxx/runtime/validator/swing/SwingListValidatorTableEditorModelListener.java 2012-07-30 11:07:06 UTC (rev 2449)
@@ -27,8 +27,9 @@
private BeanListValidator<O> validator;
- public SwingListValidatorTableEditorModelListener(BeanListValidator<O> validator,
- SwingListValidatorDataLocator<O> dataLocator) {
+ public SwingListValidatorTableEditorModelListener(
+ BeanListValidator<O> validator,
+ SwingListValidatorDataLocator<O> dataLocator) {
this.dataLocator = dataLocator;
this.validator = validator;
}
Modified: trunk/jaxx-validator/src/main/java/jaxx/runtime/validator/swing/SwingValidatorUtil.java
===================================================================
--- trunk/jaxx-validator/src/main/java/jaxx/runtime/validator/swing/SwingValidatorUtil.java 2012-07-30 08:04:01 UTC (rev 2448)
+++ trunk/jaxx-validator/src/main/java/jaxx/runtime/validator/swing/SwingValidatorUtil.java 2012-07-30 11:07:06 UTC (rev 2449)
@@ -295,10 +295,7 @@
* @param render renderer to use
* @since 2.5.3
*/
- public static <O> void installUI(BeanListValidator<O> validator,
- JTable dataTable,
- JTable errorTable,
- SwingListValidatorDataLocator<O> dataLocator,
+ public static void installUI(JTable errorTable,
SwingListValidatorMessageTableRenderer render) {
errorTable.setDefaultRenderer(Object.class, render);
@@ -316,6 +313,26 @@
n_("validator.message.header.tip"));
SwingUtil.fixTableColumnWidth(errorTable, 0, 25);
+ }
+
+ /**
+ * Prepare the ui where to display the validators messages.
+ *
+ *
+ * @param errorTableModel
+ * @param errorTable the table where to display validators messages
+ * @since 2.5.3
+ */
+ public static <O> void registerListValidator(BeanListValidator<O> validator,
+ SwingListValidatorMessageTableModel errorTableModel,
+ JTable dataTable,
+ JTable errorTable,
+ SwingListValidatorDataLocator<O> dataLocator) {
+
+ // register the validator to the error table model
+ errorTableModel.registerValidator(validator);
+
+
// add click listener to go to cell
errorTable.addMouseListener(new SwingListValidatorMessageTableMouseListener(
dataTable,
1
0
r2448 - in trunk/jaxx-demo/src/main/java/jaxx/demo: . feature/validation/list feature/validation/simple
by tchemit@users.nuiton.org 30 Jul '12
by tchemit@users.nuiton.org 30 Jul '12
30 Jul '12
Author: tchemit
Date: 2012-07-30 10:04:01 +0200 (Mon, 30 Jul 2012)
New Revision: 2448
Url: http://nuiton.org/repositories/revision/jaxx/2448
Log:
fix source loading when coming from a different package
Modified:
trunk/jaxx-demo/src/main/java/jaxx/demo/DemoSourcesHandler.java
trunk/jaxx-demo/src/main/java/jaxx/demo/feature/validation/list/ListBeanValidationDemo.jaxx
trunk/jaxx-demo/src/main/java/jaxx/demo/feature/validation/simple/SimpleBeanValidationByListDemo.jaxx
trunk/jaxx-demo/src/main/java/jaxx/demo/feature/validation/simple/SimpleBeanValidationByTableDemo.jaxx
Modified: trunk/jaxx-demo/src/main/java/jaxx/demo/DemoSourcesHandler.java
===================================================================
--- trunk/jaxx-demo/src/main/java/jaxx/demo/DemoSourcesHandler.java 2012-07-30 07:30:24 UTC (rev 2447)
+++ trunk/jaxx-demo/src/main/java/jaxx/demo/DemoSourcesHandler.java 2012-07-30 08:04:01 UTC (rev 2448)
@@ -68,7 +68,9 @@
if (log.isDebugEnabled()) {
log.debug(name + " from " + ui.getIncomingClass());
}
- String path = name.substring(ui.getIncomingClass().getPackage().getName().length() + 1);
+ int lastDotIndex = name.lastIndexOf(".");
+ String path = "/"+ name.substring(0, lastDotIndex).replaceAll("\\.", "/");
+ path += name.substring(lastDotIndex);
result = IOUtils.toString(ui.getIncomingClass().getResourceAsStream(path));
if (log.isDebugEnabled()) {
log.debug("source [" + name + "], loaded content =\n" + result);
@@ -112,7 +114,12 @@
String prefix = ui.getIncomingClass() == null ? "" :
ui.getIncomingClass().getPackage().getName() + ".";
for (String source : sources) {
- String path = prefix + source;
+ String path;
+ if (source.startsWith("/")) {
+ path = source.substring(1);
+ } else {
+ path = prefix + source;
+ }
if (log.isDebugEnabled()) {
log.debug("adding resource " + path);
}
Modified: trunk/jaxx-demo/src/main/java/jaxx/demo/feature/validation/list/ListBeanValidationDemo.jaxx
===================================================================
--- trunk/jaxx-demo/src/main/java/jaxx/demo/feature/validation/list/ListBeanValidationDemo.jaxx 2012-07-30 07:30:24 UTC (rev 2447)
+++ trunk/jaxx-demo/src/main/java/jaxx/demo/feature/validation/list/ListBeanValidationDemo.jaxx 2012-07-30 08:04:01 UTC (rev 2448)
@@ -44,8 +44,12 @@
@Override
protected String[] getSources() {
return new String[]{ getDefaultSource(), "ListBeanValidationDemo.css",
- "People.java", "People-error-validation.xml", "People-info-validation.xml", "People-warning-validation.xml",
- "ListBeanValidationDemoHandler.java", "PeopleTableModel.java"
+ "/jaxx.demo.entities.People.java",
+ "/jaxx.demo.entities.People-error-validation.xml",
+ "/jaxx.demo.entities.People-info-validation.xml",
+ "/jaxx.demo.entities.People-warning-validation.xml",
+ "ListBeanValidationDemoHandler.java",
+ "PeopleTableModel.java"
};
}
]]></script>
Modified: trunk/jaxx-demo/src/main/java/jaxx/demo/feature/validation/simple/SimpleBeanValidationByListDemo.jaxx
===================================================================
--- trunk/jaxx-demo/src/main/java/jaxx/demo/feature/validation/simple/SimpleBeanValidationByListDemo.jaxx 2012-07-30 07:30:24 UTC (rev 2447)
+++ trunk/jaxx-demo/src/main/java/jaxx/demo/feature/validation/simple/SimpleBeanValidationByListDemo.jaxx 2012-07-30 08:04:01 UTC (rev 2448)
@@ -45,8 +45,14 @@
@Override
protected String[] getSources() {
return new String[]{ getDefaultSource(), "Validation.css",
- "Identity.java", "Identity-error-validation.xml", "Identity-info-validation.xml", "Identity-warning-validation.xml",
- "Model.java", "Model-error-validation.xml", "Model-info-validation.xml", "Model-warning-validation.xml"
+ "/jaxx.demo.entities.Identity.java",
+ "/jaxx.demo.entities.Identity-error-validation.xml",
+ "/jaxx.demo.entities.Identity-info-validation.xml",
+ "/jaxx.demo.entities.Identity-warning-validation.xml",
+ "/jaxx.demo.entities.Model.java",
+ "/jaxx.demo.entities.Model-error-validation.xml",
+ "/jaxx.demo.entities.Model-info-validation.xml",
+ "/jaxx.demo.entities.Model-warning-validation.xml"
};
}
]]>
Modified: trunk/jaxx-demo/src/main/java/jaxx/demo/feature/validation/simple/SimpleBeanValidationByTableDemo.jaxx
===================================================================
--- trunk/jaxx-demo/src/main/java/jaxx/demo/feature/validation/simple/SimpleBeanValidationByTableDemo.jaxx 2012-07-30 07:30:24 UTC (rev 2447)
+++ trunk/jaxx-demo/src/main/java/jaxx/demo/feature/validation/simple/SimpleBeanValidationByTableDemo.jaxx 2012-07-30 08:04:01 UTC (rev 2448)
@@ -46,8 +46,14 @@
@Override
protected String[] getSources() {
return new String[]{ getDefaultSource(), "Validation.css",
- "Identity.java", "Identity-error-validation.xml", "Identity-info-validation.xml", "Identity-warning-validation.xml",
- "Model.java", "Model-error-validation.xml", "Model-info-validation.xml", "Model-warning-validation.xml"
+ "/jaxx.demo.entities.Identity.java",
+ "/jaxx.demo.entities.Identity-error-validation.xml",
+ "/jaxx.demo.entities.Identity-info-validation.xml",
+ "/jaxx.demo.entities.Identity-warning-validation.xml",
+ "/jaxx.demo.entities.Model.java",
+ "/jaxx.demo.entities.Model-error-validation.xml",
+ "/jaxx.demo.entities.Model-info-validation.xml",
+ "/jaxx.demo.entities.Model-warning-validation.xml"
};
}
]]></script>
1
0
r2447 - in trunk: jaxx-demo/src/main/java/jaxx/demo/feature/validation/list jaxx-validator jaxx-validator/src/main/java/jaxx/runtime/validator/swing
by tchemit@users.nuiton.org 30 Jul '12
by tchemit@users.nuiton.org 30 Jul '12
30 Jul '12
Author: tchemit
Date: 2012-07-30 09:30:24 +0200 (Mon, 30 Jul 2012)
New Revision: 2447
Url: http://nuiton.org/repositories/revision/jaxx/2447
Log:
add some ui stuff for BeanListValidator and test it jaxx-demo
Added:
trunk/jaxx-validator/src/main/java/jaxx/runtime/validator/swing/SwingListValidatorHighlightPredicate.java
Modified:
trunk/jaxx-demo/src/main/java/jaxx/demo/feature/validation/list/ListBeanValidationDemo.jaxx
trunk/jaxx-demo/src/main/java/jaxx/demo/feature/validation/list/ListBeanValidationDemoHandler.java
trunk/jaxx-demo/src/main/java/jaxx/demo/feature/validation/list/PeopleTableModel.java
trunk/jaxx-validator/pom.xml
trunk/jaxx-validator/src/main/java/jaxx/runtime/validator/swing/SwingValidatorUtil.java
Modified: trunk/jaxx-demo/src/main/java/jaxx/demo/feature/validation/list/ListBeanValidationDemo.jaxx
===================================================================
--- trunk/jaxx-demo/src/main/java/jaxx/demo/feature/validation/list/ListBeanValidationDemo.jaxx 2012-07-27 14:44:28 UTC (rev 2446)
+++ trunk/jaxx-demo/src/main/java/jaxx/demo/feature/validation/list/ListBeanValidationDemo.jaxx 2012-07-30 07:30:24 UTC (rev 2447)
@@ -26,6 +26,7 @@
<jaxx.demo.DemoPanel layout='{new BorderLayout()}'>
<import>
+ org.jdesktop.swingx.JXTable
javax.swing.JOptionPane
static org.nuiton.i18n.I18n.n_
jaxx.demo.entities.People
@@ -69,7 +70,7 @@
<JPanel border='{BorderFactory.createTitledBorder("Form")}'
layout='{new GridLayout()}' width='250' height='120'>
<JScrollPane id='dataTableScrollePane' constraints='BorderLayout.CENTER'>
- <JTable id='dataTable' model='{model}' autoCreateRowSorter='true'/>
+ <JXTable id='dataTable' model='{model}' autoCreateRowSorter='true'/>
</JScrollPane>
</JPanel>
</cell>
@@ -78,9 +79,9 @@
<cell fill="both">
<JPanel layout='{new GridLayout(1,3,0,0)}'>
<JButton id='addIdentity' text='jaxx.demo.action.add'
- onActionPerformed='handler.addIdentity()'/>
+ onActionPerformed='handler.addPeople()'/>
<JButton id='removeIdentity' text='jaxx.demo.action.remove'
- onActionPerformed='handler.removeIdentity()'/>
+ onActionPerformed='handler.removePeople()'/>
<JButton id='ok' text='jaxx.demo.action.ok'
onActionPerformed='JOptionPane.showMessageDialog(this, ok.getText() + " clicked!", "onActionPerformed", JOptionPane.INFORMATION_MESSAGE);'/>
Modified: trunk/jaxx-demo/src/main/java/jaxx/demo/feature/validation/list/ListBeanValidationDemoHandler.java
===================================================================
--- trunk/jaxx-demo/src/main/java/jaxx/demo/feature/validation/list/ListBeanValidationDemoHandler.java 2012-07-27 14:44:28 UTC (rev 2446)
+++ trunk/jaxx-demo/src/main/java/jaxx/demo/feature/validation/list/ListBeanValidationDemoHandler.java 2012-07-30 07:30:24 UTC (rev 2447)
@@ -4,15 +4,12 @@
import jaxx.demo.entities.People;
import jaxx.runtime.SwingUtil;
import jaxx.runtime.validator.swing.SwingListValidatorDataLocator;
-import jaxx.runtime.validator.swing.SwingListValidatorMessageTableModel;
-import jaxx.runtime.validator.swing.SwingListValidatorMessageTableMouseListener;
import jaxx.runtime.validator.swing.SwingListValidatorMessageTableRenderer;
-import jaxx.runtime.validator.swing.SwingListValidatorTableEditorModelListener;
import jaxx.runtime.validator.swing.SwingValidatorUtil;
import org.apache.commons.lang3.tuple.Pair;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.jdesktop.swingx.JXTable;
import org.nuiton.util.decorator.Decorator;
+import org.nuiton.validator.NuitonValidatorScope;
import org.nuiton.validator.bean.list.BeanListValidator;
import javax.swing.JTable;
@@ -32,10 +29,6 @@
*/
public class ListBeanValidationDemoHandler {
- /** Logger. */
- private static final Log log =
- LogFactory.getLog(ListBeanValidationDemoHandler.class);
-
private final ListBeanValidationDemo ui;
public ListBeanValidationDemoHandler(ListBeanValidationDemo ui) {
@@ -46,7 +39,7 @@
// customize data table
- JTable dataTable = ui.getDataTable();
+ JXTable dataTable = ui.getDataTable();
dataTable.getRowSorter().setSortKeys(
Arrays.asList(new RowSorter.SortKey(0, SortOrder.ASCENDING)));
@@ -64,55 +57,65 @@
SwingUtil.fixTableColumnWidth(dataTable, 3, 35);
// register validator
- ui.getErrorTableModel().registerValidator(ui.getValidator());
+ BeanListValidator<People> validator = ui.getValidator();
+ ui.getErrorTableModel().registerValidator(validator);
// customize error table
JTable errorTable = ui.getErrorTable();
- SwingValidatorUtil.installUI(errorTable, new SwingListValidatorMessageTableRenderer() {
+ IdentityValidatorDataLocator dataLocator = new IdentityValidatorDataLocator();
- private static final long serialVersionUID = 1L;
+ SwingValidatorUtil.installUI(
+ validator, dataTable, errorTable, dataLocator,
+ new SwingListValidatorMessageTableRenderer() {
- Decorator<People> decorator
- = new DemoDecoratorProvider().getDecoratorByType(People.class);
+ private static final long serialVersionUID = 1L;
- @Override
- protected String decorateBean(Object bean) {
- return decorator.toString(bean);
- }
- });
+ Decorator<People> decorator
+ = new DemoDecoratorProvider().getDecoratorByType(People.class);
- IdentityValidatorDataLocator dataLocator = new IdentityValidatorDataLocator();
+ @Override
+ protected String decorateBean(Object bean) {
+ return decorator.toString(bean);
+ }
+ });
- // add click listener to go to cell
- errorTable.addMouseListener(new SwingListValidatorMessageTableMouseListener(
- dataTable,
- dataLocator
- ));
+ SwingValidatorUtil.addHightLighterOnEditor(
+ validator, dataTable, dataLocator,
+ NuitonValidatorScope.ERROR,
+ NuitonValidatorScope.WARNING);
- ui.getModel().addTableModelListener(
- new SwingListValidatorTableEditorModelListener<People>(ui.getValidator(), dataLocator));
+ // add some datas in model
+
+ People a = new People("0", "Jack", "Black", 12, "/jaxx/demo/images/jack.jpg");
+ People a2 = new People("1", "Héctor", "Jiménez", 28, "/jaxx/demo/images/hector.jpg");
+ People a3 = new People("2", "Ana", "de la Reguera", 34, "/jaxx/demo/images/ana.jpg");
+
+ addPeople(a);
+ addPeople(a2);
+ addPeople(a3);
}
- public void addIdentity() {
-
+ public void addPeople() {
People bean = new People();
bean.setId(UUID.randomUUID().toString());
+ addPeople(bean);
+ }
+
+ public void addPeople(People bean) {
PeopleTableModel model = ui.getModel();
model.addBean(bean);
-
}
- public void removeIdentity() {
+ public void removePeople() {
int selectedRow = ui.getDataTable().getSelectedRow();
PeopleTableModel model = ui.getModel();
model.removeBean(selectedRow);
}
public void updateOkEnabled() {
- SwingListValidatorMessageTableModel model = ui.getErrorTableModel();
BeanListValidator<People> validator = ui.getValidator();
boolean valid = !validator.hasErrors();
ui.getOk().setEnabled(valid);
@@ -127,7 +130,7 @@
PeopleTableModel model = (PeopleTableModel) tableModel;
Pair<Integer, Integer> cell =
- model.getCell((People) bean, fieldName);
+ model.getCell(bean, fieldName);
return cell;
}
Modified: trunk/jaxx-demo/src/main/java/jaxx/demo/feature/validation/list/PeopleTableModel.java
===================================================================
--- trunk/jaxx-demo/src/main/java/jaxx/demo/feature/validation/list/PeopleTableModel.java 2012-07-27 14:44:28 UTC (rev 2446)
+++ trunk/jaxx-demo/src/main/java/jaxx/demo/feature/validation/list/PeopleTableModel.java 2012-07-30 07:30:24 UTC (rev 2447)
@@ -37,6 +37,12 @@
}
@Override
+ public String getColumnName(int column) {
+ SwingUtil.ensureColumnIndex(this, column);
+ return columnNames.get(column);
+ }
+
+ @Override
public int getColumnCount() {
return columnNames.size();
}
Modified: trunk/jaxx-validator/pom.xml
===================================================================
--- trunk/jaxx-validator/pom.xml 2012-07-27 14:44:28 UTC (rev 2446)
+++ trunk/jaxx-validator/pom.xml 2012-07-30 07:30:24 UTC (rev 2447)
@@ -82,6 +82,11 @@
</dependency>
<dependency>
+ <groupId>org.swinglabs.swingx</groupId>
+ <artifactId>swingx-core</artifactId>
+ </dependency>
+
+ <dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<scope>test</scope>
Added: trunk/jaxx-validator/src/main/java/jaxx/runtime/validator/swing/SwingListValidatorHighlightPredicate.java
===================================================================
--- trunk/jaxx-validator/src/main/java/jaxx/runtime/validator/swing/SwingListValidatorHighlightPredicate.java (rev 0)
+++ trunk/jaxx-validator/src/main/java/jaxx/runtime/validator/swing/SwingListValidatorHighlightPredicate.java 2012-07-30 07:30:24 UTC (rev 2447)
@@ -0,0 +1,114 @@
+package jaxx.runtime.validator.swing;
+
+import org.jdesktop.swingx.decorator.ComponentAdapter;
+import org.jdesktop.swingx.decorator.HighlightPredicate;
+import org.nuiton.validator.NuitonValidatorScope;
+import org.nuiton.validator.bean.list.BeanListValidator;
+
+import javax.swing.JTable;
+import java.awt.Component;
+
+/**
+ * HighLight predicates for a table editor using {@link BeanListValidator} of
+ * his data.
+ *
+ * @author tchemit <chemit(a)codelutin.com>
+ * @since 2.5.3
+ */
+public class SwingListValidatorHighlightPredicate<O> implements HighlightPredicate {
+
+ /**
+ * Filtering scope.
+ *
+ * @since 2.5.3
+ */
+ protected final NuitonValidatorScope scope;
+
+ /**
+ * Validator (contains data).
+ *
+ * @since 2.5.3
+ */
+ protected final BeanListValidator<O> validator;
+
+ /**
+ * Data locator to find back data in editor.
+ *
+ * @since 2.5.3
+ */
+ protected final SwingListValidatorDataLocator<O> dataLocator;
+
+ public static <O> SwingListValidatorHighlightPredicate<O> newFatalPredicate(
+ BeanListValidator<O> validator,
+ SwingListValidatorDataLocator<O> dataLocator) {
+ return newPredicate(
+ NuitonValidatorScope.FATAL,
+ validator,
+ dataLocator
+ );
+ }
+
+ public static <O> SwingListValidatorHighlightPredicate<O> newErrorPredicate(
+ BeanListValidator<O> validator,
+ SwingListValidatorDataLocator<O> dataLocator) {
+ return newPredicate(
+ NuitonValidatorScope.ERROR,
+ validator,
+ dataLocator
+ );
+ }
+
+ public static <O> SwingListValidatorHighlightPredicate<O> newWarningPredicate(
+ BeanListValidator<O> validator,
+ SwingListValidatorDataLocator<O> dataLocator) {
+ return newPredicate(
+ NuitonValidatorScope.WARNING,
+ validator,
+ dataLocator
+ );
+ }
+
+ public static <O> SwingListValidatorHighlightPredicate<O> newInfoPredicate(
+ BeanListValidator<O> validator,
+ SwingListValidatorDataLocator<O> dataLocator) {
+ return newPredicate(
+ NuitonValidatorScope.INFO,
+ validator,
+ dataLocator
+ );
+ }
+
+ public static <O> SwingListValidatorHighlightPredicate<O> newPredicate(
+ NuitonValidatorScope scope,
+ BeanListValidator<O> validator,
+ SwingListValidatorDataLocator<O> dataLocator) {
+ return new SwingListValidatorHighlightPredicate<O>(
+ scope,
+ validator,
+ dataLocator
+ );
+ }
+
+ public SwingListValidatorHighlightPredicate(NuitonValidatorScope scope,
+ BeanListValidator<O> validator,
+ SwingListValidatorDataLocator<O> dataLocator) {
+ this.scope = scope;
+ this.validator = validator;
+ this.dataLocator = dataLocator;
+ }
+
+ @Override
+ public boolean isHighlighted(Component renderer, ComponentAdapter adapter) {
+
+ int columnIndex = adapter.convertColumnIndexToModel(adapter.column);
+
+ String fieldName = adapter.getColumnName(columnIndex);
+
+ int rowIndex = adapter.convertRowIndexToModel(adapter.row);
+ JTable component = (JTable) adapter.getComponent();
+ O bean = dataLocator.locateBean(component.getModel(), rowIndex);
+ BeanListValidator.NuitonValidatorContext<O> context = validator.getContext(bean);
+ NuitonValidatorScope highestScope = context.getHighestScope(fieldName);
+ return scope == highestScope;
+ }
+}
Modified: trunk/jaxx-validator/src/main/java/jaxx/runtime/validator/swing/SwingValidatorUtil.java
===================================================================
--- trunk/jaxx-validator/src/main/java/jaxx/runtime/validator/swing/SwingValidatorUtil.java 2012-07-27 14:44:28 UTC (rev 2446)
+++ trunk/jaxx-validator/src/main/java/jaxx/runtime/validator/swing/SwingValidatorUtil.java 2012-07-30 07:30:24 UTC (rev 2447)
@@ -24,6 +24,7 @@
*/
package jaxx.runtime.validator.swing;
+import com.google.common.collect.Sets;
import jaxx.runtime.JAXXObject;
import jaxx.runtime.JAXXValidator;
import jaxx.runtime.SwingUtil;
@@ -31,9 +32,13 @@
import jaxx.runtime.validator.swing.meta.ValidatorField;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.jdesktop.swingx.JXTable;
+import org.jdesktop.swingx.decorator.ColorHighlighter;
+import org.jdesktop.swingx.decorator.Highlighter;
import org.nuiton.util.ReflectUtil;
import org.nuiton.validator.NuitonValidatorScope;
import org.nuiton.validator.bean.BeanValidatorUtil;
+import org.nuiton.validator.bean.list.BeanListValidator;
import javax.swing.ImageIcon;
import javax.swing.JComponent;
@@ -54,6 +59,7 @@
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.Set;
import static org.nuiton.i18n.I18n.n_;
@@ -287,9 +293,14 @@
*
* @param errorTable the table where to display validators messages
* @param render renderer to use
+ * @since 2.5.3
*/
- public static void installUI(JTable errorTable,
- SwingListValidatorMessageTableRenderer render) {
+ public static <O> void installUI(BeanListValidator<O> validator,
+ JTable dataTable,
+ JTable errorTable,
+ SwingListValidatorDataLocator<O> dataLocator,
+ SwingListValidatorMessageTableRenderer render) {
+
errorTable.setDefaultRenderer(Object.class, render);
errorTable.getRowSorter().setSortKeys(
Arrays.asList(new RowSorter.SortKey(0, SortOrder.ASCENDING)));
@@ -305,10 +316,50 @@
n_("validator.message.header.tip"));
SwingUtil.fixTableColumnWidth(errorTable, 0, 25);
-// SwingUtil.fixTableColumnWidth(errorTable, 1, 25);
+ // add click listener to go to cell
+ errorTable.addMouseListener(new SwingListValidatorMessageTableMouseListener(
+ dataTable,
+ dataLocator
+ ));
+
+ // listen on editor model to add / remove bean into validator
+ dataTable.getModel().addTableModelListener(
+ new SwingListValidatorTableEditorModelListener<O>(validator, dataLocator));
}
/**
+ * Add hightlighters on the editor of beans.
+ *
+ * @param validator the validator where to find bean states
+ * @param editor the editor of beans
+ * @param dataLocator the data locator
+ * @param scopes scopes to hightlight
+ * @param <O> type of bean to validate
+ * @since 2.5.3
+ */
+ public static <O> void addHightLighterOnEditor(BeanListValidator<O> validator,
+ JXTable editor,
+ SwingListValidatorDataLocator<O> dataLocator,
+ NuitonValidatorScope... scopes) {
+
+ Set<ColorHighlighter> highlighters = Sets.newHashSet();
+ for (NuitonValidatorScope scope : scopes) {
+
+ SwingListValidatorHighlightPredicate<O> predicate = SwingListValidatorHighlightPredicate.newPredicate(
+ scope,
+ validator, dataLocator
+ );
+
+ ColorHighlighter highlighter = new ColorHighlighter(predicate);
+ highlighter.setBackground(SwingValidatorUtil.getColor(scope));
+ highlighters.add(highlighter);
+ }
+
+ editor.setHighlighters(
+ highlighters.toArray(new Highlighter[highlighters.size()]));
+ }
+
+ /**
* Register for a given validator list ui a validator mouse listener.
* <p/>
* Note: there is only one listener registred for a given list model, so
@@ -458,6 +509,7 @@
}
return text;
}
+
/**
* Method to listen the modification of the context name and at each time
* reload fields of the ui.
1
0
r2446 - trunk/jaxx-validator/src/main/java/jaxx/runtime/validator/swing
by tchemit@users.nuiton.org 27 Jul '12
by tchemit@users.nuiton.org 27 Jul '12
27 Jul '12
Author: tchemit
Date: 2012-07-27 16:44:28 +0200 (Fri, 27 Jul 2012)
New Revision: 2446
Url: http://nuiton.org/repositories/revision/jaxx/2446
Log:
refs #2210: Use new validation api from nuiton-utils (fix remove bean algo + change log level)
Modified:
trunk/jaxx-validator/src/main/java/jaxx/runtime/validator/swing/SwingListValidatorTableEditorModelListener.java
Modified: trunk/jaxx-validator/src/main/java/jaxx/runtime/validator/swing/SwingListValidatorTableEditorModelListener.java
===================================================================
--- trunk/jaxx-validator/src/main/java/jaxx/runtime/validator/swing/SwingListValidatorTableEditorModelListener.java 2012-07-27 14:34:57 UTC (rev 2445)
+++ trunk/jaxx-validator/src/main/java/jaxx/runtime/validator/swing/SwingListValidatorTableEditorModelListener.java 2012-07-27 14:44:28 UTC (rev 2446)
@@ -47,8 +47,8 @@
TableModel model = (TableModel) e.getSource();
O bean = dataLocator.locateBean(model, i);
- if (log.isInfoEnabled()) {
- log.info("Add a bean to validator " + bean);
+ if (log.isDebugEnabled()) {
+ log.debug("Add a bean to validator " + bean);
}
validator.addBean(bean);
}
@@ -62,14 +62,14 @@
TableModel model = (TableModel) e.getSource();
Set<O> beans = Sets.newHashSet(validator.getBeans());
- for (int i = 0; i <= model.getRowCount(); i++) {
+ for (int i = 0, max = model.getRowCount(); i < max; i++) {
O bean = dataLocator.locateBean(model, i);
beans.remove(bean);
}
for (O bean : beans) {
- if (log.isInfoEnabled()) {
- log.info("Remove a bean to validator " + bean);
+ if (log.isDebugEnabled()) {
+ log.debug("Remove a bean to validator " + bean);
}
validator.removeBean(bean);
}
1
0
r2445 - in trunk/jaxx-demo/src: main/java/jaxx/demo/entities main/java/jaxx/demo/feature/validation main/java/jaxx/demo/feature/validation/list main/java/jaxx/demo/feature/validation/simple main/java/jaxx/demo/tree main/resources main/resources/i18n main/resources/jaxx/demo/entities test/java/jaxx/demo
by tchemit@users.nuiton.org 27 Jul '12
by tchemit@users.nuiton.org 27 Jul '12
27 Jul '12
Author: tchemit
Date: 2012-07-27 16:34:57 +0200 (Fri, 27 Jul 2012)
New Revision: 2445
Url: http://nuiton.org/repositories/revision/jaxx/2445
Log:
refs #2210: Use new validation api from nuiton-utils (add it to demo)
Added:
trunk/jaxx-demo/src/main/java/jaxx/demo/feature/validation/list/
trunk/jaxx-demo/src/main/java/jaxx/demo/feature/validation/list/ListBeanValidationDemo.css
trunk/jaxx-demo/src/main/java/jaxx/demo/feature/validation/list/ListBeanValidationDemo.jaxx
trunk/jaxx-demo/src/main/java/jaxx/demo/feature/validation/list/ListBeanValidationDemoHandler.java
trunk/jaxx-demo/src/main/java/jaxx/demo/feature/validation/list/PeopleTableModel.java
trunk/jaxx-demo/src/main/java/jaxx/demo/feature/validation/simple/
trunk/jaxx-demo/src/main/java/jaxx/demo/feature/validation/simple/SimpleBeanValidationByListDemo.jaxx
trunk/jaxx-demo/src/main/java/jaxx/demo/feature/validation/simple/SimpleBeanValidationByTableDemo.jaxx
trunk/jaxx-demo/src/main/java/jaxx/demo/feature/validation/simple/Validation.css
trunk/jaxx-demo/src/main/resources/jaxx/demo/entities/People-error-validation.xml
trunk/jaxx-demo/src/main/resources/jaxx/demo/entities/People-info-validation.xml
trunk/jaxx-demo/src/main/resources/jaxx/demo/entities/People-warning-validation.xml
Removed:
trunk/jaxx-demo/src/main/java/jaxx/demo/feature/validation/Validation.css
trunk/jaxx-demo/src/main/java/jaxx/demo/feature/validation/ValidationListDemo.jaxx
trunk/jaxx-demo/src/main/java/jaxx/demo/feature/validation/ValidationTableDemo.jaxx
Modified:
trunk/jaxx-demo/src/main/java/jaxx/demo/entities/Identity.java
trunk/jaxx-demo/src/main/java/jaxx/demo/tree/DemoDataProvider.java
trunk/jaxx-demo/src/main/resources/i18n/jaxx-demo_en_GB.properties
trunk/jaxx-demo/src/main/resources/i18n/jaxx-demo_es_ES.properties
trunk/jaxx-demo/src/main/resources/i18n/jaxx-demo_fr_FR.properties
trunk/jaxx-demo/src/main/resources/log4j.properties
trunk/jaxx-demo/src/test/java/jaxx/demo/BeanValidatorDetectorTest.java
Modified: trunk/jaxx-demo/src/main/java/jaxx/demo/entities/Identity.java
===================================================================
--- trunk/jaxx-demo/src/main/java/jaxx/demo/entities/Identity.java 2012-07-27 14:34:35 UTC (rev 2444)
+++ trunk/jaxx-demo/src/main/java/jaxx/demo/entities/Identity.java 2012-07-27 14:34:57 UTC (rev 2445)
@@ -28,9 +28,12 @@
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
import java.io.File;
+import java.io.Serializable;
-public class Identity {
+public class Identity implements Serializable {
+ private static final long serialVersionUID = 1L;
+
protected String firstName = "";
protected String lastName = "";
Deleted: trunk/jaxx-demo/src/main/java/jaxx/demo/feature/validation/Validation.css
===================================================================
--- trunk/jaxx-demo/src/main/java/jaxx/demo/feature/validation/Validation.css 2012-07-27 14:34:35 UTC (rev 2444)
+++ trunk/jaxx-demo/src/main/java/jaxx/demo/feature/validation/Validation.css 2012-07-27 14:34:57 UTC (rev 2445)
@@ -1,29 +0,0 @@
-/*
- * #%L
- * JAXX :: Demo
- *
- * $Id$
- * $HeadURL$
- * %%
- * Copyright (C) 2008 - 2010 CodeLutin
- * %%
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation, either version 3 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 Lesser Public License for more details.
- *
- * You should have received a copy of the GNU General Lesser Public
- * License along with this program. If not, see
- * <http://www.gnu.org/licenses/lgpl-3.0.html>.
- * #L%
- */
-JSlider {
- paintTicks: true;
- minorTickSpacing: 5;
- majorTickSpacing: 10;
-}
Deleted: trunk/jaxx-demo/src/main/java/jaxx/demo/feature/validation/ValidationListDemo.jaxx
===================================================================
--- trunk/jaxx-demo/src/main/java/jaxx/demo/feature/validation/ValidationListDemo.jaxx 2012-07-27 14:34:35 UTC (rev 2444)
+++ trunk/jaxx-demo/src/main/java/jaxx/demo/feature/validation/ValidationListDemo.jaxx 2012-07-27 14:34:57 UTC (rev 2445)
@@ -1,372 +0,0 @@
-<!--
- #%L
- JAXX :: Demo
-
- $Id$
- $HeadURL$
- %%
- Copyright (C) 2008 - 2010 CodeLutin
- %%
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU Lesser General Public License as
- published by the Free Software Foundation, either version 3 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 Lesser Public License for more details.
-
- You should have received a copy of the GNU General Lesser Public
- License along with this program. If not, see
- <http://www.gnu.org/licenses/lgpl-3.0.html>.
- #L%
- -->
-
-<jaxx.demo.DemoPanel layout='{new BorderLayout()}'>
- <style source="Validation.css"/>
-
- <import>
- javax.swing.JOptionPane
- static org.nuiton.i18n.I18n.n_
- jaxx.demo.entities.Identity
- jaxx.demo.entities.Model
- jaxx.runtime.validator.swing.SwingValidatorMessageListRenderer
- jaxx.runtime.validator.swing.SwingValidatorMessageListModel
-
- java.io.File
- </import>
-
- <script><![CDATA[
-
-void $afterCompleteSetup() {
-}
-
-@Override
-protected String[] getSources() {
- return new String[]{ getDefaultSource(), "Validation.css",
- "Identity.java", "Identity-error-validation.xml", "Identity-info-validation.xml", "Identity-warning-validation.xml",
- "Model.java", "Model-error-validation.xml", "Model-info-validation.xml", "Model-warning-validation.xml"
- };
-}
-]]>
- </script>
- <!-- models -->
- <Model id='model1'/>
- <Model id='model2'/>
- <Identity id='identity'/>
-
- <!-- errors model -->
- <SwingValidatorMessageListModel id='errorListModel'
- onContentsChanged='ok.setEnabled(errorListModel.isEmpty())'/>
-
- <!-- validators -->
- <BeanValidator id='validator' bean='model1'
- uiClass="jaxx.runtime.validator.swing.ui.ImageValidationUI">
- <field name="text"/>
- <field name="text2"/>
- <field name="ratio"/>
- </BeanValidator>
- <BeanValidator id='validator2' bean='model2'
- uiClass="jaxx.runtime.validator.swing.ui.IconValidationUI">
- <field name="text" component="_text"/>
- <field name="text2" component="_text2"/>
- <field name="ratio" component="_ratio"/>
- </BeanValidator>
- <BeanValidator id='validator3' autoField='true' bean='identity'
- uiClass="jaxx.runtime.validator.swing.ui.TranslucentValidationUI">
- <field name="email" component="email2"/>
- </BeanValidator>
-
- <Table fill='both' constraints='BorderLayout.CENTER'>
- <row>
- <cell weightx='1' weighty='1' insets='6, 3, 0, 0'>
- <JPanel border='{BorderFactory.createTitledBorder("Form")}'
- layout='{new GridLayout()}' width='250' height='120'>
- <Table anchor='west' fill='both'>
- <row>
- <cell>
- <JLabel text='Text:'/>
- </cell>
- <cell weightx='1'>
- <JTextField id='text' text='{model1.getText()}'
- _validatorLabel='{n_("form.text")}'
- onKeyReleased='model1.setText(text.getText())'/>
- </cell>
- </row>
- <row>
- <cell>
- <JLabel text='Text2:'/>
- </cell>
- <cell weightx='1'>
- <JTextField id='text2' text='{model1.getText2()}'
- _validatorLabel='{n_("form.text2")}'
- onKeyReleased='model1.setText2(text2.getText())'/>
- </cell>
- </row>
-
- <row>
- <cell>
- <JLabel text='Ratio:'/>
- </cell>
- <cell>
- <JSlider id='ratio' minimum='0' maximum='100'
- value='{model1.getRatio()}'
- _validatorLabel='{n_("form.ratio")}'
- onStateChanged='model1.setRatio(ratio.getValue())'/>
- </cell>
- </row>
- </Table>
- </JPanel>
- </cell>
- <cell weightx='1' weighty='1' insets='6, 3, 0, 0'>
- <JPanel border='{BorderFactory.createTitledBorder("Model")}'
- layout='{new GridLayout()}' width='250' height='120'>
- <Table anchor='west' fill='both'>
- <row>
- <cell>
- <JLabel text='Text:'/>
- </cell>
- <cell weightx='1'>
- <JLabel text='{model1.getText()}'/>
- </cell>
- </row>
- <row>
- <cell>
- <JLabel text='Text2:'/>
- </cell>
- <cell weightx='1'>
- <JLabel text='{model1.getText2()}'/>
- </cell>
- </row>
-
- <row>
- <cell>
- <JLabel text='Ratio:'/>
- </cell>
- <cell>
- <JLabel text='{model1.getRatio()+""}'/>
- </cell>
- </row>
- </Table>
- </JPanel>
- </cell>
- </row>
- <row>
- <cell weightx='1' weighty='1' insets='6, 3, 0, 0'>
- <JPanel border='{BorderFactory.createTitledBorder("Form2")}'
- layout='{new GridLayout()}' width='250' height='120'>
- <Table anchor='west' fill='both'>
- <row>
- <cell>
- <JLabel text='Text:'/>
- </cell>
- <cell weightx='1'>
- <JTextField id='_text' text='{model2.getText()}'
- _validatorLabel='{n_("form2.text")}'
- onKeyReleased='model2.setText(_text.getText())'/>
- </cell>
- </row>
- <row>
- <cell>
- <JLabel text='Text2:'/>
- </cell>
- <cell weightx='1'>
- <JTextField id='_text2' text='{model2.getText2()}'
- _validatorLabel='{n_("form2.text2")}'
- onKeyReleased='model2.setText2(_text2.getText())'/>
- </cell>
- </row>
-
- <row>
- <cell>
- <JLabel text='Ratio:'/>
- </cell>
- <cell>
- <JSlider id='_ratio' minimum='0' maximum='100'
- value='{model2.getRatio()}'
- _validatorLabel='{n_("form2.ratio")}'
- onStateChanged='model2.setRatio(_ratio.getValue())'/>
- </cell>
- </row>
- </Table>
- </JPanel>
- </cell>
- <cell weightx='1' weighty='1' insets='6, 3, 0, 0'>
- <JPanel border='{BorderFactory.createTitledBorder("Model2")}'
- layout='{new GridLayout()}' width='250' height='120'>
- <Table anchor='west' fill='both'>
- <row>
- <cell>
- <JLabel text='Text:'/>
- </cell>
- <cell weightx='1'>
- <JLabel text='{model2.getText()}'/>
- </cell>
- </row>
- <row>
- <cell>
- <JLabel text='Text2:'/>
- </cell>
- <cell weightx='1'>
- <JLabel text='{model2.getText2()}'/>
- </cell>
- </row>
-
- <row>
- <cell>
- <JLabel text='Ratio:'/>
- </cell>
- <cell>
- <JLabel text='{model2.getRatio()+""}'/>
- </cell>
- </row>
- </Table>
- </JPanel>
- </cell>
- </row>
- <row>
- <cell weightx='1' weighty='1' insets='6, 3, 0, 0'>
- <JPanel border='{BorderFactory.createTitledBorder("Identify Form")}'
- layout='{new GridLayout()}' width='250' height='180'>
- <Table anchor='west' fill='both'>
- <row>
- <cell>
- <JLabel text='FirstName:'/>
- </cell>
- <cell weightx='1'>
- <JTextField id='firstName' text='{identity.getFirstName()}'
- onKeyReleased='identity.setFirstName(firstName.getText())'/>
- </cell>
- </row>
- <row>
- <cell>
- <JLabel text='LastName:'/>
- </cell>
- <cell weightx='1'>
- <JTextField id='lastName' text='{identity.getLastName()}'
- onKeyReleased='identity.setLastName(lastName.getText())'/>
- </cell>
- </row>
- <row>
- <cell>
- <JLabel text='Email:'/>
- </cell>
- <cell weightx='1'>
- <JTextField id='email2' text='{identity.getEmail()}'
- onKeyReleased='identity.setEmail(email2.getText())'/>
- </cell>
- </row>
-
- <row>
- <cell>
- <JLabel text='Age:'/>
- </cell>
- <cell>
- <JSlider id='age' minimum='0' maximum='100'
- value='{identity.getAge()}'
- onStateChanged='identity.setAge(age.getValue())'/>
- </cell>
- </row>
- <row>
- <cell>
- <JLabel text='Config file :'/>
- </cell>
- <cell>
- <JTextField id='config' text='{identity.getConfig()+""}'
- onKeyReleased='identity.setConfig(new File(config.getText()))'/>
- </cell>
- </row>
- <row>
- <cell>
- <JLabel text='Working directory:'/>
- </cell>
- <cell>
- <JTextField id='dir' text='{identity.getDir()+""}'
- onKeyReleased='identity.setDir(new File(dir.getText()))'/>
- </cell>
- </row>
- </Table>
- </JPanel>
- </cell>
- <cell weightx='1' weighty='1' insets='6, 3, 0, 0'>
- <JPanel border='{BorderFactory.createTitledBorder("Identity Model")}'
- layout='{new GridLayout()}' width='250' height='120'>
- <Table anchor='west' fill='both'>
- <row>
- <cell>
- <JLabel text='FirstName:'/>
- </cell>
- <cell weightx='1'>
- <JLabel text='{identity.getFirstName()}'/>
- </cell>
- </row>
- <row>
- <cell>
- <JLabel text='LastName:'/>
- </cell>
- <cell weightx='1'>
- <JLabel text='{identity.getLastName()}'/>
- </cell>
- </row>
- <row>
- <cell>
- <JLabel text='Email:'/>
- </cell>
- <cell weightx='1'>
- <JLabel text='{identity.getEmail()}'/>
- </cell>
- </row>
- <row>
- <cell>
- <JLabel text='Age:'/>
- </cell>
- <cell>
- <JLabel text='{identity.getAge()+""}'/>
- </cell>
- </row>
- <row>
- <cell>
- <JLabel text='Config file:'/>
- </cell>
- <cell>
- <JLabel text='{identity.getConfig()+""}'/>
- </cell>
- </row>
- <row>
- <cell>
- <JLabel text='Directory file:'/>
- </cell>
- <cell>
- <JLabel text='{identity.getDir()+""}'/>
- </cell>
- </row>
- </Table>
- </JPanel>
- </cell>
- </row>
- <row>
- <cell columns='2' fill="both">
- <JPanel border='{BorderFactory.createTitledBorder("Messages")}'
- layout='{new GridLayout()}' height='200'
- width='500'>
- <JScrollPane>
- <JList id='errorList' model='{errorListModel}'
- cellRenderer='{new SwingValidatorMessageListRenderer()}'/>
- </JScrollPane>
- </JPanel>
- </cell>
- </row>
- <row>
- <cell columns='2' fill="both">
- <JPanel layout='{new GridLayout(1,2,0,0)}'>
- <JButton id='cancel' text='cancel'
- onActionPerformed='JOptionPane.showMessageDialog(this, cancel.getText() + " clicked!", "onActionPerformed", JOptionPane.INFORMATION_MESSAGE);'/>
- <JButton id='ok' text='valid'
- onActionPerformed='JOptionPane.showMessageDialog(this, ok.getText() + " clicked!", "onActionPerformed", JOptionPane.INFORMATION_MESSAGE);'/>
- </JPanel>
- </cell>
- </row>
- </Table>
-
-</jaxx.demo.DemoPanel>
Deleted: trunk/jaxx-demo/src/main/java/jaxx/demo/feature/validation/ValidationTableDemo.jaxx
===================================================================
--- trunk/jaxx-demo/src/main/java/jaxx/demo/feature/validation/ValidationTableDemo.jaxx 2012-07-27 14:34:35 UTC (rev 2444)
+++ trunk/jaxx-demo/src/main/java/jaxx/demo/feature/validation/ValidationTableDemo.jaxx 2012-07-27 14:34:57 UTC (rev 2445)
@@ -1,377 +0,0 @@
-<!--
- #%L
- JAXX :: Demo
-
- $Id$
- $HeadURL$
- %%
- Copyright (C) 2008 - 2010 CodeLutin
- %%
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU Lesser General Public License as
- published by the Free Software Foundation, either version 3 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 Lesser Public License for more details.
-
- You should have received a copy of the GNU General Lesser Public
- License along with this program. If not, see
- <http://www.gnu.org/licenses/lgpl-3.0.html>.
- #L%
- -->
-
-<jaxx.demo.DemoPanel layout='{new BorderLayout()}'>
- <style source="Validation.css"/>
-
- <import>
- javax.swing.JOptionPane
- static org.nuiton.i18n.I18n.n_
- jaxx.demo.entities.Identity
- jaxx.demo.entities.Model
- jaxx.runtime.validator.swing.SwingValidatorUtil
- jaxx.runtime.validator.swing.SwingValidatorMessageTableRenderer
- jaxx.runtime.validator.swing.SwingValidatorMessageTableModel
-
- java.io.File
- </import>
-
- <script><![CDATA[
-void $afterCompleteSetup() {
- SwingValidatorUtil.installUI(errorTable, new SwingValidatorMessageTableRenderer());
-}
-
-@Override
-protected String[] getSources() {
- return new String[]{ getDefaultSource(), "Validation.css",
- "Identity.java", "Identity-error-validation.xml", "Identity-info-validation.xml", "Identity-warning-validation.xml",
- "Model.java", "Model-error-validation.xml", "Model-info-validation.xml", "Model-warning-validation.xml"
- };
-}
-]]></script>
-
- <!-- models -->
- <Model id='model1'/>
- <Model id='model2'/>
- <Identity id='identity'/>
-
- <!-- errors model -->
- <SwingValidatorMessageTableModel id='errorTableModel'
- onTableChanged='ok.setEnabled(errorTableModel.getRowCount()==0)'/>
-
- <!-- validators -->
- <BeanValidator id='validator' bean='model1'
- uiClass="jaxx.runtime.validator.swing.ui.ImageValidationUI">
- <field name="text"/>
- <field name="text2"/>
- <field name="ratio"/>
- </BeanValidator>
- <BeanValidator id='validator2' bean='model2'
- uiClass="jaxx.runtime.validator.swing.ui.IconValidationUI">
- <field name="text" component="_text"/>
- <field name="text2" component="_text2"/>
- <field name="ratio" component="_ratio"/>
- </BeanValidator>
- <BeanValidator id='validator3' autoField='true' bean='identity'
- uiClass="jaxx.runtime.validator.swing.ui.TranslucentValidationUI">
- <field name="email" component="email2"/>
- </BeanValidator>
-
- <Table fill='both' constraints='BorderLayout.CENTER'>
- <row>
- <cell weightx='1' weighty='1' insets='6, 3, 0, 0'>
- <JPanel border='{BorderFactory.createTitledBorder("Form")}'
- layout='{new GridLayout()}' width='250' height='120'>
- <Table anchor='west' fill='both'>
- <row>
- <cell>
- <JLabel text='Text:'/>
- </cell>
- <cell weightx='1'>
- <JTextField id='text' text='{model1.getText()}'
- onKeyReleased='model1.setText(text.getText())'
- _validatorLabel='{n_("form.text")}'
- />
- </cell>
- </row>
- <row>
- <cell>
- <JLabel text='Text2:'/>
- </cell>
- <cell weightx='1'>
- <JTextField id='text2' text='{model1.getText2()}'
- onKeyReleased='model1.setText2(text2.getText())'
- _validatorLabel='{n_("form.text2")}'
- />
- </cell>
- </row>
-
- <row>
- <cell>
- <JLabel text='Ratio:'/>
- </cell>
- <cell>
- <JSlider id='ratio' minimum='0' maximum='100'
- value='{model1.getRatio()}'
- _validatorLabel='{n_("form.ratio")}'
- onStateChanged='model1.setRatio(ratio.getValue())'/>
- </cell>
- </row>
- </Table>
- </JPanel>
- </cell>
- <cell weightx='1' weighty='1' insets='6, 3, 0, 0'>
- <JPanel border='{BorderFactory.createTitledBorder("Model")}'
- layout='{new GridLayout()}' width='250' height='120'>
- <Table anchor='west' fill='both'>
- <row>
- <cell>
- <JLabel text='Text:'/>
- </cell>
- <cell weightx='1'>
- <JLabel text='{model1.getText()}'/>
- </cell>
- </row>
- <row>
- <cell>
- <JLabel text='Text2:'/>
- </cell>
- <cell weightx='1'>
- <JLabel text='{model1.getText2()}'/>
- </cell>
- </row>
-
- <row>
- <cell>
- <JLabel text='Ratio:'/>
- </cell>
- <cell>
- <JLabel text='{model1.getRatio()+""}'/>
- </cell>
- </row>
- </Table>
- </JPanel>
- </cell>
- </row>
- <row>
- <cell weightx='1' weighty='1' insets='6, 3, 0, 0'>
- <JPanel border='{BorderFactory.createTitledBorder("Form2")}'
- layout='{new GridLayout()}' width='250' height='120'>
- <Table anchor='west' fill='both'>
- <row>
- <cell>
- <JLabel text='Text:'/>
- </cell>
- <cell weightx='1'>
- <JTextField id='_text' text='{model2.getText()}'
- _validatorLabel='{n_("form2.text")}'
- onKeyReleased='model2.setText(_text.getText())'/>
- </cell>
- </row>
- <row>
- <cell>
- <JLabel text='Text2:'/>
- </cell>
- <cell weightx='1'>
- <JTextField id='_text2' text='{model2.getText2()}'
- _validatorLabel='{n_("form2.text2")}'
- onKeyReleased='model2.setText2(_text2.getText())'/>
- </cell>
- </row>
-
- <row>
- <cell>
- <JLabel text='Ratio:'/>
- </cell>
- <cell>
- <JSlider id='_ratio' minimum='0' maximum='100'
- value='{model2.getRatio()}'
- _validatorLabel='{n_("form2.ratio")}'
- onStateChanged='model2.setRatio(_ratio.getValue())'/>
- </cell>
- </row>
- </Table>
- </JPanel>
- </cell>
- <cell weightx='1' weighty='1' insets='6, 3, 0, 0'>
- <JPanel border='{BorderFactory.createTitledBorder("Model2")}'
- layout='{new GridLayout()}' width='250' height='120'>
- <Table anchor='west' fill='both'>
- <row>
- <cell>
- <JLabel text='Text:'/>
- </cell>
- <cell weightx='1'>
- <JLabel text='{model2.getText()}'/>
- </cell>
- </row>
- <row>
- <cell>
- <JLabel text='Text2:'/>
- </cell>
- <cell weightx='1'>
- <JLabel text='{model2.getText2()}'/>
- </cell>
- </row>
-
- <row>
- <cell>
- <JLabel text='Ratio:'/>
- </cell>
- <cell>
- <JLabel text='{model2.getRatio()+""}'/>
- </cell>
- </row>
- </Table>
- </JPanel>
- </cell>
- </row>
- <row>
- <cell weightx='1' weighty='1' insets='6, 3, 0, 0'>
- <JPanel border='{BorderFactory.createTitledBorder("Identify Form")}'
- layout='{new GridLayout()}' width='250' height='180'>
- <Table anchor='west' fill='both'>
- <row>
- <cell>
- <JLabel text='FirstName:'/>
- </cell>
- <cell weightx='1'>
- <JTextField id='firstName' text='{identity.getFirstName()}'
- onKeyReleased='identity.setFirstName(firstName.getText())'/>
- </cell>
- </row>
- <row>
- <cell>
- <JLabel text='LastName:'/>
- </cell>
- <cell weightx='1'>
- <JTextField id='lastName' text='{identity.getLastName()}'
- onKeyReleased='identity.setLastName(lastName.getText())'/>
- </cell>
- </row>
- <row>
- <cell>
- <JLabel text='Email:'/>
- </cell>
- <cell weightx='1'>
- <JTextField id='email2' text='{identity.getEmail()}'
- onKeyReleased='identity.setEmail(email2.getText())'/>
- </cell>
- </row>
-
- <row>
- <cell>
- <JLabel text='Age:'/>
- </cell>
- <cell>
- <JSlider id='age' minimum='0' maximum='100'
- value='{identity.getAge()}'
- onStateChanged='identity.setAge(age.getValue())'/>
- </cell>
- </row>
- <row>
- <cell>
- <JLabel text='Config file :'/>
- </cell>
- <cell>
- <JTextField id='config' text='{identity.getConfig()+""}'
- onKeyReleased='identity.setConfig(new File(config.getText()))'/>
- </cell>
- </row>
- <row>
- <cell>
- <JLabel text='Working directory:'/>
- </cell>
- <cell>
- <JTextField id='dir' text='{identity.getDir()+""}'
- onKeyReleased='identity.setDir(new File(dir.getText()))'/>
- </cell>
- </row>
- </Table>
- </JPanel>
- </cell>
- <cell weightx='1' weighty='1' insets='6, 3, 0, 0'>
- <JPanel border='{BorderFactory.createTitledBorder("Identity Model")}'
- layout='{new GridLayout()}' width='250' height='120'>
- <Table anchor='west' fill='both'>
- <row>
- <cell>
- <JLabel text='FirstName:'/>
- </cell>
- <cell weightx='1'>
- <JLabel text='{identity.getFirstName()}'/>
- </cell>
- </row>
- <row>
- <cell>
- <JLabel text='LastName:'/>
- </cell>
- <cell weightx='1'>
- <JLabel text='{identity.getLastName()}'/>
- </cell>
- </row>
- <row>
- <cell>
- <JLabel text='Email:'/>
- </cell>
- <cell weightx='1'>
- <JLabel text='{identity.getEmail()}'/>
- </cell>
- </row>
- <row>
- <cell>
- <JLabel text='Age:'/>
- </cell>
- <cell>
- <JLabel text='{identity.getAge()+""}'/>
- </cell>
- </row>
- <row>
- <cell>
- <JLabel text='Config file:'/>
- </cell>
- <cell>
- <JLabel text='{identity.getConfig()+""}'/>
- </cell>
- </row>
- <row>
- <cell>
- <JLabel text='Directory file:'/>
- </cell>
- <cell>
- <JLabel text='{identity.getDir()+""}'/>
- </cell>
- </row>
- </Table>
- </JPanel>
- </cell>
- </row>
- <row>
- <cell columns='2' fill="both">
- <JPanel border='{BorderFactory.createTitledBorder("Messages")}'
- layout='{new GridLayout()}' height='200'
- width='500'>
- <JScrollPane columnHeaderView='{errorTable.getTableHeader()}'>
- <JTable id='errorTable' model='{errorTableModel}' rowSelectionAllowed='true'
- autoCreateRowSorter='true'
- autoResizeMode='2' cellSelectionEnabled='false'
- selectionMode='0'/>
- </JScrollPane>
- </JPanel>
- </cell>
- </row>
- <row>
- <cell columns='2' fill="both">
- <JPanel layout='{new GridLayout(1,2,0,0)}'>
- <JButton id='cancel' text='cancel'
- onActionPerformed='JOptionPane.showMessageDialog(this, cancel.getText() + " clicked!", "onActionPerformed", JOptionPane.INFORMATION_MESSAGE);'/>
- <JButton id='ok' text='valid'
- onActionPerformed='JOptionPane.showMessageDialog(this, ok.getText() + " clicked!", "onActionPerformed", JOptionPane.INFORMATION_MESSAGE);'/>
- </JPanel>
- </cell>
- </row>
- </Table>
-
-</jaxx.demo.DemoPanel>
Added: trunk/jaxx-demo/src/main/java/jaxx/demo/feature/validation/list/ListBeanValidationDemo.css
===================================================================
--- trunk/jaxx-demo/src/main/java/jaxx/demo/feature/validation/list/ListBeanValidationDemo.css (rev 0)
+++ trunk/jaxx-demo/src/main/java/jaxx/demo/feature/validation/list/ListBeanValidationDemo.css 2012-07-27 14:34:57 UTC (rev 2445)
@@ -0,0 +1,29 @@
+/*
+ * #%L
+ * JAXX :: Demo
+ *
+ * $Id: Validation.css 2225 2011-02-19 20:15:00Z tchemit $
+ * $HeadURL: http://svn.nuiton.org/svn/jaxx/trunk/jaxx-demo/src/main/java/jaxx/demo/feat… $
+ * %%
+ * Copyright (C) 2008 - 2010 CodeLutin
+ * %%
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation, either version 3 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 Lesser Public License for more details.
+ *
+ * You should have received a copy of the GNU General Lesser Public
+ * License along with this program. If not, see
+ * <http://www.gnu.org/licenses/lgpl-3.0.html>.
+ * #L%
+ */
+JSlider {
+ paintTicks: true;
+ minorTickSpacing: 5;
+ majorTickSpacing: 10;
+}
Added: trunk/jaxx-demo/src/main/java/jaxx/demo/feature/validation/list/ListBeanValidationDemo.jaxx
===================================================================
--- trunk/jaxx-demo/src/main/java/jaxx/demo/feature/validation/list/ListBeanValidationDemo.jaxx (rev 0)
+++ trunk/jaxx-demo/src/main/java/jaxx/demo/feature/validation/list/ListBeanValidationDemo.jaxx 2012-07-27 14:34:57 UTC (rev 2445)
@@ -0,0 +1,107 @@
+<!--
+ #%L
+ JAXX :: Demo
+
+ $Id: ValidationTableDemo.jaxx 2380 2012-07-04 16:12:58Z tchemit $
+ $HeadURL: http://svn.nuiton.org/svn/jaxx/trunk/jaxx-demo/src/main/java/jaxx/demo/feat… $
+ %%
+ Copyright (C) 2008 - 2010 CodeLutin
+ %%
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation, either version 3 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 Lesser Public License for more details.
+
+ You should have received a copy of the GNU General Lesser Public
+ License along with this program. If not, see
+ <http://www.gnu.org/licenses/lgpl-3.0.html>.
+ #L%
+ -->
+
+<jaxx.demo.DemoPanel layout='{new BorderLayout()}'>
+
+ <import>
+ javax.swing.JOptionPane
+ static org.nuiton.i18n.I18n.n_
+ jaxx.demo.entities.People
+ org.nuiton.validator.bean.list.BeanListValidator
+ jaxx.runtime.validator.swing.SwingListValidatorMessageTableModel
+
+ java.io.File
+ </import>
+
+ <script><![CDATA[
+void $afterCompleteSetup() {
+ handler.initUI();
+}
+
+@Override
+protected String[] getSources() {
+ return new String[]{ getDefaultSource(), "ListBeanValidationDemo.css",
+ "People.java", "People-error-validation.xml", "People-info-validation.xml", "People-warning-validation.xml",
+ "ListBeanValidationDemoHandler.java", "PeopleTableModel.java"
+ };
+}
+]]></script>
+
+ <!-- Handler of this ui -->
+ <ListBeanValidationDemoHandler id='handler' constructorParams='this'/>
+
+ <!-- model -->
+ <PeopleTableModel id='model'/>
+
+ <!-- validator -->
+ <BeanListValidator id='validator' genericType='People'
+ initializer='BeanListValidator.newValidator(People.class, null)'/>
+
+ <!-- errors model -->
+ <SwingListValidatorMessageTableModel id='errorTableModel'
+ onTableChanged='handler.updateOkEnabled()'/>
+
+ <Table fill='both' constraints='BorderLayout.CENTER'>
+ <row>
+ <cell weightx='1' weighty='1' insets='6, 3, 0, 0'>
+ <JPanel border='{BorderFactory.createTitledBorder("Form")}'
+ layout='{new GridLayout()}' width='250' height='120'>
+ <JScrollPane id='dataTableScrollePane' constraints='BorderLayout.CENTER'>
+ <JTable id='dataTable' model='{model}' autoCreateRowSorter='true'/>
+ </JScrollPane>
+ </JPanel>
+ </cell>
+ </row>
+ <row>
+ <cell fill="both">
+ <JPanel layout='{new GridLayout(1,3,0,0)}'>
+ <JButton id='addIdentity' text='jaxx.demo.action.add'
+ onActionPerformed='handler.addIdentity()'/>
+ <JButton id='removeIdentity' text='jaxx.demo.action.remove'
+ onActionPerformed='handler.removeIdentity()'/>
+ <JButton id='ok' text='jaxx.demo.action.ok'
+ onActionPerformed='JOptionPane.showMessageDialog(this, ok.getText() + " clicked!", "onActionPerformed", JOptionPane.INFORMATION_MESSAGE);'/>
+
+ </JPanel>
+ </cell>
+ </row>
+ <row>
+ <cell fill="both">
+ <JPanel border='{BorderFactory.createTitledBorder("Messages")}'
+ layout='{new GridLayout()}' height='200'
+ width='500'>
+ <JScrollPane columnHeaderView='{errorTable.getTableHeader()}'>
+ <JTable id='errorTable' model='{errorTableModel}'
+ rowSelectionAllowed='true'
+ autoCreateRowSorter='true'
+ autoResizeMode='2' cellSelectionEnabled='false'
+ selectionMode='0'/>
+ </JScrollPane>
+ </JPanel>
+ </cell>
+ </row>
+ </Table>
+
+</jaxx.demo.DemoPanel>
Added: trunk/jaxx-demo/src/main/java/jaxx/demo/feature/validation/list/ListBeanValidationDemoHandler.java
===================================================================
--- trunk/jaxx-demo/src/main/java/jaxx/demo/feature/validation/list/ListBeanValidationDemoHandler.java (rev 0)
+++ trunk/jaxx-demo/src/main/java/jaxx/demo/feature/validation/list/ListBeanValidationDemoHandler.java 2012-07-27 14:34:57 UTC (rev 2445)
@@ -0,0 +1,150 @@
+package jaxx.demo.feature.validation.list;
+
+import jaxx.demo.entities.DemoDecoratorProvider;
+import jaxx.demo.entities.People;
+import jaxx.runtime.SwingUtil;
+import jaxx.runtime.validator.swing.SwingListValidatorDataLocator;
+import jaxx.runtime.validator.swing.SwingListValidatorMessageTableModel;
+import jaxx.runtime.validator.swing.SwingListValidatorMessageTableMouseListener;
+import jaxx.runtime.validator.swing.SwingListValidatorMessageTableRenderer;
+import jaxx.runtime.validator.swing.SwingListValidatorTableEditorModelListener;
+import jaxx.runtime.validator.swing.SwingValidatorUtil;
+import org.apache.commons.lang3.tuple.Pair;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.nuiton.util.decorator.Decorator;
+import org.nuiton.validator.bean.list.BeanListValidator;
+
+import javax.swing.JTable;
+import javax.swing.RowSorter;
+import javax.swing.SortOrder;
+import javax.swing.table.TableModel;
+import java.util.Arrays;
+import java.util.UUID;
+
+import static org.nuiton.i18n.I18n.n_;
+
+/**
+ * Handler of UI {@link ListBeanValidationDemo}.
+ *
+ * @author tchemit <chemit(a)codelutin.com>
+ * @since 2.5.3
+ */
+public class ListBeanValidationDemoHandler {
+
+ /** Logger. */
+ private static final Log log =
+ LogFactory.getLog(ListBeanValidationDemoHandler.class);
+
+ private final ListBeanValidationDemo ui;
+
+ public ListBeanValidationDemoHandler(ListBeanValidationDemo ui) {
+ this.ui = ui;
+ }
+
+ public void initUI() {
+
+ // customize data table
+
+ JTable dataTable = ui.getDataTable();
+
+ dataTable.getRowSorter().setSortKeys(
+ Arrays.asList(new RowSorter.SortKey(0, SortOrder.ASCENDING)));
+ SwingUtil.setI18nTableHeaderRenderer(
+ dataTable,
+ n_("jaxx.demo.label.id"),
+ n_("jaxx.demo.label.id.tip"),
+ n_("jaxx.demo.label.firstName"),
+ n_("jaxx.demo.label.firstName.tip"),
+ n_("jaxx.demo.label.lastName"),
+ n_("jaxx.demo.label.lastName.tip"),
+ n_("jaxx.demo.label.age"),
+ n_("jaxx.demo.label.age.tip"));
+
+ SwingUtil.fixTableColumnWidth(dataTable, 3, 35);
+
+ // register validator
+ ui.getErrorTableModel().registerValidator(ui.getValidator());
+
+ // customize error table
+
+ JTable errorTable = ui.getErrorTable();
+
+ SwingValidatorUtil.installUI(errorTable, new SwingListValidatorMessageTableRenderer() {
+
+ private static final long serialVersionUID = 1L;
+
+ Decorator<People> decorator
+ = new DemoDecoratorProvider().getDecoratorByType(People.class);
+
+ @Override
+ protected String decorateBean(Object bean) {
+ return decorator.toString(bean);
+ }
+ });
+
+ IdentityValidatorDataLocator dataLocator = new IdentityValidatorDataLocator();
+
+ // add click listener to go to cell
+ errorTable.addMouseListener(new SwingListValidatorMessageTableMouseListener(
+ dataTable,
+ dataLocator
+ ));
+
+ ui.getModel().addTableModelListener(
+ new SwingListValidatorTableEditorModelListener<People>(ui.getValidator(), dataLocator));
+ }
+
+ public void addIdentity() {
+
+ People bean = new People();
+ bean.setId(UUID.randomUUID().toString());
+
+ PeopleTableModel model = ui.getModel();
+ model.addBean(bean);
+
+ }
+
+ public void removeIdentity() {
+ int selectedRow = ui.getDataTable().getSelectedRow();
+ PeopleTableModel model = ui.getModel();
+ model.removeBean(selectedRow);
+ }
+
+ public void updateOkEnabled() {
+ SwingListValidatorMessageTableModel model = ui.getErrorTableModel();
+ BeanListValidator<People> validator = ui.getValidator();
+ boolean valid = !validator.hasErrors();
+ ui.getOk().setEnabled(valid);
+ }
+
+ private static class IdentityValidatorDataLocator implements SwingListValidatorDataLocator<People> {
+
+ @Override
+ public Pair<Integer, Integer> locateDataCell(TableModel tableModel,
+ People bean,
+ String fieldName) {
+ PeopleTableModel model = (PeopleTableModel) tableModel;
+
+ Pair<Integer, Integer> cell =
+ model.getCell((People) bean, fieldName);
+ return cell;
+ }
+
+ @Override
+ public int locateBeanRowIndex(TableModel tableModel, People bean) {
+ PeopleTableModel model = (PeopleTableModel) tableModel;
+ return model.getBeanIndex(bean);
+ }
+
+ @Override
+ public People locateBean(TableModel tableModel, int rowIndex) {
+ PeopleTableModel model =
+ (PeopleTableModel) tableModel;
+ return model.getBean(rowIndex);
+ }
+ }
+
+}
+
+
Added: trunk/jaxx-demo/src/main/java/jaxx/demo/feature/validation/list/PeopleTableModel.java
===================================================================
--- trunk/jaxx-demo/src/main/java/jaxx/demo/feature/validation/list/PeopleTableModel.java (rev 0)
+++ trunk/jaxx-demo/src/main/java/jaxx/demo/feature/validation/list/PeopleTableModel.java 2012-07-27 14:34:57 UTC (rev 2445)
@@ -0,0 +1,123 @@
+package jaxx.demo.feature.validation.list;
+
+import com.google.common.collect.Lists;
+import jaxx.demo.entities.Identity;
+import jaxx.demo.entities.People;
+import jaxx.runtime.SwingUtil;
+import org.apache.commons.lang3.tuple.Pair;
+
+import javax.swing.table.AbstractTableModel;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * Table model of {@link Identity}.
+ *
+ * @author tchemit <chemit(a)codelutin.com>
+ * @since 2.5.3
+ */
+public class PeopleTableModel extends AbstractTableModel {
+
+ private static final long serialVersionUID = 1L;
+
+ public static final List<String> columnNames =
+ Arrays.asList(People.PROPERTY_ID,
+ People.PROPERTY_FIRST_NAME,
+ People.PROPERTY_LAST_NAME,
+ People.PROPERTY_AGE);
+
+ public static final Class<?>[] columnClasses =
+ {String.class, String.class, Integer.class};
+
+ private final List<People> data = Lists.newArrayList();
+
+ @Override
+ public int getRowCount() {
+ return data.size();
+ }
+
+ @Override
+ public int getColumnCount() {
+ return columnNames.size();
+ }
+
+ @Override
+ public boolean isCellEditable(int rowIndex, int columnIndex) {
+ return columnIndex > 0;
+ }
+
+ @Override
+ public Object getValueAt(int rowIndex, int columnIndex) {
+
+ SwingUtil.ensureColumnIndex(this, columnIndex);
+ SwingUtil.ensureRowIndex(this, rowIndex);
+
+ People row = data.get(rowIndex);
+ if (columnIndex == 0) {
+ return row.getId();
+ }
+ if (columnIndex == 1) {
+ return row.getFirstName();
+ }
+ if (columnIndex == 2) {
+ return row.getLastName();
+ }
+ if (columnIndex == 3) {
+ return row.getAge();
+ }
+
+ // should never come here
+ return null;
+ }
+
+ @Override
+ public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
+ SwingUtil.ensureColumnIndex(this, columnIndex);
+ SwingUtil.ensureRowIndex(this, rowIndex);
+
+ People row = data.get(rowIndex);
+
+ if (columnIndex == 0) {
+ row.setId(String.valueOf(aValue));
+ } else if (columnIndex == 1) {
+ row.setFirstName(String.valueOf(aValue));
+ } else if (columnIndex == 2) {
+ row.setLastName(String.valueOf(aValue));
+ } else if (columnIndex == 3) {
+ row.setAge(Integer.valueOf(aValue.toString()));
+ }
+ }
+
+
+ public int getBeanIndex(People bean) {
+ int row = data.indexOf(bean);
+ return row;
+ }
+
+ public People getBean(int row) {
+ SwingUtil.ensureRowIndex(this, row);
+ People bean = data.get(row);
+ return bean;
+ }
+
+ public Pair<Integer, Integer> getCell(People bean, String fieldName) {
+
+ int row = getBeanIndex(bean);
+ int col = columnNames.indexOf(fieldName);
+
+ Pair<Integer, Integer> cell = Pair.of(row, col);
+ return cell;
+ }
+
+ public void removeBean(int selectedRow) {
+ SwingUtil.ensureRowIndex(this, selectedRow);
+ data.remove(selectedRow);
+ fireTableRowsDeleted(selectedRow, selectedRow);
+ }
+
+ public void addBean(People bean) {
+ data.add(bean);
+ int newrowIndex = data.size() - 1;
+ fireTableRowsInserted(newrowIndex, newrowIndex);
+ }
+}
Copied: trunk/jaxx-demo/src/main/java/jaxx/demo/feature/validation/simple/SimpleBeanValidationByListDemo.jaxx (from rev 2442, trunk/jaxx-demo/src/main/java/jaxx/demo/feature/validation/ValidationListDemo.jaxx)
===================================================================
--- trunk/jaxx-demo/src/main/java/jaxx/demo/feature/validation/simple/SimpleBeanValidationByListDemo.jaxx (rev 0)
+++ trunk/jaxx-demo/src/main/java/jaxx/demo/feature/validation/simple/SimpleBeanValidationByListDemo.jaxx 2012-07-27 14:34:57 UTC (rev 2445)
@@ -0,0 +1,372 @@
+<!--
+ #%L
+ JAXX :: Demo
+
+ $Id$
+ $HeadURL$
+ %%
+ Copyright (C) 2008 - 2010 CodeLutin
+ %%
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation, either version 3 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 Lesser Public License for more details.
+
+ You should have received a copy of the GNU General Lesser Public
+ License along with this program. If not, see
+ <http://www.gnu.org/licenses/lgpl-3.0.html>.
+ #L%
+ -->
+
+<jaxx.demo.DemoPanel layout='{new BorderLayout()}'>
+ <style source="Validation.css"/>
+
+ <import>
+ javax.swing.JOptionPane
+ static org.nuiton.i18n.I18n.n_
+ jaxx.demo.entities.Identity
+ jaxx.demo.entities.Model
+ jaxx.runtime.validator.swing.SwingValidatorMessageListRenderer
+ jaxx.runtime.validator.swing.SwingValidatorMessageListModel
+
+ java.io.File
+ </import>
+
+ <script><![CDATA[
+
+void $afterCompleteSetup() {
+}
+
+@Override
+protected String[] getSources() {
+ return new String[]{ getDefaultSource(), "Validation.css",
+ "Identity.java", "Identity-error-validation.xml", "Identity-info-validation.xml", "Identity-warning-validation.xml",
+ "Model.java", "Model-error-validation.xml", "Model-info-validation.xml", "Model-warning-validation.xml"
+ };
+}
+]]>
+ </script>
+ <!-- models -->
+ <Model id='model1'/>
+ <Model id='model2'/>
+ <Identity id='identity'/>
+
+ <!-- errors model -->
+ <SwingValidatorMessageListModel id='errorListModel'
+ onContentsChanged='ok.setEnabled(errorListModel.isEmpty())'/>
+
+ <!-- validators -->
+ <BeanValidator id='validator' bean='model1'
+ uiClass="jaxx.runtime.validator.swing.ui.ImageValidationUI">
+ <field name="text"/>
+ <field name="text2"/>
+ <field name="ratio"/>
+ </BeanValidator>
+ <BeanValidator id='validator2' bean='model2'
+ uiClass="jaxx.runtime.validator.swing.ui.IconValidationUI">
+ <field name="text" component="_text"/>
+ <field name="text2" component="_text2"/>
+ <field name="ratio" component="_ratio"/>
+ </BeanValidator>
+ <BeanValidator id='validator3' autoField='true' bean='identity'
+ uiClass="jaxx.runtime.validator.swing.ui.TranslucentValidationUI">
+ <field name="email" component="email2"/>
+ </BeanValidator>
+
+ <Table fill='both' constraints='BorderLayout.CENTER'>
+ <row>
+ <cell weightx='1' weighty='1' insets='6, 3, 0, 0'>
+ <JPanel border='{BorderFactory.createTitledBorder("Form")}'
+ layout='{new GridLayout()}' width='250' height='120'>
+ <Table anchor='west' fill='both'>
+ <row>
+ <cell>
+ <JLabel text='Text:'/>
+ </cell>
+ <cell weightx='1'>
+ <JTextField id='text' text='{model1.getText()}'
+ _validatorLabel='{n_("form.text")}'
+ onKeyReleased='model1.setText(text.getText())'/>
+ </cell>
+ </row>
+ <row>
+ <cell>
+ <JLabel text='Text2:'/>
+ </cell>
+ <cell weightx='1'>
+ <JTextField id='text2' text='{model1.getText2()}'
+ _validatorLabel='{n_("form.text2")}'
+ onKeyReleased='model1.setText2(text2.getText())'/>
+ </cell>
+ </row>
+
+ <row>
+ <cell>
+ <JLabel text='Ratio:'/>
+ </cell>
+ <cell>
+ <JSlider id='ratio' minimum='0' maximum='100'
+ value='{model1.getRatio()}'
+ _validatorLabel='{n_("form.ratio")}'
+ onStateChanged='model1.setRatio(ratio.getValue())'/>
+ </cell>
+ </row>
+ </Table>
+ </JPanel>
+ </cell>
+ <cell weightx='1' weighty='1' insets='6, 3, 0, 0'>
+ <JPanel border='{BorderFactory.createTitledBorder("Model")}'
+ layout='{new GridLayout()}' width='250' height='120'>
+ <Table anchor='west' fill='both'>
+ <row>
+ <cell>
+ <JLabel text='Text:'/>
+ </cell>
+ <cell weightx='1'>
+ <JLabel text='{model1.getText()}'/>
+ </cell>
+ </row>
+ <row>
+ <cell>
+ <JLabel text='Text2:'/>
+ </cell>
+ <cell weightx='1'>
+ <JLabel text='{model1.getText2()}'/>
+ </cell>
+ </row>
+
+ <row>
+ <cell>
+ <JLabel text='Ratio:'/>
+ </cell>
+ <cell>
+ <JLabel text='{model1.getRatio()+""}'/>
+ </cell>
+ </row>
+ </Table>
+ </JPanel>
+ </cell>
+ </row>
+ <row>
+ <cell weightx='1' weighty='1' insets='6, 3, 0, 0'>
+ <JPanel border='{BorderFactory.createTitledBorder("Form2")}'
+ layout='{new GridLayout()}' width='250' height='120'>
+ <Table anchor='west' fill='both'>
+ <row>
+ <cell>
+ <JLabel text='Text:'/>
+ </cell>
+ <cell weightx='1'>
+ <JTextField id='_text' text='{model2.getText()}'
+ _validatorLabel='{n_("form2.text")}'
+ onKeyReleased='model2.setText(_text.getText())'/>
+ </cell>
+ </row>
+ <row>
+ <cell>
+ <JLabel text='Text2:'/>
+ </cell>
+ <cell weightx='1'>
+ <JTextField id='_text2' text='{model2.getText2()}'
+ _validatorLabel='{n_("form2.text2")}'
+ onKeyReleased='model2.setText2(_text2.getText())'/>
+ </cell>
+ </row>
+
+ <row>
+ <cell>
+ <JLabel text='Ratio:'/>
+ </cell>
+ <cell>
+ <JSlider id='_ratio' minimum='0' maximum='100'
+ value='{model2.getRatio()}'
+ _validatorLabel='{n_("form2.ratio")}'
+ onStateChanged='model2.setRatio(_ratio.getValue())'/>
+ </cell>
+ </row>
+ </Table>
+ </JPanel>
+ </cell>
+ <cell weightx='1' weighty='1' insets='6, 3, 0, 0'>
+ <JPanel border='{BorderFactory.createTitledBorder("Model2")}'
+ layout='{new GridLayout()}' width='250' height='120'>
+ <Table anchor='west' fill='both'>
+ <row>
+ <cell>
+ <JLabel text='Text:'/>
+ </cell>
+ <cell weightx='1'>
+ <JLabel text='{model2.getText()}'/>
+ </cell>
+ </row>
+ <row>
+ <cell>
+ <JLabel text='Text2:'/>
+ </cell>
+ <cell weightx='1'>
+ <JLabel text='{model2.getText2()}'/>
+ </cell>
+ </row>
+
+ <row>
+ <cell>
+ <JLabel text='Ratio:'/>
+ </cell>
+ <cell>
+ <JLabel text='{model2.getRatio()+""}'/>
+ </cell>
+ </row>
+ </Table>
+ </JPanel>
+ </cell>
+ </row>
+ <row>
+ <cell weightx='1' weighty='1' insets='6, 3, 0, 0'>
+ <JPanel border='{BorderFactory.createTitledBorder("Identify Form")}'
+ layout='{new GridLayout()}' width='250' height='180'>
+ <Table anchor='west' fill='both'>
+ <row>
+ <cell>
+ <JLabel text='FirstName:'/>
+ </cell>
+ <cell weightx='1'>
+ <JTextField id='firstName' text='{identity.getFirstName()}'
+ onKeyReleased='identity.setFirstName(firstName.getText())'/>
+ </cell>
+ </row>
+ <row>
+ <cell>
+ <JLabel text='LastName:'/>
+ </cell>
+ <cell weightx='1'>
+ <JTextField id='lastName' text='{identity.getLastName()}'
+ onKeyReleased='identity.setLastName(lastName.getText())'/>
+ </cell>
+ </row>
+ <row>
+ <cell>
+ <JLabel text='Email:'/>
+ </cell>
+ <cell weightx='1'>
+ <JTextField id='email2' text='{identity.getEmail()}'
+ onKeyReleased='identity.setEmail(email2.getText())'/>
+ </cell>
+ </row>
+
+ <row>
+ <cell>
+ <JLabel text='Age:'/>
+ </cell>
+ <cell>
+ <JSlider id='age' minimum='0' maximum='100'
+ value='{identity.getAge()}'
+ onStateChanged='identity.setAge(age.getValue())'/>
+ </cell>
+ </row>
+ <row>
+ <cell>
+ <JLabel text='Config file :'/>
+ </cell>
+ <cell>
+ <JTextField id='config' text='{identity.getConfig()+""}'
+ onKeyReleased='identity.setConfig(new File(config.getText()))'/>
+ </cell>
+ </row>
+ <row>
+ <cell>
+ <JLabel text='Working directory:'/>
+ </cell>
+ <cell>
+ <JTextField id='dir' text='{identity.getDir()+""}'
+ onKeyReleased='identity.setDir(new File(dir.getText()))'/>
+ </cell>
+ </row>
+ </Table>
+ </JPanel>
+ </cell>
+ <cell weightx='1' weighty='1' insets='6, 3, 0, 0'>
+ <JPanel border='{BorderFactory.createTitledBorder("Identity Model")}'
+ layout='{new GridLayout()}' width='250' height='120'>
+ <Table anchor='west' fill='both'>
+ <row>
+ <cell>
+ <JLabel text='FirstName:'/>
+ </cell>
+ <cell weightx='1'>
+ <JLabel text='{identity.getFirstName()}'/>
+ </cell>
+ </row>
+ <row>
+ <cell>
+ <JLabel text='LastName:'/>
+ </cell>
+ <cell weightx='1'>
+ <JLabel text='{identity.getLastName()}'/>
+ </cell>
+ </row>
+ <row>
+ <cell>
+ <JLabel text='Email:'/>
+ </cell>
+ <cell weightx='1'>
+ <JLabel text='{identity.getEmail()}'/>
+ </cell>
+ </row>
+ <row>
+ <cell>
+ <JLabel text='Age:'/>
+ </cell>
+ <cell>
+ <JLabel text='{identity.getAge()+""}'/>
+ </cell>
+ </row>
+ <row>
+ <cell>
+ <JLabel text='Config file:'/>
+ </cell>
+ <cell>
+ <JLabel text='{identity.getConfig()+""}'/>
+ </cell>
+ </row>
+ <row>
+ <cell>
+ <JLabel text='Directory file:'/>
+ </cell>
+ <cell>
+ <JLabel text='{identity.getDir()+""}'/>
+ </cell>
+ </row>
+ </Table>
+ </JPanel>
+ </cell>
+ </row>
+ <row>
+ <cell columns='2' fill="both">
+ <JPanel border='{BorderFactory.createTitledBorder("Messages")}'
+ layout='{new GridLayout()}' height='200'
+ width='500'>
+ <JScrollPane>
+ <JList id='errorList' model='{errorListModel}'
+ cellRenderer='{new SwingValidatorMessageListRenderer()}'/>
+ </JScrollPane>
+ </JPanel>
+ </cell>
+ </row>
+ <row>
+ <cell columns='2' fill="both">
+ <JPanel layout='{new GridLayout(1,2,0,0)}'>
+ <JButton id='cancel' text='cancel'
+ onActionPerformed='JOptionPane.showMessageDialog(this, cancel.getText() + " clicked!", "onActionPerformed", JOptionPane.INFORMATION_MESSAGE);'/>
+ <JButton id='ok' text='valid'
+ onActionPerformed='JOptionPane.showMessageDialog(this, ok.getText() + " clicked!", "onActionPerformed", JOptionPane.INFORMATION_MESSAGE);'/>
+ </JPanel>
+ </cell>
+ </row>
+ </Table>
+
+</jaxx.demo.DemoPanel>
Property changes on: trunk/jaxx-demo/src/main/java/jaxx/demo/feature/validation/simple/SimpleBeanValidationByListDemo.jaxx
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Added: svn:eol-style
+ native
Copied: trunk/jaxx-demo/src/main/java/jaxx/demo/feature/validation/simple/SimpleBeanValidationByTableDemo.jaxx (from rev 2442, trunk/jaxx-demo/src/main/java/jaxx/demo/feature/validation/ValidationTableDemo.jaxx)
===================================================================
--- trunk/jaxx-demo/src/main/java/jaxx/demo/feature/validation/simple/SimpleBeanValidationByTableDemo.jaxx (rev 0)
+++ trunk/jaxx-demo/src/main/java/jaxx/demo/feature/validation/simple/SimpleBeanValidationByTableDemo.jaxx 2012-07-27 14:34:57 UTC (rev 2445)
@@ -0,0 +1,377 @@
+<!--
+ #%L
+ JAXX :: Demo
+
+ $Id$
+ $HeadURL$
+ %%
+ Copyright (C) 2008 - 2010 CodeLutin
+ %%
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as
+ published by the Free Software Foundation, either version 3 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 Lesser Public License for more details.
+
+ You should have received a copy of the GNU General Lesser Public
+ License along with this program. If not, see
+ <http://www.gnu.org/licenses/lgpl-3.0.html>.
+ #L%
+ -->
+
+<jaxx.demo.DemoPanel layout='{new BorderLayout()}'>
+ <style source="Validation.css"/>
+
+ <import>
+ javax.swing.JOptionPane
+ static org.nuiton.i18n.I18n.n_
+ jaxx.demo.entities.Identity
+ jaxx.demo.entities.Model
+ jaxx.runtime.validator.swing.SwingValidatorUtil
+ jaxx.runtime.validator.swing.SwingValidatorMessageTableRenderer
+ jaxx.runtime.validator.swing.SwingValidatorMessageTableModel
+
+ java.io.File
+ </import>
+
+ <script><![CDATA[
+void $afterCompleteSetup() {
+ SwingValidatorUtil.installUI(errorTable, new SwingValidatorMessageTableRenderer());
+}
+
+@Override
+protected String[] getSources() {
+ return new String[]{ getDefaultSource(), "Validation.css",
+ "Identity.java", "Identity-error-validation.xml", "Identity-info-validation.xml", "Identity-warning-validation.xml",
+ "Model.java", "Model-error-validation.xml", "Model-info-validation.xml", "Model-warning-validation.xml"
+ };
+}
+]]></script>
+
+ <!-- models -->
+ <Model id='model1'/>
+ <Model id='model2'/>
+ <Identity id='identity'/>
+
+ <!-- errors model -->
+ <SwingValidatorMessageTableModel id='errorTableModel'
+ onTableChanged='ok.setEnabled(errorTableModel.getRowCount()==0)'/>
+
+ <!-- validators -->
+ <BeanValidator id='validator' bean='model1'
+ uiClass="jaxx.runtime.validator.swing.ui.ImageValidationUI">
+ <field name="text"/>
+ <field name="text2"/>
+ <field name="ratio"/>
+ </BeanValidator>
+ <BeanValidator id='validator2' bean='model2'
+ uiClass="jaxx.runtime.validator.swing.ui.IconValidationUI">
+ <field name="text" component="_text"/>
+ <field name="text2" component="_text2"/>
+ <field name="ratio" component="_ratio"/>
+ </BeanValidator>
+ <BeanValidator id='validator3' autoField='true' bean='identity'
+ uiClass="jaxx.runtime.validator.swing.ui.TranslucentValidationUI">
+ <field name="email" component="email2"/>
+ </BeanValidator>
+
+ <Table fill='both' constraints='BorderLayout.CENTER'>
+ <row>
+ <cell weightx='1' weighty='1' insets='6, 3, 0, 0'>
+ <JPanel border='{BorderFactory.createTitledBorder("Form")}'
+ layout='{new GridLayout()}' width='250' height='120'>
+ <Table anchor='west' fill='both'>
+ <row>
+ <cell>
+ <JLabel text='Text:'/>
+ </cell>
+ <cell weightx='1'>
+ <JTextField id='text' text='{model1.getText()}'
+ onKeyReleased='model1.setText(text.getText())'
+ _validatorLabel='{n_("form.text")}'
+ />
+ </cell>
+ </row>
+ <row>
+ <cell>
+ <JLabel text='Text2:'/>
+ </cell>
+ <cell weightx='1'>
+ <JTextField id='text2' text='{model1.getText2()}'
+ onKeyReleased='model1.setText2(text2.getText())'
+ _validatorLabel='{n_("form.text2")}'
+ />
+ </cell>
+ </row>
+
+ <row>
+ <cell>
+ <JLabel text='Ratio:'/>
+ </cell>
+ <cell>
+ <JSlider id='ratio' minimum='0' maximum='100'
+ value='{model1.getRatio()}'
+ _validatorLabel='{n_("form.ratio")}'
+ onStateChanged='model1.setRatio(ratio.getValue())'/>
+ </cell>
+ </row>
+ </Table>
+ </JPanel>
+ </cell>
+ <cell weightx='1' weighty='1' insets='6, 3, 0, 0'>
+ <JPanel border='{BorderFactory.createTitledBorder("Model")}'
+ layout='{new GridLayout()}' width='250' height='120'>
+ <Table anchor='west' fill='both'>
+ <row>
+ <cell>
+ <JLabel text='Text:'/>
+ </cell>
+ <cell weightx='1'>
+ <JLabel text='{model1.getText()}'/>
+ </cell>
+ </row>
+ <row>
+ <cell>
+ <JLabel text='Text2:'/>
+ </cell>
+ <cell weightx='1'>
+ <JLabel text='{model1.getText2()}'/>
+ </cell>
+ </row>
+
+ <row>
+ <cell>
+ <JLabel text='Ratio:'/>
+ </cell>
+ <cell>
+ <JLabel text='{model1.getRatio()+""}'/>
+ </cell>
+ </row>
+ </Table>
+ </JPanel>
+ </cell>
+ </row>
+ <row>
+ <cell weightx='1' weighty='1' insets='6, 3, 0, 0'>
+ <JPanel border='{BorderFactory.createTitledBorder("Form2")}'
+ layout='{new GridLayout()}' width='250' height='120'>
+ <Table anchor='west' fill='both'>
+ <row>
+ <cell>
+ <JLabel text='Text:'/>
+ </cell>
+ <cell weightx='1'>
+ <JTextField id='_text' text='{model2.getText()}'
+ _validatorLabel='{n_("form2.text")}'
+ onKeyReleased='model2.setText(_text.getText())'/>
+ </cell>
+ </row>
+ <row>
+ <cell>
+ <JLabel text='Text2:'/>
+ </cell>
+ <cell weightx='1'>
+ <JTextField id='_text2' text='{model2.getText2()}'
+ _validatorLabel='{n_("form2.text2")}'
+ onKeyReleased='model2.setText2(_text2.getText())'/>
+ </cell>
+ </row>
+
+ <row>
+ <cell>
+ <JLabel text='Ratio:'/>
+ </cell>
+ <cell>
+ <JSlider id='_ratio' minimum='0' maximum='100'
+ value='{model2.getRatio()}'
+ _validatorLabel='{n_("form2.ratio")}'
+ onStateChanged='model2.setRatio(_ratio.getValue())'/>
+ </cell>
+ </row>
+ </Table>
+ </JPanel>
+ </cell>
+ <cell weightx='1' weighty='1' insets='6, 3, 0, 0'>
+ <JPanel border='{BorderFactory.createTitledBorder("Model2")}'
+ layout='{new GridLayout()}' width='250' height='120'>
+ <Table anchor='west' fill='both'>
+ <row>
+ <cell>
+ <JLabel text='Text:'/>
+ </cell>
+ <cell weightx='1'>
+ <JLabel text='{model2.getText()}'/>
+ </cell>
+ </row>
+ <row>
+ <cell>
+ <JLabel text='Text2:'/>
+ </cell>
+ <cell weightx='1'>
+ <JLabel text='{model2.getText2()}'/>
+ </cell>
+ </row>
+
+ <row>
+ <cell>
+ <JLabel text='Ratio:'/>
+ </cell>
+ <cell>
+ <JLabel text='{model2.getRatio()+""}'/>
+ </cell>
+ </row>
+ </Table>
+ </JPanel>
+ </cell>
+ </row>
+ <row>
+ <cell weightx='1' weighty='1' insets='6, 3, 0, 0'>
+ <JPanel border='{BorderFactory.createTitledBorder("Identify Form")}'
+ layout='{new GridLayout()}' width='250' height='180'>
+ <Table anchor='west' fill='both'>
+ <row>
+ <cell>
+ <JLabel text='FirstName:'/>
+ </cell>
+ <cell weightx='1'>
+ <JTextField id='firstName' text='{identity.getFirstName()}'
+ onKeyReleased='identity.setFirstName(firstName.getText())'/>
+ </cell>
+ </row>
+ <row>
+ <cell>
+ <JLabel text='LastName:'/>
+ </cell>
+ <cell weightx='1'>
+ <JTextField id='lastName' text='{identity.getLastName()}'
+ onKeyReleased='identity.setLastName(lastName.getText())'/>
+ </cell>
+ </row>
+ <row>
+ <cell>
+ <JLabel text='Email:'/>
+ </cell>
+ <cell weightx='1'>
+ <JTextField id='email2' text='{identity.getEmail()}'
+ onKeyReleased='identity.setEmail(email2.getText())'/>
+ </cell>
+ </row>
+
+ <row>
+ <cell>
+ <JLabel text='Age:'/>
+ </cell>
+ <cell>
+ <JSlider id='age' minimum='0' maximum='100'
+ value='{identity.getAge()}'
+ onStateChanged='identity.setAge(age.getValue())'/>
+ </cell>
+ </row>
+ <row>
+ <cell>
+ <JLabel text='Config file :'/>
+ </cell>
+ <cell>
+ <JTextField id='config' text='{identity.getConfig()+""}'
+ onKeyReleased='identity.setConfig(new File(config.getText()))'/>
+ </cell>
+ </row>
+ <row>
+ <cell>
+ <JLabel text='Working directory:'/>
+ </cell>
+ <cell>
+ <JTextField id='dir' text='{identity.getDir()+""}'
+ onKeyReleased='identity.setDir(new File(dir.getText()))'/>
+ </cell>
+ </row>
+ </Table>
+ </JPanel>
+ </cell>
+ <cell weightx='1' weighty='1' insets='6, 3, 0, 0'>
+ <JPanel border='{BorderFactory.createTitledBorder("Identity Model")}'
+ layout='{new GridLayout()}' width='250' height='120'>
+ <Table anchor='west' fill='both'>
+ <row>
+ <cell>
+ <JLabel text='FirstName:'/>
+ </cell>
+ <cell weightx='1'>
+ <JLabel text='{identity.getFirstName()}'/>
+ </cell>
+ </row>
+ <row>
+ <cell>
+ <JLabel text='LastName:'/>
+ </cell>
+ <cell weightx='1'>
+ <JLabel text='{identity.getLastName()}'/>
+ </cell>
+ </row>
+ <row>
+ <cell>
+ <JLabel text='Email:'/>
+ </cell>
+ <cell weightx='1'>
+ <JLabel text='{identity.getEmail()}'/>
+ </cell>
+ </row>
+ <row>
+ <cell>
+ <JLabel text='Age:'/>
+ </cell>
+ <cell>
+ <JLabel text='{identity.getAge()+""}'/>
+ </cell>
+ </row>
+ <row>
+ <cell>
+ <JLabel text='Config file:'/>
+ </cell>
+ <cell>
+ <JLabel text='{identity.getConfig()+""}'/>
+ </cell>
+ </row>
+ <row>
+ <cell>
+ <JLabel text='Directory file:'/>
+ </cell>
+ <cell>
+ <JLabel text='{identity.getDir()+""}'/>
+ </cell>
+ </row>
+ </Table>
+ </JPanel>
+ </cell>
+ </row>
+ <row>
+ <cell columns='2' fill="both">
+ <JPanel border='{BorderFactory.createTitledBorder("Messages")}'
+ layout='{new GridLayout()}' height='200'
+ width='500'>
+ <JScrollPane columnHeaderView='{errorTable.getTableHeader()}'>
+ <JTable id='errorTable' model='{errorTableModel}' rowSelectionAllowed='true'
+ autoCreateRowSorter='true'
+ autoResizeMode='2' cellSelectionEnabled='false'
+ selectionMode='0'/>
+ </JScrollPane>
+ </JPanel>
+ </cell>
+ </row>
+ <row>
+ <cell columns='2' fill="both">
+ <JPanel layout='{new GridLayout(1,2,0,0)}'>
+ <JButton id='cancel' text='cancel'
+ onActionPerformed='JOptionPane.showMessageDialog(this, cancel.getText() + " clicked!", "onActionPerformed", JOptionPane.INFORMATION_MESSAGE);'/>
+ <JButton id='ok' text='valid'
+ onActionPerformed='JOptionPane.showMessageDialog(this, ok.getText() + " clicked!", "onActionPerformed", JOptionPane.INFORMATION_MESSAGE);'/>
+ </JPanel>
+ </cell>
+ </row>
+ </Table>
+
+</jaxx.demo.DemoPanel>
Property changes on: trunk/jaxx-demo/src/main/java/jaxx/demo/feature/validation/simple/SimpleBeanValidationByTableDemo.jaxx
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Added: svn:eol-style
+ native
Copied: trunk/jaxx-demo/src/main/java/jaxx/demo/feature/validation/simple/Validation.css (from rev 2442, trunk/jaxx-demo/src/main/java/jaxx/demo/feature/validation/Validation.css)
===================================================================
--- trunk/jaxx-demo/src/main/java/jaxx/demo/feature/validation/simple/Validation.css (rev 0)
+++ trunk/jaxx-demo/src/main/java/jaxx/demo/feature/validation/simple/Validation.css 2012-07-27 14:34:57 UTC (rev 2445)
@@ -0,0 +1,29 @@
+/*
+ * #%L
+ * JAXX :: Demo
+ *
+ * $Id$
+ * $HeadURL$
+ * %%
+ * Copyright (C) 2008 - 2010 CodeLutin
+ * %%
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation, either version 3 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 Lesser Public License for more details.
+ *
+ * You should have received a copy of the GNU General Lesser Public
+ * License along with this program. If not, see
+ * <http://www.gnu.org/licenses/lgpl-3.0.html>.
+ * #L%
+ */
+JSlider {
+ paintTicks: true;
+ minorTickSpacing: 5;
+ majorTickSpacing: 10;
+}
Property changes on: trunk/jaxx-demo/src/main/java/jaxx/demo/feature/validation/simple/Validation.css
___________________________________________________________________
Added: svn:keywords
+ Author Date Id Revision HeadURL
Added: svn:eol-style
+ native
Modified: trunk/jaxx-demo/src/main/java/jaxx/demo/tree/DemoDataProvider.java
===================================================================
--- trunk/jaxx-demo/src/main/java/jaxx/demo/tree/DemoDataProvider.java 2012-07-27 14:34:35 UTC (rev 2444)
+++ trunk/jaxx-demo/src/main/java/jaxx/demo/tree/DemoDataProvider.java 2012-07-27 14:34:57 UTC (rev 2445)
@@ -25,17 +25,13 @@
package jaxx.demo.tree;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
import jaxx.demo.component.jaxx.BoxedDecoratorDemo;
import jaxx.demo.component.jaxx.StatusMessagePanelDemo;
import jaxx.demo.component.jaxx.editor.ComboEditorDemo;
import jaxx.demo.component.jaxx.editor.DatePickerDemo;
import jaxx.demo.component.jaxx.editor.FileEditorDemo;
+import jaxx.demo.component.jaxx.editor.I18nEditorDemo;
import jaxx.demo.component.jaxx.editor.ListSelectorDemo;
-import jaxx.demo.component.jaxx.editor.I18nEditorDemo;
import jaxx.demo.component.jaxx.editor.NumberEditorDemo;
import jaxx.demo.component.jaxx.editor.TimeEditorDemo;
import jaxx.demo.component.swing.HidorButtonDemo;
@@ -59,8 +55,9 @@
import jaxx.demo.feature.databinding.BeanDataBindingDemo;
import jaxx.demo.feature.databinding.BindingExtremeDemo;
import jaxx.demo.feature.nav.NavDemo;
-import jaxx.demo.feature.validation.ValidationListDemo;
-import jaxx.demo.feature.validation.ValidationTableDemo;
+import jaxx.demo.feature.validation.simple.SimpleBeanValidationByListDemo;
+import jaxx.demo.feature.validation.simple.SimpleBeanValidationByTableDemo;
+import jaxx.demo.feature.validation.list.ListBeanValidationDemo;
import jaxx.demo.fun.CalculatorDemo;
import jaxx.demo.fun.CounterDemo;
import jaxx.demo.fun.LabelStyleDemo;
@@ -68,6 +65,11 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
import static org.nuiton.i18n.I18n.n_;
/**
@@ -172,10 +174,18 @@
);
addMapping(n_("jaxxdemo.feature.validation"),
- ValidationListDemo.class,
- ValidationTableDemo.class
+ n_("jaxxdemo.feature.simple.validation"),
+ n_("jaxxdemo.feature.list.validation")
);
+ addMapping(n_("jaxxdemo.feature.simple.validation"),
+ SimpleBeanValidationByListDemo.class,
+ SimpleBeanValidationByTableDemo.class
+ );
+
+ addMapping(n_("jaxxdemo.feature.list.validation"),
+ ListBeanValidationDemo.class
+ );
addMapping(n_("jaxxdemo.feature.nav"),
NavDemo.class
);
Modified: trunk/jaxx-demo/src/main/resources/i18n/jaxx-demo_en_GB.properties
===================================================================
--- trunk/jaxx-demo/src/main/resources/i18n/jaxx-demo_en_GB.properties 2012-07-27 14:34:35 UTC (rev 2444)
+++ trunk/jaxx-demo/src/main/resources/i18n/jaxx-demo_en_GB.properties 2012-07-27 14:34:57 UTC (rev 2445)
@@ -135,6 +135,17 @@
isF0()\ &&\ isF1()=
isF0()\ ||\ isF1()=
isF1()=
+jaxx.demo.action.add=Add
+jaxx.demo.action.ok=Ok
+jaxx.demo.action.remove=Remove
+jaxx.demo.label.age=Age
+jaxx.demo.label.age.tip=Age
+jaxx.demo.label.firstName=First name
+jaxx.demo.label.firstName.tip=First name
+jaxx.demo.label.id=Id
+jaxx.demo.label.id.tip=Identifiant
+jaxx.demo.label.lastName=Last name
+jaxx.demo.label.lastName.tip=Last name
jaxxdemo.about.message=<h3>JAXX Demo</h3><hr/>For more informations, visit the <a href\="http\://maven-site.nuiton.org/jaxx/jaxx-demo">website of the project</a>.
jaxxdemo.action.about=About...
jaxxdemo.action.about.tip=About JAXXDemo...
@@ -194,7 +205,9 @@
jaxxdemo.datePickerEditor.showPopupButton=Display popup button
jaxxdemo.feature=Features
jaxxdemo.feature.databinding=Data Binding
+jaxxdemo.feature.list.validation=Multiple Bean Validation
jaxxdemo.feature.nav=Jaxx nav API
+jaxxdemo.feature.simple.validation=Simple Bean Validation
jaxxdemo.feature.validation=Validation
jaxxdemo.fileEditor.acceptAllFileFilterUsed=Allow all FileFilter
jaxxdemo.fileEditor.directoryEnabled=Enable directory selection
Modified: trunk/jaxx-demo/src/main/resources/i18n/jaxx-demo_es_ES.properties
===================================================================
--- trunk/jaxx-demo/src/main/resources/i18n/jaxx-demo_es_ES.properties 2012-07-27 14:34:35 UTC (rev 2444)
+++ trunk/jaxx-demo/src/main/resources/i18n/jaxx-demo_es_ES.properties 2012-07-27 14:34:57 UTC (rev 2445)
@@ -135,6 +135,20 @@
isF0()\ &&\ isF1()=
isF0()\ ||\ isF1()=
isF1()=
+jaxx.demo.action.add=
+jaxx.demo.action.ok=
+jaxx.demo.action.remove=
+jaxx.demo.label.age=
+jaxx.demo.label.age.tip=
+jaxx.demo.label.email=
+jaxx.demo.label.email.tip=
+jaxx.demo.label.firstName=
+jaxx.demo.label.firstName.tip=
+jaxx.demo.label.id=
+jaxx.demo.label.id.tip=
+jaxx.demo.label.lasstName.tip=
+jaxx.demo.label.lastName=
+jaxx.demo.label.lastName.tip=
jaxxdemo.about.message=<h3>JAXX Demo</h3><hr/>Pour plus d'informations, vous pouvez visiter le <a href\="http\://maven-site.nuiton.org/jaxx/jaxx-demo">site du projet</a>.
jaxxdemo.action.about=A propos
jaxxdemo.action.about.tip=A propos de JAXX Demo...
@@ -194,7 +208,9 @@
jaxxdemo.datePickerEditor.showPopupButton=Afficher le boutton pour ouvrir la popup
jaxxdemo.feature=Fonctionnalités
jaxxdemo.feature.databinding=Data binding
+jaxxdemo.feature.list.validation=
jaxxdemo.feature.nav=API JAXX pour les arbres
+jaxxdemo.feature.simple.validation=
jaxxdemo.feature.validation=Validation
jaxxdemo.fileEditor.acceptAllFileFilterUsed=Accèpte tout les FileFilter
jaxxdemo.fileEditor.directoryEnabled=Activer la sélection des files
Modified: trunk/jaxx-demo/src/main/resources/i18n/jaxx-demo_fr_FR.properties
===================================================================
--- trunk/jaxx-demo/src/main/resources/i18n/jaxx-demo_fr_FR.properties 2012-07-27 14:34:35 UTC (rev 2444)
+++ trunk/jaxx-demo/src/main/resources/i18n/jaxx-demo_fr_FR.properties 2012-07-27 14:34:57 UTC (rev 2445)
@@ -135,6 +135,17 @@
isF0()\ &&\ isF1()=
isF0()\ ||\ isF1()=
isF1()=
+jaxx.demo.action.add=Ajouter
+jaxx.demo.action.ok=Ok
+jaxx.demo.action.remove=Supprimer
+jaxx.demo.label.age=Age
+jaxx.demo.label.age.tip=Age
+jaxx.demo.label.firstName=Prénom
+jaxx.demo.label.firstName.tip=Prénom
+jaxx.demo.label.id=Id
+jaxx.demo.label.id.tip=Identifiant
+jaxx.demo.label.lastName=Nom
+jaxx.demo.label.lastName.tip=Nom
jaxxdemo.about.message=<h3>JAXX Demo</h3><hr/>Pour plus d'informations, vous pouvez visiter le <a href\="http\://maven-site.nuiton.org/jaxx/jaxx-demo">site du projet</a>.
jaxxdemo.action.about=A propos
jaxxdemo.action.about.tip=A propos de JAXX Demo...
@@ -194,7 +205,9 @@
jaxxdemo.datePickerEditor.showPopupButton=Afficher le boutton pour ouvrir la popup
jaxxdemo.feature=Fonctionnalités
jaxxdemo.feature.databinding=Data binding
+jaxxdemo.feature.list.validation=Validation de liste
jaxxdemo.feature.nav=API JAXX pour les arbres
+jaxxdemo.feature.simple.validation=Validation simple
jaxxdemo.feature.validation=Validation
jaxxdemo.fileEditor.acceptAllFileFilterUsed=Accèpte tout les FileFilter
jaxxdemo.fileEditor.directoryEnabled=Activer la sélection des files
Added: trunk/jaxx-demo/src/main/resources/jaxx/demo/entities/People-error-validation.xml
===================================================================
--- trunk/jaxx-demo/src/main/resources/jaxx/demo/entities/People-error-validation.xml (rev 0)
+++ trunk/jaxx-demo/src/main/resources/jaxx/demo/entities/People-error-validation.xml 2012-07-27 14:34:57 UTC (rev 2445)
@@ -0,0 +1,21 @@
+<!DOCTYPE validators PUBLIC
+ "-//Apache Struts//XWork Validator 1.0.3//EN"
+ "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">
+<validators>
+ <field name="firstName">
+ <field-validator type="requiredstring" short-circuit="true">
+ <message>You must enter a firstName.</message>
+ </field-validator>
+ </field>
+ <field name="lastName">
+ <field-validator type="requiredstring" short-circuit="true">
+ <message>You must enter a lastName.</message>
+ </field-validator>
+ </field>
+ <field name="age">
+ <field-validator type="int">
+ <param name="min">18</param>
+ <message>Your are too young (min ${min} )</message>
+ </field-validator>
+ </field>
+</validators>
\ No newline at end of file
Added: trunk/jaxx-demo/src/main/resources/jaxx/demo/entities/People-info-validation.xml
===================================================================
--- trunk/jaxx-demo/src/main/resources/jaxx/demo/entities/People-info-validation.xml (rev 0)
+++ trunk/jaxx-demo/src/main/resources/jaxx/demo/entities/People-info-validation.xml 2012-07-27 14:34:57 UTC (rev 2445)
@@ -0,0 +1,12 @@
+<!DOCTYPE validators PUBLIC
+ "-//Apache Struts//XWork Validator 1.0.3//EN"
+ "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">
+<validators>
+
+ <field name="age">
+ <field-validator type="int">
+ <param name="min">25</param>
+ <message>Info : You are still young ( old ${min} ) </message>
+ </field-validator>
+ </field>
+</validators>
\ No newline at end of file
Added: trunk/jaxx-demo/src/main/resources/jaxx/demo/entities/People-warning-validation.xml
===================================================================
--- trunk/jaxx-demo/src/main/resources/jaxx/demo/entities/People-warning-validation.xml (rev 0)
+++ trunk/jaxx-demo/src/main/resources/jaxx/demo/entities/People-warning-validation.xml 2012-07-27 14:34:57 UTC (rev 2445)
@@ -0,0 +1,12 @@
+<!DOCTYPE validators PUBLIC
+ "-//Apache Struts//XWork Validator 1.0.3//EN"
+ "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">
+<validators>
+
+ <field name="age">
+ <field-validator type="int">
+ <param name="max">88</param>
+ <message>Hum Your are older than ${max} !</message>
+ </field-validator>
+ </field>
+</validators>
\ No newline at end of file
Modified: trunk/jaxx-demo/src/main/resources/log4j.properties
===================================================================
--- trunk/jaxx-demo/src/main/resources/log4j.properties 2012-07-27 14:34:35 UTC (rev 2444)
+++ trunk/jaxx-demo/src/main/resources/log4j.properties 2012-07-27 14:34:57 UTC (rev 2445)
@@ -23,7 +23,7 @@
# #L%
###
# Global logging configuration
-log4j.rootLogger=ERROR, stdout, jaxxDemoAppender
+log4j.rootLogger=ERROR, stdout
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
Modified: trunk/jaxx-demo/src/test/java/jaxx/demo/BeanValidatorDetectorTest.java
===================================================================
--- trunk/jaxx-demo/src/test/java/jaxx/demo/BeanValidatorDetectorTest.java 2012-07-27 14:34:35 UTC (rev 2444)
+++ trunk/jaxx-demo/src/test/java/jaxx/demo/BeanValidatorDetectorTest.java 2012-07-27 14:34:57 UTC (rev 2445)
@@ -27,6 +27,7 @@
import jaxx.demo.entities.Identity;
import jaxx.demo.entities.Model;
+import jaxx.demo.entities.People;
import org.junit.Assert;
import org.junit.Test;
import org.nuiton.validator.AbstractValidatorDetectorTest;
@@ -52,12 +53,12 @@
NuitonValidator<?> validator;
Iterator<NuitonValidator<?>> iterator;
- // test with all context and all scopes : 2 validators (Identity+ Model)
+ // test with all context and all scopes
- result = detectValidators(Identity.class, Model.class);
+ result = detectValidators(Identity.class, Model.class, People.class);
Assert.assertNotNull(result);
- Assert.assertEquals(2, result.size());
+ Assert.assertEquals(3, result.size());
iterator = result.iterator();
@@ -73,6 +74,10 @@
assertValidatorEffectiveScopes(validator, NuitonValidatorScope.ERROR, NuitonValidatorScope.WARNING, NuitonValidatorScope.INFO);
// ValidatorTestHelper.assertValidatorEffectiveFields(validator, NuitonValidatorScope.ERROR, Pet.PROPERTY_NAME);
+ validator = iterator.next();
+ assertValidatorModel(validator, null, People.class, NuitonValidatorScope.values());
+ assertValidatorEffectiveScopes(validator, NuitonValidatorScope.ERROR, NuitonValidatorScope.WARNING, NuitonValidatorScope.INFO);
+
}
@Override
1
0
r2444 - in trunk/jaxx-validator/src/main: java/jaxx/runtime java/jaxx/runtime/validator/swing java/jaxx/runtime/validator/swing/ui resources/i18n
by tchemit@users.nuiton.org 27 Jul '12
by tchemit@users.nuiton.org 27 Jul '12
27 Jul '12
Author: tchemit
Date: 2012-07-27 16:34:35 +0200 (Fri, 27 Jul 2012)
New Revision: 2444
Url: http://nuiton.org/repositories/revision/jaxx/2444
Log:
refs #2210: Use new validation api from nuiton-utils
Added:
trunk/jaxx-validator/src/main/java/jaxx/runtime/validator/swing/SwingListValidatorDataLocator.java
trunk/jaxx-validator/src/main/java/jaxx/runtime/validator/swing/SwingListValidatorMessage.java
trunk/jaxx-validator/src/main/java/jaxx/runtime/validator/swing/SwingListValidatorMessageTableModel.java
trunk/jaxx-validator/src/main/java/jaxx/runtime/validator/swing/SwingListValidatorMessageTableMouseListener.java
trunk/jaxx-validator/src/main/java/jaxx/runtime/validator/swing/SwingListValidatorMessageTableRenderer.java
trunk/jaxx-validator/src/main/java/jaxx/runtime/validator/swing/SwingListValidatorTableEditorModelListener.java
Modified:
trunk/jaxx-validator/src/main/java/jaxx/runtime/JAXXValidator.java
trunk/jaxx-validator/src/main/java/jaxx/runtime/validator/swing/SwingValidator.java
trunk/jaxx-validator/src/main/java/jaxx/runtime/validator/swing/SwingValidatorMessage.java
trunk/jaxx-validator/src/main/java/jaxx/runtime/validator/swing/SwingValidatorMessageListModel.java
trunk/jaxx-validator/src/main/java/jaxx/runtime/validator/swing/SwingValidatorMessageTableModel.java
trunk/jaxx-validator/src/main/java/jaxx/runtime/validator/swing/SwingValidatorUtil.java
trunk/jaxx-validator/src/main/java/jaxx/runtime/validator/swing/ui/AbstractBeanValidatorUI.java
trunk/jaxx-validator/src/main/resources/i18n/jaxx-validator_en_GB.properties
trunk/jaxx-validator/src/main/resources/i18n/jaxx-validator_es_ES.properties
trunk/jaxx-validator/src/main/resources/i18n/jaxx-validator_fr_FR.properties
Modified: trunk/jaxx-validator/src/main/java/jaxx/runtime/JAXXValidator.java
===================================================================
--- trunk/jaxx-validator/src/main/java/jaxx/runtime/JAXXValidator.java 2012-07-27 14:33:56 UTC (rev 2443)
+++ trunk/jaxx-validator/src/main/java/jaxx/runtime/JAXXValidator.java 2012-07-27 14:34:35 UTC (rev 2444)
@@ -25,7 +25,6 @@
package jaxx.runtime;
-import org.nuiton.validator.bean.BeanValidator;
import jaxx.runtime.validator.swing.SwingValidator;
import javax.swing.JComponent;
@@ -44,7 +43,7 @@
* @param validatorId validator id
* @return the associated validator, or <code>null</code> if not find
*/
- BeanValidator<?> getValidator(String validatorId);
+ SwingValidator<?> getValidator(String validatorId);
/** @return the list of ids of all registred validator */
List<String> getValidatorIds();
Added: trunk/jaxx-validator/src/main/java/jaxx/runtime/validator/swing/SwingListValidatorDataLocator.java
===================================================================
--- trunk/jaxx-validator/src/main/java/jaxx/runtime/validator/swing/SwingListValidatorDataLocator.java (rev 0)
+++ trunk/jaxx-validator/src/main/java/jaxx/runtime/validator/swing/SwingListValidatorDataLocator.java 2012-07-27 14:34:35 UTC (rev 2444)
@@ -0,0 +1,43 @@
+package jaxx.runtime.validator.swing;
+
+import org.apache.commons.lang3.tuple.Pair;
+
+import javax.swing.table.TableModel;
+
+/**
+ * Object that can locate for a given {@link SwingListValidatorMessage},
+ * the cell of this data in a table editor.
+ *
+ * @author tchemit <chemit(a)codelutin.com>
+ * @since 2.5.3
+ */
+public interface SwingListValidatorDataLocator<O> {
+
+ /**
+ * Locate the cell of the given data.
+ *
+ * @param tableModel the table model where data are edited
+ * @param bean the bean to locate
+ * @param fieldName the field to locate
+ * @return the cell where to find data
+ */
+ Pair<Integer, Integer> locateDataCell(TableModel tableModel, O bean, String fieldName);
+
+ /**
+ * Locate the index of the row of the given bean.
+ *
+ * @param tableModel the table model where data are edited
+ * @param bean the bean to find
+ * @return the row index of the given bean in the table.
+ */
+ int locateBeanRowIndex(TableModel tableModel, O bean);
+
+ /**
+ * Locate the bean given his row index in the table.
+ *
+ * @param tableModel the table model where data are edited
+ * @param rowIndex the row index of the bean to find in the editor
+ * @return the bean corresponding to the given row index in the editor
+ */
+ O locateBean(TableModel tableModel, int rowIndex);
+}
Added: trunk/jaxx-validator/src/main/java/jaxx/runtime/validator/swing/SwingListValidatorMessage.java
===================================================================
--- trunk/jaxx-validator/src/main/java/jaxx/runtime/validator/swing/SwingListValidatorMessage.java (rev 0)
+++ trunk/jaxx-validator/src/main/java/jaxx/runtime/validator/swing/SwingListValidatorMessage.java 2012-07-27 14:34:35 UTC (rev 2444)
@@ -0,0 +1,46 @@
+package jaxx.runtime.validator.swing;
+
+import org.nuiton.validator.NuitonValidatorScope;
+import org.nuiton.validator.bean.list.BeanListValidator;
+import org.nuiton.validator.bean.list.BeanListValidatorMessage;
+
+import javax.swing.JComponent;
+
+/**
+ * TODO
+ *
+ * @author tchemit <chemit(a)codelutin.com>
+ * @since 2.5.3
+ */
+public class SwingListValidatorMessage extends BeanListValidatorMessage<SwingListValidatorMessage> {
+
+ private static final long serialVersionUID = 1L;
+
+ /** the optional field's editor */
+ protected JComponent editor;
+
+ public SwingListValidatorMessage(BeanListValidator<?> validator,
+ Object bean,
+ String fieldName,
+ String message,
+ NuitonValidatorScope scope,
+ JComponent editor) {
+ super(validator, bean, fieldName, message, scope);
+ this.editor = editor;
+ }
+
+ public JComponent getEditor() {
+ return editor;
+ }
+
+ @Override
+ public String toString() {
+ String s = scope + " - " +
+ (field == null ? message : field + "[" + getBean() +
+ "] - " + message);
+ if (editor != null) {
+ s = editor.getName() + " : " + s;
+ }
+ return s;
+ }
+}
\ No newline at end of file
Added: trunk/jaxx-validator/src/main/java/jaxx/runtime/validator/swing/SwingListValidatorMessageTableModel.java
===================================================================
--- trunk/jaxx-validator/src/main/java/jaxx/runtime/validator/swing/SwingListValidatorMessageTableModel.java (rev 0)
+++ trunk/jaxx-validator/src/main/java/jaxx/runtime/validator/swing/SwingListValidatorMessageTableModel.java 2012-07-27 14:34:35 UTC (rev 2444)
@@ -0,0 +1,254 @@
+package jaxx.runtime.validator.swing;
+
+import com.google.common.base.Preconditions;
+import com.google.common.collect.Lists;
+import jaxx.runtime.SwingUtil;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.nuiton.validator.NuitonValidatorScope;
+import org.nuiton.validator.bean.list.BeanListValidator;
+import org.nuiton.validator.bean.list.BeanListValidatorEvent;
+import org.nuiton.validator.bean.list.BeanListValidatorListener;
+
+import javax.swing.JComponent;
+import javax.swing.table.AbstractTableModel;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * The model of the table of errors.
+ * <p/>
+ * The model listens list-validators messages and update his internal model
+ * from it.
+ *
+ * @author tchemit <chemit(a)codelutin.com>
+ * @since 2.5.3
+ */
+public class SwingListValidatorMessageTableModel extends AbstractTableModel
+ implements BeanListValidatorListener {
+
+ private static final long serialVersionUID = 1L;
+
+ /** Logger */
+ private static Log log =
+ LogFactory.getLog(SwingListValidatorMessageTableModel.class);
+
+ public static final String[] columnNames =
+ {"validator.scope", "validator.bean",
+ "validator.field", "validator.message"};
+
+ public static final Class<?>[] columnClasses =
+ {NuitonValidatorScope.class, Integer.class, String.class, String.class};
+
+ /** list of registred validators */
+ protected transient List<BeanListValidator<?>> validators;
+
+ /** list of messages actual displayed */
+ protected List<SwingListValidatorMessage> data;
+
+ public SwingListValidatorMessageTableModel() {
+ data = Lists.newArrayList();
+ validators = Lists.newArrayList();
+ }
+
+ /**
+ * Register a validator for this model.
+ * <p/>
+ * <p/>
+ * Note: a validator can not be register twice in the same model.
+ *
+ * @param validator the validator to register
+ */
+ public void registerValidator(BeanListValidator<?> validator) {
+ Preconditions.checkState(
+ !validators.contains(validator),
+ "Validator " + validator + " is already registred in "
+ + this);
+ validators.add(validator);
+ validator.addBeanListValidatorListener(this);
+ }
+
+ public void clear() {
+ int i = data.size() + data.size();
+ if (i > 0) {
+ data.clear();
+ fireTableRowsDeleted(0, i - 1);
+ }
+ }
+
+ public void clearValidators() {
+ for (BeanListValidator<?> v : validators) {
+ v.removeBeanListValidatorListener(this);
+ }
+ validators.clear();
+ }
+
+ /**
+ * Obtain the message for a given row.
+ *
+ * @param rowIndex the row index
+ * @return the message for the given row index
+ */
+ public SwingListValidatorMessage getRow(int rowIndex) {
+ SwingUtil.ensureRowIndex(this, rowIndex);
+ return data.get(rowIndex);
+ }
+
+ @Override
+ public boolean isCellEditable(int row, int column) {
+ // cells are never editable in this model
+ return false;
+ }
+
+ @Override
+ public Class<?> getColumnClass(int columnIndex) {
+ SwingUtil.ensureColumnIndex(this, columnIndex);
+ return columnClasses[columnIndex];
+ }
+
+ @Override
+ public String getColumnName(int column) {
+ SwingUtil.ensureColumnIndex(this, column);
+ return columnNames[column];
+ }
+
+ @Override
+ public void onFieldChanged(BeanListValidatorEvent event) {
+ String[] toDelete = event.getMessagesToDelete();
+ String[] toAdd = event.getMessagesToAdd();
+ String field = event.getField();
+ Object bean = event.getBean();
+ NuitonValidatorScope scope = event.getScope();
+ boolean mustAdd = toAdd != null && toAdd.length > 0;
+ boolean mustDel = toDelete != null && toDelete.length > 0;
+
+ if (log.isTraceEnabled()) {
+ log.trace("----------------------------------------------------------");
+ log.trace(field + " - (" + getRowCount() + ") toAdd " + mustAdd);
+ log.trace(field + " - (" + getRowCount() + ") toDelete " + mustDel);
+ }
+
+ BeanListValidator<?> validator = event.getSource();
+
+ if (mustDel) {
+
+ // removes datas and notify if no messages to add
+ removeMessages(validator, bean, field, scope, !mustAdd, toDelete);
+ }
+
+ if (mustAdd) {
+
+ // add new messages, sort datas and notify
+ addMessages(validator, bean, field, scope, true, toAdd);
+ }
+ }
+
+ @Override
+ public int getRowCount() {
+ return data.size();
+ }
+
+ @Override
+ public int getColumnCount() {
+ return columnNames.length;
+ }
+
+ @Override
+ public Object getValueAt(int rowIndex, int columnIndex) {
+ SwingUtil.ensureColumnIndex(this, columnIndex);
+ SwingUtil.ensureRowIndex(this, rowIndex);
+
+ SwingListValidatorMessage row = data.get(rowIndex);
+ if (columnIndex == 0) {
+ // the icon
+ return row.getScope();
+ }
+ if (columnIndex == 1) {
+ // the bean
+ return row.getBean();
+ }
+ if (columnIndex == 2) {
+ // the field
+ return row.getField();
+ }
+ if (columnIndex == 3) {
+ // the message
+ return row.getMessage();
+ }
+
+ // should never come here
+ return null;
+ }
+
+ protected void addMessages(BeanListValidator<?> validator,
+ Object bean,
+ String fieldName,
+ NuitonValidatorScope scope,
+ boolean sort,
+ String... messages) {
+
+// JComponent editor = validator == null ?
+// null :
+// validator.getFieldRepresentation(fieldName);
+
+ JComponent editor = null;
+
+ // add new errors
+ for (String error : messages) {
+ SwingListValidatorMessage row =
+ new SwingListValidatorMessage(
+ validator,
+ bean,
+ fieldName,
+ error,
+ scope,
+ editor
+ );
+ data.add(row);
+ if (!sort) {
+ fireTableRowsInserted(data.size() - 1, data.size() - 1);
+ }
+ }
+
+ if (sort) {
+
+ // resort datas
+ Collections.sort(data);
+
+ // notify
+ fireTableDataChanged();
+ }
+ }
+
+ protected void removeMessages(BeanListValidator<?> validator,
+ Object bean,
+ String fieldName,
+ NuitonValidatorScope scope,
+ boolean notify,
+ String... messages) {
+
+ List<String> messagesToDel =
+ new ArrayList<String>(Arrays.asList(messages));
+
+ // do it in reverse mode (only one pass in that way since index
+ // will stay coherent while removing them)
+
+ for (int i = getRowCount() - 1; i > -1; i--) {
+ SwingListValidatorMessage error = data.get(i);
+ if (validator.equals(error.getValidator()) &&
+ error.getScope() == scope &&
+ error.getBean() == bean &&
+ error.getField().equals(fieldName) &&
+ messagesToDel.contains(error.getMessage())) {
+ // remove the message
+ data.remove(i);
+ if (notify) {
+ fireTableRowsDeleted(i, i);
+ }
+ }
+ }
+ }
+
+}
Added: trunk/jaxx-validator/src/main/java/jaxx/runtime/validator/swing/SwingListValidatorMessageTableMouseListener.java
===================================================================
--- trunk/jaxx-validator/src/main/java/jaxx/runtime/validator/swing/SwingListValidatorMessageTableMouseListener.java (rev 0)
+++ trunk/jaxx-validator/src/main/java/jaxx/runtime/validator/swing/SwingListValidatorMessageTableMouseListener.java 2012-07-27 14:34:35 UTC (rev 2444)
@@ -0,0 +1,124 @@
+package jaxx.runtime.validator.swing;
+
+import jaxx.runtime.SwingUtil;
+import org.apache.commons.lang3.tuple.Pair;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import javax.swing.JTable;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+import java.beans.PropertyChangeListener;
+import java.beans.PropertyChangeSupport;
+
+/**
+ * A mouse listener to edit a cell when double clicking on a validation
+ * message coming from a {@link SwingValidatorMessageTableModel}.
+ *
+ * @author tchemit <chemit(a)codelutin.com>
+ * @since 2.5.3
+ */
+public class SwingListValidatorMessageTableMouseListener extends MouseAdapter {
+
+ /** Logger */
+ private static Log log =
+ LogFactory.getLog(SwingListValidatorMessageTableMouseListener.class);
+
+ public static final String HIGHLIGHT_ERROR_PROPERTY = "highlightError";
+
+ /**
+ * Delegate property change support.
+ *
+ * @since 2.5.3
+ */
+ protected PropertyChangeSupport pcs;
+
+ /**
+ * The editor of listened bean.
+ *
+ * @since 2.5.3
+ */
+ protected final JTable editor;
+
+ /**
+ * The cell data locator.
+ *
+ * @since 2.5.3
+ */
+ protected final SwingListValidatorDataLocator dataLocator;
+
+ public SwingListValidatorMessageTableMouseListener(
+ JTable editor,
+ SwingListValidatorDataLocator dataLocator) {
+ this.editor = editor;
+ this.dataLocator = dataLocator;
+ pcs = new PropertyChangeSupport(this);
+ }
+
+ @Override
+ public void mouseClicked(MouseEvent e) {
+ super.mouseClicked(e);
+ if (e.getClickCount() == 2) {
+
+ SwingListValidatorMessage entry = getSelectedMessage(e);
+ if (entry == null) {
+ // no entry found
+ return;
+ }
+
+ Pair<Integer, Integer> cell = dataLocator.locateDataCell(
+ editor.getModel(),
+ entry.getBean(),
+ entry.getField());
+
+ SwingUtil.editCell(editor, cell.getLeft(), cell.getRight());
+ }
+ }
+
+ protected SwingListValidatorMessage getSelectedMessage(MouseEvent e) {
+ JTable table = (JTable) e.getSource();
+ if (!(table.getModel() instanceof SwingListValidatorMessageTableModel)) {
+ if (log.isWarnEnabled()) {
+ log.warn("model must be a " +
+ SwingValidatorMessageTableModel.class +
+ ", but was " + table.getModel());
+ }
+ return null;
+ }
+
+ SwingListValidatorMessageTableModel model =
+ (SwingListValidatorMessageTableModel) table.getModel();
+ int index = table.getSelectionModel().getMinSelectionIndex();
+ if (index == -1) {
+ // nothing is selected
+ return null;
+ }
+ if (table.getRowSorter() != null) {
+ index = table.getRowSorter().convertRowIndexToModel(index);
+ }
+ SwingListValidatorMessage entry = model.getRow(index);
+ if (log.isDebugEnabled()) {
+ log.debug("selected index: " + index + " : error: " + entry);
+ }
+ return entry;
+ }
+
+ public void addPropertyChangeListener(PropertyChangeListener listener) {
+ pcs.addPropertyChangeListener(listener);
+ }
+
+ public void addPropertyChangeListener(String propertyName,
+ PropertyChangeListener listener) {
+ pcs.addPropertyChangeListener(propertyName, listener);
+ }
+
+ public void removePropertyChangeListener(PropertyChangeListener listener) {
+ pcs.removePropertyChangeListener(listener);
+ }
+
+ public void removePropertyChangeListener(String propertyName,
+ PropertyChangeListener listener) {
+ pcs.removePropertyChangeListener(propertyName, listener);
+ }
+
+}
\ No newline at end of file
Added: trunk/jaxx-validator/src/main/java/jaxx/runtime/validator/swing/SwingListValidatorMessageTableRenderer.java
===================================================================
--- trunk/jaxx-validator/src/main/java/jaxx/runtime/validator/swing/SwingListValidatorMessageTableRenderer.java (rev 0)
+++ trunk/jaxx-validator/src/main/java/jaxx/runtime/validator/swing/SwingListValidatorMessageTableRenderer.java 2012-07-27 14:34:35 UTC (rev 2444)
@@ -0,0 +1,115 @@
+package jaxx.runtime.validator.swing;
+
+import org.nuiton.validator.NuitonValidatorScope;
+
+import javax.swing.ImageIcon;
+import javax.swing.JLabel;
+import javax.swing.JTable;
+import javax.swing.table.DefaultTableCellRenderer;
+import java.awt.Component;
+
+import static org.nuiton.i18n.I18n._;
+
+/**
+ * TODO
+ *
+ * @author tchemit <chemit(a)codelutin.com>
+ * @since 2.5.3
+ */
+public class SwingListValidatorMessageTableRenderer extends DefaultTableCellRenderer {
+
+ private static final long serialVersionUID = 1L;
+
+ @Override
+ public Component getTableCellRendererComponent(JTable table,
+ Object value,
+ boolean isSelected,
+ boolean hasFocus,
+ int row,
+ int column) {
+ JLabel rendererComponent = (JLabel)
+ super.getTableCellRendererComponent(
+ table,
+ value,
+ isSelected,
+ hasFocus,
+ row,
+ column
+ );
+
+ ImageIcon icon = null;
+ String text = null;
+ String toolTipText = null;
+
+ column = table.convertColumnIndexToModel(column);
+ if (table.getRowSorter() != null) {
+ row = table.getRowSorter().convertRowIndexToModel(row);
+ }
+
+ switch (column) {
+ case 0:
+ // scope
+ NuitonValidatorScope scope = (NuitonValidatorScope) value;
+ icon = SwingValidatorUtil.getIcon(scope);
+ String label = _(scope.getLabel());
+ toolTipText = _("validator.scope.tip", label);
+ break;
+
+ case 1:
+ // row bean
+ text = getBeanValue(table, row);
+ toolTipText = _("validator.bean.tip", text);
+ break;
+
+ case 2:
+ // field name
+ text = getFieldName(table, (String) value, row);
+ toolTipText = _("validator.field.tip", text);
+ break;
+
+ case 3:
+ // message
+ text = getMessage(table, (String) value, row);
+ toolTipText = _("validator.message.tip", text);
+ break;
+ }
+
+ rendererComponent.setText(text);
+ rendererComponent.setToolTipText(toolTipText);
+ rendererComponent.setIcon(icon);
+ return rendererComponent;
+ }
+
+ public ImageIcon getIcon(NuitonValidatorScope scope) {
+ ImageIcon icon = SwingValidatorUtil.getIcon(scope);
+ return icon;
+ }
+
+ public String getMessage(JTable table, String value, int row) {
+ SwingListValidatorMessageTableModel tableModel =
+ (SwingListValidatorMessageTableModel) table.getModel();
+ SwingListValidatorMessage model = tableModel.getRow(row);
+ String text = SwingValidatorUtil.getMessage(model);
+ return text;
+ }
+
+ public String getFieldName(JTable table, String value, int row) {
+ SwingListValidatorMessageTableModel tableModel =
+ (SwingListValidatorMessageTableModel) table.getModel();
+ SwingListValidatorMessage model = tableModel.getRow(row);
+ String fieldName = SwingValidatorUtil.getFieldName(model, value);
+ return fieldName;
+ }
+
+ public String getBeanValue(JTable table, int row) {
+ SwingListValidatorMessageTableModel tableModel =
+ (SwingListValidatorMessageTableModel) table.getModel();
+ SwingListValidatorMessage model = tableModel.getRow(row);
+ String text = decorateBean(model.getBean());
+ return text;
+ }
+
+ protected String decorateBean(Object bean) {
+ return bean.toString();
+ }
+}
Added: trunk/jaxx-validator/src/main/java/jaxx/runtime/validator/swing/SwingListValidatorTableEditorModelListener.java
===================================================================
--- trunk/jaxx-validator/src/main/java/jaxx/runtime/validator/swing/SwingListValidatorTableEditorModelListener.java (rev 0)
+++ trunk/jaxx-validator/src/main/java/jaxx/runtime/validator/swing/SwingListValidatorTableEditorModelListener.java 2012-07-27 14:34:35 UTC (rev 2444)
@@ -0,0 +1,78 @@
+package jaxx.runtime.validator.swing;
+
+import com.google.common.collect.Sets;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.nuiton.validator.bean.list.BeanListValidator;
+
+import javax.swing.event.TableModelEvent;
+import javax.swing.event.TableModelListener;
+import javax.swing.table.TableModel;
+import java.util.Set;
+
+/**
+ * Listens a table model which is the editor of a list of bean, add and remove
+ * beans to the target validator.
+ *
+ * @author tchemit <chemit(a)codelutin.com>
+ * @since 2.5.3
+ */
+public class SwingListValidatorTableEditorModelListener<O> implements TableModelListener {
+
+ /** Logger. */
+ private static final Log log =
+ LogFactory.getLog(SwingListValidatorTableEditorModelListener.class);
+
+ private final SwingListValidatorDataLocator<O> dataLocator;
+
+ private BeanListValidator<O> validator;
+
+ public SwingListValidatorTableEditorModelListener(BeanListValidator<O> validator,
+ SwingListValidatorDataLocator<O> dataLocator) {
+ this.dataLocator = dataLocator;
+ this.validator = validator;
+ }
+
+ @Override
+ public void tableChanged(TableModelEvent e) {
+
+ if (e.getType() == TableModelEvent.INSERT) {
+
+ // bean added
+
+ int firstRow = e.getFirstRow();
+ int lastRow = e.getLastRow();
+
+ for (int i = firstRow; i <= lastRow; i++) {
+
+ TableModel model = (TableModel) e.getSource();
+ O bean = dataLocator.locateBean(model, i);
+ if (log.isInfoEnabled()) {
+ log.info("Add a bean to validator " + bean);
+ }
+ validator.addBean(bean);
+ }
+ }
+ if (e.getType() == TableModelEvent.DELETE) {
+
+ // bean removed
+
+ // bean are no more existing in editor, must then find out
+ // which beans must be deleted from all the beans in the validator
+
+ TableModel model = (TableModel) e.getSource();
+ Set<O> beans = Sets.newHashSet(validator.getBeans());
+ for (int i = 0; i <= model.getRowCount(); i++) {
+ O bean = dataLocator.locateBean(model, i);
+ beans.remove(bean);
+ }
+
+ for (O bean : beans) {
+ if (log.isInfoEnabled()) {
+ log.info("Remove a bean to validator " + bean);
+ }
+ validator.removeBean(bean);
+ }
+ }
+ }
+}
Modified: trunk/jaxx-validator/src/main/java/jaxx/runtime/validator/swing/SwingValidator.java
===================================================================
--- trunk/jaxx-validator/src/main/java/jaxx/runtime/validator/swing/SwingValidator.java 2012-07-27 14:33:56 UTC (rev 2443)
+++ trunk/jaxx-validator/src/main/java/jaxx/runtime/validator/swing/SwingValidator.java 2012-07-27 14:34:35 UTC (rev 2444)
@@ -24,15 +24,18 @@
*/
package jaxx.runtime.validator.swing;
+import com.google.common.base.Preconditions;
import jaxx.runtime.validator.swing.ui.AbstractBeanValidatorUI;
import jaxx.runtime.validator.swing.ui.IconValidationUI;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.jdesktop.jxlayer.JXLayer;
+import org.nuiton.validator.NuitonValidator;
import org.nuiton.validator.NuitonValidatorFactory;
import org.nuiton.validator.NuitonValidatorProvider;
import org.nuiton.validator.NuitonValidatorScope;
import org.nuiton.validator.bean.BeanValidator;
+import org.nuiton.validator.bean.simple.SimpleBeanValidator;
import javax.swing.JComponent;
import java.awt.Container;
@@ -117,19 +120,88 @@
* </pre>
*
* @param <B> le type de bean a valider
- * @author poussin <poussin(a)codelutin.com>
* @author tchemit <chemit(a)codelutin.com>
* @version 1.0
*/
-public class SwingValidator<B> extends BeanValidator<B> {
+public class SwingValidator<B> extends SimpleBeanValidator<B> {
/** Logger */
- static private final Log log = LogFactory.getLog(SwingValidator.class);
+ private static final Log log = LogFactory.getLog(SwingValidator.class);
- static private final Class<? extends AbstractBeanValidatorUI>
+ private static final Class<? extends AbstractBeanValidatorUI>
DEFAULT_UI_CLASS = IconValidationUI.class;
/**
+ * Obtain a new {@link SimpleBeanValidator} for the given parameters.
+ * <p/>
+ * <b>Note:</b> It will use the default provider of {@link NuitonValidator}
+ *
+ * @param type type of bean to validate
+ * @param context context of validation
+ * @param scopes authorized scopes (if {@code null}, will use all scopes)
+ * @param <O> type of bean to validate
+ * @return the new instanciated {@link SimpleBeanValidator}.
+ * @throws NullPointerException if type is {@code null}
+ * @see NuitonValidatorFactory#getDefaultProviderName()
+ */
+ public static <O> SwingValidator<O> newValidator(
+ Class<O> type,
+ String context,
+ NuitonValidatorScope... scopes) throws NullPointerException {
+
+
+ // get the provider default name
+ String providerName = NuitonValidatorFactory.getDefaultProviderName();
+
+ // get the bean validator with this provider
+ SwingValidator<O> beanValidator = newValidator(providerName,
+ type,
+ context,
+ scopes
+ );
+ return beanValidator;
+ }
+
+ /**
+ * Obtain a new {@link SimpleBeanValidator} for the given parameters.
+ * <p/>
+ * <b>Note:</b> It will use the provider of {@link NuitonValidator}
+ * defined by the {@code providerName}.
+ *
+ * @param providerName name of {@link NuitonValidator} to use
+ * @param type type of bean to validate
+ * @param context context of validation
+ * @param scopes authorized scopes (if {@code null}, will use all scopes)
+ * @param <O> type of bean to validate
+ * @return the new instanciated {@link SimpleBeanValidator}.
+ * @throws NullPointerException if type is {@code null}
+ * @see NuitonValidatorFactory#getProvider(String)
+ */
+ public static <O> SwingValidator<O> newValidator(
+ String providerName,
+ Class<O> type,
+ String context,
+ NuitonValidatorScope... scopes) throws NullPointerException {
+
+ Preconditions.checkNotNull(type,
+ "type parameter can not be null.");
+
+ // get delegate validator provider
+ NuitonValidatorProvider provider =
+ NuitonValidatorFactory.getProvider(providerName);
+
+ Preconditions.checkState(
+ provider != null,
+ "Could not find provider with name " + providerName);
+
+ // create the new instance of bean validator
+ SwingValidator<O> validator = new SwingValidator<O>(
+ provider, type, context, scopes);
+
+ return validator;
+ }
+
+ /**
* permet de faire le lien en un champs du bean et l'objet qui permet de
* l'editer
*/
@@ -249,14 +321,14 @@
log.warn("the field '" + fieldname +
"' is not defined in validator (no rules on it)");
}
- return;
+ } else {
+ if (log.isInfoEnabled()) {
+ log.info("register field [" + fieldname + "] with component : " +
+ c.getName()
+ );
+ }
+ fieldRepresentation.put(fieldname, c);
}
- if (log.isInfoEnabled()) {
- log.info("register field [" + fieldname + "] with component : " +
- c.getName()
- );
- }
- fieldRepresentation.put(fieldname, c);
}
public void setFieldRepresentation(
@@ -330,7 +402,7 @@
JXLayer<?> jx = (JXLayer<?>) container;
Object ui = jx.getUI();
if (ui != null && ui instanceof AbstractBeanValidatorUI) {
- removeBeanValidatorListener((AbstractBeanValidatorUI) ui);
+ removeSimpleBeanValidatorListener((AbstractBeanValidatorUI) ui);
}
jx.setUI(null);
@@ -345,14 +417,14 @@
if (oldUI != null && oldUI instanceof AbstractBeanValidatorUI) {
// supression de l'ancien layer
- removeBeanValidatorListener((AbstractBeanValidatorUI) oldUI);
+ removeSimpleBeanValidatorListener((AbstractBeanValidatorUI) oldUI);
}
Constructor<? extends AbstractBeanValidatorUI> cons =
uiClass.getConstructor(String.class);
AbstractBeanValidatorUI ui = cons.newInstance(fieldname);
// ui.setEnabled(true);
- addBeanValidatorListener(ui);
+ addSimpleBeanValidatorListener(ui);
jx.setUI(ui);
}
}
Modified: trunk/jaxx-validator/src/main/java/jaxx/runtime/validator/swing/SwingValidatorMessage.java
===================================================================
--- trunk/jaxx-validator/src/main/java/jaxx/runtime/validator/swing/SwingValidatorMessage.java 2012-07-27 14:33:56 UTC (rev 2443)
+++ trunk/jaxx-validator/src/main/java/jaxx/runtime/validator/swing/SwingValidatorMessage.java 2012-07-27 14:34:35 UTC (rev 2444)
@@ -26,6 +26,7 @@
import org.nuiton.validator.NuitonValidatorScope;
import org.nuiton.validator.bean.BeanValidatorMessage;
+import org.nuiton.validator.bean.simple.SimpleBeanValidatorMessage;
import javax.swing.JComponent;
@@ -36,7 +37,7 @@
* @see BeanValidatorMessage
* @since 1.3
*/
-public class SwingValidatorMessage extends BeanValidatorMessage<SwingValidatorMessage> {
+public class SwingValidatorMessage extends SimpleBeanValidatorMessage<SwingValidatorMessage> {
private static final long serialVersionUID = 1L;
@@ -56,61 +57,13 @@
return editor;
}
- /**
- * @return the field name
- * @deprecated since 2.3, will not be replaced
- */
- @Deprecated
- public String getFieldName() {
- return getField();
- }
-
-// @Override
-// public int compareTo(SwingValidatorMessage o) {
-// // sort on scope
-// int result = getScope().compareTo(o.getScope());
-// if (result == 0) {
-// // sort on field name
-// result = fieldName.compareTo(o.getField());
-// if (result == 0) {
-// // sort on message
-// result = message.compareTo(o.getMessage());
-// }
-// }
-// return result;
-// }
-
-// @Override
-// public boolean equals(Object o) {
-// if (this == o) {
-// return true;
-// }
-// if (o == null || getClass() != o.getClass()) {
-// return false;
-// }
-//
-// SwingValidatorMessage that = (SwingValidatorMessage) o;
-//
-// return fieldName.equals(that.fieldName) &&
-// message.equals(that.message) &&
-// scope == that.scope;
-// }
-
-// @Override
-// public int hashCode() {
-// int result = fieldName.hashCode();
-// result = 31 * result + message.hashCode();
-// result = 31 * result + scope.hashCode();
-// return result;
-// }
-
@Override
public String toString() {
String s = scope + " - " +
(field == null ? message : field + " - " + message);
- if (editor == null) {
- return s;
+ if (editor != null) {
+ s = editor.getName() + " : " + s;
}
- return editor.getName() + " : " + s;
+ return s;
}
}
Modified: trunk/jaxx-validator/src/main/java/jaxx/runtime/validator/swing/SwingValidatorMessageListModel.java
===================================================================
--- trunk/jaxx-validator/src/main/java/jaxx/runtime/validator/swing/SwingValidatorMessageListModel.java 2012-07-27 14:33:56 UTC (rev 2443)
+++ trunk/jaxx-validator/src/main/java/jaxx/runtime/validator/swing/SwingValidatorMessageListModel.java 2012-07-27 14:34:35 UTC (rev 2444)
@@ -27,8 +27,8 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.nuiton.validator.NuitonValidatorScope;
-import org.nuiton.validator.bean.BeanValidatorEvent;
-import org.nuiton.validator.bean.BeanValidatorListener;
+import org.nuiton.validator.bean.simple.SimpleBeanValidatorEvent;
+import org.nuiton.validator.bean.simple.SimpleBeanValidatorListener;
import javax.swing.AbstractListModel;
import javax.swing.JComponent;
@@ -44,7 +44,7 @@
*/
public class SwingValidatorMessageListModel
extends AbstractListModel
- implements BeanValidatorListener {
+ implements SimpleBeanValidatorListener {
private static final long serialVersionUID = 1L;
@@ -73,7 +73,7 @@
+ this);
}
validators.add(validator);
- validator.addBeanValidatorListener(this);
+ validator.addSimpleBeanValidatorListener(this);
}
public void clear() {
@@ -96,7 +96,7 @@
}
@Override
- public void onFieldChanged(BeanValidatorEvent event) {
+ public void onFieldChanged(SimpleBeanValidatorEvent event) {
String[] toDelete = event.getMessagesToDelete();
String[] toAdd = event.getMessagesToAdd();
String field = event.getField();
Modified: trunk/jaxx-validator/src/main/java/jaxx/runtime/validator/swing/SwingValidatorMessageTableModel.java
===================================================================
--- trunk/jaxx-validator/src/main/java/jaxx/runtime/validator/swing/SwingValidatorMessageTableModel.java 2012-07-27 14:33:56 UTC (rev 2443)
+++ trunk/jaxx-validator/src/main/java/jaxx/runtime/validator/swing/SwingValidatorMessageTableModel.java 2012-07-27 14:34:35 UTC (rev 2444)
@@ -24,11 +24,12 @@
*/
package jaxx.runtime.validator.swing;
+import jaxx.runtime.SwingUtil;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.nuiton.validator.NuitonValidatorScope;
-import org.nuiton.validator.bean.BeanValidatorEvent;
-import org.nuiton.validator.bean.BeanValidatorListener;
+import org.nuiton.validator.bean.simple.SimpleBeanValidatorEvent;
+import org.nuiton.validator.bean.simple.SimpleBeanValidatorListener;
import javax.swing.JComponent;
import javax.swing.table.AbstractTableModel;
@@ -47,7 +48,7 @@
*/
public class SwingValidatorMessageTableModel
extends AbstractTableModel
- implements BeanValidatorListener {
+ implements SimpleBeanValidatorListener {
private static final long serialVersionUID = 1L;
@@ -87,7 +88,7 @@
+ this);
}
validators.add(validator);
- validator.addBeanValidatorListener(this);
+ validator.addSimpleBeanValidatorListener(this);
}
public void addMessages(SwingValidator<?> validator,
@@ -147,7 +148,7 @@
public void clearValidators() {
for (SwingValidator<?> v : validators) {
- v.removeBeanValidatorListener(this);
+ v.removeSimpleBeanValidatorListener(this);
}
validators.clear();
}
@@ -159,7 +160,7 @@
* @return the message for the given row index
*/
public SwingValidatorMessage getRow(int rowIndex) {
- ensureRowIndex(rowIndex);
+ SwingUtil.ensureRowIndex(this, rowIndex);
return data.get(rowIndex);
}
@@ -171,18 +172,18 @@
@Override
public Class<?> getColumnClass(int columnIndex) {
- ensureColumnIndex(columnIndex);
+ SwingUtil.ensureColumnIndex(this, columnIndex);
return columnClasses[columnIndex];
}
@Override
public String getColumnName(int column) {
- ensureColumnIndex(column);
+ SwingUtil.ensureColumnIndex(this, column);
return columnNames[column];
}
@Override
- public void onFieldChanged(BeanValidatorEvent event) {
+ public void onFieldChanged(SimpleBeanValidatorEvent event) {
String[] toDelete = event.getMessagesToDelete();
String[] toAdd = event.getMessagesToAdd();
String field = event.getField();
@@ -223,8 +224,8 @@
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
- ensureColumnIndex(columnIndex);
- ensureRowIndex(rowIndex);
+ SwingUtil.ensureColumnIndex(this, columnIndex);
+ SwingUtil.ensureRowIndex(this, rowIndex);
SwingValidatorMessage row = data.get(rowIndex);
if (columnIndex == 0) {
@@ -244,24 +245,6 @@
return null;
}
- protected void ensureRowIndex(int rowIndex)
- throws ArrayIndexOutOfBoundsException {
- if (rowIndex < -1 || rowIndex >= getRowCount()) {
- throw new ArrayIndexOutOfBoundsException(
- "the rowIndex was " + rowIndex + ", but should be int [0,"
- + (getRowCount() - 1) + "]");
- }
- }
-
- protected void ensureColumnIndex(int index)
- throws ArrayIndexOutOfBoundsException {
- if (index < -1 || index >= getColumnCount()) {
- throw new ArrayIndexOutOfBoundsException(
- "the columnIndex was " + index + ", but should be int [0,"
- + (getColumnCount() - 1) + "]");
- }
- }
-
protected void addMessages(SwingValidator<?> validator,
String fieldName,
NuitonValidatorScope scope,
Modified: trunk/jaxx-validator/src/main/java/jaxx/runtime/validator/swing/SwingValidatorUtil.java
===================================================================
--- trunk/jaxx-validator/src/main/java/jaxx/runtime/validator/swing/SwingValidatorUtil.java 2012-07-27 14:33:56 UTC (rev 2443)
+++ trunk/jaxx-validator/src/main/java/jaxx/runtime/validator/swing/SwingValidatorUtil.java 2012-07-27 14:34:35 UTC (rev 2444)
@@ -32,10 +32,7 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.nuiton.util.ReflectUtil;
-import org.nuiton.validator.NuitonValidatorProvider;
import org.nuiton.validator.NuitonValidatorScope;
-import org.nuiton.validator.bean.BeanValidator;
-import org.nuiton.validator.bean.BeanValidatorFactory;
import org.nuiton.validator.bean.BeanValidatorUtil;
import javax.swing.ImageIcon;
@@ -129,14 +126,13 @@
public static <O> SwingValidator<O> newValidator(Class<O> type,
String context) {
- if (BeanValidatorFactory.isDefaultCreator()) {
-
- // set the swing bean validator creator
- BeanValidatorFactory.setCreator(new DefaultSwingValidatorCreator());
- }
+// if (BeanValidatorFactory.isDefaultCreator()) {
+//
+// // set the swing bean validator creator
+// BeanValidatorFactory.setCreator(new DefaultSwingValidatorCreator());
+// }
SwingValidator<O> validator =
- (SwingValidator<O>) BeanValidatorFactory.newBeanValidator(
- type, context);
+ SwingValidator.newValidator(type, context);
return validator;
}
@@ -167,8 +163,7 @@
List<String> validatorIds = ui.getValidatorIds();
for (String validatorId : validatorIds) {
- SwingValidator<?> validator = (SwingValidator<?>)
- ui.getValidator(validatorId);
+ SwingValidator<?> validator = ui.getValidator(validatorId);
// install uis
validator.installUIs();
@@ -288,6 +283,32 @@
}
/**
+ * Prepare the ui where to display the validators messages.
+ *
+ * @param errorTable the table where to display validators messages
+ * @param render renderer to use
+ */
+ public static void installUI(JTable errorTable,
+ SwingListValidatorMessageTableRenderer render) {
+ errorTable.setDefaultRenderer(Object.class, render);
+ errorTable.getRowSorter().setSortKeys(
+ Arrays.asList(new RowSorter.SortKey(0, SortOrder.ASCENDING)));
+ SwingUtil.setI18nTableHeaderRenderer(
+ errorTable,
+ n_("validator.scope.header"),
+ n_("validator.scope.header.tip"),
+ n_("validator.bean.header"),
+ n_("validator.bean.header.tip"),
+ n_("validator.field.header"),
+ n_("validator.field.header.tip"),
+ n_("validator.message.header"),
+ n_("validator.message.header.tip"));
+ SwingUtil.fixTableColumnWidth(errorTable, 0, 25);
+
+// SwingUtil.fixTableColumnWidth(errorTable, 1, 25);
+ }
+
+ /**
* Register for a given validator list ui a validator mouse listener.
* <p/>
* Note: there is only one listener registred for a given list model, so
@@ -371,6 +392,23 @@
return null;
}
+ /**
+ * @param table the validator table ui
+ * @return the validator table mouse listener, or <code>null</code> if not
+ * found
+ * @see SwingValidatorMessageTableMouseListener
+ */
+ public static SwingValidatorMessageTableMouseListener getListErrorTableMouseListener(JTable table) {
+ if (table != null) {
+ for (MouseListener listener : table.getMouseListeners()) {
+ if (listener instanceof SwingValidatorMessageTableMouseListener) {
+ return (SwingValidatorMessageTableMouseListener) listener;
+ }
+ }
+ }
+ return null;
+ }
+
public static String getMessage(SwingValidatorMessage model) {
String text = model.getMessage();
if (model.getField() != null) {
@@ -379,6 +417,14 @@
return text;
}
+ public static String getMessage(SwingListValidatorMessage model) {
+ String text = model.getMessage();
+ if (model.getField() != null) {
+ text = model.getI18nError(text);
+ }
+ return text;
+ }
+
public static String getFieldName(SwingValidatorMessage model, String value) {
String text = null;
JComponent editor = model.getEditor();
@@ -396,6 +442,22 @@
return text;
}
+ public static String getFieldName(SwingListValidatorMessage model, String value) {
+ String text = null;
+ JComponent editor = model.getEditor();
+ if (editor != null) {
+ text = (String) editor.getClientProperty("validatorLabel");
+ /*if (l != null) {
+ text = I18n._(l);
+ } else {
+ // TODO should try the text
+ }*/
+ }
+ if (text == null) {
+ text = value;
+ }
+ return text;
+ }
/**
* Method to listen the modification of the context name and at each time
* reload fields of the ui.
@@ -425,25 +487,25 @@
);
}
- /**
- * Default bean validator creator to use in the {@link BeanValidatorFactory}.
- *
- * @author tchemit <chemit(a)codelutin.com>
- * @since 2.1
- */
- public static class DefaultSwingValidatorCreator implements BeanValidatorFactory.BeanValidatorCreator {
+// /**
+// * Default bean validator creator to use in the {@link BeanValidatorFactory}.
+// *
+// * @author tchemit <chemit(a)codelutin.com>
+// * @since 2.1
+// */
+// public static class DefaultSwingValidatorCreator implements BeanValidatorFactory.BeanValidatorCreator {
+//
+// @Override
+// public <O> BeanValidator<O> newBeanValidator(NuitonValidatorProvider provider, Class<O> type, String context, NuitonValidatorScope... scopes) {
+// BeanValidator<O> beanValidator = new SwingValidator<O>(provider,
+// type,
+// context,
+// scopes
+// );
+// return beanValidator;
+// }
+// }
- @Override
- public <O> BeanValidator<O> newBeanValidator(NuitonValidatorProvider provider, Class<O> type, String context, NuitonValidatorScope... scopes) {
- BeanValidator<O> beanValidator = new SwingValidator<O>(provider,
- type,
- context,
- scopes
- );
- return beanValidator;
- }
- }
-
/**
* Convinient method to attach a bean to all validators of an JAXXObject.
* <p/>
@@ -469,7 +531,7 @@
}
}
for (String validatorId : validatorIds) {
- BeanValidator beanValidator =
+ SwingValidator beanValidator =
jaxxValidator.getValidator(validatorId);
if (bean == null || beanValidator.getType().isAssignableFrom(
bean.getClass())) {
@@ -505,7 +567,7 @@
}
}
for (String validatorId : validatorIds) {
- BeanValidator<?> beanValidator =
+ SwingValidator<?> beanValidator =
jaxxValidator.getValidator(validatorId);
beanValidator.setChanged(newValue);
}
Modified: trunk/jaxx-validator/src/main/java/jaxx/runtime/validator/swing/ui/AbstractBeanValidatorUI.java
===================================================================
--- trunk/jaxx-validator/src/main/java/jaxx/runtime/validator/swing/ui/AbstractBeanValidatorUI.java 2012-07-27 14:33:56 UTC (rev 2443)
+++ trunk/jaxx-validator/src/main/java/jaxx/runtime/validator/swing/ui/AbstractBeanValidatorUI.java 2012-07-27 14:34:35 UTC (rev 2444)
@@ -28,8 +28,8 @@
import org.apache.commons.logging.LogFactory;
import org.jdesktop.jxlayer.plaf.AbstractLayerUI;
import org.nuiton.validator.NuitonValidatorScope;
-import org.nuiton.validator.bean.BeanValidatorEvent;
-import org.nuiton.validator.bean.BeanValidatorListener;
+import org.nuiton.validator.bean.simple.SimpleBeanValidatorEvent;
+import org.nuiton.validator.bean.simple.SimpleBeanValidatorListener;
import javax.swing.JComponent;
@@ -38,7 +38,7 @@
*
* @author tchemit <chemit(a)codelutin.com>
*/
-public abstract class AbstractBeanValidatorUI extends AbstractLayerUI<JComponent> implements BeanValidatorListener {
+public abstract class AbstractBeanValidatorUI extends AbstractLayerUI<JComponent> implements SimpleBeanValidatorListener {
/** Logger */
private static final Log log = LogFactory.getLog(AbstractBeanValidatorUI.class);
@@ -68,7 +68,7 @@
}
@Override
- public void onFieldChanged(BeanValidatorEvent event) {
+ public void onFieldChanged(SimpleBeanValidatorEvent event) {
if (field.equals(event.getField())) {
scope = event.getSource().getHighestScope(field);
Modified: trunk/jaxx-validator/src/main/resources/i18n/jaxx-validator_en_GB.properties
===================================================================
--- trunk/jaxx-validator/src/main/resources/i18n/jaxx-validator_en_GB.properties 2012-07-27 14:33:56 UTC (rev 2443)
+++ trunk/jaxx-validator/src/main/resources/i18n/jaxx-validator_en_GB.properties 2012-07-27 14:34:35 UTC (rev 2444)
@@ -1,3 +1,6 @@
+validator.bean.header=Object
+validator.bean.header.tip=Object on which message occurs
+validator.bean.tip=
validator.field.header=Field
validator.field.header.tip=The field involved
validator.field.tip=Property '%1$s'
Modified: trunk/jaxx-validator/src/main/resources/i18n/jaxx-validator_es_ES.properties
===================================================================
--- trunk/jaxx-validator/src/main/resources/i18n/jaxx-validator_es_ES.properties 2012-07-27 14:33:56 UTC (rev 2443)
+++ trunk/jaxx-validator/src/main/resources/i18n/jaxx-validator_es_ES.properties 2012-07-27 14:34:35 UTC (rev 2444)
@@ -1,3 +1,6 @@
+validator.bean.header=
+validator.bean.header.tip=
+validator.bean.tip=
validator.field.header=Campo
validator.field.header.tip=El campo sobre el que interviene el mensaje
validator.field.tip=Propiedad '%1$s'
@@ -4,6 +7,9 @@
validator.message.header=Mensaje
validator.message.header.tip=El texto del mensaje
validator.message.tip=Mensaje \: %1$s
+validator.row.header=
+validator.row.header.tip=
+validator.row.tip=
validator.scope.header=...
validator.scope.header.tip=El tipo de mensaje
validator.scope.tip=Type de message \: '%1$s'
Modified: trunk/jaxx-validator/src/main/resources/i18n/jaxx-validator_fr_FR.properties
===================================================================
--- trunk/jaxx-validator/src/main/resources/i18n/jaxx-validator_fr_FR.properties 2012-07-27 14:33:56 UTC (rev 2443)
+++ trunk/jaxx-validator/src/main/resources/i18n/jaxx-validator_fr_FR.properties 2012-07-27 14:34:35 UTC (rev 2444)
@@ -1,3 +1,6 @@
+validator.bean.header=Objet
+validator.bean.header.tip=L'objet
+validator.bean.tip=
validator.field.header=Champ
validator.field.header.tip=Le champ surquel intervient le message
validator.field.tip=Propriété '%1$s'
1
0
27 Jul '12
Author: tchemit
Date: 2012-07-27 16:33:56 +0200 (Fri, 27 Jul 2012)
New Revision: 2443
Url: http://nuiton.org/repositories/revision/jaxx/2443
Log:
fixes #2212: Add new methods in SwingUtil
fixes #2211: SwingUtil.editCell method does not work properly
Modified:
trunk/jaxx-runtime/src/main/java/jaxx/runtime/SwingUtil.java
Modified: trunk/jaxx-runtime/src/main/java/jaxx/runtime/SwingUtil.java
===================================================================
--- trunk/jaxx-runtime/src/main/java/jaxx/runtime/SwingUtil.java 2012-07-19 09:44:56 UTC (rev 2442)
+++ trunk/jaxx-runtime/src/main/java/jaxx/runtime/SwingUtil.java 2012-07-27 14:33:56 UTC (rev 2443)
@@ -60,6 +60,7 @@
import javax.swing.table.TableCellEditor;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableColumn;
+import javax.swing.table.TableModel;
import javax.swing.text.AbstractDocument;
import javax.swing.text.JTextComponent;
import javax.swing.tree.TreeNode;
@@ -1237,40 +1238,62 @@
}
/**
- * Used to edit cell
+ * Used to edit a cell of a given table.
*
- * @param table to edit
- * @param row of cell to editing
- * @param colummn of cell to editing
- * @return false if for any reason the cell cannot be edited,
+ * @param table the table to edit
+ * @param row row index of cell to editing
+ * @param colummn column index of cell to editing
+ * @return {@code false} if for any reason the cell cannot be edited,
* or if the indices are invalid
*/
public static boolean editCell(JTable table, int row, int colummn) {
+ boolean result = false;
if (table.isCellEditable(row, colummn)) {
- // get table informations
- int selectedColumn = table.getSelectedColumn();
- int selectedRow = table.getSelectedRow();
+ if (table.isEditing()) {
- // stop edition
- TableCellEditor cellEditor = table.getCellEditor(selectedRow, selectedColumn);
- cellEditor.stopCellEditing();
+ int editingRow = table.getEditingRow();
+ int editingColumn = table.getEditingColumn();
+ // stop edition
+ TableCellEditor cellEditor = table.getCellEditor(editingRow,
+ editingColumn);
+ cellEditor.stopCellEditing();
+ }
+
// select row
table.setColumnSelectionInterval(colummn, colummn);
table.setRowSelectionInterval(row, row);
// edit cell
- boolean result = table.editCellAt(row, colummn, new EventObject(table));
+ result = table.editCellAt(row, colummn, new EventObject(table));
Component component = table.getEditorComponent();
component.requestFocus();
if (log.isDebugEnabled()) {
- log.debug("Select row[" + row + "] column[" + colummn + "] return : " + result);
+ log.debug("Select row[" + row + "] column[" + colummn +
+ "] return : " + result);
}
- return result;
}
- return false;
+ return result;
}
+
+ public static void ensureRowIndex(TableModel model, int rowIndex)
+ throws ArrayIndexOutOfBoundsException {
+ if (rowIndex < -1 || rowIndex >= model.getRowCount()) {
+ throw new ArrayIndexOutOfBoundsException(
+ "the rowIndex was " + rowIndex + ", but should be int [0,"
+ + (model.getRowCount() - 1) + "]");
+ }
+ }
+
+ public static void ensureColumnIndex(TableModel model, int index)
+ throws ArrayIndexOutOfBoundsException {
+ if (index < -1 || index >= model.getColumnCount()) {
+ throw new ArrayIndexOutOfBoundsException(
+ "the columnIndex was " + index + ", but should be int [0,"
+ + (model.getColumnCount() - 1) + "]");
+ }
+ }
}
1
0