Fix the activiti processes using the appId

This commit is contained in:
mauriziovitale84 2016-09-15 11:15:37 +01:00
parent 0b4cd4b257
commit e86b7dec84
5 changed files with 219 additions and 47 deletions

View File

@ -15,10 +15,10 @@
* limitations under the License.
*/
import { Component, Output, EventEmitter, OnInit, Input } from '@angular/core';
import { Component, Output, EventEmitter, OnInit, Input, OnChanges, SimpleChanges } from '@angular/core';
import { AlfrescoTranslationService, AlfrescoAuthenticationService, AlfrescoPipeTranslate } from 'ng2-alfresco-core';
import { ActivitiProcessService } from './../services/activiti-process.service';
import { FilterModel } from '../models/filter.model';
import { FilterRepresentationModel } from '../models/filter.model';
import { Observer } from 'rxjs/Observer';
import { Observable } from 'rxjs/Observable';
@ -34,10 +34,10 @@ declare let __moduleName: string;
pipes: [AlfrescoPipeTranslate]
})
export class ActivitiProcessFilters implements OnInit {
export class ActivitiProcessFilters implements OnInit, OnChanges {
@Output()
filterClick: EventEmitter<FilterModel> = new EventEmitter<FilterModel>();
filterClick: EventEmitter<FilterRepresentationModel> = new EventEmitter<FilterRepresentationModel>();
@Output()
onSuccess: EventEmitter<any> = new EventEmitter<any>();
@ -51,12 +51,12 @@ export class ActivitiProcessFilters implements OnInit {
@Input()
appName: string;
private filterObserver: Observer<FilterModel>;
filter$: Observable<FilterModel>;
private filterObserver: Observer<FilterRepresentationModel>;
filter$: Observable<FilterRepresentationModel>;
currentFilter: FilterModel;
currentFilter: FilterRepresentationModel;
filters: FilterModel [] = [];
filters: FilterRepresentationModel [] = [];
/**
* Constructor
@ -67,7 +67,7 @@ export class ActivitiProcessFilters implements OnInit {
constructor(private auth: AlfrescoAuthenticationService,
private translate: AlfrescoTranslationService,
public activiti: ActivitiProcessService) {
this.filter$ = new Observable<FilterModel>(observer => this.filterObserver = observer).share();
this.filter$ = new Observable<FilterRepresentationModel>(observer => this.filterObserver = observer).share();
if (translate) {
translate.addTranslationFolder('node_modules/ng2-activiti-processlist/src');
@ -75,18 +75,27 @@ export class ActivitiProcessFilters implements OnInit {
}
ngOnInit() {
this.filter$.subscribe((filter: FilterModel) => {
this.filter$.subscribe((filter: FilterRepresentationModel) => {
this.filters.push(filter);
});
this.load();
}
ngOnChanges(changes: SimpleChanges) {
let appId = changes['appId'];
if (appId && appId.currentValue) {
this.load();
return;
}
}
/**
* The method call the adapter data table component for render the task list
* @param tasks
*/
private load() {
this.resetFilter();
if (this.appName) {
this.filterByAppName();
} else {
@ -96,7 +105,7 @@ export class ActivitiProcessFilters implements OnInit {
private filterByAppId(appId) {
this.activiti.getProcessFilters(appId).subscribe(
(res: FilterModel[]) => {
(res: FilterRepresentationModel[]) => {
res.forEach((filter) => {
this.filterObserver.next(filter);
});
@ -124,8 +133,16 @@ export class ActivitiProcessFilters implements OnInit {
* Pass the selected filter as next
* @param filter
*/
public selectFilter(filter: FilterModel) {
public selectFilter(filter: FilterRepresentationModel) {
this.currentFilter = filter;
this.filterClick.emit(filter);
}
/**
* Reset the filters properties
*/
private resetFilter() {
this.filters = [];
this.currentFilter = null;
}
}

View File

@ -15,7 +15,7 @@
* limitations under the License.
*/
import { Component, Input, ViewChild, Output, EventEmitter } from '@angular/core';
import { Component, Input, ViewChild, Output, EventEmitter, OnInit, OnChanges, SimpleChanges } from '@angular/core';
import { AlfrescoTranslationService, AlfrescoAuthenticationService, AlfrescoPipeTranslate } from 'ng2-alfresco-core';
import { ActivitiProcessService } from './../services/activiti-process.service';
import { ActivitiProcessInstanceHeader } from './activiti-process-instance-header.component';
@ -37,7 +37,7 @@ declare let __moduleName: string;
pipes: [AlfrescoPipeTranslate]
})
export class ActivitiProcessInstanceDetails {
export class ActivitiProcessInstanceDetails implements OnInit, OnChanges {
@Input()
processInstanceId: string;
@ -80,6 +80,31 @@ export class ActivitiProcessInstanceDetails {
}
}
ngOnInit() {
if (this.processInstanceId) {
this.load(this.processInstanceId);
}
}
ngOnChanges(changes: SimpleChanges) {
let processInstanceId = changes['processInstanceId'];
if (processInstanceId && !processInstanceId.currentValue) {
this.reset();
return;
}
if (processInstanceId && processInstanceId.currentValue) {
this.load(processInstanceId.currentValue);
return;
}
}
/**
* Reset the task detail to undefined
*/
reset() {
this.processInstanceDetails = null;
}
load(processId: string) {
if (processId) {
this.activitiProcess.getProcess(processId).subscribe(

View File

@ -15,11 +15,11 @@
* limitations under the License.
*/
import {Component, OnInit, Input, Output, EventEmitter } from '@angular/core';
import {Component, OnInit, Input, Output, EventEmitter, OnChanges, SimpleChanges } from '@angular/core';
import { AlfrescoPipeTranslate, AlfrescoTranslationService, CONTEXT_MENU_DIRECTIVES, CONTEXT_MENU_PROVIDERS } from 'ng2-alfresco-core';
import { ALFRESCO_DATATABLE_DIRECTIVES, ObjectDataTableAdapter, DataRowEvent } from 'ng2-alfresco-datatable';
import { ActivitiProcessService } from '../services/activiti-process.service';
import { FilterModel } from '../models/filter.model';
import { UserProcessInstanceFilterRepresentationModel, TaskQueryRequestRepresentationModel } from '../models/filter.model';
declare let __moduleName: string;
@ -38,14 +38,14 @@ declare let __moduleName: string;
pipes: [ AlfrescoPipeTranslate ],
providers: [ CONTEXT_MENU_PROVIDERS, ActivitiProcessService ]
})
export class ActivitiProcessInstanceListComponent implements OnInit {
export class ActivitiProcessInstanceListComponent implements OnInit, OnChanges {
errorMessage: string;
data: ObjectDataTableAdapter;
currentProcessInstanceId: string;
@Input()
filter: FilterModel;
filter: UserProcessInstanceFilterRepresentationModel;
@Input()
schemaColumn: any[] = [
@ -76,15 +76,26 @@ export class ActivitiProcessInstanceListComponent implements OnInit {
this.schemaColumn
);
if (this.filter) {
this.load(this.filter);
let requestNode = this.convertProcessInstanceToTaskQuery(this.filter);
this.load(requestNode);
}
}
load(filter: FilterModel) {
this.processService.getProcessInstances(filter)
ngOnChanges(changes: SimpleChanges) {
let filter = changes['filter'];
if (filter && filter.currentValue) {
let requestNode = this.convertProcessInstanceToTaskQuery(filter.currentValue);
this.load(requestNode);
return;
}
}
load(requestNode: TaskQueryRequestRepresentationModel) {
this.processService.getProcessInstances(requestNode)
.subscribe(
(processInstances) => {
this.renderProcessInstances(processInstances);
this.selectFirstProcess();
this.onSuccess.emit(processInstances);
},
error => {
@ -93,10 +104,6 @@ export class ActivitiProcessInstanceListComponent implements OnInit {
});
}
reload() {
this.load(this.filter);
}
/**
* Render the process list
*
@ -110,6 +117,25 @@ export class ActivitiProcessInstanceListComponent implements OnInit {
);
}
/**
* Select the first process of a process list if present
*/
private selectFirstProcess() {
if (!this.isListEmpty()) {
this.currentProcessInstanceId = this.data.getRows()[0].getValue('id');
} else {
this.currentProcessInstanceId = null;
}
}
/**
* Return the current process
* @returns {string}
*/
getCurrentProcessId(): string {
return this.currentProcessInstanceId;
}
/**
* Check if the list is empty
* @returns {ObjectDataTableAdapter|boolean}
@ -144,4 +170,13 @@ export class ActivitiProcessInstanceListComponent implements OnInit {
});
return tasks;
}
private convertProcessInstanceToTaskQuery(processFilter: UserProcessInstanceFilterRepresentationModel) {
let requestNode = {appDefinitionId: processFilter.appId,
processDefinitionKey: processFilter.filter.processDefinitionKey,
text: processFilter.filter.name,
state: processFilter.filter.state,
sort: processFilter.filter.sort};
return new TaskQueryRequestRepresentationModel(requestNode);
}
}

View File

@ -15,26 +15,58 @@
* limitations under the License.
*/
/**
*
* This object represent the app definition.
*
*
* @returns {AppDefinitionRepresentationModel} .
*/
export class AppDefinitionRepresentationModel {
defaultAppId: string;
deploymentId: string;
name: string;
description: string;
theme: string;
id: number;
modelId: number;
tenantId: number;
constructor(obj?: any) {
this.defaultAppId = obj && obj.defaultAppId || null;
this.deploymentId = obj && obj.deploymentId || false;
this.name = obj && obj.name || null;
this.description = obj && obj.description || null;
this.theme = obj && obj.theme || null;
this.id = obj && obj.id;
this.modelId = obj && obj.modelId;
this.tenantId = obj && obj.tenantId;
}
}
/**
*
* This object represent the filter.
*
*
* @returns {FilterModel} .
* @returns {FilterRepresentationModel} .
*/
export class FilterModel {
export class FilterRepresentationModel {
id: number;
appId: string;
name: string;
recent: boolean = false;
recent: boolean;
icon: string;
filter: FilterParamsModel;
appId: number;
filter: FilterParamRepresentationModel;
index: number;
constructor(name: string, recent: boolean, icon: string, query: string, state: string, assignment: string, appDefinitionId?: string) {
this.name = name;
this.recent = recent;
this.icon = icon;
this.filter = new FilterParamsModel(query, state, assignment, appDefinitionId);
constructor(obj?: any) {
this.appId = obj && obj.appId || null;
this.name = obj && obj.name || null;
this.recent = obj && obj.recent || false;
this.icon = obj && obj.icon || null;
this.filter = new FilterParamRepresentationModel(obj.filter);
this.index = obj && obj.index;
}
}
@ -43,18 +75,81 @@ export class FilterModel {
* This object represent the parameters of a filter.
*
*
* @returns {FilterModel} .
* @returns {FilterParamRepresentationModel} .
*/
export class FilterParamsModel {
export class FilterParamRepresentationModel {
processDefinitionId: string;
processDefinitionKey: string;
name: string;
sort: string;
state: string;
appDefinitionId: string;
sort: string;
constructor(query: string, sort: string, state: string, appDefinitionId?: string) {
this.name = query;
this.sort = sort;
this.state = state;
this.appDefinitionId = appDefinitionId;
constructor(obj?: any) {
this.processDefinitionId = obj && obj.processDefinitionId || null;
this.processDefinitionKey = obj && obj.processDefinitionKey || null;
this.name = obj && obj.name || null;
this.state = obj && obj.state || null;
this.sort = obj && obj.sort || null;
}
}
export class UserProcessInstanceFilterRepresentationModel extends FilterRepresentationModel {
public filter: ProcessInstanceFilterRepresentation;
constructor(obj?: any) {
super(obj);
this.filter = new ProcessInstanceFilterRepresentation(obj.filter);
}
}
export class ProcessInstanceFilterRepresentation extends FilterParamRepresentationModel {
constructor(obj?: any) {
super(obj);
}
}
export class UserTaskFilterRepresentationModel extends FilterRepresentationModel {
public filter: TaskFilterRepresentationModel;
constructor(obj?: any) {
super(obj);
this.filter = new TaskFilterRepresentationModel(obj.filter);
}
}
export class TaskFilterRepresentationModel extends FilterParamRepresentationModel {
assignment: string;
dueAfter: Date;
dueBefore: Date;
constructor(obj?: any) {
super(obj);
this.assignment = obj && obj.assignment || null;
this.dueAfter = obj && obj.dueAfter || null;
this.dueBefore = obj && obj.dueBefore || null;
}
}
export class TaskQueryRequestRepresentationModel {
appDefinitionId: string;
processInstanceId: string;
processDefinitionId: string;
processDefinitionKey: string;
text: string;
assignment: string;
state: string;
sort: string;
page: number;
size: number;
constructor(obj?: any) {
this.appDefinitionId = obj && obj.appDefinitionId || null;
this.processInstanceId = obj && obj.processInstanceId || null;
this.processDefinitionId = obj && obj.processDefinitionId || null;
this.processDefinitionKey = obj && obj.processDefinitionKey || null;
this.text = obj && obj.text || null;
this.assignment = obj && obj.assignment || null;
this.state = obj && obj.state || null;
this.sort = obj && obj.sort || null;
this.page = obj && obj.page || 0;
this.size = obj && obj.size || 25;
}
}

View File

@ -17,7 +17,7 @@
import {AlfrescoAuthenticationService} from 'ng2-alfresco-core';
import {ProcessInstance} from '../models/process-instance';
import {FilterModel} from '../models/filter.model';
import {TaskQueryRequestRepresentationModel} from '../models/filter.model';
import {User} from '../models/user.model';
import {Comment} from '../models/comment.model';
import {Injectable} from '@angular/core';
@ -49,8 +49,8 @@ export class ActivitiProcessService {
.catch(this.handleError);
}
getProcessInstances(filter: FilterModel): Observable<ProcessInstance[]> {
return Observable.fromPromise(this.authService.getAlfrescoApi().activiti.processApi.getProcessInstances(filter))
getProcessInstances(requestNode: TaskQueryRequestRepresentationModel): Observable<ProcessInstance[]> {
return Observable.fromPromise(this.authService.getAlfrescoApi().activiti.processApi.getProcessInstances(requestNode))
.map(this.extractData)
.catch(this.handleError);
}