KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > coldcore > coloradoftp > command > impl > ftp > HelpCommand


1 package com.coldcore.coloradoftp.command.impl.ftp;
2
3 import com.coldcore.coloradoftp.command.CommandFactory;
4 import com.coldcore.coloradoftp.command.Reply;
5 import com.coldcore.coloradoftp.command.Command;
6 import com.coldcore.coloradoftp.command.impl.AbstractCommand;
7 import com.coldcore.coloradoftp.factory.ObjectFactory;
8 import com.coldcore.coloradoftp.factory.ObjectName;
9 import org.apache.log4j.Logger;
10
11 import java.util.ArrayList JavaDoc;
12 import java.util.Collections JavaDoc;
13 import java.util.Comparator JavaDoc;
14 import java.util.List JavaDoc;
15
16 /**
17  * Command HELP.
18  * See FTP spec for details on the command.
19  *
20  * This implementation can also be used as FEAT command.
21  */

22 public class HelpCommand extends AbstractCommand {
23
24   private static Logger log = Logger.getLogger(HelpCommand.class);
25
26
27   public Reply execute() {
28     Reply reply = getReply();
29
30     //Get all available commands
31
CommandFactory commandFactory = (CommandFactory) ObjectFactory.getObject(ObjectName.COMMAND_FACTORY);
32     List JavaDoc<String JavaDoc> commandNames = new ArrayList JavaDoc<String JavaDoc>(commandFactory.listNames());
33
34     String JavaDoc pcmd = getParameter().toUpperCase();
35     if (pcmd.length() > 0) {
36       if (commandNames.contains(pcmd)) {
37         //Command is supported
38
log.debug("Command "+pcmd+" is supported");
39         replyOnExistingCommand(pcmd);
40         return reply;
41       } else {
42         //Command is not supported
43
log.debug("Command "+pcmd+" is not supported");
44         replyOnUnexistingCommand(pcmd);
45         return reply;
46       }
47     }
48
49     //No parameter
50
replyOnNoCommand();
51
52     return reply;
53   }
54
55
56   /** Called when existing/supported command provided as an argument to form an appropriare reply
57    * @param command Command name
58    */

59   protected void replyOnExistingCommand(String JavaDoc command) {
60     //Create a child command
61
CommandFactory commandFactory = (CommandFactory) ObjectFactory.getObject(ObjectName.COMMAND_FACTORY);
62     Command cmd = commandFactory.create(command+"\r\n");
63     cmd.setConnection(getConnection());
64
65     Reply reply = getReply();
66
67     //Execute the child
68
Reply rpl = cmd.executeOnParent(this);
69     if (rpl != null) {
70       //Child provided a reply - use it
71
reply.setCode(rpl.getCode());
72       reply.setText(rpl.getText());
73     } else {
74       //Child dit not provided a reply - use the default (as FEAT requires)
75
StringBuffer JavaDoc sb = new StringBuffer JavaDoc("Supported command:\r\n");
76       sb.append(command).append("\r\nend"); //Uppercase command on a new line!
77
reply.setCode("211");
78       reply.setText(sb.toString());
79     }
80   }
81
82
83   /** Called when unexisting/unsupported command provided as an argument to form an appropriare reply
84    * @param command Command name
85    */

86   protected void replyOnUnexistingCommand(String JavaDoc command) {
87     Reply reply = getReply();
88     reply.setCode("504");
89     reply.setText("Command not implemented for that parameter.");
90   }
91
92
93   /** Called when no command provided as an argument to form an appropriare reply */
94   protected void replyOnNoCommand() {
95     //Get all available commands
96
CommandFactory commandFactory = (CommandFactory) ObjectFactory.getObject(ObjectName.COMMAND_FACTORY);
97     List JavaDoc<String JavaDoc> commandNames = new ArrayList JavaDoc<String JavaDoc>(commandFactory.listNames());
98
99     //Sort the list of commands
100
Collections.sort(commandNames, new Comparator JavaDoc<String JavaDoc>() {
101       public int compare(String JavaDoc o1, String JavaDoc o2) {
102         return o1.compareToIgnoreCase(o2);
103       }
104     });
105
106     //Form a reply (up to 6 commands in a row)
107
StringBuffer JavaDoc sb = new StringBuffer JavaDoc("Supported commands:\r\n");
108     int i = 0;
109     for (String JavaDoc commandName : commandNames) {
110       sb.append(commandName);
111       if (++i % 6 != 0) sb.append("\t");
112       else sb.append("\r\n");
113     }
114
115     Reply reply = getReply();
116     reply.setCode("214");
117     reply.setText(sb.toString().trim()+"\r\nOther commands unimplemented.");
118   }
119
120 }
121
Popular Tags