KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > columba > ristretto > composer > MimeTreeRenderer


1 /* ***** BEGIN LICENSE BLOCK *****
2  * Version: MPL 1.1/GPL 2.0/LGPL 2.1
3  *
4  * The contents of this file are subject to the Mozilla Public License Version
5  * 1.1 (the "License"); you may not use this file except in compliance with
6  * the License. You may obtain a copy of the License at
7  * http://www.mozilla.org/MPL/
8  *
9  * Software distributed under the License is distributed on an "AS IS" basis,
10  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
11  * for the specific language governing rights and limitations under the
12  * License.
13  *
14  * The Original Code is Ristretto Mail API.
15  *
16  * The Initial Developers of the Original Code are
17  * Timo Stich and Frederik Dietz.
18  * Portions created by the Initial Developers are Copyright (C) 2004
19  * All Rights Reserved.
20  *
21  * Contributor(s):
22  *
23  * Alternatively, the contents of this file may be used under the terms of
24  * either the GNU General Public License Version 2 or later (the "GPL"), or
25  * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
26  * in which case the provisions of the GPL or the LGPL are applicable instead
27  * of those above. If you wish to allow use of your version of this file only
28  * under the terms of either the GPL or the LGPL, and not to allow others to
29  * use your version of this file under the terms of the MPL, indicate your
30  * decision by deleting the provisions above and replace them with the notice
31  * and other provisions required by the GPL or the LGPL. If you do not delete
32  * the provisions above, a recipient may use your version of this file under
33  * the terms of any one of the MPL, the GPL or the LGPL.
34  *
35  * ***** END LICENSE BLOCK ***** */

36 package org.columba.ristretto.composer;
37
38 import java.io.InputStream JavaDoc;
39 import java.util.Hashtable JavaDoc;
40
41 import org.columba.ristretto.composer.mimepartrenderers.DefaultMimePartRenderer;
42 import org.columba.ristretto.composer.mimepartrenderers.MultipartRenderer;
43 import org.columba.ristretto.composer.mimepartrenderers.TextpartRenderer;
44 import org.columba.ristretto.message.MimePart;
45 import org.columba.ristretto.message.MimeTree;
46 import org.columba.ristretto.message.MimeType;
47
48 /**
49  * Provides methods to render a MimeTree.
50  * The MimeTree is invokes the registered MimePartRenderer.
51  * To register a MimePartRenderer call {@link #addMimePartRenderer(MimePartRenderer)}.
52  *
53  * <br>
54  * <b>RFC(s):</b> 2046
55  *
56  * @author Timo Stich <tstich@users.sourceforge.net>
57  */

58
59 public class MimeTreeRenderer {
60     
61     private Hashtable JavaDoc rendererMap;
62     
63     private static MimeTreeRenderer myInstance;
64     
65     private MimePartRenderer defaultRenderer;
66     
67     private MimeTreeRenderer() {
68         defaultRenderer = new DefaultMimePartRenderer();
69         rendererMap = new Hashtable JavaDoc();
70         addMimePartRenderer( new MultipartRenderer() );
71         addMimePartRenderer( new TextpartRenderer() );
72         
73     }
74
75     /**
76      * Adds a MimePartRenderer. The instance of the MimePartRenderer
77      * is used for all rendering of the registered MimeParts.
78      *
79      * @param renderer the new mimepartrenderer
80      */

81     public void addMimePartRenderer( MimePartRenderer renderer ) {
82         rendererMap.put(renderer.getRegisterString(), renderer);
83     }
84     
85     /**
86      * Gets the singleton instance.
87      *
88      * @return the singleton instance
89      */

90     public static MimeTreeRenderer getInstance() {
91         
92         if( myInstance == null )
93             myInstance = new MimeTreeRenderer();
94         
95         return myInstance;
96     }
97     
98     /**
99      * Renders a MimeTree.
100      *
101      * @param tree the mimetree to render
102      * @return the inputstream of the rendered mimetree
103      *
104      * @throws Exception
105      */

106     public InputStream JavaDoc renderMimeTree( MimeTree tree ) throws Exception JavaDoc {
107         return renderMimePart( tree.getRootMimeNode() );
108     }
109     
110     /**
111      * Renders a MimePart.
112      *
113      * @param part the mimepart to render
114      * @return the inputstream of the rendered mimepart
115      *
116      * @throws Exception
117      */

118     public InputStream JavaDoc renderMimePart( MimePart part ) throws Exception JavaDoc {
119         MimePartRenderer renderer = getRenderer( part.getHeader().getMimeType() );
120         
121         return renderer.render(part);
122     }
123     
124     private MimePartRenderer getRenderer( MimeType type ) {
125         
126         // If no ContentType specified return StandardParser
127
if (type == null)
128             return defaultRenderer;
129
130         MimePartRenderer renderer;
131
132         // First try to find renderer for "type/subtype"
133

134         renderer =
135             (MimePartRenderer) rendererMap.get(
136                 type.toString());
137         if (renderer != null) {
138             return renderer;
139         }
140
141         // Next try to find renderer for "type"
142

143         renderer = (MimePartRenderer) rendererMap.get(type.getType());
144         if (renderer != null) {
145             return renderer;
146         }
147
148         // Nothing found -> return Standardrenderer
149
return defaultRenderer;
150         
151     }
152
153 }
154
Popular Tags