/* * This file is part of the LibreOffice project. * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. * * This file incorporates work covered by the following license notice: * * 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 . */ package org.libreoffice.example.java_scripts; //import com.sun.star.frame.XComponentLoader; import java.io.*; import com.sun.star.lang.XComponent; import com.sun.star.beans.PropertyValue; import com.sun.star.beans.XPropertySet; import com.sun.star.frame.XStorable; import com.sun.star.uno.UnoRuntime; import com.sun.star.frame.XModel; import com.sun.star.script.framework.runtime.XScriptContext; // for debug only import javax.swing.JOptionPane; public class OfficeAttachment { private StatusWindow status = null; private XStorable storedDoc = null; private File htmlFile = null; private File officeFile = null; private boolean isHtmlDoc = false; private boolean isOfficeDoc = false; private String templocationURL = ""; private String templocationSystem = ""; private String attachmentName = ""; private String statusLine = ""; public OfficeAttachment( XScriptContext xsc, StatusWindow sw, boolean html, boolean office ) { status = sw; isHtmlDoc = html; isOfficeDoc = office; templocationSystem = templocationURL = System.getProperty( "user.home" ); if( System.getProperty( "os.name" ).indexOf( "Windows" ) != -1 ) { while( templocationURL.indexOf( "\\" ) != -1 ) { int sepPos = templocationURL.indexOf( "\\" ); String firstPart = templocationURL.substring( 0, sepPos ); String lastPart = templocationURL.substring( sepPos + 1, templocationURL.length() ); templocationURL = firstPart + "/" + lastPart; } } try { statusLine = "Querying Office for current document"; status.setStatus( 1, statusLine ); XScriptContext scriptcontext = xsc; XModel xmodel = scriptcontext.getDocument(); storedDoc = (XStorable) UnoRuntime.queryInterface(XStorable.class, xmodel); // find document name from storedDoc attachmentName = storedDoc.getLocation(); } catch( Exception e ) { //UNO error status.setStatus( 1, "Error: " + statusLine ); } if( attachmentName.equalsIgnoreCase( "" ) ) { attachmentName = "Attachment"; } else { int lastSep = attachmentName.lastIndexOf( "/" ); attachmentName = attachmentName.substring( lastSep + 1, attachmentName.length() ); int dot = attachmentName.indexOf( "." ); attachmentName = attachmentName.substring( 0, dot ); } } public boolean createTempDocs() { String filenameURL = "file:///" + templocationURL + "/" + attachmentName; try { if( isHtmlDoc ) { statusLine = "Saving doc in HTML format"; status.setStatus( 4, statusLine ); PropertyValue[] propertyvalue_html = new PropertyValue[2]; propertyvalue_html[0] = new PropertyValue(); propertyvalue_html[0].Name = new String("Overwrite"); propertyvalue_html[0].Value = Boolean.TRUE; propertyvalue_html[1] = new PropertyValue(); propertyvalue_html[1].Name = ("FilterName"); propertyvalue_html[1].Value = new String("swriter: HTML (StarWriter)"); storedDoc.storeAsURL( filenameURL + ".html", propertyvalue_html); File homedir = new File( templocationSystem ); File homefiles[] = homedir.listFiles(); String file = ""; for(int i=0; i < homefiles.length; i++ ) { if( homefiles[i].getName().equals( attachmentName + ".html" ) ) { file = homefiles[i].getAbsolutePath(); } } htmlFile = new File( file ); } if( isOfficeDoc ) { statusLine = "Saving doc in .sxw format"; status.setStatus( 4, statusLine ); PropertyValue[] propertyvalue_sxw = new PropertyValue[2]; propertyvalue_sxw[0] = new PropertyValue(); propertyvalue_sxw[0].Name = new String("Overwrite"); propertyvalue_sxw[0].Value = Boolean.TRUE; propertyvalue_sxw[1] = new PropertyValue(); propertyvalue_sxw[1].Name = new String("Overwrite"); propertyvalue_sxw[1].Value = Boolean.TRUE; storedDoc.storeAsURL( filenameURL + ".sxw", propertyvalue_sxw); File homedir = new File( templocationSystem ); File homefiles[] = homedir.listFiles(); String file = ""; for(int i=0; i < homefiles.length; i++ ) { if( homefiles[i].getName().equals( attachmentName + ".sxw" ) ) { file = homefiles[i].getAbsolutePath(); } } officeFile = new File( file ); } } catch( SecurityException se ) { status.setStatus( 4, "Error: " + statusLine ); System.out.println( "Security error while saving temporary Document(s). Check file permissions in home directory." ); se.printStackTrace(); htmlFile = null; officeFile = null; return false; } catch( Exception e ) { status.setStatus( 4, "Error: " + statusLine ); System.out.println( "Error saving temporary Document(s)" ); e.printStackTrace(); htmlFile = null; officeFile = null; return false; } return true; } public boolean removeTempDocs() { /* if( !htmlFile.exists() && !officeFile.exists() ) { System.out.println("Error: Document(s) have not been saved." ); } */ statusLine = "Removing temp docs"; status.setStatus( 13, statusLine ); try { if( isOfficeDoc && isHtmlDoc ) { htmlFile.delete(); officeFile.delete(); } else { if( isOfficeDoc ) { officeFile.delete(); } else { htmlFile.delete(); } } } catch( SecurityException se ) { status.setStatus( 13, "Error: " + statusLine ); System.out.println( "Security Error while deleting temporary Document(s). Check file permissions in home directory." ); se.printStackTrace(); return false; } return true; } public void cleanUpOnError() { try { if( isOfficeDoc && isHtmlDoc ) { htmlFile.delete(); officeFile.delete(); } else { if( isOfficeDoc ) { officeFile.delete(); } else { htmlFile.delete(); } } } catch( SecurityException se ) { System.out.println( "Security Error while deleting temporary Document(s). Check file permissions in home directory." ); se.printStackTrace(); } } public File[] getAttachments() { statusLine = "Retrieving temp docs"; status.setStatus( 8, statusLine ); File attachments[] = null; if( isOfficeDoc && isHtmlDoc ) { attachments = new File[2]; attachments[0] = htmlFile; attachments[1] = officeFile; } else { if( isOfficeDoc ) { attachments = new File[1]; attachments[0] = officeFile; } else { attachments = new File[1]; attachments[0] = htmlFile; } } return attachments; } public boolean isHtmlAttachment() { return isHtmlDoc; } public boolean isOfficeAttachment() { return isOfficeDoc; } }