xref: /AOO41X/main/scripting/examples/java/Newsgroup/MimeConfiguration.java (revision cdf0e10c4e3984b49a9502b011690b615761d4a3)
1*cdf0e10cSrcweir import com.sun.star.uno.UnoRuntime;
2*cdf0e10cSrcweir import com.sun.star.lang.XMultiComponentFactory;
3*cdf0e10cSrcweir import com.sun.star.uno.XComponentContext;
4*cdf0e10cSrcweir import com.sun.star.script.framework.runtime.XScriptContext;
5*cdf0e10cSrcweir import com.sun.star.util.XStringSubstitution;
6*cdf0e10cSrcweir 
7*cdf0e10cSrcweir import javax.mail.*;
8*cdf0e10cSrcweir import javax.activation.*;
9*cdf0e10cSrcweir 
10*cdf0e10cSrcweir import java.io.*;
11*cdf0e10cSrcweir 
12*cdf0e10cSrcweir 
13*cdf0e10cSrcweir public class MimeConfiguration
14*cdf0e10cSrcweir {
15*cdf0e10cSrcweir 
16*cdf0e10cSrcweir     // Office Installation path
17*cdf0e10cSrcweir     private static String instPath = "";
18*cdf0e10cSrcweir 
19*cdf0e10cSrcweir 
20*cdf0e10cSrcweir     public static boolean createFiles( XScriptContext xsc )
21*cdf0e10cSrcweir     {
22*cdf0e10cSrcweir         try
23*cdf0e10cSrcweir         {
24*cdf0e10cSrcweir             XComponentContext xcc = xsc.getComponentContext();
25*cdf0e10cSrcweir             XMultiComponentFactory xmf = xcc.getServiceManager();
26*cdf0e10cSrcweir 
27*cdf0e10cSrcweir             Object pathSub = xmf.createInstanceWithContext( "com.sun.star.comp.framework.PathSubstitution", xcc );
28*cdf0e10cSrcweir             XStringSubstitution stringSub = ( XStringSubstitution ) UnoRuntime.queryInterface( XStringSubstitution.class, pathSub );
29*cdf0e10cSrcweir             instPath = stringSub.getSubstituteVariableValue( "$(inst)" );
30*cdf0e10cSrcweir 
31*cdf0e10cSrcweir         }
32*cdf0e10cSrcweir         catch( com.sun.star.beans.UnknownPropertyException upe )
33*cdf0e10cSrcweir         {
34*cdf0e10cSrcweir             System.out.println( "com.sun.star.beans.UnknownPropertyException" );
35*cdf0e10cSrcweir             upe.printStackTrace();
36*cdf0e10cSrcweir         }
37*cdf0e10cSrcweir         catch( com.sun.star.uno.Exception e )
38*cdf0e10cSrcweir         {
39*cdf0e10cSrcweir             System.out.println( "com.sun.star.uno.Exception" );
40*cdf0e10cSrcweir             e.printStackTrace();
41*cdf0e10cSrcweir         }
42*cdf0e10cSrcweir 
43*cdf0e10cSrcweir         writeMailCap();
44*cdf0e10cSrcweir         writeMimeTypes();
45*cdf0e10cSrcweir 
46*cdf0e10cSrcweir         // ToDo: include status feedback to StatusWindow
47*cdf0e10cSrcweir         return true;
48*cdf0e10cSrcweir     }
49*cdf0e10cSrcweir 
50*cdf0e10cSrcweir 
51*cdf0e10cSrcweir 
52*cdf0e10cSrcweir 
53*cdf0e10cSrcweir     private static void writeMailCap()
54*cdf0e10cSrcweir     {
55*cdf0e10cSrcweir         String mailcapPath = getConfigDir() + System.getProperty( "file.separator" ) + "mailcap";
56*cdf0e10cSrcweir 
57*cdf0e10cSrcweir         try
58*cdf0e10cSrcweir         {
59*cdf0e10cSrcweir                     if( ! new File( java.net.URLDecoder.decode( mailcapPath )  ).exists() )
60*cdf0e10cSrcweir                         {
61*cdf0e10cSrcweir                 //System.out.println( "URLDecoder: " + java.net.URLDecoder.decode( mailcapPath ) );
62*cdf0e10cSrcweir                 File mailcapFile = new File( mailcapPath );
63*cdf0e10cSrcweir                 FileWriter out = new FileWriter( mailcapFile );
64*cdf0e10cSrcweir                 String[] lines = getMailcapText();
65*cdf0e10cSrcweir                 for( int i=0; i<lines.length; i++ )
66*cdf0e10cSrcweir                 {
67*cdf0e10cSrcweir                     out.write( lines[i], 0, lines[i].length() );
68*cdf0e10cSrcweir                 }
69*cdf0e10cSrcweir                 out.close();
70*cdf0e10cSrcweir                     }
71*cdf0e10cSrcweir                     else
72*cdf0e10cSrcweir                     {
73*cdf0e10cSrcweir                 //System.out.println( "URLDecoder: " + java.net.URLDecoder.decode( mailcapPath ) );
74*cdf0e10cSrcweir                     }
75*cdf0e10cSrcweir 
76*cdf0e10cSrcweir 
77*cdf0e10cSrcweir 
78*cdf0e10cSrcweir             // use prog dir, if not there then java.io to create/write new file
79*cdf0e10cSrcweir             MailcapCommandMap map = new MailcapCommandMap( mailcapPath );
80*cdf0e10cSrcweir             CommandMap.setDefaultCommandMap ( map );
81*cdf0e10cSrcweir         }
82*cdf0e10cSrcweir         catch( IOException ioe )
83*cdf0e10cSrcweir         {
84*cdf0e10cSrcweir             ioe.printStackTrace();
85*cdf0e10cSrcweir         }
86*cdf0e10cSrcweir         catch( Exception e )
87*cdf0e10cSrcweir         {
88*cdf0e10cSrcweir             e.printStackTrace();
89*cdf0e10cSrcweir         }
90*cdf0e10cSrcweir     }
91*cdf0e10cSrcweir 
92*cdf0e10cSrcweir 
93*cdf0e10cSrcweir     private static String[] getMailcapText()
94*cdf0e10cSrcweir     {
95*cdf0e10cSrcweir         String[] mailcapText = {
96*cdf0e10cSrcweir             "#\n",
97*cdf0e10cSrcweir             "# Default mailcap file for the JavaMail System.\n",
98*cdf0e10cSrcweir             "#\n",
99*cdf0e10cSrcweir             "# JavaMail content-handlers:\n",
100*cdf0e10cSrcweir             "#\n",
101*cdf0e10cSrcweir             "text/plain;;            x-java-content-handler=com.sun.mail.handlers.text_plain\n",
102*cdf0e10cSrcweir             "text/html;;             x-java-content-handler=com.sun.mail.handlers.text_html\n",
103*cdf0e10cSrcweir             "text/xml;;              x-java-content-handler=com.sun.mail.handlers.text_xml\n",
104*cdf0e10cSrcweir             "image/gif;;             x-java-content-handler=com.sun.mail.handlers.image_gif\n",
105*cdf0e10cSrcweir             "image/jpeg;;            x-java-content-handler=com.sun.mail.handlers.image_jpeg\n",
106*cdf0e10cSrcweir             "multipart/*;;           x-java-content-handler=com.sun.mail.handlers.multipart_mixed\n",
107*cdf0e10cSrcweir             "message/rfc822;;        x-java-content-handler=com.sun.mail.handlers.message_rfc822\n"
108*cdf0e10cSrcweir         };
109*cdf0e10cSrcweir 
110*cdf0e10cSrcweir         return mailcapText;
111*cdf0e10cSrcweir     }
112*cdf0e10cSrcweir 
113*cdf0e10cSrcweir 
114*cdf0e10cSrcweir 
115*cdf0e10cSrcweir     private static void writeMimeTypes()
116*cdf0e10cSrcweir     {
117*cdf0e10cSrcweir         String mimetypesPath = getConfigDir() + System.getProperty( "file.separator" ) + "mimetypes.default";
118*cdf0e10cSrcweir 
119*cdf0e10cSrcweir         try
120*cdf0e10cSrcweir         {
121*cdf0e10cSrcweir                     if( ! new File( java.net.URLDecoder.decode( mimetypesPath )  ).exists() )
122*cdf0e10cSrcweir                         {
123*cdf0e10cSrcweir                 //System.out.println( "URLDecoder: " + java.net.URLDecoder.decode( mimetypesPath ) );
124*cdf0e10cSrcweir                 File mimetypesFile = new File( mimetypesPath );
125*cdf0e10cSrcweir                 FileWriter out = new FileWriter( mimetypesFile );
126*cdf0e10cSrcweir                 String[] lines = getMimeTypesText();
127*cdf0e10cSrcweir                 for( int i=0; i<lines.length; i++ )
128*cdf0e10cSrcweir                 {
129*cdf0e10cSrcweir                     out.write( lines[i], 0, lines[i].length() );
130*cdf0e10cSrcweir                 }
131*cdf0e10cSrcweir                 out.close();
132*cdf0e10cSrcweir                     }
133*cdf0e10cSrcweir                     else
134*cdf0e10cSrcweir                     {
135*cdf0e10cSrcweir                 //System.out.println( "URLDecoder: " + java.net.URLDecoder.decode( mimetypesPath ) );
136*cdf0e10cSrcweir                     }
137*cdf0e10cSrcweir 
138*cdf0e10cSrcweir             MimetypesFileTypeMap mimeTypes = new MimetypesFileTypeMap( mimetypesPath );
139*cdf0e10cSrcweir                         FileTypeMap.setDefaultFileTypeMap( mimeTypes );
140*cdf0e10cSrcweir         }
141*cdf0e10cSrcweir         catch( IOException ioe )
142*cdf0e10cSrcweir         {
143*cdf0e10cSrcweir             ioe.printStackTrace();
144*cdf0e10cSrcweir         }
145*cdf0e10cSrcweir         catch( Exception e )
146*cdf0e10cSrcweir         {
147*cdf0e10cSrcweir             e.printStackTrace();
148*cdf0e10cSrcweir         }
149*cdf0e10cSrcweir     }
150*cdf0e10cSrcweir 
151*cdf0e10cSrcweir 
152*cdf0e10cSrcweir     private static String[] getMimeTypesText()
153*cdf0e10cSrcweir     {
154*cdf0e10cSrcweir         String[] mimesText = {
155*cdf0e10cSrcweir             "#\n",
156*cdf0e10cSrcweir             "# A simple, old format, mime.types file\n",
157*cdf0e10cSrcweir             "#\n",
158*cdf0e10cSrcweir             "text/html               html htm HTML HTM\n",
159*cdf0e10cSrcweir             "text/plain              txt text TXT TEXT\n",
160*cdf0e10cSrcweir             "image/gif               gif GIF\n",
161*cdf0e10cSrcweir             "image/ief               ief\n",
162*cdf0e10cSrcweir             "image/jpeg              jpeg jpg jpe JPG\n",
163*cdf0e10cSrcweir             "image/tiff              tiff tif\n",
164*cdf0e10cSrcweir             "image/x-xwindowdump     xwd\n",
165*cdf0e10cSrcweir             "application/postscript  ai eps ps\n",
166*cdf0e10cSrcweir             "application/rtf         rtf\n",
167*cdf0e10cSrcweir             "application/x-tex       tex\n",
168*cdf0e10cSrcweir             "application/x-texinfo   texinfo texi\n",
169*cdf0e10cSrcweir             "application/x-troff     t tr roff\n",
170*cdf0e10cSrcweir             "audio/basic             au\n",
171*cdf0e10cSrcweir             "audio/midi              midi mid\n",
172*cdf0e10cSrcweir             "audio/x-aifc            aifc\n",
173*cdf0e10cSrcweir             "audio/x-aiff            aif aiff\n",
174*cdf0e10cSrcweir             "audio/x-mpeg            mpeg mpg\n",
175*cdf0e10cSrcweir             "audio/x-wav             wav\n",
176*cdf0e10cSrcweir             "video/mpeg              mpeg mpg mpe\n",
177*cdf0e10cSrcweir             "video/quicktime         qt mov\n",
178*cdf0e10cSrcweir             "video/x-msvideo         avi\n"
179*cdf0e10cSrcweir         };
180*cdf0e10cSrcweir 
181*cdf0e10cSrcweir         return mimesText;
182*cdf0e10cSrcweir     }
183*cdf0e10cSrcweir 
184*cdf0e10cSrcweir 
185*cdf0e10cSrcweir     private static String getConfigDir()
186*cdf0e10cSrcweir     {
187*cdf0e10cSrcweir         // mailcap file must be written to the Office user/config  directory
188*cdf0e10cSrcweir 
189*cdf0e10cSrcweir                 // instPath is a URL, needs to be converted to a system pathname
190*cdf0e10cSrcweir                 String config = instPath + "/user/config";
191*cdf0e10cSrcweir                 String configNonURL = "";
192*cdf0e10cSrcweir 
193*cdf0e10cSrcweir                 if( System.getProperty( "os.name" ).indexOf( "Windows" ) != -1 )
194*cdf0e10cSrcweir                 {
195*cdf0e10cSrcweir                         // Windows
196*cdf0e10cSrcweir                         // removes "file:///"
197*cdf0e10cSrcweir                         int start = 8;
198*cdf0e10cSrcweir                         configNonURL = config.substring( start, config.length() );
199*cdf0e10cSrcweir                         // Convert forward to back-slashes
200*cdf0e10cSrcweir                         while( configNonURL.indexOf( "/" ) != -1 )
201*cdf0e10cSrcweir                         {
202*cdf0e10cSrcweir                                 int fSlash = configNonURL.indexOf( "/" );
203*cdf0e10cSrcweir                                 String firstPart = configNonURL.substring( 0, fSlash );
204*cdf0e10cSrcweir                                 String secondPart = configNonURL.substring( fSlash + 1, configNonURL.length() );
205*cdf0e10cSrcweir                                 configNonURL = firstPart + "\\" + secondPart;
206*cdf0e10cSrcweir                         }
207*cdf0e10cSrcweir                 }
208*cdf0e10cSrcweir                 else
209*cdf0e10cSrcweir                 {
210*cdf0e10cSrcweir                         // Unix/Linux
211*cdf0e10cSrcweir                         // removes "file://"
212*cdf0e10cSrcweir                         int start = 7;
213*cdf0e10cSrcweir                         configNonURL = config.substring( start, config.length() );
214*cdf0e10cSrcweir                 }
215*cdf0e10cSrcweir 
216*cdf0e10cSrcweir         return configNonURL;
217*cdf0e10cSrcweir     }
218*cdf0e10cSrcweir 
219*cdf0e10cSrcweir }
220