You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by pg...@apache.org on 2002/08/09 21:03:50 UTC

cvs commit: jakarta-james/proposals/imap/java/org/apache/james/imapserver/commands AppendCommand.java

pgoldstein    2002/08/09 12:03:50

  Modified:    proposals/imap/java/org/apache/james/imapserver/commands
                        AppendCommand.java
  Log:
  The newest revision of the IMAP server.
  
  Many thanks to Sascha Kulawik for his extensive work
  on this project.
  
  Revision  Changes    Path
  1.2       +82 -12    jakarta-james/proposals/imap/java/org/apache/james/imapserver/commands/AppendCommand.java
  
  Index: AppendCommand.java
  ===================================================================
  RCS file: /home/cvs/jakarta-james/proposals/imap/java/org/apache/james/imapserver/commands/AppendCommand.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- AppendCommand.java	9 Aug 2002 17:00:53 -0000	1.1
  +++ AppendCommand.java	9 Aug 2002 19:03:50 -0000	1.2
  @@ -20,6 +20,9 @@
   import java.util.StringTokenizer;
   import java.util.List;
   import java.util.Date;
  +import java.util.List;
  +import java.util.ArrayList;
  +import java.util.Iterator;
   import java.io.BufferedReader;
   import java.io.ByteArrayInputStream;
   import java.io.ByteArrayOutputStream;
  @@ -43,16 +46,86 @@
           this.getArgs().add( new AstringArgument( "date" ) );
           this.getArgs().add( new AstringArgument( "message" ) );
       }
  +    
  +    public boolean process( ImapRequest request, ImapSession session ) {
  +        StringTokenizer tokens = request.getCommandLine();
  +        List argValues = new ArrayList();
   
  +        boolean fetchNextTogether = false;
  +        String tokensave = "";
  +        while(tokens.hasMoreTokens()) {
  +            String token = tokens.nextToken();
  +            System.out.println("FOUND TOKEN: "+token);
  +            if (token.startsWith("(") || token.startsWith("\"")) {
  +                // Fetch token
  +                token = token.substring(1); 
  +                if (token.endsWith(")") || token.endsWith("\"")) {
  +                    token = token.substring(0,token.length()-1);
  +                    argValues.add(token);
  +                    System.out.println("ADDED1 TOKEN: "+token);
  +                }else{
  +                    fetchNextTogether = true;
  +                    tokensave = tokensave+token;
  +                }
  +            }else if(token.endsWith(")") || token.endsWith("\"")) {
  +                token = token.substring(0,token.length()-1);
  +                argValues.add(tokensave+" "+token);
  +                System.out.println("ADDED2 TOKEN: "+tokensave+" "+token);
  +                tokensave = "";
  +                fetchNextTogether = false;
  +            }else if(fetchNextTogether) {
  +                tokensave = tokensave+" "+token;
  +            }else{
  +                argValues.add(token);
  +                System.out.println("ADDED3 TOKEN: "+token);
  +            }   
  +        }
  +        return doProcess( request, session, argValues );
  +    }
  +    
       protected boolean doProcess( ImapRequest request, ImapSession session, List argValues ) {
           String command = this.getCommand();
           ByteArrayOutputStream byteout = new ByteArrayOutputStream();
           java.io.PrintWriter out = session.getOut();
           BufferedReader bre = session.getIn();
           
  -        try{
  -            String ms = (String) argValues.get(3);
  -            long messagelen = Long.parseLong(ms.substring(1,ms.length()-1));
  +        String folder = (String) argValues.get( 0 );
  +        String ms = "";
  +        String flags = "";
  +        String date = "";
  +        
  +        String arg1 = "";
  +        String arg2 = "";
  +        String arg3 = "";
  +        try {
  +            arg1 = (String) argValues.get(1);
  +            arg2 = (String) argValues.get(2);
  +            arg3 = (String) argValues.get(3);
  +        }catch(Exception e) {}
  +        
  +        if (arg1.startsWith("{")) {
  +            // No Argues
  +            ms = arg1;
  +        }else if (arg1.startsWith("\\")) {
  +            // arg1 = flags
  +            flags = arg1;
  +            if (arg3.startsWith("{")) {
  +                date = arg2;
  +                ms = arg3;
  +            }else{
  +                ms = arg2;
  +            }
  +        }else if (arg2.startsWith("\\")) {
  +            // arg2 = flags
  +            flags = arg2;
  +            ms = arg3;
  +        }
  +        System.out.println("APPEND: ms is "+ms);
  +        System.out.println("APPEND: flags is "+flags);
  +        System.out.println("APPEND: date is "+date);
  +        
  +        try{    
  +            long messagelen = Long.parseLong(ms.substring(1,ms.length()-2));
               long messageleft = messagelen;
              
               session.setCanParseCommand(false);
  @@ -63,14 +136,16 @@
                   if (messageleft<200) buffer = (int) messageleft;
                   char[] cbuf = new char[buffer] ;
                   bre.read(cbuf);
  -                mailb.append(String.copyValueOf(cbuf));
                   byteout.write(String.valueOf(cbuf).getBytes());
                   messageleft = messageleft - buffer;
               }
               session.setCanParseCommand(true);
  -        }catch(Exception e){}
  +        }catch(Exception e){
  +            System.out.println("Error occured parsing input");
  +            e.printStackTrace();
  +        }
  +        
           
  -        String folder = (String) argValues.get( 0 );
           FileMailbox mailbox = (FileMailbox)getMailbox( session, folder, command );
           
           if ( mailbox == null ) {
  @@ -85,11 +160,6 @@
                   return true;
               }
               
  -            //This must be the flags
  -            String flags = (String) argValues.get(1);
  -            //This must be the internalDate string
  -            String date = (String) argValues.get(2);
  -            
               MimeMessageInputStreamSource source = new MimeMessageInputStreamSource("Mail" + System.currentTimeMillis() + "-" + mailbox.getNextUID(), new ByteArrayInputStream(byteout.toByteArray()));
               MimeMessageWrapper msg = new MimeMessageWrapper(source);
   
  @@ -97,7 +167,7 @@
                   msg.setHeader("Received", date);
                   msg.saveChanges();
               }catch (MessagingException me){
  -                    //ignore
  +                me.printStackTrace();
               }
               mailbox.store( (MimeMessage)msg, session.getCurrentUser() );
               
  
  
  

--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>