001: /**
002: * Copyright (c) 2003-2007, David A. Czarnecki
003: * All rights reserved.
004: *
005: * Redistribution and use in source and binary forms, with or without
006: * modification, are permitted provided that the following conditions are met:
007: *
008: * Redistributions of source code must retain the above copyright notice, this list of conditions and the
009: * following disclaimer.
010: * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the
011: * following disclaimer in the documentation and/or other materials provided with the distribution.
012: * Neither the name of "David A. Czarnecki" and "blojsom" nor the names of its contributors may be used to
013: * endorse or promote products derived from this software without specific prior written permission.
014: * Products derived from this software may not be called "blojsom", nor may "blojsom" appear in their name,
015: * without prior written permission of David A. Czarnecki.
016: *
017: * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
018: * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
019: * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
020: * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
021: * EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
022: * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
023: * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
024: * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
025: * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
026: * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
027: * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
028: * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
029: * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
030: */package org.blojsom.plugin.moblog;
031:
032: import org.apache.commons.logging.Log;
033: import org.apache.commons.logging.LogFactory;
034: import org.blojsom.blog.Blog;
035: import org.blojsom.util.BlojsomConstants;
036: import org.blojsom.util.BlojsomUtils;
037:
038: import javax.servlet.ServletConfig;
039: import java.io.*;
040: import java.util.HashMap;
041: import java.util.Map;
042:
043: /**
044: * Moblog Plugin Utils
045: *
046: * @author David Czarnecki
047: * @version $Id: MoblogPluginUtils.java,v 1.5 2007/01/17 02:35:11 czarneckid Exp $
048: * @since blojsom 3.0
049: */
050: public class MoblogPluginUtils {
051:
052: private static Log _logger = LogFactory
053: .getLog(MoblogPluginUtils.class);
054:
055: /**
056: * Read in the mailbox settings for a given blog
057: *
058: * @param blog {@link Blog}
059: * @return {@link Mailbox} populated with settings and authorized e-mail addresses or <code>null</code> if there
060: * was an error reading any configuration information
061: */
062: public static Mailbox readMailboxSettingsForBlog(
063: ServletConfig servletConfig, Blog blog) {
064: Mailbox mailbox = new Mailbox();
065: mailbox.setEnabled(false);
066:
067: mailbox.setId(blog.getId());
068:
069: String blogID = blog.getBlogId();
070: mailbox.setBlogId(blogID);
071: mailbox.setBlogBaseURL(blog.getBlogBaseURL());
072:
073: String hostname = blog
074: .getProperty(MoblogPlugin.PROPERTY_HOSTNAME);
075: if (!BlojsomUtils.checkNullOrBlank(hostname)) {
076: mailbox.setHostName(hostname);
077: } else {
078: mailbox.setEnabled(false);
079: }
080:
081: String userid = blog.getProperty(MoblogPlugin.PROPERTY_USERID);
082: if (!BlojsomUtils.checkNullOrBlank(userid)) {
083: mailbox.setUserId(userid);
084: } else {
085: mailbox.setEnabled(false);
086: }
087:
088: String password = blog
089: .getProperty(MoblogPlugin.PROPERTY_PASSWORD);
090: if (!BlojsomUtils.checkNullOrBlank(password)) {
091: mailbox.setPassword(password);
092: } else {
093: mailbox.setEnabled(false);
094: }
095:
096: mailbox
097: .setUrlPrefix(BlojsomConstants.DEFAULT_RESOURCES_DIRECTORY
098: + blogID + "/");
099: String resourceUrl = servletConfig.getServletContext()
100: .getRealPath(mailbox.getUrlPrefix());
101: mailbox.setOutputDirectory(resourceUrl);
102:
103: String blogCategoryID = blog
104: .getProperty(MoblogPlugin.PROPERTY_CATEGORY);
105: mailbox.setCategoryId(blogCategoryID);
106:
107: Boolean enabled = Boolean.valueOf(blog
108: .getProperty(MoblogPlugin.PROPERTY_ENABLED));
109: mailbox.setEnabled(enabled.booleanValue());
110:
111: String[] types;
112:
113: // Extract the image mime types
114: String imageMimeTypes = blog
115: .getProperty(MoblogPlugin.PLUGIN_MOBLOG_IMAGE_MIME_TYPES);
116: if (BlojsomUtils.checkNullOrBlank(imageMimeTypes)) {
117: imageMimeTypes = MoblogPlugin.DEFAULT_IMAGE_MIME_TYPES;
118: }
119: if (!BlojsomUtils.checkNullOrBlank(imageMimeTypes)) {
120: types = BlojsomUtils.parseCommaList(imageMimeTypes);
121: if (types.length > 0) {
122: Map imageTypesMap = new HashMap();
123: for (int i = 0; i < types.length; i++) {
124: String type = types[i];
125: imageTypesMap.put(type, type);
126: }
127: mailbox.setImageMimeTypes(imageTypesMap);
128: }
129: }
130:
131: // Extract the attachment mime types
132: String attachmentMimeTypes = blog
133: .getProperty(MoblogPlugin.PLUGIN_MOBLOG_ATTACHMENT_MIME_TYPES);
134: if (!BlojsomUtils.checkNullOrBlank(attachmentMimeTypes)) {
135: types = BlojsomUtils.parseCommaList(attachmentMimeTypes);
136: if (types.length > 0) {
137: Map attachmentTypesMap = new HashMap();
138: for (int i = 0; i < types.length; i++) {
139: String type = types[i];
140: attachmentTypesMap.put(type, type);
141: }
142: mailbox.setAttachmentMimeTypes(attachmentTypesMap);
143: }
144: } else {
145: mailbox.setAttachmentMimeTypes(new HashMap());
146: }
147:
148: // Extract the text mime types
149: String textMimeTypes = blog
150: .getProperty(MoblogPlugin.PLUGIN_MOBLOG_TEXT_MIME_TYPES);
151: if (BlojsomUtils.checkNullOrBlank(textMimeTypes)) {
152: textMimeTypes = MoblogPlugin.DEFAULT_TEXT_MIME_TYPES;
153: }
154:
155: if (!BlojsomUtils.checkNullOrBlank(textMimeTypes)) {
156: types = BlojsomUtils.parseCommaList(textMimeTypes);
157: if (types.length > 0) {
158: Map textTypesMap = new HashMap();
159: for (int i = 0; i < types.length; i++) {
160: String type = types[i];
161: textTypesMap.put(type, type);
162: }
163: mailbox.setTextMimeTypes(textTypesMap);
164: }
165: }
166:
167: // Extract the secret word
168: String secretWord = blog
169: .getProperty(MoblogPlugin.PLUGIN_MOBLOG_SECRET_WORD);
170: if (BlojsomUtils.checkNullOrBlank(secretWord)) {
171: mailbox.setSecretWord(null);
172: } else {
173: mailbox.setSecretWord(secretWord);
174: }
175:
176: // Configure authorized email addresses for moblog posting
177: String authorizedAddresses = blog
178: .getProperty(MoblogPlugin.PLUGIN_MOBLOG_AUTHORIZED_ADDRESSES);
179: if (!BlojsomUtils.checkNullOrBlank(authorizedAddresses)) {
180: String[] addresses = BlojsomUtils
181: .parseCommaList(authorizedAddresses);
182: mailbox.setAuthorizedAddresses(BlojsomUtils
183: .arrayOfStringsToMap(addresses));
184: } else {
185: mailbox.setAuthorizedAddresses(new HashMap());
186: }
187:
188: // Configure ignore regular expression
189: String ignoreExpression = blog
190: .getProperty(MoblogPlugin.PLUGIN_MOBLOG_IGNORE_EXPRESSION);
191: if (BlojsomUtils.checkNullOrBlank(ignoreExpression)) {
192: mailbox.setIgnoreExpression(null);
193: } else {
194: mailbox.setIgnoreExpression(ignoreExpression);
195: }
196:
197: return mailbox;
198: }
199:
200: /**
201: * Save a file to disk
202: *
203: * @param filename Base filename
204: * @param extension File extension
205: * @param input Input from which to read and write a file
206: * @return # of bytes written to disk
207: * @throws IOException If there is an error writing the file
208: */
209: public static int saveFile(String filename, String extension,
210: InputStream input) throws IOException {
211: int count = 0;
212: if (filename == null) {
213: return count;
214: }
215:
216: // Do not overwrite existing file
217: File file = new File(filename + extension);
218: for (int i = 0; file.exists(); i++) {
219: file = new File(filename + i + extension);
220: }
221: FileOutputStream fos = new FileOutputStream(file);
222: BufferedOutputStream bos = new BufferedOutputStream(fos);
223:
224: BufferedInputStream bis = new BufferedInputStream(input);
225: int aByte;
226: while ((aByte = bis.read()) != -1) {
227: bos.write(aByte);
228: count++;
229: }
230:
231: bos.flush();
232: bos.close();
233: bis.close();
234:
235: return count;
236: }
237: }
|