KickJava   Java API By Example, From Geeks To Geeks.

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


1 /**
2  * Command LIST.
3  * See FTP spec for details on the command.
4  */

5 package com.coldcore.coloradoftp.command.impl.ftp;
6
7 import com.coldcore.coloradoftp.command.Reply;
8 import com.coldcore.coloradoftp.command.impl.AbstractCommand;
9 import com.coldcore.coloradoftp.connection.DataConnectionMode;
10 import com.coldcore.coloradoftp.factory.ObjectFactory;
11 import com.coldcore.coloradoftp.factory.ObjectName;
12 import com.coldcore.coloradoftp.filesystem.FileSystem;
13 import com.coldcore.coloradoftp.filesystem.ListingFile;
14 import com.coldcore.coloradoftp.session.Session;
15 import com.coldcore.coloradoftp.session.SessionAttributeName;
16 import org.apache.log4j.Logger;
17
18 import java.io.ByteArrayInputStream JavaDoc;
19 import java.nio.channels.Channels JavaDoc;
20 import java.nio.channels.ReadableByteChannel JavaDoc;
21 import java.text.SimpleDateFormat JavaDoc;
22 import java.util.Locale JavaDoc;
23 import java.util.Set JavaDoc;
24
25 public class ListCommand extends AbstractCommand {
26
27   private static Logger log = Logger.getLogger(ListCommand.class);
28
29
30   public Reply execute() {
31     Reply reply = getReply();
32     if (!testLogin()) return reply;
33
34     Session session = controlConnection.getSession();
35     FileSystem fileSystem = (FileSystem) ObjectFactory.getObject(ObjectName.FILESYSTEM);
36
37     String JavaDoc listDir = fileSystem.getCurrentDirectory(session);
38     if (getParameter().length() > 0 &&
39         parameter.indexOf("*") == -1 && !parameter.startsWith("-")) listDir = getParameter();
40
41     Set JavaDoc<ListingFile> list = fileSystem.listDirectory(listDir, session);
42     String JavaDoc prepared = prepareList(list);
43
44     ByteArrayInputStream JavaDoc bin = new ByteArrayInputStream JavaDoc(prepared.getBytes());
45     ReadableByteChannel JavaDoc rbc = Channels.newChannel(bin);
46
47     session.setAttribute(SessionAttributeName.DATA_CONNECTION_MODE, DataConnectionMode.LIST);
48     session.setAttribute(SessionAttributeName.DATA_CONNECTION_CHANNEL, rbc);
49
50     if (!prepareForDataConnection()) return reply;
51
52     reply.setCode("150");
53     reply.setText("Opening A mode data connection for "+listDir+".");
54     return reply;
55   }
56
57
58   /** Convert files list into format FTP client can understand
59    * @param list List of files and directories
60    * @return Prepared string
61    */

62   protected String JavaDoc prepareList(Set JavaDoc<ListingFile> list) {
63     StringBuffer JavaDoc sb = new StringBuffer JavaDoc();
64     SimpleDateFormat JavaDoc sdf = new SimpleDateFormat JavaDoc("MMM dd HH:mm", new Locale JavaDoc("en"));
65     for (ListingFile f : list) {
66       //-rw------- 1 peter 848 Dec 14 11:22 README.txt\r\n
67
sb.append(f.isDirectory() ? "d" : "-").append(f.getPermissions()).append(" ");
68       sb.append("1 ").append(f.getOwner()).append(" ");
69       sb.append(f.getSize()).append(" ");
70       sb.append(sdf.format(f.getLastModified())).append(" ");
71       sb.append(f.getName()).append("\r\n");
72     }
73     log.debug("Directory listing:\n"+sb);
74     return sb.toString();
75   }
76 }
77
Popular Tags