/************************************************************** * * 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; } }