Skip to content

Commit

Permalink
feat: do not translate import errors
Browse files Browse the repository at this point in the history
These are technical errors that shall be searchable in
public knowledge bases _as is_.
  • Loading branch information
nikku committed Apr 24, 2024
1 parent 160444e commit ea9318b
Show file tree
Hide file tree
Showing 3 changed files with 51 additions and 80 deletions.
46 changes: 17 additions & 29 deletions lib/import/BpmnImporter.js
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,6 @@ import {
* @typedef {import('diagram-js/lib/core/Canvas').default} Canvas
* @typedef {import('diagram-js/lib/core/ElementRegistry').default} ElementRegistry
* @typedef {import('diagram-js/lib/core/EventBus').default} EventBus
* @typedef {import('diagram-js/lib/i18n/translate/translate').default} Translate
*
* @typedef {import('../features/modeling/ElementFactory').default} ElementFactory
* @typedef {import('../draw/TextRenderer').default} TextRenderer
Expand Down Expand Up @@ -68,12 +67,10 @@ function getWaypoints(di, source, target) {
});
}

function notYetDrawn(translate, semantic, refSemantic, property) {
return new Error(translate('element {element} referenced by {referenced}#{property} not yet drawn', {
element: elementToString(refSemantic),
referenced: elementToString(semantic),
property: property
}));
function notYetDrawn(semantic, refSemantic, property) {
return new Error(
`element ${ elementToString(refSemantic) } referenced by ${ elementToString(semantic) }#${ property } not yet drawn`
);
}


Expand All @@ -84,18 +81,16 @@ function notYetDrawn(translate, semantic, refSemantic, property) {
* @param {Canvas} canvas
* @param {ElementFactory} elementFactory
* @param {ElementRegistry} elementRegistry
* @param {Function} translate
* @param {TextRenderer} textRenderer
*/
export default function BpmnImporter(
eventBus, canvas, elementFactory,
elementRegistry, translate, textRenderer) {
elementRegistry, textRenderer) {

this._eventBus = eventBus;
this._canvas = canvas;
this._elementFactory = elementFactory;
this._elementRegistry = elementRegistry;
this._translate = translate;
this._textRenderer = textRenderer;
}

Expand All @@ -104,7 +99,6 @@ BpmnImporter.$inject = [
'canvas',
'elementFactory',
'elementRegistry',
'translate',
'textRenderer'
];

Expand All @@ -121,7 +115,6 @@ BpmnImporter.$inject = [
*/
BpmnImporter.prototype.add = function(semantic, di, parentElement) {
var element,
translate = this._translate,
hidden;

var parentIndex;
Expand Down Expand Up @@ -207,18 +200,16 @@ BpmnImporter.prototype.add = function(semantic, di, parentElement) {

this._canvas.addConnection(element, parentElement, parentIndex);
} else {
throw new Error(translate('unknown di {di} for element {semantic}', {
di: elementToString(di),
semantic: elementToString(semantic)
}));
throw new Error(
`unknown di ${ elementToString(di) } for element ${ elementToString(semantic) }`
);
}

// (optional) LABEL
if (isLabelExternal(semantic) && getLabel(element)) {
this.addLabel(semantic, di, element);
}


this._eventBus.fire('bpmnElement.added', { element: element });

return element;
Expand All @@ -232,20 +223,19 @@ BpmnImporter.prototype.add = function(semantic, di, parentElement) {
* @param {Shape} boundaryElement
*/
BpmnImporter.prototype._attachBoundary = function(boundarySemantic, boundaryElement) {
var translate = this._translate;
var hostSemantic = boundarySemantic.attachedToRef;

if (!hostSemantic) {
throw new Error(translate('missing {semantic}#attachedToRef', {
semantic: elementToString(boundarySemantic)
}));
throw new Error(
`missing ${ elementToString(boundarySemantic) }#attachedToRef`
);
}

var host = this._elementRegistry.get(hostSemantic.id),
attachers = host && host.attachers;

if (!host) {
throw notYetDrawn(translate, boundarySemantic, hostSemantic, 'attachedToRef');
throw notYetDrawn(boundarySemantic, hostSemantic, 'attachedToRef');
}

// wire element.host <> host.attachers
Expand Down Expand Up @@ -311,8 +301,7 @@ BpmnImporter.prototype._getConnectedElement = function(semantic, side) {

var element,
refSemantic,
type = semantic.$type,
translate = this._translate;
type = semantic.$type;

refSemantic = semantic[side + 'Ref'];

Expand All @@ -335,12 +324,11 @@ BpmnImporter.prototype._getConnectedElement = function(semantic, side) {
}

if (refSemantic) {
throw notYetDrawn(translate, semantic, refSemantic, side + 'Ref');
throw notYetDrawn(semantic, refSemantic, side + 'Ref');
} else {
throw new Error(translate('{semantic}#{side} Ref not specified', {
semantic: elementToString(semantic),
side: side
}));
throw new Error(
`${ elementToString(semantic) }#${ side } Ref not specified`
);
}
};

Expand Down
79 changes: 32 additions & 47 deletions lib/import/BpmnTreeWalker.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,6 @@ import {
} from '../util/CompatibilityUtil';

/**
* @typedef {import('diagram-js/lib/i18n/translate/translate').default} Translate
*
* @typedef {import('../model/Types').ModdleElement} ModdleElement
*/

Expand Down Expand Up @@ -47,9 +45,8 @@ function findDisplayCandidate(definitions) {

/**
* @param {Record<'element' | 'root' | 'error', Function>} handler
* @param {Translate} translate
*/
export default function BpmnTreeWalker(handler, translate) {
export default function BpmnTreeWalker(handler) {

// list of containers already walked
var handledElements = {};
Expand Down Expand Up @@ -83,7 +80,7 @@ export default function BpmnTreeWalker(handler, translate) {
// avoid multiple rendering of elements
if (gfx) {
throw new Error(
translate('already rendered {element}', { element: elementToString(element) })
'already rendered ${ elementToString(element) }'
);
}

Expand All @@ -103,11 +100,10 @@ export default function BpmnTreeWalker(handler, translate) {
handled(element);

return gfx;
} catch (e) {
logError(e.message, { element: element, error: e });
} catch (error) {
logError(error.message, { element, error });

console.error(translate('failed to import {element}', { element: elementToString(element) }));
console.error(e);
console.error(`failed to import ${ elementToString(element) }`, error);
}
}

Expand All @@ -123,9 +119,7 @@ export default function BpmnTreeWalker(handler, translate) {
if (bpmnElement) {
if (diMap[bpmnElement.id]) {
logError(
translate('multiple DI elements defined for {element}', {
element: elementToString(bpmnElement)
}),
`multiple DI elements defined for ${ elementToString(bpmnElement) }`,
{ element: bpmnElement }
);
} else {
Expand All @@ -135,9 +129,7 @@ export default function BpmnTreeWalker(handler, translate) {
}
} else {
logError(
translate('no bpmnElement referenced in {element}', {
element: elementToString(di)
}),
`no bpmnElement referenced in ${ elementToString(di) }`,
{ element: di }
);
}
Expand Down Expand Up @@ -175,7 +167,7 @@ export default function BpmnTreeWalker(handler, translate) {
var diagrams = definitions.diagrams;

if (diagram && diagrams.indexOf(diagram) === -1) {
throw new Error(translate('diagram not part of bpmn:Definitions'));
throw new Error('diagram not part of <bpmn:Definitions />');
}

if (!diagram && diagrams && diagrams.length) {
Expand All @@ -184,7 +176,7 @@ export default function BpmnTreeWalker(handler, translate) {

// no diagram -> nothing to import
if (!diagram) {
throw new Error(translate('no diagram to display'));
throw new Error('no diagram to display');
}

// load DI from selected diagram only
Expand All @@ -195,10 +187,9 @@ export default function BpmnTreeWalker(handler, translate) {
var plane = diagram.plane;

if (!plane) {
throw new Error(translate(
'no plane for {element}',
{ element: elementToString(diagram) }
));
throw new Error(
`no plane for ${ elementToString(diagram) }`
);
}

var rootElement = plane.bpmnElement;
Expand All @@ -209,14 +200,11 @@ export default function BpmnTreeWalker(handler, translate) {
rootElement = findDisplayCandidate(definitions);

if (!rootElement) {
throw new Error(translate('no process or collaboration to display'));
throw new Error('no process or collaboration to display');
} else {

logError(
translate('correcting missing bpmnElement on {plane} to {rootElement}', {
plane: elementToString(plane),
rootElement: elementToString(rootElement)
})
`correcting missing bpmnElement on ${ elementToString(plane) } to ${ elementToString(rootElement) }`
);

// correct DI on the fly
Expand All @@ -237,10 +225,7 @@ export default function BpmnTreeWalker(handler, translate) {
handleUnhandledProcesses(definitions.rootElements, ctx);
} else {
throw new Error(
translate('unsupported bpmnElement for {plane}: {rootElement}', {
plane: elementToString(plane),
rootElement: elementToString(rootElement)
})
`unsupported bpmnElement for ${ elementToString(plane) }: ${ elementToString(rootElement) }`
);
}

Expand Down Expand Up @@ -402,31 +387,31 @@ export default function BpmnTreeWalker(handler, translate) {
}

function handleFlowElements(flowElements, context) {
forEach(flowElements, function(e) {
if (is(e, 'bpmn:SequenceFlow')) {
forEach(flowElements, function(flowElement) {
if (is(flowElement, 'bpmn:SequenceFlow')) {
deferred.push(function() {
handleSequenceFlow(e, context);
handleSequenceFlow(flowElement, context);
});
} else if (is(e, 'bpmn:BoundaryEvent')) {
} else if (is(flowElement, 'bpmn:BoundaryEvent')) {
deferred.unshift(function() {
handleFlowNode(e, context);
handleFlowNode(flowElement, context);
});
} else if (is(e, 'bpmn:FlowNode')) {
handleFlowNode(e, context);
} else if (is(e, 'bpmn:DataObject')) {
} else if (is(flowElement, 'bpmn:FlowNode')) {
handleFlowNode(flowElement, context);
} else if (is(flowElement, 'bpmn:DataObject')) {

// SKIP (assume correct referencing via DataObjectReference)
} else if (is(e, 'bpmn:DataStoreReference')) {
handleDataElement(e, context);
} else if (is(e, 'bpmn:DataObjectReference')) {
handleDataElement(e, context);
} else if (is(flowElement, 'bpmn:DataStoreReference')) {
handleDataElement(flowElement, context);
} else if (is(flowElement, 'bpmn:DataObjectReference')) {
handleDataElement(flowElement, context);
} else {
logError(
translate('unrecognized flowElement {element} in context {context}', {
element: elementToString(e),
context: (context ? elementToString(context.businessObject) : 'null')
}),
{ element: e, context: context }
`unrecognized flowElement ${ elementToString(flowElement) } in context ${ elementToString(context && context.businessObject) }`,
{
element: flowElement,
context
}
);
}
});
Expand Down
6 changes: 2 additions & 4 deletions lib/import/Importer.js
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,6 @@ export function importBpmnDiagram(diagram, definitions, bpmnDiagram) {

var importer,
eventBus,
translate,
canvas;

var error,
Expand Down Expand Up @@ -65,15 +64,15 @@ export function importBpmnDiagram(diagram, definitions, bpmnDiagram) {
}
};

var walker = new BpmnTreeWalker(visitor, translate);
var walker = new BpmnTreeWalker(visitor);


bpmnDiagram = bpmnDiagram || (definitions.diagrams && definitions.diagrams[0]);

var diagramsToImport = getDiagramsToImport(definitions, bpmnDiagram);

if (!diagramsToImport) {
throw new Error(translate('no diagram to display'));
throw new Error('no diagram to display');
}

// traverse BPMN 2.0 document model,
Expand All @@ -96,7 +95,6 @@ export function importBpmnDiagram(diagram, definitions, bpmnDiagram) {
try {
importer = diagram.get('bpmnImporter');
eventBus = diagram.get('eventBus');
translate = diagram.get('translate');
canvas = diagram.get('canvas');

eventBus.fire('import.render.start', { definitions: definitions });
Expand Down

0 comments on commit ea9318b

Please sign in to comment.