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