/*
* JOSSO: Java Open Single Sign-On
*
* Copyright 2004-2009, Atricore, Inc.
*
* 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.josso.agent;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.josso.util.mbeans.JOSSOBaseMBean;
import javax.management.MBeanException;
import javax.management.Notification;
import javax.management.RuntimeOperationsException;
import java.util.List;
/**
* @author <a href="mailto:sgonzalez@josso.org">Sebastian Gonzalez Oyuela</a>
* @version $Id: SSOAgentMBean.java 598 2008-08-16 05:41:50Z gbrigand $
*/
public class SSOAgentMBean extends JOSSOBaseMBean {
/**
* String used as event type when notifying new partner app configurations using JMX.
*/
public static final String JOSSO_AGENT_EVENT_ADD_PARTNER_APP = "josso.agent.addPartnerApp";
/**
* String used as event type when notifying partner app configuration removal using JMX.
*/
public static final String JOSSO_AGENT_EVENT_REMOVE_PARTNER_APP = "josso.agent.removePartnerApp";
private static final Log logger = LogFactory.getLog(SSOAgentMBean.class);
private int _seq = 0;
public SSOAgentMBean() throws MBeanException, RuntimeOperationsException {
super();
}
public void addPartnerApp(String id, String vhost, String context, String[] ignoredWebResources) {
if (context == null) {
logger.warn("Tryint to add 'null' context as partner app.");
return;
}
if (ignoredWebResources == null) {
ignoredWebResources = new String[0];
}
SSOAgent a = getSSOAgent();
SSOAgentConfiguration cfg = a.getConfiguration();
cfg.addSSOPartnerApp(id, vhost, context, ignoredWebResources, null);
List papps = cfg.getSsoPartnerApps();
for (int i = 0; i < papps.size(); i++) {
SSOPartnerAppConfig papp = (SSOPartnerAppConfig) papps.get(i);
if (papp.getContext().equals(context)) {
// Send a JMX notification, use parent ObjectName instance (oname).
Notification n = new SSOAgentMBeanNotification(JOSSO_AGENT_EVENT_ADD_PARTNER_APP, oname, _seq++);
n.setUserData(papp);
try {
this.sendNotification(n);
return;
} catch (MBeanException e) {
logger.warn("Can't send JMX notificatin : \n" + e.getMessage(), e);
}
}
}
}
public void addPartnerApp(String id, String vhost, String context) {
this.addPartnerApp(id, vhost, context, new String[0]);
}
public void removePartnerApp(String context) {
if (context == null) {
logger.warn("Trying to remove 'null' context");
return;
}
SSOAgent a = getSSOAgent();
a.getConfiguration().removeSSOPartnerApp(context);
try {
// Send a JMX notification, use parent ObjectName instance (oname).
Notification n = new SSOAgentMBeanNotification(JOSSO_AGENT_EVENT_REMOVE_PARTNER_APP, oname, _seq++);
n.setUserData(context);
this.sendNotification(n);
} catch (MBeanException e) {
logger.warn("Can't send JMX notificatin : \n" + e.getMessage(), e);
}
}
public SSOPartnerAppConfig[] listPartnerApps() {
SSOAgent a = getSSOAgent();
return (SSOPartnerAppConfig[]) a.getConfiguration().getSsoPartnerApps().toArray(new SSOPartnerAppConfig[0]);
}
protected SSOAgent getSSOAgent() {
return (SSOAgent) this.resource;
}
public class SSOAgentMBeanNotification extends Notification {
public SSOAgentMBeanNotification(String type, Object source, long sequence) {
super(type, source, sequence);
}
}
}