1 17 18 package org.apache.james.imapserver.commands; 19 20 import org.apache.james.imapserver.AccessControlException; 21 import org.apache.james.imapserver.ImapRequest; 22 import org.apache.james.imapserver.ImapSession; 23 import org.apache.james.imapserver.ImapSessionState; 24 import org.apache.james.imapserver.MailboxException; 25 26 import java.util.Collection ; 27 import java.util.Iterator ; 28 import java.util.StringTokenizer ; 29 import java.util.List ; 30 31 37 38 class ListCommand extends AuthenticatedSelectedStateCommand 39 { 40 public ListCommand() 41 { 42 this.commandName = "LIST"; 43 44 this.getArgs().add( new AstringArgument( "reference name" ) ); 45 this.getArgs().add( new AstringArgument( "mailbox" ) ); 46 } 47 48 protected boolean doProcess( ImapRequest request, ImapSession session, List argValues ) 49 { 50 String command = this.commandName; 51 52 boolean subscribeOnly; 53 if ( command.equalsIgnoreCase( "LIST" ) ) { 54 subscribeOnly = false; 55 } 56 else { 57 subscribeOnly = true; 58 } 59 60 String reference = (String ) argValues.get( 0 ); 61 String folder = (String ) argValues.get( 1 ); 62 63 Collection list = null; 64 try { 65 System.out.println("getImapHost: "+session.getImapHost().getClass().getName()); 66 list = session.getImapHost().listMailboxes( session.getCurrentUser(), reference, folder, 67 subscribeOnly ); 68 if ( list == null ) { 69 session.noResponse( command, " unable to interpret mailbox" ); 70 } 71 else if ( list.size() == 0 ) { 72 getLogger().debug( "List request matches zero mailboxes: " + request.getCommandRaw() ); 73 session.okResponse( command ); 74 } 75 else { 76 Iterator it = list.iterator(); 77 while ( it.hasNext() ) { 78 String listResponse = (String ) it.next(); 79 session.getOut().println( UNTAGGED + SP + command.toUpperCase() 80 + SP + listResponse ); 81 getLogger().debug( UNTAGGED + SP + command.toUpperCase() 82 + SP + listResponse ); 83 } 84 session.okResponse( command ); 85 } 86 } 87 catch ( MailboxException mbe ) { 88 if ( mbe.isRemote() ) { 89 session.noResponse( command, "[REFERRAL " 90 + mbe.getRemoteServer() + "]" 91 + SP + "Wrong server. Try remote." ); 92 } 93 else { 94 session.noResponse( command, "No such mailbox" ); 95 } 96 return true; 97 } 98 catch ( AccessControlException ace ) { 99 session.noResponse( command, "No such mailbox" ); 100 session.logACE( ace ); 101 return true; 102 } 103 104 if ( session.getState() == ImapSessionState.SELECTED ) { 105 session.checkSize(); 106 session.checkExpunge(); 107 } 108 return true; 109 } 110 } 111 | Popular Tags |