blob: 3377ad102df2cc35b7cac10b52999f0e9c0afa0b [file] [log] [blame]
/*
* 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 org.apache.felix.jmood.core.ServiceNotAvailableException;
import org.osgi.framework.BundleContext;
import org.osgi.framework.InvalidSyntaxException;
import org.osgi.service.cm.ConfigurationAdmin;
import org.osgi.service.log.LogReaderService;
import org.osgi.service.log.LogService;
import org.osgi.service.packageadmin.PackageAdmin;
import org.osgi.service.permissionadmin.PermissionAdmin;
import org.osgi.service.startlevel.StartLevel;
import org.osgi.service.useradmin.UserAdmin;
import org.osgi.util.tracker.ServiceTracker;
/**
*
*
*/public class AgentContext {
private BundleContext context;
private ServiceTracker logTracker;
private ServiceTracker logReaderTracker;
private ServiceTracker startLevelTracker;
private ServiceTracker packageAdminTracker;
private ServiceTracker permissionAdminTracker;
private ServiceTracker userAdminTracker;
private ServiceTracker configAdminTracker;
private int loglevel;
public static final int DEBUG=0;
public static final int INFO=1;
public static final int WARNING=2;
public static final int ERROR=3;
public AgentContext(BundleContext context) throws Exception{
super();
this.context=context;
this.setTrackers();
}
///////////////////////////////////////////////////////////////
//////////////////LOGGING/////////////////////////////////////
///////////////////////////////////////////////////////////////
public void debug(String s){
if(this.loglevel==DEBUG) System.out.println("DEBUG: JMOOD. "+s);
}
public void info(String s){
if(this.loglevel<=INFO) System.out.println("INFO: JMOOD. "+s);
}
public void warning (String s){
if(this.loglevel<=WARNING) System.out.println("WARNING: JMOOD. "+s);
}
public void error(String s){
if(this.loglevel<=ERROR) System.out.println("ERROR: JMOOD. "+s);
}
public void error(String s, Exception e){
if(this.loglevel<=ERROR) {
System.out.println("ERROR: JMOOD. "+s);
e.printStackTrace();
}
}
public int getLoglevel() {
return loglevel;
}
public void setLoglevel(int level) {
this.loglevel=level;
}
//////////////////////////////////////////////////////////////
///////////////////CONTEXT AND SERVICES//////////////////////
public BundleContext getBundleContext() {
return context;
}
public LogService getLogservice() {
int count = logTracker.getTrackingCount();
switch (count) {
case 0 :
return null;
//FUTURE WORK when there is more than one log service available, select "the best"
case 1 :
default :
return (LogService) logTracker.getService();
}
}
public StartLevel getStartLevel() throws ServiceNotAvailableException {
int count = startLevelTracker.getTrackingCount();
switch (count) {
case 0 :
throw new ServiceNotAvailableException("No start level service available");
case 1 :
default :
return (StartLevel) startLevelTracker.getService();
}
}
public PackageAdmin getPackageadmin() throws ServiceNotAvailableException{
int count = packageAdminTracker.getTrackingCount();
switch (count) {
case 0 :
throw new ServiceNotAvailableException("No package admin available");
case 1 :
default :
return (PackageAdmin) packageAdminTracker.getService();
}
}
public PermissionAdmin getPermissionadmin() {
int count = permissionAdminTracker.getTrackingCount();
switch (count) {
case 0 :
return null;
case 1 :
default :
return (PermissionAdmin) permissionAdminTracker.getService();
}
}
public UserAdmin getUserAdmin() {
int count = userAdminTracker.getTrackingCount();
switch (count) {
case 0 :
return null;
case 1 :
default :
return (UserAdmin) userAdminTracker.getService();
}
}
public ConfigurationAdmin getConfigurationAdmin() {
int count = configAdminTracker.getTrackingCount();
switch (count) {
case 0 :
return null;
case 1 :
default :
return (ConfigurationAdmin) configAdminTracker.getService();
}
}
//////////////////////////////////////////////////////////////////////
//////////////////PRIVATE////////////////////////////////////////////
private void setTrackers() {
try {
logTracker =
new ServiceTracker(
context,
context.createFilter(
"(objectClass=" + LogService.class.getName() + ")"),
null);
logReaderTracker =
new ServiceTracker(
context,
context.createFilter(
"(objectClass=" + LogReaderService.class.getName() + ")"),
null);
startLevelTracker =
new ServiceTracker(
context,
context.createFilter(
"(objectClass=" + StartLevel.class.getName() + ")"),
null);
packageAdminTracker =
new ServiceTracker(
context,
context.createFilter(
"(objectClass=" + PackageAdmin.class.getName() + ")"),
null);
permissionAdminTracker =
new ServiceTracker(
context,
context.createFilter(
"(objectClass=" + PermissionAdmin.class.getName() + ")"),
null);
userAdminTracker=new ServiceTracker(context, context.createFilter("(objectClass=" + UserAdmin.class.getName() + ")"), null);
configAdminTracker=new ServiceTracker(context, context.createFilter("(objectClass=" + ConfigurationAdmin.class.getName() + ")"), null);
} catch (InvalidSyntaxException e) {
warning("INVALID FILTER ");
}
logTracker.open();
logReaderTracker.open();
startLevelTracker.open();
packageAdminTracker.open();
permissionAdminTracker.open();
userAdminTracker.open();
configAdminTracker.open();
}
void closeTrackers() {
logTracker.close();
logReaderTracker.close();
startLevelTracker.close();
packageAdminTracker.close();
permissionAdminTracker.close();
userAdminTracker.close();
configAdminTracker.close();
}
}