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 graphical;
25cdf0e10cSrcweir 
26cdf0e10cSrcweir import java.io.File;
27cdf0e10cSrcweir // import java.io.FileWriter;
28cdf0e10cSrcweir // import java.io.OutputStream;
29cdf0e10cSrcweir // import java.io.PrintStream;
30cdf0e10cSrcweir import java.io.PrintStream;
31cdf0e10cSrcweir import java.io.RandomAccessFile;
32cdf0e10cSrcweir // import java.io.StringWriter;
33cdf0e10cSrcweir // import java.lang.Double;
34cdf0e10cSrcweir 
35cdf0e10cSrcweir 
36cdf0e10cSrcweir public class PerformanceContainer /* extends *//* implements */ {
37cdf0e10cSrcweir     private long m_nStartTime;
38cdf0e10cSrcweir 
39cdf0e10cSrcweir     /*
40cdf0e10cSrcweir       simple helper functions to start/stop a timer, to know how long a process need in milliseconds
41cdf0e10cSrcweir      */
getStartTime()42cdf0e10cSrcweir     public long getStartTime()
43cdf0e10cSrcweir         {
44cdf0e10cSrcweir             return System.currentTimeMillis();
45cdf0e10cSrcweir         }
setStartTime(long _nStartTime)46cdf0e10cSrcweir     public void setStartTime(long _nStartTime)
47cdf0e10cSrcweir         {
48cdf0e10cSrcweir             m_nStartTime = _nStartTime;
49cdf0e10cSrcweir         }
50cdf0e10cSrcweir 
51cdf0e10cSrcweir     /*
52cdf0e10cSrcweir       return the time, which is done until last startTime()
53cdf0e10cSrcweir      */
meanTime(long _nCurrentTimer)54cdf0e10cSrcweir     private long meanTime(long _nCurrentTimer)
55cdf0e10cSrcweir         {
56cdf0e10cSrcweir             if (_nCurrentTimer == 0)
57cdf0e10cSrcweir             {
58cdf0e10cSrcweir                 GlobalLogWriter.println("Forgotten to initialise a start timer.");
59cdf0e10cSrcweir                 return 0;
60cdf0e10cSrcweir             }
61cdf0e10cSrcweir             long nMeanTime = System.currentTimeMillis();
62cdf0e10cSrcweir             return nMeanTime - _nCurrentTimer;
63cdf0e10cSrcweir         }
64cdf0e10cSrcweir 
65cdf0e10cSrcweir     /*
66cdf0e10cSrcweir       public long stopTimer()
67cdf0e10cSrcweir         {
68cdf0e10cSrcweir             if (m_nStartTime == 0)
69cdf0e10cSrcweir             {
70cdf0e10cSrcweir                 System.out.println("Forgotten to initialise start timer.");
71cdf0e10cSrcweir                 return 0;
72cdf0e10cSrcweir             }
73cdf0e10cSrcweir             long nStopTime = System.currentTimeMillis();
74cdf0e10cSrcweir             return nStopTime - m_nStartTime;
75cdf0e10cSrcweir         }
76cdf0e10cSrcweir     */
77cdf0e10cSrcweir 
78cdf0e10cSrcweir     final static int Load = 0;
79cdf0e10cSrcweir     final static int Store = 1;
80cdf0e10cSrcweir     final static int Print = 2;
81cdf0e10cSrcweir     final static int OfficeStart = 3;
82cdf0e10cSrcweir     final static int StoreAsPDF = 4;
83cdf0e10cSrcweir     final static int OfficeStop = 5;
84cdf0e10cSrcweir     final static int AllTime = 6;
85cdf0e10cSrcweir     final static int LAST_VALUE = 7; // THIS MUST BE ALWAYS THE LAST AND THE BIGGEST VALUE!
86cdf0e10cSrcweir 
87cdf0e10cSrcweir     private long m_nTime[];
88cdf0e10cSrcweir     private String m_sMSOfficeVersion;
89cdf0e10cSrcweir 
PerformanceContainer()90cdf0e10cSrcweir     public PerformanceContainer()
91cdf0e10cSrcweir         {
92cdf0e10cSrcweir             m_nTime = new long[LAST_VALUE];
93cdf0e10cSrcweir             // @todo: is this need?
94cdf0e10cSrcweir             for (int i=0;i<LAST_VALUE;i++)
95cdf0e10cSrcweir             {
96cdf0e10cSrcweir                 m_nTime[i] = 0;
97cdf0e10cSrcweir             }
98cdf0e10cSrcweir         }
99cdf0e10cSrcweir 
setTime(int _nIndex, long _nValue)100cdf0e10cSrcweir     public void setTime(int _nIndex, long _nValue)
101cdf0e10cSrcweir         {
102cdf0e10cSrcweir             m_nTime[_nIndex] = _nValue;
103cdf0e10cSrcweir         }
getTime(int _nIndex)104cdf0e10cSrcweir     public long getTime(int _nIndex)
105cdf0e10cSrcweir         {
106cdf0e10cSrcweir             return m_nTime[_nIndex];
107cdf0e10cSrcweir         }
108cdf0e10cSrcweir 
startTime(int _nIndex)109cdf0e10cSrcweir     public void startTime(int _nIndex)
110cdf0e10cSrcweir         {
111cdf0e10cSrcweir             m_nTime[_nIndex] = getStartTime();
112cdf0e10cSrcweir         }
113cdf0e10cSrcweir 
stopTime(int _nIndex)114cdf0e10cSrcweir     public void stopTime(int _nIndex)
115cdf0e10cSrcweir         {
116cdf0e10cSrcweir             m_nTime[_nIndex] = meanTime(m_nTime[_nIndex]);
117cdf0e10cSrcweir         }
118cdf0e10cSrcweir 
getMSOfficeVersion()119cdf0e10cSrcweir     public String getMSOfficeVersion()
120cdf0e10cSrcweir     {
121cdf0e10cSrcweir         return m_sMSOfficeVersion;
122cdf0e10cSrcweir     }
123cdf0e10cSrcweir 
print(PrintStream out)124cdf0e10cSrcweir     public void print(PrintStream out)
125cdf0e10cSrcweir         {
126cdf0e10cSrcweir             // String ls = System.getProperty("line.separator");
127cdf0e10cSrcweir             // out.
128cdf0e10cSrcweir             out.println("loadtime="        + String.valueOf(m_nTime[ Load ]));
129cdf0e10cSrcweir             out.println("storetime="       + String.valueOf(m_nTime[ Store ]));
130cdf0e10cSrcweir             out.println("printtime="       + String.valueOf(m_nTime[ Print ]));
131cdf0e10cSrcweir             out.println("officestarttime=" + String.valueOf(m_nTime[ OfficeStart ]));
132cdf0e10cSrcweir             out.println("officestoptime="  + String.valueOf(m_nTime[ OfficeStop ]));
133cdf0e10cSrcweir             out.println("storeaspdftime="  + String.valueOf(m_nTime[ StoreAsPDF ]));
134cdf0e10cSrcweir             out.println("alltime="         + String.valueOf(m_nTime[ AllTime ]));
135cdf0e10cSrcweir         }
136cdf0e10cSrcweir 
print(IniFile _aIniFile, String _sSection)137cdf0e10cSrcweir     public void print(IniFile _aIniFile, String _sSection)
138cdf0e10cSrcweir         {
139cdf0e10cSrcweir             // String ls = System.getProperty("line.separator");
140cdf0e10cSrcweir             // out.
141cdf0e10cSrcweir             _aIniFile.insertValue(_sSection, "loadtime"        , String.valueOf(m_nTime[ Load ]));
142cdf0e10cSrcweir             _aIniFile.insertValue(_sSection, "storetime"       , String.valueOf(m_nTime[ Store ]));
143cdf0e10cSrcweir             _aIniFile.insertValue(_sSection, "printtime"       , String.valueOf(m_nTime[ Print ]));
144cdf0e10cSrcweir             _aIniFile.insertValue(_sSection, "officestarttime" , String.valueOf(m_nTime[ OfficeStart ]));
145cdf0e10cSrcweir             _aIniFile.insertValue(_sSection, "officestoptime"  , String.valueOf(m_nTime[ OfficeStop ]));
146cdf0e10cSrcweir             _aIniFile.insertValue(_sSection, "storeaspdftime"  , String.valueOf(m_nTime[ StoreAsPDF ]));
147cdf0e10cSrcweir             _aIniFile.insertValue(_sSection, "alltime"         , String.valueOf(m_nTime[ AllTime ]));
148cdf0e10cSrcweir         }
149cdf0e10cSrcweir 
stringToDouble(String _sStr)150cdf0e10cSrcweir     public static double stringToDouble(String _sStr)
151cdf0e10cSrcweir         {
152cdf0e10cSrcweir             double nValue = 0;
153cdf0e10cSrcweir             try
154cdf0e10cSrcweir             {
155cdf0e10cSrcweir                 nValue = Double.parseDouble( _sStr );
156cdf0e10cSrcweir             }
157cdf0e10cSrcweir             catch (NumberFormatException e)
158cdf0e10cSrcweir             {
159cdf0e10cSrcweir                 GlobalLogWriter.println("Can't convert string to double " + _sStr);
160cdf0e10cSrcweir             }
161cdf0e10cSrcweir             return nValue;
162cdf0e10cSrcweir         }
163cdf0e10cSrcweir 
secondsToMilliSeconds(double _nSeconds)164cdf0e10cSrcweir     public static long secondsToMilliSeconds(double _nSeconds)
165cdf0e10cSrcweir         {
166cdf0e10cSrcweir             return (long)(_nSeconds * 1000.0);
167cdf0e10cSrcweir         }
168cdf0e10cSrcweir 
169cdf0e10cSrcweir     /*
170cdf0e10cSrcweir       Helper function, which read some values from a given file
171cdf0e10cSrcweir 
172cdf0e10cSrcweir       sample of wordinfofile
173cdf0e10cSrcweir     name=c:\doc-pool\wntmsci\samples\msoffice\word\LineSpacing.doc
174cdf0e10cSrcweir     WordVersion=11.0
175cdf0e10cSrcweir     WordStartTime=0.340490102767944
176cdf0e10cSrcweir     WordLoadTime=0.650935888290405
177cdf0e10cSrcweir     WordPrintTime=0.580835103988647
178cdf0e10cSrcweir      */
readWordValuesFromFile(String sFilename)179cdf0e10cSrcweir     public void readWordValuesFromFile(String sFilename)
180cdf0e10cSrcweir         {
181cdf0e10cSrcweir             File aFile = new File(sFilename);
182cdf0e10cSrcweir             if (! aFile.exists())
183cdf0e10cSrcweir             {
184cdf0e10cSrcweir                 GlobalLogWriter.println("couldn't find file " + sFilename);
185cdf0e10cSrcweir                 return;
186cdf0e10cSrcweir             }
187cdf0e10cSrcweir 
188cdf0e10cSrcweir             RandomAccessFile aRandomAccessFile = null;
189cdf0e10cSrcweir             try
190cdf0e10cSrcweir             {
191cdf0e10cSrcweir                 aRandomAccessFile = new RandomAccessFile(aFile,"r");
192cdf0e10cSrcweir                 String sLine = "";
193cdf0e10cSrcweir                 while (sLine != null)
194cdf0e10cSrcweir                 {
195cdf0e10cSrcweir                     sLine = aRandomAccessFile.readLine();
196cdf0e10cSrcweir                     if ( (sLine != null) &&
197cdf0e10cSrcweir 						 (! (sLine.length() < 2) ) &&
198cdf0e10cSrcweir 						 (! sLine.startsWith("#")))
199cdf0e10cSrcweir 					{
200cdf0e10cSrcweir                         if (sLine.startsWith("WordStartTime="))
201cdf0e10cSrcweir                         {
202cdf0e10cSrcweir                             String sTime = sLine.substring(14);
203cdf0e10cSrcweir                             m_nTime[OfficeStart] = secondsToMilliSeconds(stringToDouble(sTime));
204cdf0e10cSrcweir                         }
205cdf0e10cSrcweir                         else if (sLine.startsWith("WordLoadTime="))
206cdf0e10cSrcweir                         {
207cdf0e10cSrcweir                             String sTime = sLine.substring(13);
208cdf0e10cSrcweir                             m_nTime[Load] = secondsToMilliSeconds(stringToDouble(sTime));
209cdf0e10cSrcweir                         }
210cdf0e10cSrcweir                         else if (sLine.startsWith("WordPrintTime="))
211cdf0e10cSrcweir                         {
212cdf0e10cSrcweir                             String sTime = sLine.substring(14);
213cdf0e10cSrcweir                             m_nTime[Print] = secondsToMilliSeconds(stringToDouble(sTime));
214cdf0e10cSrcweir                         }
215cdf0e10cSrcweir                         else if (sLine.startsWith("WordVersion="))
216cdf0e10cSrcweir                         {
217cdf0e10cSrcweir                             String sMSOfficeVersion = sLine.substring(12);
218cdf0e10cSrcweir                             m_sMSOfficeVersion = "Word:" + sMSOfficeVersion;
219cdf0e10cSrcweir                         }
220cdf0e10cSrcweir                         else if (sLine.startsWith("ExcelVersion="))
221cdf0e10cSrcweir                         {
222cdf0e10cSrcweir                             String sMSOfficeVersion = sLine.substring(13);
223cdf0e10cSrcweir                             m_sMSOfficeVersion = "Excel:" + sMSOfficeVersion;
224cdf0e10cSrcweir                         }
225cdf0e10cSrcweir                         else if (sLine.startsWith("PowerPointVersion="))
226cdf0e10cSrcweir                         {
227cdf0e10cSrcweir                             String sMSOfficeVersion = sLine.substring(18);
228cdf0e10cSrcweir                             m_sMSOfficeVersion = "PowerPoint:" + sMSOfficeVersion;
229cdf0e10cSrcweir                         }
230cdf0e10cSrcweir 					}
231cdf0e10cSrcweir 				}
232cdf0e10cSrcweir             }
233cdf0e10cSrcweir             catch (java.io.FileNotFoundException fne)
234cdf0e10cSrcweir             {
235cdf0e10cSrcweir                 GlobalLogWriter.println("couldn't open file " + sFilename);
236cdf0e10cSrcweir                 GlobalLogWriter.println("Message: " + fne.getMessage());
237cdf0e10cSrcweir             }
238cdf0e10cSrcweir             catch (java.io.IOException ie)
239cdf0e10cSrcweir             {
240cdf0e10cSrcweir                 GlobalLogWriter.println("Exception while reading file " + sFilename);
241cdf0e10cSrcweir                 GlobalLogWriter.println("Message: " + ie.getMessage());
242cdf0e10cSrcweir             }
243cdf0e10cSrcweir             try
244cdf0e10cSrcweir             {
245cdf0e10cSrcweir                 aRandomAccessFile.close();
246cdf0e10cSrcweir             }
247cdf0e10cSrcweir             catch (java.io.IOException ie)
248cdf0e10cSrcweir             {
249cdf0e10cSrcweir                 GlobalLogWriter.println("Couldn't close file " + sFilename);
250cdf0e10cSrcweir                 GlobalLogWriter.println("Message: " + ie.getMessage());
251cdf0e10cSrcweir             }
252cdf0e10cSrcweir         }
253cdf0e10cSrcweir 
254cdf0e10cSrcweir //    public static void main(String[] args)
255cdf0e10cSrcweir //    {
256cdf0e10cSrcweir //        BorderRemover a = new BorderRemover();
257cdf0e10cSrcweir //        try
258cdf0e10cSrcweir //        {
259cdf0e10cSrcweir //            a.createNewImageWithoutBorder(args[0], args[1]);
260cdf0e10cSrcweir //        }
261cdf0e10cSrcweir //        catch(java.io.IOException e)
262cdf0e10cSrcweir //        {
263cdf0e10cSrcweir //            System.out.println("Exception caught.");
264cdf0e10cSrcweir //        }
265cdf0e10cSrcweir //
266cdf0e10cSrcweir //    }
267cdf0e10cSrcweir }
268