Author: tchemit Date: 2008-12-12 20:15:32 +0000 (Fri, 12 Dec 2008) New Revision: 1079 Added: lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/runtime/PropertyDecorator.java lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/runtime/validator/ui/ImageValidationUI.java Modified: lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/compiler/CompilerOptions.java lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/runtime/swing/navigation/NavigationTreeCellRenderer.java lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/runtime/swing/navigation/NavigationTreeModel.java lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/runtime/swing/navigation/NavigationUtil.java lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/runtime/validator/BeanValidator.java lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/runtime/validator/ui/AbstractBeanValidatorUI.java lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/runtime/validator/ui/IconValidationUI.java lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/runtime/validator/ui/TranslucentValidationUI.java lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/tags/validator/BeanValidatorHandler.java lutinjaxx/trunk/maven-jaxx-plugin/src/main/java/org/codelutin/jaxx/JaxxGeneratorMojo.java Log: can choose via maven the defaultErrorUI to use new ErrorUI with images ImageValidationUI improve NavigationTreeCellRenderer : string node renderer values are chached and clear deeply when you use nodeChanged from the model add a Propertydecorator Modified: lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/compiler/CompilerOptions.java =================================================================== --- lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/compiler/CompilerOptions.java 2008-12-10 19:23:14 UTC (rev 1078) +++ lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/compiler/CompilerOptions.java 2008-12-12 20:15:32 UTC (rev 1079) @@ -28,6 +28,10 @@ /** list of fqn of class toimport for all generated jaxx files */ protected String[] extraImports; + + /** default error ui */ + private Class<?> defaultErrorUI; + /** * Returns the target directory, generally specified with the "-d" option on the command line. * @@ -220,4 +224,19 @@ } + public void setDefaultErrorUI(Class<?> defaultErrorUI) { + this.defaultErrorUI = defaultErrorUI; + } + + public boolean isKeepJavaFiles() { + return keepJavaFiles; + } + + public boolean isOptimize() { + return optimize; + } + + public Class<?> getDefaultErrorUI() { + return defaultErrorUI; + } } Added: lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/runtime/PropertyDecorator.java =================================================================== --- lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/runtime/PropertyDecorator.java (rev 0) +++ lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/runtime/PropertyDecorator.java 2008-12-12 20:15:32 UTC (rev 1079) @@ -0,0 +1,92 @@ +package jaxx.runtime; + +import org.apache.commons.beanutils.PropertyUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import java.beans.PropertyDescriptor; +import java.lang.reflect.Method; + +/** + * Simple property decorator based on {@link String#format(String, Object[])} method. + * <p/> + * To use it, give him a class and the property name to render. + * <p/> + * For example : + * <pre> + * Decorator<Object> d = PropertyDecorator.newDecorator(PropertyDecorator.class,"expressions"); + * </pre> + * + * @author chemit + * @see Decorator + */ +public class PropertyDecorator<O> extends Decorator<O> { + + private static final long serialVersionUID = 1L; + + /** to use log facility, just put in your code: log.info(\"...\"); */ + static private final Log log = LogFactory.getLog(PropertyDecorator.class); + + /** + * Factory method to instanciate a new {@link jaxx.runtime.PropertyDecorator} for the given class {@link O} and a + * readable property name. + * + * @param internalClass the class of the objects decorated by the new decorator + * @param property the property + * @param <O> the generic type of class to be decorated by the new decorator + * @return the new instanciated decorator + * @throws IllegalArgumentException if the expression is not valid, says: + * <p/> + * - a missing right brace was detected. + * <p/> + * - a ${ was found in a jxpath token. + * @throws NullPointerException if internalClass parameter is null. + */ + public static <O> PropertyDecorator<O> newDecorator(Class<O> internalClass, String property) + throws IllegalArgumentException, NullPointerException { + return new PropertyDecorator<O>(internalClass, property); + } + + protected String property; + + protected transient Method m; + + public String toString(Object bean) { + try { + return getM().invoke(bean) + ""; + } catch (Exception e) { + log.error("could not convert for reason : " + e, e); + return ""; + } + } + + public String getProperty() { + return property; + } + + protected PropertyDecorator(Class<O> internalClass, String property) throws NullPointerException { + super(internalClass); + if (property == null) { + throw new NullPointerException("property can not be null."); + } + this.property = property; + // init method + getM(); + } + + + protected Method getM() { + if (m == null) { + for (PropertyDescriptor propertyDescriptor : PropertyUtils.getPropertyDescriptors(internalClass)) { + if (propertyDescriptor.getName().equals(property)) { + this.m = propertyDescriptor.getReadMethod(); + break; + } + } + if (m == null) { + throw new IllegalArgumentException("could not find the property " + property + " in " + internalClass); + } + } + return m; + } +} Modified: lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/runtime/swing/navigation/NavigationTreeCellRenderer.java =================================================================== --- lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/runtime/swing/navigation/NavigationTreeCellRenderer.java 2008-12-10 19:23:14 UTC (rev 1078) +++ lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/runtime/swing/navigation/NavigationTreeCellRenderer.java 2008-12-12 20:15:32 UTC (rev 1079) @@ -3,9 +3,13 @@ import jaxx.runtime.JAXXContext; import jaxx.runtime.swing.navigation.NavigationTreeModel.NavigationTreeNode; import jaxx.runtime.swing.navigation.NavigationUtil.NodeRenderer; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.codelutin.util.StringUtil; import javax.swing.JTree; import javax.swing.tree.DefaultTreeCellRenderer; +import javax.swing.tree.TreePath; import java.awt.Component; /** @@ -15,20 +19,32 @@ */ public class NavigationTreeCellRenderer extends DefaultTreeCellRenderer { + /** to use log facility, just put in your code: log.info(\"...\"); */ + static private final Log log = LogFactory.getLog(NavigationTreeCellRenderer.class); + protected JAXXContext context; + protected static long t = 0; + public NavigationTreeCellRenderer(JAXXContext context) { this.context = context; } @Override public Component getTreeCellRendererComponent(JTree tree, Object value, boolean sel, boolean expanded, boolean leaf, int row, boolean hasFocus) { + TreePath path = tree.getPathForRow(row); + if (path == null) { + return this; + } if (value != null) { - + long t0 = System.nanoTime(); NodeRenderer renderer = getNodeRenderer(value); + long t1 = System.nanoTime(); if (renderer != null) { value = renderer.toString(context); + long t2 = System.nanoTime(); + log.info("use renderer [" + (t++) + "]<" + row + ">" + renderer.decorator + " <" + StringUtil.convertTime(t0, t1) + "/" + StringUtil.convertTime(t1, t2) + ">"); } } Modified: lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/runtime/swing/navigation/NavigationTreeModel.java =================================================================== --- lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/runtime/swing/navigation/NavigationTreeModel.java 2008-12-10 19:23:14 UTC (rev 1078) +++ lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/runtime/swing/navigation/NavigationTreeModel.java 2008-12-12 20:15:32 UTC (rev 1079) @@ -13,6 +13,7 @@ import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.DefaultTreeModel; import javax.swing.tree.TreeNode; +import java.util.Enumeration; import java.util.StringTokenizer; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -193,6 +194,14 @@ return node.getJAXXContextValue(context); } + + @Override + public void nodeChanged(TreeNode node) { + NavigationTreeNode n = (NavigationTreeNode) node; + n.clearRendererCachedValues(); + super.nodeChanged(node); + } + /** * la représentation d'un noeud dans le modele {@link NavigationTreeModel} * @@ -228,7 +237,8 @@ super(renderer); if (renderer instanceof NodeRenderer) { // the renderer must keep a reference of the node - ((NodeRenderer) renderer).setNode(this); + this.renderer = (NodeRenderer) renderer; + this.renderer.setNode(this); } else if (renderer instanceof String) { // nothing special to be done } else if (renderer != null) { @@ -258,7 +268,8 @@ super(renderer); if (renderer instanceof NodeRenderer) { // the renderer must keep a reference of the node - ((NodeRenderer) renderer).setNode(this); + this.renderer = (NodeRenderer) renderer; + this.renderer.setNode(this); } else if (renderer instanceof String) { // nothing special to be done } else if (renderer != null) { @@ -488,6 +499,17 @@ return ancestor.computeJXPath(newExpr, parentNode); } + + public void clearRendererCachedValues() { + if (renderer != null) { + renderer.setRendererCachedValue(null); + } + Enumeration childs = this.children(); + while (childs.hasMoreElements()) { + NavigationTreeNode o = (NavigationTreeNode) childs.nextElement(); + o.clearRendererCachedValues(); + } + } } } Modified: lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/runtime/swing/navigation/NavigationUtil.java =================================================================== --- lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/runtime/swing/navigation/NavigationUtil.java 2008-12-10 19:23:14 UTC (rev 1078) +++ lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/runtime/swing/navigation/NavigationUtil.java 2008-12-12 20:15:32 UTC (rev 1079) @@ -3,6 +3,8 @@ import jaxx.runtime.Decorator; import jaxx.runtime.JAXXContext; import jaxx.runtime.swing.navigation.NavigationTreeModel.NavigationTreeNode; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import static org.codelutin.i18n.I18n._; import java.lang.reflect.InvocationTargetException; @@ -17,6 +19,9 @@ */ public class NavigationUtil { + /** to use log facility, just put in your code: log.info(\"...\"); */ + static private final Log log = LogFactory.getLog(NavigationUtil.class); + public static String getCurrentNavigationNath(JAXXContext context) { return context.getContextValue(String.class, NavigationTreeSelectionAdapter.NAVIGATION_CONTEXT_PATH); } @@ -90,6 +95,8 @@ protected Class<?> internalClass; + protected String rendererCachedValue; + private static final long serialVersionUID = -1238962588426200861L; public NodeRenderer(String libelle) { @@ -103,22 +110,28 @@ } public String toString(JAXXContext context) { - if (libelle != null) { - // simple libelle renderer - return _(libelle); + if (rendererCachedValue != null) { + return rendererCachedValue; } - // with decorator renderer String result; - try { - Object bean = node.getJAXXContextValue(context); - result = decorator.toString(bean); + if (libelle != null) { + // simple libelle renderer + result = _(libelle); + } else { - } catch (Exception e) { - result = ""; + // with decorator renderer + + try { + Object bean = node.getJAXXContextValue(context); + result = decorator.toString(bean); + + } catch (Exception e) { + result = ""; + } } - + setRendererCachedValue(result); return result; } @@ -129,6 +142,11 @@ public Class<?> getInternalClass() { return internalClass; } + + public void setRendererCachedValue(String rendererCachedValue) { + this.rendererCachedValue = rendererCachedValue; + log.info(rendererCachedValue); + } } } Modified: lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/runtime/validator/BeanValidator.java =================================================================== --- lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/runtime/validator/BeanValidator.java 2008-12-10 19:23:14 UTC (rev 1078) +++ lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/runtime/validator/BeanValidator.java 2008-12-12 20:15:32 UTC (rev 1079) @@ -565,8 +565,8 @@ // ajout du jxlayer sous ce composant Container container = c.getParent(); if (container instanceof JXLayer) { - Constructor<? extends AbstractBeanValidatorUI> cons = uiClass.getConstructor(String.class, String.class, ValidationAware.class); - AbstractBeanValidatorUI ui = cons.newInstance(fieldname, c.getName(), validationSupport); + Constructor<? extends AbstractBeanValidatorUI> cons = uiClass.getConstructor(String.class, String.class,Scope.class, ValidationAware.class); + AbstractBeanValidatorUI ui = cons.newInstance(fieldname, c.getName(), scope, validationSupport); ui.setEnabled(true); JXLayer<JComponent> jx = (JXLayer<JComponent>) container; jx.setUI(ui); Modified: lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/runtime/validator/ui/AbstractBeanValidatorUI.java =================================================================== --- lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/runtime/validator/ui/AbstractBeanValidatorUI.java 2008-12-10 19:23:14 UTC (rev 1078) +++ lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/runtime/validator/ui/AbstractBeanValidatorUI.java 2008-12-12 20:15:32 UTC (rev 1079) @@ -1,6 +1,7 @@ package jaxx.runtime.validator.ui; import com.opensymphony.xwork2.ValidationAware; +import jaxx.runtime.validator.BeanValidator.Scope; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.jdesktop.jxlayer.plaf.AbstractLayerUI; @@ -15,6 +16,9 @@ /** to use log facility, just put in your code: log.info(\"...\"); */ protected static Log log = LogFactory.getLog(AbstractBeanValidatorUI.class); + /** scope */ + protected Scope scope; + /** bean field */ protected String field; @@ -24,9 +28,10 @@ /** validation context */ protected ValidationAware validationContext; - public AbstractBeanValidatorUI(String field, String componentId, ValidationAware validationContext) { + public AbstractBeanValidatorUI(String field, String componentId, Scope scope, ValidationAware validationContext) { this.componentId = componentId; this.field = field; + this.scope = scope; this.validationContext = validationContext; log.info("install " + this + "<field:" + field + ", componentId:" + componentId + ">"); } Modified: lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/runtime/validator/ui/IconValidationUI.java =================================================================== --- lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/runtime/validator/ui/IconValidationUI.java 2008-12-10 19:23:14 UTC (rev 1078) +++ lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/runtime/validator/ui/IconValidationUI.java 2008-12-12 20:15:32 UTC (rev 1079) @@ -1,30 +1,34 @@ package jaxx.runtime.validator.ui; +import com.opensymphony.xwork2.ValidationAware; +import jaxx.runtime.validator.BeanValidator.Scope; import org.jdesktop.jxlayer.JXLayer; -import javax.swing.JComponent; import javax.swing.BorderFactory; -import java.awt.image.BufferedImage; +import javax.swing.JComponent; +import java.awt.Color; import java.awt.Graphics2D; import java.awt.RenderingHints; -import java.awt.Color; +import java.awt.image.BufferedImage; -import com.opensymphony.xwork2.ValidationAware; - /** @author chemit */ public class IconValidationUI extends AbstractBeanValidatorUI { - // The red icon to be shown at the layer's corner - private final static BufferedImage INVALID_ICON; + // The icon to be shown at the layer's corner + protected BufferedImage invalidIcon; - static { + protected Color hightlight; + + public IconValidationUI(String field, String componentId, Scope scope, ValidationAware validationContext) { + super(field, componentId, scope, validationContext); int width = 7; int height = 8; - INVALID_ICON = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB); - Graphics2D g2 = (Graphics2D) INVALID_ICON.getGraphics(); + hightlight = scope == Scope.ERROR ? Color.RED : Color.YELLOW; + invalidIcon = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB); + Graphics2D g2 = (Graphics2D) invalidIcon.getGraphics(); g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g2.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_PURE); - g2.setColor(Color.RED); + g2.setColor(hightlight); g2.fillRect(0, 0, width, height); g2.setColor(Color.WHITE); g2.drawLine(0, 0, width, height); @@ -32,10 +36,6 @@ g2.dispose(); } - public IconValidationUI(String field, String componentId, ValidationAware validationContext) { - super(field,componentId,validationContext); - } - @Override public void installUI(JComponent c) { super.installUI(c); @@ -51,11 +51,9 @@ @Override protected void paintLayer(Graphics2D g2, JXLayer<JComponent> l) { super.paintLayer(g2, l); - //log.info("paintLayer "+field); // There is no need to take insets into account for this painter if (validationContext.getFieldErrors().containsKey(field)) { - g2.drawImage(INVALID_ICON, l.getWidth() - INVALID_ICON.getWidth() - 1, 0, null); - // g2.drawImage(INVALID_ICON, 0, 0, null); + g2.drawImage(invalidIcon, l.getWidth() - invalidIcon.getWidth() - 1, 0, null); } } } Copied: lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/runtime/validator/ui/ImageValidationUI.java (from rev 1003, lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/runtime/validator/ui/IconValidationUI.java) =================================================================== --- lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/runtime/validator/ui/ImageValidationUI.java (rev 0) +++ lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/runtime/validator/ui/ImageValidationUI.java 2008-12-12 20:15:32 UTC (rev 1079) @@ -0,0 +1,69 @@ +package jaxx.runtime.validator.ui; + +import com.opensymphony.xwork2.ValidationAware; +import jaxx.runtime.swing.Utils; +import jaxx.runtime.validator.BeanValidator.Scope; +import org.jdesktop.jxlayer.JXLayer; + +import javax.swing.BorderFactory; +import javax.swing.ImageIcon; +import javax.swing.JComponent; +import java.awt.Color; +import java.awt.Graphics2D; +import java.awt.RenderingHints; +import java.awt.image.BufferedImage; + +/** @author chemit */ +public class ImageValidationUI extends AbstractBeanValidatorUI { + + // The icon to be shown at the layer's corner + protected BufferedImage invalidIcon; + + protected Color hightlight; + + public ImageValidationUI(String field, String componentId, Scope scope, ValidationAware validationContext) { + super(field, componentId, scope, validationContext); + + hightlight = scope == Scope.ERROR ? Color.RED : Color.YELLOW; + ImageIcon image = null; + switch (scope) { + + case ERROR: + image = Utils.createImageIcon("error.png"); + break; + case WARNING: + image = Utils.createImageIcon("warning.png"); + break; + } + int width = 7; + int height = 8; + invalidIcon = new BufferedImage(image.getIconWidth(), image.getIconHeight(), BufferedImage.TYPE_INT_ARGB); + + Graphics2D g2 = (Graphics2D) invalidIcon.getGraphics(); + g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); + g2.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_PURE); + g2.drawImage(image.getImage(), 0, 0, null); + g2.dispose(); + } + + @Override + public void installUI(JComponent c) { + super.installUI(c); + c.setBorder(BorderFactory.createEmptyBorder(2, 0, 0, 3)); + } + + @Override + public void uninstallUI(JComponent c) { + super.uninstallUI(c); + c.setBorder(null); + } + + @Override + protected void paintLayer(Graphics2D g2, JXLayer<JComponent> l) { + super.paintLayer(g2, l); + // There is no need to take insets into account for this painter + if (validationContext.getFieldErrors().containsKey(field)) { + g2.drawImage(invalidIcon, l.getWidth() - invalidIcon.getWidth() - 1, 0, null); + } + } +} \ No newline at end of file Property changes on: lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/runtime/validator/ui/ImageValidationUI.java ___________________________________________________________________ Name: svn:mergeinfo + Modified: lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/runtime/validator/ui/TranslucentValidationUI.java =================================================================== --- lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/runtime/validator/ui/TranslucentValidationUI.java 2008-12-10 19:23:14 UTC (rev 1078) +++ lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/runtime/validator/ui/TranslucentValidationUI.java 2008-12-12 20:15:32 UTC (rev 1079) @@ -1,6 +1,7 @@ package jaxx.runtime.validator.ui; import com.opensymphony.xwork2.ValidationAware; +import jaxx.runtime.validator.BeanValidator.Scope; import org.jdesktop.jxlayer.JXLayer; import javax.swing.JComponent; @@ -13,8 +14,11 @@ /** @author chemit */ public class TranslucentValidationUI extends AbstractBeanValidatorUI { - public TranslucentValidationUI(String field, String componentId, ValidationAware validationContext) { - super(field, componentId, validationContext); + protected Color hightlight; + + public TranslucentValidationUI(String field, String componentId, Scope scope, ValidationAware validationContext) { + super(field, componentId, scope, validationContext); + hightlight = scope == Scope.ERROR ? Color.RED : Color.YELLOW; } @Override Modified: lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/tags/validator/BeanValidatorHandler.java =================================================================== --- lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/tags/validator/BeanValidatorHandler.java 2008-12-10 19:23:14 UTC (rev 1078) +++ lutinjaxx/trunk/jaxx-core/src/main/java/jaxx/tags/validator/BeanValidatorHandler.java 2008-12-12 20:15:32 UTC (rev 1079) @@ -338,6 +338,9 @@ protected boolean addUiClass(BeanValidatorHandler handler, JAXXCompiler compiler) { boolean withError = false; + if (uiClass == null && compiler.getOptions().getDefaultErrorUI() != null) { + uiClass = compiler.getOptions().getDefaultErrorUI().getName(); + } if (uiClass != null) { try { ClassDescriptor uiClazz = ClassDescriptorLoader.getClassDescriptor(uiClass); @@ -353,6 +356,7 @@ withError = true; } } + return withError; } @@ -575,7 +579,7 @@ // ok add the field mapping registerField(descriptionName, descriptionName, compiler); } - + for (Entry<String, String> entry : excludeFields.entrySet()) { String key = entry.getKey(); if (fields.containsKey(key)) { Modified: lutinjaxx/trunk/maven-jaxx-plugin/src/main/java/org/codelutin/jaxx/JaxxGeneratorMojo.java =================================================================== --- lutinjaxx/trunk/maven-jaxx-plugin/src/main/java/org/codelutin/jaxx/JaxxGeneratorMojo.java 2008-12-10 19:23:14 UTC (rev 1078) +++ lutinjaxx/trunk/maven-jaxx-plugin/src/main/java/org/codelutin/jaxx/JaxxGeneratorMojo.java 2008-12-12 20:15:32 UTC (rev 1079) @@ -193,6 +193,17 @@ */ protected String[] extraImports; + /** + * the FQN of the ui to use for error notification. + * <p/> + * If not given, will use the one defined in validator + * + * @parameter expression="${jaxx.defaultErrorUIFQN}" + * + * @see jaxx.runtime.validator.BeanValidator#DEFAULT_UI_CLASS + */ + protected String defaultErrorUIFQN; + protected String[] files; private static final String[] INCLUDES = {"**\\/*.jaxx"}; @@ -203,8 +214,10 @@ protected boolean skip = true; - protected void init() { + private Class<?> defaultErrorUIClass; + protected void init() throws ClassNotFoundException { + if (project != null && ("pom".equals(project.getPackaging()) || "site".equals(project.getPackaging()))) { // nothing to be done for this type of packaging skip = true; @@ -212,6 +225,9 @@ return; } + if (defaultErrorUIFQN != null && !defaultErrorUIFQN.trim().isEmpty()) { + defaultErrorUIClass = Class.forName(defaultErrorUIFQN); + } skip = false; checkJaxxContextImplementorClass(); @@ -295,12 +311,17 @@ result.setResetAfterCompile(resetAfterCompile); result.setJaxxContextImplementorClass(jaxxContextImplementorClass); result.setExtraImports(extraImports); + result.setDefaultErrorUI(defaultErrorUIClass); return result; } public void execute() throws MojoExecutionException, MojoFailureException { - init(); + try { + init(); + } catch (ClassNotFoundException e) { + throw new MojoExecutionException("error in init : " + e.getMessage(), e); + } if (skip) { if (verbose) {