| /************************************************************** |
| * |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| * |
| *************************************************************/ |
| |
| import com.sun.star.uno.UnoRuntime; |
| import com.sun.star.lang.XMultiComponentFactory; |
| import com.sun.star.uno.XComponentContext; |
| import com.sun.star.script.framework.runtime.XScriptContext; |
| import com.sun.star.util.XStringSubstitution; |
| |
| import javax.mail.*; |
| import javax.activation.*; |
| |
| import java.io.*; |
| |
| |
| public class MimeConfiguration |
| { |
| |
| // Office Installation path |
| private static String instPath = ""; |
| |
| |
| public static boolean createFiles( XScriptContext xsc ) |
| { |
| try |
| { |
| XComponentContext xcc = xsc.getComponentContext(); |
| XMultiComponentFactory xmf = xcc.getServiceManager(); |
| |
| Object pathSub = xmf.createInstanceWithContext( "com.sun.star.comp.framework.PathSubstitution", xcc ); |
| XStringSubstitution stringSub = ( XStringSubstitution ) UnoRuntime.queryInterface( XStringSubstitution.class, pathSub ); |
| instPath = stringSub.getSubstituteVariableValue( "$(inst)" ); |
| |
| } |
| catch( com.sun.star.beans.UnknownPropertyException upe ) |
| { |
| System.out.println( "com.sun.star.beans.UnknownPropertyException" ); |
| upe.printStackTrace(); |
| } |
| catch( com.sun.star.uno.Exception e ) |
| { |
| System.out.println( "com.sun.star.uno.Exception" ); |
| e.printStackTrace(); |
| } |
| |
| writeMailCap(); |
| writeMimeTypes(); |
| |
| // ToDo: include status feedback to StatusWindow |
| return true; |
| } |
| |
| |
| |
| |
| private static void writeMailCap() |
| { |
| String mailcapPath = getConfigDir() + System.getProperty( "file.separator" ) + "mailcap"; |
| |
| try |
| { |
| if( ! new File( java.net.URLDecoder.decode( mailcapPath ) ).exists() ) |
| { |
| //System.out.println( "URLDecoder: " + java.net.URLDecoder.decode( mailcapPath ) ); |
| File mailcapFile = new File( mailcapPath ); |
| FileWriter out = new FileWriter( mailcapFile ); |
| String[] lines = getMailcapText(); |
| for( int i=0; i<lines.length; i++ ) |
| { |
| out.write( lines[i], 0, lines[i].length() ); |
| } |
| out.close(); |
| } |
| else |
| { |
| //System.out.println( "URLDecoder: " + java.net.URLDecoder.decode( mailcapPath ) ); |
| } |
| |
| |
| |
| // use prog dir, if not there then java.io to create/write new file |
| MailcapCommandMap map = new MailcapCommandMap( mailcapPath ); |
| CommandMap.setDefaultCommandMap ( map ); |
| } |
| catch( IOException ioe ) |
| { |
| ioe.printStackTrace(); |
| } |
| catch( Exception e ) |
| { |
| e.printStackTrace(); |
| } |
| } |
| |
| |
| private static String[] getMailcapText() |
| { |
| String[] mailcapText = { |
| "#\n", |
| "# Default mailcap file for the JavaMail System.\n", |
| "#\n", |
| "# JavaMail content-handlers:\n", |
| "#\n", |
| "text/plain;; x-java-content-handler=com.sun.mail.handlers.text_plain\n", |
| "text/html;; x-java-content-handler=com.sun.mail.handlers.text_html\n", |
| "text/xml;; x-java-content-handler=com.sun.mail.handlers.text_xml\n", |
| "image/gif;; x-java-content-handler=com.sun.mail.handlers.image_gif\n", |
| "image/jpeg;; x-java-content-handler=com.sun.mail.handlers.image_jpeg\n", |
| "multipart/*;; x-java-content-handler=com.sun.mail.handlers.multipart_mixed\n", |
| "message/rfc822;; x-java-content-handler=com.sun.mail.handlers.message_rfc822\n" |
| }; |
| |
| return mailcapText; |
| } |
| |
| |
| |
| private static void writeMimeTypes() |
| { |
| String mimetypesPath = getConfigDir() + System.getProperty( "file.separator" ) + "mimetypes.default"; |
| |
| try |
| { |
| if( ! new File( java.net.URLDecoder.decode( mimetypesPath ) ).exists() ) |
| { |
| //System.out.println( "URLDecoder: " + java.net.URLDecoder.decode( mimetypesPath ) ); |
| File mimetypesFile = new File( mimetypesPath ); |
| FileWriter out = new FileWriter( mimetypesFile ); |
| String[] lines = getMimeTypesText(); |
| for( int i=0; i<lines.length; i++ ) |
| { |
| out.write( lines[i], 0, lines[i].length() ); |
| } |
| out.close(); |
| } |
| else |
| { |
| //System.out.println( "URLDecoder: " + java.net.URLDecoder.decode( mimetypesPath ) ); |
| } |
| |
| MimetypesFileTypeMap mimeTypes = new MimetypesFileTypeMap( mimetypesPath ); |
| FileTypeMap.setDefaultFileTypeMap( mimeTypes ); |
| } |
| catch( IOException ioe ) |
| { |
| ioe.printStackTrace(); |
| } |
| catch( Exception e ) |
| { |
| e.printStackTrace(); |
| } |
| } |
| |
| |
| private static String[] getMimeTypesText() |
| { |
| String[] mimesText = { |
| "#\n", |
| "# A simple, old format, mime.types file\n", |
| "#\n", |
| "text/html html htm HTML HTM\n", |
| "text/plain txt text TXT TEXT\n", |
| "image/gif gif GIF\n", |
| "image/ief ief\n", |
| "image/jpeg jpeg jpg jpe JPG\n", |
| "image/tiff tiff tif\n", |
| "image/x-xwindowdump xwd\n", |
| "application/postscript ai eps ps\n", |
| "application/rtf rtf\n", |
| "application/x-tex tex\n", |
| "application/x-texinfo texinfo texi\n", |
| "application/x-troff t tr roff\n", |
| "audio/basic au\n", |
| "audio/midi midi mid\n", |
| "audio/x-aifc aifc\n", |
| "audio/x-aiff aif aiff\n", |
| "audio/x-mpeg mpeg mpg\n", |
| "audio/x-wav wav\n", |
| "video/mpeg mpeg mpg mpe\n", |
| "video/quicktime qt mov\n", |
| "video/x-msvideo avi\n" |
| }; |
| |
| return mimesText; |
| } |
| |
| |
| private static String getConfigDir() |
| { |
| // mailcap file must be written to the Office user/config directory |
| |
| // instPath is a URL, needs to be converted to a system pathname |
| String config = instPath + "/user/config"; |
| String configNonURL = ""; |
| |
| if( System.getProperty( "os.name" ).indexOf( "Windows" ) != -1 ) |
| { |
| // Windows |
| // removes "file:///" |
| int start = 8; |
| configNonURL = config.substring( start, config.length() ); |
| // Convert forward to back-slashes |
| while( configNonURL.indexOf( "/" ) != -1 ) |
| { |
| int fSlash = configNonURL.indexOf( "/" ); |
| String firstPart = configNonURL.substring( 0, fSlash ); |
| String secondPart = configNonURL.substring( fSlash + 1, configNonURL.length() ); |
| configNonURL = firstPart + "\\" + secondPart; |
| } |
| } |
| else |
| { |
| // Unix/Linux |
| // removes "file://" |
| int start = 7; |
| configNonURL = config.substring( start, config.length() ); |
| } |
| |
| return configNonURL; |
| } |
| |
| } |