/* | |
* 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(); | |
} | |
} |