001 /** 002 * Copyright 2010 The Kuali Foundation Licensed under the 003 * Educational Community License, Version 2.0 (the "License"); you may 004 * not use this file except in compliance with the License. You may 005 * obtain a copy of the License at 006 * 007 * http://www.osedu.org/licenses/ECL-2.0 008 * 009 * Unless required by applicable law or agreed to in writing, 010 * software distributed under the License is distributed on an "AS IS" 011 * BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express 012 * or implied. See the License for the specific language governing 013 * permissions and limitations under the License. 014 */ 015 016 package org.kuali.student.common.ui.client.mvc; 017 018 import com.google.gwt.event.shared.GwtEvent; 019 020 /** 021 * Event that is fired when the model is changed. 022 * 023 * @author Kuali Student Team 024 * @param <T> 025 */ 026 public class ModelChangeEvent extends GwtEvent<ModelChangeHandler> { 027 public static final Type<ModelChangeHandler> TYPE = new Type<ModelChangeHandler>(); 028 029 /** 030 * The actions that can be performed on a model. 031 * 032 * @author Kuali Student Team 033 */ 034 public enum Action { 035 ADD, REMOVE, UPDATE, RELOAD 036 } 037 038 private final Action action; 039 private final Model source; 040 041 /** 042 * Constructs a new ModelChangeEvent with an action and a value 043 * 044 * @param action 045 * @param value 046 */ 047 public ModelChangeEvent(Action action, Model source) { 048 this.action = action; 049 this.source = source; 050 } 051 052 @Override 053 protected void dispatch(ModelChangeHandler handler) { 054 handler.onModelChange(this); 055 } 056 057 @Override 058 @SuppressWarnings("unchecked") 059 public Type<ModelChangeHandler> getAssociatedType() { 060 return (Type) TYPE; 061 } 062 063 /** 064 * Returns the action (ADD/UPDATE/REMOVE) associated with the event 065 * 066 * @return 067 */ 068 public Action getAction() { 069 return this.action; 070 } 071 072 /** 073 * Returns the model from which this event originated 074 * 075 * @return the model from which this event originated 076 */ 077 public Model getSource() { 078 return this.source; 079 } 080 }