Subversion Repositories bacoAlunos

Rev

Rev 1775 | Rev 1782 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
1670 jmachado 1
<%@ taglib uri="/WEB-INF/tlds/struts-html.tld" prefix="html" %>
2
<%@ taglib uri="/WEB-INF/tlds/struts-nested.tld" prefix="nested" %>
3
<%@ taglib uri="/WEB-INF/tlds/struts-logic.tld" prefix="logic" %>
4
<%@ taglib uri="/WEB-INF/tlds/struts-bean.tld" prefix="bean" %>
5
<%@ taglib uri="/WEB-INF/tlds/struts-tiles.tld" prefix="tiles" %>
6
<%@ taglib uri="/WEB-INF/tlds/baco.tld" prefix="baco" %>
7
<%@ taglib uri="/WEB-INF/tlds/jomm.tld" prefix="jomm" %>
1781 jmachado 8
<%@ page import="jomm.dao.impl.AbstractDao" %>
9
<%@ page import="pt.estgp.estgweb.domain.BpmnProcessImpl" %>
10
<%@ page import="pt.estgp.estgweb.domain.dao.DaoFactory" %>
1670 jmachado 11
<%@ page import="pt.estgp.estgweb.web.filters.UserRoleProxy" %>
1781 jmachado 12
<%@ taglib tagdir="/WEB-INF/tags" prefix="bacoTags" %>
1670 jmachado 13
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
1781 jmachado 14
<%
1670 jmachado 15
 
1781 jmachado 16
    Long processId = Long.parseLong(request.getParameter("id"));
17
    AbstractDao.getCurrentSession().beginTransaction();
18
    BpmnProcessImpl process = (BpmnProcessImpl) DaoFactory.getBpmnProcessDaoImpl().get(processId);
1670 jmachado 19
 
1781 jmachado 20
 
21
%>
22
 
23
<style>
24
    div.dirty
25
    {
26
        border: 3px dashed orangered !important;
27
    }
28
</style>
29
 
30
 
1670 jmachado 31
<link rel="stylesheet" href="<%=request.getContextPath()%>/user/pagecontent/jorgeaux/angulartree/bower_components/angular-ui-tree/dist/angular-ui-tree.min.css">
32
<script type="text/javascript" src="<%=request.getContextPath()%>/user/pagecontent/jorgeaux/angulartree/bower_components/angular-ui-tree/dist/angular-ui-tree.js"></script>
33
 
34
 
35
<div class="container-fluid"
36
     id="processEditorModule"
37
     ng-app="processEditorModule"
1775 jmachado 38
     ng-controller="processEditorModuleController"
39
     ng-init="initBuilder()">
1670 jmachado 40
 
41
<style>
42
    .has-error .chosen-container
43
    {
44
        border: 1px solid #a94442 !important;
45
    }
46
</style>
47
<script>
48
 
49
//DECLARACAO DA APLICACAO LOCAL EM ANGULAR
50
var processEditorModule = angular.module('processEditorModule', ['ui.tree']);
51
GLOBAL_BacoAngularAppDependencies.push('processEditorModule');
52
 
53
/**Fim de directiva reutilizavel**/
54
 
1781 jmachado 55
processEditorModule.controller('processEditorModuleController', function($scope,$interval,$filter)
56
{
1670 jmachado 57
 
1781 jmachado 58
    $scope.autoSavesObjects = [];
59
    $scope.inicializarSaves = function()
60
    {
61
        $interval(autoSaves,5000);
62
    }
1670 jmachado 63
 
1781 jmachado 64
    $scope.autoSaves = function()
1775 jmachado 65
    {
1781 jmachado 66
        for(x in process.flowComponents)
67
        {
68
            var obj = process.flowComponents[x];
69
            if(obj.dirty == true)
70
            {
71
 
72
            }
73
        }
74
        for(x in process.actorPools)
75
        {
76
            var obj = process.actorPools[f];
77
            if(obj.dirty == true)
78
            {
79
 
80
            }
81
        }
1775 jmachado 82
    }
83
 
1781 jmachado 84
    $scope.callService = function(service,parameters,callback)
1775 jmachado 85
    {
86
        widgetCallWithActionParameters(
87
                "<%=request.getContextPath()%>/admin/bpmn/bpmnController.do",
1781 jmachado 88
                service,
89
                parameters,
90
                "#processEditorModule",
91
                function(jsonAnswer)
1775 jmachado 92
                {
1781 jmachado 93
                    callback(jsonAnswer);
1775 jmachado 94
                    $scope.$apply();
95
                }
96
        );
97
    }
1781 jmachado 98
    $scope.callSimpleService = function(service,parameters,callback)
99
    {
100
        widgetSimpleCallWithActionParameters(
101
                "<%=request.getContextPath()%>/admin/bpmn/bpmnController.do",
102
                service,
103
                parameters,
104
                "#processEditorModule",
105
                function()
106
                {
107
                    callback();
108
                    $scope.$apply();
109
                }
110
        );
111
    }
1775 jmachado 112
 
1781 jmachado 113
    //$scope.files = {"service":"ok","uploadedFiles":[{fileName:"teste"}]};
114
    $scope.idTemp = -1;
1775 jmachado 115
 
1781 jmachado 116
    $scope.jsps = [];
117
 
118
 
119
    $scope.initBuilder = function()
120
    {
121
        $scope.initJsps();
122
    }
123
 
124
    $scope.initJsps = function()
125
    {
126
        $scope.callService("loadJspsPlugins",{},function(interfaces)
127
        {
128
            $scope.jsps = interfaces.jsps;
129
            $scope.$apply();
130
            $(".angularChosen").chosen();
131
        });
132
    }
133
 
134
 
1670 jmachado 135
    /** Funções que interagem com directiva reutilizavel **/
136
    $scope.save = function() {
137
        $scope.$broadcast('show-errors-check-validity');
138
 
139
        if (!$scope.processoForm.$invalid) {
140
            alert('User saved');
141
            //$scope.reset();
142
        }
143
        else
144
        {
145
            alert("Existem erros no form");
146
        }
147
    };
148
    $scope.reset = function() {
149
        $scope.$broadcast('show-errors-reset');
150
        $scope.user = { name: '', email: '' };
151
    }
152
    /** Fim de Funções que interagem com directiva reutilizavel **/
153
 
154
 
1781 jmachado 155
    $scope.process = <%=process.toJson()%>;
1670 jmachado 156
 
1781 jmachado 157
    $scope.removeTask = function (poolId,taskId,$index)
158
    {
159
        $scope.callSimpleService("removeTask",{"poolId":poolId,"taskId":taskId},function()
160
        {
161
            var pool = $filter('filter')($scope.process.actorPools, {id: poolId })[0];
162
            pool.flowComponents.splice($index,1);
163
        });
1670 jmachado 164
    }
165
 
1781 jmachado 166
    $scope.setDirty = function(obj)
167
    {
168
        obj.dirty = "true";
169
        $scope.autoSavesObjects.push(obj);
1670 jmachado 170
    }
171
 
1781 jmachado 172
 
173
 
1670 jmachado 174
    $scope.newActorPool = function()
175
    {
1781 jmachado 176
        $scope.callService("addActorPool",{"processId":$scope.process.id},function(actorPool)
177
        {
178
            if($scope.process.actorPools == null)
179
                $scope.process.actorPools = [];
180
            $scope.process.actorPools.push(actorPool);
181
            $scope.$apply();
182
            invokeChosenSelects("#bpmnPools");
183
        });
1670 jmachado 184
    }
185
 
1781 jmachado 186
    $scope.addTaskActor = function(pool)
187
    {
188
        $scope.callService("addTaskActor",{"poolId":pool.id},function(taskActor)
189
        {
190
            if(pool.flowComponents == null)
191
                pool.flowComponents = [];
192
            pool.flowComponents.push(taskActor);
193
            $scope.$apply();
194
            //invokeChosenSelects("#bpmnPools");
195
        });
196
    }
197
 
1670 jmachado 198
    $scope.newRoleForPool = function(item)
199
    {
200
        $scope.idTemp--;
1781 jmachado 201
        if(item.roles == null)
202
        {
203
            item.roles = [];
204
        }
1670 jmachado 205
        item.roles.push(
206
                {
207
                    "role" : "",
208
                    "trans" : ""
209
                }
210
        );
211
        //O chosen está off para que na primeira interação nao actue sobre
212
        //o option padrão que está sempre presente para preenchimento pelo Angular
213
        setTimeout(function() { invokeChosenSelects("#bpmnPools"); }, 100);
214
    }
215
 
216
});
217
/**
218
 Directiva showErrors reutilizavel para validação de forms groups
219
 Basta que um campo no form tenha a classe form-control*
220
 
221
 em cada campo onde quisermos validação é necessario colocar show-errors no container
222
 e dar um nome unico ao input a validar e também a directiva required
223
 
224
 é necessario dar o nome processoForm neste caso para o save atuar sobre a verificacao de validade da form
225
 é necessario definir a class .has-error .chosen-container com #a94442 e !important para se sobrebor nos selects do chosen
226
 */
227
 
228
processEditorModule.directive('showErrors', function($timeout) {
229
    return {
230
        restrict: 'A',
231
        require:  '^form',
232
        link: function (scope, el, attrs, formCtrl)
233
        {
234
            scope.initOk = function(scope, el, attrs, formCtrl) {
235
 
236
                var inputEl   = el[0].querySelector("[name]");
237
                var inputNgEl = angular.element(inputEl);
238
 
239
                var inputName = inputNgEl.attr('name');
240
 
241
                var blurred = false;
242
                // only apply the has-error class after the user leaves the text box
243
                inputNgEl.bind('blur', function() {
244
                    blurred = true;
245
                    el.toggleClass('has-error', formCtrl[inputName].$invalid);
246
                });
247
 
248
                scope.$watch(function() {
249
                            return formCtrl[inputName].$invalid
250
                        },
251
                        function(invalid) {
252
                            // we only want to toggle the has-error class after the blur
253
                            // event or if the control becomes valid
254
                            if (!blurred && invalid) { return }
255
                            el.toggleClass('has-error', invalid);
256
 
257
                        });
258
 
259
 
260
                scope.$on('show-errors-check-validity', function() {
261
                    el.toggleClass('has-error', formCtrl[inputName].$invalid);
262
                });
263
 
264
                scope.$on('show-errors-reset', function() {
265
                    $timeout(function() {
266
                        el.removeClass('has-error');
267
                    }, 0, false);
268
                });
269
            }
270
            scope.initClean = function(scope, el, attrs, formCtrl) {
271
 
272
 
273
                var inputEl   = el[0].querySelector("[name]");
274
                var inputNgEl = angular.element(inputEl);
275
 
276
                //scope.$watch("processoForm", function( newValue, oldValue ) {
277
                if ( inputNgEl.attr('name').indexOf("{")>=0 ) {
278
                    console.log( "Sujo..." + inputNgEl.attr('name'));
279
                    $timeout(function() {
280
                                scope.initClean(scope, el, attrs, formCtrl);
281
                            }
282
                            , 100);
283
                    return;
284
                }
285
                else{
286
                    console.log("LIMPO..." + inputNgEl.attr('name'));
287
                    scope.initOk(scope, el, attrs, formCtrl);
288
                }
289
                //});
290
            };
291
 
292
            scope.initClean(scope, el, attrs, formCtrl);
293
        }
294
    }
295
});
296
 
297
</script>
298
 
1775 jmachado 299
<!--TODO TIRAR DAQUI-->
300
<select ng-model="jsp" class="chosenOff angularChosen" ng-options="o for o in jsps"></select>
301
 
1781 jmachado 302
 
1670 jmachado 303
<form class="row" name="processoForm">
304
    <button type="submit" ng-click="save()">Teste</button>
305
    <div class="col-md-9 form-horizontal">
306
 
307
        <div class="panel panel-primary">
308
            <div class="panel-heading">
309
                Identificação do Processo
310
            </div>
311
            <div class="panel-body">
312
                <div class="form-group">
313
                    <label class="col-md-2 control-label">Classe:</label>
314
                    <div class="col-md-10">
315
                        <select  name="process.class" ng-model="process.class" class="chosenOff form-control">
316
                            <option value="BpmnProcessImpl" ng-selected="{{process.class == 'BpmnProcessImpl'}}">Processo Genérico</option>
317
                            <option value="BpmnProcessControloAtividadeDocenteImpl" ng-selected="{{process.class == 'BpmnProcessControloAtividadeDocenteImpl'}}">Controlo de Atividade Docente</option>
318
                        </select>
319
                    </div>
320
                </div>
321
                <div class="form-group" show-errors>
322
                    <label class="col-md-2 control-label">Nome:</label>
323
                    <div class="col-md-10"><input name="process.name" required class="form-control" ng-model="process.name"></div>
324
                </div>
325
                <div class="form-group" show-errors>
326
                    <label class="col-md-2 control-label">Description:</label>
327
                    <div class="col-md-10"><textarea name="process.description" required rows="5" class="form-control" ng-model="process.description"></textarea></div>
328
                </div>
329
 
330
                <div id="controloAtividadeDocente" ng-if="process.class == 'BpmnProcessControloAtividadeDocenteImpl'">
331
                    <div class="well well-sm">
332
                        Controlo de Atividade Docente
333
                        <a class="pull-right btn btn-success btn-xs" data-nodrag ng-click="newAtividadePontuada()" style="margin-right: 8px;">
334
                            <span class="glyphicon glyphicon-plus"></span></a>
335
                    </div>
336
                    <table class="table">
337
                        <thead>
338
                        <tr>
339
                            <th>Chave ID</th>
340
                            <th style="width: 50%">Papel Validador</th>
341
                            <th>Pontos</th>
342
                            <th>Tipo de Atividade</th>
343
                        </tr>
344
                        </thead>
345
                        <tbody>
346
                        <tr ng-repeat="a in process.esquemaPontos.atividades">
347
                            <td show-errors><input name="process.esquemaPontos.atividades[{{$index}}].tipoAtividadeChave" required type="text" class="form-control" ng-model="a.tipoAtividadeChave"></td>
348
                            <td show-errors>
349
                                <select name="process.esquemaPontos.atividades[{{$index}}].papelValidador" required class="chosenOff form-control" ng-model="a.papelValidador" class="form-control">
350
                                    <%
351
                                        for(String role: UserRoleProxy.getUserRoles())
352
                                        {
353
                                            request.setAttribute("role",role);
354
                                    %>
355
                                    <option value="${role}" ng-selected="{{a.papelValidador == '${role}'}}"><bean:message key="user.role.${role}"/></option>
356
                                    <%
357
                                        }
358
                                    %>
359
                                </select>
360
                            </td>
361
                            <td show-errors><input name="process.esquemaPontos.atividades[{{$index}}].pontos" required type="text" class="form-control" ng-model="a.pontos"></td>
362
                            <td show-errors><input name="process.esquemaPontos.atividades[{{$index}}].tipoAtividadeNome" required type="text" class="form-control" ng-model="a.tipoAtividadeNome"></td>
363
                        </tr>
364
                        </tbody>
365
                    </table>
366
                </div>
367
            </div>
368
        </div>
369
 
370
        <div class="panel panel-info panel-block" id="bpmnPools">
371
            <div class="panel-heading clearfix">
372
                <span class="glyphicon glyphicon-users"></span>
373
                Pools de Atores
374
                <button class="btn btn-xs btn-success pull-right" type="button" ng-click="newActorPool()"><span class="glyphicon glyphicon-plus"></span></button>
375
            </div>
376
 
377
            <div ng-repeat="a in process.actorPools" class="panel-body gutter-0">
1781 jmachado 378
                <div class="panel panel-default">
379
                    <div class="panel-heading clearfix">
380
                        <a class="pull-right btn btn-default btn-xs bpmnTask" data-nodrag ng-click="addTaskActor(a)" style="margin-right: 8px;">
381
                            <span class="bpmn-icon-task"></span></a>
382
                        <a class="pull-right btn btn-default btn-xs bpmnGateway" data-nodrag ng-click="newFlowComponent('bpmnGateway')" style="margin-right: 8px;">
383
                            <span class="bpmn-icon-gateway-none"></span></a>
384
                        <a class="pull-right btn btn-default btn-xs bpmnEndEvent" data-nodrag ng-click="newFlowComponent('bpmnEndEvent')" style="margin-right: 8px;">
385
                            <span class="bpmn-icon-end-event-none"></span></a>
386
                    </div>
387
                    <div class="panel-body">
388
                        <div class="col-md-1">
389
                            <span class="glyphicon glyphicon-user"></span>
1670 jmachado 390
                        </div>
1781 jmachado 391
                        <div class="col-md-5">
392
                            <input placeholder="Coloque aqui o nome do ator" class="form-control" ng-model="a.name">
393
                        </div>
394
                        <div class="col-md-1">
395
                            <button class="btn btn-xs btn-success pull-right" type="button" ng-click="newRoleForPool(a)"><span class="glyphicon glyphicon-plus"></span>Papel</button>
396
                        </div>
397
                        <div class="col-md-4">
398
                            <label ng-if="a.roles.length == 0">Não obrigatórios</label>
399
                            <div ng-repeat="r in a.roles" class="gutter-0">
400
                                <div class="col-md-2">
401
                                    <a class="btn btn-danger btn-xs" data-nodrag ng-click="a.roles.splice($index, 1)"><span
402
                                            class="glyphicon glyphicon-remove"></span></a>
403
                                </div>
404
                                <div class="col-md-10">
1670 jmachado 405
 
1781 jmachado 406
                                    <select class="chosenOff" ng-model="r.role" class="form-control">
407
                                        <%
408
                                            for(String role: UserRoleProxy.getUserRoles())
409
                                            {
410
                                                request.setAttribute("role",role);
411
                                        %>
412
                                        <option value="${role}" ng-selected="{{r.role == '${role}'}}"><bean:message key="user.role.${role}"/></option>
413
                                        <%
414
                                            }
415
                                        %>
416
                                    </select>
417
                                </div>
418
 
419
                            </div>
1670 jmachado 420
                        </div>
1781 jmachado 421
                        <div class="col-md-1">
422
                            <a class="pull-right btn btn-danger btn-xs" data-nodrag ng-click="process.actorPools.splice($index, 1)"><span
423
                                    class="glyphicon glyphicon-remove"></span></a>
424
                        </div>
425
                    </div>
426
                    <div class="panel-body">
427
                        <div ui-tree="treeOptions" id="page-content-root">
428
                            <div class="form-group">
429
                                <label class="control-label"> Pesquisar:</label>
430
                                <div class="col-md-4">
431
                                    <input class="form-control" ng-model="a.searchText">
432
                                </div>
433
                            </div>
1670 jmachado 434
 
1781 jmachado 435
                            <ol ui-tree-nodes ng-model="a.flowComponents">
436
                                <li   ng-repeat="node in a.flowComponents | filter:a.searchText" ui-tree-node ng-include="'flowComponent_renderer.html'" ng-init="pool=a"></li>
437
                            </ol>
438
                        </div>
1670 jmachado 439
                    </div>
440
                </div>
1781 jmachado 441
 
1670 jmachado 442
            </div>
443
 
444
        </div>
445
 
446
 
447
 
448
 
1781 jmachado 449
 
1670 jmachado 450
    </div>
451
 
452
    <div style="background-color: #fff2c3" class="col-md-3">
453
        <h2>Debug</h2>
454
        <pre class="code">{{ process | json }}</pre>
1775 jmachado 455
 
1670 jmachado 456
    </div>
457
</form>
458
 
459
 
460
 
461
 
462
 
463
 
464
<script type="text/ng-template" id="flowComponent_renderer.html">
465
    <!-- Coloquei aqui o predicado no NGClass que quando existe uma property nodrop = true o angular coloca nodrop na class o que faz o elemento ficar a vermelho e nao permite drop-->
1781 jmachado 466
    <div   class="panel panel-default panel-block tree-node tree-node-content nodrop"  ng-class="{bpmnActorTask: node['@class'] == 'pt.estgp.estgweb.domain.BpmnFlowComponentTaskActorImpl',dirty: node.dirty=='true',nodrop: node.nodrop, nodrag: node.nodrag, moved: node.moved}">
1670 jmachado 467
        <div class="panel-heading clearfix" ng-class="node.type">
468
            <div class="row gutter-0">
469
                <div class="col-md-1">
470
                    <i class="glyphicon glyphicon-resize-vertical" ui-tree-handle></i>
471
                </div>
472
                <div class="col-md-2">
1781 jmachado 473
                    <span ng-if="node['@class'] == 'pt.estgp.estgweb.domain.BpmnFlowComponentTaskActorImpl'" class="bpmn-icon-task"></span>
1670 jmachado 474
                    <span ng-if="node.type == 'bpmnGateway'" class="bpmn-icon-gateway-none"></span>
475
                    <span ng-if="node.type == 'bpmnEndEvent'" class="bpmn-icon-end-event-none"></span>
476
 
1781 jmachado 477
                    <label ng-if="node['@class'] == 'pt.estgp.estgweb.domain.BpmnFlowComponentTaskActorImpl'" class="control-label">Tarefa Actor</label>
1670 jmachado 478
                    <label ng-if="node.type == 'bpmnGateway'" class="control-label">Gateway</label>
479
                    <label ng-if="node.type == 'bpmnEndEvent'" class="control-label">EventoFim</label>
480
                </div>
481
                <div class="col-md-8 no-drag" data-nodrag>
1781 jmachado 482
                    <input ng-keyup="setDirty(node)" data-nodrag class="form-control" ng-model="node.name">
1670 jmachado 483
                </div>
484
                <div class="col-md-1">
1781 jmachado 485
 
486
                    <bacoTags:confirm  msg="Tem a certeza que deseja remover a atividade {{node.name}}" targetFunction="angular.element($('#processEditorModule')).scope().removeTask({{pool.id}},{{node.id}},{{$index}});angular.element($('#processEditorModule')).scope().$apply();" btnClass="btn btn-danger btn-xs pull-right" icon="glyphicon glyphicon-remove"/>
487
 
1670 jmachado 488
                </div>
489
            </div>
490
        </div>
491
        <div class="panel-body">
492
 
493
            <div class="form-group">
494
                <div class="col-md-2">
495
                    <span class="glyphicon glyphicon-user"></span> Actor Pool
496
                </div>
497
                <div class="col-md-10">
1781 jmachado 498
                    <select ng-change="setDirty(node)" class="chosenOff form-control" ng-model="node.actorPool" class="form-control">
1670 jmachado 499
                        <option ng-repeat="a in process.actorPools" value="{{a.dbId}}" ng-selected="{{a.dbId == node.actorPool}}">{{a.name}}</option>
500
                    </select>
501
                </div>
502
            </div>
503
        </div>
504
        <div class="panel-footer clearfix">
505
            <a class="btn btn-success btn-xs" ng-if="node.flowConnectors && node.flowConnectors.length > 0" data-nodrag ng-click="toggle(this)">
506
                <span class="glyphicon" ng-class="{'glyphicon-chevron-right': collapsed,'glyphicon-chevron-down': !collapsed}"></span>
507
            </a>
508
 
509
            <a class="pull-right btn btn-default btn-xs" data-nodrag ng-click="newFlowConnector(node)" style="margin-right: 8px;"><span
510
                    class="bpmn-icon-connection"></span></a>
511
 
512
        </div>
513
    </div>
514
 
515
    <ol ui-tree-nodes="" data-nodrop-enabled="true" ng-model="node.flowConnectors" ng-class="{hidden: collapsed}">
516
        <li ng-repeat="node in node.flowConnectors" ui-tree-node ng-include="'connector_renderer.html'">
517
        </li>
518
    </ol>
519
</script>
520
 
521
 
522
<script type="text/ng-template" id="connector_renderer.html">
523
    <!-- Coloquei aqui o predicado no NGClass que quando existe uma property nodrop = true o angular coloca nodrop na class o que faz o elemento ficar a vermelho e nao permite drop-->
524
 
525
 
526
    <div class="panel panel-default panel-block tree-node tree-node-content bpmnConnector" ui-tree-handle data-nodrag ng-class="{nodrop: node.nodrop, nodrag: node.nodrag, moved: node.moved}">
527
        <div class="panel-heading clearfix" ng-class="node.type">
528
            <div class="row gutter-0">
529
                <div class="col-md-2">
530
                    <span class="bpmn-icon-connection control-label"></span> Conector
531
                </div>
532
                <div class="col-md-9">
533
                    <input data-nodrag class="form-control" ng-model="node.name">
534
                </div>
535
                <div class="col-md-1">
536
                    <a class="pull-right btn btn-danger btn-xs" data-nodrag ng-click="remove(this)"><span
537
                            class="glyphicon glyphicon-remove"></span></a>
538
                </div>
539
            </div>
540
        </div>
541
        <div class="panel-body">
542
            <div class="form-group">
543
                <div class="col-md-2">
544
                    <span class="glyphicon glyphicon-arrow-right"></span> Ligação
545
                </div>
546
                <div class="col-md-10">
547
                    <select data-nodrag class="form-control" ng-model="node.targetComponent">
548
                        <option ng-repeat="f in process.flowComponents" value="{{f.dbId}}">{{f.name}}</option>
549
                    </select>
550
                </div>
551
            </div>
552
            <div class="form-group">
553
                <div class="col-md-2">
554
                    <span class="glyphicon glyphicon-tag"></span> Chave
555
                </div>
556
                <div class="col-md-10">
557
                    <input type="text" data-nodrag class="form-control" ng-model="node.key">
558
                </div>
559
            </div>
560
            <div class="form-group">
561
                <div class="col-md-2">
562
                    <span class="glyphicon glyphicon-envelope"></span> Enviar Emails
563
                </div>
564
                <div class="col-md-2">
565
                    <select data-nodrag class="form-control" ng-model="node.sendEmail">
566
                        <option value="true" ng-selected="{{node.sendEmail == true}}">Sim</option>
567
                        <option value="false" ng-selected="{{node.sendEmail == false}}">Não</option>
568
                    </select>
569
                </div>
570
            </div>
571
            <div class="form-group" ng-show="node.sendEmail">
572
                <div class="col-md-2">
573
                    Mensagem
574
                </div>
575
                <div class="col-md-10">
576
                    <textarea rows="3" class="form-control" ng-model="node.emailMsg"></textarea>
577
                </div>
578
            </div>
579
        </div>
580
    </div>
581
 
582
 
583
 
584
</script>
585
 
586
 
587
 
588
<!--Estilos CSS do Exemplo do Overview Nem olhei para eles copy paste e pronto-->
589
<style>
590
 
591
    .panel-block .panel-heading, .panel-block .panel-footer
592
    {
593
        padding:5px;
594
    }
595
 
596
    /* remove */
597
    .gutter-0.row {
598
        margin-right: -0px !important;
599
        margin-left: -0px !important;
600
    }
601
    .gutter-0 > [class*="col-"]{
602
        padding-right: 0px !important;
603
        padding-left: 0px !important;
604
    }
605
 
606
    /* customize */
607
    .gutter-6.row {
608
        margin-right: -3px !important;
609
        margin-left: -3px !important;
610
    }
611
    .gutter-6 > [class*="col-"] {
612
        padding-right: 3px !important;
613
        padding-left: 3px !important;
614
    }
615
 
616
 
617
 
618
 
1781 jmachado 619
    .bpmnActorTask { background-color: #fff2c3 !important;border-color: #c69763 !important }
1670 jmachado 620
    .bpmnTask { background-color: #fff2c3 !important;border-color: #c69763 !important }
621
    .bpmnStartEvent { background-color: #EEF1CA !important; border-color: #A5CF84 !important }
622
    .bpmnMiddleEvent { background-color: #A7BBCF !important ;border-color: #4F87B0 !important}
623
    .bpmnEndEvent { background-color: #FDE6E2 !important; border-color: #8C121D; !important }
624
    .bpmnGateway { background-color: #ffcf53 !important; border-color: #ffa42a !important}
625
    .bpmnFase { background-color: #ECECF4 !important; border-color: #276E9F !important}
626
    .bpmnConnector { background-color: white !important; ;border-color: #b7bdbb !important }
627
 
628
    .btn {
629
        margin-right: 8px;
630
    }
631
 
632
 
633
    .angular-ui-tree-handle {
634
        background: #f8faff;
635
        border: 1px solid #dae2ea;
636
        color: #7c9eb2;
637
        padding: 0;
638
    }
639
 
640
    .angular-ui-tree-handle:hover {
641
        color: #438eb9;
642
        background: #f4f6f7;
643
        border-color: #dce2e8;
644
    }
645
 
646
    .angular-ui-tree-placeholder {
647
        background: #f0f9ff;
648
        border: 2px dashed #bed2db;
649
        -webkit-box-sizing: border-box;
650
        -moz-box-sizing: border-box;
651
        box-sizing: border-box;
652
    }
653
 
654
    tr.angular-ui-tree-empty {
655
        height:100px
656
    }
657
 
658
    .group-title {
659
        background-color: #687074 !important;
660
        color: #FFF !important;
661
    }
662
 
663
 
664
    /* --- Tree --- */
665
    .tree-node {
666
        border: 1px solid #dae2ea;
667
        background: #f8faff;
668
        color: #7c9eb2;
669
    }
670
 
671
    .nodrop {
672
        background-color: #f2dede;
673
    }
674
 
675
 
676
    .nodrag {
677
        background-color: #f2eec1;
678
    }
679
 
680
    .tree-node-content {
681
        margin: 10px;
682
    }
683
    .tree-handle {
684
        /*padding: 10px;*/
685
        background: #428bca;
686
        color: #FFF;
687
        margin-right: 15px;
688
    }
689
 
690
    .angular-ui-tree-handle:hover {
691
    }
692
 
693
    .angular-ui-tree-placeholder {
694
        background: #f0f9ff;
695
        border: 2px dashed #bed2db;
696
        -webkit-box-sizing: border-box;
697
        -moz-box-sizing: border-box;
698
        box-sizing: border-box;
699
    }
700
 
701
    /*Estilo adicionado por mim para os movidos*/
702
    .moved
703
    {
704
        border: 2px solid blue !important;
705
    }
706
</style>
707
</div>
708
 
1781 jmachado 709
<%
710
    AbstractDao.getCurrentSession().getTransaction().commit();
711
%>
712