You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@empire-db.apache.org by do...@apache.org on 2012/04/14 16:57:30 UTC
svn commit: r1326123 [2/4] - in /empire-db/trunk/empire-db-jsf2/src: ./
main/ main/java/ main/java/org/ main/java/org/apache/
main/java/org/apache/empire/ main/java/org/apache/empire/jsf2/
main/java/org/apache/empire/jsf2/app/ main/java/org/apache/empi...
Added: empire-db/trunk/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/MenuItemTag.java
URL: http://svn.apache.org/viewvc/empire-db/trunk/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/MenuItemTag.java?rev=1326123&view=auto
==============================================================================
--- empire-db/trunk/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/MenuItemTag.java (added)
+++ empire-db/trunk/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/MenuItemTag.java Sat Apr 14 14:57:28 2012
@@ -0,0 +1,231 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.empire.jsf2.components;
+
+import java.io.IOException;
+
+import javax.faces.component.UIComponent;
+import javax.faces.component.UINamingContainer;
+import javax.faces.component.html.HtmlOutcomeTargetLink;
+import javax.faces.context.FacesContext;
+import javax.faces.context.ResponseWriter;
+
+import org.apache.empire.commons.ObjectUtils;
+import org.apache.empire.commons.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class MenuItemTag extends LinkTag
+{
+ // Logger
+ private static final Logger log = LoggerFactory.getLogger(MenuItemTag.class);
+
+ private static int renderCount = 1;
+
+ private MenuListTag parentMenu = null;
+ private String menuId;
+
+ public MenuItemTag()
+ {
+ super();
+ }
+
+ @Override
+ public String getFamily()
+ {
+ return UINamingContainer.COMPONENT_FAMILY;
+ }
+
+ @Override
+ public void encodeBegin(FacesContext context)
+ throws IOException
+ {
+ // Detect Parent Menu
+ parentMenu = getParentMenu();
+ menuId = StringUtils.toString(getAttributes().get("menuId"));
+ if(!isRendered())
+ return;
+
+ // render components
+ ResponseWriter writer = context.getResponseWriter();
+ writer.startElement("li", this);
+ writer.writeAttribute("id", getClientId(context), null);
+ writer.writeAttribute("class", getStyleClass(), null);
+ writer.writeAttribute("count", String.valueOf(renderCount++), null);
+
+ // begin
+ super.encodeBegin(context);
+ }
+
+ @Override
+ public boolean getRendersChildren()
+ {
+ return true;
+ }
+
+ @Override
+ public void encodeChildren(FacesContext context)
+ throws IOException
+ {
+ if (isExpanded())
+ {
+ UIComponent c = getChildren().get(0);
+ if (c instanceof HtmlOutcomeTargetLink)
+ { if (c.isRendered())
+ { log.warn("Unexpected rendering of output link. Rendering is ignored.");
+ c.setRendered(false);
+ }
+ }
+ else
+ log.warn("Unexpected child element as first child of MenuItemTag!");
+ // encode children
+ super.encodeChildren(context);
+ }
+ }
+
+ @Override
+ public void encodeEnd(FacesContext context)
+ throws IOException
+ {
+ if(!isRendered())
+ return;
+ // call base
+ super.encodeEnd(context);
+ // end of list item
+ ResponseWriter writer = context.getResponseWriter();
+ writer.endElement("li");
+ }
+
+ /*
+ private void printChildTree(UIComponent comp, int level)
+ {
+ List<UIComponent> cl = comp.getChildren();
+ for (UIComponent c : cl)
+ {
+ boolean isRendered = c.isRendered();
+ log.info("-{}- rendering {} "+String.valueOf(isRendered), level, c.getClass().getSimpleName());
+ printChildTree(c, level+1);
+ }
+ }
+ */
+
+ @Override
+ protected String getLinkStyleClass()
+ {
+ return null;
+ }
+
+ protected MenuListTag getParentMenu()
+ {
+ // walk upwards the parent component tree and return the first record component found (if
+ // any)
+ UIComponent parent = this;
+ while ((parent = parent.getParent()) != null)
+ {
+ if (parent instanceof MenuListTag)
+ {
+ return (MenuListTag) parent;
+ }
+ }
+ return null;
+ }
+
+ private boolean isCurrent()
+ {
+ if (menuId==null || parentMenu==null || parentMenu.getCurrentId()==null)
+ return false;
+ // All present
+ return menuId.equals(parentMenu.getCurrentId());
+ }
+
+ private boolean isDisabled()
+ {
+ Object value = getAttributes().get("disabled");
+ if (value!=null)
+ return ObjectUtils.getBoolean(value);
+ return false;
+ }
+
+ private boolean isExpanded()
+ {
+ Object value = getAttributes().get("expanded");
+ boolean auto = false;
+ if (value!=null)
+ { // is current?
+ auto = "auto".equals(value);
+ if (auto==false)
+ return ObjectUtils.getBoolean(value);
+ // check current
+ if (isCurrent())
+ return true;
+ }
+ // Check parent
+ if (menuId==null || parentMenu==null || parentMenu.getCurrentId()==null)
+ return auto;
+ // All present
+ String currentId = parentMenu.getCurrentId();
+ return currentId.startsWith(menuId+".");
+ }
+
+ @Override
+ public boolean isRendered()
+ {
+ Object value = getAttributes().get("currentOnly");
+ boolean currentOnly = false;
+ if(value!=null)
+ currentOnly = ObjectUtils.getBoolean(value);
+
+ // Check parent
+ if (currentOnly && menuId!=null && parentMenu!=null && parentMenu.getCurrentId()!=null)
+ {
+ return isCurrent();
+ }
+
+ return super.isRendered();
+ }
+
+ private String getStyleClass()
+ {
+ String styleClass = StringUtils.toString(getAttributes().get("styleClass"));
+ String menuClass = null;
+ if (parentMenu!=null)
+ {
+ // Menu Class
+ if (isCurrent())
+ menuClass = parentMenu.getCurrentClass();
+ else if (isExpanded())
+ menuClass = parentMenu.getExpandedClass();
+ else if (isDisabled())
+ menuClass = parentMenu.getDisabledClass();
+ else
+ menuClass = parentMenu.getEnabledClass();
+ // Style Class
+ if (StringUtils.isEmpty(styleClass))
+ styleClass = parentMenu.getItemStyleClass();
+ }
+ // check
+ if (menuClass==null)
+ return styleClass;
+ if (StringUtils.isEmpty(styleClass))
+ return menuClass;
+ // both supplied
+ return styleClass+" "+menuClass;
+ }
+
+}
Propchange: empire-db/trunk/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/MenuItemTag.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: empire-db/trunk/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/MenuListTag.java
URL: http://svn.apache.org/viewvc/empire-db/trunk/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/MenuListTag.java?rev=1326123&view=auto
==============================================================================
--- empire-db/trunk/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/MenuListTag.java (added)
+++ empire-db/trunk/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/MenuListTag.java Sat Apr 14 14:57:28 2012
@@ -0,0 +1,212 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.empire.jsf2.components;
+
+import java.io.IOException;
+import java.util.Map;
+
+import javax.faces.component.NamingContainer;
+import javax.faces.component.UIComponent;
+import javax.faces.component.UINamingContainer;
+import javax.faces.component.UIOutput;
+import javax.faces.context.FacesContext;
+import javax.faces.context.ResponseWriter;
+
+import org.apache.empire.commons.StringUtils;
+
+public class MenuListTag extends UIOutput implements NamingContainer
+{
+ // Logger
+ // private static final Logger log = LoggerFactory.getLogger(MenuTag.class);
+
+ private String currentId = null;
+ private String currentClass = null;
+ private String enabledClass = null;
+ private String disabledClass = null;
+ private String expandedClass = null;
+ private String defaultItemClass = null; // e.g. "level{}"
+ private int level = 0;
+
+ @Override
+ public String getFamily()
+ {
+ return UINamingContainer.COMPONENT_FAMILY;
+ }
+
+ @Override
+ public void encodeBegin(FacesContext context)
+ throws IOException
+ {
+ // call base
+ super.encodeBegin(context);
+
+ Map<String, Object> map = getAttributes();
+ initMenuAttributes(map);
+
+ // render components
+ ResponseWriter writer = context.getResponseWriter();
+ writer.startElement("ul", this);
+ // writeAttribute(writer, map, "id");
+ writeAttribute(writer, map, "styleClass", "class");
+ writeAttribute(writer, map, "style");
+ }
+
+ /*
+ @Override
+ public boolean getRendersChildren()
+ {
+ boolean test = super.getRendersChildren();
+ return test;
+ }
+ */
+
+ @Override
+ public void encodeEnd(FacesContext context)
+ throws IOException
+ {
+ ResponseWriter writer = context.getResponseWriter();
+ writer.endElement("ul");
+ // call base
+ super.encodeEnd(context);
+ }
+
+ private void initMenuAttributes(Map<String, Object> map)
+ {
+ currentId = StringUtils.toString(map.get("currentId"));
+ currentClass = StringUtils.toString(map.get("currentClass"));
+ enabledClass = StringUtils.toString(map.get("enabledClass"));
+ disabledClass = StringUtils.toString(map.get("disabledClass"));
+ expandedClass = StringUtils.toString(map.get("expandedClass"));
+ defaultItemClass = StringUtils.toString(map.get("defaultItemClass"));
+
+ MenuListTag parent = getParentMenu();
+ if (parent==null)
+ return;
+
+ if (currentId==null)
+ currentId = parent.getCurrentId();
+ if (currentClass==null)
+ currentClass = parent.getCurrentClass();
+ if (enabledClass==null)
+ enabledClass = parent.getEnabledClass();
+ if (disabledClass==null)
+ disabledClass = parent.getDisabledClass();
+ if (expandedClass==null)
+ expandedClass = parent.getExpandedClass();
+ if (defaultItemClass==null)
+ defaultItemClass = parent.defaultItemClass;
+
+ // Copy parent Info
+ level = parent.level + 1;
+ }
+
+ protected MenuListTag getParentMenu()
+ {
+ // walk upwards the parent component tree and return the first record component found (if
+ // any)
+ UIComponent parent = this;
+ while ((parent = parent.getParent()) != null)
+ {
+ if (parent instanceof MenuListTag)
+ {
+ return (MenuListTag) parent;
+ }
+ }
+ return null;
+ }
+
+ public String getCurrentId()
+ {
+ return currentId;
+ }
+
+ public String getCurrentClass()
+ {
+ return currentClass;
+ }
+
+ public String getEnabledClass()
+ {
+ return enabledClass;
+ }
+
+ public String getDisabledClass()
+ {
+ return disabledClass;
+ }
+
+ public String getExpandedClass()
+ {
+ return expandedClass;
+ }
+
+ public int getLevel()
+ {
+ return level;
+ }
+
+ public String getItemStyleClass()
+ {
+ if (defaultItemClass!=null && defaultItemClass.indexOf("{}")>=0)
+ return StringUtils.replace(defaultItemClass, "{}", String.valueOf(level));
+ // return default
+ return defaultItemClass;
+ }
+
+ /** setters wozu? **/
+
+ public void setCurrentId(String currentId)
+ {
+ this.currentId = currentId;
+ }
+
+ public void setCurrentClass(String currentClass)
+ {
+ this.currentClass = currentClass;
+ }
+
+ public void setEnabledClass(String enabledClass)
+ {
+ this.enabledClass = enabledClass;
+ }
+
+ public void setDisabledClass(String disabledClass)
+ {
+ this.disabledClass = disabledClass;
+ }
+
+ public void setExpandedClass(String expandedClass)
+ {
+ this.expandedClass = expandedClass;
+ }
+
+ 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);
+ }
+
+}
Propchange: empire-db/trunk/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/MenuListTag.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: empire-db/trunk/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/NbspTag.java
URL: http://svn.apache.org/viewvc/empire-db/trunk/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/NbspTag.java?rev=1326123&view=auto
==============================================================================
--- empire-db/trunk/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/NbspTag.java (added)
+++ empire-db/trunk/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/NbspTag.java Sat Apr 14 14:57:28 2012
@@ -0,0 +1,71 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.empire.jsf2.components;
+
+import java.io.IOException;
+
+import javax.faces.component.NamingContainer;
+import javax.faces.component.UINamingContainer;
+import javax.faces.component.UIOutput;
+import javax.faces.context.FacesContext;
+import javax.faces.context.ResponseWriter;
+
+import org.apache.empire.commons.ObjectUtils;
+
+public class NbspTag extends UIOutput implements NamingContainer
+{
+ // private int count = 1;
+
+ @Override
+ public String getFamily()
+ {
+ return UINamingContainer.COMPONENT_FAMILY;
+ }
+
+ @Override
+ public void encodeBegin(FacesContext context)
+ throws IOException
+ {
+ super.encodeBegin(context);
+ // write
+ ResponseWriter writer = context.getResponseWriter();
+ int count = getCountAttribute();
+ while (count>0)
+ {
+ writer.write(" ");
+ count--;
+ }
+ }
+
+ public int getCountAttribute()
+ {
+ Object value = getAttributes().get("count");
+ if (value!=null)
+ return ObjectUtils.getInteger(value);
+ return 1;
+ }
+
+ /*
+ public void setCount(int count)
+ {
+ this.count = count;
+ }
+ */
+
+}
Propchange: empire-db/trunk/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/NbspTag.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: empire-db/trunk/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/RecordTag.java
URL: http://svn.apache.org/viewvc/empire-db/trunk/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/RecordTag.java?rev=1326123&view=auto
==============================================================================
--- empire-db/trunk/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/RecordTag.java (added)
+++ empire-db/trunk/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/RecordTag.java Sat Apr 14 14:57:28 2012
@@ -0,0 +1,67 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.empire.jsf2.components;
+
+import javax.faces.component.NamingContainer;
+import javax.faces.component.UIComponentBase;
+
+import org.apache.empire.commons.ObjectUtils;
+import org.apache.empire.data.Record;
+import org.apache.empire.data.RecordData;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class RecordTag extends UIComponentBase implements NamingContainer
+{
+ // Logger
+ private static final Logger log = LoggerFactory.getLogger(RecordTag.class);
+
+ public RecordTag()
+ {
+ log.trace("component record created");
+ }
+
+ @Override
+ public String getFamily()
+ {
+ return "javax.faces.NamingContainer";
+ }
+
+ public Object getRecord()
+ {
+ return getAttributes().get("value");
+ }
+
+ public boolean isReadOnly()
+ {
+ // is it a record?
+ Object rec = getRecord();
+ if (rec instanceof RecordData)
+ { // only a RecordData?
+ if (!(rec instanceof Record) || !((Record)rec).isValid())
+ return true;
+ }
+ // check attribute
+ Object ro = getAttributes().get("readonly");
+ if (ro != null)
+ return ObjectUtils.getBoolean(ro);
+ // ask record
+ return false;
+ }
+}
Propchange: empire-db/trunk/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/RecordTag.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: empire-db/trunk/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/SelectTag.java
URL: http://svn.apache.org/viewvc/empire-db/trunk/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/SelectTag.java?rev=1326123&view=auto
==============================================================================
--- empire-db/trunk/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/SelectTag.java (added)
+++ empire-db/trunk/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/SelectTag.java Sat Apr 14 14:57:28 2012
@@ -0,0 +1,205 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.empire.jsf2.components;
+
+import java.io.IOException;
+import java.util.Map;
+
+import javax.faces.component.NamingContainer;
+import javax.faces.component.UIComponent;
+import javax.faces.component.UIInput;
+import javax.faces.component.UISelectItem;
+import javax.faces.component.html.HtmlSelectOneMenu;
+import javax.faces.context.FacesContext;
+
+import org.apache.empire.commons.ObjectUtils;
+import org.apache.empire.commons.OptionEntry;
+import org.apache.empire.commons.Options;
+import org.apache.empire.commons.StringUtils;
+import org.apache.empire.jsf2.app.FacesUtils;
+import org.apache.empire.jsf2.app.TextResolver;
+import org.apache.empire.jsf2.utils.TagRenderHelper;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class SelectTag extends UIInput implements NamingContainer
+{
+ // Logger
+ private static final Logger log = LoggerFactory.getLogger(SelectTag.class);
+
+ public SelectTag()
+ {
+ log.trace("component select created");
+ }
+
+ @Override
+ public String getFamily()
+ {
+ return "javax.faces.NamingContainer";
+ }
+
+ @Override
+ public void encodeBegin(FacesContext context)
+ throws IOException
+ {
+ // add label and input components when the view is loaded for the first time
+ UIInput inputComponent = null;
+ if (getChildCount() > 0)
+ {
+ inputComponent = getInputComponent();
+ }
+ if (inputComponent == null)
+ {
+ inputComponent = createSelectOneMenu(FacesUtils.getTextResolver(context));
+ this.getChildren().add(inputComponent);
+ }
+ // render components
+ inputComponent.encodeAll(context);
+ // default
+ super.encodeBegin(context);
+ }
+
+ @Override
+ public void updateModel(FacesContext context)
+ {
+ // check read only
+ if (!isDisabled())
+ {
+ UIInput inputComponent = getInputComponent();
+
+ Object value = inputComponent == null ? "" : inputComponent.getValue();
+ if (value == null)
+ value = "";
+ setValue(value);
+ }
+ super.updateModel(context);
+ }
+
+ @Override
+ public void validate(FacesContext context)
+ {
+ // nothing submitted (AJAX part request, e.g. calendar component) or readonly (won't be set
+ // in updateModel())?
+ UIInput inputComponent = getInputComponent();
+ if (inputComponent == null)
+ {
+ return;
+ }
+ // component itself already checked validity, was it successful?
+ if (!inputComponent.isValid() || isDisabled())
+ {
+ return;
+ }
+ // nothing to do
+ super.validate(context);
+ }
+
+ private UIInput getInputComponent()
+ {
+ if (getChildren().size() == 0)
+ {
+ return null;
+ }
+
+ return (UIInput) getChildren().get(0);
+ }
+
+ private Options getOptionList()
+ {
+ Object options = getAttributes().get("options");
+ if (!(options instanceof Options))
+ return new Options();
+ return ((Options) options);
+ }
+
+ private boolean isAllowNull()
+ {
+ Object allowNull = getAttributes().get("allowNull");
+ return ObjectUtils.getBoolean(allowNull);
+ }
+
+ private String getNullText()
+ {
+ Object nullText = getAttributes().get("nullText");
+ return StringUtils.toString(nullText, "");
+ }
+
+ private boolean isDisabled()
+ {
+ Object disabled = getAttributes().get("disabled");
+ return ObjectUtils.getBoolean(disabled);
+ }
+
+ private UIInput createSelectOneMenu(TextResolver textResolver)
+ {
+
+ HtmlSelectOneMenu input = new HtmlSelectOneMenu();
+ // css style
+ String userStyle = StringUtils.toString(getAttributes().get("styleClass"));
+ String cssStyle = TagRenderHelper.getTagStyleClass("eSelect", null, null, userStyle);
+ input.setStyleClass(cssStyle);
+ // other attributes
+ copyAttributes(input);
+ // Options
+ Options options = getOptionList();
+ if (isAllowNull())
+ { // Empty entry
+ options = new Options(options);
+ addSelectItem(input, textResolver, new OptionEntry("", getNullText()));
+ }
+ for (OptionEntry e : options)
+ { // Option entries
+ addSelectItem(input, textResolver, e);
+ }
+ // input.setReadonly(isReadOnly());
+ if (isDisabled())
+ input.setDisabled(true);
+ // input.setLabel(getLabelString());
+ // input.setRequired(col.isRequired() && !col.isAutoGenerated());
+ // input.setId(this.getId() + INPUT_SUFFIX);
+ input.setValue(getValue());
+ return input;
+ }
+
+ private void copyAttributes(HtmlSelectOneMenu input)
+ {
+ Map<String, Object> attr = getAttributes();
+ Object value;
+ if ((value = attr.get("style")) != null)
+ input.setStyle(StringUtils.toString(value));
+ if ((value = attr.get("tabindex")) != null)
+ input.setTabindex(StringUtils.toString(value));
+ if ((value = attr.get("onchange")) != null)
+ input.setOnchange(StringUtils.toString(value));
+ }
+
+ private void addSelectItem(UIComponent input, TextResolver textResolver, OptionEntry e)
+ {
+ UISelectItem selectItem = new UISelectItem();
+ // set value
+ selectItem.setItemValue(e.getValueString());
+ // set text
+ String text = e.getText();
+ text = textResolver.resolveText(text);
+ selectItem.setItemLabel(text);
+ // add item
+ input.getChildren().add(selectItem);
+ }
+
+}
Propchange: empire-db/trunk/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/SelectTag.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: empire-db/trunk/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/TitleTag.java
URL: http://svn.apache.org/viewvc/empire-db/trunk/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/TitleTag.java?rev=1326123&view=auto
==============================================================================
--- empire-db/trunk/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/TitleTag.java (added)
+++ empire-db/trunk/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/TitleTag.java Sat Apr 14 14:57:28 2012
@@ -0,0 +1,114 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.empire.jsf2.components;
+
+import java.io.IOException;
+import java.util.Map;
+
+import javax.faces.component.NamingContainer;
+import javax.faces.component.UIOutput;
+import javax.faces.context.FacesContext;
+import javax.faces.context.ResponseWriter;
+
+import org.apache.empire.commons.StringUtils;
+import org.apache.empire.data.Column;
+import org.apache.empire.exceptions.InvalidArgumentException;
+import org.apache.empire.jsf2.utils.TagRenderHelper;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class TitleTag extends UIOutput implements NamingContainer
+{
+ // Logger
+ private static final Logger log = LoggerFactory.getLogger(TitleTag.class);
+
+ private TagRenderHelper helper = new TagRenderHelper(this, "eTitle");
+
+ public TitleTag()
+ {
+ log.trace("component LabelTag created");
+ }
+
+ @Override
+ public String getFamily()
+ {
+ return "javax.faces.NamingContainer";
+ }
+
+ @Override
+ public void encodeBegin(FacesContext context)
+ throws IOException
+ {
+ // add label and input components when the view is loaded for the first time
+ super.encodeBegin(context);
+
+ // Create
+ Column column = helper.getColumn();
+ if (column==null)
+ throw new InvalidArgumentException("column", column);
+
+ // Tooltip title
+ String title = helper.getLabelTooltip(column);
+
+ // render components
+ ResponseWriter writer = context.getResponseWriter();
+ String tag = writeStartElement(title, writer);
+ renderLabel(column, writer);
+ if (tag != null)
+ writer.endElement(tag);
+ }
+
+ /* Helpers */
+ protected void renderLabel(Column column, ResponseWriter writer) throws IOException
+ {
+ String title=null;
+ // Check for short form
+ if (helper.hasFormat("short"))
+ {
+ title = StringUtils.toString(column.getAttribute(TagRenderHelper.COLATTR_ABBR_TITLE));
+ if (title==null)
+ log.warn("No Abbreviation available for column {}. Using normal title.", column.getName());
+ }
+ // Use normal title
+ if (title==null)
+ title=column.getTitle();
+ // render now
+ title = helper.getDisplayText(title);
+ writer.append((StringUtils.isEmpty(title) ? " " : title));
+ }
+
+ protected String writeStartElement(String title, ResponseWriter writer)
+ throws IOException
+ {
+ Map<String, Object> map = getAttributes();
+ String tag = StringUtils.toString(map.get("tag"));
+ // Check
+ if (tag == null && title == null && !map.containsKey("styleClass"))
+ return null;
+ // Write tag
+ if (StringUtils.isEmpty(tag))
+ tag="span";
+ writer.startElement(tag, this);
+ helper.writeAttribute(writer, "class", helper.getTagStyleClass());
+ helper.writeAttribute(writer, "style", map.get("style"));
+ helper.writeAttribute(writer, "title", title);
+ return tag;
+ }
+
+}
Propchange: empire-db/trunk/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/TitleTag.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: empire-db/trunk/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/ValueTag.java
URL: http://svn.apache.org/viewvc/empire-db/trunk/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/ValueTag.java?rev=1326123&view=auto
==============================================================================
--- empire-db/trunk/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/ValueTag.java (added)
+++ empire-db/trunk/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/ValueTag.java Sat Apr 14 14:57:28 2012
@@ -0,0 +1,92 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.empire.jsf2.components;
+
+import java.io.IOException;
+import java.util.Map;
+
+import javax.faces.component.UIOutput;
+import javax.faces.context.FacesContext;
+import javax.faces.context.ResponseWriter;
+
+import org.apache.empire.commons.StringUtils;
+import org.apache.empire.jsf2.controls.FieldRenderer;
+import org.apache.empire.jsf2.utils.TagRenderHelper;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class ValueTag extends UIOutput // implements NamingContainer
+{
+
+ // Logger
+ private static final Logger log = LoggerFactory.getLogger(ValueTag.class);
+
+ private TagRenderHelper helper = new TagRenderHelper(this, "eVal");
+
+ public ValueTag()
+ {
+ log.trace("component value created");
+ }
+
+ @Override
+ public String getFamily()
+ {
+ return "javax.faces.NamingContainer";
+ }
+
+ @Override
+ public void encodeBegin(FacesContext context)
+ throws IOException
+ {
+
+ // add label and input components when the view is loaded for the first time
+ super.encodeBegin(context);
+
+ helper.encodeBegin();
+ FieldRenderer renderer = helper.getFieldRenderer();
+ FieldRenderer.ValueInfo vi = helper.getValueInfo(context);
+
+ // render components
+ ResponseWriter writer = context.getResponseWriter();
+ String tag = writeStartElement(vi, writer);
+ renderer.renderValue(vi, writer);
+ if (tag != null)
+ writer.endElement(tag);
+ }
+
+ protected String writeStartElement(FieldRenderer.ValueInfo vi, ResponseWriter writer)
+ throws IOException
+ {
+ Map<String, Object> map = getAttributes();
+ String tag = StringUtils.toString(map.get("tag"));
+ String title = StringUtils.toString(map.get("title"));
+ // Check
+ if (tag == null && title == null && !map.containsKey("styleClass"))
+ return null;
+ // Write tag
+ if (StringUtils.isEmpty(tag))
+ tag="span";
+ writer.startElement(tag, this);
+ helper.writeAttribute(writer, "class", helper.getTagStyleClass());
+ helper.writeAttribute(writer, "style", map.get("style"));
+ helper.writeAttribute(writer, "title", helper.getValueTooltip(title));
+ return tag;
+ }
+
+}
Propchange: empire-db/trunk/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/components/ValueTag.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: empire-db/trunk/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/controls/FieldRenderer.java
URL: http://svn.apache.org/viewvc/empire-db/trunk/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/controls/FieldRenderer.java?rev=1326123&view=auto
==============================================================================
--- empire-db/trunk/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/controls/FieldRenderer.java (added)
+++ empire-db/trunk/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/controls/FieldRenderer.java Sat Apr 14 14:57:28 2012
@@ -0,0 +1,439 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.empire.jsf2.controls;
+
+import java.io.IOException;
+import java.util.List;
+import java.util.Locale;
+
+import javax.faces.component.UIComponent;
+import javax.faces.component.UIInput;
+import javax.faces.context.FacesContext;
+import javax.faces.context.ResponseWriter;
+
+import org.apache.empire.commons.Options;
+import org.apache.empire.commons.StringUtils;
+import org.apache.empire.data.Column;
+import org.apache.empire.exceptions.ObjectNotValidException;
+import org.apache.empire.exceptions.UnexpectedReturnValueException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public abstract class FieldRenderer
+{
+ /*
+ public static class ColumnValueValidator implements Validator, StateHolder
+ {
+ private static final Logger log = LoggerFactory.getLogger(ColumnValueValidator.class);
+
+ private Column column;
+
+ public ColumnValueValidator()
+ {
+ }
+
+ public ColumnValueValidator(Column column)
+ {
+ this.column=column;
+ }
+
+ @Override
+ public void validate(FacesContext context, UIComponent component, Object value)
+ throws ValidatorException
+ {
+ try {
+ log.info("ColumnValueValidator:validate for column "+column.getName()+" value is: "+String.valueOf(value));
+ column.validate(value);
+ if (value.equals("test"))
+ throw new FieldIllegalValueException(column, String.valueOf(value));
+
+ } catch(Exception e) {
+ FacesMessage msg = new FacesMessage(e.getLocalizedMessage());
+ throw new ValidatorException(msg);
+ }
+ }
+
+ @Override
+ public Object saveState(FacesContext context)
+ {
+ /-- *
+ try
+ { // Serialization test
+ String columnId = ((DBColumn)column).getId();
+
+ DBColumn c = DBColumn.findById(columnId);
+ if (c==column)
+ log.info("success!");
+
+ // findByClass test
+ DBDatabase fdb = DBDatabase.findByClass(FinDB.class);
+ log.info(fdb.getId());
+
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ ObjectOutputStream oos = new ObjectOutputStream(baos);
+ oos.writeObject(column);
+ // oos.writeObject(fdb);
+ oos.flush();
+ String info = baos.toString();
+ System.out.println(info);
+ byte[] bytes = baos.toByteArray();
+ int size = bytes.length;
+ System.out.println("Size is "+String.valueOf(size));
+
+ ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
+ ObjectInputStream ois = new ObjectInputStream(bais);
+ Object obj = ois.readObject();
+
+ if (obj instanceof FinDB)
+ {
+ System.out.println("Hurra Database!");
+ }
+ if (obj instanceof Column)
+ {
+ if (column==(Column)obj)
+ System.out.println("Hurra Column!");
+ }
+ }
+ catch (ClassNotFoundException e)
+ {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ catch (IOException e)
+ {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ * --/
+ return column;
+ }
+
+ @Override
+ public void restoreState(FacesContext context, Object state)
+ {
+ if (state instanceof Column)
+ column = (Column)state;
+ }
+
+ @Override
+ public boolean isTransient()
+ {
+ return false;
+ }
+
+ @Override
+ public void setTransient(boolean newTransientValue)
+ {
+ }
+ }
+ */
+
+ private static final Logger log = LoggerFactory.getLogger(FieldRenderer.class);
+
+ // Special Input Column Attributes
+ public static final String NUMBER_TYPE_ATTRIBUTE = "numberType"; // "Integer", "Currency", "Percent"
+ public static final String NUMBER_GROUPSEP_ATTRIBUTE = "numberGroupSeparator"; // boolean
+ public static final String NUMBER_FRACTION_DIGITS = "numberFractionDigits"; // integer
+ public static final String MINVALUE_ATTRIBUTE = "minValue";
+ public static final String MAXVALUE_ATTRIBUTE = "maxValue";
+ public static final String CURRENCY_CODE_ATTRIBUTE = "currencyCode"; // "ISO 4217 code of the currency"
+
+ public FieldRenderer()
+ {
+ log.info("FieldRenderer created");
+ }
+
+ /**
+ * This interface allows access to a value and its metainformation
+ * used with the renderData function
+ */
+ public interface ValueInfo
+ {
+ Column getColumn();
+ Options getOptions();
+ Object getValue();
+ Object getNullValue();
+ String getFormat(); // Custom Formatting options specific to each InputControl-type
+ Locale getLocale();
+ String getText(String key);
+ /*
+ String getOnclick();
+ String getOndblclick();
+ String getCssClass();
+ String getCssStyle();
+ String getId();
+ */
+ }
+
+ /**
+ * This interface extends the value information by information about the input control
+ * used with the renderInput function
+ */
+ public interface InputInfo extends ValueInfo
+ {
+ int getHSize();
+ int getVSize();
+ boolean isRequired();
+ boolean isDisabled(); // readOnly
+ String getInputId();
+ String getTabindex();
+ String getStyleClass(String addlStyle);
+ // perform action
+ void setValue(Object value);
+ void validate(Object value);
+
+ // String getAccesskey();
+ /*
+ String getName();
+ boolean isValid(); // Indicates whether the value supplied is valid
+ String getOnchange();
+ String getOnfocus();
+ String getOnblur();
+ */
+ }
+
+ private String name;
+
+ protected FieldRenderer(String name)
+ {
+ this.name = name;
+ }
+
+ public final String getName()
+ {
+ return name;
+ }
+
+ /* Value */
+ public void renderValue(ValueInfo vi, ResponseWriter writer)
+ throws IOException
+ {
+ String text = formatValue(vi);
+ writer.append((StringUtils.isEmpty(text) ? " " : text));
+ }
+
+ /* Input */
+ public void renderInput(UIComponent comp, InputInfo ii, FacesContext context, boolean encode)
+ throws IOException
+ {
+ int count = comp.getChildCount();
+ if (count<1)
+ createInputComponents(comp, ii, context, comp.getChildren());
+ // Encode all
+ if (!encode)
+ return;
+ for (UIComponent child : comp.getChildren())
+ {
+ child.encodeAll(context);
+ }
+ }
+
+ public Object getInputValue(UIComponent comp, InputInfo ii, boolean submitted)
+ {
+ UIInput input = getInputComponent(comp);
+ if (input==null)
+ throw new ObjectNotValidException(this);
+
+ // Get value from Input
+ return (submitted) ? input.getSubmittedValue() : input.getValue();
+ }
+
+ /* validate
+ public boolean validateValue(UIComponent comp, InputInfo ii, FacesContext context)
+ {
+ UIInput input = getInputComponent(comp);
+ if (input==null)
+ throw new ObjectNotValidException(this);
+
+ input.validate(context);
+ if (input.isValid()==false)
+ return false;
+ /-*
+ Object value = getInputValue(comp, ii, context, false);
+ try {
+ ii.getColumn().validate(value);
+ Object xxx = input.getLocalValue();
+ // Wert geändert?
+ Object previous = ii.getValue();
+ if (ObjectUtils.compareEqual(value, previous)==false)
+ {
+ comp.queueEvent(new ValueChangeEvent(comp, previous, value));
+ // Wert setzen
+ ii.setValue(value, true);
+ }
+ return true;
+
+ } catch(Exception e) {
+ // Add Error Messgae
+ String text = e.getLocalizedMessage();
+ FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, text, text);
+ context.addMessage(comp.getClientId(), msg);
+ // Invalid
+ ii.setValue(value, false);
+ return false;
+ }
+ *-/
+ return true;
+ }
+ */
+
+ /* Input helpers */
+ protected abstract void createInputComponents(UIComponent parent, InputInfo ii, FacesContext context, List<UIComponent> compList);
+
+ protected UIInput getInputComponent(UIComponent parent)
+ {
+ // default implementation
+ int count = parent.getChildCount();
+ if (count!=1)
+ return null;
+ // the input
+ UIComponent inp = parent.getChildren().get(0);
+ if (!(inp instanceof UIInput))
+ throw new UnexpectedReturnValueException(inp, "comp.getChildren().get(0)");
+ // OK
+ return (UIInput)inp;
+ }
+
+ protected void copyAttributes(UIComponent parent, InputInfo ii, UIInput input, String additonalStyle)
+ {
+ String inputId = ii.getInputId();
+ if (StringUtils.isNotEmpty(inputId))
+ input.getAttributes().put("id", inputId);
+
+ String styleClass = ii.getStyleClass(additonalStyle);
+ input.getAttributes().put("styleClass", styleClass);
+
+ copyAttribute(parent, input, "style");
+ copyAttribute(parent, input, "tabindex");
+ copyAttribute(parent, input, "onchange");
+
+ // validator
+ // input.addValidator(new ColumnValueValidator(ii.getColumn()));
+
+ // IceFaces special
+ /*
+ if (input instanceof IceExtended)
+ { // partialSubmit
+ Object v = parent.getAttributes().get("partialSubmit");
+ if (v!=null)
+ ((IceExtended)input).setPartialSubmit(ObjectUtils.getBoolean(v));
+ }
+ */
+ }
+
+ protected final void copyAttributes(UIComponent parent, InputInfo ii, UIInput input)
+ {
+ copyAttributes(parent, ii, input, null);
+ }
+
+ protected void copyAttribute(UIComponent parent, UIInput input, String name)
+ {
+ Object value = parent.getAttributes().get(name);
+ if (value!=null)
+ input.getAttributes().put(name, value);
+ }
+
+ /**
+ * Returns the value formated as a string
+ * this is a simple default implementation that does no type-secific formatting
+ * Derived classes may override formatString an provide further formmatting
+ * see TextInputControl for details
+ *
+ * @param value the value to be formatted
+ * @param vi Meta-information about the value
+ *
+ * @return the formatted value
+ */
+ protected String formatValue(Object value, ValueInfo vi, boolean hasError)
+ {
+ // Lookup and Print value
+ Options options = vi.getOptions();
+ if (options != null && !options.isEmpty() && !hasFormatOption(vi, "nolookup"))
+ { // Check for Options
+ String text = options.get(value);
+ if (text != null)
+ return vi.getText(text);
+ // Error
+ log.error("The element '" + String.valueOf(value) + "' is not part of the supplied option list.");
+ }
+ // value
+ if (value==null)
+ value = vi.getNullValue();
+ // Convert to String
+ String s = StringUtils.valueOf(value);
+ if (hasFormatOption(vi, "noencode"))
+ return s;
+ // Encode Html
+ return escapeHTML(s);
+ }
+
+ /**
+ * Returns the value formated as a string
+ * This is a shortcut for formatString(vi.getValue(), vi)
+ * Derived classes may override formatString
+ */
+ protected final String formatValue(ValueInfo vi)
+ {
+ boolean hasError = false; // ((vi instanceof InputInfo) && !((InputInfo)vi).isValid());
+ return formatValue(vi.getValue(), vi, hasError);
+ }
+
+ /**
+ * escapes a String for html
+ * @param text
+ * @return the escaped html String
+ */
+ protected String escapeHTML(String text)
+ {
+ // TODO
+ return text;
+ }
+
+ /**
+ * checks if a particular formating option has been specified.
+ * @param vi the value info
+ * @param option the formating option to check
+ * @return true if the requested formating option has been specified or false otherwise
+ */
+ protected boolean hasFormatOption(ValueInfo vi, String option)
+ {
+ String format = vi.getFormat();
+ return (format!=null ? format.indexOf(option)>=0 : false);
+ }
+
+ protected String getFormatOption(ValueInfo vi, String option)
+ {
+ // Is unit supplied with format
+ String format = vi.getFormat();
+ if (format==null)
+ return null;
+ // Check for option
+ int beg = format.indexOf(option);
+ if (beg < 0)
+ return null;
+ // Find
+ beg = beg + option.length();
+ int end = format.indexOf(';', beg+1);
+ if (end < beg)
+ return format.substring(beg);
+ // The cbValue
+ return format.substring(beg, end);
+ }
+
+}
Propchange: empire-db/trunk/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/controls/FieldRenderer.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: empire-db/trunk/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/controls/FieldRendererManager.java
URL: http://svn.apache.org/viewvc/empire-db/trunk/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/controls/FieldRendererManager.java?rev=1326123&view=auto
==============================================================================
--- empire-db/trunk/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/controls/FieldRendererManager.java (added)
+++ empire-db/trunk/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/controls/FieldRendererManager.java Sat Apr 14 14:57:28 2012
@@ -0,0 +1,59 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.empire.jsf2.controls;
+
+import java.util.HashMap;
+
+public final class FieldRendererManager
+{
+ static HashMap<String, FieldRenderer> rendererMap = null;
+
+ static {
+
+ rendererMap = new HashMap<String, FieldRenderer>();
+
+ registerRenderer(new TextFieldRenderer());
+ registerRenderer(new SelectFieldRenderer());
+ registerRenderer(new TextAreaFieldRenderer());
+ /*
+ registerControl("checkbox", new CheckboxInputControl());
+ registerControl("phone", new PhoneInputControl());
+ registerControl("radio", new RadioInputControl());
+ registerControl("email", new EMailInputControl());
+ registerControl("hlink", new HLinkInputControl());
+ registerControl("password", new PasswordInputControl());
+ */
+ }
+
+ private FieldRendererManager()
+ {
+ // Default Constructor
+ }
+
+ public static void registerRenderer(FieldRenderer renderer)
+ {
+ rendererMap.put(renderer.getName(), renderer);
+ }
+
+ public static FieldRenderer getRenderer(String name)
+ {
+ return rendererMap.get(name);
+ }
+
+}
Propchange: empire-db/trunk/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/controls/FieldRendererManager.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: empire-db/trunk/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/controls/SelectFieldRenderer.java
URL: http://svn.apache.org/viewvc/empire-db/trunk/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/controls/SelectFieldRenderer.java?rev=1326123&view=auto
==============================================================================
--- empire-db/trunk/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/controls/SelectFieldRenderer.java (added)
+++ empire-db/trunk/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/controls/SelectFieldRenderer.java Sat Apr 14 14:57:28 2012
@@ -0,0 +1,201 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.empire.jsf2.controls;
+
+import java.util.List;
+
+import javax.faces.component.UIComponent;
+import javax.faces.component.UISelectItem;
+import javax.faces.component.html.HtmlSelectOneMenu;
+import javax.faces.context.FacesContext;
+
+import org.apache.empire.commons.OptionEntry;
+import org.apache.empire.commons.Options;
+import org.apache.empire.data.Column;
+import org.apache.empire.exceptions.InternalException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class SelectFieldRenderer extends FieldRenderer
+{
+ private static final Logger log = LoggerFactory.getLogger(SelectFieldRenderer.class);
+
+ public static final String COLATTR_ABBR_OPTIONS = "ABBR_OPTIONS"; // Option list for abbreviations
+
+ public static final String NAME = "select";
+
+ private Class<? extends javax.faces.component.html.HtmlSelectOneMenu> inputComponentClass;
+
+ public SelectFieldRenderer(Class<? extends HtmlSelectOneMenu> inputComponentClass)
+ {
+ super(NAME);
+ this.inputComponentClass = inputComponentClass;
+ }
+
+ public SelectFieldRenderer()
+ {
+ this(javax.faces.component.html.HtmlSelectOneMenu.class);
+ }
+
+ @Override
+ protected void createInputComponents(UIComponent parent, InputInfo ii, FacesContext context, List<UIComponent> compList)
+ {
+ HtmlSelectOneMenu input;
+ try {
+ input = inputComponentClass.newInstance();
+ } catch (InstantiationException e1) {
+ throw new InternalException(e1);
+ } catch (IllegalAccessException e2) {
+ throw new InternalException(e2);
+ }
+ copyAttributes(parent, ii, input);
+
+ Options options = ii.getOptions();
+ if (ii.isRequired()==false)
+ { // Empty entry
+ options = new Options(options);
+ addSelectItem(input, ii, new OptionEntry("", getNullText(ii)));
+ }
+ for (OptionEntry e : options)
+ { // Option entries
+ addSelectItem(input, ii, e);
+ }
+
+ input.setValue(ii.getValue());
+ input.setDisabled(ii.isDisabled());
+
+ compList.add(input);
+ }
+
+ private String getNullText(InputInfo ii)
+ {
+ String nullText = getFormatOption(ii, "null:");
+ if (nullText==null)
+ nullText="";
+ return nullText;
+ }
+
+ private void addSelectItem(UIComponent input, InputInfo ii, OptionEntry e)
+ {
+ UISelectItem selectItem = new UISelectItem();
+ // set value
+ selectItem.setItemValue(e.getValueString());
+ // set text
+ String text = e.getText();
+ text = ii.getText(text);
+ selectItem.setItemLabel(text);
+ // add item
+ input.getChildren().add(selectItem);
+ }
+
+ @Override
+ protected String formatValue(Object value, ValueInfo vi, boolean hasError)
+ {
+ // Lookup and Print value
+ if (vi.getOptions()==null)
+ {
+ log.warn("Select field {} has no Option list attached!", vi.getColumn().getName());
+ return super.formatValue(value, vi, hasError);
+ }
+ // Check for Abbreviation
+ if (hasFormatOption(vi, "short"))
+ {
+ Column column = vi.getColumn();
+ if (column!=null)
+ { // Check for Abbreviation option list
+ Object attrValue = column.getAttribute(COLATTR_ABBR_OPTIONS);
+ if (attrValue instanceof Options)
+ { // Check for Options
+ String text = ((Options)attrValue).get(value);
+ if (text != null)
+ return vi.getText(text);
+ // Error
+ log.error("The element '" + String.valueOf(value) + "' is not part of the supplied option list.");
+ }
+ }
+ }
+ return super.formatValue(value, vi, hasError);
+ }
+
+ /*
+ @Override
+ public void renderInput(ResponseWriter writer, ControlInfo ci)
+ {
+ boolean disabled = ci.getDisabled();
+
+ HtmlTag input = writer.startTag("select");
+ input.addAttribute("id", ci.getId());
+ input.addAttribute("class", ci.getCssClass());
+ input.addAttribute("style", ci.getCssStyle());
+ if (disabled)
+ {
+ input.addAttribute("disabled");
+ } else
+ {
+ input.addAttribute("name", ci.getName());
+ }
+ // Event Attributes
+ input.addAttribute("onclick", ci.getOnclick());
+ input.addAttribute("onchange", ci.getOnchange());
+ input.addAttribute("onfocus", ci.getOnfocus());
+ input.addAttribute("onblur", ci.getOnblur());
+ input.beginBody(true);
+ // Render List of Options
+ Options options = ci.getOptions();
+ if (options!=null)
+ { // Render option list
+ Object current = ci.getValue();
+ if (hasFormatOption(ci, "allownull") && options.contains(null)==false)
+ { // add an empty entry
+ addEmtpyEntry(writer, ObjectUtils.isEmpty(current));
+ }
+ for (OptionEntry entry : options)
+ {
+ Object value = entry.getValue();
+ boolean isCurrent = ObjectUtils.compareEqual(current, value);
+ if (isCurrent == false && disabled)
+ continue; //
+ // Add Option entry
+ HtmlTag option = writer.startTag("option");
+ option.addAttributeNoCheck("value", value, true);
+ option.addAttribute("selected", isCurrent);
+ option.beginBody(ci.getTranslation(entry.getText()));
+ option.endTag(true);
+ }
+ }
+ else
+ { // No Option list available
+ log.error("No options available for select input control.");
+ }
+ // done
+ input.endTag();
+ }
+
+ private void addEmtpyEntry(HtmlWriter writer, boolean isCurrent)
+ {
+ // Add Option entry
+ HtmlTag option = writer.startTag("option");
+ option.addAttributeNoCheck("value", "", false);
+ option.addAttribute("selected", isCurrent);
+ option.beginBody("");
+ option.endTag(true);
+ }
+ */
+
+}
Propchange: empire-db/trunk/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/controls/SelectFieldRenderer.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: empire-db/trunk/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/controls/TextAreaFieldRenderer.java
URL: http://svn.apache.org/viewvc/empire-db/trunk/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/controls/TextAreaFieldRenderer.java?rev=1326123&view=auto
==============================================================================
--- empire-db/trunk/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/controls/TextAreaFieldRenderer.java (added)
+++ empire-db/trunk/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/controls/TextAreaFieldRenderer.java Sat Apr 14 14:57:28 2012
@@ -0,0 +1,77 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.empire.jsf2.controls;
+
+import java.util.List;
+
+import javax.faces.component.UIComponent;
+import javax.faces.component.html.HtmlInputTextarea;
+import javax.faces.context.FacesContext;
+
+import org.apache.empire.exceptions.InternalException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class TextAreaFieldRenderer extends FieldRenderer
+{
+ private static final Logger log = LoggerFactory.getLogger(TextAreaFieldRenderer.class);
+
+ public static final String NAME = "textarea";
+
+ private Class<? extends javax.faces.component.html.HtmlInputTextarea> inputComponentClass;
+
+ public TextAreaFieldRenderer(Class<? extends HtmlInputTextarea> inputComponentClass)
+ {
+ super(NAME);
+ this.inputComponentClass = inputComponentClass;
+ }
+
+ public TextAreaFieldRenderer()
+ {
+ this(javax.faces.component.html.HtmlInputTextarea.class);
+ }
+
+ @Override
+ protected void createInputComponents(UIComponent parent, InputInfo ii, FacesContext context, List<UIComponent> compList)
+ {
+ HtmlInputTextarea input;
+ try {
+ input = inputComponentClass.newInstance();
+ } catch (InstantiationException e1) {
+ throw new InternalException(e1);
+ } catch (IllegalAccessException e2) {
+ throw new InternalException(e2);
+ }
+ copyAttributes(parent, ii, input);
+
+ int cols = ii.getHSize();
+ if (cols>0)
+ input.setCols(cols);
+
+ int rows = ii.getVSize();
+ if (rows>0)
+ input.setRows(rows);
+
+ input.setDisabled(ii.isDisabled());
+ input.setValue(ii.getValue());
+
+ compList.add(input);
+ }
+
+}
Propchange: empire-db/trunk/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/controls/TextAreaFieldRenderer.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: empire-db/trunk/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/controls/TextFieldRenderer.java
URL: http://svn.apache.org/viewvc/empire-db/trunk/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/controls/TextFieldRenderer.java?rev=1326123&view=auto
==============================================================================
--- empire-db/trunk/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/controls/TextFieldRenderer.java (added)
+++ empire-db/trunk/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/controls/TextFieldRenderer.java Sat Apr 14 14:57:28 2012
@@ -0,0 +1,457 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.empire.jsf2.controls;
+
+import java.sql.Timestamp;
+import java.text.DateFormat;
+import java.text.NumberFormat;
+import java.text.ParseException;
+import java.util.Currency;
+import java.util.Date;
+import java.util.List;
+import java.util.Locale;
+
+import javax.faces.component.UIComponent;
+import javax.faces.component.html.HtmlInputText;
+import javax.faces.context.FacesContext;
+
+import org.apache.empire.commons.ObjectUtils;
+import org.apache.empire.commons.Options;
+import org.apache.empire.commons.StringUtils;
+import org.apache.empire.data.Column;
+import org.apache.empire.data.DataType;
+import org.apache.empire.exceptions.InternalException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class TextFieldRenderer extends FieldRenderer
+{
+ private static final Logger log = LoggerFactory.getLogger(TextFieldRenderer.class);
+
+ public static final String NAME = "text";
+
+ public static final String FORMAT_UNIT = "unit:";
+
+ private Class<? extends javax.faces.component.html.HtmlInputText> inputComponentClass;
+
+ public TextFieldRenderer(String name, Class<? extends HtmlInputText> inputComponentClass)
+ {
+ super(name);
+ this.inputComponentClass = inputComponentClass;
+ }
+
+ public TextFieldRenderer(String name)
+ {
+ this(name, javax.faces.component.html.HtmlInputText.class);
+ }
+
+ public TextFieldRenderer()
+ {
+ this(NAME, javax.faces.component.html.HtmlInputText.class);
+ }
+
+ @Override
+ protected void createInputComponents(UIComponent parent, InputInfo ii, FacesContext context, List<UIComponent> compList)
+ {
+ HtmlInputText input;
+ try {
+ input = inputComponentClass.newInstance();
+ } catch (InstantiationException e1) {
+ throw new InternalException(e1);
+ } catch (IllegalAccessException e2) {
+ throw new InternalException(e2);
+ }
+ copyAttributes(parent, ii, input);
+
+ int maxLength = 0;
+ DataType type = ii.getColumn().getDataType();
+ switch(type)
+ {
+ case CHAR:
+ case TEXT:
+ maxLength = ((int) Math.round(ii.getColumn().getSize()));
+ break;
+ case DECIMAL:
+ maxLength = ((int) Math.round(ii.getColumn().getSize()))+1;
+ break;
+ default:
+ maxLength = 0;
+ }
+ if (maxLength>0)
+ input.setMaxlength(maxLength);
+
+ /*
+ if (ii.getColumn().getName().equals("TITLE_DE"))
+ log.info(ii.getColumn().getName());
+ */
+
+ input.setDisabled(ii.isDisabled()); // || ii.getColumn().isAutoGenerated()
+ input.setValue(ii.getValue());
+
+ compList.add(input);
+ }
+
+ // ------- parsing -------
+
+ /*
+ @Override
+ protected Object parseValue(String value, Locale locale, Column column)
+ {
+ // Check Data Type
+ DataType type = column.getDataType();
+ if (type==DataType.TEXT)
+ return value;
+ // Check other types
+ if (type==DataType.INTEGER)
+ { return parseInteger(value);
+ }
+ if (type==DataType.DECIMAL)
+ { return parseDecimal(value, getNumberFormat(column.getDataType(), locale, column));
+ }
+ if (type==DataType.DATE || type==DataType.DATETIME)
+ { return parseDate(value, getDateFormat(column.getDataType(), locale, column));
+ }
+ if (type==DataType.AUTOINC)
+ { // autoinc
+ log.error("Autoinc-value cannot be changed.");
+ return NO_VALUE;
+ }
+ // Default
+ return value;
+ }
+
+ // ------- validation -------
+
+ @Override
+ protected Object validate(Object o, Locale locale, Column column, String s)
+ {
+ if (o instanceof Number)
+ {
+ Object min = column.getAttribute(FieldRenderer.MINVALUE_ATTRIBUTE);
+ Object max = column.getAttribute(FieldRenderer.MAXVALUE_ATTRIBUTE);
+ if (min!=null && max!=null)
+ {
+ Number n = (Number)o;
+ if (n.intValue()<ObjectUtils.getInteger(min) ||
+ n.intValue()>ObjectUtils.getInteger(max))
+ { // Out of Range
+ return error(WebErrors.InputValueOutOfRange, new String[] { min.toString(), max.toString() }, s);
+ }
+ }
+ }
+ return o;
+ }
+ */
+
+ // ------- formatting -------
+
+ @Override
+ protected String formatValue(Object value, ValueInfo vi, boolean hasError)
+ {
+ // Lookup and Print value
+ Options options = vi.getOptions();
+ if (options != null && !options.isEmpty())
+ { // Check for Options
+ String text = options.get(value);
+ if (text != null)
+ return vi.getText(text);
+ // Error
+ log.error("The element '" + String.valueOf(value) + "' is not part of the supplied option list.");
+ }
+ // Check Value
+ if (value == null)
+ { // Try to use default value
+ if (value!=vi.getNullValue())
+ return formatValue(vi.getNullValue(), vi, false);
+ // Empty String
+ return "";
+ }
+ // Format Value
+ Column column = vi.getColumn();
+ DataType dataType = getValueType(value, (column != null) ? column.getDataType() : DataType.UNKNOWN);
+ if (dataType == DataType.TEXT || dataType == DataType.UNKNOWN)
+ { // String
+ String s = String.valueOf(value);
+ if (hasFormatOption(vi, "noencode"))
+ return s;
+ // Encoded text
+ return escapeHTML(s);
+ }
+ if (dataType == DataType.INTEGER || dataType == DataType.AUTOINC)
+ { // Integer
+ NumberFormat nf = NumberFormat.getIntegerInstance(vi.getLocale());
+ nf.setGroupingUsed(false);
+ return nf.format(value);
+ }
+ if (dataType == DataType.DECIMAL || dataType == DataType.FLOAT)
+ { // Dezimal oder Double
+ NumberFormat nf = getNumberFormat(dataType, vi.getLocale(), column);
+ return nf.format(value);
+ }
+ if (dataType == DataType.DATE || dataType == DataType.DATETIME)
+ { // Date or DateTime
+ if (dataType== DataType.DATETIME && hasFormatOption(vi, "notime"))
+ dataType = DataType.DATE;
+ // Now format the date according to the user's locale
+ DateFormat df = getDateFormat(dataType, vi.getLocale(), column);
+ return df.format(value);
+ }
+ /*
+ * if (dataType == DBDataType.BOOL) {
+ * }
+ */
+ // Convert to String
+ return escapeHTML(String.valueOf(value));
+ }
+
+ protected String formatValue(ValueInfo vi, boolean appendUnit)
+ {
+ String text = super.formatValue(vi);
+ if (appendUnit && text!=null && text.length()>0)
+ {
+ String unit = getUnitString(vi);
+ if (unit != null)
+ { // Append unit
+ text += " " + unit;
+ }
+ }
+ return text;
+ }
+
+ // ------- render -------
+
+ /*
+ @Override
+ public void renderInput(Response writer, ControlInfo ci)
+ {
+ HtmlTag input = writer.startTag("input");
+ input.addAttribute("type", "text");
+ input.addAttribute("id", ci.getId());
+ input.addAttribute("class", ci.getCssClass());
+ input.addAttribute("style", ci.getCssStyle());
+ if (ci.getDisabled()==false)
+ { // Name of the field
+ input.addAttribute("name", ci.getName());
+ // Get Max Length
+ int maxLength = getMaxInputLength(ci.getColumn());
+ if (maxLength>0)
+ {
+ input.addAttribute("maxlength", maxLength);
+ input.addAttribute("size", String.valueOf(Math.min(maxLength, ci.getHSize())));
+ }
+ }
+ else
+ { // Disabled text control
+ input.addAttribute("disabled");
+ // Get Max Length
+ int maxLength = getMaxInputLength(ci.getColumn());
+ if (maxLength>0)
+ {
+ input.addAttribute("size", String.valueOf(Math.min(maxLength, ci.getHSize())));
+ }
+ }
+ // Value
+ input.addAttribute("value", formatValue(ci, ci.getDisabled()));
+ // Event Attributes
+ input.addAttribute("onclick", ci.getOnclick());
+ input.addAttribute("onchange", ci.getOnchange());
+ input.addAttribute("onfocus", ci.getOnfocus());
+ input.addAttribute("onblur", ci.getOnblur());
+ input.endTag();
+ // Add Unit
+ if (ci.getDisabled()==false)
+ {
+ String unit = getUnitString(ci);
+ if (unit != null)
+ { writer.print(" ");
+ writer.print(unit);
+ }
+ }
+ }
+
+ // ------- Input Helpers -------
+
+ protected int getMaxInputLength(Column col)
+ {
+ // cast to DBTableColumn
+ DataType type = col.getDataType();
+ if (type==DataType.AUTOINC ||
+ type==DataType.INTEGER)
+ return 10;
+ if (type==DataType.DOUBLE)
+ return 18;
+ if (type==DataType.DECIMAL)
+ {
+ double size = col.getSize();
+ int len = (int)size;
+ size = (size - len)*10; // Ganzahlanteil
+ if (((int)size)>0)
+ len += ((int)size)+1; // Dezimaltrenner plus Nachkommastellen
+ return len;
+ }
+ if (type==DataType.BOOL)
+ return 1;
+ if (type==DataType.DATE)
+ return 10;
+ if (type==DataType.DATETIME)
+ return 16;
+ if (type==DataType.CLOB)
+ return 0; // unlimited (use 0x7FFFFFFF instead?)
+ // Default
+ return (int)col.getSize();
+ }
+ */
+
+ protected DataType getValueType(Object value, DataType desiredType)
+ {
+ // Detect Data Type from Value
+ if (value instanceof String)
+ return DataType.TEXT;
+ if (value instanceof Number)
+ { // Check desired type
+ if (desiredType == DataType.AUTOINC || desiredType == DataType.INTEGER ||
+ desiredType == DataType.FLOAT || desiredType == DataType.DECIMAL)
+ return desiredType;
+ // Detect type
+ if (value instanceof Integer || value instanceof Long || value instanceof Short)
+ return DataType.INTEGER;
+ if (value instanceof Float || value instanceof Double)
+ return DataType.FLOAT;
+ // default
+ return DataType.DECIMAL;
+ }
+ if (value instanceof Date)
+ { // Check desired type
+ if (desiredType == DataType.DATETIME || desiredType == DataType.DATE)
+ return desiredType;
+ // Detect type
+ if (value instanceof Timestamp)
+ return DataType.DATETIME;
+ // Just a date
+ return DataType.DATE;
+ }
+ if (value instanceof Boolean)
+ return DataType.BOOL;
+ // Default Datatype
+ return DataType.UNKNOWN;
+ }
+
+ protected NumberFormat getNumberFormat(DataType dataType, Locale locale, Column column)
+ {
+ if (column==null)
+ return NumberFormat.getNumberInstance(locale);
+ // Column is supplied
+ String type = StringUtils.valueOf(column.getAttribute(FieldRenderer.NUMBER_TYPE_ATTRIBUTE));
+ NumberFormat nf = null;
+ if (type.equalsIgnoreCase("Integer"))
+ nf = NumberFormat.getIntegerInstance(locale);
+ else
+ nf = NumberFormat.getNumberInstance(locale);
+ // Groups Separator?
+ Object groupSep = column.getAttribute(FieldRenderer.NUMBER_GROUPSEP_ATTRIBUTE);
+ if (groupSep!=null)
+ nf.setGroupingUsed(ObjectUtils.getBoolean(groupSep));
+ // Fraction Digits?
+ Object fractDigit = column.getAttribute(FieldRenderer.NUMBER_FRACTION_DIGITS);
+ if (fractDigit!=null)
+ { int fractionDigits = ObjectUtils.getInteger(fractDigit);
+ nf.setMaximumFractionDigits(fractionDigits);
+ nf.setMinimumFractionDigits(fractionDigits);
+ }
+ // Number format
+ return nf;
+ }
+
+ protected DateFormat getDateFormat(DataType dataType, Locale locale, Column column)
+ {
+ DateFormat df;
+ if (dataType==DataType.DATE)
+ df = DateFormat.getDateInstance(DateFormat.MEDIUM, locale);
+ else
+ df = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.MEDIUM, locale);
+ return df;
+ }
+
+ private String getUnitString(ValueInfo vi)
+ {
+ // Is unit supplied as a format option
+ String format = getFormatOption(vi, FORMAT_UNIT);
+ if (format!=null)
+ return format;
+ // Is it a currency column
+ Column column = vi.getColumn();
+ if (column!=null && column.getDataType()==DataType.DECIMAL)
+ {
+ String numberType = StringUtils.toString(column.getAttribute(FieldRenderer.NUMBER_TYPE_ATTRIBUTE));
+ if (numberType!=null)
+ {
+ if (numberType.equalsIgnoreCase("Currency"))
+ {
+ String currencyCode = StringUtils.toString(column.getAttribute(FieldRenderer.CURRENCY_CODE_ATTRIBUTE));
+ if (currencyCode!=null)
+ { // nf = NumberFormat.getCurrencyInstance(locale);
+ Currency currency = Currency.getInstance(currencyCode);
+ return (currency!=null) ? currency.getSymbol() : null;
+ }
+ } else if (numberType.equalsIgnoreCase("Percent"))
+ {
+ return "%";
+ }
+ }
+ }
+ // No Unit supplied
+ return null;
+ }
+
+ // ------- value parsing -------
+
+ protected Object parseInteger(String s)
+ {
+ // Try to convert
+ return Integer.parseInt(s);
+ }
+
+ protected Object parseDecimal(String s, NumberFormat nf)
+ {
+ // Try to convert
+ for (int i=0; i<s.length(); i++)
+ { if (s.charAt(i)>='A')
+ throw new NumberFormatException("Not a number: "+s);
+ }
+ // Parse String
+ try {
+ return nf.parseObject(s);
+ } catch(ParseException pe) {
+ throw new NumberFormatException("Not a number: "+s+" Exception: "+pe.toString());
+ }
+ }
+
+ protected Object parseDate(String s, DateFormat df)
+ {
+ // Try to convert
+ try {
+ // Parse Date
+ df.setLenient(true);
+ return df.parseObject(s);
+ } catch(ParseException pe) {
+ throw new RuntimeException("Invalid date format: "+s, pe);
+ }
+ }
+
+}
Propchange: empire-db/trunk/empire-db-jsf2/src/main/java/org/apache/empire/jsf2/controls/TextFieldRenderer.java
------------------------------------------------------------------------------
svn:mime-type = text/plain