Package org.apache.felix.jmood

Source Code of org.apache.felix.jmood.FelixLauncher

/*
*   Copyright 2005 The Apache Software Foundation
*
*   Licensed under the Apache License, Version 2.0 (the "License");
*   you may not use this file except in compliance with the License.
*   You may obtain a copy of the License at
*
*       http://www.apache.org/licenses/LICENSE-2.0
*
*   Unless required by applicable law or agreed to in writing, software
*   distributed under the License is distributed on an "AS IS" BASIS,
*   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*   See the License for the specific language governing permissions and
*   limitations under the License.
*
*/
package org.apache.felix.jmood;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.felix.framework.Felix;
import org.osgi.framework.Bundle;
import org.osgi.framework.BundleException;
import org.osgi.framework.Constants;
public class FelixLauncher {

    private Map props;
  private Felix framework;
  private List bundles;
  private List packages;
  private File cacheDir;
  public FelixLauncher() {
        super();
      cacheDir = new File("./cache");
      System.out.println(cacheDir.getAbsolutePath());
    clearCache(cacheDir);
      cacheDir.mkdir();
       
    bundles=new ArrayList();
    packages=new ArrayList();

        props = new HashMap();
        props.put("felix.cache.profiledir", cacheDir.getAbsolutePath());

    }
  public void addBundle(String url){
    if (!bundles.contains(url))
    bundles.add(url);
  }
  public void addPackage(String packageName){
    if(!packages.contains(packageName))
    packages.add(packageName);
  }
  public void start() throws BundleException {
    StringBuffer autostart=new StringBuffer();
    for (int i=0; i<bundles.size(); i++){
      String bundle=(String)bundles.get(i);
      autostart.append(bundle).append(" ");
    }
    props.put("felix.auto.start.1", autostart.toString());
    StringBuffer spkg=new StringBuffer((String)packages.get(0));
    packages.remove(0);
    for (int i=0; i<packages.size(); i++){
      String pkg=(String)packages.get(i);
      spkg.append(", "+pkg);
    }
   
   
        props.put(Constants.FRAMEWORK_SYSTEMPACKAGES, spkg.toString());

        framework = new Felix(props, null);
        framework.start();
  }
  public void blockingStart() throws Exception{
    this.start();
        int to=0;
        while(framework.getState()!=Bundle.ACTIVE) {
            Thread.sleep(10);
            to++;
            if(to>100) throw new Exception("timeout");
        }

  }
  public void shutdown(){
    framework.stopAndWait();
    framework = null;
    clearCache(cacheDir);
  }

  private void clearCache(File cacheDir) {
    if(!isCache(cacheDir)){
      System.out.println("not valid cache");
      return;
    }
    File[] files=cacheDir.listFiles();
    for(int i=0; i<files.length; i++){
      recursiveDelete(files[i]);
    }
  }
  private void recursiveDelete(File file){
     if(file.isDirectory()){
      File[] files=file.listFiles();
      for(int i=0; i<files.length; i++){
        File f=files[i]
        recursiveDelete(f);
       }
     }
     file.delete();
  }
  private boolean isCache(File cacheDir){
    if(!cacheDir.exists()||!cacheDir.isDirectory()) return false;
    else{
      String[] names=cacheDir.list();
      for(int i=0;i<names.length;i++){
        String name=names[i];
        if(!name.startsWith("bundle")) return false;
      }
      return true;
    }
  }
  public String getFelixBundleUrl(String artifactId) throws IOException{
    return getM2Url("org.apache.felix", artifactId, "0.8.0-SNAPSHOT");
  }
  public String getM2Url(String groupId, String artifactId, String version)throws IOException{
    File userHome=new File(System.getProperty("user.home"));
      String M2_REPO="file:/"+userHome.getCanonicalPath()+"/.m2/repository";
      String PROJECT_HOME=M2_REPO+"/"+groupId.replace('.', '/');
      String VERSION="0.8.0-SNAPSHOT";
      String u=PROJECT_HOME+"/"+artifactId+"/"+VERSION+"/"+artifactId+"-"+VERSION+".jar";
      return "\""+u+"\"";

  }

    /**
     * @param args
     *
     */
    public static void main(String[] args) throws Exception{
      FelixLauncher launcher=new FelixLauncher();
      String jmood=launcher.getFelixBundleUrl("org.apache.felix.jmood");
      String mishell=launcher.getFelixBundleUrl("org.apache.felix.mishell");
      String jruby=launcher.getM2Url("org.jruby", "jruby-bundle", "0.8.0-SNAPSHOT");
      launcher.addBundle(jruby);
        launcher.addBundle(jmood);
      launcher.addBundle(mishell);
        launcher.addPackage("org.osgi.framework");
        launcher.addPackage("org.osgi.util.tracker");
        launcher.addPackage("org.osgi.service.log");
        launcher.addPackage("org.osgi.service.packageadmin");
        launcher.addPackage("org.osgi.service.startlevel");
        launcher.addPackage("org.osgi.service.permissionadmin");
        launcher.addPackage("org.osgi.service.useradmin");
        launcher.addPackage("org.osgi.service.cm");
        launcher.addPackage("javax.management");
        launcher.addPackage("javax.management.remote");
        launcher.addPackage("javax.management.openmbean")
        launcher.addPackage("javax.script");
      launcher.start();
    }
  public Felix getFramework() {
    return framework;
  }
}
TOP

Related Classes of org.apache.felix.jmood.FelixLauncher

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.