1
0
Fork 0
mirror of https://we.phorge.it/source/phorge.git synced 2024-09-20 09:18:48 +02:00

Move Drydock object list rendering to SearchEngine

Summary: Ref T4986. Allows the Drydock search engines to render as panels.

Test Plan: Viewed affected interfaces in Drydock. Created panels from each engine.

Reviewers: btrahan

Reviewed By: btrahan

Subscribers: epriestley

Maniphest Tasks: T4986

Differential Revision: https://secure.phabricator.com/D9103
This commit is contained in:
epriestley 2014-05-13 12:14:33 -07:00
parent 4a7499f230
commit 38f5894b58
14 changed files with 247 additions and 190 deletions

View file

@ -661,6 +661,7 @@ phutil_register_library_map(array(
'DrydockLease' => 'applications/drydock/storage/DrydockLease.php',
'DrydockLeaseController' => 'applications/drydock/controller/DrydockLeaseController.php',
'DrydockLeaseListController' => 'applications/drydock/controller/DrydockLeaseListController.php',
'DrydockLeaseListView' => 'applications/drydock/view/DrydockLeaseListView.php',
'DrydockLeaseQuery' => 'applications/drydock/query/DrydockLeaseQuery.php',
'DrydockLeaseReleaseController' => 'applications/drydock/controller/DrydockLeaseReleaseController.php',
'DrydockLeaseSearchEngine' => 'applications/drydock/query/DrydockLeaseSearchEngine.php',
@ -671,6 +672,7 @@ phutil_register_library_map(array(
'DrydockLog' => 'applications/drydock/storage/DrydockLog.php',
'DrydockLogController' => 'applications/drydock/controller/DrydockLogController.php',
'DrydockLogListController' => 'applications/drydock/controller/DrydockLogListController.php',
'DrydockLogListView' => 'applications/drydock/view/DrydockLogListView.php',
'DrydockLogQuery' => 'applications/drydock/query/DrydockLogQuery.php',
'DrydockLogSearchEngine' => 'applications/drydock/query/DrydockLogSearchEngine.php',
'DrydockManagementCloseWorkflow' => 'applications/drydock/management/DrydockManagementCloseWorkflow.php',
@ -687,6 +689,7 @@ phutil_register_library_map(array(
'DrydockResourceCloseController' => 'applications/drydock/controller/DrydockResourceCloseController.php',
'DrydockResourceController' => 'applications/drydock/controller/DrydockResourceController.php',
'DrydockResourceListController' => 'applications/drydock/controller/DrydockResourceListController.php',
'DrydockResourceListView' => 'applications/drydock/view/DrydockResourceListView.php',
'DrydockResourceQuery' => 'applications/drydock/query/DrydockResourceQuery.php',
'DrydockResourceSearchEngine' => 'applications/drydock/query/DrydockResourceSearchEngine.php',
'DrydockResourceStatus' => 'applications/drydock/constants/DrydockResourceStatus.php',
@ -3305,11 +3308,8 @@ phutil_register_library_map(array(
1 => 'PhabricatorPolicyInterface',
),
'DrydockLeaseController' => 'DrydockController',
'DrydockLeaseListController' =>
array(
0 => 'DrydockLeaseController',
1 => 'PhabricatorApplicationSearchResultsControllerInterface',
),
'DrydockLeaseListController' => 'DrydockLeaseController',
'DrydockLeaseListView' => 'AphrontView',
'DrydockLeaseQuery' => 'DrydockQuery',
'DrydockLeaseReleaseController' => 'DrydockLeaseController',
'DrydockLeaseSearchEngine' => 'PhabricatorApplicationSearchEngine',
@ -3323,11 +3323,8 @@ phutil_register_library_map(array(
1 => 'PhabricatorPolicyInterface',
),
'DrydockLogController' => 'DrydockController',
'DrydockLogListController' =>
array(
0 => 'DrydockLogController',
1 => 'PhabricatorApplicationSearchResultsControllerInterface',
),
'DrydockLogListController' => 'DrydockLogController',
'DrydockLogListView' => 'AphrontView',
'DrydockLogQuery' => 'DrydockQuery',
'DrydockLogSearchEngine' => 'PhabricatorApplicationSearchEngine',
'DrydockManagementCloseWorkflow' => 'DrydockManagementWorkflow',
@ -3347,11 +3344,8 @@ phutil_register_library_map(array(
),
'DrydockResourceCloseController' => 'DrydockResourceController',
'DrydockResourceController' => 'DrydockController',
'DrydockResourceListController' =>
array(
0 => 'DrydockResourceController',
1 => 'PhabricatorApplicationSearchResultsControllerInterface',
),
'DrydockResourceListController' => 'DrydockResourceController',
'DrydockResourceListView' => 'AphrontView',
'DrydockResourceQuery' => 'DrydockQuery',
'DrydockResourceSearchEngine' => 'PhabricatorApplicationSearchEngine',
'DrydockResourceStatus' => 'DrydockConstants',

View file

@ -38,7 +38,10 @@ final class DrydockBlueprintViewController extends DrydockBlueprintController {
->setViewer($viewer)
->execute();
$resource_list = $this->buildResourceListView($resources);
$resource_list = id(new DrydockResourceListView())
->setUser($viewer)
->setResources($resources)
->render();
$resource_list->setNoDataString(pht('This blueprint has no resources.'));
$pager = new AphrontPagerView();

View file

@ -8,145 +8,4 @@ abstract class DrydockController extends PhabricatorController {
return $this->buildSideNavView()->getMenu();
}
protected function buildLogTableView(array $logs) {
assert_instances_of($logs, 'DrydockLog');
$user = $this->getRequest()->getUser();
$rows = array();
foreach ($logs as $log) {
$resource_uri = '/resource/'.$log->getResourceID().'/';
$resource_uri = $this->getApplicationURI($resource_uri);
$lease_uri = '/lease/'.$log->getLeaseID().'/';
$lease_uri = $this->getApplicationURI($lease_uri);
$rows[] = array(
phutil_tag(
'a',
array(
'href' => $resource_uri,
),
$log->getResourceID()),
phutil_tag(
'a',
array(
'href' => $lease_uri,
),
$log->getLeaseID()),
$log->getMessage(),
phabricator_date($log->getEpoch(), $user),
);
}
$table = new AphrontTableView($rows);
$table->setDeviceReadyTable(true);
$table->setHeaders(
array(
'Resource',
'Lease',
'Message',
'Date',
));
$table->setShortHeaders(
array(
'R',
'L',
'Message',
'',
));
$table->setColumnClasses(
array(
'',
'',
'wide',
'',
));
return $table;
}
protected function buildLeaseListView(array $leases) {
assert_instances_of($leases, 'DrydockLease');
$viewer = $this->getRequest()->getUser();
$view = new PHUIObjectItemListView();
foreach ($leases as $lease) {
$item = id(new PHUIObjectItemView())
->setUser($viewer)
->setHeader($lease->getLeaseName())
->setHref($this->getApplicationURI('/lease/'.$lease->getID().'/'));
if ($lease->hasAttachedResource()) {
$resource = $lease->getResource();
$resource_href = '/resource/'.$resource->getID().'/';
$resource_href = $this->getApplicationURI($resource_href);
$resource_name = $resource->getName();
$item->addAttribute(
phutil_tag(
'a',
array(
'href' => $resource_href,
),
$resource_name));
}
$status = DrydockLeaseStatus::getNameForStatus($lease->getStatus());
$item->addAttribute($status);
$item->setEpoch($lease->getDateCreated());
if ($lease->isActive()) {
$item->setBarColor('green');
} else {
$item->setBarColor('red');
}
$view->addItem($item);
}
return $view;
}
protected function buildResourceListView(array $resources) {
assert_instances_of($resources, 'DrydockResource');
$user = $this->getRequest()->getUser();
$view = new PHUIObjectItemListView();
foreach ($resources as $resource) {
$name = pht('Resource %d', $resource->getID()).': '.$resource->getName();
$item = id(new PHUIObjectItemView())
->setHref($this->getApplicationURI('/resource/'.$resource->getID().'/'))
->setHeader($name);
$status = DrydockResourceStatus::getNameForStatus($resource->getStatus());
$item->addAttribute($status);
switch ($resource->getStatus()) {
case DrydockResourceStatus::STATUS_PENDING:
$item->setBarColor('yellow');
break;
case DrydockResourceStatus::STATUS_OPEN:
$item->setBarColor('green');
break;
case DrydockResourceStatus::STATUS_DESTROYED:
$item->setBarColor('black');
break;
default:
$item->setBarColor('red');
break;
}
$view->addItem($item);
}
return $view;
}
}

View file

@ -1,7 +1,6 @@
<?php
final class DrydockLeaseListController extends DrydockLeaseController
implements PhabricatorApplicationSearchResultsControllerInterface {
final class DrydockLeaseListController extends DrydockLeaseController {
private $queryKey;
@ -23,12 +22,4 @@ final class DrydockLeaseListController extends DrydockLeaseController
return $this->delegateToController($controller);
}
public function renderResultsList(
array $leases,
PhabricatorSavedQuery $query) {
assert_instances_of($leases, 'DrydockLease');
return $this->buildLeaseListView($leases);
}
}

View file

@ -39,7 +39,10 @@ final class DrydockLeaseViewController extends DrydockLeaseController {
->withLeaseIDs(array($lease->getID()))
->executeWithOffsetPager($pager);
$log_table = $this->buildLogTableView($logs);
$log_table = id(new DrydockLogListView())
->setUser($viewer)
->setLogs($logs)
->render();
$log_table->appendChild($pager);
$crumbs = $this->buildApplicationCrumbs();

View file

@ -1,7 +1,6 @@
<?php
final class DrydockLogListController extends DrydockLogController
implements PhabricatorApplicationSearchResultsControllerInterface {
final class DrydockLogListController extends DrydockLogController {
private $queryKey;
@ -23,12 +22,4 @@ final class DrydockLogListController extends DrydockLogController
return $this->delegateToController($controller);
}
public function renderResultsList(
array $logs,
PhabricatorSavedQuery $query) {
assert_instances_of($logs, 'DrydockLog');
return $this->buildLogTableView($logs);
}
}

View file

@ -1,7 +1,6 @@
<?php
final class DrydockResourceListController extends DrydockResourceController
implements PhabricatorApplicationSearchResultsControllerInterface {
final class DrydockResourceListController extends DrydockResourceController {
private $queryKey;
@ -23,12 +22,4 @@ final class DrydockResourceListController extends DrydockResourceController
return $this->delegateToController($controller);
}
public function renderResultsList(
array $resources,
PhabricatorSavedQuery $query) {
assert_instances_of($resources, 'DrydockResource');
return $this->buildResourceListView($resources);
}
}

View file

@ -36,7 +36,10 @@ final class DrydockResourceViewController extends DrydockResourceController {
->withResourceIDs(array($resource->getID()))
->execute();
$lease_list = $this->buildLeaseListView($leases);
$lease_list = id(new DrydockLeaseListView())
->setUser($viewer)
->setLeases($leases)
->render();
$lease_list->setNoDataString(pht('This resource has no leases.'));
$pager = new AphrontPagerView();
@ -48,7 +51,10 @@ final class DrydockResourceViewController extends DrydockResourceController {
->withResourceIDs(array($resource->getID()))
->executeWithOffsetPager($pager);
$log_table = $this->buildLogTableView($logs);
$log_table = id(new DrydockLogListView())
->setUser($viewer)
->setLogs($logs)
->render();
$log_table->appendChild($pager);
$crumbs = $this->buildApplicationCrumbs();

View file

@ -3,6 +3,10 @@
final class DrydockLeaseSearchEngine
extends PhabricatorApplicationSearchEngine {
public function getApplicationClassName() {
return 'PhabricatorApplicationDrydock';
}
public function buildSavedQueryFromRequest(AphrontRequest $request) {
$saved = new PhabricatorSavedQuery();
@ -78,4 +82,15 @@ final class DrydockLeaseSearchEngine
return parent::buildSavedQueryFromBuiltin($query_key);
}
protected function renderResultList(
array $leases,
PhabricatorSavedQuery $saved,
array $handles) {
return id(new DrydockLeaseListView())
->setUser($this->requireViewer())
->setLeases($leases)
->render();
}
}

View file

@ -3,6 +3,10 @@
final class DrydockLogSearchEngine
extends PhabricatorApplicationSearchEngine {
public function getApplicationClassName() {
return 'PhabricatorApplicationDrydock';
}
public function buildSavedQueryFromRequest(AphrontRequest $request) {
$saved = new PhabricatorSavedQuery();
@ -45,4 +49,15 @@ final class DrydockLogSearchEngine
return parent::buildSavedQueryFromBuiltin($query_key);
}
protected function renderResultList(
array $logs,
PhabricatorSavedQuery $query,
array $handles) {
return id(new DrydockLogListView())
->setUser($this->requireViewer())
->setLogs($logs)
->render();
}
}

View file

@ -3,6 +3,10 @@
final class DrydockResourceSearchEngine
extends PhabricatorApplicationSearchEngine {
public function getApplicationClassName() {
return 'PhabricatorApplicationDrydock';
}
public function buildSavedQueryFromRequest(AphrontRequest $request) {
$saved = new PhabricatorSavedQuery();
@ -77,4 +81,15 @@ final class DrydockResourceSearchEngine
return parent::buildSavedQueryFromBuiltin($query_key);
}
protected function renderResultList(
array $resources,
PhabricatorSavedQuery $query,
array $handles) {
return id(new DrydockResourceListView())
->setUser($this->requireViewer())
->setResources($resources)
->render();
}
}

View file

@ -0,0 +1,56 @@
<?php
final class DrydockLeaseListView extends AphrontView {
private $leases;
public function setLeases(array $leases) {
assert_instances_of($leases, 'DrydockLease');
$this->leases = $leases;
return $this;
}
public function render() {
$leases = $this->leases;
$viewer = $this->getUser();
$view = new PHUIObjectItemListView();
foreach ($leases as $lease) {
$item = id(new PHUIObjectItemView())
->setUser($viewer)
->setHeader($lease->getLeaseName())
->setHref('/drydock/lease/'.$lease->getID().'/');
if ($lease->hasAttachedResource()) {
$resource = $lease->getResource();
$resource_href = '/drydock/resource/'.$resource->getID().'/';
$resource_name = $resource->getName();
$item->addAttribute(
phutil_tag(
'a',
array(
'href' => $resource_href,
),
$resource_name));
}
$status = DrydockLeaseStatus::getNameForStatus($lease->getStatus());
$item->addAttribute($status);
$item->setEpoch($lease->getDateCreated());
if ($lease->isActive()) {
$item->setBarColor('green');
} else {
$item->setBarColor('red');
}
$view->addItem($item);
}
return $view;
}
}

View file

@ -0,0 +1,69 @@
<?php
final class DrydockLogListView extends AphrontView {
private $logs;
public function setLogs(array $logs) {
assert_instances_of($logs, 'DrydockLog');
$this->logs = $logs;
return $this;
}
public function render() {
$logs = $this->logs;
$viewer = $this->getUser();
$view = new PHUIObjectItemListView();
$rows = array();
foreach ($logs as $log) {
$resource_uri = '/drydock/resource/'.$log->getResourceID().'/';
$lease_uri = '/drydock/lease/'.$log->getLeaseID().'/';
$rows[] = array(
phutil_tag(
'a',
array(
'href' => $resource_uri,
),
$log->getResourceID()),
phutil_tag(
'a',
array(
'href' => $lease_uri,
),
$log->getLeaseID()),
$log->getMessage(),
phabricator_date($log->getEpoch(), $viewer),
);
}
$table = new AphrontTableView($rows);
$table->setDeviceReadyTable(true);
$table->setHeaders(
array(
'Resource',
'Lease',
'Message',
'Date',
));
$table->setShortHeaders(
array(
'R',
'L',
'Message',
'',
));
$table->setColumnClasses(
array(
'',
'',
'wide',
'',
));
return $table;
}
}

View file

@ -0,0 +1,49 @@
<?php
final class DrydockResourceListView extends AphrontView {
private $resources;
public function setResources(array $resources) {
assert_instances_of($resources, 'DrydockResource');
$this->resources = $resources;
return $this;
}
public function render() {
$resources = $this->resources;
$viewer = $this->getUser();
$view = new PHUIObjectItemListView();
foreach ($resources as $resource) {
$name = pht('Resource %d', $resource->getID()).': '.$resource->getName();
$item = id(new PHUIObjectItemView())
->setHref('/drydock/resource/'.$resource->getID().'/')
->setHeader($name);
$status = DrydockResourceStatus::getNameForStatus($resource->getStatus());
$item->addAttribute($status);
switch ($resource->getStatus()) {
case DrydockResourceStatus::STATUS_PENDING:
$item->setBarColor('yellow');
break;
case DrydockResourceStatus::STATUS_OPEN:
$item->setBarColor('green');
break;
case DrydockResourceStatus::STATUS_DESTROYED:
$item->setBarColor('black');
break;
default:
$item->setBarColor('red');
break;
}
$view->addItem($item);
}
return $view;
}
}