Author: nbelaevski
Date: 2007-11-27 22:24:01 -0500 (Tue, 27 Nov 2007)
New Revision: 4306
Added:
branches/3.1.x/ui/orderingList/src/main/java/org/richfaces/component/OrderingBaseAbstractSubmittedValue.java
Modified:
branches/3.1.x/ui/orderingList/src/main/java/org/richfaces/component/UIOrderingList.java
branches/3.1.x/ui/orderingList/src/main/java/org/richfaces/renderkit/OrderingComponentRendererBase.java
Log:
abstract submitted value class created
Added:
branches/3.1.x/ui/orderingList/src/main/java/org/richfaces/component/OrderingBaseAbstractSubmittedValue.java
===================================================================
---
branches/3.1.x/ui/orderingList/src/main/java/org/richfaces/component/OrderingBaseAbstractSubmittedValue.java
(rev 0)
+++
branches/3.1.x/ui/orderingList/src/main/java/org/richfaces/component/OrderingBaseAbstractSubmittedValue.java 2007-11-28
03:24:01 UTC (rev 4306)
@@ -0,0 +1,108 @@
+/**
+ *
+ */
+package org.richfaces.component;
+
+import java.io.Serializable;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.Set;
+import java.util.Map.Entry;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import javax.faces.FacesException;
+
+/**
+ * @author Nick Belaevski
+ *
+ */
+abstract class OrderingBaseAbstractSubmittedValue implements Serializable {
+
+ /**
+ *
+ */
+ private static final long serialVersionUID = -6779511867226722256L;
+
+ private Set selection = new HashSet();
+
+ private Set activeItems = new HashSet();
+
+ protected abstract Object createOldKey(String keyString);
+
+ protected abstract Object createNewKey(int i);
+
+ protected abstract Pattern getKeyStringPattern();
+
+ protected Set getActiveItems() {
+ return activeItems;
+ }
+
+ protected Set getSelection() {
+ return selection;
+ }
+
+ protected Map asMap(String string) {
+ if (string != null && string.length() != 0) {
+ String[] valueOrder = string.split(",");
+ Map translationMap = new LinkedHashMap(valueOrder.length);
+ for (int i = 0; i < valueOrder.length; i++) {
+ Matcher matcher = getKeyStringPattern().matcher(valueOrder[i]);
+ if (matcher.matches()) {
+ Object oldKey = createOldKey(matcher.group(1));
+ Object newKey = createNewKey(i);
+ translationMap.put(oldKey, newKey);
+ String group = matcher.group(2);
+ for (int j = 0; j < group.length(); j++) {
+ char c = group.charAt(j);
+ if ('s' == c) {
+ selection.add(oldKey);
+ } else if ('a' == c) {
+ activeItems.add(oldKey);
+ } else {
+ break ;
+ }
+ }
+ } else {
+ throw new FacesException(new IllegalArgumentException());
+ }
+ }
+
+ return translationMap;
+ } else {
+
+ return null;
+ }
+ }
+
+ protected String asString(Map map) {
+ if (map != null) {
+ StringBuffer result = new StringBuffer();
+ Iterator iterator = map.entrySet().iterator();
+ while (iterator.hasNext()) {
+ Entry entry = (Entry) iterator.next();
+
+ Object key = entry.getKey();
+
+ result.append(key);
+ if (selection.contains(key)) {
+ result.append('s');
+ }
+
+ if (activeItems.contains(key)) {
+ result.append('a');
+ }
+
+ if (iterator.hasNext()) {
+ result.append(',');
+ }
+ }
+ return result.toString();
+ } else {
+ return "";
+ }
+ }
+
+}
Modified:
branches/3.1.x/ui/orderingList/src/main/java/org/richfaces/component/UIOrderingList.java
===================================================================
---
branches/3.1.x/ui/orderingList/src/main/java/org/richfaces/component/UIOrderingList.java 2007-11-28
02:27:28 UTC (rev 4305)
+++
branches/3.1.x/ui/orderingList/src/main/java/org/richfaces/component/UIOrderingList.java 2007-11-28
03:24:01 UTC (rev 4306)
@@ -1,19 +1,15 @@
package org.richfaces.component;
import java.io.IOException;
-import java.io.Serializable;
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
import java.util.Iterator;
-import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
-import java.util.Map.Entry;
-import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.faces.FacesException;
@@ -35,7 +31,6 @@
import javax.faces.validator.Validator;
import javax.faces.validator.ValidatorException;
-import org.ajax4jsf.javascript.ScriptUtils;
import org.ajax4jsf.model.DataVisitor;
import org.ajax4jsf.model.ExtendedDataModel;
import org.richfaces.model.TranslatedSequenceDataModel;
@@ -44,73 +39,45 @@
private transient Map permutationOrder;
- protected static final class SubmittedValue implements Serializable {
+ protected static final class SubmittedValue extends OrderingBaseAbstractSubmittedValue
{
+ private static final Pattern KEY_STRING_PATTERN =
Pattern.compile("(\\d+)(s?a?)");
+
/**
*
*/
private static final long serialVersionUID = 5860506816451180551L;
private Map permutationOrder;
- private Set selectedItems = new HashSet();
- private Integer activeItem;
public SubmittedValue(String submittedString) {
super();
- fromString(submittedString);
- }
- private void fromString(String string) {
- String[] valueOrder = string.split(",");
- permutationOrder = new LinkedHashMap(valueOrder.length);
- for (int i = 0; i < valueOrder.length; i++) {
- Matcher matcher = Pattern.compile("(\\d+)(s?a?)").matcher(valueOrder[i]);
- matcher.matches();
+ permutationOrder = asMap(submittedString);
- try {
- Integer oldKey = Integer.valueOf(matcher.group(1));
- Integer newKey = new Integer(i);
- permutationOrder.put(oldKey, newKey);
- String group = matcher.group(2);
- for (int j = 0; j < group.length(); j++) {
- char c = group.charAt(j);
- if ('s' == c) {
- selectedItems.add(oldKey);
- } else if ('a' == c) {
- activeItem = oldKey;
- } else {
- break ;
- }
-
- }
- } catch (NumberFormatException e) {
- throw new FacesException(e.getLocalizedMessage(), e);
- }
+ if (getActiveItems().size() > 1) {
+ throw new FacesException(new IllegalArgumentException());
}
}
public String toString() {
- StringBuffer result = new StringBuffer();
- Iterator iterator = permutationOrder.entrySet().iterator();
- while (iterator.hasNext()) {
- Entry entry = (Entry) iterator.next();
+ return asString(permutationOrder);
+ }
- Object key = entry.getKey();
+ protected Object createNewKey(int i) {
+ return new Integer(i);
+ }
- result.append(key);
- if (selectedItems.contains(key)) {
- result.append('s');
- }
-
- if (key.equals(activeItem)) {
- result.append('a');
- }
-
- if (iterator.hasNext()) {
- result.append(',');
- }
+ protected Object createOldKey(String keyString) {
+ try {
+ return new Integer(keyString);
+ } catch (NumberFormatException e) {
+ throw new FacesException(e.getLocalizedMessage(), e);
}
- return result.toString();
}
+ protected Pattern getKeyStringPattern() {
+ return KEY_STRING_PATTERN;
+ }
+
}
public interface ItemState {
@@ -121,13 +88,13 @@
private final class SubmittedItemState implements ItemState {
public boolean isActive() {
- return submittedValueHolder.activeItem != null &&
- submittedValueHolder.activeItem.equals(getTranslatedRowKey());
+ Set activeItems = submittedValueHolder.getActiveItems();
+ return activeItems != null && activeItems.contains(getTranslatedRowKey());
}
public boolean isSelected() {
- return submittedValueHolder.selectedItems != null &&
- submittedValueHolder.selectedItems.contains(getTranslatedRowKey());
+ Set selection = submittedValueHolder.getSelection();
+ return selection != null && selection.contains(getTranslatedRowKey());
}
}
@@ -443,7 +410,7 @@
// "submitted" value, and emit a ValueChangeEvent if appropriate
if (isValid()) {
Set selectionSet = new HashSet();
- Set selectedItems = submittedValueHolder.selectedItems;
+ Set selectedItems = submittedValueHolder.getSelection();
for (Iterator iterator = selectedItems.iterator(); iterator
.hasNext();) {
setRowKey(context, iterator.next());
@@ -454,8 +421,9 @@
setSelection(selectionSet);
- if (submittedValueHolder.activeItem != null) {
- setRowKey(context, submittedValueHolder.activeItem);
+ Set activeItems = submittedValueHolder.getActiveItems();
+ if (!activeItems.isEmpty()) {
+ setRowKey(context, activeItems.iterator().next());
Object activeItem = getRowData();
setActiveItem(activeItem);
@@ -638,18 +606,6 @@
return ((TranslatedSequenceDataModel) getExtendedDataModel()).getTranslatedRowKey();
}
- public String getElementsOrder() {
- Object order = null;
-
- if (isTranslatedRenderingState()) {
- if (this.submittedValueHolder != null) {
- order = this.submittedValueHolder.permutationOrder;
- }
- }
-
- return ScriptUtils.toScript(order);
- }
-
public ItemState getItemState() {
if (submittedValueHolder != null) {
return new SubmittedItemState();
Modified:
branches/3.1.x/ui/orderingList/src/main/java/org/richfaces/renderkit/OrderingComponentRendererBase.java
===================================================================
---
branches/3.1.x/ui/orderingList/src/main/java/org/richfaces/renderkit/OrderingComponentRendererBase.java 2007-11-28
02:27:28 UTC (rev 4305)
+++
branches/3.1.x/ui/orderingList/src/main/java/org/richfaces/renderkit/OrderingComponentRendererBase.java 2007-11-28
03:24:01 UTC (rev 4306)
@@ -17,7 +17,6 @@
import org.ajax4jsf.renderkit.RendererUtils.HTML;
import org.richfaces.component.UIOrderingBaseComponent;
-import org.richfaces.component.UIOrderingList;
/**
* @author Nick Belaevski
Show replies by date