Author: blabno
Date: 2011-07-20 02:54:17 -0400 (Wed, 20 Jul 2011)
New Revision: 22556
Modified:
sandbox/trunk/ui/watermark/bom/pom.xml
sandbox/trunk/ui/watermark/demo/src/main/java/org/richfaces/sandbox/watermark/WatermarkBean.java
sandbox/trunk/ui/watermark/demo/src/main/webapp/index.xhtml
sandbox/trunk/ui/watermark/parent/pom.xml
sandbox/trunk/ui/watermark/pom.xml
sandbox/trunk/ui/watermark/ui/pom.xml
sandbox/trunk/ui/watermark/ui/src/main/java/org/richfaces/component/AbstractWatermark.java
sandbox/trunk/ui/watermark/ui/src/main/java/org/richfaces/renderkit/WatermarkRendererBase.java
Log:
Added converter support to watermark.
Modified: sandbox/trunk/ui/watermark/bom/pom.xml
===================================================================
--- sandbox/trunk/ui/watermark/bom/pom.xml 2011-07-19 14:34:21 UTC (rev 22555)
+++ sandbox/trunk/ui/watermark/bom/pom.xml 2011-07-20 06:54:17 UTC (rev 22556)
@@ -47,4 +47,12 @@
</dependencies>
</dependencyManagement>
+ <distributionManagement>
+ <snapshotRepository>
+ <id>bernard.labno.pl</id>
+ <name>MyCo Internal Repository</name>
+
<url>http://bernard.labno.pl/artifactory/libs-snapshot-local</url>
+ </snapshotRepository>
+ </distributionManagement>
+
</project>
Modified:
sandbox/trunk/ui/watermark/demo/src/main/java/org/richfaces/sandbox/watermark/WatermarkBean.java
===================================================================
---
sandbox/trunk/ui/watermark/demo/src/main/java/org/richfaces/sandbox/watermark/WatermarkBean.java 2011-07-19
14:34:21 UTC (rev 22555)
+++
sandbox/trunk/ui/watermark/demo/src/main/java/org/richfaces/sandbox/watermark/WatermarkBean.java 2011-07-20
06:54:17 UTC (rev 22556)
@@ -1,19 +1,31 @@
package org.richfaces.sandbox.watermark;
import javax.faces.application.FacesMessage;
+import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
+import javax.faces.convert.Converter;
+import javax.faces.convert.ConverterException;
import java.io.Serializable;
public class WatermarkBean implements Serializable {
// ------------------------------ FIELDS ------------------------------
+ private Converter converter = new MyConverter();
+
private Object date;
private String text = "Watermark text";
+
+ private TextObject textObject = new TextObject();
+
private Object watermarkedInput;
// --------------------- GETTER / SETTER METHODS ---------------------
+ public Converter getConverter() {
+ return converter;
+ }
+
public Object getDate() {
return date;
}
@@ -30,6 +42,10 @@
this.text = text;
}
+ public TextObject getTextObject() {
+ return textObject;
+ }
+
public Object getWatermarkedInput() {
return watermarkedInput;
}
@@ -46,4 +62,32 @@
context.addMessage(null, new FacesMessage("Date:" + getDate()));
return null;
}
+
+// -------------------------- INNER CLASSES --------------------------
+
+ private class MyConverter implements Converter {
+// ------------------------ INTERFACE METHODS ------------------------
+
+
+// --------------------- Interface Converter ---------------------
+
+ public Object getAsObject(FacesContext context, UIComponent component, String
value) {
+ return new TextObject();
+ }
+
+ public String getAsString(FacesContext context, UIComponent component, Object
value) {
+ if (!(value instanceof TextObject)) {
+ throw new ConverterException(String.format("%s is not instance of
%s", value.getClass().getCanonicalName(), TextObject.class.getCanonicalName()));
+ }
+ return ((TextObject) value).getText();
+ }
+ }
+
+ private class TextObject {
+// --------------------- GETTER / SETTER METHODS ---------------------
+
+ String getText() {
+ return text;
+ }
+ }
}
Modified: sandbox/trunk/ui/watermark/demo/src/main/webapp/index.xhtml
===================================================================
--- sandbox/trunk/ui/watermark/demo/src/main/webapp/index.xhtml 2011-07-19 14:34:21 UTC
(rev 22555)
+++ sandbox/trunk/ui/watermark/demo/src/main/webapp/index.xhtml 2011-07-20 06:54:17 UTC
(rev 22556)
@@ -13,35 +13,36 @@
</h:head>
<h:body class="rich-container">
-<rich:messages ajaxRendered="true"/>
+ <rich:messages ajaxRendered="true"/>
-<h:form>
- <a4j:poll ajaxSingle="true" interval="5000"/>
- <a4j:queue requestDelay="400" ignoreDupResponses="true"/>
+ <h:form>
+ <a4j:poll ajaxSingle="true" interval="5000"/>
+ <a4j:queue requestDelay="400"
ignoreDupResponses="true"/>
- <h:outputLabel value="Watermark text" for="text"/>
- <h:inputText id="text" value="#{watermarkBean.text}"
required="true">
- <f:ajax event="valueChange" render="@form"/>
- </h:inputText>
- <h:commandButton value="Submit"
action="#{watermarkBean.submit}"/>
- <br/><br/>
- <h:inputText id="watermarked"
value="#{watermarkBean.watermarkedInput}">
- <watermark:watermark value="#{watermarkBean.text}"/>
- </h:inputText>
+ <h:outputLabel value="Watermark text" for="text"/>
+ <h:inputText id="text" value="#{watermarkBean.text}"
required="true">
+ <f:ajax event="valueChange" render="@form"/>
+ </h:inputText>
+ <h:commandButton value="Submit"
action="#{watermarkBean.submit}"/>
+ <br/><br/>
+ <h:inputText id="watermarked"
value="#{watermarkBean.watermarkedInput}">
+ <watermark:watermark value="#{watermarkBean.text}"/>
+ </h:inputText>
- <rich:calendar id="calendar" value="#{watermarkBean.date}"
enableManualInput="true" ajaxSingle="true"/>
- <watermark:watermark value="#{watermarkBean.text}"
for="calendar" suffix="InputDate"/>
+ <rich:calendar id="calendar" value="#{watermarkBean.date}"
enableManualInput="true" ajaxSingle="true"/>
+ <watermark:watermark value="#{watermarkBean.text}"
for="calendar" suffix="InputDate"/>
- <!--<rich:comboBox>-->
+ <!--<rich:comboBox>-->
<!--<watermark:watermark value="#{watermarkBean.text}"
suffix="comboboxField"/>-->
- <!--</rich:comboBox>-->
+ <!--</rich:comboBox>-->
- <input id="htmlInput" type="text"/>
- <watermark:watermark value="#{watermarkBean.text}"
for="htmlInput"/>
-</h:form>
+ <input id="htmlInput" type="text"/>
+ <watermark:watermark value="#{watermarkBean.textObject}"
for="htmlInput" converter="#{watermarkBean.converter}"/>
-<div id="status"></div>
-<!--<rich:insert src="/index.xhtml" highlight="xhtml"
rendered="#{showSource!=false}"/>-->
+ </h:form>
+ <div id="status"></div>
+ <!--<rich:insert src="/index.xhtml" highlight="xhtml"
rendered="#{showSource!=false}"/>-->
+
</h:body>
</html>
Modified: sandbox/trunk/ui/watermark/parent/pom.xml
===================================================================
--- sandbox/trunk/ui/watermark/parent/pom.xml 2011-07-19 14:34:21 UTC (rev 22555)
+++ sandbox/trunk/ui/watermark/parent/pom.xml 2011-07-20 06:54:17 UTC (rev 22556)
@@ -92,4 +92,12 @@
</pluginManagement>
</build>
+ <distributionManagement>
+ <snapshotRepository>
+ <id>bernard.labno.pl</id>
+ <name>MyCo Internal Repository</name>
+
<url>http://bernard.labno.pl/artifactory/libs-snapshot-local</url>
+ </snapshotRepository>
+ </distributionManagement>
+
</project>
Modified: sandbox/trunk/ui/watermark/pom.xml
===================================================================
--- sandbox/trunk/ui/watermark/pom.xml 2011-07-19 14:34:21 UTC (rev 22555)
+++ sandbox/trunk/ui/watermark/pom.xml 2011-07-20 06:54:17 UTC (rev 22556)
@@ -54,7 +54,7 @@
<version>1.0.6-SNAPSHOT</version>
<configuration>
<userAliases>
- <ui>watermark clean install</ui>
+ <ui>watermark-ui clean install</ui>
<demo>watermark-demo clean package</demo>
</userAliases>
</configuration>
Modified: sandbox/trunk/ui/watermark/ui/pom.xml
===================================================================
--- sandbox/trunk/ui/watermark/ui/pom.xml 2011-07-19 14:34:21 UTC (rev 22555)
+++ sandbox/trunk/ui/watermark/ui/pom.xml 2011-07-20 06:54:17 UTC (rev 22556)
@@ -13,6 +13,12 @@
<dependencies>
<dependency>
+ <groupId>org.richfaces.ui</groupId>
+ <artifactId>richfaces-components-ui</artifactId>
+ <version>${project.version}</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
<groupId>org.richfaces.ui.core</groupId>
<artifactId>richfaces-ui-core-ui</artifactId>
<version>${project.version}</version>
Modified:
sandbox/trunk/ui/watermark/ui/src/main/java/org/richfaces/component/AbstractWatermark.java
===================================================================
---
sandbox/trunk/ui/watermark/ui/src/main/java/org/richfaces/component/AbstractWatermark.java 2011-07-19
14:34:21 UTC (rev 22555)
+++
sandbox/trunk/ui/watermark/ui/src/main/java/org/richfaces/component/AbstractWatermark.java 2011-07-20
06:54:17 UTC (rev 22556)
@@ -29,7 +29,7 @@
import org.richfaces.renderkit.WatermarkRendererBase;
import javax.faces.component.UIComponent;
-import javax.faces.component.UIOutput;
+import javax.faces.component.UIInput;
import javax.faces.context.FacesContext;
/**
@@ -40,76 +40,81 @@
*/
@JsfComponent(tag = @Tag(name = "watermark", type = TagType.Facelets),
renderer = @JsfRenderer(family = AbstractWatermark.COMPONENT_FAMILY, type =
WatermarkRendererBase.RENDERER_TYPE),
- attributes =
{"core-props.xml","javax.faces.component.ValueHolder.xml"}
+ attributes = {"core-props.xml",
"javax.faces.component.ValueHolder.xml"}
)
-public abstract class AbstractWatermark extends UIOutput {
+public abstract class AbstractWatermark extends UIInput {
// ------------------------------ FIELDS ------------------------------
public static final String COMPONENT_FAMILY = "org.richfaces.Watermark";
public static final String COMPONENT_TYPE = "org.richfaces.Watermark";
+// ------------------------ INTERFACE METHODS ------------------------
+
+
+// --------------------- Interface ValueHolder ---------------------
+
+ @Attribute(required = true)
+ public abstract Object getValue();
+
// -------------------------- OTHER METHODS --------------------------
+ /**
+ * Use this if watermark cannot be nested within come components i.e. in calendar.
+ * <p/>
+ * Example 1: rich:calendar with id="c" nested in form with
id="f" renders input with
+ * clientId="f:cInputDate".
+ * rich:calendar also gets messed up if watermark is nested within, so place it
outside of calendar.
+ * So in order to attach watermark to that element provide for="c"
suffix="InputDate".
+ * <p/>
+ * Example 2: watermark should be attached to pure html input (not jsf component)
with id="htmlInput".
+ * To achieve this provide for="htmlInput".
+ *
+ * @return id of component for which watermark should be applied
+ */
+ @Attribute
+ public abstract String getFor();
+
+ /**
+ * Use this if watermark should be attached to element with id different then
component id.
+ * i.e.: rich:comboBox with id="combo" nested in form with id="f"
renders input with
+ * clientId="f:combocomboboxField"
+ * So in order to attach watermark to that element provide
suffix="comboboxField".
+ *
+ * @return the suffix
+ */
+ @Attribute
+ public abstract String getSuffix();
+
public String getTargetClientId(FacesContext context) {
- String sid = getFor();
+ String sid = getFor();
String target;
- if (sid != null && ! "".equals(sid)) {
+ if (sid != null && !"".equals(sid)) {
try {
-
UIComponent forcomp = findComponent(sid);
if (forcomp != null) {
- target = forcomp.getClientId(context);
+ target = forcomp.getClientId(context);
} else {
target = sid;
}
- }catch(IllegalArgumentException e) {
+ } catch (IllegalArgumentException e) {
target = sid;
- }
+ }
} else {
target = getParent().getClientId(context);
}
String suffix = getSuffix();
- if(suffix != null && !"".equals(suffix)) {
- target += suffix;
- }
+ if (suffix != null && !"".equals(suffix)) {
+ target += suffix;
+ }
return target;
}
/**
* This attribute is not used.
+ *
* @return irrelevant
*/
@Attribute(hidden = true)
public abstract String getTitle();
-
- @Attribute(required = true)
- public abstract Object getValue();
-
- /**
- * Use this if watermark should be attached to element with id different then
component id.
- * i.e.: rich:comboBox with id="combo" nested in form with id="f"
renders input with
- * clientId="f:combocomboboxField"
- * So in order to attach watermark to that element provide
suffix="comboboxField".
- *
- * @return the suffix
- */
- @Attribute
- public abstract String getSuffix();
-
- /**
- * Use this if watermark cannot be nested within come components i.e. in calendar.
- * <p/>
- * Example 1: rich:calendar with id="c" nested in form with
id="f" renders input with
- * clientId="f:cInputDate".
- * rich:calendar also gets messed up if watermark is nested within, so place it
outside of calendar.
- * So in order to attach watermark to that element provide for="c"
suffix="InputDate".
- * <p/>
- * Example 2: watermark should be attached to pure html input (not jsf component)
with id="htmlInput".
- * To achieve this provide for="htmlInput".
- *
- * @return id of component for which watermark should be applied
- */
- @Attribute
- public abstract String getFor();
}
Modified:
sandbox/trunk/ui/watermark/ui/src/main/java/org/richfaces/renderkit/WatermarkRendererBase.java
===================================================================
---
sandbox/trunk/ui/watermark/ui/src/main/java/org/richfaces/renderkit/WatermarkRendererBase.java 2011-07-19
14:34:21 UTC (rev 22555)
+++
sandbox/trunk/ui/watermark/ui/src/main/java/org/richfaces/renderkit/WatermarkRendererBase.java 2011-07-20
06:54:17 UTC (rev 22556)
@@ -19,7 +19,7 @@
@ResourceDependency(name = "base-component.reslib", library =
"org.richfaces", target = "head"),
@ResourceDependency(name = "richfaces.watermark.js", target =
"head")
})
-public abstract class WatermarkRendererBase extends RendererBase {
+public abstract class WatermarkRendererBase extends InputRendererBase {
// ------------------------------ FIELDS ------------------------------
/**
@@ -44,13 +44,13 @@
}
}
- protected Map<String, Object> getOptions(AbstractWatermark watermark) {
+ protected Map<String, Object> getOptions(FacesContext context,
AbstractWatermark watermark) {
/**
* Include only attributes that are actually set.
*/
Map<String, Object> options = new HashMap<String, Object>();
addOptionIfSetAndNotDefault("styleClass",
watermark.getAttributes().get("styleClass"), options);
- addOptionIfSetAndNotDefault("text", watermark.getValue(), options);
+ addOptionIfSetAndNotDefault("text", getInputValue(context, watermark),
options);
return options;
}
@@ -58,7 +58,7 @@
AbstractWatermark watermark = (AbstractWatermark) component;
ResponseWriter writer = context.getResponseWriter();
String clientId = watermark.getClientId(context);
- final Map<String, Object> options = getOptions(watermark);
+ final Map<String, Object> options = getOptions(context, watermark);
options.put("targetId", watermark.getTargetClientId(context));
writer.writeText(new JSObject("RichFaces.ui.Watermark", clientId,
options).toScript(), null);
}