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 helper.OSHelper;
28cdf0e10cSrcweir 
29cdf0e10cSrcweir public class BuildID
30cdf0e10cSrcweir {
getOfficePath(String _sApp)31cdf0e10cSrcweir     private static String getOfficePath(String _sApp)
32cdf0e10cSrcweir     {
33cdf0e10cSrcweir         String sOfficePath = "";
34cdf0e10cSrcweir         // TODO: StringHelper.removeQuote?
35cdf0e10cSrcweir         if (_sApp.startsWith("\""))
36cdf0e10cSrcweir         {
37cdf0e10cSrcweir             int nIdx = _sApp.indexOf("\"", 1);
38cdf0e10cSrcweir             if (nIdx != -1)
39cdf0e10cSrcweir             {
40cdf0e10cSrcweir                 // leave double qoute out.
41cdf0e10cSrcweir                 sOfficePath = _sApp.substring(1, nIdx);
42cdf0e10cSrcweir             }
43cdf0e10cSrcweir         }
44cdf0e10cSrcweir         else
45cdf0e10cSrcweir         {
46cdf0e10cSrcweir             // check if _sApp ends with the office executable, if not
47cdf0e10cSrcweir             if (! (_sApp.endsWith("soffice.exe") || _sApp.endsWith("soffice")))
48cdf0e10cSrcweir             {
49cdf0e10cSrcweir                 // check if a space exist, so we get all until space
50cdf0e10cSrcweir                 int nIdx = _sApp.indexOf(" ", 1);
51cdf0e10cSrcweir                 if (nIdx == -1)
52cdf0e10cSrcweir                 {
53cdf0e10cSrcweir                     sOfficePath = _sApp;
54cdf0e10cSrcweir                 }
55cdf0e10cSrcweir                 else
56cdf0e10cSrcweir                 {
57cdf0e10cSrcweir                     sOfficePath = _sApp.substring(0, nIdx);
58cdf0e10cSrcweir                 }
59cdf0e10cSrcweir             }
60cdf0e10cSrcweir             else
61cdf0e10cSrcweir             {
62cdf0e10cSrcweir                 sOfficePath = _sApp;
63cdf0e10cSrcweir             }
64cdf0e10cSrcweir         }
65cdf0e10cSrcweir         // GlobalLogWriter.get().println("Office path: " + sOfficePath);
66cdf0e10cSrcweir         return sOfficePath;
67cdf0e10cSrcweir     }
68cdf0e10cSrcweir 
getBuildID(String _sApp)69cdf0e10cSrcweir     public static String getBuildID(String _sApp)
70cdf0e10cSrcweir         {
71cdf0e10cSrcweir             final String sOfficePath = getOfficePath(_sApp);
72cdf0e10cSrcweir             final String sBuildID = getBuildID(sOfficePath, "buildid");
73cdf0e10cSrcweir             return sBuildID;
74cdf0e10cSrcweir     }
75cdf0e10cSrcweir 
getBuildID(String _sOfficePath, String _sIniSection)76cdf0e10cSrcweir     private static String getBuildID(String _sOfficePath, String _sIniSection)
77cdf0e10cSrcweir         {
78cdf0e10cSrcweir             File aSOfficeFile = new File(_sOfficePath);
79cdf0e10cSrcweir             String sBuildID = "";
80cdf0e10cSrcweir             if (aSOfficeFile.exists())
81cdf0e10cSrcweir             {
82cdf0e10cSrcweir                 String sOfficePath = FileHelper.getPath(_sOfficePath);
83cdf0e10cSrcweir                 // ok. System.out.println("directory: " + sOfficePath);
84cdf0e10cSrcweir                 sBuildID = getBuildIDFromBootstrap(sOfficePath, _sIniSection);
85cdf0e10cSrcweir                 if (sBuildID.length() == 0)
86cdf0e10cSrcweir                 {
87cdf0e10cSrcweir                     sBuildID = getBuildIDFromVersion(sOfficePath, _sIniSection);
88cdf0e10cSrcweir                 }
89cdf0e10cSrcweir             }
90cdf0e10cSrcweir             else
91cdf0e10cSrcweir             {
92cdf0e10cSrcweir                 GlobalLogWriter.println("soffice executable not found.");
93cdf0e10cSrcweir             }
94cdf0e10cSrcweir 
95cdf0e10cSrcweir //            int dummy = 0;
96cdf0e10cSrcweir             return sBuildID;
97cdf0e10cSrcweir         }
98cdf0e10cSrcweir 
getBuildIDFromBootstrap(String _sOfficePath, String _sIniSection)99cdf0e10cSrcweir     private static String getBuildIDFromBootstrap(String _sOfficePath, String _sIniSection)
100cdf0e10cSrcweir         {
101cdf0e10cSrcweir             String sBuildID = "";
102cdf0e10cSrcweir             String sOfficePath;
103cdf0e10cSrcweir             if (OSHelper.isWindows())
104cdf0e10cSrcweir             {
105cdf0e10cSrcweir                 sOfficePath = FileHelper.appendPath(_sOfficePath, "bootstrap.ini");
106cdf0e10cSrcweir             }
107cdf0e10cSrcweir             else
108cdf0e10cSrcweir             {
109cdf0e10cSrcweir                 sOfficePath = FileHelper.appendPath(_sOfficePath, "bootstraprc");
110cdf0e10cSrcweir             }
111cdf0e10cSrcweir             IniFile aIniFile = new IniFile(sOfficePath);
112cdf0e10cSrcweir             if (aIniFile.is())
113cdf0e10cSrcweir             {
114cdf0e10cSrcweir                 sBuildID = aIniFile.getValue("Bootstrap", /*"buildid"*/ _sIniSection);
115cdf0e10cSrcweir             }
116cdf0e10cSrcweir             else
117cdf0e10cSrcweir             {
118cdf0e10cSrcweir                 GlobalLogWriter.println("Property Build, can't open file '" + sOfficePath + "', please check.");
119cdf0e10cSrcweir             }
120cdf0e10cSrcweir             return sBuildID;
121cdf0e10cSrcweir         }
122cdf0e10cSrcweir 
getBuildIDFromVersion(String _sOfficePath, String _sIniSection)123cdf0e10cSrcweir     private static String getBuildIDFromVersion(String _sOfficePath, String _sIniSection)
124cdf0e10cSrcweir         {
125cdf0e10cSrcweir             // String fs = System.getProperty("file.separator");
126cdf0e10cSrcweir             String sBuildID = "";
127cdf0e10cSrcweir             String sOfficePath;
128cdf0e10cSrcweir             if (OSHelper.isWindows())
129cdf0e10cSrcweir             {
130cdf0e10cSrcweir                 sOfficePath = FileHelper.appendPath(_sOfficePath, "version.ini");
131cdf0e10cSrcweir             }
132cdf0e10cSrcweir             else
133cdf0e10cSrcweir             {
134cdf0e10cSrcweir                 sOfficePath = FileHelper.appendPath(_sOfficePath, "versionrc");
135cdf0e10cSrcweir             }
136cdf0e10cSrcweir             IniFile aIniFile = new IniFile(sOfficePath);
137cdf0e10cSrcweir             if (aIniFile.is())
138cdf0e10cSrcweir             {
139cdf0e10cSrcweir                 sBuildID = aIniFile.getValue("Version", /*"buildid"*/ _sIniSection);
140cdf0e10cSrcweir             }
141cdf0e10cSrcweir             else
142cdf0e10cSrcweir             {
143cdf0e10cSrcweir                 GlobalLogWriter.println("Property Build, can't open file '" + sOfficePath + "', please check.");
144cdf0e10cSrcweir             }
145cdf0e10cSrcweir             return sBuildID;
146cdf0e10cSrcweir         }
147cdf0e10cSrcweir 
148cdf0e10cSrcweir //    public static void main(String[] args)
149cdf0e10cSrcweir //        {
150cdf0e10cSrcweir //            String sApp;
151cdf0e10cSrcweir //            sApp = "/opt/staroffice8_m116/program/soffice -headless -accept=socket,host=localhost,port=8100;urp;";
152cdf0e10cSrcweir //            String sBuildID;
153cdf0e10cSrcweir //            sBuildID = getBuildID(sApp);
154cdf0e10cSrcweir //            System.out.println("BuildID is: " + sBuildID);
155cdf0e10cSrcweir //
156cdf0e10cSrcweir //            Date aDate = new Date();
157cdf0e10cSrcweir //            long nStart = aDate.getTime();
158cdf0e10cSrcweir //            System.out.println("Time:" + nStart);
159cdf0e10cSrcweir //            // LLA: Just some more tests for getBuildID
160cdf0e10cSrcweir //            // sApp = "/opt/staroffice8_net/program/soffice";
161cdf0e10cSrcweir //            // sBuildID = getBuildID(sApp);
162cdf0e10cSrcweir //            // System.out.println("BuildID is: " + sBuildID);
163cdf0e10cSrcweir //            //
164cdf0e10cSrcweir //            // sApp = "\"/opt/staroffice8_net/program/soffice\" test blah";
165cdf0e10cSrcweir //            // sBuildID = getBuildID(sApp);
166cdf0e10cSrcweir //            //
167cdf0e10cSrcweir //            // System.out.println("BuildID is: " + sBuildID);
168cdf0e10cSrcweir //            System.exit(1);
169cdf0e10cSrcweir //        }
170cdf0e10cSrcweir 
getMaster(String _sOfficePath)171cdf0e10cSrcweir             public static String getMaster(String _sOfficePath)
172cdf0e10cSrcweir             {
173cdf0e10cSrcweir                 final String sOfficePath = getOfficePath(_sOfficePath);
174cdf0e10cSrcweir                 final String sMaster = getBuildID(sOfficePath, "ProductSource");
175cdf0e10cSrcweir                 return sMaster;
176cdf0e10cSrcweir             }
177cdf0e10cSrcweir 
getMinor(String _sOfficePath)178cdf0e10cSrcweir             public static String getMinor(String _sOfficePath)
179cdf0e10cSrcweir             {
180cdf0e10cSrcweir                 final String sOfficePath = getOfficePath(_sOfficePath);
181cdf0e10cSrcweir                 final String sMinor = "m" + getBuildID(sOfficePath, "ProductMinor");
182cdf0e10cSrcweir                 return sMinor;
183cdf0e10cSrcweir             }
184cdf0e10cSrcweir 
getCWSName(String _sOfficePath)185cdf0e10cSrcweir             public static String getCWSName(String _sOfficePath)
186cdf0e10cSrcweir             {
187cdf0e10cSrcweir                 final String sOfficePath = getOfficePath(_sOfficePath);
188cdf0e10cSrcweir                 final String sBuildID = getBuildID(sOfficePath, "buildid");
189cdf0e10cSrcweir                 String sCWSName = "MWS";
190cdf0e10cSrcweir                 int nIdx = sBuildID.indexOf("[CWS:");
191cdf0e10cSrcweir                 if (nIdx > 0)
192cdf0e10cSrcweir                 {
193cdf0e10cSrcweir                     int nIdx2 = sBuildID.indexOf("]", nIdx);
194cdf0e10cSrcweir                     sCWSName = sBuildID.substring(nIdx + 5, nIdx2);
195cdf0e10cSrcweir                 }
196cdf0e10cSrcweir                 return sCWSName;
197cdf0e10cSrcweir             }
198cdf0e10cSrcweir 
199cdf0e10cSrcweir //    public static void main(String[] args)
200cdf0e10cSrcweir //        {
201cdf0e10cSrcweir //            String sApp;
202cdf0e10cSrcweir //            sApp = "D:/staroffice9_m63/Sun/StarOffice 9/program/soffice.exe";
203cdf0e10cSrcweir //            String sBuildID;
204cdf0e10cSrcweir //            sBuildID = getBuildID(sApp);
205cdf0e10cSrcweir //            System.out.println("BuildID is: " + sBuildID);
206cdf0e10cSrcweir //
207cdf0e10cSrcweir //            String sMaster;
208cdf0e10cSrcweir //            sMaster = getMaster(sApp);
209cdf0e10cSrcweir //            System.out.println("Master is: " + sMaster);
210cdf0e10cSrcweir //
211cdf0e10cSrcweir //            String sMinor;
212cdf0e10cSrcweir //            sMinor = getMinor(sApp);
213cdf0e10cSrcweir //            System.out.println("Minor is: " + sMinor);
214cdf0e10cSrcweir //
215cdf0e10cSrcweir //            String sCWSName;
216cdf0e10cSrcweir //            sCWSName = getCWSName(sApp);
217cdf0e10cSrcweir //            System.out.println("CWSName is: " + sCWSName);
218cdf0e10cSrcweir //
219cdf0e10cSrcweir //            System.exit(1);
220cdf0e10cSrcweir //        }
221cdf0e10cSrcweir 
222cdf0e10cSrcweir }
223