/*
* JBoss, Home of Professional Open Source
* Copyright 2010, Red Hat Inc., and individual contributors as indicated
* by the @authors tag. See the copyright.txt in the distribution for a
* full listing of individual contributors.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.jboss.as.integration.hornetq.management;
import java.util.Collections;
import java.util.Set;
import javax.management.Attribute;
import javax.management.MBeanServer;
import javax.management.ObjectName;
import org.jboss.dependency.plugins.AbstractScopeInfo;
import org.jboss.dependency.spi.Controller;
import org.jboss.dependency.spi.ControllerMode;
import org.jboss.dependency.spi.ControllerState;
import org.jboss.dependency.spi.DependencyInfo;
import org.jboss.dependency.spi.ErrorHandlingMode;
import org.jboss.dependency.spi.ScopeInfo;
import org.jboss.dependency.spi.dispatch.InvokeDispatchContext;
import org.jboss.kernel.spi.registry.KernelRegistryEntry;
import org.jboss.util.JBossObject;
import org.jboss.util.JBossStringBuilder;
import org.jboss.util.NotImplementedException;
/**
* A runtime dispatcher plugin, used to delegate requests from the ProfileService
* {@code RuntimeComponentDispatcher} to the MBeanServer. This is a needed when
* MBeans are directly installed using the MBeanServer, not using the mc-jmx-int.
*
* @author <a href="mailto:emuckenh@redhat.com">Emanuel Muckenhuber</a>
* @version $Revision$
*/
public class HornetQControlRuntimeDispatchPlugin extends JBossObject implements KernelRegistryEntry, InvokeDispatchContext
{
/** The object name. */
private final ObjectName objectName;
/** The mbean server. */
private final MBeanServer mbeanServer;
public HornetQControlRuntimeDispatchPlugin(ObjectName objectName, MBeanServer mbeanServer)
{
if(objectName == null)
{
throw new IllegalArgumentException("null object name");
}
if(mbeanServer == null)
{
throw new IllegalArgumentException("null mbean server");
}
this.objectName = objectName;
this.mbeanServer = mbeanServer;
}
public Object get(String name) throws Throwable
{
return mbeanServer.getAttribute(objectName, getAttributeName(name));
}
public void set(String name, Object value) throws Throwable
{
Attribute attribute = new Attribute(getAttributeName(name), value);
mbeanServer.setAttribute(objectName, attribute);
}
public Object invoke(String name, Object[] parameters, String[] signature) throws Throwable
{
return mbeanServer.invoke(objectName, name, parameters, signature);
}
public ClassLoader getClassLoader() throws Throwable
{
return mbeanServer.getClassLoader(objectName);
}
public Object getName()
{
return this.objectName;
}
public void setName(Object name)
{
//
}
protected static String getAttributeName(String name)
{
if (name == null || name.length() == 0)
throw new IllegalArgumentException("Illegal name: " + name);
char firstCharacter = name.charAt(0);
if (Character.isLowerCase(firstCharacter))
{
String attributeName = String.valueOf(Character.toUpperCase(firstCharacter));
if (name.length() > 1)
attributeName += name.substring(1);
return attributeName;
}
return name;
}
public Set<Object> getAliases()
{
return Collections.emptySet();
}
public Controller getController()
{
throw new NotImplementedException("getController");
}
public DependencyInfo getDependencyInfo()
{
return null;
}
public ScopeInfo getScopeInfo()
{
return new AbstractScopeInfo(getName(), null);
}
public Object getTarget()
{
return null;
}
public Throwable getError()
{
throw new NotImplementedException("getError");
}
public ControllerState getState()
{
// Specify this for the runtime state mapping
boolean registered = mbeanServer.isRegistered(objectName);
return registered ? ControllerState.INSTALLED : ControllerState.NOT_INSTALLED;
}
public void setState(ControllerState state)
{
throw new org.jboss.util.NotImplementedException("setState");
}
public ControllerState getRequiredState()
{
// Specify this for the runtime state mapping
return ControllerState.INSTALLED;
}
public void setRequiredState(ControllerState state)
{
throw new NotImplementedException("setRequiredState");
}
public ControllerMode getMode()
{
return ControllerMode.MANUAL;
}
public void setMode(ControllerMode mode)
{
throw new NotImplementedException("setMode");
}
public ErrorHandlingMode getErrorHandlingMode()
{
return ErrorHandlingMode.DISCARD;
}
public void install(ControllerState fromState, ControllerState toState) throws Throwable
{
throw new NotImplementedException("install");
}
public void setController(Controller controller)
{
throw new NotImplementedException("setController");
}
public void setError(Throwable error)
{
throw new NotImplementedException("NYI setError");
}
public void uninstall(ControllerState fromState, ControllerState toState)
{
throw new NotImplementedException("uninstall");
}
public void toString(JBossStringBuilder buffer)
{
buffer.append("target=").append(objectName);
}
public void toShortString(JBossStringBuilder buffer)
{
buffer.append(objectName);
}
}