/************************************************************** * * 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.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; //JOptionPane.showMessageDialog( null, "Temp Location URL is: " + templocationURL + "\nfirstPart is: " + firstPart + "\nlastPart is: " + 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( System.getProperty( "file.separator" ) ); 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; //String filenameSystem = templocationSystem + System.getProperty( "file.separator" ) + attachmentName; //JOptionPane.showMessageDialog( null, "Filename URL " + filenameURL ); try { if( isHtmlDoc ) { //JOptionPane.showMessageDialog( null, "Saving doc in HTML format" ); statusLine = "Saving doc in HTML format"; status.setStatus( 4, statusLine ); //System.out.print( "Saving attachment as " + filename + ".html..." ); PropertyValue[] propertyvalue_html = new PropertyValue[2]; propertyvalue_html[0] = new PropertyValue(); propertyvalue_html[0].Name = new String("Overwrite"); propertyvalue_html[0].Value = new Boolean(true); propertyvalue_html[1] = new PropertyValue(); propertyvalue_html[1].Name = ("FilterName"); // propertyvalue_html[1].Value = new String("scalc: HTML (StarCalc)"); propertyvalue_html[1].Value = new String("swriter: HTML (StarWriter)"); storedDoc.storeAsURL( filenameURL + ".html", propertyvalue_html); File homedir = new File( templocationSystem ); //JOptionPane.showMessageDialog( null, "homedir (Java File): " + homedir.getPath() ); File homefiles[] = homedir.listFiles(); String file = ""; for(int i=0; i < homefiles.length; i++ ) { if( homefiles[i].getName().equals( attachmentName + ".html" ) ) { //htmlFile = new File( homefiles[i].getAbsolutePath() ); //JOptionPane.showMessageDialog( null, "Found HTML" ); file = homefiles[i].getAbsolutePath(); } } htmlFile = new File( file ); //htmlFile = new File( filename + ".html" ); //htmlFile = new File( storedDoc.getLocation() ); } if( isOfficeDoc ) { //JOptionPane.showMessageDialog( null, "Saving doc in .sxw format" ); statusLine = "Saving doc in .sxw format"; status.setStatus( 4, statusLine ); //System.out.print( "Saving attachment as " + filename + ".sxw..." ); PropertyValue[] propertyvalue_sxw = new PropertyValue[2]; propertyvalue_sxw[0] = new PropertyValue(); propertyvalue_sxw[0].Name = new String("Overwrite"); propertyvalue_sxw[0].Value = new Boolean(true); propertyvalue_sxw[1] = new PropertyValue(); propertyvalue_sxw[1].Name = new String("Overwrite"); propertyvalue_sxw[1].Value = new Boolean(true); storedDoc.storeAsURL( filenameURL + ".sxw", propertyvalue_sxw); File homedir = new File( templocationSystem ); //JOptionPane.showMessageDialog( null, "homedir (Java File): " + homedir.getPath() ); File homefiles[] = homedir.listFiles(); String file = ""; for(int i=0; i < homefiles.length; i++ ) { if( homefiles[i].getName().equals( attachmentName + ".sxw" ) ) { //officeFile = new File( homefiles[i].getAbsolutePath() ); //JOptionPane.showMessageDialog( null, "Found .sxw" ); file = homefiles[i].getAbsolutePath(); } } officeFile = new File( file ); //officeFile = new File( filename + ".sxw" ); //officeFile = new File (storedDoc.getLocation() ); } //status.setStatus( 10, "Attachments successfully created" ); } 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 ) { //System.out.println( "Removing: " + htmlFile.getPath() + " " + officeFile.getPath() ); //System.out.println( "htmlfile " + htmlFile.exists() + " officeFile " + officeFile.exists() ); //JOptionPane.showMessageDialog( null, "Removing: " + htmlFile.getPath() + " " + officeFile.getPath() ); //JOptionPane.showMessageDialog( null, "htmlfile " + htmlFile.exists() + " officeFile " + officeFile.exists() ); htmlFile.delete(); officeFile.delete(); //JOptionPane.showMessageDialog( null, "htmlfile " + htmlFile.exists() + " officeFile " + officeFile.exists() ); } else { if( isOfficeDoc ) { //System.out.println( "Removing: " + officeFile.getPath() ); officeFile.delete(); } else { //System.out.println( "Removing: " + htmlFile.getPath() ); 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() { /* if( htmlFile == null && officeFile == null ) { System.out.println( "Error: Document(s) have not been saved." ); return null; } */ //(officeDoc) ? (number = 2) : (number = 1); 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; } }