Package org.emrys.webosgi.core.resource

Source Code of org.emrys.webosgi.core.resource.WebResCore

package org.emrys.webosgi.core.resource;

import javax.servlet.http.HttpServletRequest;

import org.emrys.webosgi.core.resource.extension.DefaultResourceVisitController;
import org.emrys.webosgi.core.resource.extension.DefinesRoot;
import org.emrys.webosgi.core.resource.extension.IPublishedFileResolver;
import org.emrys.webosgi.core.resource.extension.ResFolder;
import org.emrys.webosgi.core.resource.extension.ResPublishSVCRegister;
import org.osgi.framework.Bundle;

/**
* The File Service Core of Framework to provide the entrance method for File
* Service.
*
* @author Leo Chang
* @version 2011-3-24
*/
public final class WebResCore {
  /**
   * the singleton instance.
   */
  private static WebResCore instance;
  /**
   * the extension point register.
   */
  private final ResPublishSVCRegister register;

  /**
   * @return the singleton instance.
   */
  public static WebResCore getInstance() {
    if (instance == null)
      instance = new WebResCore();
    return instance;
  }

  /**
   * Default hidden constructor.
   */
  protected WebResCore() {
    // initialize extension point register.
    register = ResPublishSVCRegister.getInstance();
    register.getVirtualRepositories(true);
  }

  /**
   * register Web Content of a web bundle to publish.
   *
   * @param bundle
   * @param wabCtxPath
   * @param rootPath
   * @return
   */
  public DefinesRoot registerWebContextRoot(Bundle bundle, String wabCtxPath,
      String rootPath) {
    DefinesRoot root = new DefinesRoot();
    ResFolder webContentFoler = new ResFolder();
    webContentFoler.setPath(wabCtxPath);
    webContentFoler.setAlias(wabCtxPath);
    IPublishedFileResolver resolver = new BundleWebContentFileResolver(
        bundle, rootPath);
    webContentFoler.setResolverID(resolver.getClass().getName());
    webContentFoler.setResolver(resolver);
    root.getResResolvers().put(resolver.getClass().getName(), resolver);
    root.getResources().add(webContentFoler);
    root.setSourceBundle(bundle);
    root.setName(wabCtxPath);
    root.setId(bundle.getSymbolicName());
    root.setVisitControler(new DefaultResourceVisitController() {
      @Override
      public boolean canRead(HttpServletRequest requestUrl) {
        return true;
      }

      @Override
      public boolean canModify(HttpServletRequest requestUrl) {
        return false;
      }

      @Override
      public boolean canBrowseFolder(HttpServletRequest req) {
        return false;
      }
    });
    register.getExtraRepositories().add(root);
    refreshRepository();
    return root;
  }

  /**
   * Unregister the web content of the web bundle.
   *
   * @param root
   */
  public void unregisterWebContextRoot(DefinesRoot root) {
    register.getExtraRepositories().remove(root);
    refreshRepository();
  }

  /**
   * Refresh extension point register of Published Resource.
   */
  public void refreshRepository() {
    register.getVirtualRepositories(true);
  }
}
TOP

Related Classes of org.emrys.webosgi.core.resource.WebResCore

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.