1## @file
2# Inventory workspace's distribution package information.
3#
4# Copyright (c) 2014, Intel Corporation. All rights reserved.<BR>
5#
6# This program and the accompanying materials are licensed and made available
7# under the terms and conditions of the BSD License which accompanies this
8# distribution. The full text of the license may be found at
9# http://opensource.org/licenses/bsd-license.php
10#
11# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
12# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
13#
14"""
15Inventory workspace's distribution package information.
16"""
17##
18# Import Modules
19#
20from sys import platform
21from traceback import format_exc
22from platform import python_version
23
24from Logger import StringTable as ST
25from Logger.ToolError import FatalError
26from Logger.ToolError import ABORT_ERROR
27from Logger.ToolError import CODE_ERROR
28import Logger.Log as Logger
29
30from Library import GlobalData
31
32## InventoryDistInstalled
33#
34# This method retrieves the installed distribution information from the internal UPT database
35#
36# @param  DataBase: the UPT database
37#
38def InventoryDistInstalled(DataBase):
39    DistInstalled = DataBase.InventoryDistInstalled()
40
41    #
42    # find the max length for each item
43    #
44    DpNameStr = "DpName"
45    DpGuidStr = "DpGuid"
46    DpVerStr = "DpVer"
47    DpOriginalNameStr = "DpOriginalName"
48    MaxGuidlen = len(DpGuidStr)
49    MaxVerlen = len(DpVerStr)
50    MaxDpAliasFileNameLen = len(DpNameStr)
51    MaxDpOrigFileNamelen = len(DpOriginalNameStr)
52
53    for (DpGuid, DpVersion, DpOriginalName, DpAliasFileName) in DistInstalled:
54        MaxGuidlen = max(MaxGuidlen, len(DpGuid))
55        MaxVerlen = max(MaxVerlen, len(DpVersion))
56        MaxDpAliasFileNameLen = max(MaxDpAliasFileNameLen, len(DpAliasFileName))
57        MaxDpOrigFileNamelen = max(MaxDpOrigFileNamelen, len(DpOriginalName))
58
59    OutMsgFmt = "%-*s\t%-*s\t%-*s\t%-s"
60    OutMsg = OutMsgFmt % (MaxDpAliasFileNameLen,
61                          DpNameStr,
62                          MaxGuidlen,
63                          DpGuidStr,
64                          MaxVerlen,
65                          DpVerStr,
66                          DpOriginalNameStr)
67    Logger.Info(OutMsg)
68
69    for (DpGuid, DpVersion, DpFileName, DpAliasFileName) in DistInstalled:
70        OutMsg = OutMsgFmt % (MaxDpAliasFileNameLen,
71                            DpAliasFileName,
72                            MaxGuidlen,
73                            DpGuid,
74                            MaxVerlen,
75                            DpVersion,
76                            DpFileName)
77        Logger.Info(OutMsg)
78
79## Tool entrance method
80#
81# This method mainly dispatch specific methods per the command line options.
82# If no error found, return zero value so the caller of this tool can know
83# if it's executed successfully or not.
84#
85# @param  Options: command Options
86#
87def Main(Options = None):
88    if Options:
89        pass
90
91    try:
92        DataBase = GlobalData.gDB
93        InventoryDistInstalled(DataBase)
94        ReturnCode = 0
95    except FatalError, XExcept:
96        ReturnCode = XExcept.args[0]
97        if Logger.GetLevel() <= Logger.DEBUG_9:
98            Logger.Quiet(ST.MSG_PYTHON_ON % (python_version(), platform) + format_exc())
99    except KeyboardInterrupt:
100        ReturnCode = ABORT_ERROR
101        if Logger.GetLevel() <= Logger.DEBUG_9:
102            Logger.Quiet(ST.MSG_PYTHON_ON % (python_version(), platform) + format_exc())
103    except:
104        ReturnCode = CODE_ERROR
105        Logger.Error("\nInventoryWs",
106                    CODE_ERROR,
107                    ST.ERR_UNKNOWN_FATAL_INVENTORYWS_ERR,
108                    ExtraData=ST.MSG_SEARCH_FOR_HELP,
109                    RaiseError=False
110                    )
111        Logger.Quiet(ST.MSG_PYTHON_ON % (python_version(),
112            platform) + format_exc())
113
114    if ReturnCode == 0:
115        Logger.Quiet(ST.MSG_FINISH)
116
117    return ReturnCode