1 22 package org.objectweb.petals.binding.mail.listeners; 23 24 import java.net.URI ; 25 import java.net.URISyntaxException ; 26 import java.util.List ; 27 import java.util.logging.Logger ; 28 29 import javax.jbi.JBIException; 30 31 import org.objectweb.petals.binding.mail.MailBCImpl; 32 import org.objectweb.petals.component.common.util.MessageExchangeWrapper; 33 import org.objectweb.petals.tools.jbicommon.util.StringHelper; 34 35 41 public class SessionDescriptorBuilder { 42 43 protected Logger log; 44 45 60 public SessionDescriptorBuilder(Logger log) { 61 super(); 62 this.log = log; 63 } 64 65 78 public SessionDescriptor build(String address, 79 MessageExchangeWrapper exchangeWrapper) throws JBIException { 80 String msg = ""; 81 SessionDescriptor sessionDescriptor = null; 82 83 URI addressURI; 85 try { 86 addressURI = new URI (address); 87 } catch (URISyntaxException e) { 88 msg = "The given address isn't a valid URI: " + address; 89 log.severe(msg); 90 throw new JBIException(msg); 91 } 92 93 96 String username = null; 98 String password = null; 99 String userInfo = addressURI.getRawUserInfo(); 100 if (!StringHelper.isNullOrEmpty(userInfo)) { 101 if (userInfo.indexOf(":") > 0) { 102 username = addressURI.getUserInfo().split(":")[0]; 103 password = addressURI.getUserInfo().split(":")[1]; 104 } else { 105 username = addressURI.getUserInfo(); 106 } 107 } 108 109 String hostname = addressURI.getHost(); 111 int port = addressURI.getPort(); 112 113 String scheme = addressURI.getScheme(); 115 116 String fromAddress = ""; 118 String toAddress = ""; 119 String path = addressURI.getPath(); 120 List <String > pathElements = StringHelper.splitPathElements(path); 121 for (String string : pathElements) { 122 if (string.indexOf(MailBCImpl.FROM_PATHELEMENT) >= 0) { 123 fromAddress = string.substring(string 124 .indexOf(MailBCImpl.FROM_PATHELEMENT) 125 + MailBCImpl.FROM_PATHELEMENT.length()); 126 } else if (string.indexOf(MailBCImpl.TO_PATHELEMENT) >= 0) { 127 toAddress = string.substring(string 128 .indexOf(MailBCImpl.TO_PATHELEMENT) 129 + MailBCImpl.TO_PATHELEMENT.length()); 130 } 131 } 132 if (MailBCImpl.MAIL_SCHEME_SMTP.equalsIgnoreCase(scheme) 135 && StringHelper.isNullOrEmpty(toAddress)) { 136 toAddress = (String ) exchangeWrapper 137 .getProperty(MailBCImpl.DESTINATION_ADDRESS); 138 } 139 140 String query = addressURI.getQuery(); 141 String period = StringHelper.extractValueForAttribute(query, 143 MailBCImpl.PERIOD_QUERYELEMENT, MailBCImpl.QUERY_SEPARATOR); 144 145 String folder = StringHelper.extractValueForAttribute(query, 147 MailBCImpl.FOLDER_QUERYELEMENT, MailBCImpl.QUERY_SEPARATOR); 148 149 checkProperties(hostname, toAddress, scheme); 151 152 sessionDescriptor = fillProperties(hostname, port, username, password, 155 fromAddress, toAddress, period, folder, scheme); 156 157 return sessionDescriptor; 158 } 159 160 170 protected void checkProperties(String hostname, String toAddress, 171 String scheme) throws JBIException { 172 String msg = ""; 173 if (StringHelper.isNullOrEmpty(hostname)) { 174 msg = "The host name of the requested external " 175 + "service must be specified"; 176 log.severe(msg); 177 throw new JBIException(msg); 178 } 179 if (!(MailBCImpl.MAIL_SCHEME_IMAP.equalsIgnoreCase(scheme) 180 || MailBCImpl.MAIL_SCHEME_POP3.equalsIgnoreCase(scheme) || MailBCImpl.MAIL_SCHEME_SMTP 181 .equalsIgnoreCase(scheme))) { 182 msg = "The specified scheme isn't supported : " + scheme; 183 log.severe(msg); 184 throw new JBIException(msg); 185 } 186 if (MailBCImpl.MAIL_SCHEME_SMTP.equals(scheme)) { 187 if (StringHelper.isNullOrEmpty(toAddress)) { 188 msg = "Destination email address must be specified " 189 + "in the Service Unit descriptor ('provides' node) or in the " 190 + MailBCImpl.DESTINATION_ADDRESS 191 + " Message Exchange property"; 192 log.severe(msg); 193 throw new JBIException(msg); 194 } 195 } 196 } 197 198 223 protected SessionDescriptor fillProperties(String hostname, int port, 224 String username, String password, String fromAddress, String toAddress, 225 String period, String folder, String scheme) { 226 SessionDescriptor sessionDescriptor = new SessionDescriptor(); 227 228 sessionDescriptor.setHostname(hostname); 229 if (port == -1) { 230 if (MailBCImpl.MAIL_SCHEME_POP3.equals(scheme)) { 231 sessionDescriptor.setPort(MailBCImpl.MAIL_POP3_PORT_DEFAULT); 232 } else if (MailBCImpl.MAIL_SCHEME_IMAP.equals(scheme)) { 233 sessionDescriptor.setPort(MailBCImpl.MAIL_IMAP_PORT_DEFAULT); 234 } else { 235 sessionDescriptor.setPort(MailBCImpl.MAIL_SMTP_PORT_DEFAULT); 236 } 237 } else { 238 sessionDescriptor.setPort(new Integer (port).toString()); 239 } 240 sessionDescriptor.setUsername(username); 241 sessionDescriptor.setPassword(password); 242 sessionDescriptor.setFromAddress(fromAddress); 243 sessionDescriptor.setToAddress(toAddress); 244 if (!StringHelper.isNullOrEmpty(period)) { 245 sessionDescriptor.setPeriod(period); 246 } else { 247 sessionDescriptor.setPeriod(MailBCImpl.PERIOD_DEFAULT); 248 } 249 if (!StringHelper.isNullOrEmpty(folder)) { 250 sessionDescriptor.setFolder(folder); 251 } else { 252 sessionDescriptor.setFolder(MailBCImpl.FOLDER_DEFAULT); 253 } 254 sessionDescriptor.setScheme(scheme); 255 256 return sessionDescriptor; 257 } 258 } 259 | Popular Tags |