1
2
3
4
5
6
7
8
9
10
11
12
13
14 __doc__="""ManufacturerRoot
15
16 The Manufacturer classification class. default identifiers and screens,
17 live here.
18
19 $Id: ManufacturerRoot.py,v 1.10 2004/04/22 02:14:12 edahl Exp $"""
20
21 __version__ = "$Revision: 1.10 $"[11:-2]
22
23 import logging
24 log = logging.getLogger('zen')
25
26 import transaction
27
28 from Globals import InitializeClass
29 from Acquisition import aq_base
30 from AccessControl import Permissions as permissions
31 from Products.ZenModel.ZenossSecurity import *
32
33 from Products.ZenRelations.PrimaryPathObjectManager import \
34 PrimaryPathBTreeFolder2
35
36 from ZenModelItem import ZenModelItem
37 from ZenPacker import ZenPacker
38 from Products.ZenUtils.Search import \
39 makeCaseSensitiveKeywordIndex, makeCaseInsensitiveFieldIndex
40 from Products.ManagableIndex import FieldIndex
41
49
50
51
52
53
55 """
56 The root organizer for manufacturers. May become a BtreeFolder2 at
57 some point (to scale better). Has interface to manage Manufacturers
58 and the products that they create.
59 """
60 dmdRootName = "Manufacturers"
61 meta_type = "ManufacturerRoot"
62 sub_classes = ('Manufacturer',)
63 default_catalog = "productSearch"
64
65
66 factory_type_information = (
67 {
68 'id' : 'Manufacturer',
69 'meta_type' : 'Manufacturer',
70 'description' : """Arbitrary device grouping class""",
71 'icon' : 'Manufacturer_icon.gif',
72 'product' : 'ZenModel',
73 'factory' : 'manage_addManufacturer',
74 'immediate_view' : 'viewManufacturers',
75 'actions' :
76 (
77 { 'id' : 'overview'
78 , 'name' : 'Overview'
79 , 'action' : 'viewManufacturers'
80 , 'permissions' : (
81 permissions.view, )
82 },
83 )
84 },
85 )
86
87
94
95
102
103
110
111
113 """Return and create if nessesary manufacturerName.
114 """
115 from Products.ZenModel.Manufacturer import manage_addManufacturer
116 if manufacturerName and not self.has_key(manufacturerName):
117 logging.info("Creating Manufacturer %s" % manufacturerName)
118 manage_addManufacturer(self, manufacturerName)
119 if manufacturerName:
120 return self._getOb(manufacturerName)
121 return None
122
123
125 """
126 Return manufacturerName. If it doesn't exist, create it.
127 """
128 manufacturerName = self.prepId(manufacturerName)
129 if self.has_key(manufacturerName):
130 return self._getOb(manufacturerName)
131 else:
132 for m in self.objectValues(spec="Manufacturer"):
133 if m.matches(manufacturerName):
134 return m
135
136 return self.createManufacturer(manufacturerName)
137
138
140 """return list of all companies"""
141 return self.objectIds(spec=("Manufacturer"))
142
143
145 """return a list of all products this Manufacturer makes"""
146 productFilter = dict(getManufacturerName=mname)
147 if type == "OS":
148 productFilter['meta_type'] = "SoftwareClass"
149 productFilter['isOS'] = True
150 elif type:
151 productFilter['meta_type'] = type
152
153 cat = getattr(self, self.default_catalog)
154 return sorted(['']+[entry.id for entry in cat(productFilter)])
155
156
168
169
175
176
184
185
186 - def _getProduct(self, prodName, manufacturer, factory, **kwargs):
187 prod = self.findProduct(prodName)
188 if prod:
189
190 return prod
191
192
193 prodid = self.prepId(prodName)
194 manufobj = self.getManufacturer(manufacturer)
195 prod = manufobj.products._getOb(prodid, None)
196 if prod is None:
197 prod = factory(prodid, prodName=prodName, **kwargs)
198 manufobj.products._setObject(prodid, prod)
199 prod = manufobj.products._getOb(prodid)
200 return prod
201
202
204 """Return a generator that gets all products.
205 """
206 for manuf in self.values(spec="Manufacturer"):
207 for prod in manuf.products.objectValuesGen():
208 yield prod
209
210
217
218
236
237
238 - def exportXml(self, ofile, ignorerels=[], root=False):
239 """Return an xml based representation of a RelationshipManager
240 <object id='/Devices/Servers/Windows/dhcp160.confmon.loc'
241 module='Products.Confmon.IpInterface' class='IpInterface'>
242 <property id='name'>jim</property>
243 <toone></toone>
244 <tomany></tomany>
245 <tomanycont></tomanycont>
246 </object>
247 """
248 modname = self.__class__.__module__
249 classname = self.__class__.__name__
250 id = root and self.getPrimaryId() or self.id
251 stag = "<object id='%s' module='%s' class='%s'>\n" % (
252 id , modname, classname)
253 ofile.write(stag)
254 for obj in self.objectValues():
255 if getattr(aq_base(obj), 'exportXml', False):
256 obj.exportXml(ofile, ignorerels)
257 ofile.write("</object>\n")
258
259
261 if getattr(aq_base(self), "zDeviceClass", False): return
262 self._setProperty("zDeviceClass", "")
263 self._setProperty("zDeviceGroup", "")
264 self._setProperty("zSystem", "")
265
266
267 InitializeClass(ManufacturerRoot)
268