Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
#123 first cut of a nicer Add wizard that has an Endpoints tab that l…
…ets you pick from the available list of endpoints
  • Loading branch information
jstrachan committed Jun 5, 2013
1 parent aa2d9fd commit e45eb11
Show file tree
Hide file tree
Showing 8 changed files with 176 additions and 108 deletions.
2 changes: 1 addition & 1 deletion hawtio-web/src/main/webapp/app/camel/js/camel.ts
Expand Up @@ -66,7 +66,7 @@ module Camel {
} else {
console.log("No data from route XML!")
}
$scope.$apply();
Core.$apply($scope);
};


Expand Down
71 changes: 2 additions & 69 deletions hawtio-web/src/main/webapp/app/camel/js/endpoint.ts
@@ -1,28 +1,9 @@
module Camel {
export function EndpointController($scope, $location, workspace:Workspace, jolokia) {
Camel.initEndpointChooserScope($scope, workspace, jolokia);

$scope.workspace = workspace;
$scope.message = "";
$scope.selectedComponentName = null;
$scope.endpointParameters = {};
$scope.schema = {
definitions: {
}
};

var silentOptions = {silent: true};

$scope.$watch('workspace.selection', function () {
workspace.moveIfViewInvalid();
loadData();
});

$scope.$watch('selectedComponentName', () => {
if ($scope.selectedComponentName !== $scope.loadedComponentName) {
$scope.endpointParameters = {};
loadEndpointSchema($scope.selectedComponentName);
$scope.loadedComponentName = $scope.selectedComponentName;
}
});

$scope.createEndpoint = (name) => {
var jolokia = workspace.jolokia;
Expand Down Expand Up @@ -74,54 +55,6 @@ module Camel {
}
};

$scope.endpointCompletions = () => {
var answer = [];
var mbean = Camel.getSelectionCamelContextMBean(workspace);
var componentName = $scope.selectedComponentName;
var endpointParameters = {};
var completionText = $scope.endpointPath || "";
if (mbean && componentName && completionText) {
answer = jolokia.execute(mbean, 'completeEndpointPath', componentName, endpointParameters, completionText, onSuccess(null, silentOptions));
}
return answer;
};

function loadData() {
$scope.componentNames = null;
var mbean = Camel.getSelectionCamelContextMBean(workspace);
if (mbean) {
jolokia.execute(mbean, 'findComponentNames', onSuccess(onComponents, silentOptions));
}
}

function onComponents(response) {
$scope.componentNames = response;
$scope.hasComponentNames = $scope.componentNames ? true : false;
Core.$apply($scope);
}

function loadEndpointSchema(componentName) {
var mbean = Camel.getSelectionCamelContextMBean(workspace);
if (mbean && componentName) {
jolokia.execute(mbean, 'componentParameterJsonSchema', componentName, onSuccess(onEndpointSchema, silentOptions));
}
}

function onEndpointSchema(response) {
if (response) {
try {
//console.log("got JSON: " + response);
var json = JSON.parse(response);
$scope.endpointSchema = json;
$scope.schema.definitions[$scope.selectedComponentName] = json;
Core.$apply($scope);
} catch (e) {
console.log("Failed to parse JSON " + e);
console.log("JSON: " + response);
}
}
}

function operationSuccess() {
$scope.endpointName = "";
$scope.workspace.operationCounter += 1;
Expand Down
81 changes: 81 additions & 0 deletions hawtio-web/src/main/webapp/app/camel/js/endpointChooser.ts
@@ -0,0 +1,81 @@
module Camel {

export function initEndpointChooserScope($scope, workspace:Workspace, jolokia) {
$scope.selectedComponentName = null;
$scope.endpointParameters = {};
$scope.schema = {
definitions: {
}
};

var silentOptions = {silent: true};

$scope.$watch('workspace.selection', function () {
workspace.moveIfViewInvalid();
$scope.loadEndpointNames();
});

$scope.$watch('selectedComponentName', () => {
if ($scope.selectedComponentName !== $scope.loadedComponentName) {
$scope.endpointParameters = {};
$scope.loadEndpointSchema($scope.selectedComponentName);
$scope.loadedComponentName = $scope.selectedComponentName;
}
});

$scope.endpointCompletions = () => {
var answer = [];
var mbean = Camel.getSelectionCamelContextMBean(workspace);
var componentName = $scope.selectedComponentName;
var endpointParameters = {};
var completionText = $scope.endpointPath || "";
if (mbean && componentName && completionText) {
answer = jolokia.execute(mbean, 'completeEndpointPath', componentName, endpointParameters, completionText, onSuccess(null, silentOptions));
}
return answer;
};

$scope.loadEndpointNames = () => {
$scope.componentNames = null;
var mbean = Camel.getSelectionCamelContextMBean(workspace);
if (!mbean && $scope.findProfileCamelContext) {
// TODO as a hack for now lets just find any camel context we can
var folder = Core.getMBeanTypeFolder(workspace, Camel.jmxDomain, "context");
mbean = Core.pathGet(folder, ["objectName"]);
}
if (mbean) {
jolokia.execute(mbean, 'findComponentNames', onSuccess(onComponents, silentOptions));
} else {
console.log("WARNING: No camel context mbean so cannot load component names");
}
};

function onComponents(response) {
$scope.componentNames = response;
$scope.hasComponentNames = $scope.componentNames ? true : false;
Core.$apply($scope);
}

$scope.loadEndpointSchema = (componentName) => {
var mbean = Camel.getSelectionCamelContextMBean(workspace);
if (mbean && componentName) {
jolokia.execute(mbean, 'componentParameterJsonSchema', componentName, onSuccess(onEndpointSchema, silentOptions));
}
};

function onEndpointSchema(response) {
if (response) {
try {
//console.log("got JSON: " + response);
var json = JSON.parse(response);
$scope.endpointSchema = json;
$scope.schema.definitions[$scope.selectedComponentName] = json;
Core.$apply($scope);
} catch (e) {
console.log("Failed to parse JSON " + e);
console.log("JSON: " + response);
}
}
}
}
}
1 change: 0 additions & 1 deletion hawtio-web/src/main/webapp/app/camel/js/helpers.ts
Expand Up @@ -970,5 +970,4 @@ module Camel {
}
return doc;
}

}
6 changes: 5 additions & 1 deletion hawtio-web/src/main/webapp/app/core/js/helpers.ts
Expand Up @@ -776,7 +776,11 @@ module Core {
if (workspace) {
var mbeanTypesToDomain = workspace.mbeanTypesToDomain || {};
var types = mbeanTypesToDomain[typeName] || {};
return types[domain];
var answer = types[domain];
if (angular.isArray(answer) && answer.length) {
return answer[0];
}
return answer;
}
return null;
}
Expand Down
20 changes: 15 additions & 5 deletions hawtio-web/src/main/webapp/app/wiki/html/camelCanvas.html
Expand Up @@ -99,7 +99,8 @@
data-placement="bottom">
<i class="icon-magic"></i> Layout</a></li>
<li class="pull-right">
<a href='' title="Edit the properties for the selected node" ng-disabled="!selectedFolder" ng-click="propertiesDialog.open()"
<a href='' title="Edit the properties for the selected node" ng-disabled="!selectedFolder"
ng-click="propertiesDialog.open()"
data-placement="bottom">
<i class="icon-edit"></i> Properties</a></li>
</ul>
Expand All @@ -108,11 +109,19 @@
<form class="form-horizontal no-bottom-margin" ng-submit="addAndCloseDialog()">
<div class="modal-header"><h4>Add Node</h4></div>
<div class="modal-body">
<div hawtio-tree="paletteTree" hideRoot="true" onSelect="onPaletteSelect"
activateNodes="paletteActivations"></div>
<tabs>
<pane heading="Patterns">
<div hawtio-tree="paletteTree" hideRoot="true" onSelect="onPaletteSelect"
activateNodes="paletteActivations"></div>
</pane>
<pane heading="Components">
<div hawtio-tree="componentTree" hideRoot="true" onSelect="onComponentSelect"
activateNodes="componentActivations"></div>
</pane>
</tabs>
</div>
<div class="modal-footer">
<input id="submit" class="btn btn-primary add" type="submit" ng-disabled="!selectedPaletteNode"
<input id="submit" class="btn btn-primary add" type="submit" ng-disabled="!selectedPaletteNode || !selectedComponentNode"
value="Add">
<button class="btn btn-warning cancel" type="button" ng-click="addDialog.close()">Cancel</button>
</div>
Expand All @@ -123,7 +132,8 @@
<form class="form-horizontal no-bottom-margin" ng-submit="updatePropertiesAndCloseDialog()">
<div class="modal-header"><h4>Properties</h4></div>
<div class="modal-body">
<div simple-form name="formEditor" entity='nodeData' data='nodeModel' schema="schema" onsubmit="updatePropertiesAndCloseDialog"></div>
<div simple-form name="formEditor" entity='nodeData' data='nodeModel' schema="schema"
onsubmit="updatePropertiesAndCloseDialog"></div>
</div>
<div class="modal-footer">
<input class="btn btn-primary add" type="submit" ng-click="updatePropertiesAndCloseDialog()" value="OK">
Expand Down

0 comments on commit e45eb11

Please sign in to comment.