/*
* Created on Jul 2, 2005
*
* Copyright 2005 CafeSip.org
*
* Licensed 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.cafesip.jiplet.console.server;
import java.io.File;
import java.net.URL;
import javax.management.MBeanServerConnection;
import javax.management.ObjectName;
import org.cafesip.jiplet.jmxbeans.RealmElement;
import org.cafesip.jiplet.utils.FileUtils;
/**
* @author Amit Chatterjee
*
*/
public class RealmMgmt
{
/**
* A constructor for this class.
*
*
*/
public RealmMgmt()
{
}
public String[] listRealms() throws Exception
{
AgentConnectionPool pool = Model.getJmxConnectionPool();
MBeanServerConnection server = null;
try
{
server = pool.getConnection();
if (server == null)
{
String err = "Error obtaining JMX connection. Is the server running?";
throw new Exception(err);
}
return (String[]) server.invoke(new ObjectName(
"org.cafesip.jiplet:type=JipletContainer"), "listRealms",
null, null);
}
finally
{
if (server != null)
{
pool.returnConnection(server);
}
}
}
public org.cafesip.jiplet.console.client.rpc.RealmElement[] listRealmsProperties()
throws Exception
{
String[] realms = listRealms();
org.cafesip.jiplet.console.client.rpc.RealmElement[] elements = new org.cafesip.jiplet.console.client.rpc.RealmElement[realms.length];
for (int i = 0; i < realms.length; i++)
{
elements[i] = viewRealmProperty(realms[i]);
}
return elements;
}
public void createUser(String realm, String user, String password,
String[] roles) throws Exception
{
AgentConnectionPool pool = Model.getJmxConnectionPool();
MBeanServerConnection server = null;
try
{
server = pool.getConnection();
if (server == null)
{
String err = "Error obtaining JMX connection. Is the server running?";
throw new Exception(err);
}
Object[] params = { realm, user, password, roles };
String[] sig = { realm.getClass().getName(),
user.getClass().getName(), password.getClass().getName(),
roles.getClass().getName() };
String errorMessage = (String) server.invoke(new ObjectName(
"org.cafesip.jiplet:type=JipletContainer"),
"createRealmUser", params, sig);
if (errorMessage.length() > 0)
{
throw new Exception(errorMessage);
}
}
finally
{
if (server != null)
{
pool.returnConnection(server);
}
}
}
public void modifyUser(String realm, String user, String password,
String[] roles) throws Exception
{
AgentConnectionPool pool = Model.getJmxConnectionPool();
MBeanServerConnection server = null;
try
{
server = pool.getConnection();
if (server == null)
{
String err = "Error obtaining JMX connection. Is the server running?";
throw new Exception(err);
}
Object[] params = { realm, user, password, roles };
String[] sig = { realm.getClass().getName(),
user.getClass().getName(), password.getClass().getName(),
roles.getClass().getName() };
String errorMessage = (String) server.invoke(new ObjectName(
"org.cafesip.jiplet:type=JipletContainer"),
"modifyRealmUser", params, sig);
if (errorMessage.length() > 0)
{
throw new Exception(errorMessage);
}
}
finally
{
if (server != null)
{
pool.returnConnection(server);
}
}
}
public void deleteUser(String realm, String user) throws Exception
{
AgentConnectionPool pool = Model.getJmxConnectionPool();
MBeanServerConnection server = null;
try
{
server = pool.getConnection();
if (server == null)
{
String err = "Error obtaining JMX connection. Is the server running?";
throw new Exception(err);
}
Object[] params = { realm, user };
String[] sig = { realm.getClass().getName(),
user.getClass().getName() };
String errorMessage = (String) server.invoke(new ObjectName(
"org.cafesip.jiplet:type=JipletContainer"),
"deleteRealmUser", params, sig);
if (errorMessage.length() > 0)
{
throw new Exception(errorMessage);
}
}
finally
{
if (server != null)
{
pool.returnConnection(server);
}
}
}
public String[] getUser(String realm, String user) throws Exception
{
AgentConnectionPool pool = Model.getJmxConnectionPool();
MBeanServerConnection server = null;
try
{
server = pool.getConnection();
if (server == null)
{
String err = "Error obtaining JMX connection. Is the server running?";
throw new Exception(err);
}
Object[] params = { realm, user };
String[] sig = { realm.getClass().getName(),
user.getClass().getName() };
return (String[]) server.invoke(new ObjectName(
"org.cafesip.jiplet:type=JipletContainer"), "getRealmUser",
params, sig);
}
finally
{
if (server != null)
{
pool.returnConnection(server);
}
}
}
public void createRealm(String path) throws Exception
{
AgentConnectionPool pool = Model.getJmxConnectionPool();
MBeanServerConnection server = null;
try
{
server = pool.getConnection();
if (server == null)
{
String err = "Error obtaining JMX connection. Is the server running?";
throw new Exception(err);
}
if (Model.getDeploymentType().equals("JBOSS") == true)
{
// copy the srr file/directory into the JBOSS deployment
// directory
String home = System.getProperty("jboss.server.home.url");
URL home_url = new URL(home);
File home_path = new File(home_url.getPath(), "deploy");
FileUtils f = new FileUtils();
if (f.copy(path, home_path.getAbsolutePath()) == false)
{
throw new Exception(
"Error copying file to the J2EE deploy directory");
}
}
else
// servlet container (use the JMX interface)
{
Object[] args = new Object[] { path };
String[] sig = new String[] { "java.lang.String" };
String errorMessage = (String) server.invoke(new ObjectName(
"org.cafesip.jiplet:type=JipletContainer"),
"createRealm", args, sig);
if (errorMessage.length() > 0)
{
throw new Exception(errorMessage);
}
}
}
finally
{
if (server != null)
{
pool.returnConnection(server);
}
}
}
public void deleteRealm(String name) throws Exception
{
AgentConnectionPool pool = Model.getJmxConnectionPool();
MBeanServerConnection server = null;
try
{
server = pool.getConnection();
if (server == null)
{
String err = "Error obtaining JMX connection. Is the server running?";
throw new Exception(err);
}
if (Model.getDeploymentType().equals("JBOSS") == true)
{
Object[] args = new Object[] { name };
String[] sig = new String[] { "java.lang.String" };
String rname = (String) server.invoke(new ObjectName(
"org.cafesip.jiplet:type=JipletContainer"),
"getRealmDirName", args, sig);
if (rname == null)
{
throw new Exception(
"The realm was not found or it is not a deployed realm");
}
String home = System.getProperty("jboss.server.home.url");
URL home_url = new URL(home);
File f = null;
if (rname.endsWith(FileUtils.SRR_EXTENSION))
{
f = new File(home_url.getPath() + "/deploy/" + rname);
}
else
{
f = new File(home_url.getPath() + "/deploy/" + rname
+ FileUtils.SRR_EXTENSION);
}
if (f.isDirectory() == true)
{
FileUtils futils = new FileUtils();
if (futils.deleteDir(f.getAbsolutePath()) == false)
{
throw new Exception(
"Error deleting J2EE deploy directory");
}
}
else if (f.isFile() == true)
{
if (f.delete() == false)
{
throw new Exception(
"Error deleting srr file from the J2EE deploy directory");
}
}
else
{
throw new Exception(
"The deployment does not exist in the J2EE deploy directory."
+ " This may occur if the realm is not a deployable realm");
}
Thread.sleep(10000L);
}
else
{
Object[] args = new Object[] { name };
String[] sig = new String[] { "java.lang.String" };
String errorMessage = (String) server.invoke(new ObjectName(
"org.cafesip.jiplet:type=JipletContainer"),
"deleteRealm", args, sig);
if (errorMessage.length() > 0)
{
throw new Exception(errorMessage);
}
}
}
finally
{
if (server != null)
{
pool.returnConnection(server);
}
}
}
public RealmElement getRealmProperty(String realmName) throws Exception
{
AgentConnectionPool pool = Model.getJmxConnectionPool();
MBeanServerConnection server = null;
try
{
server = pool.getConnection();
if (server == null)
{
String err = "Error obtaining JMX connection. Is the server running?";
throw new Exception(err);
}
Object[] args = new Object[] { realmName };
String[] sig = new String[] { "java.lang.String" };
return (RealmElement) server.invoke(new ObjectName(
"org.cafesip.jiplet:type=JipletContainer"),
"getRealmProperty", args, sig);
}
finally
{
if (server != null)
{
pool.returnConnection(server);
}
}
}
public org.cafesip.jiplet.console.client.rpc.RealmElement viewRealmProperty(
String realmName) throws Exception
{
RealmElement src = getRealmProperty(realmName);
if (src == null)
{
throw new Exception("Realm not found");
}
if (src.getDeployDir() == null)
{
src.setDeployDir("System Realm");
}
org.cafesip.jiplet.console.client.rpc.RealmElement dest = new org.cafesip.jiplet.console.client.rpc.RealmElement();
dest.setDefaultRealm(src.isDefaultRealm());
dest.setDeployDir(src.getDeployDir());
dest.setName(src.getName());
dest.setParamsMap(src.getParams());
return dest;
}
}