| Trees | Indices | Help |
|
|---|
|
|
1 ##############################################################################
2 #
3 # Copyright (C) Zenoss, Inc. 2007, 2009, all rights reserved.
4 #
5 # This content is made available according to terms specified in
6 # License.zenoss under the directory where your Zenoss product is installed.
7 #
8 ##############################################################################
9
10
11 __doc__="""ManufacturerRoot
12
13 The Manufacturer classification class. default identifiers and screens,
14 live here.
15
16 $Id: ManufacturerRoot.py,v 1.10 2004/04/22 02:14:12 edahl Exp $"""
17
18 __version__ = "$Revision: 1.10 $"[11:-2]
19
20 import logging
21 log = logging.getLogger('zen')
22
23 import transaction
24
25 from Globals import InitializeClass
26 from Acquisition import aq_base
27 from AccessControl import Permissions as permissions
28 from Products.ZenModel.ZenossSecurity import *
29
30 from Products.ZenRelations.PrimaryPathObjectManager import \
31 PrimaryPathBTreeFolder2
32
33 from ZenModelItem import ZenModelItem
34 from ZenPacker import ZenPacker
35 from Products.ZenUtils.Search import \
36 makeCaseSensitiveKeywordIndex, makeCaseInsensitiveFieldIndex
37 from Products.ManagableIndex import FieldIndex
38
40 """make a Manufacturer class"""
41 m = ManufacturerRoot()
42 context._setObject(m.getId(), m)
43 m = context._getOb(m.dmdRootName)
44 if REQUEST is not None:
45 REQUEST['RESPONSE'].redirect(context.absolute_url() + '/manage_main')
46
47
48 #addManufacturerRoot = DTMLFile('dtml/addManufacturerRoot',globals())
49
50 _MARKER = object()
51
53 """
54 The root organizer for manufacturers. May become a BtreeFolder2 at
55 some point (to scale better). Has interface to manage Manufacturers
56 and the products that they create.
57 """
58 dmdRootName = "Manufacturers"
59 meta_type = "ManufacturerRoot"
60 sub_classes = ('Manufacturer',)
61 default_catalog = "productSearch"
62
63 # Screen action bindings (and tab definitions)
64 factory_type_information = (
65 {
66 'id' : 'Manufacturer',
67 'meta_type' : 'Manufacturer',
68 'description' : """Arbitrary device grouping class""",
69 'icon' : 'Manufacturer_icon.gif',
70 'product' : 'ZenModel',
71 'factory' : 'manage_addManufacturer',
72 'immediate_view' : 'viewManufacturers',
73 'actions' :
74 (
75 { 'id' : 'overview'
76 , 'name' : 'Overview'
77 , 'action' : 'viewManufacturers'
78 , 'permissions' : (
79 permissions.view, )
80 },
81 )
82 },
83 )
84
85
87 if not id: id = self.dmdRootName
88 super(ManufacturerRoot, self).__init__(id)
89 PrimaryPathBTreeFolder2.__init__(self, id)
90 self.createCatalog()
91 self.buildzProperties()
92
93
95 """Add a manufacturer from UI code.
96 """
97 if manufacturerName:
98 self.createManufacturer(manufacturerName)
99 if REQUEST: return self.callZenScreen(REQUEST)
100
101
103 """Delete a list of manufacturers from UI.
104 """
105 if not ids: return self.callZenScreen(REQUEST)
106 for id in ids: self._delObject(id)
107 if REQUEST: return self.callZenScreen(REQUEST)
108
109
111 """Return and create if nessesary manufacturerName.
112 """
113 from Products.ZenModel.Manufacturer import manage_addManufacturer
114 if manufacturerName and not self.has_key(manufacturerName):
115 logging.info("Creating Manufacturer %s" % manufacturerName)
116 manage_addManufacturer(self, manufacturerName)
117 if manufacturerName:
118 return self._getOb(manufacturerName)
119 return None
120
121
123 """
124 Return manufacturerName. If it doesn't exist, create it.
125 """
126 manufacturerName = self.prepId(manufacturerName)
127 if self.has_key(manufacturerName):
128 return self._getOb(manufacturerName)
129 else:
130 for m in self.objectValues(spec="Manufacturer"):
131 if m.matches(manufacturerName):
132 return m
133
134 return self.createManufacturer(manufacturerName)
135
136
140
141
143 """return a list of all products this Manufacturer makes"""
144 productFilter = dict(getManufacturerName=mname)
145 if type == "OS":
146 productFilter['meta_type'] = "SoftwareClass"
147 productFilter['isOS'] = True
148 elif type:
149 productFilter['meta_type'] = type
150
151 cat = getattr(self, self.default_catalog)
152 return sorted(['']+[entry.id for entry in cat(productFilter)])
153
154
156 """Find a product by is productKey.
157 """
158 cat = getattr(self, self.default_catalog)
159 brains = cat({'productKeys': query})
160 if not brains: return None
161 try:
162 return self.getObjByPath(brains[0].getPrimaryId)
163 except KeyError:
164 log.warn("bad path '%s' index '%s'",
165 brains[0].getPrimaryId, self.default_catalog)
166
167
169 """Return and create if necessary a HardwareClass object.
170 """
171 from Products.ZenModel.HardwareClass import HardwareClass
172 return self._getProduct(prodName, manufacturer, HardwareClass, **kwargs)
173
174
176 """Return and create if necessary a SoftwareClass object.
177 """
178 from Products.ZenModel.SoftwareClass import SoftwareClass
179 prod = self._getProduct(prodName, manufacturer, SoftwareClass, isOS=isOS, **kwargs)
180 return prod
181
182
184 prod = self.findProduct(prodName)
185 if prod:
186 # Product already exists. Return it.
187 return prod
188
189 #delegate find/create to the manufacturer
190 manufobj = self.getManufacturer(manufacturer)
191 prod = manufobj._getProduct(prodName, factory, **kwargs)
192 return prod
193
194
196 """Return a generator that gets all products.
197 """
198 for manuf in self.values(spec="Manufacturer"):
199 for prod in manuf.products.objectValuesGen():
200 yield prod
201
202
204 """Go through all devices in this tree and reindex them."""
205 zcat = self._getOb(self.default_catalog)
206 zcat.manage_catalogClear()
207 for prod in self.getProductsGen():
208 prod.index_object()
209
210
212 """Create a catalog for EventClassRecord searching"""
213 from Products.ZCatalog.ZCatalog import manage_addZCatalog
214
215 # XXX update to use ManagableIndex
216 manage_addZCatalog(self, self.default_catalog, self.default_catalog)
217 zcat = self._getOb(self.default_catalog)
218 cat = zcat._catalog
219 cat.addIndex('productKeys',
220 makeCaseSensitiveKeywordIndex('productKeys'))
221 cat.addIndex('meta_type',
222 makeCaseInsensitiveFieldIndex('meta_type'))
223 cat.addIndex('getManufacturerName',
224 makeCaseInsensitiveFieldIndex('getManufacturerName'))
225 cat.addIndex('isOS', FieldIndex('isOS'))
226 zcat.addColumn('getPrimaryId')
227 zcat.addColumn('id')
228
229
231 """Return an xml based representation of a RelationshipManager
232 <object id='/Devices/Servers/Windows/dhcp160.confmon.loc'
233 module='Products.Confmon.IpInterface' class='IpInterface'>
234 <property id='name'>jim</property>
235 <toone></toone>
236 <tomany></tomany>
237 <tomanycont></tomanycont>
238 </object>
239 """
240 modname = self.__class__.__module__
241 classname = self.__class__.__name__
242 id = root and self.getPrimaryId() or self.id
243 stag = "<object id='%s' module='%s' class='%s'>\n" % (
244 id , modname, classname)
245 ofile.write(stag)
246 for obj in self.objectValues():
247 if getattr(aq_base(obj), 'exportXml', False):
248 obj.exportXml(ofile, ignorerels)
249 ofile.write("</object>\n")
250
252 """Return self with is acquisition path set to primary path"""
253 # This is copied from PrimaryPathObjectManager - ZenModelItem one is bogus
254 parent = getattr(self, "__primary_parent__", _MARKER)
255 if parent is _MARKER: # dmd - no __primary_parent__
256 base = self.getPhysicalRoot().zport
257 return aq_base(self).__of__(base)
258 if parent is None: # Deleted object
259 raise KeyError(self.id)
260 return aq_base(self).__of__(parent.primaryAq())
261
263 if getattr(aq_base(self), "zDeviceClass", False): return
264 self._setProperty("zDeviceClass", "")
265 self._setProperty("zDeviceGroup", "")
266 self._setProperty("zSystem", "")
267
268
269 InitializeClass(ManufacturerRoot)
270
| Trees | Indices | Help |
|
|---|
| Generated by Epydoc 3.0.1.1812 on Mon Jul 30 17:11:36 2012 | http://epydoc.sourceforge.net |