[corejsf~subversion:175] Processed submitted bug reports
- From: cayhorstmann@kenai.com
- To: commits@corejsf.kenai.com
- Subject: [corejsf~subversion:175] Processed submitted bug reports
- Date: Mon, 27 Jun 2011 05:11:53 +0000
Project: corejsf
Repository: subversion
Revision: 175
Author: cayhorstmann
Date: 2011-06-27 05:11:45 UTC
Link:
Log Message:
------------
Processed submitted bug reports
Revisions:
----------
175
Modified Paths:
---------------
ch09/composite-login/web/resources/util/login.xhtml
ch07/custom-tags/web/WEB-INF/corejsf.taglib.xml
ch03/javaquiz/web/index.xhtml
ch04/select/web/showInformation.xhtml
ch13/fileupload/src/java/com/corejsf/UploadFilter.java
ch08/tabbedpane/src/java/com/corejsf/messages.properties
ch13/popup/web/resources/javascript/popup2.js
ch11/spinner-ajax2/src/java/com/corejsf/JSSpinnerRenderer.java
ch09/simple-composite/web/resources/util/debug.xhtml
ch09/composite-login/web/welcome.xhtml
ch10/autoComplete/src/java/com/corejsf/AutoComplete.java
ch07/custom-tags/src/java/com/corejsf/CreditCardValidator.java
ch10/autoComplete/web/index.xhtml
build.xml
ch11/spinner-js/web/resources/javascript/spinner.js
build.properties.glassfish
ch12/sfsb/src/java/com/corejsf/UserBean.java
ch09/composite-login/web/register.xhtml
ch11/spinner-ajax/src/java/com/corejsf/FontSpinnerRenderer.java
ch12/slsb/src/java/com/corejsf/CredentialsManager.java
build.properties
ch10/autoComplete/web/resources/javascript/autoComplete.js
ch07/validator3
ch01/login/web/WEB-INF/web.xml
ch11/spinner/src/java/com/corejsf/UISpinner.java
ch06/database/web/misc/customers.sql
ch05/planets/web/sections/planetarium/sidebarLeft.xhtml
ch08/rushmore/src/java/com/corejsf/messages.properties
ch04/select/web/index.xhtml
ch10/autoComplete/src/java/com/corejsf/UserBean.java
ch07/custom-tags/src/java/com/corejsf/CreditCardConverter.java
ch09/composite-login/web/index.xhtml
ch13/popup/web/resources/javascript/popup1.js
ch10/autoComplete/web/resources/util/autoComplete.xhtml
ch11/spinner-ajax2/src/java/com/corejsf/UISpinner.java
ch09/composite-login/web/resources/util/icon.xhtml
ch09/composite-date/src/java/util/date.java
ch09/composite-date/web/resources/util/date.xhtml
ch13/clientside-validator/src/java/com/corejsf/CreditCardValidator.java
ch09/composite-date
ch11/tabbedpane/src/java/com/corejsf/messages.properties
ch04/flags
ch12/jpa/src/java/com/corejsf/UserBean.java
ch10/autoComplete/src/java/com/corejsf/AutocompleteListener.java
ch08/system-events/src/java/com/corejsf/UserBean.java
ch06/sorting/src/java/com/corejsf/SortFilterModel.java
ch12/db/src/java/com/corejsf/UserBean.java
ch07/validator2/web/result.xhtml
Diffs:
------
Index: build.properties.tomcat
===================================================================
--- build.properties.tomcat (revision 174)
+++ build.properties.tomcat (revision 175)
@@ -1,29 +0,0 @@
-# http://tomcat.apache.org/
-appserver.dir=/home/apps/apache-tomcat-6.0.20
-deploy.dir=${appserver.dir}/webapps
-
-# http://javaserverfaces.dev.java.net/
-jsf.dir=/home/apps/mojarra-2.0.2-FCS
-
-# http://download.java.net/maven/2/javax/el/el-api/2.2/el-api-2.2.jar
-#
http://download.java.net/maven/2/org/glassfish/web/el-impl/2.2/el-impl-2.2.jar
-el.dir=/home/apps/el-2.2
-
-# http://seamframework.org/Weld
-cdi.dir=/home/apps/weld-1.0.0.SP1
-
-bean-validation-dir=/home/apps/hibernate-validator-4.0.2.GA
-
-use-jsf-libs=true
-
-jsf.api.jar=${jsf.dir}/lib/jsf-api.jar
-jsf.impl.jar=${jsf.dir}/lib/jsf-impl.jar
-servlet.api.jar=${appserver.dir}/lib/servlet-api.jar
-el.api.jar=${el.dir}/el-api-2.2.jar
-el.impl.jar=${el.dir}/el-impl-2.2.jar
-bean-validation.api.jar=${bean-validation.dir}/lib/validation-api-1.0.0.GA.jar
-bean-validation.impl.jar=${bean-validation.dir}/hibernate-validator-4.0.2.GA.jar
-bean-validation.lib.dir=${bean-validation.dir}/lib
-cdi.api.jar=${cdi.dir}/artifacts/weld/weld-servlet.jar
-cdi.impl.jar=${cdi.dir}/artifacts/weld/weld-servlet.jar
-
Index: build.properties
===================================================================
--- build.properties (revision 174)
+++ build.properties (revision 175)
@@ -1,4 +1,5 @@
appserver.dir=${env.GLASSFISH_HOME}
+glassfish=true
jsf.api.jar=${appserver.dir}/modules/jsf-api.jar
servlet.api.jar=${appserver.dir}/modules/javax.servlet.jar
el.api.jar=${appserver.dir}/modules/javax.servlet.jsp.jar
@@ -8,5 +9,5 @@
bean-validation.api.jar=${appserver.dir}/modules/bean-validator.jar
cdi.api.jar=${appserver.dir}/modules/weld-osgi-bundle.jar
mail.api.jar=${appserver.dir}/modules/mail.jar
-deploy.dir=/home/domains/domain1/autodeploy
+deploy.dir=${appserver.dir}/domains/domain1/autodeploy
Index: ch01/login/web/WEB-INF/web.xml
===================================================================
--- ch01/login/web/WEB-INF/web.xml (revision 174)
+++ ch01/login/web/WEB-INF/web.xml (revision 175)
@@ -20,4 +20,4 @@
<param-name>javax.faces.PROJECT_STAGE</param-name>
<param-value>Development</param-value>
</context-param>
-</web-app>
\ No newline at end of file
+</web-app>
Index: ch10/autoComplete/src/java/com/corejsf/AutoComplete.java
===================================================================
--- ch10/autoComplete/src/java/com/corejsf/AutoComplete.java (revision 174)
+++ ch10/autoComplete/src/java/com/corejsf/AutoComplete.java (revision 175)
@@ -1,5 +1,7 @@
package com.corejsf;
+import java.io.Serializable;
+
import javax.inject.Named;
// or import javax.faces.bean.ManagedBean;
import javax.enterprise.context.ApplicationScoped;
@@ -7,7 +9,7 @@
@Named //@ManagedBean
@ApplicationScoped
-public class AutoComplete {
+public class AutoComplete implements Serializable {
public String[] getLocations() {
return new String[] {
"Arvada", "Colorado Springs", "Baltimore", "Brittany", "Bahamas",
@@ -16,4 +18,4 @@
"Loveland", "Vail"
};
}
-}
\ No newline at end of file
+}
Index: ch10/autoComplete/src/java/com/corejsf/UserBean.java
===================================================================
--- ch10/autoComplete/src/java/com/corejsf/UserBean.java (revision 174)
+++ ch10/autoComplete/src/java/com/corejsf/UserBean.java (revision 175)
@@ -12,10 +12,14 @@
public class UserBean implements Serializable {
private String name = "";
private String password;
+ private String city = "";
public String getName() { return name; }
public void setName(String newValue) { name = newValue; }
public String getPassword() { return password; }
public void setPassword(String newValue) { password = newValue; }
+
+ public String getCity() { return city; }
+ public void setCity(String newValue) { city = newValue; }
}
Index: ch10/autoComplete/src/java/com/corejsf/AutocompleteListener.java
===================================================================
--- ch10/autoComplete/src/java/com/corejsf/AutocompleteListener.java
(revision 174)
+++ ch10/autoComplete/src/java/com/corejsf/AutocompleteListener.java
(revision 175)
@@ -1,5 +1,7 @@
package com.corejsf;
+import java.io.Serializable;
+
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@@ -17,7 +19,7 @@
@Named // @ManagedBean
@SessionScoped
-public class AutocompleteListener {
+public class AutocompleteListener implements Serializable {
private static String COMPLETION_ITEMS_ATTR = "corejsf.completionItems";
public void valueChanged(ValueChangeEvent e) {
@@ -39,8 +41,7 @@
List<String> newItems = new ArrayList<String>();
for (String item : completionItems) {
- String s = item.substring(0, inputValue.length());
- if (s.equalsIgnoreCase(inputValue))
+ if (item.toLowerCase().startsWith(inputValue.toLowerCase()))
newItems.add(item);
}
@@ -71,13 +72,13 @@
}
public void completionItemSelected(ValueChangeEvent e) {
- UISelectOne listbox = (UISelectOne)e.getSource();
- UIInput input = (UIInput)listbox.findComponent("input");
+ UISelectOne listbox = (UISelectOne)e.getSource();
+ UIInput input = (UIInput)listbox.findComponent("input");
- if(input != null) {
- input.setValue(listbox.getValue());
- }
- Map<String, Object> attrs = listbox.getAttributes();
- attrs.put("style", "display: none");
+ if(input != null) {
+ input.setValue(listbox.getValue());
+ }
+ Map<String, Object> attrs = listbox.getAttributes();
+ attrs.put("style", "display: none");
}
-}
\ No newline at end of file
+}
Index: ch10/autoComplete/web/index.xhtml
===================================================================
--- ch10/autoComplete/web/index.xhtml (revision 174)
+++ ch10/autoComplete/web/index.xhtml (revision 175)
@@ -1,3 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
@@ -12,10 +13,10 @@
<h:form>
<h:panelGrid columns="2">
#{msgs.locationsPrompt}
- <util:autoComplete value="#{user.name}"
+ <util:autoComplete value="#{user.city}"
completionItems="#{autoComplete.locations}" />
</h:panelGrid>
</h:form>
</div>
</h:body>
-</html>
\ No newline at end of file
+</html>
Index: ch10/autoComplete/web/resources/javascript/autoComplete.js
===================================================================
--- ch10/autoComplete/web/resources/javascript/autoComplete.js (revision 174)
+++ ch10/autoComplete/web/resources/javascript/autoComplete.js (revision 175)
@@ -1,41 +1,40 @@
-if ( ! com) var com = {}
+if (!com) var com = {}
if (!com.corejsf) {
- var focusLostTimeout
- com.corejsf = {
- errorHandler: function(data) {
- alert("Error occurred during Ajax call: " + data.description)
- },
+ var focusLostTimeout
+ com.corejsf = {
+ errorHandler: function(data) {
+ alert("Error occurred during Ajax call: " + data.description)
+ },
- updateCompletionItems: function(input, event) {
- var keystrokeTimeout
+ updateCompletionItems: function(input, event) {
+ var keystrokeTimeout
- jsf.ajax.addOnError(com.corejsf.errorHandler)
-
- var ajaxRequest = function() {
-
- jsf.ajax.request(input, event,
- { render: com.corejsf.getListboxId(input),
- x: Element.cumulativeOffset(input)[0],
- y: Element.cumulativeOffset(input)[1] +
Element.getHeight(input)
- })
- }
-
- window.clearTimeout(keystrokeTimeout)
- keystrokeTimeout = window.setTimeout(ajaxRequest, 350)
- },
+ jsf.ajax.addOnError(com.corejsf.errorHandler)
+
+ var ajaxRequest = function() {
+ jsf.ajax.request(input, event, {
+ render: com.corejsf.getListboxId(input),
+ x: Element.cumulativeOffset(input)[0],
+ y: Element.cumulativeOffset(input)[1] +
Element.getHeight(input)
+ })
+ }
+
+ window.clearTimeout(keystrokeTimeout)
+ keystrokeTimeout = window.setTimeout(ajaxRequest, 350)
+ },
- inputLostFocus: function(input) {
- var hideListbox = function() {
- Element.hide(com.corejsf.getListboxId(input))
- }
-
- focusLostTimeout = window.setTimeout(hideListbox, 200)
- },
-
- getListboxId: function(input) {
- var clientId = new String(input.name)
- var lastIndex = clientId.lastIndexOf(':')
- return clientId.substring(0, lastIndex) + ':listbox'
- }
- }
-}
\ No newline at end of file
+ inputLostFocus: function(input) {
+ var hideListbox = function() {
+ Element.hide(com.corejsf.getListboxId(input))
+ }
+
+ focusLostTimeout = window.setTimeout(hideListbox, 200)
+ },
+
+ getListboxId: function(input) {
+ var clientId = new String(input.name)
+ var lastIndex = clientId.lastIndexOf(":")
+ return clientId.substring(0, lastIndex) + ":listbox"
+ }
+ }
+}
Index: ch10/autoComplete/web/resources/util/autoComplete.xhtml
===================================================================
--- ch10/autoComplete/web/resources/util/autoComplete.xhtml (revision 174)
+++ ch10/autoComplete/web/resources/util/autoComplete.xhtml (revision 175)
@@ -1,35 +1,37 @@
-<ui:composition xmlns="http://www.w3.org/1999/xhtml"
- xmlns:ui="http://java.sun.com/jsf/facelets"
- xmlns:f="http://java.sun.com/jsf/core"
- xmlns:h="http://java.sun.com/jsf/html"
- xmlns:composite="http://java.sun.com/jsf/composite">
-
- <!-- INTERFACE -->
- <composite:interface>
- <composite:attribute name="value" required="true"/>
- <composite:attribute name="completionItems" required="true"/>
- </composite:interface>
-
- <!-- IMPLEMENATION -->
- <composite:implementation>
- <h:outputScript library="javascript"
- name="prototype-1.6.0.2.js" target="head"/>
-
- <h:outputScript library="javascript"
- name="autoComplete.js" target="head"/>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"
+ xmlns:ui="http://java.sun.com/jsf/facelets"
+ xmlns:f="http://java.sun.com/jsf/core"
+ xmlns:h="http://java.sun.com/jsf/html"
+ xmlns:composite="http://java.sun.com/jsf/composite">
+ <head><title>IGNORED</title></head>
+ <body>
+ <ui:composition>
+ <composite:interface>
+ <composite:attribute name="value" required="true"/>
+ <composite:attribute name="completionItems" required="true"/>
+ </composite:interface>
+ <composite:implementation>
+ <h:outputScript library="javascript"
+ name="prototype-1.6.0.2.js" target="head"/>
+ <h:outputScript library="javascript"
+ name="autoComplete.js" target="head"/>
- <h:inputText id="input" value="#{cc.attrs.value}"
- valueChangeListener="#{autocompleteListener.valueChanged}"
- onkeyup="com.corejsf.updateCompletionItems(this, event)"
- onblur="com.corejsf.inputLostFocus(this)"/>
+ <h:inputText id="input" value="#{cc.attrs.value}"
+ valueChangeListener="#{autocompleteListener.valueChanged}"
+ onkeyup="com.corejsf.updateCompletionItems(this, event)"
+ onblur="com.corejsf.inputLostFocus(this)"/>
- <h:selectOneListbox id="listbox" style="display: none"
- valueChangeListener="#{autocompleteListener.completionItemSelected}"
- onfocus="com.corejsf.listboxGainedFocus()">
+ <h:selectOneListbox id="listbox" style="display: none"
+
valueChangeListener="#{autocompleteListener.completionItemSelected}"
+ onfocus="com.corejsf.listboxGainedFocus()">
<f:selectItems value="#{cc.attrs.completionItems}"/>
<f:ajax render="input"/>
- </h:selectOneListbox>
- </composite:implementation>
-</ui:composition>
\ No newline at end of file
+ </h:selectOneListbox>
+ </composite:implementation>
+ </ui:composition>
+ </body>
+</html>
Index: ch11/spinner-ajax/src/java/com/corejsf/FontSpinnerRenderer.java
===================================================================
--- ch11/spinner-ajax/src/java/com/corejsf/FontSpinnerRenderer.java
(revision 174)
+++ ch11/spinner-ajax/src/java/com/corejsf/FontSpinnerRenderer.java
(revision 175)
@@ -36,7 +36,7 @@
String formId = com.corejsf.util.Renderers.getFormId(context,
component);
UIInput spinner = (UIInput) component;
String ajaxScript = MessageFormat.format(
- "if(document.forms[''{0}''][''{1}''].value != '''') {2};",
+ "if (document.forms[''{0}''][''{1}''].value != '''') {2};",
formId, clientId, getChangeScript(context, spinner));
String min = component.getAttributes().get("minimum").toString();
Index: ch11/spinner-ajax2/src/java/com/corejsf/JSSpinnerRenderer.java
===================================================================
--- ch11/spinner-ajax2/src/java/com/corejsf/JSSpinnerRenderer.java
(revision 174)
+++ ch11/spinner-ajax2/src/java/com/corejsf/JSSpinnerRenderer.java
(revision 175)
@@ -40,7 +40,7 @@
String formId = com.corejsf.util.Renderers.getFormId(context,
component);
UIInput spinner = (UIInput) component;
String ajaxScript = MessageFormat.format(
- "if(document.forms[''{0}''][''{1}''].value != '''') {2};",
+ "if (document.forms[''{0}''][''{1}''].value != '''') {2};",
formId, clientId, getChangeScript(context, spinner));
String min = component.getAttributes().get("minimum").toString();
@@ -139,4 +139,4 @@
}
}
}
-}
\ No newline at end of file
+}
Index: ch11/spinner-ajax2/src/java/com/corejsf/UISpinner.java
===================================================================
--- ch11/spinner-ajax2/src/java/com/corejsf/UISpinner.java (revision 174)
+++ ch11/spinner-ajax2/src/java/com/corejsf/UISpinner.java (revision 175)
@@ -20,13 +20,7 @@
// this component has a renderer
}
- @Override
- public String getDefaultEventName() {
- return "click";
- }
+ public String getDefaultEventName() { return "click"; }
- @Override
- public Collection<String> getEventNames() {
- return eventNames;
- }
-}
\ No newline at end of file
+ public Collection<String> getEventNames() { return eventNames; }
+}
Index: ch11/tabbedpane/src/java/com/corejsf/messages.properties
===================================================================
--- ch11/tabbedpane/src/java/com/corejsf/messages.properties (revision 174)
+++ ch11/tabbedpane/src/java/com/corejsf/messages.properties (revision 175)
@@ -25,5 +25,5 @@
1743 in Virginia. Jefferson was tall and awkward, and was not known as a \
great public speaker. Jefferson became minister to France in 1785, after \
Benjamin Franklin held that post. In 1796, Jefferson was a reluctant \
- presidential candiate, and missed winning the election by a mere three
votes. \
- He served as president from 1801-1809.
\ No newline at end of file
+ presidential candidate, and missed winning the election by a mere three
votes. \
+ He served as president from 1801-1809.
Index: ch11/spinner-js/web/resources/javascript/spinner.js
===================================================================
--- ch11/spinner-js/web/resources/javascript/spinner.js (revision 174)
+++ ch11/spinner-js/web/resources/javascript/spinner.js (revision 175)
@@ -2,10 +2,10 @@
if (!com.corejsf) com.corejsf = {};
com.corejsf.spinner = {
spin: function(field, increment) {
- var v = parseInt(field.value) + increment;
- if (isNaN(v)) return;
- if ('min' in field && v < field.min) return;
- if ('max' in field && v > field.max) return;
- field.value = v;
+ var v = parseInt(field.value) + increment;
+ if (isNaN(v)) return;
+ if ('min' in field && v < field.min) return;
+ if ('max' in field && v > field.max) return;
+ field.value = v;
}
};
Index: ch11/spinner/src/java/com/corejsf/UISpinner.java
===================================================================
--- ch11/spinner/src/java/com/corejsf/UISpinner.java (revision 174)
+++ ch11/spinner/src/java/com/corejsf/UISpinner.java (revision 175)
@@ -35,7 +35,7 @@
int increment;
if (requestMap.containsKey(clientId + MORE)) increment = 1;
- else if(requestMap.containsKey(clientId + LESS)) increment = -1;
+ else if (requestMap.containsKey(clientId + LESS)) increment = -1;
else increment = 0;
try {
@@ -62,7 +62,7 @@
if (v != null) writer.writeAttribute("value", v, "value");
Object size = getAttributes().get("size");
- if(size != null) writer.writeAttribute("size", size, "size");
+ if (size != null) writer.writeAttribute("size", size, "size");
writer.endElement("input");
}
@@ -103,4 +103,4 @@
if (value instanceof String) return Integer.parseInt((String) value);
throw new IllegalArgumentException("Cannot convert " + value);
}
-}
\ No newline at end of file
+}
Index: ch03/javaquiz/web/index.xhtml
===================================================================
--- ch03/javaquiz/web/index.xhtml (revision 174)
+++ ch03/javaquiz/web/index.xhtml (revision 175)
@@ -8,7 +8,7 @@
</h:head>
<h:body>
<h:form>
- <p>#{quizBean.question}"/></p>
+ <p>#{quizBean.question}"</p>
<p><h:inputText value="#{quizBean.response}"/></p>
<p>
<h:commandButton value="#{msgs.checkAnswer}"
@@ -16,4 +16,4 @@
</p>
</h:form>
</h:body>
-</html>
\ No newline at end of file
+</html>
Index: ch12/slsb/src/java/com/corejsf/CredentialsManager.java
===================================================================
--- ch12/slsb/src/java/com/corejsf/CredentialsManager.java (revision 174)
+++ ch12/slsb/src/java/com/corejsf/CredentialsManager.java (revision 175)
@@ -20,7 +20,7 @@
if (result.size() != 1) return 0;
Credentials c = result.get(0);
String storedPassword = c.getPasswd();
- if (password.equals(storedPassword.trim()))
+ if (password.equals(storedPassword))
return c.incrementLoginCount();
else
return 0;
Index: ch12/db/src/java/com/corejsf/UserBean.java
===================================================================
--- ch12/db/src/java/com/corejsf/UserBean.java (revision 174)
+++ ch12/db/src/java/com/corejsf/UserBean.java (revision 175)
@@ -75,8 +75,7 @@
try {
conn.setAutoCommit(false);
boolean committed = false;
- try
- {
+ try {
PreparedStatement passwordQuery = conn.prepareStatement(
"SELECT passwd, logincount from Credentials WHERE username =
?");
passwordQuery.setString(1, name);
@@ -85,8 +84,9 @@
if (!result.next()) return;
String storedPassword = result.getString("passwd");
- loggedIn = password.equals(storedPassword.trim());
- count = result.getInt("logincount");
+ loggedIn = password.equals(storedPassword);
+ if (!loggedIn) return;
+ count = result.getInt("logincount") + 1;
PreparedStatement updateCounterStat = conn.prepareStatement(
"UPDATE Credentials SET logincount = logincount + 1"
Index: ch12/jpa/src/java/com/corejsf/UserBean.java
===================================================================
--- ch12/jpa/src/java/com/corejsf/UserBean.java (revision 174)
+++ ch12/jpa/src/java/com/corejsf/UserBean.java (revision 175)
@@ -77,7 +77,7 @@
if (result.size() == 1) {
Credentials c = result.get(0);
- if (c.getPasswd().trim().equals(password)) {
+ if (c.getPasswd().equals(password)) {
loggedIn = true;
count = c.incrementLoginCount();
}
Index: ch12/sfsb/src/java/com/corejsf/UserBean.java
===================================================================
--- ch12/sfsb/src/java/com/corejsf/UserBean.java (revision 174)
+++ ch12/sfsb/src/java/com/corejsf/UserBean.java (revision 175)
@@ -59,7 +59,7 @@
if (result.size() == 1) {
Credentials c = result.get(0);
String storedPassword = c.getPasswd();
- loggedIn = password.equals(storedPassword.trim());
+ loggedIn = password.equals(storedPassword);
count = c.incrementLoginCount();
}
}
Index: build.xml
===================================================================
--- build.xml (revision 174)
+++ build.xml (revision 175)
@@ -1,5 +1,4 @@
-<project default="install">
-
+<project default="install">
<property environment="env"/>
<property file="build.properties"/>
<property file="${app}/tomcat.properties"/>
@@ -66,26 +65,34 @@
</javac>
</target>
- <target name="jsf-libs" if="use-jsf-libs">
+ <target name="jsf-libs" if="use-jsf-libs" unless="glassfish">
<mkdir dir="${builddir}/WEB-INF/lib"/>
<copy file="${jsf.api.jar}" todir="${builddir}/WEB-INF/lib"
verbose="true"/>
<copy file="${jsf.impl.jar}" todir="${builddir}/WEB-INF/lib"
verbose="true"/>
</target>
- <target name="el-libs" if="use-el-libs">
- <copy file="${el.api.jar}" todir="${builddir}/WEB-INF/lib"
verbose="true"/>
- <copy file="${el.impl.jar}" todir="${builddir}/WEB-INF/lib"
verbose="true"/>
+
+ <target name="el-libs" if="use-el-libs" unless="glassfish">
+ <copy file="${el.api.jar}" todir="${builddir}/WEB-INF/lib"
+ verbose="true" failonerror="false"/>
+ <copy file="${el.impl.jar}" todir="${builddir}/WEB-INF/lib"
+ verbose="true" failonerror="false"/>
</target>
- <target name="bean-validation-libs" if="use-bean-validation-libs">
- <copy file="${bean-validation.impl.jar}"
todir="${builddir}/WEB-INF/lib" verbose="true"/>
- <copy todir="${builddir}/WEB-INF/lib" verbose="true">
+
+ <target name="bean-validation-libs" if="use-bean-validation-libs"
unless="glassfish">
+ <copy file="${bean-validation.impl.jar}"
todir="${builddir}/WEB-INF/lib"
+ verbose="true" failonerror="false"/>
+ <copy todir="${builddir}/WEB-INF/lib" verbose="true"
failonerror="false">
<fileset dir="${bean-validation.lib.dir}">
<include name="*.jar"/>
</fileset>
</copy>
</target>
- <target name="cdi-libs" if="use-cdi-libs">
- <copy file="${cdi.impl.jar}" todir="${builddir}/WEB-INF/lib"
verbose="true"/>
+
+ <target name="cdi-libs" if="use-cdi-libs" unless="glassfish">
+ <copy file="${cdi.impl.jar}" todir="${builddir}/WEB-INF/lib"
+ verbose="true" failonerror="false"/>
</target>
+
<target name="tomcat-libs" depends="jsf-libs, el-libs,
bean-validation-libs, cdi-libs"/>
<target name="war" depends="clean, compile, tomcat-libs"
Index: ch04/select/web/showInformation.xhtml
===================================================================
--- ch04/select/web/showInformation.xhtml (revision 174)
+++ ch04/select/web/showInformation.xhtml (revision 175)
@@ -8,7 +8,7 @@
</h:head>
<h:body>
<h:form>
- <h:outputStylesheet library="css" name="styles.css" target="head"/>
+ <h:outputStylesheet library="css" name="styles.css"/>
<h:outputFormat value="#{msgs.thankYouLabel}">
<f:param value="#{form.name}"/>
</h:outputFormat>
Index: ch04/select/web/index.xhtml
===================================================================
--- ch04/select/web/index.xhtml (revision 174)
+++ ch04/select/web/index.xhtml (revision 175)
@@ -37,7 +37,7 @@
</h:selectManyListbox>
#{msgs.educationPrompt}
<h:selectOneRadio value="#{form.education}"
- selectedClass="selected"
layout="pageDirection">
+ layout="pageDirection">
<f:selectItems value="#{form.educationItems}"/>
</h:selectOneRadio>
</h:panelGrid>
Property changes on: ch04/flags
___________________________________________________________________
Modified: svn:ignore
- .classpath
.project
.settings
.wtpmodules
build
bin
+ .classpath
.project
.settings
.wtpmodules
build
bin
dist
Index: ch13/popup/web/resources/javascript/popup1.js
===================================================================
--- ch13/popup/web/resources/javascript/popup1.js (revision 174)
+++ ch13/popup/web/resources/javascript/popup1.js (revision 175)
@@ -3,11 +3,11 @@
for ( var i = 0; i < country.length; i++) {
if (country[i].checked) {
popup = window.open("popup1.xhtml?country="
- + country[i].value, "popup",
- "height=300,width=200,toolbar=no,menubar=no,"
+ + country[i].value, "popup",
+ "height=300,width=200,toolbar=no,menubar=no,"
+ "scrollbars=yes");
popup.openerFormId = source.form.id;
- popup.focus();
+ popup.focus();
}
}
}
Index: ch13/popup/web/resources/javascript/popup2.js
===================================================================
--- ch13/popup/web/resources/javascript/popup2.js (revision 174)
+++ ch13/popup/web/resources/javascript/popup2.js (revision 175)
@@ -1,6 +1,6 @@
function doPopup(source) {
country = source.form[source.form.id + ":country"];
- for ( var i = 0; i < country.length; i++) {
+ for (var i = 0; i < country.length; i++) {
if (country[i].checked) {
popup = window.open("", "/faces/popup2.xhtml",
"height=300,width=200,toolbar=no,menubar=no,scrollbars=yes");
Index: ch13/fileupload/src/java/com/corejsf/UploadFilter.java
===================================================================
--- ch13/fileupload/src/java/com/corejsf/UploadFilter.java (revision 174)
+++ ch13/fileupload/src/java/com/corejsf/UploadFilter.java (revision 175)
@@ -13,7 +13,6 @@
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
-import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import org.apache.commons.fileupload.FileItem;
@@ -21,7 +20,6 @@
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
-@WebFilter("/")
public class UploadFilter implements Filter {
private int sizeThreshold = -1;
private String repositoryPath;
@@ -108,4 +106,4 @@
throw servletEx;
}
}
-}
\ No newline at end of file
+}
Index: ch13/clientside-validator/src/java/com/corejsf/CreditCardValidator.java
===================================================================
--- ch13/clientside-validator/src/java/com/corejsf/CreditCardValidator.java
(revision 174)
+++ ch13/clientside-validator/src/java/com/corejsf/CreditCardValidator.java
(revision 175)
@@ -22,13 +22,13 @@
public void validate(FacesContext context, UIComponent component,
Object value) {
- if(value == null) return;
+ if (value == null) return;
String cardNumber;
if (value instanceof CreditCard)
cardNumber = value.toString();
else
cardNumber = getDigitsOnly(value.toString());
- if(!luhnCheck(cardNumber)) {
+ if (!luhnCheck(cardNumber)) {
FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR,
getErrorMessage(value, context), null);
throw new ValidatorException(message);
@@ -50,7 +50,7 @@
private static boolean luhnCheck(String cardNumber) {
int sum = 0;
- for(int i = cardNumber.length() - 1; i >= 0; i -= 2) {
+ for (int i = cardNumber.length() - 1; i >= 0; i -= 2) {
sum += Integer.parseInt(cardNumber.substring(i, i + 1));
if(i > 0) {
int d = 2 * Integer.parseInt(cardNumber.substring(i - 1, i));
@@ -65,7 +65,7 @@
private static String getDigitsOnly(String s) {
StringBuilder digitsOnly = new StringBuilder ();
char c;
- for(int i = 0; i < s.length (); i++) {
+ for (int i = 0; i < s.length (); i++) {
c = s.charAt (i);
if (Character.isDigit(c)) {
digitsOnly.append(c);
@@ -73,4 +73,4 @@
}
return digitsOnly.toString ();
}
-}
\ No newline at end of file
+}
Index: ch05/planets/web/sections/planetarium/sidebarLeft.xhtml
===================================================================
--- ch05/planets/web/sections/planetarium/sidebarLeft.xhtml (revision 174)
+++ ch05/planets/web/sections/planetarium/sidebarLeft.xhtml (revision 175)
@@ -10,13 +10,13 @@
<h:form>
<corejsf:planet name="mercury"
image="#{resource['images:Mercury.gif']}"/>
- <corejsf:planet name="venus"
+ <corejsf:planet name="venus"
image="#{resource['images:Venus.gif']}"/>
- <corejsf:planet name="earth"
+ <corejsf:planet name="earth"
image="#{resource['images:Earth.gif']}"/>
- <corejsf:planet name="mars"
+ <corejsf:planet name="mars"
image="#{resource['images:Mars.gif']}"/>
- <corejsf:planet name="jupiter"
+ <corejsf:planet name="jupiter"
image="#{resource['images:Jupiter.gif']}"/>
<corejsf:planet name="saturn"
image="#{resource['images:Saturn.gif']}"/>
Index: ch06/database/web/misc/customers.sql
===================================================================
--- ch06/database/web/misc/customers.sql (revision 174)
+++ ch06/database/web/misc/customers.sql (revision 175)
@@ -1,10 +1,10 @@
CREATE TABLE Customers (
Cust_ID INT,
- Name CHAR(30),
- Phone_Number CHAR(15),
- Street_Address CHAR(30),
- City CHAR(30),
- State CHAR(15)
+ Name VARCHAR(30),
+ Phone_Number VARCHAR(15),
+ Street_Address VARCHAR(30),
+ City VARCHAR(30),
+ State VARCHAR(15)
);
INSERT INTO Customers VALUES (1, 'William Dupont', '(652)488-9931',
Index: ch06/sorting/src/java/com/corejsf/SortFilterModel.java
===================================================================
--- ch06/sorting/src/java/com/corejsf/SortFilterModel.java (revision 174)
+++ ch06/sorting/src/java/com/corejsf/SortFilterModel.java (revision 175)
@@ -41,7 +41,7 @@
}
public void setRowIndex(int rowIndex) {
- if(0 <= rowIndex && rowIndex < rows.length)
+ if (0 <= rowIndex && rowIndex < rows.length)
model.setRowIndex(rows[rowIndex]);
else
model.setRowIndex(rowIndex);
@@ -70,9 +70,9 @@
}
private void initializeRows() {
int rowCnt = model.getRowCount();
- if(rowCnt != -1) {
+ if (rowCnt != -1) {
rows = new Integer[rowCnt];
for(int i = 0; i < rowCnt; ++i) rows[i] = i;
}
}
-}
\ No newline at end of file
+}
Index: ch07/custom-tags/src/java/com/corejsf/CreditCardValidator.java
===================================================================
--- ch07/custom-tags/src/java/com/corejsf/CreditCardValidator.java
(revision 174)
+++ ch07/custom-tags/src/java/com/corejsf/CreditCardValidator.java
(revision 175)
@@ -11,7 +11,7 @@
import javax.faces.validator.Validator;
import javax.faces.validator.ValidatorException;
-@FacesValidator("com.corejsf.CreditCard")
+@FacesValidator("com.corejsf.Card")
public class CreditCardValidator implements Validator, Serializable {
private String errorSummary;
private String errorDetail;
@@ -75,4 +75,4 @@
}
return digitsOnly.toString ();
}
-}
\ No newline at end of file
+}
Index: ch07/custom-tags/src/java/com/corejsf/CreditCardConverter.java
===================================================================
--- ch07/custom-tags/src/java/com/corejsf/CreditCardConverter.java
(revision 174)
+++ ch07/custom-tags/src/java/com/corejsf/CreditCardConverter.java
(revision 175)
@@ -7,7 +7,7 @@
import javax.faces.convert.ConverterException;
import javax.faces.convert.FacesConverter;
-@FacesConverter("com.corejsf.CreditCard")
+@FacesConverter("com.corejsf.Card")
public class CreditCardConverter implements Converter, Serializable
{
private String separator;
@@ -70,4 +70,4 @@
result.append(v.substring(start));
return result.toString();
}
-}
\ No newline at end of file
+}
Index: ch07/custom-tags/web/WEB-INF/corejsf.taglib.xml
===================================================================
--- ch07/custom-tags/web/WEB-INF/corejsf.taglib.xml (revision 174)
+++ ch07/custom-tags/web/WEB-INF/corejsf.taglib.xml (revision 175)
@@ -8,13 +8,13 @@
<tag>
<tag-name>convertCreditCard</tag-name>
<converter>
- <converter-id>com.corejsf.CreditCard</converter-id>
+ <converter-id>com.corejsf.Card</converter-id>
</converter>
</tag>
<tag>
<tag-name>validateCreditCard</tag-name>
<validator>
- <validator-id>com.corejsf.CreditCard</validator-id>
+ <validator-id>com.corejsf.Card</validator-id>
</validator>
</tag>
-</facelet-taglib>
\ No newline at end of file
+</facelet-taglib>
Index: ch07/validator2/web/result.xhtml
===================================================================
--- ch07/validator2/web/result.xhtml (revision 174)
+++ ch07/validator2/web/result.xhtml (revision 175)
@@ -19,7 +19,7 @@
#{msgs.creditCard}
<h:outputText value="#{payment.card}"
- converter="com.corejsf.CreditCard"/>
+ converter="com.corejsf.Card"/>
#{msgs.expirationDate}
<h:outputText value="#{payment.date}">
Property changes on: ch07/validator3
___________________________________________________________________
Modified: svn:ignore
- .settings
.classpath
.project
+ .settings
.classpath
.project
build
Index: ch08/rushmore/src/java/com/corejsf/messages.properties
===================================================================
--- ch08/rushmore/src/java/com/corejsf/messages.properties (revision 174)
+++ ch08/rushmore/src/java/com/corejsf/messages.properties (revision 175)
@@ -30,5 +30,5 @@
1743 in Virginia. Jefferson was tall and awkward, and was not known as a \
great public speaker. Jefferson became minister to France in 1785, after \
Benjamin Franklin held that post. In 1796, Jefferson was a reluctant \
- presidential candiate, and missed winning the election by a mere three
votes. \
- He served as president from 1801-1809.
\ No newline at end of file
+ presidential candidate, and missed winning the election by a mere three
votes. \
+ He served as president from 1801-1809.
Index: ch08/tabbedpane/src/java/com/corejsf/messages.properties
===================================================================
--- ch08/tabbedpane/src/java/com/corejsf/messages.properties (revision 174)
+++ ch08/tabbedpane/src/java/com/corejsf/messages.properties (revision 175)
@@ -25,5 +25,5 @@
1743 in Virginia. Jefferson was tall and awkward, and was not known as a \
great public speaker. Jefferson became minister to France in 1785, after \
Benjamin Franklin held that post. In 1796, Jefferson was a reluctant \
- presidential candiate, and missed winning the election by a mere three
votes. \
- He served as president from 1801-1809.
\ No newline at end of file
+ presidential candidate, and missed winning the election by a mere three
votes. \
+ He served as president from 1801-1809.
Index: ch08/system-events/src/java/com/corejsf/UserBean.java
===================================================================
--- ch08/system-events/src/java/com/corejsf/UserBean.java (revision 174)
+++ ch08/system-events/src/java/com/corejsf/UserBean.java (revision 175)
@@ -1,5 +1,7 @@
package com.corejsf;
+import java.io.Serializable
+
import javax.faces.application.ConfigurableNavigationHandler;
import javax.inject.Named;
// or import javax.faces.bean.ManagedBean;
@@ -11,7 +13,7 @@
@Named("user") // or @ManagedBean(name="user")
@SessionScoped
-public class UserBean {
+public class UserBean implements Serializable {
private String name = "";
private String password;
private boolean loggedIn;
@@ -42,4 +44,4 @@
handler.performNavigation("login");
}
}
-}
\ No newline at end of file
+}
Index: ch09/composite-login/web/register.xhtml
===================================================================
--- ch09/composite-login/web/register.xhtml (revision 174)
+++ ch09/composite-login/web/register.xhtml (revision 175)
@@ -1,7 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
- xmlns:h="http://java.sun.com/jsf/html">
+ xmlns:h="http://java.sun.com/jsf/html">
<h:head>
<title>#{msgs.registerHeading}</title>
<h:outputStylesheet library="css" name="styles.css" />
@@ -24,4 +25,4 @@
</p>
</h:form>
</h:body>
-</html>
\ No newline at end of file
+</html>
Index: ch09/composite-login/web/index.xhtml
===================================================================
--- ch09/composite-login/web/index.xhtml (revision 174)
+++ ch09/composite-login/web/index.xhtml (revision 175)
@@ -1,5 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
@@ -35,4 +36,4 @@
</util:login>
<ui:debug/>
</h:body>
-</html>
\ No newline at end of file
+</html>
Index: ch09/composite-login/web/welcome.xhtml
===================================================================
--- ch09/composite-login/web/welcome.xhtml (revision 174)
+++ ch09/composite-login/web/welcome.xhtml (revision 175)
@@ -1,9 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
- xmlns:f="http://java.sun.com/jsf/core"
- xmlns:h="http://java.sun.com/jsf/html"
- xmlns:util="http://java.sun.com/jsf/composite/util">
+ xmlns:f="http://java.sun.com/jsf/core"
+ xmlns:h="http://java.sun.com/jsf/html"
+ xmlns:util="http://java.sun.com/jsf/composite/util">
<h:head>
<title>#{msgs.welcomeHeading}</title>
<h:outputStylesheet library="css" name="styles.css" />
@@ -14,4 +15,4 @@
<util:icon image="#{resource['images:back.png']}"
actionMethod="#{user.logout}" style="border: thin solid
lightBlue"/>
</h:body>
-</html>
\ No newline at end of file
+</html>
Index: ch09/composite-login/web/resources/util/icon.xhtml
===================================================================
--- ch09/composite-login/web/resources/util/icon.xhtml (revision 174)
+++ ch09/composite-login/web/resources/util/icon.xhtml (revision 175)
@@ -1,9 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
+"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
- xmlns:h="http://java.sun.com/jsf/html"
- xmlns:composite="http://java.sun.com/jsf/composite">
+ xmlns:h="http://java.sun.com/jsf/html"
+ xmlns:composite="http://java.sun.com/jsf/composite">
<composite:interface>
<composite:attribute name="image" required="true" />
@@ -25,4 +25,4 @@
</h:form>
</composite:implementation>
-</html>
\ No newline at end of file
+</html>
Index: ch09/composite-login/web/resources/util/login.xhtml
===================================================================
--- ch09/composite-login/web/resources/util/login.xhtml (revision 174)
+++ ch09/composite-login/web/resources/util/login.xhtml (revision 175)
@@ -1,6 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
+"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:composite="http://java.sun.com/jsf/composite">
@@ -62,4 +62,4 @@
<p>#{cc.resourceBundleMap.footer}</p>
</composite:implementation>
-</html>
\ No newline at end of file
+</html>
Index: ch09/simple-composite/web/resources/util/debug.xhtml
===================================================================
--- ch09/simple-composite/web/resources/util/debug.xhtml (revision 174)
+++ ch09/simple-composite/web/resources/util/debug.xhtml (revision 175)
@@ -1,10 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
+"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
- xmlns:composite="http://java.sun.com/jsf/composite">
-
+ xmlns:composite="http://java.sun.com/jsf/composite">
+
<composite:interface/>
<composite:implementation>
Index: ch09/composite-date/src/java/util/date.java
===================================================================
--- ch09/composite-date/src/java/util/date.java (revision 174)
+++ ch09/composite-date/src/java/util/date.java (revision 175)
@@ -41,9 +41,9 @@
UIInput dayComponent = (UIInput) findComponent("day");
UIInput monthComponent = (UIInput) findComponent("month");
UIInput yearComponent = (UIInput) findComponent("year");
- int day = (Integer) dayComponent.getValue();
- int month = (Integer) monthComponent.getValue();
- int year = (Integer) yearComponent.getValue();
+ int day = Integer.parseInt((String) dayComponent.getSubmittedValue());
+ int month = Integer.parseInt((String)
monthComponent.getSubmittedValue());
+ int year = Integer.parseInt((String)
yearComponent.getSubmittedValue());
if (isValidDate(day, month, year))
return new GregorianCalendar(year, month - 1, day).getTime();
else {
Index: ch09/composite-date/web/resources/util/date.xhtml
===================================================================
--- ch09/composite-date/web/resources/util/date.xhtml (revision 174)
+++ ch09/composite-date/web/resources/util/date.xhtml (revision 175)
@@ -1,11 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
+"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
- xmlns:h="http://java.sun.com/jsf/html"
- xmlns:composite="http://java.sun.com/jsf/composite"
- xmlns:f="http://java.sun.com/jsf/core">
+ xmlns:h="http://java.sun.com/jsf/html"
+ xmlns:composite="http://java.sun.com/jsf/composite"
+ xmlns:f="http://java.sun.com/jsf/core">
<composite:interface>
<composite:attribute name="value" type="java.util.Date"/>
Property changes on: ch09/composite-date
___________________________________________________________________
Added: svn:ignore
+ build
Index: build.properties.glassfish
===================================================================
--- build.properties.glassfish (revision 174)
+++ build.properties.glassfish (revision 175)
@@ -1,4 +1,5 @@
appserver.dir=${env.GLASSFISH_HOME}
+glassfish=true
jsf.api.jar=${appserver.dir}/modules/jsf-api.jar
servlet.api.jar=${appserver.dir}/modules/javax.servlet.jar
el.api.jar=${appserver.dir}/modules/javax.servlet.jsp.jar
@@ -8,5 +9,5 @@
bean-validation.api.jar=${appserver.dir}/modules/bean-validator.jar
cdi.api.jar=${appserver.dir}/modules/weld-osgi-bundle.jar
mail.api.jar=${appserver.dir}/modules/mail.jar
-deploy.dir=/home/domains/domain1/autodeploy
+deploy.dir=${appserver.dir}/domains/domain1/autodeploy
|
[corejsf~subversion:175] Processed submitted bug reports |
cayhorstmann | 06/27/2011 |





