1 /** 2 * Copyright 2010 The Kuali Foundation Licensed under the 3 * Educational Community License, Version 2.0 (the "License"); you may 4 * not use this file except in compliance with the License. You may 5 * obtain a copy of the License at 6 * 7 * http://www.osedu.org/licenses/ECL-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, 10 * software distributed under the License is distributed on an "AS IS" 11 * BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express 12 * or implied. See the License for the specific language governing 13 * permissions and limitations under the License. 14 */ 15 16 package org.kuali.student.common.ui.client.mvc; 17 18 import java.util.ArrayList; 19 import java.util.Collection; 20 import java.util.Collections; 21 import java.util.HashMap; 22 import java.util.Map; 23 24 import org.kuali.student.common.ui.client.mvc.ModelChangeEvent.Action; 25 import org.kuali.student.r1.common.dto.Idable; 26 27 import com.google.gwt.event.shared.HandlerManager; 28 import com.google.gwt.event.shared.HandlerRegistration; 29 30 /** 31 * Model object used as a container for the model state. Sources ModelChangeEvents used for tracking the model state. 32 * 33 * @author Kuali Student Team 34 * @param <T> 35 * the type of model object to be contained within the model 36 */ 37 @Deprecated 38 public class CollectionModel<T> implements Model { 39 private Map<String, T> data = new HashMap<String, T>(); 40 private HandlerManager handlers = new HandlerManager(this); 41 42 private T value = null; 43 /** 44 * Adds an object to the model, and fires a ModelChangeEvent 45 * @param object 46 */ 47 public void add(T object) { 48 if (object instanceof Idable){ 49 data.put(((Idable)object).getId(), object); 50 handlers.fireEvent(new CollectionModelChangeEvent<T>(Action.ADD, this, object)); 51 } 52 } 53 54 /** 55 * Removes the specified model object from the model 56 * 57 * @param object 58 * @return the object that was removed, or null if not found 59 * @deprecated should use new Data structures instead, accessed via getValue, setValue 60 */ 61 public T remove(T object) { 62 if (object instanceof Idable){ 63 T result = data.remove(((Idable)object).getId()); 64 if (result != null) { 65 handlers.fireEvent(new CollectionModelChangeEvent<T>(Action.REMOVE, this, result)); 66 } 67 return result; 68 } else { 69 return null; 70 } 71 } 72 73 /** 74 * Adds a ModelChangeHandler that will be invoked for ModelChangeEvents 75 * 76 * @param handler 77 * the handler to add 78 * @return HandlerRegistration that can be used to unregister the handler later 79 */ 80 @Override 81 public HandlerRegistration addModelChangeHandler(ModelChangeHandler handler) { 82 return handlers.addHandler(ModelChangeEvent.TYPE, handler); 83 } 84 85 /** 86 * Returns an unsorted, umodifiable collection of the values contained within the model. 87 * 88 * @return an unsorted, umodifiable collection of the values contained within the model. 89 */ 90 public Collection<T> getValues() { 91 return Collections.unmodifiableList(new ArrayList<T>(data.values())); 92 } 93 94 95 /** 96 * Returns the Model's value 97 * Going forward, the Model class should primarily be used with a single DataModel instance for use with the configurable UI framework. 98 * @return the Model's value 99 */ 100 public T getValue() { 101 return value; 102 } 103 104 /** 105 * Sets the Model's value 106 * Going forward, the Model class should primarily be used with a single DataModel instance for use with the configurable UI framework. 107 * @param value the new value 108 */ 109 public void setValue(T value) { 110 this.value = value; 111 handlers.fireEvent(new CollectionModelChangeEvent<T>(Action.RELOAD, this, value)); 112 } 113 114 115 116 }