Package org.atomojo.app

Source Code of org.atomojo.app.AtomApplication

/*
* AtomApplication.java
*
* Created on March 28, 2007, 12:20 AM
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/

package org.atomojo.app;

import org.atomojo.app.auth.AuthService;
import org.atomojo.app.auth.UserGuard;
import org.atomojo.app.db.DB;
import org.restlet.Application;
import org.restlet.Context;
import org.restlet.Restlet;
import org.restlet.data.ChallengeScheme;
import org.restlet.data.Reference;
import org.restlet.routing.Filter;
import org.restlet.routing.Redirector;
import org.restlet.routing.Router;
import org.restlet.routing.Template;

/**
*
* @author alex
*/
public class AtomApplication extends Application{

   public static final Reference RESOURCE_BASE = new Reference("/R/");
   public static final Reference METADATA_BASE = new Reference("/M/");
   public static final Reference UPDATED_BASE = new Reference("/U/");
   public static final Reference TERM_BASE = new Reference("/T/");
   public static final Reference QUERY_BASE = new Reference("/Q/");

   public static final String AUTH_ATTR    = AtomApplication.class.getName()+".auth";
   public static final String DB_ATTR      = AtomApplication.class.getName()+".db";
   public static final String STORAGE_ATTR = AtomApplication.class.getName()+".storage";
   public static final String APP_ATTR = AtomApplication.class.getName()+".app";

   public static final String RESOURCE_BASE_ATTR = AtomApplication.class.getName()+"."+RESOURCE_BASE;
   public static final String METADATA_BASE_ATTR = AtomApplication.class.getName()+"."+METADATA_BASE;
   public static final String UPDATED_BASE_ATTR = AtomApplication.class.getName()+"."+UPDATED_BASE;
   public static final String TERM_BASE_ATTR = AtomApplication.class.getName()+"."+TERM_BASE;
   public static final String QUERY_BASE_ATTR = AtomApplication.class.getName()+"."+QUERY_BASE;

   Storage storage;
   DB atomDB;
   AuthService auth;
   boolean allowQueries;
   App app;
  
   /** Creates a new instance of AtomApplication */
   public AtomApplication(Context context,AuthService auth,DB atomDB,Storage storage,boolean allowQueries) {
      super(context.createChildContext());
      this.atomDB = atomDB;
      this.storage = storage;
      this.auth = auth;
      this.allowQueries = allowQueries;
      this.app = new App(context.getLogger(),atomDB,storage,getMetadataService());
      getContext().getAttributes().put(AUTH_ATTR,auth);
      getContext().getAttributes().put(DB_ATTR,atomDB);
      getContext().getAttributes().put(STORAGE_ATTR,storage);
      getContext().getAttributes().put(APP_ATTR,app);
      getContext().getAttributes().put(RESOURCE_BASE_ATTR,RESOURCE_BASE);
      getContext().getAttributes().put(METADATA_BASE_ATTR,METADATA_BASE);
      getContext().getAttributes().put(UPDATED_BASE_ATTR,UPDATED_BASE);
      getContext().getAttributes().put(TERM_BASE_ATTR,TERM_BASE);
      getContext().getAttributes().put(QUERY_BASE_ATTR,QUERY_BASE);
     getTunnelService().setEnabled(false);
   }

   public AuthService getAuthService() {
      return auth;
   }
  
   @Override
   public Restlet createRoot() {  
      Router router = new Router(getContext());
      router.setDefaultMatchingMode(Template.MODE_STARTS_WITH);
      Filter guard = new UserGuard(getContext(),ChallengeScheme.HTTP_BASIC,"Atom User",auth);
      guard.setNext(router);
     
      Redirector byId = new IdRedirector(getContext(),this,atomDB,RESOURCE_BASE);
      router.attach("/id/",byId);
     
      ProtocolByPathFinder byPath = new ProtocolByPathFinder(getContext(),this,RESOURCE_BASE,app,atomDB,storage);
      router.attach(RESOURCE_BASE.toString(),byPath);
      router.attach("/R",byPath);
     
      MetadataByPathFinder metadataByPath = new MetadataByPathFinder(getContext(),this,METADATA_BASE,RESOURCE_BASE,atomDB,storage);
      router.attach(METADATA_BASE.toString(),metadataByPath);
     
      router.attach(TERM_BASE.toString(),new TermFinder(getContext(),this,RESOURCE_BASE,atomDB,storage));
     
      if (allowQueries) {
         router.attach(QUERY_BASE.toString()+"adhoc/",AdHocQueryResource.class);
         router.attach(QUERY_BASE.toString(),new QueryFinder(getContext(),this,RESOURCE_BASE,atomDB,storage));
      }

      router.attach(UPDATED_BASE.toString(),UpdatedResource.class);
     
      router.attach("/",new Introspection(this,atomDB,storage,RESOURCE_BASE)).getTemplate().setMatchingMode(Template.MODE_EQUALS);
     
      return guard;
   }
  
}
TOP

Related Classes of org.atomojo.app.AtomApplication

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.