001 /**
002 *
003 * Copyright 2003-2004 The Apache Software Foundation
004 *
005 * Licensed under the Apache License, Version 2.0 (the "License");
006 * you may not use this file except in compliance with the License.
007 * You may obtain a copy of the License at
008 *
009 * http://www.apache.org/licenses/LICENSE-2.0
010 *
011 * Unless required by applicable law or agreed to in writing, software
012 * distributed under the License is distributed on an "AS IS" BASIS,
013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014 * See the License for the specific language governing permissions and
015 * limitations under the License.
016 */
017
018 package javax.activation;
019
020 import java.beans.Beans;
021 import java.io.Externalizable;
022 import java.io.IOException;
023 import java.io.ObjectInputStream;
024
025 /**
026 * @version $Rev: 123383 $ $Date: 2004-12-26 19:11:00 -0800 (Sun, 26 Dec 2004) $
027 */
028 public class CommandInfo {
029 private final String commandName;
030 private final String commandClass;
031
032 /**
033 * Constructor for a CommandInfo
034 *
035 * @param commandName the command name
036 * @param commandClass the name of the command's implementation class
037 */
038 public CommandInfo(String commandName, String commandClass) {
039 this.commandName = commandName;
040 this.commandClass = commandClass;
041 }
042
043 /**
044 * Return the command name.
045 *
046 * @return the command name
047 */
048 public String getCommandName() {
049 return commandName;
050 }
051
052 /**
053 * Return the implementation class name.
054 *
055 * @return the name of the command's implementation class; may be null
056 */
057 public String getCommandClass() {
058 return commandClass;
059 }
060
061 /**
062 * Instantiate and return a command JavaBean.
063 * The bean is created using Beans.instantiate(loader, commandClass).
064 * If the new bean implements CommandObject then its setCommandContext(String, DataHandler)
065 * method is called.
066 * Otherwise if it implements Externalizable and the supplied DataHandler is not null
067 * then its readExternal(ObjectInputStream) method is called with a stream obtained from
068 * DataHandler.getInputStream().
069 *
070 * @param dh a DataHandler that provides the data to be passed to the command
071 * @param loader the ClassLoader to be used to instantiate the command
072 * @return a new command instance
073 * @throws IOException if there was a problem initializing the command
074 * @throws ClassNotFoundException if the command class could not be found
075 */
076 public Object getCommandObject(DataHandler dh, ClassLoader loader) throws IOException, ClassNotFoundException {
077 Object bean = Beans.instantiate(loader, commandClass);
078 if (bean instanceof CommandObject) {
079 ((CommandObject) bean).setCommandContext(commandName, dh);
080 } else if (bean instanceof Externalizable && dh != null) {
081 ((Externalizable) bean).readExternal(new ObjectInputStream(dh.getInputStream()));
082 }
083 return bean;
084 }
085 }