1*cdf0e10cSrcweir //import com.sun.star.frame.XComponentLoader;
2*cdf0e10cSrcweir import java.io.*;
3*cdf0e10cSrcweir import com.sun.star.lang.XComponent;
4*cdf0e10cSrcweir import com.sun.star.beans.PropertyValue;
5*cdf0e10cSrcweir import com.sun.star.beans.XPropertySet;
6*cdf0e10cSrcweir import com.sun.star.frame.XStorable;
7*cdf0e10cSrcweir import com.sun.star.uno.UnoRuntime;
8*cdf0e10cSrcweir import com.sun.star.frame.XModel;
9*cdf0e10cSrcweir import com.sun.star.script.framework.runtime.XScriptContext;
10*cdf0e10cSrcweir 
11*cdf0e10cSrcweir // for debug only
12*cdf0e10cSrcweir import javax.swing.JOptionPane;
13*cdf0e10cSrcweir 
14*cdf0e10cSrcweir public class OfficeAttachment
15*cdf0e10cSrcweir {
16*cdf0e10cSrcweir 
17*cdf0e10cSrcweir 	private StatusWindow status = null;
18*cdf0e10cSrcweir 	private XStorable storedDoc = null;
19*cdf0e10cSrcweir 	private File htmlFile = null;
20*cdf0e10cSrcweir 	private File officeFile = null;
21*cdf0e10cSrcweir 	private boolean isHtmlDoc = false;
22*cdf0e10cSrcweir 	private boolean isOfficeDoc = false;
23*cdf0e10cSrcweir 	private String templocationURL = "";
24*cdf0e10cSrcweir 	private String templocationSystem = "";
25*cdf0e10cSrcweir 	private String attachmentName = "";
26*cdf0e10cSrcweir 	private String statusLine = "";
27*cdf0e10cSrcweir 
28*cdf0e10cSrcweir 	public OfficeAttachment( XScriptContext xsc, StatusWindow sw, boolean html, boolean office )
29*cdf0e10cSrcweir 	{
30*cdf0e10cSrcweir 		status = sw;
31*cdf0e10cSrcweir 		isHtmlDoc = html;
32*cdf0e10cSrcweir 		isOfficeDoc = office;
33*cdf0e10cSrcweir 
34*cdf0e10cSrcweir 		templocationSystem = templocationURL = System.getProperty( "user.home" );
35*cdf0e10cSrcweir 		if( System.getProperty( "os.name" ).indexOf( "Windows" ) != -1 )
36*cdf0e10cSrcweir 		{
37*cdf0e10cSrcweir 			while( templocationURL.indexOf( "\\" ) != -1 )
38*cdf0e10cSrcweir 			{
39*cdf0e10cSrcweir 				int sepPos = templocationURL.indexOf( "\\" );
40*cdf0e10cSrcweir 				String firstPart = templocationURL.substring( 0, sepPos );
41*cdf0e10cSrcweir 				String lastPart = templocationURL.substring( sepPos + 1, templocationURL.length() );
42*cdf0e10cSrcweir 				templocationURL = firstPart + "/" + lastPart;
43*cdf0e10cSrcweir 				//JOptionPane.showMessageDialog( null, "Temp Location URL is: " + templocationURL + "\nfirstPart is: " + firstPart + "\nlastPart is: " + lastPart );
44*cdf0e10cSrcweir 			}
45*cdf0e10cSrcweir 		}
46*cdf0e10cSrcweir 
47*cdf0e10cSrcweir 		try
48*cdf0e10cSrcweir 		{
49*cdf0e10cSrcweir 			statusLine = "Querying Office for current document";
50*cdf0e10cSrcweir 			status.setStatus( 1, statusLine );
51*cdf0e10cSrcweir 			XScriptContext scriptcontext = xsc;
52*cdf0e10cSrcweir 			XModel xmodel = scriptcontext.getDocument();
53*cdf0e10cSrcweir 			storedDoc = (XStorable) UnoRuntime.queryInterface(XStorable.class, xmodel);
54*cdf0e10cSrcweir 			// find document name from storedDoc
55*cdf0e10cSrcweir 			attachmentName = storedDoc.getLocation();
56*cdf0e10cSrcweir 		}
57*cdf0e10cSrcweir 		catch( Exception e )
58*cdf0e10cSrcweir 		{
59*cdf0e10cSrcweir 			//UNO error
60*cdf0e10cSrcweir 			status.setStatus( 1, "Error: " + statusLine );
61*cdf0e10cSrcweir 		}
62*cdf0e10cSrcweir 
63*cdf0e10cSrcweir 		if( attachmentName.equalsIgnoreCase( "" ) )
64*cdf0e10cSrcweir 		{
65*cdf0e10cSrcweir 			attachmentName = "Attachment";
66*cdf0e10cSrcweir 		}
67*cdf0e10cSrcweir 		else
68*cdf0e10cSrcweir 		{
69*cdf0e10cSrcweir 			//int lastSep = attachmentName.lastIndexOf( System.getProperty( "file.separator" ) );
70*cdf0e10cSrcweir 			int lastSep = attachmentName.lastIndexOf( "/" );
71*cdf0e10cSrcweir 			attachmentName = attachmentName.substring( lastSep + 1, attachmentName.length() );
72*cdf0e10cSrcweir 			int dot = attachmentName.indexOf( "." );
73*cdf0e10cSrcweir 			attachmentName = attachmentName.substring( 0, dot );
74*cdf0e10cSrcweir 		}
75*cdf0e10cSrcweir 	}
76*cdf0e10cSrcweir 
77*cdf0e10cSrcweir 
78*cdf0e10cSrcweir 	public boolean createTempDocs()
79*cdf0e10cSrcweir 	{
80*cdf0e10cSrcweir 		String filenameURL = "file:///" + templocationURL +  "/" + attachmentName;
81*cdf0e10cSrcweir 		//String filenameSystem = templocationSystem + System.getProperty( "file.separator" ) + attachmentName;
82*cdf0e10cSrcweir 		//JOptionPane.showMessageDialog( null, "Filename URL " + filenameURL );
83*cdf0e10cSrcweir 		try
84*cdf0e10cSrcweir 		{
85*cdf0e10cSrcweir 			if( isHtmlDoc )
86*cdf0e10cSrcweir 			{
87*cdf0e10cSrcweir 				//JOptionPane.showMessageDialog( null, "Saving doc in HTML format" );
88*cdf0e10cSrcweir 				statusLine = "Saving doc in HTML format";
89*cdf0e10cSrcweir 				status.setStatus( 4, statusLine );
90*cdf0e10cSrcweir 				//System.out.print( "Saving attachment as " + filename + ".html..." );
91*cdf0e10cSrcweir 		       		PropertyValue[] propertyvalue_html = new PropertyValue[2];
92*cdf0e10cSrcweir 			        propertyvalue_html[0] = new PropertyValue();
93*cdf0e10cSrcweir        		 		propertyvalue_html[0].Name = new String("Overwrite");
94*cdf0e10cSrcweir 			        propertyvalue_html[0].Value = new Boolean(true);
95*cdf0e10cSrcweir 		       		propertyvalue_html[1] = new PropertyValue();
96*cdf0e10cSrcweir 			        propertyvalue_html[1].Name = ("FilterName");
97*cdf0e10cSrcweir //			        propertyvalue_html[1].Value = new String("scalc: HTML (StarCalc)");
98*cdf0e10cSrcweir 			        propertyvalue_html[1].Value = new String("swriter: HTML (StarWriter)");
99*cdf0e10cSrcweir 				storedDoc.storeAsURL( filenameURL + ".html", propertyvalue_html);
100*cdf0e10cSrcweir 
101*cdf0e10cSrcweir 				File homedir = new File( templocationSystem );
102*cdf0e10cSrcweir 				//JOptionPane.showMessageDialog( null, "homedir (Java File): " + homedir.getPath() );
103*cdf0e10cSrcweir 				File homefiles[] = homedir.listFiles();
104*cdf0e10cSrcweir 				String file = "";
105*cdf0e10cSrcweir 				for(int i=0; i < homefiles.length; i++ )
106*cdf0e10cSrcweir 				{
107*cdf0e10cSrcweir 					if( homefiles[i].getName().equals( attachmentName + ".html" ) )
108*cdf0e10cSrcweir 					{
109*cdf0e10cSrcweir 						//htmlFile = new File( homefiles[i].getAbsolutePath() );
110*cdf0e10cSrcweir 						//JOptionPane.showMessageDialog( null, "Found HTML" );
111*cdf0e10cSrcweir 						file = homefiles[i].getAbsolutePath();
112*cdf0e10cSrcweir 					}
113*cdf0e10cSrcweir 				}
114*cdf0e10cSrcweir 				htmlFile = new File( file );
115*cdf0e10cSrcweir 				//htmlFile = new File( filename + ".html" );
116*cdf0e10cSrcweir 				//htmlFile = new File( storedDoc.getLocation() );
117*cdf0e10cSrcweir 			}
118*cdf0e10cSrcweir 
119*cdf0e10cSrcweir 			if( isOfficeDoc )
120*cdf0e10cSrcweir 			{
121*cdf0e10cSrcweir 				//JOptionPane.showMessageDialog( null, "Saving doc in .sxw format" );
122*cdf0e10cSrcweir 				statusLine = "Saving doc in .sxw format";
123*cdf0e10cSrcweir 				status.setStatus( 4, statusLine );
124*cdf0e10cSrcweir 				//System.out.print( "Saving attachment as " + filename + ".sxw..." );
125*cdf0e10cSrcweir 				PropertyValue[] propertyvalue_sxw = new PropertyValue[2];
126*cdf0e10cSrcweir 			        propertyvalue_sxw[0] = new PropertyValue();
127*cdf0e10cSrcweir         			propertyvalue_sxw[0].Name = new String("Overwrite");
128*cdf0e10cSrcweir 			        propertyvalue_sxw[0].Value = new Boolean(true);
129*cdf0e10cSrcweir 			        propertyvalue_sxw[1] = new PropertyValue();
130*cdf0e10cSrcweir 			        propertyvalue_sxw[1].Name = new String("Overwrite");
131*cdf0e10cSrcweir 			        propertyvalue_sxw[1].Value = new Boolean(true);
132*cdf0e10cSrcweir 			        storedDoc.storeAsURL( filenameURL + ".sxw", propertyvalue_sxw);
133*cdf0e10cSrcweir 
134*cdf0e10cSrcweir 				File homedir = new File( templocationSystem );
135*cdf0e10cSrcweir 
136*cdf0e10cSrcweir 				//JOptionPane.showMessageDialog( null, "homedir (Java File): " + homedir.getPath() );
137*cdf0e10cSrcweir 
138*cdf0e10cSrcweir                                 File homefiles[] = homedir.listFiles();
139*cdf0e10cSrcweir 				String file = "";
140*cdf0e10cSrcweir                                 for(int i=0; i < homefiles.length; i++ )
141*cdf0e10cSrcweir                                 {
142*cdf0e10cSrcweir                                         if( homefiles[i].getName().equals( attachmentName + ".sxw" ) )
143*cdf0e10cSrcweir                                         {
144*cdf0e10cSrcweir                                                 //officeFile = new File( homefiles[i].getAbsolutePath() );
145*cdf0e10cSrcweir 						//JOptionPane.showMessageDialog( null, "Found .sxw" );
146*cdf0e10cSrcweir 						file = homefiles[i].getAbsolutePath();
147*cdf0e10cSrcweir                                         }
148*cdf0e10cSrcweir                                 }
149*cdf0e10cSrcweir 				officeFile = new File( file );
150*cdf0e10cSrcweir 				//officeFile = new File( filename + ".sxw" );
151*cdf0e10cSrcweir 				//officeFile = new File (storedDoc.getLocation() );
152*cdf0e10cSrcweir 			}
153*cdf0e10cSrcweir 
154*cdf0e10cSrcweir 			//status.setStatus( 10, "Attachments successfully created" );
155*cdf0e10cSrcweir 
156*cdf0e10cSrcweir 		}
157*cdf0e10cSrcweir 		catch( SecurityException se )
158*cdf0e10cSrcweir 		{
159*cdf0e10cSrcweir 			status.setStatus( 4, "Error: " + statusLine );
160*cdf0e10cSrcweir 			System.out.println( "Security error while saving temporary Document(s). Check file permissions in home directory." );
161*cdf0e10cSrcweir 			se.printStackTrace();
162*cdf0e10cSrcweir 			htmlFile = null;
163*cdf0e10cSrcweir 			officeFile = null;
164*cdf0e10cSrcweir 			return false;
165*cdf0e10cSrcweir 		}
166*cdf0e10cSrcweir 		catch( Exception e )
167*cdf0e10cSrcweir 		{
168*cdf0e10cSrcweir 			status.setStatus( 4, "Error: " + statusLine );
169*cdf0e10cSrcweir 			System.out.println( "Error saving temporary Document(s)" );
170*cdf0e10cSrcweir 			e.printStackTrace();
171*cdf0e10cSrcweir 			htmlFile = null;
172*cdf0e10cSrcweir 			officeFile = null;
173*cdf0e10cSrcweir 			return false;
174*cdf0e10cSrcweir 		}
175*cdf0e10cSrcweir 		return true;
176*cdf0e10cSrcweir 	}
177*cdf0e10cSrcweir 
178*cdf0e10cSrcweir 
179*cdf0e10cSrcweir 	public boolean removeTempDocs()
180*cdf0e10cSrcweir 	{
181*cdf0e10cSrcweir 		/*
182*cdf0e10cSrcweir 		if( !htmlFile.exists() && !officeFile.exists() )
183*cdf0e10cSrcweir                 {
184*cdf0e10cSrcweir 			System.out.println("Error: Document(s) have not been saved." );
185*cdf0e10cSrcweir 		}
186*cdf0e10cSrcweir 		*/
187*cdf0e10cSrcweir 
188*cdf0e10cSrcweir 		statusLine = "Removing temp docs";
189*cdf0e10cSrcweir 		status.setStatus( 13, statusLine );
190*cdf0e10cSrcweir 
191*cdf0e10cSrcweir 		try
192*cdf0e10cSrcweir 		{
193*cdf0e10cSrcweir 			if( isOfficeDoc && isHtmlDoc )
194*cdf0e10cSrcweir 			{
195*cdf0e10cSrcweir 				//System.out.println( "Removing: " + htmlFile.getPath() + " " + officeFile.getPath() );
196*cdf0e10cSrcweir 				//System.out.println( "htmlfile " + htmlFile.exists() + " officeFile " + officeFile.exists() );
197*cdf0e10cSrcweir 				//JOptionPane.showMessageDialog( null, "Removing: " + htmlFile.getPath() + " " + officeFile.getPath() );
198*cdf0e10cSrcweir 				//JOptionPane.showMessageDialog( null, "htmlfile " + htmlFile.exists() + " officeFile " + officeFile.exists() );
199*cdf0e10cSrcweir 				htmlFile.delete();
200*cdf0e10cSrcweir 				officeFile.delete();
201*cdf0e10cSrcweir 				//JOptionPane.showMessageDialog( null, "htmlfile " + htmlFile.exists() + " officeFile " + officeFile.exists() );
202*cdf0e10cSrcweir 			}
203*cdf0e10cSrcweir 			else
204*cdf0e10cSrcweir 			{
205*cdf0e10cSrcweir 				if( isOfficeDoc )
206*cdf0e10cSrcweir        	                	{
207*cdf0e10cSrcweir 					//System.out.println( "Removing: " + officeFile.getPath() );
208*cdf0e10cSrcweir 					officeFile.delete();
209*cdf0e10cSrcweir 				}
210*cdf0e10cSrcweir 				else
211*cdf0e10cSrcweir 				{
212*cdf0e10cSrcweir 					//System.out.println( "Removing: " + htmlFile.getPath() );
213*cdf0e10cSrcweir 					htmlFile.delete();
214*cdf0e10cSrcweir 				}
215*cdf0e10cSrcweir 			}
216*cdf0e10cSrcweir 		}
217*cdf0e10cSrcweir 		catch( SecurityException se )
218*cdf0e10cSrcweir 		{
219*cdf0e10cSrcweir 			status.setStatus( 13, "Error: " + statusLine );
220*cdf0e10cSrcweir 			System.out.println( "Security Error while deleting temporary Document(s). Check file permissions in home directory." );
221*cdf0e10cSrcweir 			se.printStackTrace();
222*cdf0e10cSrcweir 			return false;
223*cdf0e10cSrcweir 		}
224*cdf0e10cSrcweir 		return true;
225*cdf0e10cSrcweir 	}
226*cdf0e10cSrcweir 
227*cdf0e10cSrcweir 
228*cdf0e10cSrcweir 	public void cleanUpOnError()
229*cdf0e10cSrcweir 	{
230*cdf0e10cSrcweir 		try
231*cdf0e10cSrcweir 		{
232*cdf0e10cSrcweir 			if( isOfficeDoc && isHtmlDoc )
233*cdf0e10cSrcweir 			{
234*cdf0e10cSrcweir 				htmlFile.delete();
235*cdf0e10cSrcweir 				officeFile.delete();
236*cdf0e10cSrcweir 			}
237*cdf0e10cSrcweir 			else
238*cdf0e10cSrcweir 			{
239*cdf0e10cSrcweir 				if( isOfficeDoc )
240*cdf0e10cSrcweir        	                	{
241*cdf0e10cSrcweir 					officeFile.delete();
242*cdf0e10cSrcweir 				}
243*cdf0e10cSrcweir 				else
244*cdf0e10cSrcweir 				{
245*cdf0e10cSrcweir 					htmlFile.delete();
246*cdf0e10cSrcweir 				}
247*cdf0e10cSrcweir 			}
248*cdf0e10cSrcweir 		}
249*cdf0e10cSrcweir 		catch( SecurityException se )
250*cdf0e10cSrcweir 		{
251*cdf0e10cSrcweir 			System.out.println( "Security Error while deleting temporary Document(s). Check file permissions in home directory." );
252*cdf0e10cSrcweir 			se.printStackTrace();
253*cdf0e10cSrcweir 		}
254*cdf0e10cSrcweir 	}
255*cdf0e10cSrcweir 
256*cdf0e10cSrcweir 
257*cdf0e10cSrcweir 	public File[] getAttachments()
258*cdf0e10cSrcweir 	{
259*cdf0e10cSrcweir 		/*
260*cdf0e10cSrcweir 		if( htmlFile == null && officeFile == null )
261*cdf0e10cSrcweir 		{
262*cdf0e10cSrcweir 			System.out.println( "Error: Document(s) have not been saved." );
263*cdf0e10cSrcweir 			return null;
264*cdf0e10cSrcweir 		}
265*cdf0e10cSrcweir 		*/
266*cdf0e10cSrcweir 		//(officeDoc) ? (number = 2) : (number = 1);
267*cdf0e10cSrcweir 
268*cdf0e10cSrcweir 		statusLine = "Retrieving temp docs";
269*cdf0e10cSrcweir 		status.setStatus( 8, statusLine );
270*cdf0e10cSrcweir 
271*cdf0e10cSrcweir 		File attachments[] = null;
272*cdf0e10cSrcweir 		if( isOfficeDoc && isHtmlDoc )
273*cdf0e10cSrcweir 		{
274*cdf0e10cSrcweir 			attachments = new File[2];
275*cdf0e10cSrcweir 			attachments[0] = htmlFile;
276*cdf0e10cSrcweir 			attachments[1] = officeFile;
277*cdf0e10cSrcweir 		}
278*cdf0e10cSrcweir 		else
279*cdf0e10cSrcweir 		{
280*cdf0e10cSrcweir 			if( isOfficeDoc )
281*cdf0e10cSrcweir 			{
282*cdf0e10cSrcweir 				attachments = new File[1];
283*cdf0e10cSrcweir 				attachments[0] = officeFile;
284*cdf0e10cSrcweir 			}
285*cdf0e10cSrcweir 			else
286*cdf0e10cSrcweir 			{
287*cdf0e10cSrcweir 				attachments = new File[1];
288*cdf0e10cSrcweir 				attachments[0] = htmlFile;
289*cdf0e10cSrcweir 			}
290*cdf0e10cSrcweir 		}
291*cdf0e10cSrcweir 
292*cdf0e10cSrcweir 		return attachments;
293*cdf0e10cSrcweir 	}
294*cdf0e10cSrcweir 
295*cdf0e10cSrcweir 
296*cdf0e10cSrcweir 	public boolean isHtmlAttachment()
297*cdf0e10cSrcweir 	{
298*cdf0e10cSrcweir 		return isHtmlDoc;
299*cdf0e10cSrcweir 	}
300*cdf0e10cSrcweir 
301*cdf0e10cSrcweir 
302*cdf0e10cSrcweir 	public boolean isOfficeAttachment()
303*cdf0e10cSrcweir 	{
304*cdf0e10cSrcweir 		return isOfficeDoc;
305*cdf0e10cSrcweir 	}
306*cdf0e10cSrcweir 
307*cdf0e10cSrcweir }
308