Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

BPMN redactor #83

Open
wants to merge 53 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
53 commits
Select commit Hold shift + click to select a range
6080cc2
Updates jointjs and requirejs config
anastasia143 Feb 23, 2017
fe9a6a8
Updates jointjs in editor-core
anastasia143 Feb 23, 2017
eba2774
Changes pathes in requirejs
anastasia143 Feb 24, 2017
1d4ed39
Adds bacbone path to jointjs d ts
anastasia143 Feb 24, 2017
393ff0a
Adds attrs description to jointObjectAttributes in DefaultDiagramNode.ts
anastasia143 Feb 24, 2017
b165697
Updates grunt and typescript in package.json
anastasia143 Feb 24, 2017
d97537b
Changes diagramElementView to elementView in DiagramScene.ts
anastasia143 Feb 24, 2017
adea85c
Adds PortsModelInterface to jointjs.d.ts
anastasia143 Feb 24, 2017
3f6098a
Adds empty ImageWithPorts to DefaultDiagramNode.ts
anastasia143 Feb 24, 2017
fc72909
Removes TextAttrs from Text constructor
anastasia143 Feb 24, 2017
ed60e55
Updates requirejs with new libs in []
anastasia143 Feb 26, 2017
d89b147
Adds backbone
anastasia143 Feb 26, 2017
e2ec1f4
Adds lodash
anastasia143 Feb 26, 2017
80ce591
Fix requirejs config.
TanVD Mar 1, 2017
92e0c07
Adds ports tp the ImageWithPorts
anastasia143 Mar 5, 2017
547335d
Merge branch 'create-modules' of https://github.com/qreal/wmp into cr…
anastasia143 Mar 12, 2017
462ae1d
Merge branch 'create-modules' into jointjs-update-merge
anastasia143 Mar 12, 2017
9058ba7
Update joint.css
TanVD Mar 13, 2017
b8a629b
Change notation file format
saimonsaret Mar 19, 2017
2a9ec0a
Merge branch 'master' into containers
saimonsaret Mar 19, 2017
082aeb3
Add embedding saving and loading
saimonsaret Mar 20, 2017
b00aae5
Prepare for auto-embedding
saimonsaret Mar 20, 2017
c4c957c
Merge branch 'jointjs-update-merge' of https://github.com/anastasia14…
saimonsaret Mar 21, 2017
4c88447
Implement correct saving/loading/undo-redo/linking for containers
saimonsaret Mar 23, 2017
86ee3a1
Diagram saving and drawing bugfix
saimonsaret Mar 26, 2017
02928de
Fix resize and remove debug code
saimonsaret Mar 28, 2017
8e5a62b
Add element constructor and lane elemnt (non-functional)
saimonsaret Apr 14, 2017
646cf9d
Fix selection bug
saimonsaret Apr 17, 2017
dd90645
Add border rendering for container elements
saimonsaret Apr 18, 2017
1bc444e
Add pool element prototype
saimonsaret Apr 18, 2017
9c49b78
Add lane swap for for pool element
saimonsaret Apr 19, 2017
eabcde2
Fix diagram saving
saimonsaret Apr 20, 2017
16ae6b5
Add gateways
saimonsaret Apr 20, 2017
726d16f
Fix lane move and resize
saimonsaret Apr 27, 2017
4ffab85
Add text task element and several other features
saimonsaret May 4, 2017
81020b4
Add pool and lane text elements
saimonsaret May 4, 2017
ab82ca3
Add link creation to element constructor
saimonsaret May 7, 2017
d2b56e2
Change images to .png
saimonsaret May 7, 2017
22ed420
Fix Firefox work
saimonsaret May 8, 2017
e0d5fc5
Add hierarchical pools
saimonsaret May 9, 2017
f5009cf
Change pool update algorithm
saimonsaret May 10, 2017
56234dd
Add change type property
saimonsaret May 14, 2017
7c5c419
Fix ES6 Map usage
saimonsaret May 15, 2017
2c727d8
Add visibility property to palette elements
saimonsaret May 15, 2017
a5d9334
Add escalation and cancel events
saimonsaret May 15, 2017
b7bcd3b
Fix treeview
saimonsaret May 15, 2017
815e803
Fix change type property subtypes names
saimonsaret May 15, 2017
24ec234
Add static node type property
saimonsaret May 16, 2017
d3908fd
Add all BPMN events
saimonsaret May 16, 2017
0fc2e58
Update editorCore interface
saimonsaret May 16, 2017
a02861e
Fix pool resize
saimonsaret May 22, 2017
7eec432
Fix undo-redo for pools
saimonsaret May 22, 2017
2a2cdcf
Finally fix pool undo-redo
saimonsaret May 23, 2017
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30,848 changes: 11,818 additions & 19,030 deletions dashboard-service/src/main/webapp/resources/js/joint.js

Large diffs are not rendered by default.

870 changes: 770 additions & 100 deletions dashboard-service/src/main/webapp/resources/types/jointjs/jointjs.d.ts

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,9 @@ public class DefaultDiagramNode implements Serializable {
@Column(name = "type")
private String type;

@Column(name = "parent_id")
private String parentId;

@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, orphanRemoval = true)
@JoinColumn(name = "node_id", referencedColumnName = "id")
private Set<Property> properties = new HashSet<>();
Expand All @@ -55,6 +58,10 @@ public DefaultDiagramNode(TDefaultDiagramNode tDefaultDiagramNode) {
type = tDefaultDiagramNode.getType();
}

if (tDefaultDiagramNode.isSetParentId()) {
parentId = tDefaultDiagramNode.getParentId();
}

if (tDefaultDiagramNode.isSetProperties()) {
properties = tDefaultDiagramNode.getProperties().stream().map(Property::new).
collect(Collectors.toSet());
Expand All @@ -81,6 +88,10 @@ public TDefaultDiagramNode toTDefaultDiagramNode() {
tDefaultDiagramNode.setType(type);
}

if (parentId != null) {
tDefaultDiagramNode.setParentId(parentId);
}

if (properties != null && !properties.isEmpty()) {
tDefaultDiagramNode.setProperties(properties.stream().map(Property::toTProperty).
collect(Collectors.toSet()));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,27 +13,32 @@ import {SceneController} from "./SceneController";
import {DiagramEditor} from "../model/DiagramEditor";
import {DiagramElementListener} from "./DiagramElementListener";
import {PaletteController} from "./PaletteController";
import {ElementConstructor} from "../model/ElementConstructor"
import {MapUtils} from "../../../utils/MapUtils";
import {DiagramScene} from "../model/DiagramScene";
export class DiagramEditorController {

protected diagramEditor: DiagramEditor;
protected sceneController: SceneController;
protected propertyEditorController: PropertyEditorController;
protected elementsTypeLoader: ElementsTypeLoader;
protected paletteController: PaletteController;
protected nodeTypesMap: Map<String, NodeType>;
protected linkPatternsMap: Map<String, joint.dia.Link>;
protected nodeTypesMap: Map<string, NodeType>;
protected linkPatternsMap: Map<string, joint.dia.Link>;
protected undoRedoController: UndoRedoController;
protected elementTypes: ElementTypes;
protected elementConstructor: ElementConstructor;

constructor($scope, $attrs) {
this.undoRedoController = new UndoRedoController();
this.nodeTypesMap = new Map<String, NodeType>();
this.linkPatternsMap = new Map<String, joint.dia.Link>();
this.nodeTypesMap = new Map<string, NodeType>();
this.linkPatternsMap = new Map<string, joint.dia.Link>();
this.paletteController = new PaletteController();
DiagramElementListener.getNodeType = (type: string): NodeType => {
return this.getNodeType(type);
};
this.diagramEditor = new DiagramEditor();
this.elementConstructor = new ElementConstructor(this);
this.sceneController = new SceneController(this, this.diagramEditor.getScene());
this.elementsTypeLoader = new ElementsTypeLoader();

Expand All @@ -56,12 +61,12 @@ export class DiagramEditorController {
return this.diagramEditor.getGraph();
}

public getNodesMap(): Map<String, DiagramNode> {
public getNodesMap(): Map<string, DiagramNode> {
var paper = this.diagramEditor.getScene();
return paper.getNodesMap();
}

public getLinksMap(): Map<String, Link> {
public getLinksMap(): Map<string, Link> {
var paper = this.diagramEditor.getScene();
return paper.getLinksMap();
}
Expand All @@ -75,11 +80,15 @@ export class DiagramEditorController {
}

public getNodeType(type: string): NodeType {
return this.nodeTypesMap[type];
return this.nodeTypesMap.get(type);
}

public getNodeProperties(type: string): Map<String, Property> {
return this.nodeTypesMap[type].getPropertiesMap();
public getNodeProperties(type: string): Map<string, Property> {
return this.nodeTypesMap.get(type).getPropertiesMap();
}

public getElementConstructor(): ElementConstructor {
return this.elementConstructor;
}

public getUndoRedoController(): UndoRedoController {
Expand All @@ -97,11 +106,11 @@ export class DiagramEditorController {
return new DiagramParts(this.getNodesMap(), this.getLinksMap());
}

public getNodeTypes(): Map<String, NodeType> {
public getNodeTypes(): Map<string, NodeType> {
return this.nodeTypesMap;
}

public getLinkPatterns(): Map<String, joint.dia.Link> {
public getLinkPatterns(): Map<string, joint.dia.Link> {
return this.linkPatternsMap;
}

Expand All @@ -111,19 +120,19 @@ export class DiagramEditorController {
scene.addLinksFromMap(diagramParts.linksMap);
}

public getScene(): DiagramScene {
return this.diagramEditor.getScene();
}

protected handleLoadedTypes(elementTypes: ElementTypes): void {
this.propertyEditorController = new PropertyEditorController(this.sceneController, this.undoRedoController);

this.elementTypes = elementTypes;

$.extend(this.linkPatternsMap, elementTypes.linkPatterns);
$.extend(this.nodeTypesMap, elementTypes.blockTypes.convertToMap(), elementTypes.flowTypes.convertToMap(),
elementTypes.uncategorisedTypes);
MapUtils.extend(this.linkPatternsMap, this.elementTypes.linkPatterns);
MapUtils.extend(this.nodeTypesMap, elementTypes.blockTypes.convertToMap(), elementTypes.flowTypes.convertToMap());

this.diagramEditor.getScene().setLinkPatterns(this.linkPatternsMap);
this.paletteController.appendBlocksPalette(elementTypes.blockTypes);
this.paletteController.appendFlowsPalette(elementTypes.flowTypes);
this.paletteController.initClick(this.diagramEditor.getScene());
this.paletteController.initDraggable();
this.paletteController.init(this.diagramEditor.getScene(), elementTypes, this.nodeTypesMap);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -30,16 +30,13 @@ export class DiagramElementListener {
}

var nodeType: NodeType = DiagramElementListener.getNodeType(this.paper.getCurrentLinkTypeName());
var typeProperties: Map<String, Property> = nodeType.getPropertiesMap();
var typeProperties: Map<string, Property> = nodeType.getPropertiesMap();

var nodeProperties: Map<String, Property> = new Map<String, Property>();
for (var property in typeProperties) {
nodeProperties[property] = new Property(typeProperties[property].name,
typeProperties[property].type, typeProperties[property].value);
var nodeProperties: Map<string, Property> = new Map<string, Property>();
for (var [propertyName, property] of typeProperties) {
nodeProperties.set(propertyName, new Property(property.name, property.type, property.value));
}

var linkObject: Link = new Link(link, nodeType.getShownName(), nodeType.getName(), nodeProperties);
DiagramElementListener.makeAndExecuteCreateLinkCommand(linkObject);
DiagramElementListener.makeAndExecuteCreateLinkCommand(link, nodeType.getShownName(), nodeType.getName(), nodeProperties);

this.paper.model.addCell(link);

Expand All @@ -60,7 +57,8 @@ export class DiagramElementListener {
return null;
};

static makeAndExecuteCreateLinkCommand: (linkObject: Link) => void = function(linkObject: Link): void {
static makeAndExecuteCreateLinkCommand: (jointObject: joint.dia.Link, name: string, type: string,
properties: Map<string, Property>) => void = function(): void {
console.error("DiagramElementListener makeAndExecuteCreateLinkCommand method is empty")
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,43 @@ export class PaletteController {
private subprogramsSelector: string = "#subprograms-navigation";
private blocksSelector: string = "#blocks-navigation";
private flowsSelector: string = "#flows-navigation";
private paper: DiagramScene;
private elementTypes: ElementTypes;
private nodesTypesMap: Map<string, NodeType>;

public initDraggable(): void {
public init(paper: DiagramScene, elementTypes: ElementTypes, nodesTypesMap: Map<string, NodeType>) {
this.paper = paper;
this.elementTypes = elementTypes;
this.nodesTypesMap = nodesTypesMap;
this.reload();
}

public reload() {
this.clearPaletteContent(this.blocksSelector);
this.clearPaletteContent(this.flowsSelector);

this.appendBlocksPalette(this.elementTypes.blockTypes);
this.appendFlowsPalette(this.elementTypes.flowTypes);
this.initClick();
this.initDraggable();
}

public searchPaletteReload(event: Event) {
var searchPatterns: string[] = (<any> event.target).value.split(" ").map((str) => str.toLowerCase());

for (var [name, nodeType] of this.nodesTypesMap) {
var notFound: boolean;
for (var i in searchPatterns) {
notFound = name.indexOf(searchPatterns[i]) == -1;
if (notFound)
break;
}
nodeType.setSearchVisibility(!notFound);
}
this.reload();
}

private initDraggable(): void {
$(".tree-element").draggable({
helper: function () {
var clone = $(this).find('.element-img').clone();
Expand All @@ -27,8 +62,9 @@ export class PaletteController {
});
}

public initClick(paper: DiagramScene): void {
$("[data-type='" + paper.getCurrentLinkTypeName() + "']").css("border", "2px solid #00ff00");
private initClick(): void {
$("[data-type='" + this.paper.getCurrentLinkTypeName() + "']").css("border", "2px solid #00ff00");
var paper: DiagramScene = this.paper;
$(".flow-element").mousedown(function () {
paper.setCurrentLinkType($(this).attr("data-type"));
$(".flow-element").css("border", "");
Expand All @@ -37,42 +73,23 @@ export class PaletteController {
}

public appendSubprogramsPalette(subprogramDiagramNodes: SubprogramDiagramNode[],
nodeTypesMap: Map<String, NodeType>): void {
nodeTypesMap: Map<string, NodeType>): void {
var typeName: string = "Subprogram";
var paletteView: SubprogramPaletteView = new SubprogramPaletteView(subprogramDiagramNodes,
nodeTypesMap[typeName].getImage());
nodeTypesMap.get(typeName).getImage());
this.appendPaletteContent(this.subprogramsSelector, paletteView.getContent());
}

public appendBlocksPalette(paletteTypes: PaletteTree): void {
private appendBlocksPalette(paletteTypes: PaletteTree): void {
var paletteView: BlocksPaletteView = new BlocksPaletteView(paletteTypes, "tree-element");
this.appendPaletteContent(this.blocksSelector, paletteView.getContent());
}

public appendFlowsPalette(paletteTypes: PaletteTree): void {
private appendFlowsPalette(paletteTypes: PaletteTree): void {
var paletteView: BlocksPaletteView = new BlocksPaletteView(paletteTypes, "tree-element flow-element");
this.appendPaletteContent(this.flowsSelector, paletteView.getContent());
}

public searchPaletteReload(event: Event, elementTypes: ElementTypes, nodesTypesMap: Map<String, NodeType>) {
var searchPatterns: string[] = (<any> event.target).value.split(" ").map((str) => str.toLowerCase());

for (var name in nodesTypesMap) {
var notFound: Boolean = false;
for (var i in searchPatterns) {
notFound = name.indexOf(searchPatterns[i]) == -1;
if (notFound)
break;
}
nodesTypesMap[name].setVisibility(!notFound);
}
this.clearPaletteContent(this.blocksSelector);
this.clearPaletteContent(this.flowsSelector);

this.appendBlocksPalette(elementTypes.blockTypes);
this.appendFlowsPalette(elementTypes.flowTypes);
}

private appendPaletteContent(selector: string, content: string): void {
$(selector).append(content);

Expand All @@ -84,5 +101,4 @@ export class PaletteController {
private clearPaletteContent(selector: string): void {
$(selector).empty();
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import {HtmlView} from "../view/HtmlView";
import {PropertyViewFactory} from "./PropertyViewFactory";
import {UndoRedoController} from "./UndoRedoController";
import {SceneController} from "./SceneController";
import {DiagramNode} from "../model/DiagramNode";
export class PropertyEditorController {

private propertyViewFactory: PropertyViewFactory;
Expand All @@ -18,12 +19,22 @@ export class PropertyEditorController {
this.sceneController = sceneController;
this.undoRedoController = undoRedoController;
this.initInputStringListener();
this.initInputTextListener();
this.initCheckboxListener();
this.initDropdownListener();
this.initSpinnerListener();

var controller: PropertyEditorController = this;

document.addEventListener('property-changed', function(e: any) {
$("." + e.detail.key + "-" + e.detail.nodeId).each(function(index) {
var currentElement: DiagramElement = controller.sceneController.getCurrentElement();
if (e.detail.key === "InnerText") {
currentElement.getJointObject().attr("text", {
text: e.detail.value
});
} else if (e.detail.key === "ChangeType") {
controller.sceneController.changeElementType(currentElement, e.detail.value);
} else $("." + e.detail.key + "-" + e.detail.nodeId).each(function(index) {
if ($(this).val() !== e.detail.value) {
$(this).val(e.detail.value);
$(this).trigger('autosize');
Expand All @@ -34,22 +45,22 @@ export class PropertyEditorController {

public setNodeProperties(element: DiagramElement): void {
$('#property_table tbody').empty();
var properties: Map<String, Property> = element.getChangeableProperties();
for (var property in properties) {
var properties: Map<string, Property> = element.getChangeableProperties();
for (var [propertyName, property] of properties) {
var propertyView: HtmlView = this.propertyViewFactory.createView(element.getLogicalId(), element.getType(),
property, properties[property]);
propertyName, property);
var htmlElement = $(propertyView.getContent());
$('#property_table tbody').append(htmlElement);

if (properties[property].type === "combobox") {
this.initCombobox(element.getType(), property, htmlElement);
if (property.type === "combobox") {
this.initCombobox(element.getType(), propertyName, htmlElement);
}
}
}

public addChangePropertyCommand(key: string, value: string, changeHtmlFunction: () => void): void {
var currentElement: DiagramElement = this.sceneController.getCurrentElement();
var property: Property = currentElement.getChangeableProperties()[key];
var property: Property = currentElement.getChangeableProperties().get(key);
var changePropertyCommand: Command = new ChangePropertyCommand(key, value, property.value,
this.setProperty.bind(this), changeHtmlFunction);
this.undoRedoController.addCommand(changePropertyCommand);
Expand All @@ -61,7 +72,7 @@ export class PropertyEditorController {

public setProperty(key: string, value: string): void {
var currentElement: DiagramElement = this.sceneController.getCurrentElement();
var property: Property = currentElement.getChangeableProperties()[key];
var property: Property = currentElement.getChangeableProperties().get(key);
property.value = value;
currentElement.setProperty(key, property);
}
Expand Down Expand Up @@ -116,7 +127,7 @@ export class PropertyEditorController {
$(document).on('change', '.checkbox', function () {
var currentElement: DiagramElement = controller.sceneController.getCurrentElement();
var key = $(this).data('type');
var property: Property = currentElement.getChangeableProperties()[key];
var property: Property = currentElement.getChangeableProperties().get(key);
var currentValue = property.value;
var newValue = controller.changeCheckboxValue(currentValue);
controller.addChangePropertyCommand(key, newValue, controller.changeCheckboxHtml.bind(
Expand All @@ -126,6 +137,16 @@ export class PropertyEditorController {
});
}

private initInputTextListener(): void {
var controller: PropertyEditorController = this;
$(document).on('input', '.property-edit-text', function () {
var key = $(this).data('type');
var value = $(this).val();
controller.addChangePropertyCommand(key, value, () => {});
controller.setProperty(key, value);
});
}

private initDropdownListener(): void {
var controller: PropertyEditorController = this;
$(document).on('change', '.mydropdown', function () {
Expand Down
Loading