Skip to content

Commit

Permalink
Refers #81. Merged wip from old branch
Browse files Browse the repository at this point in the history
RESTCOMM-493
  • Loading branch information
otsakir committed Jan 7, 2015
1 parent f75af1b commit 13d194b
Show file tree
Hide file tree
Showing 6 changed files with 167 additions and 65 deletions.
8 changes: 6 additions & 2 deletions restcomm/restcomm.rvd/src/main/webapp/app.js
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,8 @@ App.config([ '$routeProvider', function($routeProvider) {
controller : 'designerCtrl',
resolve: {
authInfo: function (authentication) {return authentication.authResolver();},
projectSettings: function (projectSettingsService, $route) {return projectSettingsService.retrieve($route.current.params.projectName);}
projectSettings: function (projectSettingsService, $route) {return projectSettingsService.retrieve($route.current.params.projectName);},
project: function(designerService, $route) {return designerService.openProject($route.current.params.projectName);}
}
})
.when('/packaging/:projectName', {
Expand Down Expand Up @@ -107,6 +108,7 @@ App.factory( 'dragService', [function () {
return serviceInstance;
}]);

/*
App.factory('protos', function () {
var protoInstance = {
nodes: {
Expand All @@ -117,6 +119,7 @@ App.factory('protos', function () {
};
return protoInstance;
});
*/


/*
Expand Down Expand Up @@ -334,7 +337,8 @@ App.directive('rvdPanel', function () {
transclude: true,
restrict: 'E',
scope: {
title:'=panelTitle',
//title:'=panelTitle',
title:'=title',
closePanel:'&onClose',
},
templateUrl: 'templates/directive/rvdPanel.html',
Expand Down
24 changes: 24 additions & 0 deletions restcomm/restcomm.rvd/src/main/webapp/js/app/models.js
Original file line number Diff line number Diff line change
Expand Up @@ -47,3 +47,27 @@ angular.module('Rvd').factory('CcInfo', ['rvdModel', function(rvdModel) {
*/
return CcInfo;
}]);

angular.module('Rvd').factory('nodeModel', ['rvdModel', 'nodeRegistry', 'stepPacker', function (rvdModel, nodeRegistry, stepPacker) {
function NodeModel() {
this.id = undefined;
this.name = 'module';
this.label = 'Untitled module';
this.steps = [];
this.iface = {edited:false,editLabel:false};
}
NodeModel.prototype = new rvdModel();
NodeModel.prototype.constructor = NodeModel;
NodeModel.prototype.setId = function (newid) {
this.id = newid;
}
NodeModel.prototype.init = function(from) {
angular.extend(this, from);
for (var j=0; j<this.steps.length; j++) {
var step = stepPacker.unpack(this.steps[j]);
this.steps[j] = step;
}
return this;
}
return NodeModel;
}])
48 changes: 48 additions & 0 deletions restcomm/restcomm.rvd/src/main/webapp/js/app/services.js
Original file line number Diff line number Diff line change
Expand Up @@ -449,3 +449,51 @@ angular.module('Rvd').service('variableRegistry', [function () {

return service;
}]);


angular.module('Rvd').service('nodeRegistry', 'protos', [function (nodeRegistry,protos) {
var service = {
lastNodeId: 0,
nodes: []
};
// put an existing node. Update lastNodeId if needed. Usefull when loadina a project
//function putNode(node) {
//
//}

function newId() {
return ++lastNodeId;
}

/*function newNode(kind) {
var newnode = angular.copy(protos.nodes[kind]);
newnode.name += ++lastNodeId;
return newnode;
}
*/
// Pushes a new node in the registry If it doesn't have an id it assigns one to it
function addNode(node) {
if (node.id) {
// Node already has an id. Update lastNodeId if required
if (lastNodeId < node.id)
lastNodeId = node.id;
// it is dangerous to add a node with an id less that lastNodeId
// else ...
} else {
var id = newId();
node.setId(id);
}
nodes.push(node);
}
function removeNode(node) {
service.nodes.splice(service.nodes.indexOf(node), 1);
}

// public interface
//service.newNode = newNode;
service.addNode = addNode;
service.removeNode = removeNode;

return service;
}]);

4 changes: 0 additions & 4 deletions restcomm/restcomm.rvd/src/main/webapp/js/app/steps.js
Original file line number Diff line number Diff line change
Expand Up @@ -25,11 +25,7 @@ angular.module('Rvd')
}])
.factory('rvdModel', function () {
function RvdModel() {
//this.test = function () {
// console.log('testing from RvdModel: ' + this.kind);
//}
this.pack = function () {
//console.log("rvdModel:pack()");
var clone = angular.copy(this);
return clone;
}
Expand Down
130 changes: 80 additions & 50 deletions restcomm/restcomm.rvd/src/main/webapp/js/controllers/designer.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
var designerCtrl = App.controller('designerCtrl', function($scope, $q, $routeParams, $location, stepService, protos, $http, $timeout, $upload, $injector, stepRegistry, stepPacker, $modal, notifications, ModelBuilder, projectSettingsService, webTriggerService) {
var designerCtrl = App.controller('designerCtrl', function($scope, $q, $routeParams, $location, stepService, protos, $http, $timeout, $upload, $injector, stepRegistry, stepPacker, $modal, notifications, ModelBuilder, projectSettingsService, webTriggerService, nodeRegistry) {

$scope.logger = function(s) {
console.log(s);
Expand Down Expand Up @@ -50,10 +50,11 @@ var designerCtrl = App.controller('designerCtrl', function($scope, $q, $routePar
$scope.projectName = $routeParams.projectName;
$scope.startNodeName = 'start';

$scope.nodes = [];
//$scope.nodes = [];
$scope.activeNode = 0 // contains the currently active node for all kinds
// of nodes
$scope.lastNodesId = 0 // id generators for all kinds of nodes
$scope.visibleNodes = [];
$scope.wavList = [];

// Some constants to be moved elsewhere = TODO
Expand All @@ -64,6 +65,12 @@ var designerCtrl = App.controller('designerCtrl', function($scope, $q, $routePar
$scope.loseFocus = function () {
// console.log('lost focus');
}

$scope.addNodeClicked = function(kind) {
var newnode = ModelBuilder.build( packedState.nodes[i]+"Node" );
nodeRegistry.addNode(newnode);

}

// nodes
$scope.nodeNamed = function (name) {
Expand Down Expand Up @@ -112,15 +119,6 @@ var designerCtrl = App.controller('designerCtrl', function($scope, $q, $routePar
break;
}
};
$scope.addNode = function( name, kind ) { // kind is based on project kind
$newnode = angular.copy(protos.nodes[kind]);
if ( typeof(name) === 'undefined' )
$newnode.name += ++$scope.lastNodesId;
else
$newnode.name = name;
$scope.nodes.push( $newnode );
return $newnode;
};
$scope.removeNode = function( index) {
if ( index < $scope.nodes.length ) {
$scope.nodes.splice(index,1);
Expand Down Expand Up @@ -222,23 +220,6 @@ var designerCtrl = App.controller('designerCtrl', function($scope, $q, $routePar
return deferred.promise;
}

$scope.openProject = function(name) {
$http({url: 'services/projects/' + name,
method: "GET"
})
.success(function (data, status, headers, config) {
$scope.projectName = name;
$scope.unpackState(data);
if ( $scope.projectKind == 'voice' )
$scope.refreshWavList(name);
// maybe override .error() also to display a message?
}).error(function (data, status, headers, config) {
if ( data.serverError && (data.serverError.className == 'IncompatibleProjectVersion') )
$location.path("/upgrade/" + name)
else
$scope.projectError = data.serverError;
});
}

$scope.refreshWavList = function(projectName) {
$http({url: 'services/projects/'+ projectName + '/wavs' , method: "GET"})
Expand Down Expand Up @@ -508,27 +489,7 @@ var designerCtrl = App.controller('designerCtrl', function($scope, $q, $routePar
return state;
}

$scope.unpackState = function (packedState) {
stepRegistry.reset(packedState.lastStepId);
for ( var i=0; i < packedState.nodes.length; i++) {
var node = packedState.nodes[i];
node.iface = {};
for (var j=0; j<node.steps.length; j++) {
var step = stepPacker.unpack(node.steps[j]);
node.steps[j] = step;
}
}

$scope.nodes = packedState.nodes;
$scope.lastNodesId = packedState.lastNodeId;
$scope.startNodeName = packedState.header.startNodeName;
$scope.projectKind = packedState.header.projectKind;
$scope.version = packedState.header.version;
$scope.exceptionHandlingInfo = ModelBuilder.build('ExceptionHandlingInfo').init(packedState.exceptionHadlingInfo);

}


// Exception controller & functionality

var exceptionConfigCtrl = function ($scope, $modalInstance, projectModules) {
Expand Down Expand Up @@ -583,8 +544,8 @@ var designerCtrl = App.controller('designerCtrl', function($scope, $q, $routePar

// Run the following after all initialization are complete

console.log( "opening project " + $scope.projectName);
$scope.openProject( $scope.projectName );
//console.log( "opening project " + $scope.projectName);
//$scope.openProject( $scope.projectName );


// UNSORTED
Expand All @@ -598,4 +559,73 @@ var designerCtrl = App.controller('designerCtrl', function($scope, $q, $routePar
}
});

angular.module('Rvd').service('designerService', ['stepRegistry', '$q', '$http', 'stepPacker', 'ModelBuilder', 'nodeRegistry', function (stepRegistry, $q, $http, stepPacker, ModelBuilder, nodeRegistry) {
var service = {};

service.openProject = function (name) {
var deferred = $q.defer();

$http({url: 'services/projects/' + name,
method: "GET"
})
.success(function (data, status, headers, config) {
var project = {};
project.projectName = name;
unpackState(project, data);
if ( project.projectKind == 'voice' ) {
refreshWavList(name).then(function (wavList) {
project.wavList = wavList;
deferred.resolve(project);
}, function (error) {
deferred.reject(error);
});
} else {
deferred.resolve(project);
}
// maybe override .error() also to display a message?
}).error(function (data, status, headers, config) {
deferred.reject("IncompatibleProjectVersion")
//if ( data.serverError && (data.serverError.className == 'IncompatibleProjectVersion') )
// $location.path("/upgrade/" + name)
// else
// $scope.projectError = data.serverError;
});
return deferred.promise;
}

function unpackState(project, packedState) {
stepRegistry.reset(packedState.lastStepId);
for ( var i=0; i < packedState.nodes.length; i++) {
var node = ModelBuilder.build( packedState.nodes[i]+"Node" ).init( packedState.nodes[i] );
nodeRegistry.addNode(node);
}
//project.nodes = packedState.nodes;
//project.lastNodesId = packedState.lastNodeId;
project.startNodeName = packedState.header.startNodeName;
project.projectKind = packedState.header.projectKind;
project.version = packedState.header.version;
project.exceptionHandlingInfo = ModelBuilder.build('ExceptionHandlingInfo').init(packedState.exceptionHadlingInfo);
}

function refreshWavList(projectName) {
var deferred = $q.defer();
$http({url: 'services/projects/'+ projectName + '/wavs' , method: "GET"})
.success(function (data, status, headers, config) {
//$scope.wavList = data;
deferred.resolve(data);
})
.error(function (data, status, headers, config) {
deferred.reject("wav-error");
});
return deferred.promise;
}
service.refreshWavList = refreshWavList;

return service;

}]);





18 changes: 9 additions & 9 deletions restcomm/restcomm.rvd/src/main/webapp/templates/designer.html
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@
</li>
<li><a class='rvd-clickable-text' ng-click='onSavePressed()'><i ng-hide="saveSpinnerShown" class='fa fa-save'></i><i ng-show="saveSpinnerShown" class="fa fa-spinner fa-spin"></i> &nbsp; Save</a></li>
<li class='rvd-appurl' ng-show="startNodeSet()"><a target="_blank" href='{{getStartUrl()}}'>App URL</a></li>
<li><a href="#/project-manager/{{projectKind ? projectKind : 'voice'}}" title="Close {{projectName}}"><i class='fa fa-power-off'></i>&nbsp;</a></li>
<li><a href="#/project-manager/{{project.projectKind ? project.projectKind : 'voice'}}" title="Close {{projectName}}"><i class='fa fa-power-off'></i>&nbsp;</a></li>
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" title="Settings"><i class="fa fa-cog"></i> <b class="caret"></b></a>
<ul class="dropdown-menu">
Expand All @@ -51,7 +51,7 @@
<!-- Left menu -->
<div class="col-md-2">

<div ng-show='!projectKind || projectKind=="voice"' class='form-group'>
<div ng-show='!project.projectKind || project.projectKind=="voice"' class='form-group'>
<div basic-draggable drop-target='.steps' class="verb-button button-play label label-primary rvd-pickable"><i class='fa fa-play-circle'></i> &nbsp;Play</div>
<div basic-draggable drop-target='.steps' drag-model='protos.stepProto.say' class="verb-button button-say label label-primary rvd-pickable"><i class='fa fa-quote-left'></i> &nbsp;Say</div>
<div basic-draggable drop-target='.steps' class="verb-button button-gather label label-primary rvd-pickable"><i class='fa fa-th'></i> &nbsp;Collect</div>
Expand All @@ -67,21 +67,21 @@
<div basic-draggable drop-target='.steps' class="verb-button button-record label label-primary rvd-pickable"><i class='fa fa-microphone'></i> &nbsp;Record</div>
<div basic-draggable drop-target='.steps' class="verb-button button-fax label label-primary rvd-pickable"><i class='fa fa-print'></i> &nbsp;Fax</div>
</div>
<div ng-show='projectKind=="ussd"' class='form-group'>
<div ng-show='project.projectKind=="ussd"' class='form-group'>
<div basic-draggable drop-target='.steps' class="label label-primary verb-button button-ussdLanguage rvd-pickable"><i class='fa fa-globe'></i> &nbsp;Language</div>
<div basic-draggable drop-target='.ussd-collect-messages,.steps' class="label label-primary verb-button button-ussdSay rvd-pickable"><i class='fa fa-envelope-o'></i> &nbsp;USSD Message</div>
<div basic-draggable drop-target='.steps' class="label label-primary verb-button button-ussdCollect rvd-pickable"><i class='fa fa-question'></i> &nbsp;USSD Collect</div>
<div basic-draggable drop-target='.steps' class="label label-primary verb-button button-externalService rvd-pickable"><i class='fa fa-external-link'></i> &nbsp;External Service</div>
<div basic-draggable drop-target='.steps' class="verb-button button-log label label-primary rvd-pickable"><i class='fa fa-align-justify'></i> &nbsp;Log</div>
<div basic-draggable drop-target='.steps' class="verb-button button-log label label-primary rvd-pickable"><i class='fa fa-align-justify'></i> &nbsp;Log</div>
</div>
<div ng-show='projectKind=="sms"' class='form-group'>
<div ng-show='project.projectKind=="sms"' class='form-group'>
<div basic-draggable drop-target='.steps' class="verb-button button-sms label label-primary rvd-pickable"><i class='fa fa-envelope-o'></i> &nbsp;SMS</div>
<div basic-draggable drop-target='.steps' class="verb-button button-redirect label label-primary rvd-pickable"><i class='fa fa-link'></i> &nbsp;Redirect</div>
<div basic-draggable drop-target='.steps' class="label label-primary verb-button button-externalService rvd-pickable"><i class='fa fa-external-link'></i> &nbsp;External Service</div>
<div basic-draggable drop-target='.steps' class="verb-button button-log label label-primary rvd-pickable"><i class='fa fa-align-justify'></i> &nbsp;Log</div>
<div basic-draggable drop-target='.steps' class="verb-button button-log label label-primary rvd-pickable"><i class='fa fa-align-justify'></i> &nbsp;Log</div>
</div>

<div ng-show='projectKind=="voice"'>
<div ng-show='project.projectKind=="voice"'>
<h5 class='text-center'><strong>Audio resources</strong></h5>

<div class='drop-area' ng-file-drop="onFileSelect($files)" ng-file-drag-over-class="dropping" ng-show="dropSupported">
Expand All @@ -94,7 +94,7 @@ <h5 class='text-center'><strong>Audio resources</strong></h5>
</div>

<div ng-show='showAudioResources'>
<div class='row' ng-repeat='wavItem in wavList'>
<div class='row' ng-repeat='wavItem in project.wavList'>
<div ng-show='!wavItem.viewMode'>
<div class='col-md-10 ellipsis' tooltip='{{wavItem.filename}}' tooltip-popup-delay="1000" tooltip-trigger="mouseenter">{{wavItem.filename}}</div>
<div class='col-md-1'>
Expand Down Expand Up @@ -130,7 +130,7 @@ <h5 class='text-center'><strong>Audio resources</strong></h5>
<li ng-repeat='node in nodes'><a ng-click="setStartNode(node.name)">{{node.label}}</a></li>
</ul>
</li>
<li><a ng-click="addNode(undefined, projectKind)" class="btn-primary rvd-clickable-text"><i class='fa fa-plus'></i>&nbsp; New Module</a></li>
<li><a ng-click="addNodeClicked(project.projectKind)" class="btn-primary rvd-clickable-text"><i class='fa fa-plus'></i>&nbsp; New Module</a></li>
<!--
<li>
<a ng-click="showExceptionConfig()" class="rvd-clickable-text">Exceptions</a>
Expand Down

0 comments on commit 13d194b

Please sign in to comment.