| RepositoryCtrl.java |
/* JFox, the OpenSource J2EE Application Server
*
* Copyright (C) 2002 huihoo.com
* Distributable under GNU LGPL license
* See the GNU Lesser General Public License for more details.
*/
package org.jfox.mx;
import java.util.Iterator;
import java.util.List;
import java.util.ArrayList;
/**
*
* @author <a href="mailto:young_yy@hotmail.com">Young Yang</a>
*/
public class RepositoryCtrl {
private MxRepository repo = new MxRepository();
private String domain = null;
public RepositoryCtrl(String domain) {
this.domain = domain;
}
public MxMetaData retrieve(ObjectName name) throws MxException {
if(!contains(name)) throw new MxException("instance not found: " + name.toString());
return repo.get(name);
}
public void store(ObjectName name, MxMetaData metadata) throws MxException {
if(contains(name)) throw new MxException("instance already exists: " + name.toString());
repo.put(name,metadata);
}
public void remove(ObjectName name) throws MxException {
if(name.isPattern()) throw new MxException(new IllegalArgumentException("ObjectName " + name.toString() + " is a pattern object name"));
if(!contains(name)) throw new MxException("instance not found: " + name.toString());
repo.remove(name);
}
public int getRepoSize() {
return repo.size();
}
public boolean contains(ObjectName name) throws MxException {
if(name.isPattern()) throw new MxException(new IllegalArgumentException("ObjectName " + name.toString() + " is a pattern object name"));
return repo.contains(name);
}
// public Iterator iterator() {
// return repo.iterator();
// }
public Iterator queryMBean(String domain){
List objectNames = new ArrayList();
Iterator it = repo.iterator();
if(domain.equals("*")){
while(it.hasNext()){
objectNames.add(((MxMetaData)it.next()).getObjectName());
}
}
else {
while(it.hasNext()){
ObjectName on = ((MxMetaData)it.next()).getObjectName();
if(on.getDomain().equals(domain) || (on.getDomain().equals("") && domain.equals(this.domain))) {
objectNames.add(on);
}
}
}
return objectNames.iterator();
}
public String[] getDomains(){
List domains = new ArrayList();
Iterator it = repo.iterator();
while(it.hasNext()){
ObjectName on = ((MxMetaData)it.next()).getObjectName();
String domain = on.getDomain();
if(domain.equals("")){
domain = this.domain;
}
if(!domains.contains(domain)){
domains.add(domain);
}
}
return (String[])domains.toArray(new String[0]);
}
/*
public Set queryMBeans(ObjectName pattern, QueryExp query) {
HashSet set = new HashSet();
if(pattern == null){
try {
pattern = new ObjectName("*:*");
}
catch(MalformedObjectNameException malformedobjectnameexception) { }
}
pattern = getCompleteObjectName(pattern);
// not pattern ,single mbean
if(!pattern.isPattern()){
try {
MBeanMetaData meta = retrieve(pattern);
if(meta != null) set.add(meta.getObjectInstance());
}
catch(InstanceNotFoundException ignore){}
catch(RuntimeOperationsException e) {
e.printStackTrace();
}
}
else {
// String p_domain = pattern.getDomain();
Iterator it = this.iterator();
while(it.hasNext()){
MBeanMetaData meta = (MBeanMetaData)it.next();
ObjectInstance instance = meta.getObjectInstance();
ObjectName objectName = instance.getObjectName();
// String domain = objectName.getDomain();
// if(matchDomain(domain,p_domain) && matchKeys(objectName,pattern)){ // domain & keys all matched
// set.add(instance);
// }
// changed from jmx1.2
try {
if(pattern.apply(objectName)){
set.add(instance);
}
}
catch(Exception e){
e.printStackTrace();
}
}
}
return set;
}
*/
public static void main(String[] args) {
}
}