Skip to content

Commit

Permalink
Bit of work on an alternative fabric view, look at #/fabric/view to s…
Browse files Browse the repository at this point in the history
…ee it
  • Loading branch information
gashcrumb committed May 21, 2013
1 parent 78af691 commit 89ec168
Show file tree
Hide file tree
Showing 7 changed files with 528 additions and 2 deletions.
59 changes: 59 additions & 0 deletions hawtio-web/src/main/webapp/app/fabric/html/fabricView.html
@@ -0,0 +1,59 @@
<div ng-controller="Fabric.FabricViewController">
<div class="row-fluid">

<div class="span2">
<ul>
<li>
<a href="" ng-click="setActiveVersionId('')">Show All</a>
</li>
<li ng-repeat="version in versions">
<div class="version#{{version.id}}" data-drag="true" jqyoui-draggable="{animate:true, placeholder: keep, index: $index}" data-jqyoui-options="{revert: 'invalid'}">
<a href="" ng-click="setActiveVersionId(version.id)">{{version.id}} {{containersForVersion(version.id)}}</a>
</div>
</li>
</ul>
</div>

<div class="span2" ng-show="profiles.length > 0">
<ul>
<li>
<a href="" ng-click="setActiveProfileId('')">Show All</a>
</li>
<li ng-repeat="profile in profiles">
<div class="profile#{{profile}}" data-drag="true" jqyoui-draggable="{animate:true, placeholder: keep, index: $index}" data-jqyoui-options="{revert: 'invalid'}">
<a href="" ng-click="setActiveProfileId(profile)">{{profile}} {{containersForProfile(profile)}}</a>
</div>
</li>
</ul>

</div>

<div class="span2">
<ul>
<li>
<a href="" ng-click="setActiveContainerId('')">Show All</a>
</li>
<li ng-repeat="container in containers">
<div class="container#{{container.id}}" data-drop="true" jqyoui-droppable="{multiple: false, stack: true, onDrop: 'handleDrop', index: $index}" ng-model="dropContainer">
<a href="" ng-click="setActiveContainerId(container.id)">{{container.id}}</a>
</div>
</li>
</ul>

</div>

<div class="span2">
<ul>
<li>
<a href="" ng-click="setActiveProfileId('')">Show All</a>
</li>
<li ng-repeat="profile in activeProfiles">
<a href="" ng-click="setActiveProfileId(profile.id)">{{profile.id}} ({{profile.count}})</a>
</li>
</ul>
</div>



</div>
</div>
5 changes: 3 additions & 2 deletions hawtio-web/src/main/webapp/app/fabric/js/fabricPlugin.ts
@@ -1,7 +1,7 @@
module Fabric {
export var jmxDomain = 'org.fusesource.fabric';

angular.module('fabric', ['bootstrap', 'ui.bootstrap', 'ui.bootstrap.dialog', 'ngResource', 'ngGrid', 'hawtio-forms', 'hawtioCore']).config(($routeProvider) => {
angular.module('fabric', ['bootstrap', 'ui.bootstrap', 'ui.bootstrap.dialog', 'ngResource', 'ngGrid', 'hawtio-forms', 'hawtioCore', 'ngDragDrop']).config(($routeProvider) => {
$routeProvider.
when('/fabric/containers', {templateUrl: 'app/fabric/html/containers.html'}).
when('/fabric/containers/createContainer', {templateUrl: 'app/fabric/html/createContainer.html'}).
Expand All @@ -12,7 +12,8 @@ module Fabric {
when('/fabric/container/:containerId', {templateUrl: 'app/fabric/html/container.html'}).
when('/fabric/profiles', {templateUrl: 'app/fabric/html/profiles.html'}).
when('/fabric/profile/:versionId/:profileId', {templateUrl: 'app/fabric/html/profile.html'}).
when('/fabric/profile/:versionId/:profileId/:fname', {templateUrl: 'app/fabric/html/pid.html'});
when('/fabric/profile/:versionId/:profileId/:fname', {templateUrl: 'app/fabric/html/pid.html'}).
when('/fabric/view', {templateUrl: 'app/fabric/html/fabricView.html'});
}).
run(($location: ng.ILocationService, workspace: Workspace, jolokia, viewRegistry, pageTitle) => {

Expand Down
174 changes: 174 additions & 0 deletions hawtio-web/src/main/webapp/app/fabric/js/fabricView.ts
@@ -0,0 +1,174 @@
module Fabric {

export function FabricViewController($scope, jolokia) {

$scope.containerArgs = ["id", "alive", "profileIds", "versionId", "provisionResult", "jolokiaUrl"];
$scope.versionsOp = 'versions()';
$scope.containersOp = 'containers(java.util.List)';

$scope.activeVersionId = '';
$scope.activeProfileId = '';
$scope.versions = [];
$scope.containers = [];

$scope.profiles = [];
$scope.activeProfiles = [];


$scope.$watch('activeVersionId', () => {
$scope.profiles = $scope.currentVersionProfiles($scope.activeVersionId);
});

$scope.handleDrop = (event, element) => {

var sourceElement = $(event.srcElement);
var targetElement = $(event.target);

console.log("Source: ", sourceElement);
console.log("target: ", targetElement);

var temp = targetElement.attr('class').split('#');

var targetType = temp[0];
var targetName = temp[1];

temp = sourceElement.attr('class').split('#');

var sourceType = temp[0];
var sourceName = temp[1];

switch(targetType) {
case 'container':

switch(sourceType) {
case 'profile':
addProfilesToContainer(jolokia, targetName, [sourceName], () => {
notification('success', "Added " + sourceName + " to " + targetName);
}, (response) => {
notification('error', "Failed to add " + sourceName + " to " + targetName + " due to " + response.error);
});
break;
case 'version':
migrateContainers(jolokia, sourceName, [targetName], () => {
notification('success', "Moved " + targetName + " to version " + sourceName);
}, (response) => {
notification('error', "Failed to move " + targetName + " to version " + sourceName + " due to " + response.error);
});
break;
}

break;
}

};


$scope.currentVersionProfiles = (id) => {
if (id === '') {
return [];
}
var version = $scope.versions.find((version) => { return version.id === $scope.activeVersionId });
if (!version) {
return [];
}
return version.profiles;
};


$scope.currentActiveProfiles = () => {
var answer = [];

$scope.containers.each((container) => {
container.profileIds.each((profile) => {

var activeProfile = answer.find((o) => { return o.versionId === container.versionId && o.id === profile });
if (activeProfile) {
activeProfile.count++;
} else {
answer.push({
id: profile,
count: 1,
version: container.versionId
});
}
});
});

return answer;
};

$scope.containersForVersion = (id) => {
var count = $scope.containers.findAll((container) => { return container.versionId === id }).length;
if (count === 0) {
return '';
}
return "(" + count + ")";
};


$scope.containersForProfile = (id) => {
var profile = $scope.currentActiveProfiles().find((profile) => { return profile.id === id });
if (profile) {
return "(" + profile.count + ")";
} else {
return "";
}
};


$scope.setActiveProfileId = (id) => {
$scope.activeProfileId = id;
};


$scope.setActiveVersionId = (id) => {
$scope.activeVersionId = id;
};


$scope.updateVersions = (newVersions) => {
var response = angular.toJson(newVersions);
if ($scope.versionsResponse !== response) {
$scope.versionsResponse = response;
$scope.versions = newVersions;
if ($scope.activeVersion !== '') {
$scope.profiles = $scope.currentVersionProfiles($scope.activeVersion);
}
Core.$apply($scope);
}
};


$scope.updateContainers = (newContainers) => {
var response = angular.toJson(newContainers);
if ($scope.containersResponse !== response) {
$scope.containersResponse = response;
$scope.containers = newContainers;
$scope.activeProfiles = $scope.currentActiveProfiles();
Core.$apply($scope);
}
};


$scope.dispatch = (response) => {
switch (response.request.operation) {
case($scope.versionsOp):
$scope.updateVersions(response.value);
break;
case($scope.containersOp):
$scope.updateContainers(response.value);
break;
}
};


Core.register(jolokia, $scope, [
{type: 'exec', mbean: managerMBean, operation: $scope.versionsOp },
{type: 'exec', mbean: managerMBean, operation: $scope.containersOp, arguments: [$scope.containerArgs]}
], onSuccess($scope.dispatch));




}
}
4 changes: 4 additions & 0 deletions hawtio-web/src/main/webapp/app/fabric/js/helpers.ts
Expand Up @@ -32,6 +32,10 @@ module Fabric {
doAction('setConfigurationFile(java.lang.String, java.lang.String, java.lang.String, java.lang.String)', jolokia, [version, profile, pid, data], success, error);
}

export function addProfilesToContainer(jolokia, container, profiles, success, error) {
doAction('addProfilesToContainer(java.lang.String, java.util.List)', jolokia, [container, profiles], success, error);
}

export function applyProfiles(jolokia, version, profiles, containers, success, error) {
doAction('applyProfilesToContainers(java.lang.String, java.util.List, java.util.List)', jolokia, [version, profiles, containers], success, error);
}
Expand Down
3 changes: 3 additions & 0 deletions hawtio-web/src/main/webapp/index.html
Expand Up @@ -189,6 +189,9 @@
<!-- prefix free - handles browser css prefixes -->
<script type="text/javascript" src="lib/prefixfree.min.js"></script>

<!-- angular drag/drop directives -->
<script type="text/javascript" src="lib/angular-dragdrop.min.js"></script>

<!-- JBoss DMR -->
<script type="text/javascript" src="lib/dmr.js.nocache.js"></script>

Expand Down
29 changes: 29 additions & 0 deletions hawtio-web/src/main/webapp/lib/angular-dragdrop.min.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit 89ec168

Please sign in to comment.