1 /**
2 *
3 * Copyright 2003-2004 The Apache Software Foundation
4 *
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17
18 package javax.activation;
19
20 import java.beans.Beans;
21 import java.io.Externalizable;
22 import java.io.IOException;
23 import java.io.ObjectInputStream;
24
25 /**
26 * @version $Rev: 123383 $ $Date: 2004-12-26 19:11:00 -0800 (Sun, 26 Dec 2004) $
27 */
28 public class CommandInfo {
29 private final String commandName;
30 private final String commandClass;
31
32 /**
33 * Constructor for a CommandInfo
34 *
35 * @param commandName the command name
36 * @param commandClass the name of the command's implementation class
37 */
38 public CommandInfo(String commandName, String commandClass) {
39 this.commandName = commandName;
40 this.commandClass = commandClass;
41 }
42
43 /**
44 * Return the command name.
45 *
46 * @return the command name
47 */
48 public String getCommandName() {
49 return commandName;
50 }
51
52 /**
53 * Return the implementation class name.
54 *
55 * @return the name of the command's implementation class; may be null
56 */
57 public String getCommandClass() {
58 return commandClass;
59 }
60
61 /**
62 * Instantiate and return a command JavaBean.
63 * The bean is created using Beans.instantiate(loader, commandClass).
64 * If the new bean implements CommandObject then its setCommandContext(String, DataHandler)
65 * method is called.
66 * Otherwise if it implements Externalizable and the supplied DataHandler is not null
67 * then its readExternal(ObjectInputStream) method is called with a stream obtained from
68 * DataHandler.getInputStream().
69 *
70 * @param dh a DataHandler that provides the data to be passed to the command
71 * @param loader the ClassLoader to be used to instantiate the command
72 * @return a new command instance
73 * @throws IOException if there was a problem initializing the command
74 * @throws ClassNotFoundException if the command class could not be found
75 */
76 public Object getCommandObject(DataHandler dh, ClassLoader loader) throws IOException, ClassNotFoundException {
77 Object bean = Beans.instantiate(loader, commandClass);
78 if (bean instanceof CommandObject) {
79 ((CommandObject) bean).setCommandContext(commandName, dh);
80 } else if (bean instanceof Externalizable && dh != null) {
81 ((Externalizable) bean).readExternal(new ObjectInputStream(dh.getInputStream()));
82 }
83 return bean;
84 }
85 }