update issue 376
There was something fundamentally wrong with how we save the data which is
related to a workaround I had to create because Wicket works with Lists
whereas we have Sets everywhere. As a result changes are not correctly
persisted. Working on a better solution.
http://code.google.com/p/simal/source/detail?r=2240
Modified:
/trunk/uk.ac.osswatch.simal.web/src/main/java/uk/ac/osswatch/simal/wicket/panel/project/EditProjectPanel.java
/trunk/uk.ac.osswatch.simal.web/src/main/java/uk/ac/osswatch/simal/wicket/panel/project/GenericSetWrapper.java
=======================================
---
/trunk/uk.ac.osswatch.simal.web/src/main/java/uk/ac/osswatch/simal/wicket/panel/project/EditProjectPanel.java
Mon Feb 21 15:32:37 2011
+++
/trunk/uk.ac.osswatch.simal.web/src/main/java/uk/ac/osswatch/simal/wicket/panel/project/EditProjectPanel.java
Thu Apr 14 14:39:52 2011
@@ -19,7 +19,6 @@
import java.util.ArrayList;
import java.util.Collections;
-import java.util.Iterator;
import java.util.List;
import java.util.Set;
@@ -457,31 +456,24 @@
* @return
*/
private void addRepeatingInputs(String labelWicketID, Set<String>
labels) {
- Iterator<String> itr = labels.iterator();
- List<GenericSetWrapper<String>> data = new
ArrayList<GenericSetWrapper<String>>();
-
- while (itr.hasNext()) {
- GenericSetWrapper<String> gsw = new
GenericSetWrapper<String>(labels,
- itr.next());
- data.add(gsw);
- }
-
- // Add empty one for new
- data.add(new GenericSetWrapper<String>(labels, NEW_ITEM));
-
- ListView<GenericSetWrapper<String>> listView = new
ListView<GenericSetWrapper<String>>(
- labelWicketID, data) {
+
+ List<String> editableList = new ArrayList<String>(labels);
+ editableList.add(NEW_ITEM);
+ GenericSetWrapper<String> editableListWrapper = new
GenericSetWrapper<String>(new ArrayList<String>(editableList));
+
+
+ ListView<String> listView = new ListView<String>(
+ labelWicketID, new
PropertyModel<List<String>>(editableListWrapper, "editableList")) {
private static final long serialVersionUID = 154815894763179933L;
- protected void populateItem(ListItem<GenericSetWrapper<String>>
item) {
- GenericSetWrapper<String> wrapper = (GenericSetWrapper<String>)
item
- .getModelObject();
+ protected void populateItem(ListItem<String> item) {
+ String wrapper = (String) item.getModelObject();
TextField<String> setItemValue = new TextField<String>(
- "setItemValue", new PropertyModel<String>(wrapper, "value"));
+ "setItemValue", item.getModel());
setItemValue.add(new ReadOnlyStyleBehavior());
item.add(setItemValue);
item.add(generateDeleteItemButton(!NEW_ITEM
- .equals(wrapper.getValue()), item));
+ .equals(wrapper), item));
}
};
listView.setReuseItems(true);
@@ -490,7 +482,7 @@
private AjaxFallbackButton generateDeleteItemButton(
- boolean visibilityAllowed, ListItem<GenericSetWrapper<String>>
item) {
+ boolean visibilityAllowed, ListItem<String> item) {
AjaxFallbackButton deleteItemButton = new
AjaxFallbackDeleteItemButton(
"deleteItem", new Model<String>("X"), this, item);
@@ -506,7 +498,7 @@
private static final long serialVersionUID = -6395239712922873605L;
- private ListItem<GenericSetWrapper<String>> item;
+ private ListItem<String> item;
/**
* @param id
@@ -514,14 +506,14 @@
* @param form
*/
public AjaxFallbackDeleteItemButton(String id, IModel<String> model,
- Form<?> form, ListItem<GenericSetWrapper<String>> item) {
+ Form<?> form, ListItem<String> item) {
super(id, model, form);
this.item = item;
}
@Override
protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
- item.getModel().getObject().setValue(null);
+ // FIXME item.getModel().getObject().setValue(null);
item.setVisible(false);
setVisible(false);
target.addComponent(form);
=======================================
---
/trunk/uk.ac.osswatch.simal.web/src/main/java/uk/ac/osswatch/simal/wicket/panel/project/GenericSetWrapper.java
Thu Sep 2 15:48:06 2010
+++
/trunk/uk.ac.osswatch.simal.web/src/main/java/uk/ac/osswatch/simal/wicket/panel/project/GenericSetWrapper.java
Thu Apr 14 14:39:52 2011
@@ -1,7 +1,7 @@
package uk.ac.osswatch.simal.wicket.panel.project;
import java.io.Serializable;
-import java.util.Set;
+import java.util.List;
/*
* Copyright 2010 University of Oxford
@@ -31,43 +31,20 @@
private static final long serialVersionUID = 7273060956309086010L;
- private Set<T> parentSet;
-
- private T localValue;
-
- /**
- * Create a new wrapper for a set and an item in the set.
- * Reference to the parentSet is retained to be able to update
- * the parentSet from this wrapper.
- *
- * @param parentSet
- * @param value
- */
- public GenericSetWrapper(Set<T> parentSet, T value) {
- this.parentSet = parentSet;
- this.localValue = value;
+ private List<T> editableList;
+
+ public GenericSetWrapper(List<T> editableList) {
+ this.editableList = editableList;
}
- /**
- * Set the value and update the parent Set.
- *
- * @param value
- */
- public void setValue(T value) {
- parentSet.remove(this.localValue);
- if (value != null) {
- parentSet.add(value);
- }
- this.localValue = value;
+ public List<T> getEditableList() {
+ return editableList;
}
- /**
- * Return the locally retained value.
- *
- * @return
- */
- public T getValue() {
- return localValue;
+ public void setEditableList(List<T> editableList) {
+ // FIXME this setter is not called because the
+ // ListItemModel.setObject works directly on the List.
+ this.editableList = editableList;
}
}