huber 2003/01/07 15:17:35 Modified: src/scratchpad/src/org/apache/cocoon/mail MailAction.java MailCommandBuilder.java MailCommandManager.java MailCommandSelector.java MailContentHandlerDelegate.java MailContext.java Removed: src/scratchpad/src/org/apache/cocoon/mail MailGenerator.java Log: removed MailGenerator.java fixed to make this package java 1.3 compileable Revision Changes Path 1.4 +66 -18 xml-cocoon2/src/scratchpad/src/org/apache/cocoon/mail/MailAction.java Index: MailAction.java =================================================================== RCS file: /home/cvs/xml-cocoon2/src/scratchpad/src/org/apache/cocoon/mail/MailAction.java,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- MailAction.java 7 Jan 2003 16:48:54 -0000 1.3 +++ MailAction.java 7 Jan 2003 23:17:34 -0000 1.4 @@ -53,6 +53,7 @@ * <http://www.apache.org/>. */ package org.apache.cocoon.mail; + import java.text.SimpleDateFormat; import java.util.HashMap; import java.util.Iterator; @@ -80,7 +81,14 @@ import org.apache.cocoon.mail.command.AbstractMailCommand; /** - * This action ... + * This action creates javamail objects, and puts XMLizable object wrappers + * of these objects into the request attribute map. + * <p> + * This action enables javamail access as action. It creates an http sesion, + * and puts the MailContext object into the session attributes. + * </p> + * + *@see MailContext * *@author Bernhard Huber *@created 16. Dezember 2002 @@ -127,7 +135,7 @@ String folderName = request.getParameter("folder"); String userid = request.getParameter("mail-userid"); String password = request.getParameter("mail-password"); - + // assert mailContext is available Session session = request.getSession(true); MailContext mailContext = (MailContext) session.getAttribute(MailContext.SESSION_MAIL_CONTEXT); @@ -235,23 +243,62 @@ *@return The uRLNameExpanded value */ protected String getURLNameExpanded(String storeURLNameTemplate, String userid, String password) { - StringBuffer sb = new StringBuffer(storeURLNameTemplate); + String tokenStart = "''"; + String tokenEnd = "''"; + Properties filters = new Properties(); + filters.put("mail-userid", userid); + filters.put("mail-passwd", password); + + String filteredURLName = filter(tokenStart, tokenEnd, storeURLNameTemplate, filters); + return filteredURLName; + } + + + /** + * replace occurences of <code>TOKEN_STARTxxxTOKEN_END</code> by value of entry xxx in tokens table. + * + *@param tokenStart token start marker + *@param tokenEnd token end marker + *@param s the string examined + *@param tokens Description of the Parameter + *@return String replaced all tokenized entries of original String s. + */ + protected String filter(final String tokenStart, final String tokenEnd, String s, Properties tokens) { + int index = s.indexOf(tokenStart); + + if (index > -1) { + try { + StringBuffer b = new StringBuffer(); + int i = 0; + String token = null; + String value = null; + + do { + int endIndex = s.indexOf(tokenEnd, index + tokenStart.length() + 1); + if (endIndex == -1) { + break; + } + token = s.substring(index + tokenStart.length(), endIndex); + b.append(s.substring(i, index)); + if (tokens.containsKey(token)) { + value = (String) tokens.get(token); + b.append(value); + i = index + tokenStart.length() + token.length() + tokenEnd.length(); + } else { + // just append TOKEN_START and search further + b.append(tokenStart); + i = index + tokenStart.length(); + } + } while ((index = s.indexOf(tokenStart, i)) > -1); - // perhaps find some better way than ''xxx'' placeholder encoding - int indexOf; - String template; - template = "''mail-userid''"; - indexOf = sb.indexOf(template); - if (indexOf != -1) { - sb.replace(indexOf, indexOf + template.length(), userid); - } - template = "''mail-passwd''"; - indexOf = sb.indexOf(template); - if (indexOf != -1) { - sb.replace(indexOf, indexOf + template.length(), password); + b.append(s.substring(i)); + return b.toString(); + } catch (StringIndexOutOfBoundsException e) { + return s; + } + } else { + return s; } - String storeURLNameExpanded = sb.toString(); - return storeURLNameExpanded; } @@ -308,6 +355,7 @@ // marshal java mail objects Logger logger = getLogger(); + // make it an optional parameter? String datePattern = "dd.MM.yyyy HH:mm"; SimpleDateFormat sdf = new SimpleDateFormat(datePattern); 1.2 +1 -3 xml-cocoon2/src/scratchpad/src/org/apache/cocoon/mail/MailCommandBuilder.java Index: MailCommandBuilder.java =================================================================== RCS file: /home/cvs/xml-cocoon2/src/scratchpad/src/org/apache/cocoon/mail/MailCommandBuilder.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- MailCommandBuilder.java 6 Jan 2003 21:51:20 -0000 1.1 +++ MailCommandBuilder.java 7 Jan 2003 23:17:34 -0000 1.2 @@ -52,8 +52,6 @@ import java.util.HashMap; import java.util.Map; -import org.apache.avalon.framework.context.Context; -import org.apache.avalon.framework.context.ContextException; import org.apache.avalon.framework.context.Contextualizable; import org.apache.avalon.framework.logger.AbstractLogEnabled; import org.apache.avalon.framework.logger.LogEnabled; 1.2 +21 -23 xml-cocoon2/src/scratchpad/src/org/apache/cocoon/mail/MailCommandManager.java Index: MailCommandManager.java =================================================================== RCS file: /home/cvs/xml-cocoon2/src/scratchpad/src/org/apache/cocoon/mail/MailCommandManager.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- MailCommandManager.java 6 Jan 2003 21:51:20 -0000 1.1 +++ MailCommandManager.java 7 Jan 2003 23:17:34 -0000 1.2 @@ -50,8 +50,8 @@ */ package org.apache.cocoon.mail; -import java.util.List; import java.io.IOException; +import java.util.List; import javax.mail.FetchProfile; import javax.mail.Folder; import javax.mail.Message; @@ -397,7 +397,7 @@ this.aFolder = mctx.getTheFolder(CONTEXT_FOLDER_ENTRY); try { - String fp = (String) ctx.get("param:" + CONTEXT_FOLDER_PATTERN_ENTRY); + this.folderPattern = (String) ctx.get("param:" + CONTEXT_FOLDER_PATTERN_ENTRY); } catch (ContextException ce) { // use default folder pattern this.folderPattern = MailCommandManager.DEFAULT_FOLDER_PATTERN; @@ -470,10 +470,10 @@ public void execute() throws MessagingException { UIDFolder uidFolder = (UIDFolder) aFolder; MailCommandManager.openFolder(aFolder, Folder.READ_ONLY); - + // add folder, too addResult(aFolder); - + Message msg = uidFolder.getMessageByUID(msgUID); addResult(msg); } @@ -511,8 +511,8 @@ this.aFolder = mctx.getTheFolder(CONTEXT_FOLDER_ENTRY); try { - Integer i = (Integer) ctx.get("param-integer:" + CONTEXT_ID_ENTRY); - this.msgId = i.intValue(); + Integer i = (Integer) ctx.get("param-integer:" + CONTEXT_ID_ENTRY); + this.msgId = i.intValue(); } catch (ContextException ce) { String message = "Missing mandatory context entry " + String.valueOf(CONTEXT_ID_ENTRY); throw new ContextException(message); @@ -578,6 +578,7 @@ i = (Integer) ctx.get("param-integer:" + CONTEXT_PARTID_ENTRY); if (i == null) { String message = "Missing mandatory context entry " + String.valueOf(CONTEXT_PARTID_ENTRY); + throw new ContextException(message); } this.partId = i.intValue(); } @@ -590,13 +591,13 @@ */ public void execute() throws MessagingException { MailCommandManager.openFolder(aFolder, Folder.READ_ONLY); - + // add folder, too addResult(aFolder); - - // get the message + + // get the message Message msg = aFolder.getMessage(msgId); - + if (msg == null) { String message = "Cannot get message for id " + String.valueOf(msgId); getLogger().warn(message); @@ -663,9 +664,7 @@ /* proposed searchTermString syntax {header}:comp-op:{value} & {header}:comp-op:{value} | ..... - eg. subject:eq:cocoon & date::MM/DD/2002 - header:com-op: subject:[cont|ncont]: sender:[cont|ncont]: @@ -676,7 +675,6 @@ cc: age-in-days:[is|nis|gt|lt]: reply-to:[cont|ncont]: - */ } @@ -691,7 +689,7 @@ // add folder, too addResult(aFolder); - + Message[] msgs = aFolder.search(searchTerm); addResult(msgs); } 1.2 +3 -0 xml-cocoon2/src/scratchpad/src/org/apache/cocoon/mail/MailCommandSelector.java Index: MailCommandSelector.java =================================================================== RCS file: /home/cvs/xml-cocoon2/src/scratchpad/src/org/apache/cocoon/mail/MailCommandSelector.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- MailCommandSelector.java 6 Jan 2003 21:51:20 -0000 1.1 +++ MailCommandSelector.java 7 Jan 2003 23:17:34 -0000 1.2 @@ -79,6 +79,9 @@ <map:when test=" */ +/** + * @deprecated use RequestAttributeSelector, RequestParameterSelector, or ParameterSelector instead. + */ public class MailCommandSelector extends AbstractSwitchSelector { public Object getSelectorContext(Map objectModel, Parameters parameters) { 1.2 +6 -58 xml-cocoon2/src/scratchpad/src/org/apache/cocoon/mail/MailContentHandlerDelegate.java Index: MailContentHandlerDelegate.java =================================================================== RCS file: /home/cvs/xml-cocoon2/src/scratchpad/src/org/apache/cocoon/mail/MailContentHandlerDelegate.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- MailContentHandlerDelegate.java 6 Jan 2003 21:51:20 -0000 1.1 +++ MailContentHandlerDelegate.java 7 Jan 2003 23:17:34 -0000 1.2 @@ -55,7 +55,6 @@ import java.text.SimpleDateFormat; import java.util.Date; import java.util.Enumeration; -import java.util.Locale; import javax.mail.Address; import javax.mail.Flags; import javax.mail.Folder; @@ -72,7 +71,6 @@ import javax.mail.internet.ParseException; import org.apache.avalon.excalibur.xml.XMLizable; import org.apache.avalon.framework.logger.AbstractLogEnabled; -import org.apache.avalon.framework.logger.Logger; import org.xml.sax.Attributes; import org.xml.sax.ContentHandler; import org.xml.sax.SAXException; @@ -379,7 +377,7 @@ addAttribute("is-directory", (folder.getType() & Folder.HOLDS_FOLDERS) != 0 ? "yes" : "no"); if ((folder.getType() & Folder.HOLDS_MESSAGES) != 0) { - addAttribute("holds-messages", "yes" ); + addAttribute("holds-messages", "yes"); addAttribute("has-new-messages", folder.hasNewMessages() ? "yes" : "no"); addAttribute("total-messages", String.valueOf(folder.getMessageCount())); addAttribute("new-messages", String.valueOf(folder.getNewMessageCount())); @@ -546,7 +544,7 @@ if (s != null) { addAttribute("primary-type", s.toLowerCase()); } - + // secondary part only s = ct.getSubType(); if (s != null) { @@ -928,31 +926,6 @@ /** - * Sets the simpleDateFormat attribute of the MessageEnvelopeXMLizer object - * - *@param pattern The new simpleDateFormat value - *@param country The new simpleDateFormat value - */ - public void setSimpleDateFormat(String pattern, String country) { - try { - if (pattern != null && country != null) { - Locale locale = new Locale(country); - sdf = new SimpleDateFormat(pattern, locale); - } else if (pattern != null) { - sdf = new SimpleDateFormat(pattern); - } else { - sdf = null; - } - } catch (Exception e) { - String message = "Cannot create SimpleDateFormatter for " + - "pattern " + String.valueOf(pattern) + ", and " + - "country " + String.valueOf(country); - getLogger().warn(message, e); - } - } - - - /** * Gets the simpleDateFormat attribute of the MessageEnvelopeXMLizer object * *@param sdf Description of the Parameter @@ -1014,31 +987,6 @@ */ public void setSimpleDateFormat(SimpleDateFormat sdf) { this.sdf = sdf; - } - - - /** - * Sets the simpleDateFormat attribute of the MessageXMLizer object - * - *@param pattern The new simpleDateFormat value - *@param country The new simpleDateFormat value - */ - public void setSimpleDateFormat(String pattern, String country) { - try { - if (pattern != null && country != null) { - Locale locale = new Locale(country); - sdf = new SimpleDateFormat(pattern, locale); - } else if (pattern != null) { - sdf = new SimpleDateFormat(pattern); - } else { - sdf = null; - } - } catch (Exception e) { - String message = "Cannot create SimpleDateFormatter for " + - "pattern " + String.valueOf(pattern) + ", and " + - "country " + String.valueOf(country); - getLogger().warn(message, e); - } } 1.2 +5 -24 xml-cocoon2/src/scratchpad/src/org/apache/cocoon/mail/MailContext.java Index: MailContext.java =================================================================== RCS file: /home/cvs/xml-cocoon2/src/scratchpad/src/org/apache/cocoon/mail/MailContext.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- MailContext.java 6 Jan 2003 21:51:20 -0000 1.1 +++ MailContext.java 7 Jan 2003 23:17:34 -0000 1.2 @@ -50,38 +50,19 @@ */ package org.apache.cocoon.mail; -import java.io.IOException; import java.util.Iterator; -import java.util.List; import java.util.Map; -import java.util.Properties; import java.util.Set; import javax.mail.Folder; -import javax.mail.Message; import javax.mail.MessagingException; -import javax.mail.Provider; import javax.mail.Store; -import javax.mail.URLName; //import javax.mail.Session; -import org.apache.avalon.framework.activity.Disposable; -import org.apache.avalon.framework.activity.Initializable; -import org.apache.avalon.framework.component.ComponentException; -import org.apache.avalon.framework.component.ComponentManager; import org.apache.avalon.framework.context.Context; import org.apache.avalon.framework.context.ContextException; -import org.apache.avalon.framework.context.Contextualizable; import org.apache.avalon.framework.context.DefaultContext; -import org.apache.avalon.framework.logger.LogEnabled; import org.apache.avalon.framework.logger.Logger; -import org.apache.avalon.framework.parameters.Parameters; -import org.apache.cocoon.ProcessingException; -import org.apache.cocoon.environment.ObjectModelHelper; +import org.apache.avalon.framework.logger.LogEnabled; import org.apache.cocoon.environment.Request; -import org.apache.cocoon.environment.Session; -import org.apache.cocoon.environment.SourceResolver; -import org.apache.cocoon.generation.ComposerGenerator; -import org.apache.cocoon.mail.command.AbstractMailCommand; -import org.xml.sax.SAXException; /** * Encapsulation of context info of this webmail application @@ -213,12 +194,12 @@ store.connect(); } final String DEFAULT_FOLDER_NAME = "~"; - + // empty folder name is specified by empty string, or "~" - if (folderName.equals( DEFAULT_FOLDER_NAME) || folderName.length() == 0) { + if (folderName.equals(DEFAULT_FOLDER_NAME) || folderName.length() == 0) { folder = store.getDefaultFolder(); } else { - folder = store.getFolder(folderName); + folder = store.getFolder(folderName); } // save the Folder, for later access
---------------------------------------------------------------------- In case of troubles, e-mail: [EMAIL PROTECTED] To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]