| 1 | /** @file\r |
| 2 | \r |
| 3 | The file is used to init workspace and get basic information of workspace\r |
| 4 | \r |
| 5 | Copyright (c) 2006, Intel Corporation\r |
| 6 | All rights reserved. This program and the accompanying materials\r |
| 7 | are licensed and made available under the terms and conditions of the BSD License\r |
| 8 | which accompanies this distribution. The full text of the license may be found at\r |
| 9 | http://opensource.org/licenses/bsd-license.php\r |
| 10 | \r |
| 11 | THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r |
| 12 | WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r |
| 13 | \r |
| 14 | **/\r |
| 15 | package org.tianocore.frameworkwizard.workspace;\r |
| 16 | \r |
| 17 | import java.io.File;\r |
| 18 | import java.io.IOException;\r |
| 19 | import java.util.List;\r |
| 20 | import java.util.Vector;\r |
| 21 | \r |
| 22 | import org.apache.xmlbeans.XmlCursor;\r |
| 23 | import org.apache.xmlbeans.XmlException;\r |
| 24 | import org.tianocore.DbPathAndFilename;\r |
| 25 | import org.tianocore.FrameworkDatabaseDocument.FrameworkDatabase;\r |
| 26 | import org.tianocore.IndustryStdIncludesDocument.IndustryStdIncludes;\r |
| 27 | import org.tianocore.ModuleSurfaceAreaDocument.ModuleSurfaceArea;\r |
| 28 | import org.tianocore.MsaFilesDocument.MsaFiles;\r |
| 29 | import org.tianocore.MsaHeaderDocument.MsaHeader;\r |
| 30 | import org.tianocore.PackageSurfaceAreaDocument.PackageSurfaceArea;\r |
| 31 | import org.tianocore.PlatformHeaderDocument.PlatformHeader;\r |
| 32 | import org.tianocore.PlatformSurfaceAreaDocument.PlatformSurfaceArea;\r |
| 33 | import org.tianocore.SourceFilesDocument.SourceFiles;\r |
| 34 | import org.tianocore.SpdHeaderDocument.SpdHeader;\r |
| 35 | import org.tianocore.frameworkwizard.common.DataType;\r |
| 36 | import org.tianocore.frameworkwizard.common.Log;\r |
| 37 | import org.tianocore.frameworkwizard.common.SaveFile;\r |
| 38 | import org.tianocore.frameworkwizard.common.Tools;\r |
| 39 | import org.tianocore.frameworkwizard.common.Identifications.Identification;\r |
| 40 | import org.tianocore.frameworkwizard.common.Identifications.OpenFile;\r |
| 41 | import org.tianocore.frameworkwizard.far.FarHeader;\r |
| 42 | import org.tianocore.frameworkwizard.far.FarIdentification;\r |
| 43 | import org.tianocore.frameworkwizard.module.Identifications.ModuleIdentification;\r |
| 44 | import org.tianocore.frameworkwizard.packaging.PackageIdentification;\r |
| 45 | import org.tianocore.frameworkwizard.platform.PlatformIdentification;\r |
| 46 | \r |
| 47 | public class WorkspaceTools {\r |
| 48 | //\r |
| 49 | // Define class members\r |
| 50 | //\r |
| 51 | private FrameworkDatabase fdb = null;\r |
| 52 | \r |
| 53 | private Vector<ModuleIdentification> vModuleList = new Vector<ModuleIdentification>();\r |
| 54 | \r |
| 55 | private Vector<PackageIdentification> vPackageList = new Vector<PackageIdentification>();\r |
| 56 | \r |
| 57 | private Vector<PlatformIdentification> vPlatformList = new Vector<PlatformIdentification>();\r |
| 58 | \r |
| 59 | /**\r |
| 60 | \r |
| 61 | Open Framework Database file\r |
| 62 | \r |
| 63 | */\r |
| 64 | private FrameworkDatabase openFrameworkDb() {\r |
| 65 | String strFrameworkDbFilePath = Workspace.getCurrentWorkspace() + Workspace.getStrWorkspaceDatabaseFile();\r |
| 66 | strFrameworkDbFilePath = Tools.convertPathToCurrentOsType(strFrameworkDbFilePath);\r |
| 67 | try {\r |
| 68 | fdb = OpenFile.openFrameworkDb(strFrameworkDbFilePath);\r |
| 69 | } catch (XmlException e) {\r |
| 70 | Log.err("Open Framework Database " + strFrameworkDbFilePath, e.getMessage());\r |
| 71 | return null;\r |
| 72 | } catch (Exception e) {\r |
| 73 | Log.err("Open Framework Database " + strFrameworkDbFilePath, "Invalid file type");\r |
| 74 | return null;\r |
| 75 | }\r |
| 76 | return fdb;\r |
| 77 | }\r |
| 78 | \r |
| 79 | public void addFarToDb(List<String> packageList, List<String> platformList, FarHeader far) {\r |
| 80 | FrameworkDatabase fdb = openFrameworkDb();\r |
| 81 | \r |
| 82 | for (int i = 0; i < packageList.size(); i++) {\r |
| 83 | DbPathAndFilename item = DbPathAndFilename.Factory.newInstance();\r |
| 84 | item.setFarGuid(far.getGuidValue());\r |
| 85 | item.setStringValue(packageList.get(i));\r |
| 86 | fdb.getPackageList().getFilenameList().add(item);\r |
| 87 | }\r |
| 88 | \r |
| 89 | for (int i = 0; i < platformList.size(); i++) {\r |
| 90 | DbPathAndFilename item = DbPathAndFilename.Factory.newInstance();\r |
| 91 | item.setFarGuid(far.getGuidValue());\r |
| 92 | item.setStringValue(platformList.get(i));\r |
| 93 | fdb.getPlatformList().getFilenameList().add(item);\r |
| 94 | }\r |
| 95 | \r |
| 96 | DbPathAndFilename farItem = DbPathAndFilename.Factory.newInstance();\r |
| 97 | farItem.setFarGuid(far.getGuidValue());\r |
| 98 | farItem.setStringValue(far.getFarName());\r |
| 99 | fdb.getFarList().getFilenameList().add(farItem);\r |
| 100 | \r |
| 101 | String strFrameworkDbFilePath = Workspace.getCurrentWorkspace() + Workspace.getStrWorkspaceDatabaseFile();\r |
| 102 | strFrameworkDbFilePath = Tools.convertPathToCurrentOsType(strFrameworkDbFilePath);\r |
| 103 | \r |
| 104 | try {\r |
| 105 | SaveFile.saveDbFile(strFrameworkDbFilePath, fdb);\r |
| 106 | }\r |
| 107 | catch (Exception e) {\r |
| 108 | e.printStackTrace();\r |
| 109 | }\r |
| 110 | }\r |
| 111 | \r |
| 112 | \r |
| 113 | public void removeFarFromDb(FarIdentification far) {\r |
| 114 | FrameworkDatabase fdb = openFrameworkDb();\r |
| 115 | //\r |
| 116 | // Remove Packages\r |
| 117 | //\r |
| 118 | XmlCursor cursor = fdb.getPackageList().newCursor();\r |
| 119 | cursor.toFirstChild();\r |
| 120 | do {\r |
| 121 | DbPathAndFilename item = (DbPathAndFilename)cursor.getObject();\r |
| 122 | \r |
| 123 | if (item.getFarGuid() != null && item.getFarGuid().equalsIgnoreCase(far.getGuid())) {\r |
| 124 | cursor.removeXml();\r |
| 125 | }\r |
| 126 | } while (cursor.toNextSibling());\r |
| 127 | cursor.dispose();\r |
| 128 | \r |
| 129 | //\r |
| 130 | // Remove Platforms\r |
| 131 | //\r |
| 132 | cursor = fdb.getPlatformList().newCursor();\r |
| 133 | cursor.toFirstChild();\r |
| 134 | do {\r |
| 135 | DbPathAndFilename item = (DbPathAndFilename)cursor.getObject();\r |
| 136 | if (item.getFarGuid() != null && item.getFarGuid().equalsIgnoreCase(far.getGuid())) {\r |
| 137 | cursor.removeXml();\r |
| 138 | }\r |
| 139 | } while (cursor.toNextSibling());\r |
| 140 | \r |
| 141 | //\r |
| 142 | // Remove Far\r |
| 143 | //\r |
| 144 | cursor = fdb.getFarList().newCursor();\r |
| 145 | cursor.toFirstChild();\r |
| 146 | do {\r |
| 147 | DbPathAndFilename item = (DbPathAndFilename)cursor.getObject();\r |
| 148 | if (item.getFarGuid() != null && item.getFarGuid().equalsIgnoreCase(far.getGuid())) {\r |
| 149 | cursor.removeXml();\r |
| 150 | }\r |
| 151 | } while (cursor.toNextSibling());\r |
| 152 | cursor.dispose();\r |
| 153 | \r |
| 154 | String strFrameworkDbFilePath = Workspace.getCurrentWorkspace() + Workspace.getStrWorkspaceDatabaseFile();\r |
| 155 | strFrameworkDbFilePath = Tools.convertPathToCurrentOsType(strFrameworkDbFilePath);\r |
| 156 | try {\r |
| 157 | SaveFile.saveDbFile(strFrameworkDbFilePath, fdb);\r |
| 158 | }\r |
| 159 | catch (Exception e) {\r |
| 160 | e.printStackTrace();\r |
| 161 | }\r |
| 162 | }\r |
| 163 | \r |
| 164 | public String getPackageFarGuid(PackageIdentification packageId) {\r |
| 165 | openFrameworkDb();\r |
| 166 | \r |
| 167 | for (int index = 0; index < fdb.getPackageList().getFilenameList().size(); index++) {\r |
| 168 | DbPathAndFilename item = fdb.getPackageList().getFilenameArray(index);\r |
| 169 | String path = Workspace.getCurrentWorkspace() + DataType.FILE_SEPARATOR\r |
| 170 | + item.getStringValue();\r |
| 171 | File tempFile = new File(path);\r |
| 172 | if (tempFile.getPath().equalsIgnoreCase(packageId.getSpdFile().getPath())) {\r |
| 173 | return fdb.getPackageList().getFilenameArray(index).getFarGuid();\r |
| 174 | }\r |
| 175 | }\r |
| 176 | \r |
| 177 | return null;\r |
| 178 | }\r |
| 179 | \r |
| 180 | public String getPlatformFarGuid(PlatformIdentification platformId) {\r |
| 181 | openFrameworkDb();\r |
| 182 | \r |
| 183 | for (int index = 0; index < fdb.getPlatformList().getFilenameList().size(); index++) {\r |
| 184 | DbPathAndFilename item = fdb.getPlatformList().getFilenameArray(index);\r |
| 185 | String path = Workspace.getCurrentWorkspace() + DataType.FILE_SEPARATOR\r |
| 186 | + item.getStringValue();\r |
| 187 | File tempFile = new File(path);\r |
| 188 | if (tempFile.getPath().equalsIgnoreCase(platformId.getFpdFile().getPath())) {\r |
| 189 | return fdb.getPlatformList().getFilenameArray(index).getFarGuid();\r |
| 190 | }\r |
| 191 | }\r |
| 192 | \r |
| 193 | return null;\r |
| 194 | }\r |
| 195 | \r |
| 196 | public String getModuleFarGuid(ModuleIdentification moduleId) {\r |
| 197 | PackageIdentification packageId = getPackageIdByModuleId(moduleId);\r |
| 198 | if (packageId != null) {\r |
| 199 | return getPackageFarGuid(packageId);\r |
| 200 | }\r |
| 201 | else {\r |
| 202 | return null;\r |
| 203 | }\r |
| 204 | }\r |
| 205 | /**\r |
| 206 | Get all modules' paths from one package\r |
| 207 | \r |
| 208 | @return a Vector with all modules' path\r |
| 209 | \r |
| 210 | **/\r |
| 211 | public Vector<String> getAllModulesOfPackage(String path) {\r |
| 212 | Vector<String> modulePath = new Vector<String>();\r |
| 213 | try {\r |
| 214 | MsaFiles files = OpenFile.openSpdFile(path).getMsaFiles();\r |
| 215 | if (files != null) {\r |
| 216 | for (int index = 0; index < files.getFilenameList().size(); index++) {\r |
| 217 | String msaPath = files.getFilenameList().get(index);\r |
| 218 | msaPath = Tools.addFileSeparator(Tools.getFilePathOnly(path)) + msaPath;\r |
| 219 | msaPath = Tools.convertPathToCurrentOsType(msaPath);\r |
| 220 | modulePath.addElement(msaPath);\r |
| 221 | }\r |
| 222 | }\r |
| 223 | } catch (IOException e) {\r |
| 224 | \r |
| 225 | } catch (XmlException e) {\r |
| 226 | \r |
| 227 | } catch (Exception e) {\r |
| 228 | \r |
| 229 | }\r |
| 230 | return modulePath;\r |
| 231 | }\r |
| 232 | \r |
| 233 | /**\r |
| 234 | Get all Industry Std Includes' paths from one package\r |
| 235 | \r |
| 236 | @return a Vector with all paths\r |
| 237 | \r |
| 238 | **/\r |
| 239 | public Vector<String> getAllIndustryStdIncludesOfPackage(String path) {\r |
| 240 | Vector<String> includePath = new Vector<String>();\r |
| 241 | try {\r |
| 242 | IndustryStdIncludes files = OpenFile.openSpdFile(path).getIndustryStdIncludes();\r |
| 243 | if (files != null) {\r |
| 244 | for (int index = 0; index < files.getIndustryStdHeaderList().size(); index++) {\r |
| 245 | String temp = files.getIndustryStdHeaderList().get(index).getName();\r |
| 246 | temp = Tools.addFileSeparator(Tools.getFilePathOnly(path)) + temp;\r |
| 247 | temp = Tools.convertPathToCurrentOsType(temp);\r |
| 248 | includePath.addElement(temp);\r |
| 249 | }\r |
| 250 | }\r |
| 251 | } catch (IOException e) {\r |
| 252 | \r |
| 253 | } catch (XmlException e) {\r |
| 254 | \r |
| 255 | } catch (Exception e) {\r |
| 256 | \r |
| 257 | }\r |
| 258 | return includePath;\r |
| 259 | }\r |
| 260 | \r |
| 261 | /**\r |
| 262 | Get all package basic information form the FrameworkDatabase.db file\r |
| 263 | \r |
| 264 | @return vPackageList A vector includes all packages' basic information\r |
| 265 | \r |
| 266 | */\r |
| 267 | public Vector<PackageIdentification> getAllPackages() {\r |
| 268 | Identification id = null;\r |
| 269 | vPackageList.removeAllElements();\r |
| 270 | \r |
| 271 | openFrameworkDb();\r |
| 272 | \r |
| 273 | for (int index = 0; index < fdb.getPackageList().getFilenameList().size(); index++) {\r |
| 274 | String path = Workspace.getCurrentWorkspace() + DataType.FILE_SEPARATOR\r |
| 275 | + fdb.getPackageList().getFilenameArray(index).getStringValue();\r |
| 276 | path = Tools.convertPathToCurrentOsType(path);\r |
| 277 | try {\r |
| 278 | id = getId(path, OpenFile.openSpdFile(path));\r |
| 279 | vPackageList.addElement(new PackageIdentification(id));\r |
| 280 | } catch (IOException e) {\r |
| 281 | Log.err("Open Package Surface Area " + path, e.getMessage());\r |
| 282 | \r |
| 283 | } catch (XmlException e) {\r |
| 284 | Log.err("Open Package Surface Area " + path, e.getMessage());\r |
| 285 | \r |
| 286 | } catch (Exception e) {\r |
| 287 | Log.err("Open Package Surface Area " + path, "Invalid file type");\r |
| 288 | \r |
| 289 | }\r |
| 290 | }\r |
| 291 | Tools.sortPackages(vPackageList, DataType.SORT_TYPE_ASCENDING);\r |
| 292 | return vPackageList;\r |
| 293 | }\r |
| 294 | \r |
| 295 | public Vector<FarIdentification> getAllFars() {\r |
| 296 | openFrameworkDb();\r |
| 297 | Vector<FarIdentification> v = new Vector<FarIdentification>();\r |
| 298 | for (int index = 0; index < fdb.getFarList().getFilenameList().size(); index++) {\r |
| 299 | DbPathAndFilename item = fdb.getFarList().getFilenameList().get(index);\r |
| 300 | FarIdentification far = new FarIdentification(item.getFarGuid(), item.getMd5Sum(), item.getStringValue());\r |
| 301 | v.addElement(far);\r |
| 302 | }\r |
| 303 | return v;\r |
| 304 | }\r |
| 305 | \r |
| 306 | public Vector<PackageIdentification> getPackagesByFar(FarIdentification far) {\r |
| 307 | Identification id = null;\r |
| 308 | openFrameworkDb();\r |
| 309 | Vector<PackageIdentification> v = new Vector<PackageIdentification>();\r |
| 310 | \r |
| 311 | for (int index = 0; index < fdb.getPackageList().getFilenameList().size(); index++) {\r |
| 312 | DbPathAndFilename item = fdb.getPackageList().getFilenameArray(index);\r |
| 313 | String path = Workspace.getCurrentWorkspace() + DataType.FILE_SEPARATOR\r |
| 314 | + item.getStringValue();\r |
| 315 | path = Tools.convertPathToCurrentOsType(path);\r |
| 316 | \r |
| 317 | if (item.getFarGuid() != null && item.getFarGuid().equalsIgnoreCase(far.getGuid())) {\r |
| 318 | \r |
| 319 | try {\r |
| 320 | id = getId(path, OpenFile.openSpdFile(path));\r |
| 321 | v.addElement(new PackageIdentification(id));\r |
| 322 | } catch (IOException e) {\r |
| 323 | Log.err("Open Package Surface Area " + path, e.getMessage());\r |
| 324 | e.printStackTrace();\r |
| 325 | } catch (XmlException e) {\r |
| 326 | Log.err("Open Package Surface Area " + path, e.getMessage());\r |
| 327 | e.printStackTrace();\r |
| 328 | } catch (Exception e) {\r |
| 329 | Log.err("Open Package Surface Area " + path, "Invalid file type");\r |
| 330 | e.printStackTrace();\r |
| 331 | }\r |
| 332 | }\r |
| 333 | }\r |
| 334 | return v;\r |
| 335 | }\r |
| 336 | \r |
| 337 | public Vector<PlatformIdentification> getPlatformsByFar(FarIdentification far) {\r |
| 338 | Identification id = null;\r |
| 339 | openFrameworkDb();\r |
| 340 | Vector<PlatformIdentification> v = new Vector<PlatformIdentification>();\r |
| 341 | \r |
| 342 | for (int index = 0; index < fdb.getPlatformList().getFilenameList().size(); index++) {\r |
| 343 | DbPathAndFilename item = fdb.getPlatformList().getFilenameArray(index);\r |
| 344 | String path = Workspace.getCurrentWorkspace() + DataType.FILE_SEPARATOR\r |
| 345 | + item.getStringValue();\r |
| 346 | path = Tools.convertPathToCurrentOsType(path);\r |
| 347 | \r |
| 348 | if (item.getFarGuid() != null && item.getFarGuid().equalsIgnoreCase(far.getGuid())) {\r |
| 349 | try {\r |
| 350 | id = getId(path, OpenFile.openFpdFile(path));\r |
| 351 | v.addElement(new PlatformIdentification(id));\r |
| 352 | } catch (IOException e) {\r |
| 353 | Log.err("Open Platform Surface Area " + path, e.getMessage());\r |
| 354 | e.printStackTrace();\r |
| 355 | } catch (XmlException e) {\r |
| 356 | Log.err("Open Platform Surface Area " + path, e.getMessage());\r |
| 357 | e.printStackTrace();\r |
| 358 | } catch (Exception e) {\r |
| 359 | Log.err("Open Platform Surface Area " + path, "Invalid file type");\r |
| 360 | e.printStackTrace();\r |
| 361 | }\r |
| 362 | }\r |
| 363 | }\r |
| 364 | return v;\r |
| 365 | }\r |
| 366 | \r |
| 367 | /**\r |
| 368 | Get all module basic information from a package\r |
| 369 | \r |
| 370 | @param id Package id\r |
| 371 | @return A vector includes all modules' basic information\r |
| 372 | \r |
| 373 | **/\r |
| 374 | public Vector<ModuleIdentification> getAllModules(PackageIdentification pid) {\r |
| 375 | Vector<ModuleIdentification> v = new Vector<ModuleIdentification>();\r |
| 376 | Vector<String> modulePaths = this.getAllModulesOfPackage(pid.getPath());\r |
| 377 | Identification id = null;\r |
| 378 | String modulePath = null;\r |
| 379 | \r |
| 380 | for (int index = 0; index < modulePaths.size(); index++) {\r |
| 381 | try {\r |
| 382 | modulePath = modulePaths.get(index);\r |
| 383 | id = getId(modulePath, OpenFile.openMsaFile(modulePath));\r |
| 384 | } catch (IOException e) {\r |
| 385 | Log.log("Error when Open Module Surface Area " + modulePath, e.getMessage());\r |
| 386 | } catch (XmlException e) {\r |
| 387 | Log.log("Error when Open Module Surface Area " + modulePath, e.getMessage());\r |
| 388 | } catch (Exception e) {\r |
| 389 | Log.log("Error when Open Module Surface Area " + modulePath, "Invalid file type " + e.getMessage());\r |
| 390 | }\r |
| 391 | v.addElement(new ModuleIdentification(id, pid));\r |
| 392 | }\r |
| 393 | Tools.sortModules(v, DataType.SORT_TYPE_ASCENDING);\r |
| 394 | return v;\r |
| 395 | \r |
| 396 | }\r |
| 397 | \r |
| 398 | /**\r |
| 399 | Get all module basic information form the FrameworkDatabase.db file\r |
| 400 | \r |
| 401 | @return vModuleList A vector includes all modules' basic information\r |
| 402 | \r |
| 403 | */\r |
| 404 | public Vector<ModuleIdentification> getAllModules() {\r |
| 405 | vModuleList.removeAllElements();\r |
| 406 | //\r |
| 407 | // First get all packages\r |
| 408 | //\r |
| 409 | getAllPackages();\r |
| 410 | Vector<String> modulePaths = new Vector<String>();\r |
| 411 | Identification id = null;\r |
| 412 | String packagePath = null;\r |
| 413 | String modulePath = null;\r |
| 414 | \r |
| 415 | //\r |
| 416 | // For each package, get all modules list\r |
| 417 | //\r |
| 418 | for (int indexI = 0; indexI < vPackageList.size(); indexI++) {\r |
| 419 | packagePath = vPackageList.elementAt(indexI).getPath();\r |
| 420 | modulePaths = this.getAllModulesOfPackage(packagePath);\r |
| 421 | \r |
| 422 | for (int indexJ = 0; indexJ < modulePaths.size(); indexJ++) {\r |
| 423 | try {\r |
| 424 | modulePath = modulePaths.get(indexJ);\r |
| 425 | id = getId(modulePath, OpenFile.openMsaFile(modulePath));\r |
| 426 | vModuleList.addElement(new ModuleIdentification(id, vPackageList.elementAt(indexI)));\r |
| 427 | } catch (IOException e) {\r |
| 428 | Log.err("Open Module Surface Area " + modulePath, e.getMessage());\r |
| 429 | } catch (XmlException e) {\r |
| 430 | Log.err("Open Module Surface Area " + modulePath, e.getMessage());\r |
| 431 | } catch (Exception e) {\r |
| 432 | Log.err("Open Module Surface Area " + modulePath, "Invalid file type");\r |
| 433 | }\r |
| 434 | }\r |
| 435 | }\r |
| 436 | Tools.sortModules(vModuleList, DataType.SORT_TYPE_ASCENDING);\r |
| 437 | return vModuleList;\r |
| 438 | }\r |
| 439 | \r |
| 440 | /**\r |
| 441 | Get all platform basic information form the FrameworkDatabase.db file\r |
| 442 | \r |
| 443 | @return vplatformList A vector includes all platforms' basic information\r |
| 444 | \r |
| 445 | */\r |
| 446 | public Vector<PlatformIdentification> getAllPlatforms() {\r |
| 447 | Identification id = null;\r |
| 448 | vPlatformList.removeAllElements();\r |
| 449 | \r |
| 450 | openFrameworkDb();\r |
| 451 | \r |
| 452 | for (int index = 0; index < fdb.getPlatformList().getFilenameList().size(); index++) {\r |
| 453 | String path = Workspace.getCurrentWorkspace() + DataType.FILE_SEPARATOR\r |
| 454 | + fdb.getPlatformList().getFilenameArray(index).getStringValue();\r |
| 455 | path = Tools.convertPathToCurrentOsType(path);\r |
| 456 | try {\r |
| 457 | id = getId(path, OpenFile.openFpdFile(path));\r |
| 458 | vPlatformList.addElement(new PlatformIdentification(id));\r |
| 459 | } catch (IOException e) {\r |
| 460 | Log.err("Open Platform Surface Area " + path, e.getMessage());\r |
| 461 | } catch (XmlException e) {\r |
| 462 | Log.err("Open Platform Surface Area " + path, e.getMessage());\r |
| 463 | } catch (Exception e) {\r |
| 464 | Log.err("Open Platform Surface Area " + path, "Invalid file type");\r |
| 465 | }\r |
| 466 | }\r |
| 467 | Tools.sortPlatforms(vPlatformList, DataType.SORT_TYPE_ASCENDING);\r |
| 468 | return vPlatformList;\r |
| 469 | }\r |
| 470 | \r |
| 471 | /**\r |
| 472 | Get all Library Class Definitions from a package\r |
| 473 | \r |
| 474 | @return Vector\r |
| 475 | **/\r |
| 476 | public Vector<String> getAllLibraryClassDefinitionsFromPackage(PackageSurfaceArea spd) {\r |
| 477 | Vector<String> vector = new Vector<String>();\r |
| 478 | if (spd.getLibraryClassDeclarations() != null) {\r |
| 479 | if (spd.getLibraryClassDeclarations().getLibraryClassList().size() > 0) {\r |
| 480 | for (int index = 0; index < spd.getLibraryClassDeclarations().getLibraryClassList().size(); index++) {\r |
| 481 | vector.addElement(spd.getLibraryClassDeclarations().getLibraryClassList().get(index).getName());\r |
| 482 | }\r |
| 483 | }\r |
| 484 | }\r |
| 485 | Tools.sortVectorString(vector, DataType.SORT_TYPE_ASCENDING);\r |
| 486 | return vector;\r |
| 487 | }\r |
| 488 | \r |
| 489 | /**\r |
| 490 | Get all Protocol Definitions from a package\r |
| 491 | \r |
| 492 | @return Vector\r |
| 493 | **/\r |
| 494 | public Vector<String> getAllProtocolDeclarationsFromPackage(PackageSurfaceArea spd) {\r |
| 495 | Vector<String> vector = new Vector<String>();\r |
| 496 | if (spd.getProtocolDeclarations() != null) {\r |
| 497 | if (spd.getProtocolDeclarations().getEntryList().size() > 0) {\r |
| 498 | for (int index = 0; index < spd.getProtocolDeclarations().getEntryList().size(); index++) {\r |
| 499 | vector.addElement(spd.getProtocolDeclarations().getEntryList().get(index).getCName());\r |
| 500 | }\r |
| 501 | }\r |
| 502 | }\r |
| 503 | Tools.sortVectorString(vector, DataType.SORT_TYPE_ASCENDING);\r |
| 504 | return vector;\r |
| 505 | }\r |
| 506 | \r |
| 507 | /**\r |
| 508 | Get all Ppi Definitions from a package\r |
| 509 | \r |
| 510 | @return Vector\r |
| 511 | **/\r |
| 512 | public Vector<String> getAllPpiDeclarationsFromPackage(PackageSurfaceArea spd) {\r |
| 513 | Vector<String> vector = new Vector<String>();\r |
| 514 | if (spd.getPpiDeclarations() != null) {\r |
| 515 | if (spd.getPpiDeclarations().getEntryList().size() > 0) {\r |
| 516 | for (int index = 0; index < spd.getPpiDeclarations().getEntryList().size(); index++) {\r |
| 517 | vector.addElement(spd.getPpiDeclarations().getEntryList().get(index).getCName());\r |
| 518 | }\r |
| 519 | }\r |
| 520 | }\r |
| 521 | Tools.sortVectorString(vector, DataType.SORT_TYPE_ASCENDING);\r |
| 522 | return vector;\r |
| 523 | }\r |
| 524 | \r |
| 525 | /**\r |
| 526 | Get all Guid Definitions from a package\r |
| 527 | \r |
| 528 | @return Vector\r |
| 529 | **/\r |
| 530 | public Vector<String> getAllGuidDeclarationsFromPackage(PackageSurfaceArea spd) {\r |
| 531 | Vector<String> vector = new Vector<String>();\r |
| 532 | if (spd.getGuidDeclarations() != null) {\r |
| 533 | if (spd.getGuidDeclarations().getEntryList().size() > 0) {\r |
| 534 | for (int index = 0; index < spd.getGuidDeclarations().getEntryList().size(); index++) {\r |
| 535 | vector.addElement(spd.getGuidDeclarations().getEntryList().get(index).getCName());\r |
| 536 | }\r |
| 537 | }\r |
| 538 | }\r |
| 539 | Tools.sortVectorString(vector, DataType.SORT_TYPE_ASCENDING);\r |
| 540 | return vector;\r |
| 541 | }\r |
| 542 | \r |
| 543 | /**\r |
| 544 | Get all Pcd Definitions from a package\r |
| 545 | \r |
| 546 | @return Vector\r |
| 547 | **/\r |
| 548 | public Vector<String> getAllPcdDeclarationsFromPackage(PackageSurfaceArea spd) {\r |
| 549 | Vector<String> vector = new Vector<String>();\r |
| 550 | if (spd.getPcdDeclarations() != null) {\r |
| 551 | if (spd.getPcdDeclarations().getPcdEntryList().size() > 0) {\r |
| 552 | for (int index = 0; index < spd.getPcdDeclarations().getPcdEntryList().size(); index++) {\r |
| 553 | vector.addElement(spd.getPcdDeclarations().getPcdEntryList().get(index).getCName());\r |
| 554 | }\r |
| 555 | }\r |
| 556 | }\r |
| 557 | Tools.sortVectorString(vector, DataType.SORT_TYPE_ASCENDING);\r |
| 558 | return vector;\r |
| 559 | }\r |
| 560 | \r |
| 561 | public Vector<String> getAllLibraryClassDefinitionsFromWorkspace() {\r |
| 562 | //\r |
| 563 | // First get all packages\r |
| 564 | //\r |
| 565 | this.getAllPackages();\r |
| 566 | \r |
| 567 | Vector<String> vector = new Vector<String>();\r |
| 568 | for (int index = 0; index < this.vPackageList.size(); index++) {\r |
| 569 | try {\r |
| 570 | Vector<String> v = getAllLibraryClassDefinitionsFromPackage(OpenFile\r |
| 571 | .openSpdFile(vPackageList\r |
| 572 | .get(index)\r |
| 573 | .getPath()));\r |
| 574 | if (v != null && v.size() > 0) {\r |
| 575 | vector.addAll(v);\r |
| 576 | }\r |
| 577 | } catch (IOException e) {\r |
| 578 | // TODO Auto-generated catch block\r |
| 579 | } catch (XmlException e) {\r |
| 580 | // TODO Auto-generated catch block\r |
| 581 | } catch (Exception e) {\r |
| 582 | // TODO Auto-generated catch block\r |
| 583 | }\r |
| 584 | }\r |
| 585 | Tools.sortVectorString(vector, DataType.SORT_TYPE_ASCENDING);\r |
| 586 | return vector;\r |
| 587 | }\r |
| 588 | \r |
| 589 | public Vector<String> getAllProtocolDeclarationsFromWorkspace() {\r |
| 590 | //\r |
| 591 | // First get all packages\r |
| 592 | //\r |
| 593 | this.getAllPackages();\r |
| 594 | \r |
| 595 | Vector<String> vector = new Vector<String>();\r |
| 596 | for (int index = 0; index < this.vPackageList.size(); index++) {\r |
| 597 | try {\r |
| 598 | Vector<String> v = getAllProtocolDeclarationsFromPackage(OpenFile.openSpdFile(vPackageList.get(index)\r |
| 599 | .getPath()));\r |
| 600 | if (v != null && v.size() > 0) {\r |
| 601 | vector.addAll(v);\r |
| 602 | }\r |
| 603 | } catch (IOException e) {\r |
| 604 | // TODO Auto-generated catch block\r |
| 605 | } catch (XmlException e) {\r |
| 606 | // TODO Auto-generated catch block\r |
| 607 | } catch (Exception e) {\r |
| 608 | // TODO Auto-generated catch block\r |
| 609 | }\r |
| 610 | }\r |
| 611 | Tools.sortVectorString(vector, DataType.SORT_TYPE_ASCENDING);\r |
| 612 | return vector;\r |
| 613 | }\r |
| 614 | \r |
| 615 | public Vector<String> getAllPpiDeclarationsFromWorkspace() {\r |
| 616 | //\r |
| 617 | // First get all packages\r |
| 618 | //\r |
| 619 | this.getAllPackages();\r |
| 620 | \r |
| 621 | Vector<String> vector = new Vector<String>();\r |
| 622 | for (int index = 0; index < this.vPackageList.size(); index++) {\r |
| 623 | try {\r |
| 624 | Vector<String> v = getAllPpiDeclarationsFromPackage(OpenFile.openSpdFile(vPackageList.get(index)\r |
| 625 | .getPath()));\r |
| 626 | if (v != null && v.size() > 0) {\r |
| 627 | vector.addAll(v);\r |
| 628 | }\r |
| 629 | } catch (IOException e) {\r |
| 630 | // TODO Auto-generated catch block\r |
| 631 | } catch (XmlException e) {\r |
| 632 | // TODO Auto-generated catch block\r |
| 633 | } catch (Exception e) {\r |
| 634 | // TODO Auto-generated catch block\r |
| 635 | }\r |
| 636 | }\r |
| 637 | Tools.sortVectorString(vector, DataType.SORT_TYPE_ASCENDING);\r |
| 638 | return vector;\r |
| 639 | }\r |
| 640 | \r |
| 641 | public Vector<String> getAllGuidDeclarationsFromWorkspace() {\r |
| 642 | //\r |
| 643 | // First get all packages\r |
| 644 | //\r |
| 645 | this.getAllPackages();\r |
| 646 | \r |
| 647 | Vector<String> vector = new Vector<String>();\r |
| 648 | for (int index = 0; index < this.vPackageList.size(); index++) {\r |
| 649 | try {\r |
| 650 | Vector<String> v = getAllGuidDeclarationsFromPackage(OpenFile.openSpdFile(vPackageList.get(index)\r |
| 651 | .getPath()));\r |
| 652 | if (v != null && v.size() > 0) {\r |
| 653 | vector.addAll(v);\r |
| 654 | }\r |
| 655 | } catch (IOException e) {\r |
| 656 | // TODO Auto-generated catch block\r |
| 657 | } catch (XmlException e) {\r |
| 658 | // TODO Auto-generated catch block\r |
| 659 | } catch (Exception e) {\r |
| 660 | // TODO Auto-generated catch block\r |
| 661 | }\r |
| 662 | }\r |
| 663 | Tools.sortVectorString(vector, DataType.SORT_TYPE_ASCENDING);\r |
| 664 | return vector;\r |
| 665 | }\r |
| 666 | \r |
| 667 | public Vector<String> getAllPcdDeclarationsFromWorkspace() {\r |
| 668 | //\r |
| 669 | // First get all packages\r |
| 670 | //\r |
| 671 | this.getAllPackages();\r |
| 672 | \r |
| 673 | Vector<String> vector = new Vector<String>();\r |
| 674 | for (int index = 0; index < this.vPackageList.size(); index++) {\r |
| 675 | try {\r |
| 676 | Vector<String> v = getAllPcdDeclarationsFromPackage(OpenFile.openSpdFile(vPackageList.get(index)\r |
| 677 | .getPath()));\r |
| 678 | if (v != null && v.size() > 0) {\r |
| 679 | vector.addAll(v);\r |
| 680 | }\r |
| 681 | } catch (IOException e) {\r |
| 682 | // TODO Auto-generated catch block\r |
| 683 | } catch (XmlException e) {\r |
| 684 | // TODO Auto-generated catch block\r |
| 685 | } catch (Exception e) {\r |
| 686 | // TODO Auto-generated catch block\r |
| 687 | }\r |
| 688 | }\r |
| 689 | Tools.sortVectorString(vector, DataType.SORT_TYPE_ASCENDING);\r |
| 690 | return vector;\r |
| 691 | }\r |
| 692 | \r |
| 693 | /**\r |
| 694 | Find a module's package's id\r |
| 695 | \r |
| 696 | @param id input module id\r |
| 697 | @return package id\r |
| 698 | \r |
| 699 | **/\r |
| 700 | public PackageIdentification getPackageIdByModuleId(Identification id) {\r |
| 701 | getAllPackages();\r |
| 702 | Vector<String> modulePaths = new Vector<String>();\r |
| 703 | Identification mid = null;\r |
| 704 | String packagePath = null;\r |
| 705 | String modulePath = null;\r |
| 706 | \r |
| 707 | //\r |
| 708 | // For each package, get all modules list\r |
| 709 | //\r |
| 710 | for (int indexI = 0; indexI < vPackageList.size(); indexI++) {\r |
| 711 | packagePath = vPackageList.elementAt(indexI).getPath();\r |
| 712 | modulePaths = this.getAllModulesOfPackage(packagePath);\r |
| 713 | for (int indexJ = 0; indexJ < modulePaths.size(); indexJ++) {\r |
| 714 | modulePath = modulePaths.get(indexJ);\r |
| 715 | try {\r |
| 716 | mid = getId(modulePath, OpenFile.openMsaFile(modulePath));\r |
| 717 | //\r |
| 718 | // Check id\r |
| 719 | //\r |
| 720 | if (mid.equals(id)) {\r |
| 721 | return vPackageList.elementAt(indexI);\r |
| 722 | }\r |
| 723 | } catch (IOException e) {\r |
| 724 | \r |
| 725 | } catch (XmlException e) {\r |
| 726 | \r |
| 727 | } catch (Exception e) {\r |
| 728 | \r |
| 729 | }\r |
| 730 | }\r |
| 731 | }\r |
| 732 | \r |
| 733 | return null;\r |
| 734 | }\r |
| 735 | \r |
| 736 | public Identification getId(String path, ModuleSurfaceArea msa) {\r |
| 737 | MsaHeader head = msa.getMsaHeader();\r |
| 738 | String name = head.getModuleName();\r |
| 739 | String guid = head.getGuidValue();\r |
| 740 | String version = head.getVersion();\r |
| 741 | Identification id = new Identification(name, guid, version, path);\r |
| 742 | return id;\r |
| 743 | }\r |
| 744 | \r |
| 745 | public Identification getId(String path, PackageSurfaceArea spd) {\r |
| 746 | SpdHeader head = spd.getSpdHeader();\r |
| 747 | String name = head.getPackageName();\r |
| 748 | String guid = head.getGuidValue();\r |
| 749 | String version = head.getVersion();\r |
| 750 | Identification id = new Identification(name, guid, version, path);\r |
| 751 | return id;\r |
| 752 | }\r |
| 753 | \r |
| 754 | public Identification getId(String path, PlatformSurfaceArea fpd) {\r |
| 755 | PlatformHeader head = fpd.getPlatformHeader();\r |
| 756 | String name = head.getPlatformName();\r |
| 757 | String guid = head.getGuidValue();\r |
| 758 | String version = head.getVersion();\r |
| 759 | Identification id = new Identification(name, guid, version, path);\r |
| 760 | return id;\r |
| 761 | }\r |
| 762 | \r |
| 763 | /**\r |
| 764 | Add module information to package surface area\r |
| 765 | \r |
| 766 | @param mid\r |
| 767 | @throws IOException\r |
| 768 | @throws XmlException\r |
| 769 | @throws Exception\r |
| 770 | \r |
| 771 | **/\r |
| 772 | public void addModuleToPackage(ModuleIdentification mid, PackageSurfaceArea spd) throws IOException, XmlException,\r |
| 773 | Exception {\r |
| 774 | String packagePath = mid.getPackageId().getPath();\r |
| 775 | String modulePath = mid.getPath();\r |
| 776 | if (spd == null) {\r |
| 777 | spd = OpenFile.openSpdFile(packagePath);\r |
| 778 | }\r |
| 779 | MsaFiles msaFile = spd.getMsaFiles();\r |
| 780 | if (msaFile == null) {\r |
| 781 | msaFile = MsaFiles.Factory.newInstance();\r |
| 782 | }\r |
| 783 | packagePath = packagePath.substring(0, packagePath.lastIndexOf(DataType.FILE_SEPARATOR));\r |
| 784 | String fn = Tools.getRelativePath(modulePath, packagePath);\r |
| 785 | msaFile.addNewFilename();\r |
| 786 | msaFile.setFilenameArray(msaFile.getFilenameList().size() - 1, fn);\r |
| 787 | spd.setMsaFiles(msaFile);\r |
| 788 | SaveFile.saveSpdFile(mid.getPackageId().getPath(), spd);\r |
| 789 | }\r |
| 790 | \r |
| 791 | /**\r |
| 792 | Add input package into database\r |
| 793 | \r |
| 794 | @param id\r |
| 795 | * @throws Exception \r |
| 796 | \r |
| 797 | **/\r |
| 798 | public void addPackageToDatabase(PackageIdentification id) throws Exception {\r |
| 799 | String path = id.getPath();\r |
| 800 | path = Tools.getRelativePath(path, Workspace.getCurrentWorkspace());\r |
| 801 | this.openFrameworkDb();\r |
| 802 | DbPathAndFilename filename = DbPathAndFilename.Factory.newInstance();\r |
| 803 | filename.setStringValue(path);\r |
| 804 | fdb.getPackageList().addNewFilename();\r |
| 805 | fdb.getPackageList().setFilenameArray(fdb.getPackageList().sizeOfFilenameArray() - 1, filename);\r |
| 806 | String strFrameworkDbFilePath = Workspace.getCurrentWorkspace() + Workspace.getStrWorkspaceDatabaseFile();\r |
| 807 | strFrameworkDbFilePath = Tools.convertPathToCurrentOsType(strFrameworkDbFilePath);\r |
| 808 | SaveFile.saveDbFile(strFrameworkDbFilePath, fdb);\r |
| 809 | }\r |
| 810 | \r |
| 811 | /**\r |
| 812 | Add input package into database\r |
| 813 | \r |
| 814 | @param id\r |
| 815 | * @throws Exception \r |
| 816 | \r |
| 817 | **/\r |
| 818 | public void addPlatformToDatabase(PlatformIdentification id) throws Exception {\r |
| 819 | String path = id.getPath();\r |
| 820 | path = Tools.getRelativePath(path, Workspace.getCurrentWorkspace());\r |
| 821 | this.openFrameworkDb();\r |
| 822 | DbPathAndFilename filename = DbPathAndFilename.Factory.newInstance();\r |
| 823 | filename.setStringValue(path);\r |
| 824 | fdb.getPlatformList().addNewFilename();\r |
| 825 | fdb.getPlatformList().setFilenameArray(fdb.getPlatformList().sizeOfFilenameArray() - 1, filename);\r |
| 826 | String strFrameworkDbFilePath = Workspace.getCurrentWorkspace() + Workspace.getStrWorkspaceDatabaseFile();\r |
| 827 | strFrameworkDbFilePath = Tools.convertPathToCurrentOsType(strFrameworkDbFilePath);\r |
| 828 | SaveFile.saveDbFile(strFrameworkDbFilePath, fdb);\r |
| 829 | }\r |
| 830 | \r |
| 831 | /**\r |
| 832 | Get all file's path from one module\r |
| 833 | \r |
| 834 | @param path\r |
| 835 | @return\r |
| 836 | @throws IOException\r |
| 837 | @throws XmlException\r |
| 838 | @throws Exception\r |
| 839 | \r |
| 840 | **/\r |
| 841 | public Vector<String> getAllModuleFilesPath(String path) throws IOException, XmlException, Exception {\r |
| 842 | Vector<String> v = new Vector<String>();\r |
| 843 | path = Tools.convertPathToCurrentOsType(path);\r |
| 844 | v.addElement(path);\r |
| 845 | ModuleSurfaceArea msa = OpenFile.openMsaFile(path);\r |
| 846 | if (msa != null) {\r |
| 847 | //\r |
| 848 | // Get all files' path of a module\r |
| 849 | //\r |
| 850 | SourceFiles sf = msa.getSourceFiles();\r |
| 851 | if (sf != null) {\r |
| 852 | for (int index = 0; index < sf.getFilenameList().size(); index++) {\r |
| 853 | String temp = sf.getFilenameList().get(index).getStringValue();\r |
| 854 | temp = Tools.addFileSeparator(Tools.getFilePathOnly(path)) + temp;\r |
| 855 | v.addElement(Tools.convertPathToCurrentOsType(temp));\r |
| 856 | }\r |
| 857 | }\r |
| 858 | }\r |
| 859 | \r |
| 860 | return v;\r |
| 861 | }\r |
| 862 | \r |
| 863 | /**\r |
| 864 | Get all file's path from one package\r |
| 865 | \r |
| 866 | @param path\r |
| 867 | @return\r |
| 868 | @throws IOException\r |
| 869 | @throws XmlException\r |
| 870 | @throws Exception\r |
| 871 | \r |
| 872 | **/\r |
| 873 | public Vector<String> getAllPakcageFilesPath(String path) throws IOException, XmlException, Exception {\r |
| 874 | Vector<String> v = new Vector<String>();\r |
| 875 | path = Tools.convertPathToCurrentOsType(path);\r |
| 876 | //\r |
| 877 | // First add package\r |
| 878 | //\r |
| 879 | v.addElement(path);\r |
| 880 | \r |
| 881 | //\r |
| 882 | // Add the package's industry std includes one by one\r |
| 883 | //\r |
| 884 | Vector<String> f1 = new Vector<String>();\r |
| 885 | f1 = getAllIndustryStdIncludesOfPackage(path);\r |
| 886 | for (int index = 0; index < f1.size(); index++) {\r |
| 887 | v.addElement(f1.get(index));\r |
| 888 | }\r |
| 889 | \r |
| 890 | //\r |
| 891 | // Add module's files one by one\r |
| 892 | //\r |
| 893 | f1 = new Vector<String>();\r |
| 894 | f1 = getAllModulesOfPackage(path);\r |
| 895 | for (int indexI = 0; indexI < f1.size(); indexI++) {\r |
| 896 | Vector<String> f2 = getAllModuleFilesPath(f1.get(indexI));\r |
| 897 | for (int indexJ = 0; indexJ < f2.size(); indexJ++) {\r |
| 898 | v.addElement(f2.get(indexJ));\r |
| 899 | }\r |
| 900 | }\r |
| 901 | \r |
| 902 | return v;\r |
| 903 | }\r |
| 904 | }\r |