EMPIREDB-282
Code cleanup and small MenuListTag bugfix
diff --git a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/MenuListTag.java b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/MenuListTag.java
index d840389..5bdbd6a 100644
--- a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/MenuListTag.java
+++ b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/MenuListTag.java
@@ -34,14 +34,23 @@
 public class MenuListTag extends UIOutput implements NamingContainer

 {

     // Logger

-    // private static final Logger log = LoggerFactory.getLogger(MenuTag.class);

+    // private static final Logger log = LoggerFactory.getLogger(MenuListTag.class);

     

     protected final TagEncodingHelper helper = TagEncodingHelperFactory.create(this, "eMenuList");

     

+    private enum Properties

+    {

+        currentId,

+        currentClass,

+        parentClass,

+        disabledClass,

+        expandedClass,

+        itemWrapTag,

+        defaultItemClass;

+    }

+    

     protected String currentId = null; 

     protected String currentClass = null; 

-    // protected String prevMenuId = null; 

-    // protected String enabledClass = null; 

     protected String parentClass = null;

     protected String disabledClass = null; 

     protected String expandedClass = null;

@@ -104,26 +113,13 @@
     

     protected void initMenuAttributes(FacesContext context)

     {        

-        currentId       = helper.getTagAttributeString("currentId"); 

-        currentClass    = helper.getTagAttributeString("currentClass"); 

-        // enabledClass = StringUtils.toString(map.get("enabledClass")); 

-        disabledClass   = helper.getTagAttributeString("disabledClass"); 

-        parentClass     = helper.getTagAttributeString("parentClass");

-        expandedClass   = helper.getTagAttributeString("expandedClass");

-        itemWrapTag     = helper.getTagAttributeString("itemWrapTag");

-        defaultItemClass = helper.getTagAttributeString("defaultItemClass");

-

-        // remember previousMenu (may be used by JavaScript)

-        /*

-        if (currentId!=null)

-        {   // StoreID on Session and set lastId

-            Map<String,Object> sessionMap = context.getExternalContext().getSessionMap();

-            String attrName = this.getClientId()+":prevMenuId";

-            prevMenuId = StringUtils.toString(sessionMap.get(attrName));

-            if (StringUtils.compareEqual(prevMenuId, currentId, false)==false)

-                sessionMap.put(attrName, currentId);

-        }

-        */

+        currentId        = helper.getTagAttributeString(Properties.currentId.name()); 

+        currentClass     = helper.getTagAttributeString(Properties.currentClass.name()); 

+        disabledClass    = helper.getTagAttributeString(Properties.disabledClass.name()); 

+        parentClass      = helper.getTagAttributeString(Properties.parentClass.name());

+        expandedClass    = helper.getTagAttributeString(Properties.expandedClass.name());

+        itemWrapTag      = helper.getTagAttributeString(Properties.itemWrapTag.name());

+        defaultItemClass = helper.getTagAttributeString(Properties.defaultItemClass.name());

 

         // find parent

         MenuListTag parent = getParentMenu();

@@ -134,8 +130,6 @@
             currentId = parent.getCurrentId();

         if (currentClass==null)

             currentClass = parent.getCurrentClass();  

-        // if (enabledClass==null)

-        //     enabledClass = parent.getEnabledClass();

         if (disabledClass==null)

             disabledClass = parent.getDisabledClass();

         if (parentClass==null)

@@ -143,7 +137,7 @@
         if (expandedClass==null)

             expandedClass = parent.getExpandedClass();

         if (itemWrapTag==null)

-            itemWrapTag = parent.itemWrapTag;

+            itemWrapTag = parent.getItemWrapTag();

         if (defaultItemClass==null)

             defaultItemClass = parent.defaultItemClass;

         

@@ -168,45 +162,43 @@
     

     public String getCurrentId()

     {

+        if (currentId==null)

+            currentId= StringUtils.toString(getStateHelper().get(Properties.currentId));

         return currentId;

     }

 

     public String getCurrentClass()

     {

+        if (currentClass==null)

+            currentClass= StringUtils.toString(getStateHelper().get(Properties.currentClass));

         return currentClass;

     }

-    

-    /*

-    public String getPreviousMenuId()

-    {

-        return prevMenuId;

-    }

-    */

-

-    /*

-    public String getEnabledClass()

-    {

-        return enabledClass;

-    }

-    */

 

     public String getDisabledClass()

     {

+        if (disabledClass==null)

+            disabledClass= StringUtils.toString(getStateHelper().get(Properties.disabledClass));

         return disabledClass;

     }

 

     public String getParentClass()

     {

+        if (parentClass==null)

+            parentClass= StringUtils.toString(getStateHelper().get(Properties.parentClass));

         return parentClass;

     }

 

     public String getExpandedClass()

     {

+        if (expandedClass==null)

+            expandedClass= StringUtils.toString(getStateHelper().get(Properties.expandedClass));

         return expandedClass;

     }

 

     public String getItemWrapTag()

     {

+        if (itemWrapTag==null)

+            itemWrapTag= StringUtils.toString(getStateHelper().get(Properties.itemWrapTag));

         return itemWrapTag;

     }

     

@@ -228,53 +220,43 @@
     public void setCurrentId(String currentId)

     {

         this.currentId = currentId;

+        // save

+        getStateHelper().put(Properties.currentId, currentId);

     }

 

     public void setCurrentClass(String currentClass)

     {

         this.currentClass = currentClass;

+        // save

+        getStateHelper().put(Properties.currentClass, currentClass);

     }

 

-    /*

-    public void setEnabledClass(String enabledClass)

-    {

-        this.enabledClass = enabledClass;

-    }

-    */

-

     public void setDisabledClass(String disabledClass)

     {

         this.disabledClass = disabledClass;

+        // save

+        getStateHelper().put(Properties.disabledClass, disabledClass);

     }

 

     public void setParentClass(String parentClass)

     {

         this.parentClass = parentClass;

+        // save

+        getStateHelper().put(Properties.parentClass, parentClass);

     }

 

     public void setExpandedClass(String expandedClass)

     {

         this.expandedClass = expandedClass;

+        // save

+        getStateHelper().put(Properties.expandedClass, expandedClass);

     }

 

     public void setItemWrapTag(String itemWrapTag)

     {

         this.itemWrapTag = itemWrapTag;

+        // save

+        getStateHelper().put(Properties.itemWrapTag, itemWrapTag);

     }

 

-    /*

-    protected void writeAttribute(ResponseWriter writer, Map<String, Object> map, String attribute, String targetName)

-        throws IOException

-    {

-        Object value = map.get(attribute);

-        if (value != null)

-            writer.writeAttribute(targetName, value, null);

-    }

-    protected void writeAttribute(ResponseWriter writer, Map<String, Object> map, String attribute)

-        throws IOException

-    {

-        writeAttribute(writer, map, attribute, attribute);

-    }

-    */

-

 }

diff --git a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/utils/TagEncodingHelper.java b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/utils/TagEncodingHelper.java
index 74386ea..45c8724 100644
--- a/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/utils/TagEncodingHelper.java
+++ b/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/utils/TagEncodingHelper.java
@@ -314,11 +314,9 @@
                 return;

             // Make sure null values are not forced to be required

             boolean isNull = ObjectUtils.isEmpty(value);

-            if (isNull)

-            {   // Check Required

-                if (isRequired())

-                    throw new FieldNotNullException(column);

-                return; // not required

+            if (isNull && validateNullValue())

+            {   // OK, null allowed

+                return;

             }

             // validate through record (if any)

             if ((getRecord() instanceof Record))

@@ -652,7 +650,7 @@
         this.record = record;

         this.mostRecentValue = null; 

     }

-

+    

     public Object findRecordComponent()

     {

         // already present?

@@ -867,6 +865,14 @@
         // Required

         return getColumn().isRequired();

     }

+

+    public boolean validateNullValue()

+    {

+        if (isValueRequired())

+            throw new FieldNotNullException(column);

+        // OK, null allowed

+        return true;

+    }

     

     /**

      * used for partial submits to detect whether the value of this field can be set to null