Author: hlship
Date: Mon Oct 3 08:45:13 2005
New Revision: 293369
URL: http://svn.apache.org/viewcvs?rev=293369&view=rev
Log:
Continue upgrading the Virtual Library to 4.0.
Modified:
jakarta/tapestry/trunk/examples/Vlib/src/context/EditProfile.html
jakarta/tapestry/trunk/examples/Vlib/src/context/EditPublishers.html
jakarta/tapestry/trunk/examples/Vlib/src/context/WEB-INF/EditProfile.page
jakarta/tapestry/trunk/examples/Vlib/src/context/WEB-INF/EditProfile.properties
jakarta/tapestry/trunk/examples/Vlib/src/context/WEB-INF/EditPublishers.page
jakarta/tapestry/trunk/examples/Vlib/src/context/WEB-INF/EditPublishers.properties
jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/pages/EditProfile.java
jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/pages/admin/EditPublishers.java
Modified: jakarta/tapestry/trunk/examples/Vlib/src/context/EditProfile.html
URL:
http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/examples/Vlib/src/context/EditProfile.html?rev=293369&r1=293368&r2=293369&view=diff
==============================================================================
--- jakarta/tapestry/trunk/examples/Vlib/src/context/EditProfile.html (original)
+++ jakarta/tapestry/trunk/examples/Vlib/src/context/EditProfile.html Mon Oct
3 08:45:13 2005
@@ -1,51 +1,65 @@
<html jwcid="$content$">
-<body jwcid="[EMAIL PROTECTED]">
-
-<p>
- Update your registration information using the form below. Fields
marked with
- <span class="required-field">*</span> are required.
-</p>
-
-<span jwcid="@ShowError"/>
-<span jwcid="@ShowValidationError" delegate="ognl:validationDelegate"/>
-
-<form jwcid="[EMAIL PROTECTED]" listener="listener:updateProfile"
delegate="ognl:validationDelegate">
- <table class="form">
- <tr>
- <th>First Name</th>
- <td></td>
- <td width="390"><input jwcid="@TextField"
value="ognl:attributes.firstName" size="30" maxlength="30" type="text"/>
- </td>
- </tr>
- <tr>
- <th><span jwcid="@FieldLabel" field="component:inputLastName">Last
Name</span></th>
- <td><span class="required-field">*</span></td>
- <td><input jwcid="inputLastName" size="30" maxlength="30" type="text"/>
- </td>
- </tr>
- <tr>
- <th><span jwcid="@FieldLabel"
field="component:inputEmail">E-mail</span></th>
- <td><span class="required-field">*</span></td>
- <td><input jwcid="inputEmail" type="text" size="30" maxlength="60"/>
- </td>
- </tr>
- <tr>
- <th><span jwcid="@FieldLabel"
field="component:inputPassword1">Password</span></th>
- <td></td>
- <td><input jwcid="inputPassword1" type="password" size="20"
maxlength="20"/>
- </td>
- </tr>
- <tr>
- <th><span jwcid="@FieldLabel" field="component:inputPassword2">Password
(again)</span></th>
- <td></td>
- <td><input jwcid="inputPassword2" type="password" size="20"
maxlength="20"/>
- </td>
- </tr>
- <tr>
- <td colspan="2"></td>
- <td><input type="image" src="images/update.png" height="20" width="52"
border="0" alt="Update"/></td>
- </tr>
- </table>
-</form>
-</body>
+ <body jwcid="[EMAIL PROTECTED]">
+ <p> Update your registration information using the form below. Fields
marked with <span class="required-field"
+ >*</span> are required.</p>
+ <span jwcid="@ShowError"/>
+ <span jwcid="@ShowValidationError" delegate="ognl:validationDelegate"/>
+ <form jwcid="form">
+ <table class="form">
+ <tr>
+ <th>First Name</th>
+ <td/>
+ <td width="390">
+ <input jwcid="[EMAIL PROTECTED]" value="ognl:attributes.firstName"
size="30" maxlength="30" type="text"/>
+ </td>
+ </tr>
+ <tr>
+ <th>
+ <span jwcid="@FieldLabel" field="component:lastName">Last
Name</span>
+ </th>
+ <td>
+ <span class="required-field">*</span>
+ </td>
+ <td>
+ <input jwcid="lastName" size="30" maxlength="30" type="text"/>
+ </td>
+ </tr>
+ <tr>
+ <th>
+ <span jwcid="@FieldLabel" field="component:email">E-mail</span>
+ </th>
+ <td>
+ <span class="required-field">*</span>
+ </td>
+ <td>
+ <input jwcid="email" type="text" size="30" maxlength="60"/>
+ </td>
+ </tr>
+ <tr>
+ <th>
+ <span jwcid="@FieldLabel"
field="component:password1">Password</span>
+ </th>
+ <td/>
+ <td>
+ <input jwcid="password1" type="password" size="20" maxlength="20"/>
+ </td>
+ </tr>
+ <tr>
+ <th>
+ <span jwcid="@FieldLabel" field="component:password2">Password
(again)</span>
+ </th>
+ <td/>
+ <td>
+ <input jwcid="password2" type="password" size="20" maxlength="20"/>
+ </td>
+ </tr>
+ <tr>
+ <td colspan="2"/>
+ <td>
+ <input type="image" src="images/update.png" height="20" width="52"
border="0" alt="Update"/>
+ </td>
+ </tr>
+ </table>
+ </form>
+ </body>
</html>
Modified: jakarta/tapestry/trunk/examples/Vlib/src/context/EditPublishers.html
URL:
http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/examples/Vlib/src/context/EditPublishers.html?rev=293369&r1=293368&r2=293369&view=diff
==============================================================================
--- jakarta/tapestry/trunk/examples/Vlib/src/context/EditPublishers.html
(original)
+++ jakarta/tapestry/trunk/examples/Vlib/src/context/EditPublishers.html Mon
Oct 3 08:45:13 2005
@@ -1,8 +1,8 @@
<html jwcid="$content$">
-<body jwcid="@Border">
+<body jwcid="[EMAIL PROTECTED]">
<span jwcid="@ShowMessage"/>
-<span jwcid="@ShowError"/>
-<form jwcid="@Form" listener="listener:processForm">
+<span jwcid="@ShowValidationError" delegate="ognl:validationDelegate"/>
+<form jwcid="form">
<p>This page allows you to rename and delete publishers.
</p>
<table class="data">
@@ -10,10 +10,10 @@
<th>Publisher</th>
<th>Delete</th>
</tr>
- <tr jwcid="listEdit">
- <td class="control"><input jwcid="[EMAIL PROTECTED]"
value="ognl:publisher.name" size="40" maxlength="40"/>
+ <tr jwcid="loop">
+ <td class="control"><input jwcid="name" size="40" maxlength="40"/>
</td>
- <td class="checkbox"><input type="checkbox" jwcid="[EMAIL PROTECTED]"
selected="ognl:listEditMap.deleted"/>
+ <td class="checkbox"><input type="checkbox" jwcid="[EMAIL PROTECTED]"
value="ognl:deleted"/>
</td>
</tr>
<tr>
Modified:
jakarta/tapestry/trunk/examples/Vlib/src/context/WEB-INF/EditProfile.page
URL:
http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/examples/Vlib/src/context/WEB-INF/EditProfile.page?rev=293369&r1=293368&r2=293369&view=diff
==============================================================================
--- jakarta/tapestry/trunk/examples/Vlib/src/context/WEB-INF/EditProfile.page
(original)
+++ jakarta/tapestry/trunk/examples/Vlib/src/context/WEB-INF/EditProfile.page
Mon Oct 3 08:45:13 2005
@@ -16,47 +16,39 @@
-->
<!DOCTYPE page-specification PUBLIC
- "-//Apache Software Foundation//Tapestry Specification 3.0//EN"
- "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
+ "-//Apache Software Foundation//Tapestry Specification 4.0//EN"
+ "http://jakarta.apache.org/tapestry/dtd/Tapestry_4_0.dtd">
-<page-specification class="org.apache.tapestry.vlib.pages.EditProfile">
-
- <property-specification name="error" type="java.lang.String"/>
- <property-specification name="password1" type="java.lang.String"/>
- <property-specification name="password2" type="java.lang.String"/>
- <property-specification name="attributes" type="java.util.Map"/>
+<page-specification>
- <bean name="required" class="org.apache.tapestry.valid.StringValidator"
lifecycle="page">
- <set-property name="required" expression="true"/>
- <set-property name="clientScriptingEnabled" expression="true"/>
- </bean>
-
- <bean name="optional" class="org.apache.tapestry.valid.StringValidator"
lifecycle="page"/>
-
- <component id="inputLastName" type="ValidField">
- <binding name="value" expression="attributes.lastName"/>
- <static-binding name="displayName" value="Last Name"/>
- <binding name="validator" expression="beans.required"/>
+ <component id="form" type="Form">
+ <binding name="success" value="listener:updateProfile"/>
+ <binding name="delegate" value="validationDelegate"/>
+ <binding name="clientValidationEnabled" value="true"/>
+ </component>
+
+ <component id="lastName" type="TextField">
+ <binding name="value" value="attributes.lastName"/>
+ <binding name="displayName" value="message:last-name-label"/>
+ <binding name="validators" value="validators:required"/>
</component>
- <component id="inputEmail" type="ValidField">
- <binding name="value" expression="attributes.email"/>
- <static-binding name="displayName" value="E-Mail"/>
- <binding name="validator" expression="beans.required"/>
+ <component id="email" type="TextField">
+ <binding name="value" value="attributes.email"/>
+ <binding name="displayName" value="message:email-label"/>
+ <binding name="validators" value="validators:required,email"/>
</component>
- <component id="inputPassword1" type="ValidField">
- <binding name="value" expression="password1"/>
- <static-binding name="displayName" value="Password"/>
- <binding name="validator" expression="beans.optional"/>
- <binding name="hidden" expression="true"/>
+ <component id="password1" type="TextField">
+ <binding name="value" value="password1"/>
+ <binding name="displayName" value="message:password1-label"/>
+ <binding name="hidden" value="true"/>
</component>
- <component id="inputPassword2" type="ValidField">
- <binding name="value" expression="password2"/>
- <static-binding name="displayName" value="Password (again)"/>
- <binding name="validator" expression="beans.optional"/>
- <binding name="hidden" expression="true"/>
+ <component id="password2" type="TextField">
+ <binding name="value" value="password2"/>
+ <binding name="displayName" value="message:password2-label"/>
+ <binding name="hidden" value="true"/>
</component>
</page-specification>
Modified:
jakarta/tapestry/trunk/examples/Vlib/src/context/WEB-INF/EditProfile.properties
URL:
http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/examples/Vlib/src/context/WEB-INF/EditProfile.properties?rev=293369&r1=293368&r2=293369&view=diff
==============================================================================
---
jakarta/tapestry/trunk/examples/Vlib/src/context/WEB-INF/EditProfile.properties
(original)
+++
jakarta/tapestry/trunk/examples/Vlib/src/context/WEB-INF/EditProfile.properties
Mon Oct 3 08:45:13 2005
@@ -13,4 +13,8 @@
# limitations under the License.
enter-password-twice=Enter the new password, then re-enter it to confirm.
-password-must-match=Enter the same password in both fields.
\ No newline at end of file
+password-must-match=Enter the same password in both fields.
+last-name-label=Last Name
+email-label=E-Mail
+password1-label=Password
+password2-label=Password (again)
\ No newline at end of file
Modified:
jakarta/tapestry/trunk/examples/Vlib/src/context/WEB-INF/EditPublishers.page
URL:
http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/examples/Vlib/src/context/WEB-INF/EditPublishers.page?rev=293369&r1=293368&r2=293369&view=diff
==============================================================================
---
jakarta/tapestry/trunk/examples/Vlib/src/context/WEB-INF/EditPublishers.page
(original)
+++
jakarta/tapestry/trunk/examples/Vlib/src/context/WEB-INF/EditPublishers.page
Mon Oct 3 08:45:13 2005
@@ -16,22 +16,28 @@
-->
<!DOCTYPE page-specification PUBLIC
- "-//Apache Software Foundation//Tapestry Specification 3.0//EN"
- "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
+ "-//Apache Software Foundation//Tapestry Specification 4.0//EN"
+ "http://jakarta.apache.org/tapestry/dtd/Tapestry_4_0.dtd">
<page-specification
class="org.apache.tapestry.vlib.pages.admin.EditPublishers">
-
- <property-specification name="listEditMap"
type="org.apache.tapestry.form.ListEditMap"/>
- <property-specification name="message" type="java.lang.String"/>
- <property-specification name="error" type="java.lang.String"/>
-
- <property-specification name="publisher"
type="org.apache.tapestry.vlib.ejb.Publisher"/>
+
+ <component id="form" type="Form">
+ <binding name="success" value="listener:processForm"/>
+ <binding name="clientValidationEnabled" value="true"/>
+ <binding name="delegate" value="validationDelegate"/>
+ </component>
+
+ <component id="loop" type="For">
+ <binding name="source" value="publishers"/>
+ <binding name="value" value="publisher"/>
+ <binding name="element" value="literal:tr"/>
+ <binding name="primaryKeyConverter" value="publisherConverter"/>
+ </component>
- <component id="listEdit" type="ListEdit">
- <binding name="source" expression="listEditMap.keys"/>
- <binding name="value" expression="listEditMap.key"/>
- <static-binding name="element" value="tr"/>
- <binding name="listener" expression="listeners.synchronizePublisher"/>
+ <component id="name" type="TextField">
+ <binding name="value" value="publisher.name"/>
+ <binding name="validators" value="validators:required"/>
+ <binding name="displayName" value="message:publisher-name-label"/>
</component>
</page-specification>
Modified:
jakarta/tapestry/trunk/examples/Vlib/src/context/WEB-INF/EditPublishers.properties
URL:
http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/examples/Vlib/src/context/WEB-INF/EditPublishers.properties?rev=293369&r1=293368&r2=293369&view=diff
==============================================================================
---
jakarta/tapestry/trunk/examples/Vlib/src/context/WEB-INF/EditPublishers.properties
(original)
+++
jakarta/tapestry/trunk/examples/Vlib/src/context/WEB-INF/EditPublishers.properties
Mon Oct 3 08:45:13 2005
@@ -14,4 +14,6 @@
out-of-date=The data submitted in the form is out of date. Please try again.
read-failure=Unable to read the list of publishers.
-update-failure=Unable to update publishers.
\ No newline at end of file
+update-failure=Unable to update publishers.
+publisher-name-label=Publisher Name
+publishers-updated=Updated publishers.
\ No newline at end of file
Modified:
jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/pages/EditProfile.java
URL:
http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/pages/EditProfile.java?rev=293369&r1=293368&r2=293369&view=diff
==============================================================================
---
jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/pages/EditProfile.java
(original)
+++
jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/pages/EditProfile.java
Mon Oct 3 08:45:13 2005
@@ -59,11 +59,11 @@
@InjectState("visit")
public abstract Visit getVisitState();
- @InjectComponent("inputPassword1")
- public abstract IFormComponent getInputPassword1();
+ @InjectComponent("password1")
+ public abstract IFormComponent getPassword1Field();
- @InjectComponent("inputPassword2")
- public abstract IFormComponent getInputPassword2();
+ @InjectComponent("password2")
+ public abstract IFormComponent getPassword2Field();
@Message
public abstract String enterPasswordTwice();
@@ -126,10 +126,10 @@
IValidationDelegate delegate = getValidationDelegate();
- delegate.setFormComponent(getInputPassword1());
+ delegate.setFormComponent(getPassword1Field());
delegate.recordFieldInputValue(null);
- delegate.setFormComponent(getInputPassword2());
+ delegate.setFormComponent(getPassword2Field());
delegate.recordFieldInputValue(null);
if (delegate.getHasErrors())
@@ -139,7 +139,7 @@
if (HiveMind.isBlank(password1) != HiveMind.isBlank(password2))
{
- setErrorField("inputPassword1", enterPasswordTwice());
+ delegate.record(getPassword1Field(), enterPasswordTwice());
return;
}
@@ -148,7 +148,7 @@
{
if (!password1.equals(password2))
{
- setErrorField("inputPassword1", passwordMustMatch());
+ delegate.record(getPassword1Field(), passwordMustMatch());
return;
}
Modified:
jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/pages/admin/EditPublishers.java
URL:
http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/pages/admin/EditPublishers.java?rev=293369&r1=293368&r2=293369&view=diff
==============================================================================
---
jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/pages/admin/EditPublishers.java
(original)
+++
jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/pages/admin/EditPublishers.java
Mon Oct 3 08:45:13 2005
@@ -15,7 +15,10 @@
package org.apache.tapestry.vlib.pages.admin;
import java.rmi.RemoteException;
-import java.util.List;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
import javax.ejb.FinderException;
import javax.ejb.RemoveException;
@@ -23,14 +26,16 @@
import org.apache.hivemind.ApplicationRuntimeException;
import org.apache.tapestry.IRequestCycle;
import org.apache.tapestry.PageRedirectException;
-import org.apache.tapestry.Tapestry;
+import org.apache.tapestry.annotations.InjectPage;
+import org.apache.tapestry.annotations.Message;
+import org.apache.tapestry.components.IPrimaryKeyConverter;
+import org.apache.tapestry.event.PageBeginRenderListener;
import org.apache.tapestry.event.PageEvent;
-import org.apache.tapestry.event.PageRenderListener;
-import org.apache.tapestry.form.ListEditMap;
import org.apache.tapestry.vlib.AdminPage;
import org.apache.tapestry.vlib.VirtualLibraryEngine;
import org.apache.tapestry.vlib.ejb.IOperations;
import org.apache.tapestry.vlib.ejb.Publisher;
+import org.apache.tapestry.vlib.pages.MyLibrary;
/**
* Allows editting of the publishers in the database, including deleting
publishers (which can be
@@ -39,29 +44,74 @@
* @author Howard Lewis Ship
*/
-public abstract class EditPublishers extends AdminPage implements
PageRenderListener
+public abstract class EditPublishers extends AdminPage implements
PageBeginRenderListener
{
- public abstract ListEditMap getListEditMap();
-
- public abstract void setListEditMap(ListEditMap listEditMap);
-
public abstract Publisher getPublisher();
public abstract void setPublisher(Publisher publisher);
- public void synchronizePublisher(IRequestCycle cycle)
+ public abstract Map<Integer, Publisher> getPublisherMap();
+
+ public abstract void setPublisherMap(Map<Integer, Publisher> map);
+
+ public abstract void setPublishers(Publisher[] publishers);
+
+ public abstract void setDeletedPublishers(Set<Integer> deleted);
+
+ public abstract Set<Integer> getDeletedPublishers();
+
+ @Message
+ public abstract String outOfDate();
+
+ @Message
+ public abstract String updateFailure();
+
+ @Message
+ public abstract String publishersUpdated();
+
+ @InjectPage("MyLibrary")
+ public abstract MyLibrary getMyLibrary();
+
+ public class PublisherKeyConverter implements IPrimaryKeyConverter
{
- ListEditMap map = getListEditMap();
+ public Object getPrimaryKey(Object value)
+ {
+ Publisher publisher = (Publisher) value;
- Publisher publisher = (Publisher) map.getValue();
+ return publisher.getId();
+ }
- if (publisher == null)
+ public Object getValue(Object primaryKey)
{
- setError(getMessage("out-of-date"));
- throw new PageRedirectException(this);
+ Integer id = (Integer) primaryKey;
+
+ Publisher result = getPublisherMap().get(id);
+
+ if (result == null)
+ {
+ getValidationDelegate().record(null, outOfDate());
+ throw new PageRedirectException(EditPublishers.this);
+ }
+
+ return result;
}
- setPublisher(publisher);
+ }
+
+ public IPrimaryKeyConverter getPublisherConverter()
+ {
+ return new PublisherKeyConverter();
+ }
+
+ public boolean isDeleted()
+ {
+ return false;
+ }
+
+ public void setDeleted(boolean deleted)
+ {
+ if (deleted)
+ getDeletedPublishers().add(getPublisher().getId());
}
/**
@@ -87,33 +137,35 @@
}
catch (RemoteException ex)
{
- vengine.rmiFailure(getMessage("read-failure"), ex, i++);
+ vengine.rmiFailure(updateFailure(), ex, i++);
}
}
- ListEditMap map = new ListEditMap();
+ // This is really only needed during render, not rewind
+
+ setPublishers(publishers);
- int count = Tapestry.size(publishers);
+ Map<Integer, Publisher> publisherMap = new HashMap<Integer,
Publisher>();
- for (i = 0; i < count; i++)
- map.add(publishers[i].getId(), publishers[i]);
+ for (Publisher publisher : publishers)
+ {
+ publisherMap.put(publisher.getId(), publisher);
+ }
- setListEditMap(map);
+ setPublisherMap(publisherMap);
}
public void processForm(IRequestCycle cycle)
{
- if (isInError())
- return;
+ Map<Integer, Publisher> publisherMap = getPublisherMap();
+ Set<Integer> deleted = getDeletedPublishers();
- ListEditMap map = getListEditMap();
- List updateList = map.getValues();
- List deletedIds = map.getDeletedKeys();
+ // Delete from the map anything that was marked deleted
- Publisher[] updated = (Publisher[]) updateList.toArray(new
Publisher[updateList.size()]);
+ publisherMap.keySet().removeAll(deleted);
- Integer[] deleted = deletedIds == null ? null : (Integer[]) deletedIds
- .toArray(new Integer[deletedIds.size()]);
+ Publisher[] updated = publisherMap.values().toArray(new Publisher[0]);
+ Integer[] deletedKeys = deleted.toArray(new Integer[0]);
// Now, push the updates through to the database
@@ -126,7 +178,7 @@
{
IOperations operations = vengine.getOperations();
- operations.updatePublishers(updated, deleted);
+ operations.updatePublishers(updated, deletedKeys);
break;
}
@@ -140,18 +192,26 @@
}
catch (RemoteException ex)
{
- vengine.rmiFailure(getMessage("update-failure"), ex, i++);
+ vengine.rmiFailure(updateFailure(), ex, i++);
}
}
// Clear any cached info about publishers.
vengine.clearCache();
+
+ MyLibrary page = getMyLibrary();
+
+ page.setMessage(publishersUpdated());
+
+ page.activate();
}
public void pageBeginRender(PageEvent event)
{
readPublishers();
+
+ setDeletedPublishers(new HashSet());
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]