Package Products :: Package ZenModel :: Module ReportClass |
[hide private]
[frames] | no frames]

# Source Code for Module Products.ZenModel.ReportClass

      1  ##############################################################################
      2  #
      3  # Copyright (C) Zenoss, Inc. 2007, 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__="""ReportClass
     12
     13  ReportClass groups different types of reports together
     14
     15  $Id: ReportClass.py,v 1.3 2004/04/22 15:33:44 edahl Exp $"""
     16
     17  __version__ = "$Revision: 1.3 $"[11:-2]
     18
     19  from AccessControl import ClassSecurityInfo
     20  from Globals import InitializeClass
     21  from Globals import DTMLFile
     22
     23  from Organizer import Organizer
     24  from ZenPackable import ZenPackable
     25  from ZenossSecurity import ZEN_COMMON, ZEN_MANAGE_DMD
     26  from Products.ZenRelations.RelSchema import *
     27  from Products.ZenUtils.Utils import unused, getDisplayType
     28  from Products.ZenWidgets import messaging
     29  from Products.ZenMessaging.audit import audit
     30  from Products.ZenUtils.deprecated import deprecated
     31
     32  @deprecated
     33 -def manage_addReportClass(context, id, title = None, REQUEST = None):
     34      """make a report class"""
     35      dc = ReportClass(id, title)
     36      context._setObject(id, dc)
     37
     38      if REQUEST is not None:
     39          audit('UI.Organizer.Add', dc.id, title=title, organizer=context)
     40          messaging.IMessageSender(context).sendToBrowser(
     41              'Report Organizer Created',
     42              'Report organizer %s was created.' % id
     43          )
     44          REQUEST['RESPONSE'].redirect(context.absolute_url() + '/manage_main')
     45
     46  addReportClass = DTMLFile('dtml/addReportClass',globals())
     47
     48 -class ReportClass(Organizer, ZenPackable):
     49      dmdRootName = "Reports"
     50      portal_type = meta_type = "ReportClass"
     51
     52      #sub_meta_types = ("ReportClass", "Report", 'DeviceReport', 'GraphReport',
     53      #                'MultiGraphReportClass')
     54
     55      _relations = Organizer._relations + ZenPackable._relations
     56
     57      # Screen action bindings (and tab definitions)
     58      factory_type_information = (
     59          {
     60              'immediate_view' : 'viewReportClass',
     61              'actions'        :
     62              (
     63                  { 'id'            : 'view'
     64                  , 'name'          : 'Status'
     65                  , 'action'        : 'viewReportClass'
     66                  , 'permissions'   : ( "View",)
     67                  , 'visible'       : 1
     68                  },
     69              )
     70            },
     71          )
     72
     73      security = ClassSecurityInfo()
     74
     75      security.declareProtected(ZEN_COMMON, "children")
     76 -    def children(self, sort=False, checkPerm=True, spec=None):
     77          ''' Return all objects that are instances of ReportClass
     78          '''
     79          unused(spec)
     80          kids = [o for o in self.objectValues() if isinstance(o, ReportClass)]
     81          if checkPerm:
     82              kids = [kid for kid in kids if self.checkRemotePerm("View", kid)]
     83          if sort:
     84              kids.sort(key=lambda x: x.primarySortKey())
     85          return kids
     86
     87
     88 -    def childIds(self, spec=None):
     89          """Return Ids of children within our organizer."""
     90          unused(spec)
     91          return [k.id for k in self.children()]
     92
     93
     94      security.declareProtected(ZEN_COMMON, "countChildren")
     95 -    def countChildren(self, spec=None):
     96          """Return a count of all our contained children."""
     97          unused(spec)
     98          count = len(self.children())
     99          count += sum(child.countChildren() for child in self.children())
    100          return count
    101
    102
    103 -    def getReportClass(self):
    104          ''' Return the class to instantiate for new report classes
    105          '''
    106          return ReportClass
    107
    108
    109      security.declareProtected(ZEN_MANAGE_DMD, 'manage_addReportClass')
    110 -    def manage_addReportClass(self, id, title = None, REQUEST = None):
    111          """make a report class"""
    112          rClass = self.getReportClass()
    113          dc = rClass(id, title)
    114          self._setObject(id, dc)
    115          if REQUEST:
    116              audit('UI.Organizer.Add', dc.id, title=title)
    117              messaging.IMessageSender(self).sendToBrowser(
    118                  'Report Organizer Created',
    119                  'Report organizer %s was created.' % id
    120              )
    121              return self.callZenScreen(REQUEST)
    122
    123
    124 -    def reports(self):
    125          """Return list of report instances.
    126          """
    127          reportspec = ('Report','DeviceReport','GraphReport','MultiGraphReport')
    128          return [r for r in self.objectValues(spec=reportspec)
    129                      if self.checkRemotePerm('View', r)]
    130
    131
    132 -    def countReports(self):
    133          """Return a count of all our contained children."""
    134          count = len(self.reports())
    135          count += sum(child.countReports() for child in self.children())
    136          return count
    137
    138
    139      security.declareProtected('Manage DMD', 'manage_addGraphReport')
    140      @deprecated
    141 -    def manage_addGraphReport(self, id, REQUEST=None):
    142          """Add an graph report to this object.
    143          """
    144          if id:
    145              from Products.ZenModel.GraphReport import GraphReport
    146              gr = GraphReport(id)
    147              self._setObject(id, gr)
    148              if REQUEST:
    149                  audit('UI.Report.Add', gr.id, reportType=getDisplayType(gr))
    150                  messaging.IMessageSender(self).sendToBrowser(
    151                      'Report Created',
    152                      'Graph report %s was created.' % id
    153                  )
    154                  return self.callZenScreen(REQUEST)
    155
    156      @deprecated
    157 -    def moveReports(self, moveTarget, ids=None, REQUEST=None):
    158          """Move a report from here organizer to moveTarget.
    159          """
    160          if not moveTarget or not ids: return self()
    161          if isinstance(ids, basestring): ids = (ids,)
    162          target = self.getOrganizer(moveTarget)
    163          for rptname in ids:
    164              rpt = self._getOb(rptname)
    165              rpt._operation = 1 # moving object state
    166              self._delObject(rptname)
    167              target._setObject(rptname, rpt)
    168          if REQUEST:
    169              messaging.IMessageSender(self).sendToBrowser(
    170                  'Reports Moved',
    171                  'Reports %s were moved to %s.' % (', '.join(ids), moveTarget)
    172              )
    173              REQUEST['RESPONSE'].redirect(target.getPrimaryUrlPath())
    174
    175
    176 -    def exportXmlHook(self, ofile, ignorerels):
    177          """patch to export all device components
    178          """
    179          from Acquisition import aq_base
    180          for o in self.reports():
    181              if hasattr(aq_base(o), 'exportXml'):
    182                  o.exportXml(ofile, ignorerels)
    183
    184
    185
    186  InitializeClass(ReportClass)
    187