1*ef39d40dSAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
3*ef39d40dSAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4*ef39d40dSAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5*ef39d40dSAndrew Rist  * distributed with this work for additional information
6*ef39d40dSAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7*ef39d40dSAndrew Rist  * to you under the Apache License, Version 2.0 (the
8*ef39d40dSAndrew Rist  * "License"); you may not use this file except in compliance
9*ef39d40dSAndrew Rist  * with the License.  You may obtain a copy of the License at
10*ef39d40dSAndrew Rist  *
11*ef39d40dSAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12*ef39d40dSAndrew Rist  *
13*ef39d40dSAndrew Rist  * Unless required by applicable law or agreed to in writing,
14*ef39d40dSAndrew Rist  * software distributed under the License is distributed on an
15*ef39d40dSAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*ef39d40dSAndrew Rist  * KIND, either express or implied.  See the License for the
17*ef39d40dSAndrew Rist  * specific language governing permissions and limitations
18*ef39d40dSAndrew Rist  * under the License.
19*ef39d40dSAndrew Rist  *
20*ef39d40dSAndrew Rist  *************************************************************/
21*ef39d40dSAndrew Rist 
22*ef39d40dSAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir package convwatch;
25cdf0e10cSrcweir 
26cdf0e10cSrcweir import java.io.File;
27cdf0e10cSrcweir import java.io.FileWriter;
28cdf0e10cSrcweir import java.io.RandomAccessFile;
29cdf0e10cSrcweir import java.lang.Double;
30cdf0e10cSrcweir 
31cdf0e10cSrcweir 
32cdf0e10cSrcweir public class PerformanceContainer /* extends *//* implements */ {
33cdf0e10cSrcweir     private long m_nStartTime;
34cdf0e10cSrcweir 
35cdf0e10cSrcweir     /*
36cdf0e10cSrcweir       simple helper functions to start/stop a timer, to know how long a process need in milliseconds
37cdf0e10cSrcweir      */
getStartTime()38cdf0e10cSrcweir     public long getStartTime()
39cdf0e10cSrcweir         {
40cdf0e10cSrcweir             return System.currentTimeMillis();
41cdf0e10cSrcweir         }
setStartTime(long _nStartTime)42cdf0e10cSrcweir     public void setStartTime(long _nStartTime)
43cdf0e10cSrcweir         {
44cdf0e10cSrcweir             m_nStartTime = _nStartTime;
45cdf0e10cSrcweir         }
46cdf0e10cSrcweir 
47cdf0e10cSrcweir     /*
48cdf0e10cSrcweir       return the time, which is done until last startTime()
49cdf0e10cSrcweir      */
meanTime(long _nCurrentTimer)50cdf0e10cSrcweir     private long meanTime(long _nCurrentTimer)
51cdf0e10cSrcweir         {
52cdf0e10cSrcweir             if (_nCurrentTimer == 0)
53cdf0e10cSrcweir             {
54cdf0e10cSrcweir                 GlobalLogWriter.get().println("Forgotten to initialise a start timer.");
55cdf0e10cSrcweir                 return 0;
56cdf0e10cSrcweir             }
57cdf0e10cSrcweir             long nMeanTime = System.currentTimeMillis();
58cdf0e10cSrcweir             return nMeanTime - _nCurrentTimer;
59cdf0e10cSrcweir         }
60cdf0e10cSrcweir 
61cdf0e10cSrcweir     /*
62cdf0e10cSrcweir       public long stopTimer()
63cdf0e10cSrcweir         {
64cdf0e10cSrcweir             if (m_nStartTime == 0)
65cdf0e10cSrcweir             {
66cdf0e10cSrcweir                 System.out.println("Forgotten to initialise start timer.");
67cdf0e10cSrcweir                 return 0;
68cdf0e10cSrcweir             }
69cdf0e10cSrcweir             long nStopTime = System.currentTimeMillis();
70cdf0e10cSrcweir             return nStopTime - m_nStartTime;
71cdf0e10cSrcweir         }
72cdf0e10cSrcweir     */
73cdf0e10cSrcweir 
74cdf0e10cSrcweir     final static int Load = 0;
75cdf0e10cSrcweir     final static int Store = 1;
76cdf0e10cSrcweir     final static int Print = 2;
77cdf0e10cSrcweir     final static int OfficeStart = 3;
78cdf0e10cSrcweir     final static int StoreAsPDF = 4;
79cdf0e10cSrcweir 
80cdf0e10cSrcweir     private long m_nTime[];
81cdf0e10cSrcweir     private String m_sMSOfficeVersion;
82cdf0e10cSrcweir 
PerformanceContainer()83cdf0e10cSrcweir     public PerformanceContainer()
84cdf0e10cSrcweir         {
85cdf0e10cSrcweir             m_nTime = new long[5];
86cdf0e10cSrcweir             // @todo: is this need?
87cdf0e10cSrcweir             for (int i=0;i<5;i++)
88cdf0e10cSrcweir             {
89cdf0e10cSrcweir                 m_nTime[i] = 0;
90cdf0e10cSrcweir             }
91cdf0e10cSrcweir         }
92cdf0e10cSrcweir 
setTime(int _nIndex, long _nValue)93cdf0e10cSrcweir     public void setTime(int _nIndex, long _nValue)
94cdf0e10cSrcweir         {
95cdf0e10cSrcweir             m_nTime[_nIndex] = _nValue;
96cdf0e10cSrcweir         }
getTime(int _nIndex)97cdf0e10cSrcweir     public long getTime(int _nIndex)
98cdf0e10cSrcweir         {
99cdf0e10cSrcweir             return m_nTime[_nIndex];
100cdf0e10cSrcweir         }
101cdf0e10cSrcweir 
startTime(int _nIndex)102cdf0e10cSrcweir     public void startTime(int _nIndex)
103cdf0e10cSrcweir         {
104cdf0e10cSrcweir             m_nTime[_nIndex] = getStartTime();
105cdf0e10cSrcweir         }
106cdf0e10cSrcweir 
stopTime(int _nIndex)107cdf0e10cSrcweir     public void stopTime(int _nIndex)
108cdf0e10cSrcweir         {
109cdf0e10cSrcweir             m_nTime[_nIndex] = meanTime(m_nTime[_nIndex]);
110cdf0e10cSrcweir         }
111cdf0e10cSrcweir 
getMSOfficeVersion()112cdf0e10cSrcweir     public String getMSOfficeVersion()
113cdf0e10cSrcweir     {
114cdf0e10cSrcweir         return m_sMSOfficeVersion;
115cdf0e10cSrcweir     }
print(FileWriter out)116cdf0e10cSrcweir     public void print(FileWriter out) throws java.io.IOException
117cdf0e10cSrcweir         {
118cdf0e10cSrcweir             String ls = System.getProperty("line.separator");
119cdf0e10cSrcweir 
120cdf0e10cSrcweir             out.write("loadtime="        + String.valueOf(m_nTime[ Load ]) + ls);
121cdf0e10cSrcweir             out.write("storetime="       + String.valueOf(m_nTime[ Store ]) + ls);
122cdf0e10cSrcweir             out.write("printtime="       + String.valueOf(m_nTime[ Print ]) + ls);
123cdf0e10cSrcweir             out.write("officestarttime=" + String.valueOf(m_nTime[ OfficeStart ]) + ls);
124cdf0e10cSrcweir             out.write("storeaspdftime="  + String.valueOf(m_nTime[ StoreAsPDF ]) + ls);
125cdf0e10cSrcweir         }
126cdf0e10cSrcweir 
stringToDouble(String _sStr)127cdf0e10cSrcweir     public static double stringToDouble(String _sStr)
128cdf0e10cSrcweir         {
129cdf0e10cSrcweir             double nValue = 0;
130cdf0e10cSrcweir             try
131cdf0e10cSrcweir             {
132cdf0e10cSrcweir                 nValue = Double.parseDouble( _sStr );
133cdf0e10cSrcweir             }
134cdf0e10cSrcweir             catch (NumberFormatException e)
135cdf0e10cSrcweir             {
136cdf0e10cSrcweir                 GlobalLogWriter.get().println("Can't convert string to double " + _sStr);
137cdf0e10cSrcweir             }
138cdf0e10cSrcweir             return nValue;
139cdf0e10cSrcweir         }
140cdf0e10cSrcweir 
secondsToMilliSeconds(double _nSeconds)141cdf0e10cSrcweir     public static long secondsToMilliSeconds(double _nSeconds)
142cdf0e10cSrcweir         {
143cdf0e10cSrcweir             return (long)(_nSeconds * 1000.0);
144cdf0e10cSrcweir         }
145cdf0e10cSrcweir 
146cdf0e10cSrcweir     /*
147cdf0e10cSrcweir       Helper function, which read some values from a given file
148cdf0e10cSrcweir 
149cdf0e10cSrcweir       sample of wordinfofile
150cdf0e10cSrcweir     name=c:\doc-pool\wntmsci\samples\msoffice\word\LineSpacing.doc
151cdf0e10cSrcweir     WordVersion=11.0
152cdf0e10cSrcweir     WordStartTime=0.340490102767944
153cdf0e10cSrcweir     WordLoadTime=0.650935888290405
154cdf0e10cSrcweir     WordPrintTime=0.580835103988647
155cdf0e10cSrcweir      */
readWordValuesFromFile(String sFilename)156cdf0e10cSrcweir     public void readWordValuesFromFile(String sFilename)
157cdf0e10cSrcweir         {
158cdf0e10cSrcweir             File aFile = new File(sFilename);
159cdf0e10cSrcweir             if (! aFile.exists())
160cdf0e10cSrcweir             {
161cdf0e10cSrcweir                 GlobalLogWriter.get().println("couldn't find file " + sFilename);
162cdf0e10cSrcweir                 return;
163cdf0e10cSrcweir             }
164cdf0e10cSrcweir 
165cdf0e10cSrcweir             RandomAccessFile aRandomAccessFile = null;
166cdf0e10cSrcweir             try
167cdf0e10cSrcweir             {
168cdf0e10cSrcweir                 aRandomAccessFile = new RandomAccessFile(aFile,"r");
169cdf0e10cSrcweir                 String sLine = "";
170cdf0e10cSrcweir                 while (sLine != null)
171cdf0e10cSrcweir                 {
172cdf0e10cSrcweir                     sLine = aRandomAccessFile.readLine();
173cdf0e10cSrcweir                     if ( (sLine != null) &&
174cdf0e10cSrcweir 						 (! (sLine.length() < 2) ) &&
175cdf0e10cSrcweir 						 (! sLine.startsWith("#")))
176cdf0e10cSrcweir 					{
177cdf0e10cSrcweir                         if (sLine.startsWith("WordStartTime="))
178cdf0e10cSrcweir                         {
179cdf0e10cSrcweir                             String sTime = sLine.substring(14);
180cdf0e10cSrcweir                             m_nTime[OfficeStart] = secondsToMilliSeconds(stringToDouble(sTime));
181cdf0e10cSrcweir                         }
182cdf0e10cSrcweir                         else if (sLine.startsWith("WordLoadTime="))
183cdf0e10cSrcweir                         {
184cdf0e10cSrcweir                             String sTime = sLine.substring(13);
185cdf0e10cSrcweir                             m_nTime[Load] = secondsToMilliSeconds(stringToDouble(sTime));
186cdf0e10cSrcweir                         }
187cdf0e10cSrcweir                         else if (sLine.startsWith("WordPrintTime="))
188cdf0e10cSrcweir                         {
189cdf0e10cSrcweir                             String sTime = sLine.substring(14);
190cdf0e10cSrcweir                             m_nTime[Print] = secondsToMilliSeconds(stringToDouble(sTime));
191cdf0e10cSrcweir                         }
192cdf0e10cSrcweir                         else if (sLine.startsWith("WordVersion="))
193cdf0e10cSrcweir                         {
194cdf0e10cSrcweir                             String sMSOfficeVersion = sLine.substring(12);
195cdf0e10cSrcweir                             m_sMSOfficeVersion = "Word:" + sMSOfficeVersion;
196cdf0e10cSrcweir                         }
197cdf0e10cSrcweir                         else if (sLine.startsWith("ExcelVersion="))
198cdf0e10cSrcweir                         {
199cdf0e10cSrcweir                             String sMSOfficeVersion = sLine.substring(13);
200cdf0e10cSrcweir                             m_sMSOfficeVersion = "Excel:" + sMSOfficeVersion;
201cdf0e10cSrcweir                         }
202cdf0e10cSrcweir                         else if (sLine.startsWith("PowerPointVersion="))
203cdf0e10cSrcweir                         {
204cdf0e10cSrcweir                             String sMSOfficeVersion = sLine.substring(18);
205cdf0e10cSrcweir                             m_sMSOfficeVersion = "PowerPoint:" + sMSOfficeVersion;
206cdf0e10cSrcweir                         }
207cdf0e10cSrcweir 					}
208cdf0e10cSrcweir 				}
209cdf0e10cSrcweir             }
210cdf0e10cSrcweir             catch (java.io.FileNotFoundException fne)
211cdf0e10cSrcweir             {
212cdf0e10cSrcweir                 GlobalLogWriter.get().println("couldn't open file " + sFilename);
213cdf0e10cSrcweir                 GlobalLogWriter.get().println("Message: " + fne.getMessage());
214cdf0e10cSrcweir             }
215cdf0e10cSrcweir             catch (java.io.IOException ie)
216cdf0e10cSrcweir             {
217cdf0e10cSrcweir                 GlobalLogWriter.get().println("Exception while reading file " + sFilename);
218cdf0e10cSrcweir                 GlobalLogWriter.get().println("Message: " + ie.getMessage());
219cdf0e10cSrcweir             }
220cdf0e10cSrcweir             try
221cdf0e10cSrcweir             {
222cdf0e10cSrcweir                 aRandomAccessFile.close();
223cdf0e10cSrcweir             }
224cdf0e10cSrcweir             catch (java.io.IOException ie)
225cdf0e10cSrcweir             {
226cdf0e10cSrcweir                 GlobalLogWriter.get().println("Couldn't close file " + sFilename);
227cdf0e10cSrcweir                 GlobalLogWriter.get().println("Message: " + ie.getMessage());
228cdf0e10cSrcweir             }
229cdf0e10cSrcweir         }
230cdf0e10cSrcweir 
231cdf0e10cSrcweir //    public static void main(String[] args) {
232cdf0e10cSrcweir //
233cdf0e10cSrcweir ///*
234cdf0e10cSrcweir // BorderRemover a = new BorderRemover();
235cdf0e10cSrcweir //        try
236cdf0e10cSrcweir //        {
237cdf0e10cSrcweir //            a.createNewImageWithoutBorder(args[0], args[1]);
238cdf0e10cSrcweir //        }
239cdf0e10cSrcweir //        catch(java.io.IOException e)
240cdf0e10cSrcweir //        {
241cdf0e10cSrcweir //            System.out.println("Exception caught.");
242cdf0e10cSrcweir //        }
243cdf0e10cSrcweir // */
244cdf0e10cSrcweir //    }
245cdf0e10cSrcweir 
246cdf0e10cSrcweir }
247