001: /*
002: * Copyright 2006-2007 Luca Garulli (luca.garulli@assetdata.it)
003: *
004: * Licensed under the Apache License, Version 2.0 (the "License");
005: * you may not use this file except in compliance with the License.
006: * You may obtain a copy of the License at
007: *
008: * http://www.apache.org/licenses/LICENSE-2.0
009: *
010: * Unless required by applicable law or agreed to in writing, software
011: * distributed under the License is distributed on an "AS IS" BASIS,
012: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013: * See the License for the specific language governing permissions and
014: * limitations under the License.
015: */
016: package org.romaframework.core.domain.wrapper;
017:
018: import java.util.ArrayList;
019: import java.util.Collection;
020: import java.util.LinkedList;
021: import java.util.List;
022:
023: import org.romaframework.aspect.core.annotation.AnnotationConstants;
024: import org.romaframework.aspect.core.annotation.CoreClass;
025: import org.romaframework.aspect.core.annotation.CoreField;
026: import org.romaframework.aspect.view.ViewConstants;
027: import org.romaframework.aspect.view.annotation.ViewAction;
028: import org.romaframework.aspect.view.annotation.ViewField;
029: import org.romaframework.core.config.Refreshable;
030: import org.romaframework.core.flow.ObjectContext;
031:
032: @CoreClass(orderActions="up down")
033: public class OrderMemberWrapper<T> extends TableEditWrapper implements
034: Refreshable {
035: @ViewField(visible=AnnotationConstants.FALSE)
036: private OrderMemberWrapperElement selected;
037: @ViewField(render=ViewConstants.RENDER_TABLE,selectionField="selected",enabled=AnnotationConstants.FALSE,layout="form:fields")
038: protected List<OrderMemberWrapperElement> toOrder = new ArrayList<OrderMemberWrapperElement>();
039:
040: public OrderMemberWrapper(Collection<T> iToOrder) {
041: if (iToOrder != null) {
042: for (T element : iToOrder) {
043: this .toOrder
044: .add(new OrderMemberWrapperElement(element));
045: }
046: }
047: }
048:
049: @Override
050: public Object getFinalValue() throws Exception {
051: List<T> result = new LinkedList<T>();
052: for (OrderMemberWrapperElement element : toOrder) {
053: result.add((T) element.getInitialObject());
054: }
055: return result;
056: }
057:
058: @ViewField(layout="form:actions")
059: public void up() {
060: if (selected != null) {
061: int index = toOrder.indexOf(selected);
062: if (index != 0) {
063: toOrder.add(index - 1, selected);
064: toOrder.remove(index + 1);
065: this .refresh();
066: }
067: }
068: }
069:
070: @ViewField(layout="form:actions")
071: public void down() {
072: if (selected != null) {
073: int index = toOrder.indexOf(selected);
074: if (index != toOrder.size() - 1) {
075: OrderMemberWrapperElement toMove = toOrder
076: .get(index + 1);
077: toOrder.set(index + 1, selected);
078: toOrder.set(index, toMove);
079: this .refresh();
080: }
081: }
082: }
083:
084: public Object getSelected() {
085: return selected;
086: }
087:
088: public void setSelected(OrderMemberWrapperElement selected) {
089: this .selected = selected;
090: }
091:
092: @ViewAction(visible=AnnotationConstants.FALSE)
093: public void refresh() {
094: ObjectContext.getInstance().refresh(this , "toOrder");
095: }
096:
097: @CoreField(embeddedType=Object.class)
098: public List<OrderMemberWrapperElement> getToOrder() {
099: return toOrder;
100: }
101: }
|