/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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.jena.sparql.mgt;
import javax.management.* ;
import org.apache.jena.sparql.util.Context ;
import org.apache.jena.sparql.util.Symbol ;
/** MBean for a context object (which can change) */
public class ContextMBean implements DynamicMBean
{
private final Context context ;
public ContextMBean(Context context)
{
this.context = context ;
}
private Object getAsString(String name) { return context.getAsString(Symbol.create(name)) ; }
@Override
public Object getAttribute(String attribute) throws AttributeNotFoundException, MBeanException, ReflectionException
{
return getAsString(attribute) ;
}
@Override
public AttributeList getAttributes(String[] attributes)
{
AttributeList x = new AttributeList() ;
for ( String k : attributes )
{
Attribute a = new Attribute(k, getAsString(k)) ;
x.add(a) ;
}
return x ;
}
@Override
public MBeanInfo getMBeanInfo()
{
/*
* MBeanAttributeInfo(String name, String type, String description, boolean isReadable, boolean isWritable, boolean isIs)
*/
MBeanAttributeInfo[] attrInfo = new MBeanAttributeInfo[context.size()] ;
int idx = 0 ;
for ( Symbol sk : context.keys() )
{
// Not all are settable - only is string, boolean, integer.
Object obj = context.get(sk) ;
boolean settable = false ;
if ( obj instanceof String ) settable = true ;
if ( obj instanceof Boolean ) settable = true ;
if ( obj instanceof Integer ) settable = true ;
MBeanAttributeInfo attr = new MBeanAttributeInfo(sk.getSymbol(), "java.lang.String", sk.getSymbol(),
true, settable, false) ;
attrInfo[idx++] = attr ;
}
/*
* String className,
String description,
MBeanAttributeInfo[] attributes,
MBeanConstructorInfo[] constructors,
MBeanOperationInfo[] operations,
MBeanNotificationInfo[] notifications)
throws IllegalArgumentException
*/
MBeanInfo info = new MBeanInfo(this.getClass().getName(), "ARQ global context",
attrInfo,
null, // Constructors
null, // Operations
null // Notifications
) ;
return info ;
}
@Override
public Object invoke(String actionName, Object[] params, String[] signature) throws MBeanException,
ReflectionException
{
return null ;
}
@Override
public void setAttribute(Attribute attribute) throws AttributeNotFoundException, InvalidAttributeValueException,
MBeanException, ReflectionException
{
context.set(Symbol.create(attribute.getName()), attribute.getValue()) ;
}
@Override
public AttributeList setAttributes(AttributeList attributes)
{
AttributeList results = new AttributeList() ;
for ( Object obj : attributes )
{
Attribute a = (Attribute)obj ;
Object value = a.getValue() ;
Object oldValue = getAsString(a.getName()) ;
// Check type of old value.
//if ( oldValue instanceof Boolean )
try { setAttribute(a) ; } catch (Exception ex) {}
results.add(new Attribute( a.getName(), getAsString(a.getName()) )) ;
}
return results ;
}
}