Package org.xmlBlaster.engine.admin.intern

Source Code of org.xmlBlaster.engine.admin.intern.PropertyHandler

/*------------------------------------------------------------------------------
Name:      PropertyHandler.java
Project:   xmlBlaster.org
Copyright: xmlBlaster.org, see xmlBlaster-LICENSE file
Comment:   Implementation for administrative property access
------------------------------------------------------------------------------*/
package org.xmlBlaster.engine.admin.intern;

import java.util.logging.Logger;
import java.util.logging.Level;

import org.xmlBlaster.util.def.ErrorCode;
import org.xmlBlaster.util.plugin.I_Plugin;
import org.xmlBlaster.util.MsgUnit;
import org.xmlBlaster.util.XmlBlasterException;
import org.xmlBlaster.engine.ServerScope;
import org.xmlBlaster.engine.qos.AddressServer;
import org.xmlBlaster.engine.admin.I_CommandHandler;
import org.xmlBlaster.engine.admin.CommandManager;
import org.xmlBlaster.engine.admin.CommandWrapper;


/**
* Implementation of administrative access to properties.
* @author xmlBlaster@marcelruff.info
* @since 0.79f
*/
final public class PropertyHandler implements I_CommandHandler, I_Plugin {

   private String ME = "PropertyHandler";
   private ServerScope glob = null;
   private static Logger log = Logger.getLogger(PropertyHandler.class.getName());
   private CommandManager commandManager = null;


   public PropertyHandler() {}

   /**
    * This is called after creation of the plugin.
    * @param glob The Global handle of this xmlBlaster server instance.
    * @param commandManager My big brother taking care of me
    */
   public void initialize(ServerScope glob, CommandManager commandManager) {
      this.glob = glob;

      this.commandManager = commandManager;
      this.ME = "PropertyHandler" + this.glob.getLogPrefixDashed();
      this.commandManager.register("sysprop", this);
      this.commandManager.register("logging", this);
      log.fine("Property administration plugin is initialized");
   }

   /**
    * This method is called by the PluginManager (enforced by I_Plugin).
    * @see org.xmlBlaster.util.plugin.I_Plugin#init(org.xmlBlaster.util.Global,org.xmlBlaster.util.plugin.PluginInfo)
    */
   public void init(org.xmlBlaster.util.Global glob, org.xmlBlaster.util.plugin.PluginInfo pluginInfo) {
   }

   /**
    * Return plugin type for Plugin loader
    * @return "PropertyHandler"
    */
   public String getType() {
      return "PropertyHandler";
   }

   /**
    * Return plugin version for Plugin loader
    * @return "1.0"
    */
   public String getVersion() {
      return "1.0";
   }

   /**
    * Get a human readable name of this filter implementation
    * @return "PropertyHandler"
    */
   public String getName() {
      return "PropertyHandler";
   }

   /**
    * @see org.xmlBlaster.engine.admin.I_CommandHandler#get(String,CommandWrapper)
    */
   public synchronized MsgUnit[] get(AddressServer addressServer, String sessionId, CommandWrapper cmd) throws XmlBlasterException {
      if (cmd == null)
         throw new XmlBlasterException(this.glob, ErrorCode.USER_ILLEGALARGUMENT, ME + ".get", "Please pass a command which is not null");
      if (cmd.getTail() == null)
         throw new XmlBlasterException(this.glob, ErrorCode.USER_ILLEGALARGUMENT, ME + ".get", "Please pass a command which has a valid property added, '" + cmd.getCommand() + "' is too short, aborted request.");

      String cmdString = cmd.getTail().trim();
      if (cmdString.startsWith("?"))
         cmdString = cmdString.substring(1);

      String ret = null;

      /*
      if (isLogLevelRequest(cmdString)) {
         // ret = ""+glob.getLogLevel(cmdString);
         if (log.isLoggable(Level.FINE))
            log.fine("Checking log level '" + cmdString + "', is " + ret);
      }
      else
      */
         ret = glob.getProperty().get(cmdString, (String)null);

      if (log.isLoggable(Level.FINE)) log.fine("Found for cmd " + cmdString + "=" + ret);
      if (ret == null)
         return new MsgUnit[0];
      else {
         MsgUnit[] msgs = new MsgUnit[1];
         msgs[0] = new MsgUnit("<key oid='" + cmd.getCommand() + "' />", ret.getBytes(), "text/plain");
         return msgs;
      }
   }

   /**
    * @return The new value set, it can be different to the passed value for example if ${} replacement occured
    */
   public String set(AddressServer addressServer, String sessionId, CommandWrapper cmd) throws XmlBlasterException {
      if (cmd == null)
         throw new XmlBlasterException(this.glob, ErrorCode.USER_ILLEGALARGUMENT, ME + ".set", "Please pass a command which is not null");
      if (cmd.getTail() == null)
         throw new XmlBlasterException(this.glob, ErrorCode.USER_ILLEGALARGUMENT, ME + ".set", "Please pass a command which has a valid property added, '" + cmd.getCommand() + "' is too short, aborted request.");

      /*
      String cmdString = cmd.getTail().trim();
      if (cmdString.startsWith("?"))
         cmdString = cmdString.substring(1);

      int equalsIndex = cmdString.lastIndexOf("=");
      if (equalsIndex < 1 || cmdString.length() <= (equalsIndex+1))
         throw new XmlBlasterException(ME, "Invalid command '" + cmd.getCommand() + "', don't know what to set with your request");

      String key = cmdString.substring(0,equalsIndex).trim();
      String value = cmdString.substring(equalsIndex+1);
      */
      String key = cmd.getKey();
      String[] values = cmd.getArgs();
     
      String type = cmd.getThirdLevel(); // "logging" or "sysprop"

      /*
      if (isLogLevelRequest(key)) {
         boolean bool = glob.changeLogLevel(key, values[0].trim());
         log.info("Changed log level '" + key + "' to " + bool);
         return ""+bool;
      }
      else {
      */
      if ("logging".equals(type)) {
         String value = (values != null && values.length > 0) ? values[0] : "INFO";
         log.info("Changed property '" + key + "' to " + value);
         Level level = Level.parse(value);
         this.glob.changeLogLevel(key, level);
         return value;
      }
      else {
         try {
            String ret = glob.getProperty().set(key, values[0]);
            log.info("Changed property '" + key + "' to " + ret);
            return ret;
         }
         catch (XmlBlasterException e) {
            throw new XmlBlasterException(this.glob, ErrorCode.INTERNAL_ILLEGALARGUMENT, ME + ".set", e.getErrorCodeStr() + " " + e.getMessage());
         }
      }
      // }
   }

   public String help() {
      return "Administration of properties from system, xmlBlaster.properties and command line";
   }

   public String help(String cmd) {
      return help();
   }

   public void shutdown() {
      if (log.isLoggable(Level.FINE)) log.fine("Shutdown ignored, nothing to do");
   }

}
TOP

Related Classes of org.xmlBlaster.engine.admin.intern.PropertyHandler

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.