package org.atricore.idbus.capabilities.sso.management.internal;
import org.atricore.idbus.capabilities.sso.management.ProviderMBean;
import org.atricore.idbus.capabilities.sso.management.codec.JmxProviderState;
import org.atricore.idbus.capabilities.sso.management.codec.JmxProviderStateEntry;
import org.atricore.idbus.kernel.main.mediation.provider.FederatedLocalProvider;
import org.atricore.idbus.kernel.main.mediation.state.LocalState;
import org.atricore.idbus.kernel.main.mediation.state.ProviderStateContext;
import org.atricore.idbus.kernel.main.util.UUIDGenerator;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import javax.management.openmbean.TabularData;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
/**
* @author <a href="mailto:sgonzalez@atricore.org">Sebastian Gonzalez Oyuela</a>
* @version $Id$
*/
public abstract class AbstractProviderMBean implements ProviderMBean, ApplicationContextAware {
protected ApplicationContext applicationContext;
protected UUIDGenerator uuidGenerator = new UUIDGenerator();
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
this.applicationContext = applicationContext;
}
public TabularData listStatesAsTable() {
ProviderStateContext ctx = new ProviderStateContext(getProvider(), applicationContext.getClassLoader());
Collection<LocalState> states = ctx.retrievAll();
List<JmxProviderState> jmxStates = new ArrayList<JmxProviderState>(states.size());
for (LocalState localState : states) {
jmxStates.add(new JmxProviderState(localState));
}
return JmxProviderState.tableFrom(jmxStates);
}
public TabularData listStateEntriesAsTable(String stateId) {
ProviderStateContext ctx = new ProviderStateContext(getProvider(), applicationContext.getClassLoader());
LocalState state = ctx.retrieve(stateId);
List<JmxProviderStateEntry> entries = new ArrayList<JmxProviderStateEntry >();
for (String key : state.getKeys()) {
Object value = state.getValue(key);
JmxProviderStateEntry entry = new JmxProviderStateEntry (key, value);
entries.add(entry);
}
return JmxProviderStateEntry.tableFrom(entries);
}
protected abstract FederatedLocalProvider getProvider() ;
}