RESTletServerApplication.java :  » REST » tabulasoftmed » org » softmed » rest » server » core » restlet » Java Open Source

Java Open Source » REST » tabulasoftmed 
tabulasoftmed » org » softmed » rest » server » core » restlet » RESTletServerApplication.java
package org.softmed.rest.server.core.restlet;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.restlet.Application;
import org.restlet.Context;
import org.restlet.Restlet;
import org.restlet.Router;

public class RESTletServerApplication extends Application {

  private Router rootRouter;
  private Router mainRouter;

  Map<String, RouterSet> sets = new HashMap<String, RouterSet>();

  List<String> deployedURIs = new ArrayList<String>();
  Map<Router, String> routerURIS = new HashMap<Router, String>();

  public void setupResource(String setName, String uri,
      RESTConfiguredRestlet cr) {

    if (deployedURIs.contains(uri)) {
      System.err.println("Trying to deploy duplicated URI : " + uri
          + " from app : " + cr.getTabulaApplication().getName()
          + " mod: " + cr.getModule().getName());
      return;

    }

    deployedURIs.add(uri);

    RouterSet set = getSet(setName);
    Router router = new Router(getContext().createChildContext());
    rootRouter.attach(uri, router);
    routerURIS.put(router, uri);
    cr.setContext(getContext().createChildContext());
    router.attach(cr);
    set.getResources().add(router);
  }

  public RouterSet getSet(String setName) {
    RouterSet set = sets.get(setName);
    if (set == null) {
      set = new RouterSet();
      sets.put(setName, set);
    }
    return set;
  }

  // public void setupAdminResource(String uri, RESTConfiguredRestlet cr) {
  // Router router = new Router(getContext());
  // rootRouter.attach(uri, router);
  // router.attach(cr);
  // adminResources.add(router);
  // }

  public void removeAllResources() {
    Set<String> names = sets.keySet();
    for (String set : names) {
      removeAllResources(set);
    }
    deployedURIs.clear();
    routerURIS.clear();
  }

  public void removeAllResources(String setName) {
    RouterSet set = sets.get(setName);

    if (set == null)
      return;

    for (Router router : set.getResources()) {
      rootRouter.detach(router);
      deployedURIs.remove(routerURIS.get(router));
      routerURIS.remove(router);
    }
    set.getResources().clear();

    rootRouter.detach(mainRouter);
    mainRouter = new Router(getContext().createChildContext());
    rootRouter.attach(mainRouter);
  }

  // public void setupResource(String uri, RESTConfiguredRestlet cr) {
  // Router router = new Router(getContext());
  // mainRouter.attach(uri, router);
  // router.attach(cr);
  // installedResources.add(router);
  // }

  // public void removeAllResources() throws Throwable {
  // rootRouter.detach(mainRouter);
  // mainRouter = new Router(getContext());
  // rootRouter.attach(mainRouter);
  // // rootRouter.stop();
  // // for (Router router : installedResources) {
  // // router.stop();
  // // rootRouter.detach(router);
  // // }
  // installedResources.clear();
  // }

  public RESTletServerApplication(Context parentContext) {
    super(parentContext.createChildContext());
    parentContext.getAttributes().put("app", this);
    mainRouter = new Router(parentContext.createChildContext());
    rootRouter = new Router(parentContext.createChildContext());
    rootRouter.attach(mainRouter);
  }

  /**
   * Creates a root Restlet that will receive all incoming calls.
   */
  @Override
  public synchronized Restlet createRoot() {
    mainRouter.setContext(getContext().createChildContext());
    rootRouter.setContext(getContext().createChildContext());
    return rootRouter;
  }

  // public Router getRootRouter() {
  // return rootRouter;
  // }

}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.