Package org.jmanage.core.management.metadata

Source Code of org.jmanage.core.management.metadata.Repository$XMLFilter

/**
* Copyright 2004-2006 jManage.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.jmanage.core.management.metadata;

import java.io.File;
import java.io.FilenameFilter;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.logging.Logger;

import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;
import org.jmanage.core.management.ObjectAttributeInfo;
import org.jmanage.core.management.ObjectInfo;
import org.jmanage.core.management.ObjectName;
import org.jmanage.core.management.ObjectOperationInfo;
import org.jmanage.core.management.ObjectParameterInfo;
import org.jmanage.core.management.ServerConnection;
import org.jmanage.core.util.CoreUtils;
import org.jmanage.core.util.Loggers;

/**
*
* @author Rakesh Kalra
*/
public class Repository {

    private static Logger logger = Loggers.getLogger(Repository.class);
    private static Map<ObjectName, ObjectInfo> mbeanToObjectInfoMap = new HashMap<ObjectName, ObjectInfo>();
   
    public static ObjectInfo applyMetaData(ObjectInfo objInfo, ServerConnection connection){
        ObjectInfo metaObjectInfo = mbeanToObjectInfoMap.get(objInfo.getObjectName());
        if(metaObjectInfo != null){
            objInfo.applyMetaData(metaObjectInfo,
                    new ExpressionProcessor(connection, objInfo.getObjectName()));
        }
        return objInfo;
    }
   
    static{
        try {
            load();
        } catch (JDOMException e) {
            throw new RuntimeException(e);
        }
    }
   
    private static void load() throws JDOMException{
       
  File metadataRepository = new File(CoreUtils.getConfigDir() + "/mbeans");
  assert metadataRepository.isDirectory() : "repository not found";
  File[] metadataFiles = metadataRepository.listFiles(new XMLFilter());
  for(File file : metadataFiles){
            Document config = new SAXBuilder().build(file);
            List mbeans =
                config.getRootElement().getChildren();
           
            for(Iterator it= mbeans.iterator(); it.hasNext();){
                Element mbean = (Element)it.next();
                ObjectInfo objInfo = getObjectInfo(mbean);
                ObjectInfo oldObjInfo =
                    mbeanToObjectInfoMap.put(objInfo.getObjectName(), objInfo);
                if(oldObjInfo != null){
                    logger.warning("Duplicate mbean found: " + oldObjInfo.getObjectName().toString());
                }
            }
  }
    }
   
    private static ObjectInfo getObjectInfo(Element mbean){
        ObjectName objectName = new ObjectName(mbean.getAttributeValue("name"));
        String description = mbean.getAttributeValue("description");
        ObjectAttributeInfo[] attributes = getObjectAttributeInfo(mbean);
        ObjectOperationInfo[] operations = getObjectOperationInfo(mbean);
        return new ObjectInfo(objectName, null, description,
                attributes, null, operations, null);
    }
   
    private static ObjectAttributeInfo[] getObjectAttributeInfo(Element mbean){
       
        List attributes = mbean.getChildren("attribute");
        ObjectAttributeInfo[] attributeInfo = new ObjectAttributeInfo[attributes.size()];
        int index = 0;
        for(Iterator it = attributes.iterator(); it.hasNext(); index++){
            Element attribute = (Element)it.next();
            attributeInfo[index] = new ObjectAttributeInfo(attribute.getAttributeValue("name"),
                                attribute.getAttributeValue("description"),
                                null, // not overridden
                                false,// not overridden
                                false,// not overridden
                                false);// not overridden
            attributeInfo[index].setUnits(attribute.getAttributeValue("units"));
        }
        return attributeInfo;
    }
   
    private static ObjectOperationInfo[] getObjectOperationInfo(Element mbean){
       
        List operations = mbean.getChildren("operation");
        ObjectOperationInfo[] operationInfo = new ObjectOperationInfo[operations.size()];
        int index = 0;
        for(Iterator it = operations.iterator(); it.hasNext(); index++){
            Element operation = (Element)it.next();
            operationInfo[index] = new ObjectOperationInfo(operation.getAttributeValue("name"),
                    operation.getAttributeValue("description"),
                    getSignature(operation),
                    null, // not overridden
                    0);   // not overridden
            operationInfo[index].setUnits(operation.getAttributeValue("units"));
        }
        return operationInfo;
    }
   
    private static ObjectParameterInfo[] getSignature(Element operation){
        List parameters = operation.getChildren("parameter");
        ObjectParameterInfo[] parameterInfo = new ObjectParameterInfo[parameters.size()];
        int index = 0;
        for(Iterator it = parameters.iterator(); it.hasNext(); index++){
            Element parameter = (Element)it.next();
            parameterInfo[index] = new ObjectParameterInfo(parameter.getAttributeValue("name"),
                    parameter.getAttributeValue("description"),
                    parameter.getAttributeValue("type"),
                    parameter.getAttributeValue("legalValues"));
            parameterInfo[index].setUnits(parameter.getAttributeValue("units"));
        }
        return parameterInfo;
    }
   
    private static class XMLFilter implements FilenameFilter {
  public boolean accept(File dir, String name) {
      return (name.endsWith(".xml") || name.endsWith(".XML"));
  }
    }
}
TOP

Related Classes of org.jmanage.core.management.metadata.Repository$XMLFilter

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.