package com.asayama.gwt.angular.route.client; import com.asayama.gwt.angular.client.Controller; import com.asayama.gwt.angular.client.Factory; import com.asayama.gwt.angular.client.Injector; import com.asayama.gwt.angular.client.Provider; import com.asayama.gwt.angular.client.Service; import com.asayama.gwt.jsni.client.JSON; import com.asayama.gwt.resources.client.HtmlResource; import com.google.gwt.core.client.JavaScriptObject; public class RouteProvider implements Provider<Service> { @Injector.Inject private NGRouteProvider ngo; @Override public Factory<Service> getFactory() { // TODO Auto-generated method stub return null; } public <C extends Controller> RouteProvider when(HtmlResource partial) { String route = "/" + partial.getName(); return when(route, partial); } public <C extends Controller> RouteProvider when(HtmlResource partial, Class<C> controllerClass) { String route = "/" + partial.getName(); return when(route, partial, controllerClass); } public <C extends Controller> RouteProvider when(String route, HtmlResource partial) { return when(route, partial, null); } public <C extends Controller> RouteProvider when(String route, HtmlResource partial, Class<C> controllerClass) { String templateUrl = partial.getSafeUri().asString(); return when(route, templateUrl, controllerClass); } public <C extends Controller> RouteProvider when(String route, String templateUrl) { return when(route, templateUrl, null); } public <C extends Controller> RouteProvider when(String route, String templateUrl, Class<C> controllerClass) { JSON json = JSON.create(); json.put("templateUrl", templateUrl); if (controllerClass != null) { json.put("controller", controllerClass.getName()); } ngo.when(route, json); return this; } public RouteProvider redirect(String route, String redirectTo) { JSON redirect = JSON.create(); redirect.put("redirectTo", redirectTo); ngo.when(route, redirect); return this; } public RouteProvider otherwise(HtmlResource partial) { String redirectTo = partial.getName(); return otherwise(redirectTo); } public RouteProvider otherwise(String redirectTo) { JSON redirect = JSON.create(); redirect.put("redirectTo", redirectTo); ngo.otherwise(redirect); return this; } } @Injector.Bind("$routeProvider") class NGRouteProvider extends JavaScriptObject { protected NGRouteProvider() { } final native void when(String route, JavaScriptObject action) /*-{ this.when(route, action); }-*/; final native void otherwise(JavaScriptObject action) /*-{ this.otherwise(action); }-*/; }