renderer = $renderer; $this->name = $name; $this->node = $node; $this->path = $path; } protected function actions() { if ($this->actions === null) { $this->addActions(); } return $this->actions; } protected function addActions() { $this->actions = Container::create( array( 'class' => 'actions', 'data-base-target' => '_self' ) ); return $this->add($this->actions); } public function render() { $renderer = $this->renderer; $node = $this->node; $attributes = $this->attributes(); $attributes->add('class', $renderer->getNodeClasses($node)); $attributes->add('id', 'bp-' . (string) $node); $this->addActions(); $link = $this->getMainNodeLink(); $this->add($link); if ($node instanceof BpNode) { if ($renderer->isBreadcrumb()) { $link->addContent($renderer->renderStateBadges($node->getStateSummary())); } else { $this->addContent($renderer->renderStateBadges($node->getStateSummary())); } } if (! $renderer->isBreadcrumb()) { $this->addDetailsActions(); } if (! $renderer->isLocked()) { $this->addActionLinks(); } return parent::render(); } protected function getMainNodeUrl(Node $node) { if ($node instanceof BpNode) { return $this->makeBpUrl($node); } else { /** @var MonitoredNode $node */ return $node->getUrl(); } } protected function buildBaseNodeUrl(Node $node) { $path = $this->path; $name = $this->name; // TODO: ?? $renderer = $this->renderer; $bp = $renderer->getBusinessProcess(); $params = array( 'config' => $node instanceof ImportedNode ? $node->getConfigName() : $bp->getName() ); if ($name !== null) { $params['node'] = $name; } $url = $renderer->getBaseUrl(); $p = $url->getParams(); $p->mergeValues($params); if (! empty($path)) { $p->addValues('path', $path); } return $url; } protected function makeBpUrl(BpNode $node) { return $this->buildBaseNodeUrl($node); } protected function makeMonitoredNodeUrl(MonitoredNode $node) { $path = $this->path; $name = $this->name; // TODO: ?? $renderer = $this->renderer; $bp = $renderer->getBusinessProcess(); $params = array( 'config' => $bp->getName() ); if ($name !== null) { $params['node'] = $node->getName(); } $url = $renderer->getBaseUrl(); $p = $url->getParams(); $p->mergeValues($params); if (! empty($path)) { $p->addValues('path', $path); } return $url; } /** * @return Link */ protected function getMainNodeLink() { $node = $this->node; $url = $this->getMainNodeUrl($node); if ($node instanceof ServiceNode) { $link = Link::create( $node->getAlias(), $url, null, array('data-base-target' => '_next') ); } elseif ($node instanceof HostNode) { $link = Link::create( $node->getHostname(), $url, null, array('data-base-target' => '_next') ); } else { $link = Link::create($node->getAlias(), $url); } return $link; } protected function addDetailsActions() { $node = $this->node; $url = $this->getMainNodeUrl($node); if ($node instanceof BpNode) { $this->actions()->add(Link::create( Icon::create('dashboard'), $url->with('mode', 'tile'), null, array( 'title' => $this->translate('Show tiles for this subtree'), 'data-base-target' => '_next' ) ))->add(Link::create( Icon::create('sitemap'), $url->with('mode', 'tree'), null, array( 'title' => $this->translate('Show this subtree as a tree'), 'data-base-target' => '_next' ) )); } else { // $url = $this->makeMonitoredNodeUrl($node); if ($node instanceof ServiceNode) { $this->actions()->add(Link::create( Icon::create('service'), $node->getUrl(), null, array('data-base-target' => '_next') )); } elseif ($node instanceof HostNode) { $this->actions()->add(Link::create( Icon::create('host'), $node->getUrl(), null, array('data-base-target' => '_next') )); } } } protected function addActionLinks() { $node = $this->node; $renderer = $this->renderer; if ($node instanceof BpNode) { $this->actions()->add(Link::create( Icon::create('edit'), $renderer->getUrl()->with('action', 'edit')->with('editnode', $node->getName()), null, array('title' => $this->translate('Modify this business process node')) )); } elseif ($node instanceof MonitoredNode) { $this->actions()->add(Link::create( Icon::create('magic'), $renderer->getUrl()->with('action', 'simulation') ->with('simulationnode', $this->name), null, array('title' => $this->translate( 'Show the business impact of this node by simulating a specific state' )) )); } $params = array( 'action' => 'delete', 'deletenode' => $node->getName(), ); $this->actions()->add(Link::create( Icon::create('cancel'), $renderer->getUrl()->with($params), null, array('title' => $this->translate('Delete this node')) )); } }