package org.ovirt.engine.core.bll.adbroker;
import org.ovirt.engine.core.compat.LogCompat;
import org.ovirt.engine.core.compat.LogFactoryCompat;
import org.ovirt.engine.core.utils.ReflectionUtils;
public abstract class LdapBrokerBase implements LdapBroker {
private static final String CommandsContainerAssemblyName = LdapBrokerBase.class.getPackage().getName();
private static final String CommandPrefix = "Command";
private static LogCompat log = LogFactoryCompat.getLog(LdapBrokerBase.class);
protected abstract String getBrokerType();
public LdapReturnValueBase RunAdAction(AdActionType actionType, LdapBrokerBaseParameters parameters) {
log.debug("RunAdAction Entry, actionType=" + actionType.toString());
BrokerCommandBase command = CreateCommand(actionType, parameters);
return command.Execute();
}
private BrokerCommandBase CreateCommand(AdActionType action, LdapBrokerBaseParameters parameters) {
try {
java.lang.Class type = java.lang.Class.forName(GetCommandTypeName(action));
java.lang.reflect.Constructor info = ReflectionUtils.findConstructor(type, parameters.getClass());
Object tempVar = info.newInstance(parameters);
return (BrokerCommandBase) ((tempVar instanceof BrokerCommandBase) ? tempVar : null);
}
catch (java.lang.Exception e) {
log.errorFormat("LdapBrokerCommandBase: Failed to get type information using reflection for Action: {0}",
action);
return null;
}
}
private String GetCommandTypeName(AdActionType action) {
return String
.format("%1$s.%2$s%3$s%4$s", CommandsContainerAssemblyName, getBrokerType(), action, CommandPrefix);
}
}