Package com.sun.messaging.jmq.admin.apps.objmgr

Source Code of com.sun.messaging.jmq.admin.apps.objmgr.CmdRunner

/*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
*
* Copyright (c) 2000-2010 Oracle and/or its affiliates. All rights reserved.
*
* The contents of this file are subject to the terms of either the GNU
* General Public License Version 2 only ("GPL") or the Common Development
* and Distribution License("CDDL") (collectively, the "License").  You
* may not use this file except in compliance with the License.  You can
* obtain a copy of the License at
* https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
* or packager/legal/LICENSE.txt.  See the License for the specific
* language governing permissions and limitations under the License.
*
* When distributing the software, include this License Header Notice in each
* file and include the License file at packager/legal/LICENSE.txt.
*
* GPL Classpath Exception:
* Oracle designates this particular file as subject to the "Classpath"
* exception as provided by Oracle in the GPL Version 2 section of the License
* file that accompanied this code.
*
* Modifications:
* If applicable, add the following below the License Header, with the fields
* enclosed by brackets [] replaced by your own identifying information:
* "Portions Copyright [year] [name of copyright owner]"
*
* Contributor(s):
* If you wish your version of this file to be governed by only the CDDL or
* only the GPL Version 2, indicate your decision by adding "[Contributor]
* elects to include this software in this distribution under the [CDDL or GPL
* Version 2] license."  If you don't indicate a single choice of license, a
* recipient has the option to distribute your version of this file under
* either the CDDL, the GPL Version 2 or to extend the choice of license to
* its licensees as provided above.  However, if you add GPL Version 2 code
* and therefore, elected the GPL Version 2 license, then the option applies
* only if the new code is made subject to such option by the copyright
* holder.
*/

/*
* @(#)CmdRunner.java  1.29 06/27/07
*/

package com.sun.messaging.jmq.admin.apps.objmgr;

import java.io.*;
import java.util.Properties;
import java.util.Vector;

import javax.jms.JMSException;
import javax.naming.Context;
import javax.naming.NameClassPair;

import javax.naming.directory.Attributes;
import javax.naming.directory.BasicAttributes;

import com.sun.messaging.AdministeredObject;
import com.sun.messaging.InvalidPropertyException;
import com.sun.messaging.InvalidPropertyValueException;
import com.sun.messaging.ReadOnlyPropertyException;
import com.sun.messaging.naming.MissingVersionNumberException;
import com.sun.messaging.naming.UnsupportedVersionNumberException;
import com.sun.messaging.jmq.admin.objstore.ObjStore;
import com.sun.messaging.jmq.admin.objstore.ObjStoreAttrs;
import com.sun.messaging.jmq.admin.objstore.ObjStoreManager;
import com.sun.messaging.jmq.admin.objstore.ObjStoreException;
import com.sun.messaging.jmq.admin.objstore.NameNotFoundException;
import com.sun.messaging.jmq.admin.objstore.NameAlreadyExistsException;
import com.sun.messaging.jmq.admin.objstore.InitializationException;
import com.sun.messaging.jmq.admin.objstore.AuthenticationException;
import com.sun.messaging.jmq.admin.objstore.AuthenticationNotSupportedException;
import com.sun.messaging.jmq.admin.objstore.GeneralNamingException;
import com.sun.messaging.jmq.admin.objstore.NoPermissionException;
import com.sun.messaging.jmq.admin.objstore.CommunicationException;
import com.sun.messaging.jmq.admin.objstore.SchemaViolationException;
import com.sun.messaging.jmq.admin.util.Globals;
import com.sun.messaging.jmq.admin.util.JMSObjFactory;
import com.sun.messaging.jmq.admin.resources.AdminResources;
import com.sun.messaging.jmq.util.Password;

/**
* This class contains the logic to execute the user commands
* specified in the ObjMgrProperties object. It has one
* public entry point which is the runCommands() method. It
* is expected to display to the user if the command execution
* was successful or not.
* @see  ObjMgr
*
*/
public class CmdRunner implements ObjMgrOptions  {

    private static AdminResources ar = Globals.getAdminResources();
    private ObjMgrProperties objMgrProps;

    /**
     * Constructor
     */
    public CmdRunner(ObjMgrProperties props) {
  this.objMgrProps = props;
    }

    /*
     * Run/execute the user commands specified in the ObjMgrProperties object.
     */
    public int runCommands() {
  int exitcode = 0;

  ObjStore os = null;

  /*
   * Open/Initialize the object store
        os = openStore(objMgrProps);
  if (os == null)
      return (1);
   */

  /*
   * Determine type of command and invoke the relevant check method
   * to verify the contents of the ObjMgrProperties object.
   *
   */
  String cmd = objMgrProps.getCommand();
  if (cmd.equals(OBJMGR_ADD_PROP_VALUE))  {
            exitcode = runAddCommand(objMgrProps);
  } else if (cmd.equals(OBJMGR_DELETE_PROP_VALUE))  {
            exitcode = runDeleteCommand(objMgrProps);
  } else if (cmd.equals(OBJMGR_QUERY_PROP_VALUE))  {
            exitcode = runQueryCommand(objMgrProps);
  } else if (cmd.equals(OBJMGR_LIST_PROP_VALUE))  {
            runListCommand(objMgrProps);
  } else if (cmd.equals(OBJMGR_UPDATE_PROP_VALUE))  {
            exitcode = runUpdateCommand(objMgrProps);
  }

  return (exitcode);
    }

    /*
     * 02/05/2001
     * Creates a store.
     */
    private ObjStore createStore(ObjStoreAttrs osa) {
        ObjStore os = null;

        if (osa == null)  {
            return (null);
        }

        /*
         * Create ObjStore
         */
        try  {
            ObjStoreManager osmgr =
                ObjStoreManager.getObjStoreManager();
            os = osmgr.createStore(osa);

        } catch (NameNotFoundException nnfe) {
            Globals.stdErrPrintln(
                ar.getString(ar.I_ERROR_MESG),
                ar.getKString(ar.E_CANNOT_LOC_TREE));
            os = null;

        } catch (ObjStoreException e) {
            handleRunCommandExceptions(e);
            os = null;
        }
        return (os);
    }

    /*
     * 02/05/2001
     * Opens an existing store.
     */
    private void openStore(ObjStore os) throws ObjStoreException {
        os.open();
    }

    /*
     * Not used
     *
     * Tries to open a connection to the object store
     * based on the properties/attributes specified.
     * If an error occured, no exception is thrown,
     * null is returned, and a error msg is printed to stderr.
    private ObjStore openStore(ObjMgrProperties objMgrProps) {
  ObjStore os = null;

  // Get ObjStoreAttrs
  ObjStoreAttrs osa = objMgrProps.getObjStoreAttrs();

  return (openStore(osa));
    }
     */

    /*
     * Tries to open a connection to the object store
     * based on the properties/attributes specified.
     * If an error occured, no exception is thrown,
     * null is returned, and a error msg is printed to stderr.
     */
    private ObjStore openStore(ObjStoreAttrs osa) {
  ObjStore os = null;

  if (osa == null)  {
      return (null);
  }

  /*
   * Create ObjStore
   */
  try  {
      ObjStoreManager osmgr =
    ObjStoreManager.getObjStoreManager();
      os = osmgr.createStore(osa);
      os.open();

        } catch (NameNotFoundException nnfe) {
            Globals.stdErrPrintln(
                ar.getString(ar.I_ERROR_MESG),
                ar.getKString(ar.E_CANNOT_LOC_TREE));
      os = null;
  } catch (ObjStoreException e) {
      handleRunCommandExceptions(e);
      os = null;
  }

  return (os);
    }


    private void printAddCmdDescription(Object newObj,
        String type,
        String lookupName,
        ObjStoreAttrs osa,
        String readOnlyValue) {
  Globals.stdOutPrintln(ar.getString(ar.I_ADD_CMD_DESC_INTRO,
        Utils.getObjTypeString(type)));
  Globals.stdOutPrintln("");

        ObjMgrPrinter omp = new ObjMgrPrinter(2, 4);
        omp.printObjPropertiesFromObj((AdministeredObject)newObj);
  Globals.stdOutPrintln("");

  Globals.stdOutPrintln(ar.getString(ar.I_ADD_CMD_DESC_LOOKUP));
  Globals.stdOutPrintln("");
  Globals.stdOutPrintln(lookupName);
  Globals.stdOutPrintln("");

  ObjMgrPrinter.printReadOnly(readOnlyValue);
  Globals.stdOutPrintln("");

  Globals.stdOutPrintln(ar.getString(ar.I_ADD_CMD_DESC_STORE));
  Globals.stdOutPrintln("");

        ObjMgrPrinter omp2 = new ObjMgrPrinter(osa, 2, 4);
        omp2.print();
  Globals.stdOutPrintln("");
    }

    private int runAddCommand(ObjMgrProperties objMgrProps) {
        ObjStore os;
  int exitcode = 0;

  String input = null;
  Object object = null;

  String yes, yesShort, no, noShort;

  yes = ar.getString(ar.Q_RESPONSE_YES);
  yesShort = ar.getString(ar.Q_RESPONSE_YES_SHORT);
  no = ar.getString(ar.Q_RESPONSE_NO);
  noShort = ar.getString(ar.Q_RESPONSE_NO_SHORT);

  /*
   * Get object type, props object, and lookup name
   */
  String type = objMgrProps.getObjType();
  Properties objProps = objMgrProps.getObjProperties();
  String lookupName = objMgrProps.getLookupName();

  ObjStoreAttrs osa = objMgrProps.getObjStoreAttrs();
  /*
   * Check for any mandatory bind attrs and display warning,
   * if necessary.
   */
  checkObjStoreAttrs(osa);

        Attributes bindAttrs = objMgrProps.getBindAttrs();
 
  /*
   * Check if -f (force) was specified on cmd line.
   */
  boolean force = objMgrProps.forceModeSet();

  /*
   * Create JMS Object with the specified properties.
   */
  Object newObj = null;
  try {
            if (type.equals(OBJMGR_TYPE_QUEUE)) {
          newObj = JMSObjFactory.createQueue(objProps);
            } else if (type.equals(OBJMGR_TYPE_TOPIC)) {
          newObj = JMSObjFactory.createTopic(objProps);
            } else if (type.equals(OBJMGR_TYPE_QCF)) {
          newObj = JMSObjFactory.createQueueConnectionFactory(objProps);
            } else if (type.equals(OBJMGR_TYPE_TCF)) {
          newObj = JMSObjFactory.createTopicConnectionFactory(objProps);
            } else if (type.equals(OBJMGR_TYPE_CF)) {
          newObj = JMSObjFactory.createConnectionFactory(objProps);
            } else if (type.equals(OBJMGR_TYPE_XTCF)) {
          newObj = JMSObjFactory.createXATopicConnectionFactory(objProps);
            } else if (type.equals(OBJMGR_TYPE_XQCF)) {
          newObj = JMSObjFactory.createXAQueueConnectionFactory(objProps);
            } else if (type.equals(OBJMGR_TYPE_XCF)) {
          newObj = JMSObjFactory.createXAConnectionFactory(objProps);
            }

        } catch (Exception e) {
            handleRunCommandExceptions(e, lookupName);
            Globals.stdOutPrintln("");
            Globals.stdOutPrintln(ar.getString(ar.I_OBJ_ADD_FAILED));
            return(1);
        }

  /*
   * Set this newly created obj to read-only if specified.
   */
  JMSObjFactory.doReadOnlyForAdd(newObj, objMgrProps.readOnlyValue());

        printAddCmdDescription(newObj, type, lookupName, osa,
        objMgrProps.readOnlyValue());

        os = createStore(osa);
        if (os == null)  {
            Globals.stdOutPrintln("");
            Globals.stdOutPrintln(ar.getString(ar.I_OBJ_ADD_FAILED));
            return(1);
        }

        /*
         * Prompt for missing authentication info BEFORE opening the store.
         */
        if (!force) {
            // Update ObjStoreAttrs in ths ObjStore if some security
            // info was missing.
            os = promptForAuthentication(os);
        }

        /*
         * Open/Initialize the object store
         */
        try {
            openStore(os);

        } catch (Exception e) {
            handleRunCommandExceptions(e, lookupName);
            Globals.stdOutPrintln("");
            Globals.stdOutPrintln(ar.getString(ar.I_OBJ_ADD_FAILED));
            return(1);
        }

        /*
         * If no -f option, check if the object already exists
         * so we can confirm with user to overwrite.
         */
  if (!force) {
      try  {
          object = os.retrieve(lookupName);

            } catch (NameNotFoundException nnfe) {
    // Make sure that this exception is NOT treated as an error for add
    ;

      } catch (Exception e) {
    handleRunCommandExceptions(e, lookupName);
          Globals.stdOutPrintln("");
          Globals.stdOutPrintln(ar.getString(ar.I_OBJ_ADD_FAILED));
    return(1);
      }

      // Object already exists so confirm with user.
      if (object != null) {
          Globals.stdOutPrintln(
        ar.getCString(ar.I_WARNING_MESG),
        ar.getString(ar.W_OBJ_ALREADY_EXISTS, lookupName));
        
          Globals.stdOutPrintln(
        ar.getCString(ar.I_WARNING_MESG),
        ar.getString(ar.W_ADD_OBJ_BE_OVERWRITTEN));

          input = getUserInput(ar.getString(ar.Q_OVERWRITE_OK), noShort);
      }
  }

  if (noShort.equalsIgnoreCase(input) || no.equalsIgnoreCase(input)) {
      Globals.stdOutPrintln("");
      Globals.stdOutPrintln(
    ar.getString(ar.I_OBJ_NOT_ADDED));

  /*
   * Case where user typed 'y' or 'yes' to overwrite OR 
   * case where object doesn't exist yet so no confirmation needed OR
   * case where user used -f.
   */
  } else if ((yesShort.equalsIgnoreCase(input) ||
      yes.equalsIgnoreCase(input)) ||
       (object == null) ||
       (force)) {

      /*
       * Update the object in object store.
       */
      try  {
                if (bindAttrs.size() > 0)
                    os.add(lookupName, newObj, bindAttrs, true);
                else
                    os.add(lookupName, newObj, true);

      } catch (NameAlreadyExistsException naee) {
    ; // Should never happen, since we pass true to add

      } catch (NameNotFoundException nnfe) {
                Globals.stdErrPrintln(
                    ar.getString(ar.I_ERROR_MESG),
                    ar.getKString(ar.E_CANNOT_LOC_TREE));
          exitcode = 1;

      } catch (Exception e)  {
    handleRunCommandExceptions(e, lookupName);
          exitcode = 1;
      }

      if (exitcode == 0)  {
          Globals.stdOutPrintln(ar.getString(ar.I_OBJ_ADDED));
      } else  {
          Globals.stdOutPrintln("");
          Globals.stdOutPrintln(ar.getString(ar.I_OBJ_ADD_FAILED));
      }
  } else {
      Globals.stdOutPrintln(ar.getString(ar.I_UNRECOGNIZED_RES, input));
      Globals.stdOutPrintln("");
      Globals.stdOutPrintln(ar.getString(ar.I_OBJ_NOT_ADDED));
      exitcode = 1;
  }

  return (exitcode);
    }

    private void printDeleteCmdDescription(String lookupName,
        ObjStoreAttrs osa) {
  Globals.stdOutPrintln(ar.getString(ar.I_DELETE_CMD_DESC_INTRO));
  Globals.stdOutPrintln("");
  Globals.stdOutPrintln(lookupName);
  Globals.stdOutPrintln("");

  Globals.stdOutPrintln(ar.getString(ar.I_DELETE_CMD_DESC_STORE));
  Globals.stdOutPrintln("");

        ObjMgrPrinter omp = new ObjMgrPrinter(osa, 2, 4);
        omp.print();
  Globals.stdOutPrintln("");
    }

    private int runDeleteCommand(ObjMgrProperties objMgrProps) {

  int exitcode = 0;

  /*
   * Get lookup Name.
   */
  String lookupName = objMgrProps.getLookupName();
  Object object = null;
  String input = null;
        ObjStore os;
  String yes, yesShort, no, noShort;

  yes = ar.getString(ar.Q_RESPONSE_YES);
  yesShort = ar.getString(ar.Q_RESPONSE_YES_SHORT);
  no = ar.getString(ar.Q_RESPONSE_NO);
  noShort = ar.getString(ar.Q_RESPONSE_NO_SHORT);

        /*
         * Check if -f (force) was specified on cmd line.
         */
        boolean force = objMgrProps.forceModeSet();

  ObjStoreAttrs osa = objMgrProps.getObjStoreAttrs();
  /*
   * Check for any mandatory bind attrs and display warning,
   * if necessary.
   */
  checkObjStoreAttrs(osa);

        printDeleteCmdDescription(lookupName, osa);

        os = createStore(osa);
        if (os == null)  {
            Globals.stdOutPrintln("");
            Globals.stdOutPrintln(ar.getString(ar.I_OBJ_DELETE_FAILED));
            return(1);
        }

        /*
         * Prompt for missing authentication info BEFORE opening the store.
         */
        if (!force) {
            // Update ObjStoreAttrs in ths ObjStore if some security
            // info was missing.
            os = promptForAuthentication(os);
        }

        /*
         * Open/Initialize the object store.
         */
        try {
            openStore(os);

        } catch (Exception e) {
            handleRunCommandExceptions(e, lookupName);
            Globals.stdOutPrintln("");
            Globals.stdOutPrintln(ar.getString(ar.I_OBJ_DELETE_FAILED));
            return(1);
        }

        /*
   * Retrieve the object by its lookup name.
         */
  try  {
      object = os.retrieve(lookupName);

  } catch (NameNotFoundException nnfe) {
            Globals.stdErrPrintln(
                ar.getKString(ar.E_CANNOT_LOC_OBJ, lookupName));

      Globals.stdOutPrintln("");
      Globals.stdOutPrintln(ar.getString(ar.I_OBJ_DELETE_FAILED));
      return (1);
  } catch (Exception e)  {
      handleRunCommandExceptions(e, lookupName);

      Globals.stdOutPrintln("");
      Globals.stdOutPrintln(ar.getString(ar.I_OBJ_DELETE_FAILED));
      return (1);
  }
 
  /*
   * Delete the object if it exists.
   */
  if (object != null) {

      if (!force) {
          input = getUserInput(ar.getString(ar.Q_DELETE_OK), noShort);
      }

      if (yesShort.equalsIgnoreCase(input) || yes.equalsIgnoreCase(input)
    || force) {
          try  {
              os.delete(lookupName);

          } catch (Exception e)  {
        handleRunCommandExceptions(e, lookupName);
        exitcode = 1;
          }

    if (exitcode == 0)  {
        Globals.stdOutPrintln("");
              Globals.stdOutPrintln(ar.getString(ar.I_OBJ_DELETED));
    } else  {
        Globals.stdOutPrintln("");
              Globals.stdOutPrintln(ar.getString(ar.I_OBJ_DELETE_FAILED));
    }

            } else if (noShort.equalsIgnoreCase(input) ||
           no.equalsIgnoreCase(input)) {
                Globals.stdOutPrintln("");
                Globals.stdOutPrintln(ar.getString(ar.I_OBJ_NOT_DELETED));

      } else {
                Globals.stdOutPrintln(ar.getString(ar.I_UNRECOGNIZED_RES, input));
                Globals.stdOutPrintln("");
                Globals.stdOutPrintln(ar.getString(ar.I_OBJ_NOT_DELETED));
    exitcode = 1;
      }
  } else
  // object == null
  // Should not happen, since if the object cannot be retrieved,
  // it should throw NameNotFoundException
            Globals.stdErrPrintln(ar.getKString(ar.E_CANNOT_LOC_OBJ), lookupName);
      Globals.stdOutPrintln("");
      Globals.stdOutPrintln(ar.getString(ar.I_OBJ_DELETE_FAILED));
      exitcode = 1;
  }

  return (exitcode);
    }

    private void printQueryCmdDescription(String lookupName,
        ObjStoreAttrs osa) {
  Globals.stdOutPrintln(ar.getString(ar.I_QUERY_CMD_DESC_INTRO));
  Globals.stdOutPrintln("");
  Globals.stdOutPrintln(lookupName);
  Globals.stdOutPrintln("");

  Globals.stdOutPrintln(ar.getString(ar.I_QUERY_CMD_DESC_STORE));
  Globals.stdOutPrintln("");

        ObjMgrPrinter omp = new ObjMgrPrinter(osa, 2, 4);
        omp.print();
  Globals.stdOutPrintln("");
    }

    private int runQueryCommand(ObjMgrProperties objMgrProps) {
  int exitcode = 0;

  /*
   * Get Properties object containing obj attrs
   */
  String lookupName = objMgrProps.getLookupName();
  Object object = null;
        ObjStore os;

        /*
         * Check if -f (force) was specified on cmd line.
         */
        boolean force = objMgrProps.forceModeSet();

  ObjStoreAttrs osa = objMgrProps.getObjStoreAttrs();
  /*
   * Check for any mandatory bind attrs and display warning,
   * if necessary.
   */
  checkObjStoreAttrs(osa);

        printQueryCmdDescription(lookupName, osa);

        os = createStore(osa);
        if (os == null)  {
            Globals.stdOutPrintln("");
            Globals.stdOutPrintln(ar.getString(ar.I_OBJ_QUERY_FAILED));
            return(1);
        }

        /*
         * Prompt for missing authentication info BEFORE opening the store.
         */
        if (!force) {
            // Update ObjStoreAttrs in ths ObjStore if some security
            // info was missing.
            os = promptForAuthentication(os);
        }

        /*
         * Open/Initialize the object store.
         */
        try {
            openStore(os);

        } catch (Exception e) {
            handleRunCommandExceptions(e, lookupName);
            Globals.stdOutPrintln("");
            Globals.stdOutPrintln(ar.getString(ar.I_OBJ_QUERY_FAILED));
            return(1);
        }

        /*
   * Retrieve the object by its lookup name.
         */
  try  {
      object = os.retrieve(lookupName);

  } catch (NameNotFoundException nnfe)  {
      Globals.stdErrPrintln(
      ar.getKString(ar.E_CANNOT_LOC_OBJ, lookupName));
      Globals.stdOutPrintln("");
      Globals.stdErrPrintln(ar.getString(ar.I_OBJ_QUERY_FAILED));
      return (1);

  } catch (Exception e)  {
      handleRunCommandExceptions(e, lookupName);
      Globals.stdOutPrintln("");
      Globals.stdErrPrintln(ar.getString(ar.I_OBJ_QUERY_FAILED));
      return (1);
  }

  if (object != null) {
      /*
       * Print the object.
       */
             ObjMgrPrinter omp = new ObjMgrPrinter(2, 4);
      omp.printJMSObject(object);
      Globals.stdOutPrintln("");

      ObjMgrPrinter.printReadOnly(((AdministeredObject)object).isReadOnly());
  } else
  // object == null
  // Should not happen, since if the object cannot be retrieved,
  // it should throw NameNotFoundException
      Globals.stdErrPrintln(
      ar.getKString(ar.E_CANNOT_LOC_OBJ, lookupName));
     
      exitcode = 1;
  }

  if (exitcode == 0)  {
      Globals.stdOutPrintln("");
      Globals.stdOutPrintln(ar.getString(ar.I_OBJ_QUERIED));
  } else  {
      Globals.stdOutPrintln("");
      Globals.stdOutPrintln(ar.getString(ar.I_OBJ_QUERY_FAILED));
  }

  return (exitcode);
    }

    private void printListCmdDescription(String type,
        ObjStoreAttrs osa) {
        String typeString = Utils.getObjTypeString(type);

  if (typeString == null)  {
      Globals.stdOutPrintln(ar.getString(ar.I_LIST_CMD_DESC_INTRO));
  } else  {
      Globals.stdOutPrintln(ar.getString(ar.I_LIST_CMD_DESC_INTRO_TYPE,
      typeString));
  }

  Globals.stdOutPrintln("");

        ObjMgrPrinter omp = new ObjMgrPrinter(osa, 2, 4);
        omp.print();
  Globals.stdOutPrintln("");
    }

    private int runListCommand(ObjMgrProperties objMgrProps) {

  int exitcode = 0;

  /*
   * Check if a type was specified otherwise
    * just list all jms objs.
   */
        ObjStore os;
  String type = objMgrProps.getObjType();
  ObjStoreAttrs osa = objMgrProps.getObjStoreAttrs();

  /*
   * Check for any mandatory bind attrs and display warning,
   * if necessary.
   */
  checkObjStoreAttrs(osa);

        /*
         * Check if -f (force) was specified on cmd line.
         */
        boolean force = objMgrProps.forceModeSet();

        printListCmdDescription(type, osa);

        os = createStore(osa);
        if (os == null)  {
            Globals.stdOutPrintln("");
            Globals.stdOutPrintln(ar.getString(ar.I_OBJ_LIST_FAILED));
            return(1);
        }

        /*
         * Prompt for missing authentication info BEFORE opening the store.
         */
        if (!force) {
            // Update ObjStoreAttrs in ths ObjStore if some security
            // info was missing.
            os = promptForAuthentication(os);
        }

        /*
         * Open/Initialize the object store.
         */
        try {
            openStore(os);

        } catch (Exception e) {
            handleRunCommandExceptions(e);
            Globals.stdOutPrintln("");
            Globals.stdOutPrintln(ar.getString(ar.I_OBJ_LIST_FAILED));
            return(1);
        }

  if (type != null) {
      exitcode = listByType(os, type);
  }
  else {
      exitcode = listAll(os);
  }

  if (exitcode == 0)  {
      Globals.stdOutPrintln("");
      Globals.stdOutPrintln(ar.getString(ar.I_OBJ_LISTED));
  } else  {
      Globals.stdOutPrintln("");
      Globals.stdErrPrintln(ar.getString(ar.I_OBJ_LIST_FAILED));
  }

  return (exitcode);
    }

    private void printUpdateCmdDescription(String type,
        String lookupName,
        Properties objProps,
        ObjStoreAttrs osa,
        String readOnlyValue) {
        String typeString = null;

  /*
   * Commented out for now to avoid creation of the tempObj
   * for now. If a bad object type was specified for update,
   * the creation code would fail. The type checking code
   * is later on in runUpdateCommand().
   *
        typeString = Utils.getObjTypeString(type);
  */

  if (typeString != null)  {
      /*
       * Create JMS Object with the specified properties.
       * We don't really need to print all the object's
       * attributes since we only want to show the attributes
       * that will be updated. These attributes are stored in
       * 'objProps'. The JMS Object is created here so we
       * can get a hold of the attribute/property labels.
       */
      Object tempObj = null;
       try {
                if (type.equals(OBJMGR_TYPE_QUEUE)) {
              tempObj = JMSObjFactory.createQueue(objProps);
                } else if (type.equals(OBJMGR_TYPE_TOPIC)) {
              tempObj = JMSObjFactory.createTopic(objProps);
                } else if (type.equals(OBJMGR_TYPE_QCF)) {
              tempObj = JMSObjFactory.createQueueConnectionFactory(objProps);
                } else if (type.equals(OBJMGR_TYPE_TCF)) {
              tempObj = JMSObjFactory.createTopicConnectionFactory(objProps);
                } else if (type.equals(OBJMGR_TYPE_CF)) {
              tempObj = JMSObjFactory.createConnectionFactory(objProps);
                } else if (type.equals(OBJMGR_TYPE_XTCF)) {
              tempObj = JMSObjFactory.createXATopicConnectionFactory(objProps);
                } else if (type.equals(OBJMGR_TYPE_XQCF)) {
              tempObj = JMSObjFactory.createXAQueueConnectionFactory(objProps);
                } else if (type.equals(OBJMGR_TYPE_XCF)) {
              tempObj = JMSObjFactory.createXAConnectionFactory(objProps);
                }

       } catch (Exception e) {
                handleRunCommandExceptions(e, lookupName);
                Globals.stdOutPrintln("");
                Globals.stdOutPrintln(ar.getString(ar.I_OBJ_ADD_FAILED));
                return;
        }

      Globals.stdOutPrintln(ar.getString(ar.I_UPDATE_CMD_DESC_INTRO_TYPE,
      typeString));

      Globals.stdOutPrintln(lookupName);
      Globals.stdOutPrintln("");
      Globals.stdOutPrintln(ar.getString(ar.I_UPDATE_CMD_DESC_LOOKUP));
      Globals.stdOutPrintln("");

            ObjMgrPrinter omp = new ObjMgrPrinter(objProps, 2, 4);
            omp.print();

  } else  {
      Globals.stdOutPrintln(ar.getString(ar.I_UPDATE_CMD_DESC_INTRO));
      Globals.stdOutPrintln("");
      Globals.stdOutPrintln(lookupName);
      Globals.stdOutPrintln("");
      Globals.stdOutPrintln(ar.getString(ar.I_UPDATE_CMD_DESC_LOOKUP));
      Globals.stdOutPrintln("");

            ObjMgrPrinter omp = new ObjMgrPrinter(objProps, 2, 4);
            omp.print();
  }
  Globals.stdOutPrintln("");

  ObjMgrPrinter.printReadOnly(readOnlyValue);
  Globals.stdOutPrintln("");

  Globals.stdOutPrintln(ar.getString(ar.I_UPDATE_CMD_DESC_STORE));
  Globals.stdOutPrintln("");

        ObjMgrPrinter omp = new ObjMgrPrinter(osa, 2, 4);
        omp.print();
  Globals.stdOutPrintln("");
    }

    private int runUpdateCommand(ObjMgrProperties objMgrProps) {
  int exitcode = 0;
  String input = null;
  Object object = null;
  String type = null;
        ObjStore os;
  String yes, yesShort, no, noShort;

  yes = ar.getString(ar.Q_RESPONSE_YES);
  yesShort = ar.getString(ar.Q_RESPONSE_YES_SHORT);
  no = ar.getString(ar.Q_RESPONSE_NO);
  noShort = ar.getString(ar.Q_RESPONSE_NO_SHORT);

  /*
   * Get the lookup name
   */
  String lookupName = objMgrProps.getLookupName();

  /*
   * Check if -f (force) was specified on cmd line.
   */
  boolean force = objMgrProps.forceModeSet();

  ObjStoreAttrs osa = objMgrProps.getObjStoreAttrs();
  /*
   * Check for any mandatory bind attrs and display warning,
   * if necessary.
   */
  checkObjStoreAttrs(osa);

        Properties objProps = objMgrProps.getObjProperties();
  type = objMgrProps.getObjType();

        Attributes bindAttrs = objMgrProps.getBindAttrs();

        printUpdateCmdDescription(type, lookupName, objProps, osa,
        objMgrProps.readOnlyValue());

        os = createStore(osa);
        if (os == null)  {
            Globals.stdOutPrintln("");
            Globals.stdOutPrintln(ar.getString(ar.I_OBJ_UPDATE_FAILED));
            return(1);
        }

        /*
         * Prompt for missing authentication info BEFORE opening the store.
         */
        if (!force) {
            // Update ObjStoreAttrs in ths ObjStore if some security
            // info was missing.
            os = promptForAuthentication(os);
        }

        /*
         * Open/Initialize the object store.
         */
        try {
            openStore(os);

        } catch (Exception e) {
            handleRunCommandExceptions(e, lookupName);
            Globals.stdOutPrintln("");
            Globals.stdOutPrintln(ar.getString(ar.I_OBJ_UPDATE_FAILED));
            return(1);
        }

        /*
   * Updates only work if the object already exists
   * so check if one already exists.
   */
  try  {
      object = os.retrieve(lookupName);

        } catch (NameNotFoundException nnfe) {
            Globals.stdErrPrintln(
                ar.getKString(ar.E_CANNOT_LOC_OBJ, lookupName));
      Globals.stdOutPrintln("");
            Globals.stdErrPrintln(ar.getString(ar.I_OBJ_UPDATE_FAILED));
      return (1);

  } catch (Exception e)  {
      handleRunCommandExceptions(e, lookupName);
      Globals.stdOutPrintln("");
            Globals.stdErrPrintln(ar.getString(ar.I_OBJ_UPDATE_FAILED));
      return (1);
  }

  /*
   * Check here if the type being updated and the
   * type specified match.
   */
  if (object != null) {
      type = checkObjectType(object, type);
      if (type == null)  {
          Globals.stdOutPrintln("");
                Globals.stdErrPrintln(ar.getString(ar.I_OBJ_UPDATE_FAILED));
    return (1);
      }
  } else {
        // object == null
        // Should not happen, since if the object cannot be retrieved,
        // it should throw NameNotFoundException
            Globals.stdErrPrintln(
                ar.getKString(ar.E_CANNOT_LOC_OBJ, lookupName));
      Globals.stdOutPrintln("");
            Globals.stdErrPrintln(ar.getString(ar.I_OBJ_UPDATE_FAILED));
      return (1);
        }

  if (!force) {
      // Object already exists so confirm with user.
            //runQueryCommand(os, objMgrProps);
      if (object != null) {

    // Check to see if the retrieved object's version is
    // compatible with the current product version.
    // No need to check for invalid/missing version number, as
    // an exception must have been already thrown if that
    // was the case.
    if (object instanceof AdministeredObject) {
        AdministeredObject adminObj = (AdministeredObject)object;
        String curVersion = adminObj.getVERSION();
        String objVersion = adminObj.getStoredVersion();

        if (!adminObj.isStoredVersionCompatible()) {
      Globals.stdErrPrintln(ar.getString(ar.W_INCOMPATIBLE_OBJ, objVersion, curVersion));
       
    }
          input = getUserInput(ar.getString(ar.Q_UPDATE_OK), noShort);
      }
  }

  if (noShort.equalsIgnoreCase(input) || no.equalsIgnoreCase(input)) {
      Globals.stdOutPrintln("");
      Globals.stdOutPrintln(ar.getString(ar.I_OBJ_NOT_UPDATED));

  /*
   * Case where user typed 'y' or 'yes' to overwrite OR 
   * case where object doesn't exist yet so no confirmation needed OR
   * case where user used -f.
   */
  } else if (((yesShort.equalsIgnoreCase(input) ||
         yes.equalsIgnoreCase(input)) ||
       (force)) &&
       (object != null)) {

      /*
       * Update the object with the new properties.
       */
      Object updatedObject = updateObject(object, type, objMgrProps);
      if (updatedObject == null)
          return 1;

      /*
       * Add the object to object store.
       */
      try  {
                if (bindAttrs.size() > 0)
                    os.add(lookupName, updatedObject, bindAttrs, true);
                else
                    os.add(lookupName, updatedObject, true);

      } catch (NameAlreadyExistsException naee) {
    // Should never happen, since we pass true to add
    exitcode = 1;

      } catch (Exception e)  {
    handleRunCommandExceptions(e, lookupName);
    exitcode = 1;
      }

      if (exitcode == 0)  {
    if (!force)
                    Globals.stdErrPrintln("");
          Globals.stdOutPrintln(ar.getString(ar.I_OBJ_UPDATED));
      } else  {
                Globals.stdErrPrintln("");
                Globals.stdErrPrintln(ar.getString(ar.I_OBJ_UPDATE_FAILED));
      }
  } else {
      Globals.stdOutPrintln(ar.getString(ar.I_UNRECOGNIZED_RES, input));
            Globals.stdErrPrintln("");
      Globals.stdOutPrintln(ar.getString(ar.I_OBJ_NOT_UPDATED));

      exitcode = 1;
  }
 
  return (exitcode);
    }

    private String checkObjectType(Object object, String type) {

  //
  // No type specified, so set the type to the same one
  // that we're updating.
  //
  if (type == null) {
      if (object instanceof com.sun.messaging.Topic)
    type = OBJMGR_TYPE_TOPIC;
      else if (object instanceof com.sun.messaging.Queue)
    type = OBJMGR_TYPE_QUEUE;
      else if (object instanceof com.sun.messaging.XAQueueConnectionFactory)
    type = OBJMGR_TYPE_XQCF;
      else if (object instanceof com.sun.messaging.XATopicConnectionFactory)
    type = OBJMGR_TYPE_XCF;
      else if (object instanceof com.sun.messaging.XAConnectionFactory)
    type = OBJMGR_TYPE_XTCF;
      else if (object instanceof com.sun.messaging.TopicConnectionFactory)
    type = OBJMGR_TYPE_TCF;
      else if (object instanceof com.sun.messaging.QueueConnectionFactory)
    type = OBJMGR_TYPE_QCF;
      else if (object instanceof com.sun.messaging.ConnectionFactory)
    type = OBJMGR_TYPE_CF;
  }
  //
  // Verify that the specified type is the same type as the
  // object we're updating.
  //
        else if (!(((object instanceof com.sun.messaging.Topic) &&
               OBJMGR_TYPE_TOPIC.equals(type)) ||
            ((object instanceof com.sun.messaging.Queue) &&
               OBJMGR_TYPE_QUEUE.equals(type)) ||
            ((object instanceof com.sun.messaging.XATopicConnectionFactory) &&
               OBJMGR_TYPE_XTCF.equals(type)) ||
            ((object instanceof com.sun.messaging.XAQueueConnectionFactory) &&
               OBJMGR_TYPE_XQCF.equals(type)) ||
            ((object instanceof com.sun.messaging.XAConnectionFactory) &&
               OBJMGR_TYPE_XCF.equals(type)) ||
            ((object instanceof com.sun.messaging.QueueConnectionFactory) &&
               OBJMGR_TYPE_QCF.equals(type)) ||
            ((object instanceof com.sun.messaging.TopicConnectionFactory) &&
               OBJMGR_TYPE_TCF.equals(type)) ||
            ((object instanceof com.sun.messaging.ConnectionFactory) &&
               OBJMGR_TYPE_CF.equals(type)))) {

            Globals.stdErrPrintln(
    ar.getString(ar.I_ERROR_MESG),
    ar.getKString(ar.E_OBJ_TYPES_NOT_SAME));

      // Type mismatch.  Returns null.
      return null;
        }
        return type;
    }

    /*
     * Called from runUpdateCommand() after we confirmed
     * the object can be updated.
     * Returns an object updated with the new properties.
     */
    private Object updateObject(Object object, String type,
      ObjMgrProperties objMgrProps) {

        Properties objProps = objMgrProps.getObjProperties();
  Object updatedObject = null;
  String readOnlyValue = objMgrProps.readOnlyValue();

  try {
            if (type.equals(OBJMGR_TYPE_QUEUE)) {
          updatedObject = JMSObjFactory.updateQueue(object, objProps,
                  readOnlyValue);
            } else if (type.equals(OBJMGR_TYPE_TOPIC)) {
          updatedObject = JMSObjFactory.updateTopic(object, objProps,
                  readOnlyValue);
            } else if (type.equals(OBJMGR_TYPE_QCF)) {
          updatedObject = JMSObjFactory.updateQueueConnectionFactory
          (object, objProps, readOnlyValue);
            } else if (type.equals(OBJMGR_TYPE_TCF)) {
          updatedObject = JMSObjFactory.updateTopicConnectionFactory
          (object, objProps, readOnlyValue);
            } else if (type.equals(OBJMGR_TYPE_CF)) {
          updatedObject = JMSObjFactory.updateConnectionFactory
          (object, objProps, readOnlyValue);
            } else if (type.equals(OBJMGR_TYPE_XQCF)) {
          updatedObject = JMSObjFactory.updateXAQueueConnectionFactory
          (object, objProps, readOnlyValue);
            } else if (type.equals(OBJMGR_TYPE_XTCF)) {
          updatedObject = JMSObjFactory.updateXATopicConnectionFactory
          (object, objProps, readOnlyValue);
            } else if (type.equals(OBJMGR_TYPE_XCF)) {
          updatedObject = JMSObjFactory.updateXAConnectionFactory
          (object, objProps, readOnlyValue);
            }

  } catch (Exception e) {
            handleRunCommandExceptions(e);
            Globals.stdOutPrintln("");
            Globals.stdOutPrintln(ar.getString(ar.I_OBJ_UPDATE_FAILED));
            return null;
  }

  return updatedObject;

    }

    /**
     * List JMS administration objects of particular type.
     */
    private int listByType(ObjStore os, String type) {
        Vector v = null;

        try {
            v = os.list();

        } catch (NameNotFoundException nnfe) {
            Globals.stdErrPrintln(
                ar.getString(ar.I_ERROR_MESG),
                ar.getKString(ar.E_CANNOT_LOC_TREE));
      return (1);

        } catch (Exception e) {
      handleRunCommandExceptions(e);
      return (1);
        }

  ObjMgrPrinter omp = new ObjMgrPrinter(2, 4);
  String[] row = new String[2];

  row[0] = ar.getString(ar.I_JNDI_LOOKUPNAME);
  row[1] = ar.getString(ar.I_OBJ_CLASS_NAME);
  omp.addTitle(row);

  for (int i = 0; i < v.size(); i++) {
      NameClassPair obj = (NameClassPair)v.get(i);
            if ((type.equals(OBJMGR_TYPE_TOPIC) &&
                 com.sun.messaging.Topic.class.getName().
      equals(obj.getClassName())) ||
                (type.equals(OBJMGR_TYPE_QUEUE) &&
                 com.sun.messaging.Queue.class.getName().
      equals(obj.getClassName()))
    ||
                (type.equals(OBJMGR_TYPE_TCF) &&
                 com.sun.messaging.TopicConnectionFactory.class.getName().
                      equals(obj.getClassName())) ||
                (type.equals(OBJMGR_TYPE_QCF) &&
                 com.sun.messaging.QueueConnectionFactory.class.getName().
                      equals(obj.getClassName()))  ||
                (type.equals(OBJMGR_TYPE_CF) &&
                 com.sun.messaging.ConnectionFactory.class.getName().
                      equals(obj.getClassName()))  ||
                (type.equals(OBJMGR_TYPE_XTCF) &&
                 com.sun.messaging.XATopicConnectionFactory.class.getName().
                      equals(obj.getClassName())) ||
                (type.equals(OBJMGR_TYPE_XQCF) &&
                 com.sun.messaging.XAQueueConnectionFactory.class.getName().
                      equals(obj.getClassName())) ||
                (type.equals(OBJMGR_TYPE_XCF) &&
                 com.sun.messaging.XAConnectionFactory.class.getName().
                      equals(obj.getClassName())))
    {

    row[0] = ((NameClassPair)obj).getName();
    row[1] = ((NameClassPair)obj).getClassName();
    omp.add(row);
            }
        }
  omp.print();
 
  return (0);
    }

    /**
     * List JMS administration objects.
     */
    private int listAll(ObjStore os) {

        Vector v = null;

        try {
            v = os.list();

  } catch (NameNotFoundException nnfe) {
            Globals.stdErrPrintln(
                ar.getString(ar.I_ERROR_MESG),
                ar.getKString(ar.E_CANNOT_LOC_TREE));
      return (1);

        } catch (Exception e) {
      handleRunCommandExceptions(e);
      return (1);
        }

        ObjMgrPrinter omp = new ObjMgrPrinter(2, 4);
  String[] row = new String[2];

  row[0] = ar.getString(ar.I_JNDI_LOOKUPNAME);
  row[1] = ar.getString(ar.I_OBJ_CLASS_NAME);
  omp.addTitle(row);

  for (int i = 0; i < v.size(); i++) {
            NameClassPair obj = (NameClassPair)v.get(i);
            if ((com.sun.messaging.Topic.class.getName().
                 equals(obj.getClassName())) ||
                (com.sun.messaging.Queue.class.getName().
                 equals(obj.getClassName())) ||
                (com.sun.messaging.TopicConnectionFactory.class.getName().
                 equals(obj.getClassName())) ||
                (com.sun.messaging.QueueConnectionFactory.class.getName().
                 equals(obj.getClassName())) ||
                (com.sun.messaging.ConnectionFactory.class.getName().
                 equals(obj.getClassName())) ||
                (com.sun.messaging.XATopicConnectionFactory.class.getName().
                 equals(obj.getClassName())) ||
                (com.sun.messaging.XAQueueConnectionFactory.class.getName().
                 equals(obj.getClassName())) ||
                (com.sun.messaging.XAConnectionFactory.class.getName().
                 equals(obj.getClassName())))
      {
    row[0] = ((NameClassPair)obj).getName();
    row[1] = ((NameClassPair)obj).getClassName();
    omp.add(row);
            }
        }
  omp.print();

  return (0);
    }

    /**
     * Return user input. Return null if an error occurred.
     */
    private String getUserInput(String question)  {
  return (getUserInput(question, null));
    }

    /**
     * Return user input. Return <defaultResponse> if no response ("") was
     * givem. Return null if an error occurred.
     */
    private String getUserInput(String question, String defaultResponse)  {

        try {
            BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
      Globals.stdOutPrint(question);
      String s = in.readLine();

            if (s.equals("") && (defaultResponse != null))  {
                s = defaultResponse;
            }

            return(s);
        } catch (IOException ex) {
            Globals.stdErrPrintln(
    ar.getString(ar.I_ERROR_MESG),
    ar.getKString(ar.E_PROB_GETTING_USR_INPUT));
            return null;
        }
    }   

    /**
     * Return user input without echoing, if possible. 
     */
    private String getPassword(String question)  {

  Password pw = new Password();
    if (pw.echoPassword()) {
        Globals.stdOutPrintln(ar.getString(ar.W_ECHO_PASSWORD));
    }
  Globals.stdOutPrint(question);
  return pw.getPassword();
    }   

    /*
     * Handles exceptions that may be thrown when operations are performed.
     */
    private void handleRunCommandExceptions(Exception e) {
  handleRunCommandExceptions(e, null);
    }

    /*
     * Handles exceptions that may be thrown when operations are performed.
     */
    private void handleRunCommandExceptions(Exception e, String lookupName) {

  if (e instanceof InitializationException) {
            Globals.stdErrPrintln(
    ar.getString(ar.I_ERROR_MESG),
    ar.getKString(ar.E_NO_OBJ_CREATOR));
/*
  This case should be taken care of by each command, so there is
  no need to cath it here
        } else if (e instanceof NameNotFoundException) {

  This should only happen when adding, but we do the check in
  runAddCommand() so this should never happen
        } else if (e instanceof NameAlreadyExistsException) {
*/
        } else if (e instanceof AuthenticationException) {
            Globals.stdErrPrintln(
    ar.getString(ar.I_ERROR_MESG),
    ar.getKString(ar.E_INVALID_UN_OR_PASSWD));

        } else if (e instanceof AuthenticationNotSupportedException) {
            Globals.stdErrPrintln(
    ar.getString(ar.I_ERROR_MESG),
    ar.getKString(ar.E_NONSUPPORTED_AUTH_TYPE));

        } else if (e instanceof NoPermissionException) {
            Globals.stdErrPrintln(
    ar.getString(ar.I_ERROR_MESG),
    ar.getKString(ar.E_NO_PERMISSION));

        } else if (e instanceof CommunicationException) {
            Globals.stdErrPrintln(
    ar.getString(ar.I_ERROR_MESG),
    ar.getKString(ar.E_NO_COMMUNICATION));

        } else if (e instanceof InvalidPropertyException) {
            Globals.stdErrPrintln(
                ar.getString(ar.I_ERROR_MESG),
                ar.getKString(ar.E_INVALID_PROPNAME, e.getMessage()));
            Globals.stdErrPrintln("");
      Globals.stdErrPrintln(ar.getString(ar.I_VALID_PROPNAMES));
 
        } else if (e instanceof InvalidPropertyValueException) {
            Globals.stdErrPrintln(
                ar.getString(ar.I_ERROR_MESG),
                ar.getKString(ar.E_INVALID_PROP_VALUE, e.getMessage()));

        } else if (e instanceof ReadOnlyPropertyException) {
            Globals.stdErrPrintln(
                ar.getString(ar.I_ERROR_MESG),
                ar.getKString(ar.E_CANT_MOD_READONLY));
 
        } else if (e instanceof SchemaViolationException) {
            Globals.stdErrPrintln(
    ar.getString(ar.I_ERROR_MESG),
    ar.getKString(ar.E_INVALID_SYNTAX));
/*
  Can't think of any situations.  Might be needed when
  we support attribute-based search
        } else if (e instanceof InvalidAttributesException) {
*/
  // REVISIT:
  // these exceptions are thrown by com.sun.messaging.naming package
        // once it becomes more solid we may create a subexception for each
        } else if (e instanceof GeneralNamingException) {
      Exception newe = (((GeneralNamingException)e)).getLinkedException();

      if (newe instanceof UnsupportedVersionNumberException) {
                Globals.stdErrPrintln(
        ar.getString(ar.I_ERROR_MESG),
        ar.getKString(ar.E_UNSUPP_VER_NUMBER,
         ((UnsupportedVersionNumberException)newe).getExplanation(), lookupName));

            } else if (newe instanceof MissingVersionNumberException) {
                Globals.stdErrPrintln(
        ar.getString(ar.I_ERROR_MESG),
        ar.getKString(ar.E_MISSING_VER_NUMBER, lookupName));
      } else  {
                Globals.stdErrPrintln(newe.toString());
      }

        } else if (e instanceof ObjStoreException) {
            Globals.stdErrPrintln(
    ar.getString(ar.I_ERROR_MESG),
    ar.getKString(ar.E_GEN_OP_FAILED));
      Globals.stdErrPrintln(e.toString());
      Globals.stdErrPrintln(((ObjStoreException)e).getLinkedException().toString());

        } else {
            Globals.stdErrPrintln(
    ar.getString(ar.I_ERROR_MESG),
    ar.getKString(ar.X_GENERAL_EXCEPTION));
      Globals.stdErrPrintln(e.toString());
  }
    }

    /*
     * Handles initiliization-related exceptions.
     * Currently, there are only two types of exceptions
     * that could possibly be thrown:
     * 1.  InitializationException
     * 2.  NameNotFoundException
     *
     * Sun's implementation of ldap sp does not check for
     * its validity until when the operation is performed, so
     * there really isn't any that we can catch at this point.
     */
    private void handleInitializationExceptions(Exception e) {
  handleRunCommandExceptions(e);
    }

    private void checkObjStoreAttrs(ObjStoreAttrs osa) {

  String[] mandatoryAttrs = {Context.INITIAL_CONTEXT_FACTORY,
                                   Context.PROVIDER_URL};
  for (int i = 0; i < mandatoryAttrs.length; i++) {
      String propName = (String)(osa.get(mandatoryAttrs[i]));
            if (propName == null) {
          Globals.stdErrPrintln(ar.getString(ar.W_JNDI_PROPERTY_WARNING, mandatoryAttrs[i]));
      }
  }
  System.out.println("");
    }

    /*
     * Prompts for authentication and stores the missing security info.
     * Individual store knows what to ask, so all this has to do is
     * to go through the Vector of missing security attributes and
     * and ask for the missing values, given the name of the attribute.
     */
    private ObjStore promptForAuthentication(ObjStore os) {
        /*
         *Retrieve the original ObjStoreAttrs that the user input.
         *This DOES NOT read any jndi property files processed by jndi
         * since this is done PRIOR to creating the initialContext.
         */
        ObjStoreAttrs osa = os.getObjStoreAttrs();
        Vector missingAuthInfo = os.checkAuthentication(osa);
        int missingAuthInfoSize = missingAuthInfo.size();

        boolean carriageReturnNeeded = false;
        if (missingAuthInfo != null) {
            for (int i = 0; i < missingAuthInfoSize; i++) {
                carriageReturnNeeded = true;
                String name = (String)missingAuthInfo.elementAt(i);
    String value = null;
    // If prompting for "credentials", use the one that doesn't echo.
    if (name.equals(Context.SECURITY_CREDENTIALS)) {
                    value = getPassword(ar.getString(ar.Q_ENTER_VALUE, name));
    } else {
                    value = getUserInput(ar.getString(ar.Q_ENTER_VALUE, name));
    }
                os.addObjStoreAttr(name, value);
            }
            if (carriageReturnNeeded)
                Globals.stdOutPrintln("");
        }
        return os;
    }
}
TOP

Related Classes of com.sun.messaging.jmq.admin.apps.objmgr.CmdRunner

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.