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.widgets;
017
018 import org.kuali.student.common.ui.client.mvc.Callback;
019 import org.kuali.student.common.ui.client.mvc.Controller;
020
021 import com.google.gwt.event.dom.client.ClickEvent;
022 import com.google.gwt.event.dom.client.ClickHandler;
023 import com.google.gwt.event.dom.client.KeyDownEvent;
024 import com.google.gwt.event.dom.client.KeyDownHandler;
025 import com.google.gwt.user.client.Window;
026
027 public abstract class NavigationHandler implements ClickHandler, KeyDownHandler {
028 private final String url;
029 private final Controller controller;
030 private final String navigationKey;
031 private final Enum<?> navEnum;
032
033 public NavigationHandler(String url) {
034 this.url = url;
035 this.controller = null;
036 this.navigationKey = null;
037 this.navEnum = null;
038 }
039
040 public NavigationHandler(Controller controller, String navigationKey) {
041 this.url = null;
042 this.controller = controller;
043 this.navigationKey = navigationKey;
044 this.navEnum = null;
045 }
046
047 public NavigationHandler(Controller controller, Enum<?> navigationEnum) {
048 this.url = null;
049 this.controller = controller;
050 this.navigationKey = null;
051 this.navEnum = navigationEnum;
052 }
053
054 public void onClick(ClickEvent event) {
055 doNavigate();
056 }
057
058 public void onKeyDown(KeyDownEvent event) {
059 doNavigate();
060 }
061
062 protected void doNavigate() {
063 beforeNavigate(new Callback<Boolean>() {
064
065 @Override
066 public void exec(Boolean result) {
067 if (result) {
068 if (url != null) {
069 Window.Location.assign(url);
070 }
071 }
072 }
073
074 });
075 }
076
077
078
079 public String getUrl() {
080 return url;
081 }
082
083 public Controller getController() {
084 return controller;
085 }
086
087 public String getNavigationKey() {
088 return navigationKey;
089 }
090
091 public Enum<?> getNavEnum() {
092 return navEnum;
093 }
094
095 public abstract void beforeNavigate(Callback<Boolean> callback);
096 }