diff --git a/addon/components/fd-uml-diagram.js b/addon/components/fd-uml-diagram.js index 472a9bcec..ba2c5af59 100644 --- a/addon/components/fd-uml-diagram.js +++ b/addon/components/fd-uml-diagram.js @@ -89,13 +89,21 @@ export default Component.extend( */ draggedLinkView: undefined, + /** + model of the UML diagram. + + @property model + @default undefined + */ + model: undefined, + /** All primitives of the UML diagram. @property primitives @type Ember.Array */ - primitives: undefined, + primitives: computed.alias('model.primitives'), /** True when link adding in process. diff --git a/addon/mixins/fd-uml-diagram-component/fd-keypress-logic.js b/addon/mixins/fd-uml-diagram-component/fd-keypress-logic.js index 283ed6cf7..7143d9dd2 100644 --- a/addon/mixins/fd-uml-diagram-component/fd-keypress-logic.js +++ b/addon/mixins/fd-uml-diagram-component/fd-keypress-logic.js @@ -3,7 +3,14 @@ */ import Mixin from '@ember/object/mixin'; +import FdUmlLink from '../../objects/uml-primitives/fd-uml-link'; import { inject as service } from '@ember/service'; +import { get } from '@ember/object'; +import { A, isArray } from '@ember/array'; +import { isNone } from '@ember/utils'; +import uuid from 'npm:node-uuid'; +import { updateObjectByStr } from '../../utils/fd-update-str-value'; +import { getDataForBuildTree } from '../../utils/fd-attributes-for-tree'; import $ from 'jquery'; /** @@ -54,7 +61,8 @@ export default Mixin.create({ _keydownHandler(e) { if (e.ctrlKey) { e.stopPropagation(); - e.preventDefault(); + + let preventDefault = true; switch (e.keyCode) { // ctrl + a case 65: @@ -63,14 +71,18 @@ export default Mixin.create({ // ctrl + c case 67: + this.copyHighlightElements(false); break; // ctrl + x case 88: + this.copyHighlightElements(true); break; // ctrl + v case 86: + preventDefault = false; + this.pasteCopyElements(); break; // ctrl + z @@ -86,6 +98,11 @@ export default Mixin.create({ this.saveDiagram(); break; } + + if (preventDefault) { + e.preventDefault(); + } + } else if (e.keyCode === 46 && !$(e.target).is('textarea,input')) { e.stopPropagation(); e.preventDefault(); @@ -108,6 +125,335 @@ export default Mixin.create({ }); }, + /** + Handler 'ctrl + c' copy selected diagram elements. + + @method copyHighlightElements + */ + copyHighlightElements(isCut) { + let readonly = this.get('readonly'); + if (readonly && isCut) { + return; + } + + let copyPrimitive = A(); + let copyRepObjects = A(); + + let highlightedAllElements = this.get('highlightedElements'); + let highlightedElements = highlightedAllElements.filter((a) => a.model.isElement()); + let highlightedLinks = highlightedAllElements.filter((a) => a.model.isLink()); + + let elements = this.get('elements'); + highlightedElements.forEach((element) => { + let id = get(element, 'model.id'); + let model = elements.findBy('id', id); + let repObject = model.repositoryObject; + if (!isNone(repObject)) { + let repObjectId = repObject.slice(1, -1); + let classObject = this.get('store').peekRecord('fd-dev-class', repObjectId); + copyRepObjects.pushObject({ + type: 'fd-dev-class', + data: classObject, + views: classObject.get('views').map((a) => a.serialize({ includeId: true })), + formViews: classObject.get('formViews').map((a) => { + let serializeObj = a.serialize({ includeId: true }); + serializeObj[`View@odata.bind`] = a.get('view.name'); + serializeObj[`Class@odata.bind`] = a.get('class.name'); + + return serializeObj; + }), + }); + } + + copyPrimitive.pushObject(model.primitive); + }); + + let links = this.get('links'); + highlightedLinks.forEach((link) => { + let id = get(link, 'model.id'); + let model = links.findBy('id', id); + let sourceElement = copyPrimitive.findBy('$id', get(model, 'source.id')); + let targetElement = copyPrimitive.findBy('$id', get(model, 'target.id')); + if (!isNone(sourceElement) && !isNone(targetElement)) { + let repObject = model.repositoryObject; + if (!isNone(repObject)) { + let repObjectId = repObject.slice(1, -1); + let modelName = this._getModelName(model.primitive.$type); + let linkObject = this.get('store').peekRecord(modelName, repObjectId); + copyRepObjects.pushObject({ + type: modelName, + data: linkObject + }); + } + + copyPrimitive.pushObject(model.primitive); + } + }); + + let copyValue = { + type: this.get('model.constructor.modelName'), + primitives: copyPrimitive, + repObjects: copyRepObjects.uniqBy('data.id').map((a) => { + a.data = a.data.serialize({ includeId: true }); + return a; + }) + }; + + // Create new element + let el = document.createElement('textarea'); + + // Set value (string to be copied), set non-editable to avoid focus and move outside of view + el.value = JSON.stringify(copyValue); + el.style = { display: 'none' }; + document.body.appendChild(el); + + // Select text inside element, copy text to clipboard and remove temporary element. + el.select(); + document.execCommand('copy'); + document.body.removeChild(el); + + if (isCut) { + this.deleteSelectElements(); + } + }, + + /** + Handler 'ctrl + v'. + + @method pasteCopyElements + */ + pasteCopyElements() { + let readonly = this.get('readonly'); + if (readonly) { + return; + } + + window.addEventListener('paste', this.createPasteElementsOnDiagram.bind(this), { once: true }); + }, + + /** + Create object on diagrams. + + @method createPasteElementsOnDiagram + @param {Event} e event. + */ + createPasteElementsOnDiagram(e) { + e.stopPropagation(); + e.preventDefault(); + + let json = e.clipboardData.getData('text/plain'); + let model = this.get('model'); + let pasteValue = this._parsePasteData(json); + if (pasteValue.type !== model.get('constructor.modelName')) { + return; + } + + let primitives = pasteValue.primitives; + let repObjects = pasteValue.repObjects; + + // Create new rep objects. + let store = this.get('store'); + let listRepObject = A(); + let dictionaryRepObjId = A(); + repObjects.forEach((repObject) => { + let stage = this.get('currentProjectContext').getCurrentStageModel(); + let allObjects = store.peekAll(repObject.type); + let allObjectsCurrentStage = allObjects.filterBy('stage.id', stage.get('id')); + + let existObject; + if (repObject.type === 'fd-dev-class') { + existObject = allObjectsCurrentStage.findBy('name', repObject.data.Name); + } else { + let isInh = repObject.type === 'fd-dev-inheritance'; + existObject = allObjectsCurrentStage.find((a) => { + let repStartObj = repObject.data[`${(isInh ? 'Parent' : 'StartClass')}@odata.bind`].slice(12, -1); + repStartObj = this._findNewObjectId(repStartObj, dictionaryRepObjId); + let repEndObj = repObject.data[`${(isInh ? 'Child' : 'EndClass')}@odata.bind`].slice(12, -1); + repEndObj = this._findNewObjectId(repEndObj, dictionaryRepObjId); + let repStartRole = repObject.data.StartRole; + let repEndRole = repObject.data.EndRole; + let repDescription = repObject.data.Description; + if ( + a.get(`${(isInh ? 'parent' : 'startClass')}.id`) === repStartObj && + a.get(`${(isInh ? 'child' : 'endClass')}.id`) === repEndObj && + a.get(`startRole`) === repStartRole && + a.get(`endRole`) === repEndRole && + a.get(`description`) === repDescription + ) { + return a; + } + }); + } + + if (isNone(existObject)) { + let repObj = this._addObjectInStore(repObject.type, repObject.data, dictionaryRepObjId); + repObj.set('stage', stage); + + listRepObject.pushObject(repObject); + } else { + + this._incrementPropertyReferenceCount(existObject); + dictionaryRepObjId.pushObject({ + oldId: repObject.data.__PrimaryKey, + newId: existObject.get('id') + }); + } + }); + + // Add primitives on diagram. + let dictionaryPrimitivesId = A(); + this.get('graph').addCells(primitives.map((primitive) => { + let umlObject = model.createUmlObject(primitive); + let oldId = umlObject.get('id'); + let newId = this._createNewPrimitiveId(oldId, dictionaryPrimitivesId); + umlObject.set('primitive.$id', newId); + + if (umlObject instanceof FdUmlLink) { + let oldSourceId = umlObject.get('source.id'); + let newSourceId = this._createNewPrimitiveId(oldSourceId, dictionaryPrimitivesId); + umlObject.set('primitive.StartPrimitive.$ref', newSourceId); + + let oldTargetId = umlObject.get('target.id'); + let newTargetId = this._createNewPrimitiveId(oldTargetId, dictionaryPrimitivesId); + umlObject.set('primitive.EndPrimitive.$ref', newTargetId); + + let oldStartLEParent = umlObject.get('primitive.StartLE.Parent.$ref'); + let newStartLEParent = this._createNewPrimitiveId(oldStartLEParent, dictionaryPrimitivesId); + umlObject.set('primitive.StartLE.Parent.$ref', newStartLEParent); + + let oldStartLEPrimitive = umlObject.get('primitive.StartLE.Primitive.$ref'); + let newStartLEPrimitive = this._createNewPrimitiveId(oldStartLEPrimitive, dictionaryPrimitivesId); + umlObject.set('primitive.StartLE.Primitive.$ref', newStartLEPrimitive); + + let oldEndLEParent = umlObject.get('primitive.EndLE.Parent.$ref'); + let newEndLEParent = this._createNewPrimitiveId(oldEndLEParent, dictionaryPrimitivesId); + umlObject.set('primitive.EndLE.Parent.$ref', newEndLEParent); + + let oldEndLEPrimitive = umlObject.get('primitive.EndLE.Primitive.$ref'); + let newEndLEPrimitive = this._createNewPrimitiveId(oldEndLEPrimitive, dictionaryPrimitivesId); + umlObject.set('primitive.EndLE.Primitive.$ref', newEndLEPrimitive); + } + + let repositoryObject = umlObject.repositoryObject; + if(!isNone(repositoryObject)) { + let newRepositoryObject = this._findNewObjectId(repositoryObject.slice(1, -1), dictionaryRepObjId); + umlObject.set('primitive.RepositoryObject', `{${newRepositoryObject}}`); + } + + this._addToPrimitives(umlObject); + let element = umlObject.JointJS(); + + return element; + })); + + // Add link properties. + let addLinks = listRepObject.filter(a => a.type !== 'fd-dev-class'); + addLinks.forEach((linkObj) => { + + // Add start and end class. + let linkId = this._findNewObjectId(linkObj.data.__PrimaryKey, dictionaryRepObjId); + let linkRepObj = store.peekRecord(linkObj.type, linkId); + + let isInh = linkObj.type === 'fd-dev-inheritance'; + let repStartObj = linkObj.data[`${(isInh ? 'Parent' : 'StartClass')}@odata.bind`].slice(12, -1); + let repEndObj = linkObj.data[`${(isInh ? 'Child' : 'EndClass')}@odata.bind`].slice(12, -1); + + let repStartObjId = this._findNewObjectId(repStartObj, dictionaryRepObjId); + let repEndObjId = this._findNewObjectId(repEndObj, dictionaryRepObjId); + + let startClass = store.peekRecord('fd-dev-class', repStartObjId); + let endClass = store.peekRecord('fd-dev-class', repEndObjId); + + linkRepObj.set(`${(isInh ? 'parent' : 'startClass')}`, startClass); + linkRepObj.set(`${(isInh ? 'child' : 'endClass')}`, endClass); + }); + + // Add class properties. + let addClasses = listRepObject.filter(a => a.type === 'fd-dev-class'); + addClasses.forEach((classObj) => { + + // Add attributes and methods. + let clsId = this._findNewObjectId(classObj.data.__PrimaryKey, dictionaryRepObjId); + let clsObj = store.peekRecord('fd-dev-class', clsId); + updateObjectByStr(clsObj, store); + + // Add bs. + let bs = classObj.data[`BusinessServerClass@odata.bind`]; + if (!isNone(bs)) { + let bsId = this._findNewObjectId(bs.slice(12, -1), dictionaryRepObjId); + let bsObj = store.peekRecord('fd-dev-class', bsId); + + if (!isNone(bsObj)) { + clsObj.set('businessServerClass', bsObj); + } + } + + // Add views. + let views = classObj.views; + views.forEach((view) => { + let obj = this._addObjectInStore('fd-dev-view', view, dictionaryRepObjId); + obj.set('class', clsObj); + + let definitionArray = obj.get('definitionArray'); + let deleteDefinition = A(); + definitionArray.forEach((definition) => { + let defName = definition.get('name'); + let defNamePart = defName.split('.'); + let currentClass = clsObj; + for (var i = 0; i < defNamePart.length; i++) { + let name = defNamePart[i]; + + let isExistObj; + if (i === defNamePart.length - 1) { + isExistObj = this._checkExistProp(currentClass, name, true); + } else { + isExistObj = this._checkExistProp(currentClass, name, false); + } + + if (!isNone(isExistObj)) { + currentClass = isExistObj; + } else { + deleteDefinition.pushObject(definition); + break; + } + } + }); + + if (deleteDefinition.length > 0) { + definitionArray.removeObjects(deleteDefinition); + + //For trigger computed propherty in fd-dev-view model. + obj.get('definitionArray'); + } + }); + }); + + // Add formViews. + addClasses.forEach((classObj) => { + let formViews = classObj.formViews; + formViews.forEach((formView) => { + let viewName = formView[`View@odata.bind`]; + let clsName = formView[`Class@odata.bind`]; + + if (!isNone(viewName) && !isNone(clsName)) { + let allClasses = store.peekAll('fd-dev-class'); + let allClassesCurrentStage = allClasses.filterBy('stage.id', this.get('currentProjectContext').getCurrentStage()); + let clsObj = allClassesCurrentStage.findBy('name', clsName); + + if (!isNone(clsObj)) { + let views = clsObj.get('views'); + let viewObj = views.findBy('name', viewName); + if (!isNone(viewObj)) { + let obj = this._addObjectInStore('fd-dev-form-view', formView, dictionaryRepObjId); + obj.set('class', clsObj); + obj.set('view', viewObj); + } + } + } + }); + }); + }, + /** Handler 'ctrl + s' save open diagram. @@ -137,5 +483,142 @@ export default Mixin.create({ }); highlightedElements.clear(); + }, + + /** + Add new object to diagram's primitives. + + @method _addToPrimitives + @param {Object} umlClass + */ + _addToPrimitives(umlClass) { + if (!umlClass) { + return; + } + + let primitives = this.get('primitives'); + if (isArray(primitives)) { + primitives.pushObject(umlClass); + } else { + this.set('primitives', A([ umlClass ])); + } + }, + + /** + Parse json to array diagram's primitives objects. + + @method _parsePasteData + @param {String} json + */ + _parsePasteData(json) { + try { + let pasteValue = JSON.parse(json); + + return pasteValue; + } catch(e) { + return {}; + } + }, + + /** + Create new id for diagram's primitives. + + @method _createNewPrimitiveId + @param {String} oldId + @param {Array} dictionaryPrimitivesId + */ + _createNewPrimitiveId(oldId, dictionaryPrimitivesId) { + let dictionaryValue = dictionaryPrimitivesId.findBy('oldId', oldId); + if (isNone(dictionaryValue)) { + let newId = `{${uuid.v4()}}`; + dictionaryPrimitivesId.pushObject({ + oldId: oldId, + newId: newId + }); + + return newId; + } + + return dictionaryValue.newId; + }, + + /** + Find new id for rep objects. + + @method _findNewObjectId + @param {String} oldId + @param {Array} dictionaryId + */ + _findNewObjectId(oldId, dictionaryId) { + let dictionaryValue = dictionaryId.findBy('oldId', oldId); + if (isNone(dictionaryValue)) { + return oldId; + } + + return dictionaryValue.newId; + }, + + /** + Check view prop on exist. + + @method _checkExistProp + @param {Object} cls class + @param {String} name propery name + @param {Bool} isAttr is attributes + */ + _checkExistProp(cls, name, isAttr) { + let dataForClass = getDataForBuildTree(this.get('store'), cls.get('id')); + + let findFunction = function(item) { + let isAgg = item.get('constructor.modelName'); + let cls = item.get(`${(isAgg ? 'endClass' : 'startClass')}`); + let value = item.get(`${(isAgg ? 'endRole' : 'startRole')}`) || cls.get('name'); + + return value === name; + } + + let isExist; + if (isAttr) { + isExist = dataForClass.classes.find((cls) => { + let clsIsExist = cls.get('attributes').findBy('name', name); + + return !isNone(clsIsExist); + }); + if (isNone(isExist)) { + isExist = dataForClass.aggregations.find(findFunction); + } + if (isNone(isExist)) { + isExist = dataForClass.associations.find(findFunction); + } + } else { + isExist = dataForClass.associations.find(findFunction); + } + + return isExist; + }, + + /** + Create new model. + + @method _addObjectInStore + @param {String} modelName model name + @param {Object} object serialize model + @param {Array} dictionaryRepObjId dictionary id + */ + _addObjectInStore(modelName, object, dictionaryRepObjId) { + let store = this.get('store'); + let newId = uuid.v4(); + let normalize = store.normalize(modelName, object); + let model = store.createRecord(modelName, { + id: newId + }); + model.setProperties(normalize.data.attributes); + model.set('referenceCount', 1); + dictionaryRepObjId.pushObject({ + oldId: object.__PrimaryKey, + newId: newId + }); + + return model; } }); diff --git a/addon/models/fd-dev-uml-ad.js b/addon/models/fd-dev-uml-ad.js index dc29b477f..cc1eaa4ca 100644 --- a/addon/models/fd-dev-uml-ad.js +++ b/addon/models/fd-dev-uml-ad.js @@ -1,5 +1,6 @@ import { computed } from '@ember/object'; import { A } from '@ember/array'; +import { isNone } from '@ember/utils'; import { Model as DevUMLADMixin, defineBaseModel @@ -35,87 +36,82 @@ let Model = ADModel.extend(DevUMLADMixin, { for (let i = 0; i < primitives.length; i++) { let primitive = primitives[i]; - switch (primitive.$type) { - case 'STORMCASE.UML.ad.Decision, UMLAD': - result.pushObject(FdUmlDecision.create({ primitive })); - break; - - case 'STORMCASE.UML.ad.State, UMLAD': - result.pushObject(FdUmlActiveState.create({ primitive })); - break; - - case 'STORMCASE.UML.ad.StartState, UMLAD': - result.pushObject(FdUmlStartState.create({ primitive })); - break; - - case 'STORMCASE.UML.ad.FinalState, UMLAD': - result.pushObject(FdUmlFinalState.create({ primitive })); - break; - - case 'STORMCASE.UML.ad.ComplexTransitionH, UMLAD': - result.pushObject(FdUmlComplexTransition.create({ primitive })); - break; - - case 'STORMCASE.UML.ad.ComplexTransitionV, UMLAD': - result.pushObject(FdUmlComplexTransition.create({ primitive })); - break; - - case 'STORMCASE.UML.ad.ObjectInState, UMLAD': - result.pushObject(FdUmlObjectInState.create({ primitive })); - break; - - case 'STORMCASE.UML.ad.SignalReceiptLeft, UMLAD': - result.pushObject(FdUmlSignalReceipt.create({ primitive })); - break; - - case 'STORMCASE.UML.ad.SignalReceiptRight, UMLAD': - result.pushObject(FdUmlSignalReceipt.create({ primitive })); - break; - - case 'STORMCASE.UML.ad.SignalSendLeft, UMLAD': - result.pushObject(FdUmlSignalSend.create({ primitive })); - break; - - case 'STORMCASE.UML.ad.SignalSendRight, UMLAD': - result.pushObject(FdUmlSignalSend.create({ primitive })); - break; - - case 'STORMCASE.UML.ad.Transition, UMLAD': - result.pushObject(FdUmlTransition.create({ primitive })); - break; - - case 'STORMCASE.UML.ad.ObjectFlow, UMLAD': - result.pushObject(FdUmlObjectFlow.create({ primitive })); - break; - - case 'STORMCASE.UML.ad.Partition, UMLAD': - result.pushObject(FdUmlPartition.create({ primitive })); - break; - - case 'STORMCASE.UML.Common.NoteConnector, UMLCommon': - result.pushObject(FdUmlNoteConnector.create({ primitive })); - break; - - case 'STORMCASE.UML.Common.Note, UMLCommon': - result.pushObject(FdUmlNote.create({ primitive })); - break; - - case 'STORMCASE.UML.ad.ConcurrentStateH, UMLAD': - result.pushObject(FdUmlSwimlineSeparator.create({ primitive })); - break; - - case 'STORMCASE.UML.ad.ConcurrentStateV, UMLAD': - result.pushObject(FdUmlSwimlineSeparator.create({ primitive })); - break; - - default: - /* TODO: throw */ new Error(`Unknown primitive type: '${primitive.$type}'.`); - break; + let umlObject = this.createUmlObject(primitive); + if (!isNone(umlObject)) { + result.pushObject(umlObject); } } return result; - }) + }), + + /** + Create uml object by primitive. + + @method createUmlObject + @param {Object} primitive primitive uml. + */ + createUmlObject(primitive) { + switch (primitive.$type) { + case 'STORMCASE.UML.ad.Decision, UMLAD': + return FdUmlDecision.create({ primitive }); + + case 'STORMCASE.UML.ad.State, UMLAD': + return FdUmlActiveState.create({ primitive }); + + case 'STORMCASE.UML.ad.StartState, UMLAD': + return FdUmlStartState.create({ primitive }); + + case 'STORMCASE.UML.ad.FinalState, UMLAD': + return FdUmlFinalState.create({ primitive }); + + case 'STORMCASE.UML.ad.ComplexTransitionH, UMLAD': + return FdUmlComplexTransition.create({ primitive }); + + case 'STORMCASE.UML.ad.ComplexTransitionV, UMLAD': + return FdUmlComplexTransition.create({ primitive }); + + case 'STORMCASE.UML.ad.ObjectInState, UMLAD': + return FdUmlObjectInState.create({ primitive }); + + case 'STORMCASE.UML.ad.SignalReceiptLeft, UMLAD': + return FdUmlSignalReceipt.create({ primitive }); + + case 'STORMCASE.UML.ad.SignalReceiptRight, UMLAD': + return FdUmlSignalReceipt.create({ primitive }); + + case 'STORMCASE.UML.ad.SignalSendLeft, UMLAD': + return FdUmlSignalSend.create({ primitive }); + + case 'STORMCASE.UML.ad.SignalSendRight, UMLAD': + return FdUmlSignalSend.create({ primitive }); + + case 'STORMCASE.UML.ad.Transition, UMLAD': + return FdUmlTransition.create({ primitive }); + + case 'STORMCASE.UML.ad.ObjectFlow, UMLAD': + return FdUmlObjectFlow.create({ primitive }); + + case 'STORMCASE.UML.ad.Partition, UMLAD': + return FdUmlPartition.create({ primitive }); + + case 'STORMCASE.UML.Common.NoteConnector, UMLCommon': + return FdUmlNoteConnector.create({ primitive }); + + case 'STORMCASE.UML.Common.Note, UMLCommon': + return FdUmlNote.create({ primitive }); + + case 'STORMCASE.UML.ad.ConcurrentStateH, UMLAD': + return FdUmlSwimlineSeparator.create({ primitive }); + + case 'STORMCASE.UML.ad.ConcurrentStateV, UMLAD': + return FdUmlSwimlineSeparator.create({ primitive }); + + default: + /* TODO: throw */ new Error(`Unknown primitive type: '${primitive.$type}'.`); + return; + } + } }); diff --git a/addon/models/fd-dev-uml-cad.js b/addon/models/fd-dev-uml-cad.js index d70ea2583..3c2523739 100644 --- a/addon/models/fd-dev-uml-cad.js +++ b/addon/models/fd-dev-uml-cad.js @@ -78,112 +78,100 @@ let Model = CADModel.extend(DevUMLCADMixin, { primitive.EndLE.refType = 'Element'; } } - switch (primitive.$type) { - case 'STORMCASE.UML.Common.Note, UMLCommon': - result.pushObject(FdUmlNote.create({ primitive })); - break; - - case 'STORMCASE.UML.cad.Class, UMLCAD': { - let classObject = FdUmlClass.create({ primitive, isCreated: isBlank(primitive.Name.Text) }); - classObject.set('primitive.$type', 'STORMCASE.STORMNET.Repository.CADClass, STORM.NET Case Tool plugin'); - result.pushObject(classObject); - break; - } - case 'STORMCASE.STORMNET.Repository.CADClass, STORM.NET Case Tool plugin': - result.pushObject(FdUmlClass.create({ primitive, isCreated: isBlank(primitive.Name.Text) })); - break; - case 'STORMCASE.UML.Common.NoteConnector, UMLCommon': - result.pushObject(FdUmlNoteConnector.create({ primitive })); - break; + let umlObject = this.createUmlObject(primitive); + result.pushObject(umlObject); + } - case 'STORMCASE.UML.cad.Association, UMLCAD': - result.pushObject(FdUmlAssociation.create({ primitive })); - break; + return result; + }), - case 'STORMCASE.UML.cad.ObjectAssociation, UMLCAD': - result.pushObject(FdUmlObjectAssociation.create({ primitive })); - break; + /** + Create uml object by primitive. - case 'STORMCASE.UML.cad.NaryLink, UMLCAD': - result.pushObject(FdUmlNAryAssociationConnector.create({ primitive })); - break; + @method createUmlObject + @param {Object} primitive primitive uml. + */ + createUmlObject(primitive) { + switch (primitive.$type) { + case 'STORMCASE.UML.Common.Note, UMLCommon': + return FdUmlNote.create({ primitive }); + + case 'STORMCASE.UML.cad.Class, UMLCAD': { + let classObject = FdUmlClass.create({ primitive, isCreated: isBlank(primitive.Name.Text) }); + classObject.set('primitive.$type', 'STORMCASE.STORMNET.Repository.CADClass, STORM.NET Case Tool plugin'); + return classObject; + } + case 'STORMCASE.STORMNET.Repository.CADClass, STORM.NET Case Tool plugin': + return FdUmlClass.create({ primitive, isCreated: isBlank(primitive.Name.Text) }); - case 'STORMCASE.UML.cad.QualifiedAggregationLink, UMLCAD': - result.pushObject(FdUmlQAggregation.create({ primitive })); - break; + case 'STORMCASE.UML.Common.NoteConnector, UMLCommon': + return FdUmlNoteConnector.create({ primitive }); - case 'STORMCASE.UML.cad.Composition, UMLCAD': - result.pushObject(FdUmlComposition.create({ primitive })); - break; + case 'STORMCASE.UML.cad.Association, UMLCAD': + return FdUmlAssociation.create({ primitive }); - case 'STORMCASE.UML.cad.Inheritance, UMLCAD': - result.pushObject(FdUmlGeneralization.create({ primitive })); - break; + case 'STORMCASE.UML.cad.ObjectAssociation, UMLCAD': + return FdUmlObjectAssociation.create({ primitive }); - case 'STORMCASE.UML.cad.PropertyObject, UMLCAD': - result.pushObject(FdUmlPropertyObject.create({ primitive })); - break; + case 'STORMCASE.UML.cad.NaryLink, UMLCAD': + return FdUmlNAryAssociationConnector.create({ primitive }); - case 'STORMCASE.UML.cad.MultiObject, UMLCAD': - result.pushObject(FdUmlMultiObject.create({ primitive })); - break; + case 'STORMCASE.UML.cad.QualifiedAggregationLink, UMLCAD': + return FdUmlQAggregation.create({ primitive }); - case 'STORMCASE.UML.cad.Instance, UMLCAD': - result.pushObject(FdUmlInstance.create({ primitive })); - break; + case 'STORMCASE.UML.cad.Composition, UMLCAD': + return FdUmlComposition.create({ primitive }); - case 'STORMCASE.UML.cad.MoreClasses, UMLCAD': - result.pushObject(FdUmlMoreClasses.create({ primitive })); - break; + case 'STORMCASE.UML.cad.Inheritance, UMLCAD': + return FdUmlGeneralization.create({ primitive }); - case 'STORMCASE.UML.cad.NarLink, UMLCAD': - result.pushObject(FdUmlNAryAssociation.create({ primitive })); - break; + case 'STORMCASE.UML.cad.PropertyObject, UMLCAD': + return FdUmlPropertyObject.create({ primitive }); - case 'STORMCASE.UML.cad.ActiveObject, UMLCAD': - result.pushObject(FdUmlActiveObject.create({ primitive })); - break; + case 'STORMCASE.UML.cad.MultiObject, UMLCAD': + return FdUmlMultiObject.create({ primitive }); - case 'STORMCASE.UML.cad.TemplateClass, UMLCAD': - result.pushObject(FdUmlTemplateClass.create({ primitive })); - break; + case 'STORMCASE.UML.cad.Instance, UMLCAD': + return FdUmlInstance.create({ primitive }); - case 'STORMCASE.UML.cad.Package, UMLCAD': - result.pushObject(FdUmlPackage.create({ primitive })); - break; + case 'STORMCASE.UML.cad.MoreClasses, UMLCAD': + return FdUmlMoreClasses.create({ primitive }); - case 'STORMCASE.UML.cad.NestedClassAssoc, UMLCAD': - result.pushObject(FdUmlNestedAssociation.create({ primitive })); - break; + case 'STORMCASE.UML.cad.NarLink, UMLCAD': + return FdUmlNAryAssociation.create({ primitive }); - case 'STORMCASE.UML.cad.Aggregation, UMLCAD': - result.pushObject(FdUmlAggregation.create({ primitive })); - break; + case 'STORMCASE.UML.cad.ActiveObject, UMLCAD': + return FdUmlActiveObject.create({ primitive }); - case 'STORMCASE.UML.cad.Dependency, UMLCAD': - result.pushObject(FdUmlDependency.create({ primitive })); - break; + case 'STORMCASE.UML.cad.TemplateClass, UMLCAD': + return FdUmlTemplateClass.create({ primitive }); - case 'STORMCASE.UML.cad.QualifiedLink, UMLCAD': - result.pushObject(FdUmlQAssociation.create({ primitive })); - break; + case 'STORMCASE.UML.cad.Package, UMLCAD': + return FdUmlPackage.create({ primitive }); - case 'STORMCASE.UML.cad.QualifiedCompositionLink, UMLCAD': - result.pushObject(FdUmlQComposition.create({ primitive })); - break; + case 'STORMCASE.UML.cad.NestedClassAssoc, UMLCAD': + return FdUmlNestedAssociation.create({ primitive }); - case 'STORMCASE.UML.cad.Realization, UMLCAD': - result.pushObject(FdUmlRealization.create({ primitive })); - break; + case 'STORMCASE.UML.cad.Aggregation, UMLCAD': + return FdUmlAggregation.create({ primitive }); - default: - throw new Error(`Unknown primitive type: '${primitive.$type}'.`); - } - } + case 'STORMCASE.UML.cad.Dependency, UMLCAD': + return FdUmlDependency.create({ primitive }); - return result; - }) + case 'STORMCASE.UML.cad.QualifiedLink, UMLCAD': + return FdUmlQAssociation.create({ primitive }); + + case 'STORMCASE.UML.cad.QualifiedCompositionLink, UMLCAD': + return FdUmlQComposition.create({ primitive }); + + case 'STORMCASE.UML.cad.Realization, UMLCAD': + return FdUmlRealization.create({ primitive }); + + default: + throw new Error(`Unknown primitive type: '${primitive.$type}'.`); + } + } }); defineBaseModel(Model); diff --git a/addon/models/fd-dev-uml-cod.js b/addon/models/fd-dev-uml-cod.js index 339859fcc..24508a7d0 100644 --- a/addon/models/fd-dev-uml-cod.js +++ b/addon/models/fd-dev-uml-cod.js @@ -42,106 +42,94 @@ let Model = CODModel.extend(DevUMLCODMixin, { for (let i = 0; i < primitives.length; i++) { let primitive = primitives[i]; - switch (primitive.$type) { - case 'STORMCASE.UML.cod.ActiveObject, UMLCOD': - result.pushObject(FdUmlActiveObject.create({ primitive })); - break; - - case 'STORMCASE.UML.cod.NarLink, UMLCOD': - result.pushObject(FdUmlNAryAssociation.create({ primitive })); - break; - - case 'STORMCASE.UML.cod.Instance, UMLCOD': - result.pushObject(FdUmlInstance.create({ primitive })); - break; - - case 'STORMCASE.UML.cod.MultiObject, UMLCOD': - result.pushObject(FdUmlMultiObject.create({ primitive })); - break; - - case 'STORMCASE.UML.Common.Note, UMLCommon': - result.pushObject(FdUmlNote.create({ primitive })); - break; - - case 'STORMCASE.UML.cod.Inheritance, UMLCOD': - result.pushObject(FdUmlGeneralizationCod.create({ primitive })); - break; - - case 'STORMCASE.UML.Common.NoteConnector, UMLCommon': - result.pushObject(FdUmlNoteConnector.create({ primitive })); - break; - - case 'STORMCASE.UML.cod.QualifiedAggregationLink, UMLCOD': - result.pushObject(FdUmlQAggregation.create({ primitive })); - break; - - case 'STORMCASE.UML.cod.QualifiedCompositionLink, UMLCOD': - result.pushObject(FdUmlQComposition.create({ primitive })); - break; - - case 'STORMCASE.UML.cod.QualifiedLink, UMLCOD': - result.pushObject(FdUmlQAssociation.create({ primitive })); - break; - - case 'STORMCASE.UML.cod.NaryLink, UMLCOD': - result.pushObject(FdUmlNAryAssociationConnector.create({ primitive })); - break; - - case 'STORMCASE.UML.cod.AggregationLink, UMLCOD': - result.pushObject(FdUmlAggregationLink.create({ primitive })); - break; - - case 'STORMCASE.UML.cod.Link, UMLCOD': - result.pushObject(FdUmlAssociationLink.create({ primitive })); - break; - - case 'STORMCASE.UML.cod.CompositionLink, UMLCOD': - result.pushObject(FdUmlCompositionLink.create({ primitive })); - break; - - case 'STORMCASE.UML.cod.DesignPatternConnector, UMLCOD': - result.pushObject(FdUmlDesignPatternConnector.create({ primitive })); - break; - - case 'STORMCASE.UML.cod.DesignPattern, UMLCOD': - result.pushObject(FdUmlDesignPattern.create({ primitive })); - break; - - case 'STORMCASE.UML.cod.Actor, UMLCOD': - result.pushObject(FdUmlUsecaseActor.create({ primitive })); - break; - - case 'STORMCASE.UML.cod.ForwardFlatMessage, UMLCOD': - result.pushObject(FdUmlForwardFlatMessage.create({ primitive })); - break; - - case 'STORMCASE.UML.cod.ForwardNestedMessage, UMLCOD': - result.pushObject(FdUmlForwardNestedMessage.create({ primitive })); - break; - - case 'STORMCASE.UML.cod.ForwardAsyncMessage, UMLCOD': - result.pushObject(FdUmlForwardAsyncMessage.create({ primitive })); - break; - - case 'STORMCASE.UML.cod.BackwardNestedMessage, UMLCOD': - result.pushObject(FdUmlBackwardNestedMessage.create({ primitive })); - break; - - case 'STORMCASE.UML.cod.BackwardFlatMessage, UMLCOD': - result.pushObject(FdUmlBackwardFlatMessage.create({ primitive })); - break; - - case 'STORMCASE.UML.cod.BackwardAsyncMessage, UMLCOD': - result.pushObject(FdUmlBackwardAsyncMessage.create({ primitive })); - break; - - default: - throw new Error(`Unknown primitive type: '${primitive.$type}'.`); - } + let umlObject = this.createUmlObject(primitive); + result.pushObject(umlObject); } return result; }), + + /** + Create uml object by primitive. + + @method createUmlObject + @param {Object} primitive primitive uml. + */ + createUmlObject(primitive) { + switch (primitive.$type) { + case 'STORMCASE.UML.cod.ActiveObject, UMLCOD': + return FdUmlActiveObject.create({ primitive }); + + case 'STORMCASE.UML.cod.NarLink, UMLCOD': + return FdUmlNAryAssociation.create({ primitive }); + + case 'STORMCASE.UML.cod.Instance, UMLCOD': + return FdUmlInstance.create({ primitive }); + + case 'STORMCASE.UML.cod.MultiObject, UMLCOD': + return FdUmlMultiObject.create({ primitive }); + + case 'STORMCASE.UML.Common.Note, UMLCommon': + return FdUmlNote.create({ primitive }); + + case 'STORMCASE.UML.cod.Inheritance, UMLCOD': + return FdUmlGeneralizationCod.create({ primitive }); + + case 'STORMCASE.UML.Common.NoteConnector, UMLCommon': + return FdUmlNoteConnector.create({ primitive }); + + case 'STORMCASE.UML.cod.QualifiedAggregationLink, UMLCOD': + return FdUmlQAggregation.create({ primitive }); + + case 'STORMCASE.UML.cod.QualifiedCompositionLink, UMLCOD': + return FdUmlQComposition.create({ primitive }); + + case 'STORMCASE.UML.cod.QualifiedLink, UMLCOD': + return FdUmlQAssociation.create({ primitive }); + + case 'STORMCASE.UML.cod.NaryLink, UMLCOD': + return FdUmlNAryAssociationConnector.create({ primitive }); + + case 'STORMCASE.UML.cod.AggregationLink, UMLCOD': + return FdUmlAggregationLink.create({ primitive }); + + case 'STORMCASE.UML.cod.Link, UMLCOD': + return FdUmlAssociationLink.create({ primitive }); + + case 'STORMCASE.UML.cod.CompositionLink, UMLCOD': + return FdUmlCompositionLink.create({ primitive }); + + case 'STORMCASE.UML.cod.DesignPatternConnector, UMLCOD': + return FdUmlDesignPatternConnector.create({ primitive }); + + case 'STORMCASE.UML.cod.DesignPattern, UMLCOD': + return FdUmlDesignPattern.create({ primitive }); + + case 'STORMCASE.UML.cod.Actor, UMLCOD': + return FdUmlUsecaseActor.create({ primitive }); + + case 'STORMCASE.UML.cod.ForwardFlatMessage, UMLCOD': + return FdUmlForwardFlatMessage.create({ primitive }); + + case 'STORMCASE.UML.cod.ForwardNestedMessage, UMLCOD': + return FdUmlForwardNestedMessage.create({ primitive }); + + case 'STORMCASE.UML.cod.ForwardAsyncMessage, UMLCOD': + return FdUmlForwardAsyncMessage.create({ primitive }); + + case 'STORMCASE.UML.cod.BackwardNestedMessage, UMLCOD': + return FdUmlBackwardNestedMessage.create({ primitive }); + + case 'STORMCASE.UML.cod.BackwardFlatMessage, UMLCOD': + return FdUmlBackwardFlatMessage.create({ primitive }); + + case 'STORMCASE.UML.cod.BackwardAsyncMessage, UMLCOD': + return FdUmlBackwardAsyncMessage.create({ primitive }); + + default: + throw new Error(`Unknown primitive type: '${primitive.$type}'.`); + } + } }); defineBaseModel(Model); export default Model; diff --git a/addon/models/fd-dev-uml-dpd.js b/addon/models/fd-dev-uml-dpd.js index 8a99a41f9..3757efd3e 100644 --- a/addon/models/fd-dev-uml-dpd.js +++ b/addon/models/fd-dev-uml-dpd.js @@ -1,5 +1,6 @@ import { computed } from '@ember/object'; import { A } from '@ember/array'; +import { isNone } from '@ember/utils'; import { Model as DevUMLDPDMixin, defineBaseModel } from '../mixins/regenerated/models/fd-dev-uml-dpd'; import DPDModel from './fd-dpd'; @@ -26,51 +27,56 @@ let Model = DPDModel.extend(DevUMLDPDMixin, { for (let i = 0; i < primitives.length; i++) { let primitive = primitives[i]; - switch (primitive.$type) { - case 'STORMCASE.UML.Common.Note, UMLCommon': - result.pushObject(FdUmlNote.create({ primitive })); - break; - - case 'STORMCASE.UML.Common.NoteConnector, UMLCommon': - result.pushObject(FdUmlNoteConnector.create({ primitive })); - break; - - case 'STORMCASE.UML.dpd.Dependency, UMLDPD': - result.pushObject(FdUmlDependency.create({ primitive })); - break; - - case 'STORMCASE.UML.dpd.Connection, UMLDPD': - result.pushObject(FdUmlConnection.create({ primitive })); - break; - - case 'STORMCASE.UML.dpd.ActiveDeploymentObject, UMLDPD': - result.pushObject(FdUmlDeploymentActiveObject.create({ primitive })); - break; - - case 'STORMCASE.UML.dpd.DeploymentObject, UMLDPD': - result.pushObject(FdUmlInstance.create({ primitive })); - break; - - case 'STORMCASE.UML.dpd.ComponentInstance, UMLDPD': - case 'STORMCASE.UML.dpd.Component, UMLDPD': - result.pushObject(FdUmlComponent.create({ primitive })); - break; - - case 'STORMCASE.UML.dpd.NodeInstance, UMLDPD': - case 'STORMCASE.UML.dpd.Node, UMLDPD': - result.pushObject(FdUmlNode.create({ primitive })); - break; - - case 'STORMCASE.UML.dpd.Interface, UMLDPD': //TODO need fix primitive 'Interface' TFS 169736 - break; - - default: - throw new Error(`Unknown primitive type: '${primitive.$type}'.`); + let umlObject = this.createUmlObject(primitive); + if (!isNone(umlObject)) { + result.pushObject(umlObject); } } return result; }), + + /** + Create uml object by primitive. + + @method createUmlObject + @param {Object} primitive primitive uml. + */ + createUmlObject(primitive) { + switch (primitive.$type) { + case 'STORMCASE.UML.Common.Note, UMLCommon': + return FdUmlNote.create({ primitive }); + + case 'STORMCASE.UML.Common.NoteConnector, UMLCommon': + return FdUmlNoteConnector.create({ primitive }); + + case 'STORMCASE.UML.dpd.Dependency, UMLDPD': + return FdUmlDependency.create({ primitive }); + + case 'STORMCASE.UML.dpd.Connection, UMLDPD': + return FdUmlConnection.create({ primitive }); + + case 'STORMCASE.UML.dpd.ActiveDeploymentObject, UMLDPD': + return FdUmlDeploymentActiveObject.create({ primitive }); + + case 'STORMCASE.UML.dpd.DeploymentObject, UMLDPD': + return FdUmlInstance.create({ primitive }); + + case 'STORMCASE.UML.dpd.ComponentInstance, UMLDPD': + case 'STORMCASE.UML.dpd.Component, UMLDPD': + return FdUmlComponent.create({ primitive }); + + case 'STORMCASE.UML.dpd.NodeInstance, UMLDPD': + case 'STORMCASE.UML.dpd.Node, UMLDPD': + return FdUmlNode.create({ primitive }); + + case 'STORMCASE.UML.dpd.Interface, UMLDPD': //TODO need fix primitive 'Interface' TFS 169736 + return; + + default: + throw new Error(`Unknown primitive type: '${primitive.$type}'.`); + } + } }); defineBaseModel(Model); export default Model; diff --git a/addon/models/fd-dev-uml-sd.js b/addon/models/fd-dev-uml-sd.js index d68847eaa..d38416aca 100644 --- a/addon/models/fd-dev-uml-sd.js +++ b/addon/models/fd-dev-uml-sd.js @@ -1,5 +1,6 @@ import { computed } from '@ember/object'; import { A } from '@ember/array'; +import { isNone } from '@ember/utils'; import { Model as DevUMLSDMixin, defineBaseModel @@ -30,56 +31,58 @@ let Model = SDModel.extend(DevUMLSDMixin, { for (let i = 0; i < primitives.length; i++) { let primitive = primitives[i]; - switch (primitive.$type) { - case 'STORMCASE.UML.Common.Note, UMLCommon': - result.pushObject(FdUmlNote.create({ primitive })); - break; + let umlObject = this.createUmlObject(primitive); + if (!isNone(umlObject)) { + result.pushObject(umlObject); + } + } - case 'STORMCASE.UML.Common.NoteConnector, UMLCommon': - result.pushObject(FdUmlNoteConnector.create({ primitive })); - break; + return result; + }), - case 'STORMCASE.UML.sd.Actor, UMLSD': - result.pushObject(FdUmlSequenceActor.create({ primitive })); - break; + /** + Create uml object by primitive. - case 'STORMCASE.UML.sd.InactiveObject, UMLSD': - result.pushObject(FdUmlSequenceObject.create({ primitive })); - break; + @method createUmlObject + @param {Object} primitive primitive uml. + */ + createUmlObject(primitive) { + switch (primitive.$type) { + case 'STORMCASE.UML.Common.Note, UMLCommon': + return FdUmlNote.create({ primitive }); - case 'STORMCASE.UML.sd.ActiveObject, UMLSD': - result.pushObject(FdUmlSequenceActiveObject.create({ primitive })); - break; + case 'STORMCASE.UML.Common.NoteConnector, UMLCommon': + return FdUmlNoteConnector.create({ primitive }); - case 'STORMCASE.UML.sd.Terminator, UMLSD': - result.pushObject(FdUmlTerminator.create({ primitive })); - break; + case 'STORMCASE.UML.sd.Actor, UMLSD': + return FdUmlSequenceActor.create({ primitive }); - case 'STORMCASE.UML.sd.ProcedureCall, UMLSD': - result.pushObject(FdUmlProcedureCall.create({ primitive })); - break; + case 'STORMCASE.UML.sd.InactiveObject, UMLSD': + return FdUmlSequenceObject.create({ primitive }); - case 'STORMCASE.UML.sd.FlatMessage, UMLSD': - result.pushObject(FdUmlFlatMsg.create({ primitive })); - break; + case 'STORMCASE.UML.sd.ActiveObject, UMLSD': + return FdUmlSequenceActiveObject.create({ primitive }); - case 'STORMCASE.UML.sd.AsyncMessage, UMLSD': - result.pushObject(FdUmlAsyncMsg.create({ primitive })); - break; + case 'STORMCASE.UML.sd.Terminator, UMLSD': + return FdUmlTerminator.create({ primitive }); - case 'STORMCASE.UML.sd.ReturnMessage, UMLSD': - result.pushObject(FdUmlReturnMsg.create({ primitive })); - break; + case 'STORMCASE.UML.sd.ProcedureCall, UMLSD': + return FdUmlProcedureCall.create({ primitive }); - default: + case 'STORMCASE.UML.sd.FlatMessage, UMLSD': + return FdUmlFlatMsg.create({ primitive }); - //throw new Error(`Unknown primitive type: '${primitive.$type}'.`); - break; - } - } + case 'STORMCASE.UML.sd.AsyncMessage, UMLSD': + return FdUmlAsyncMsg.create({ primitive }); - return result; - }), + case 'STORMCASE.UML.sd.ReturnMessage, UMLSD': + return FdUmlReturnMsg.create({ primitive }); + + default: + //throw new Error(`Unknown primitive type: '${primitive.$type}'.`); + return; + } + } }); defineBaseModel(Model); diff --git a/addon/models/fd-dev-uml-std.js b/addon/models/fd-dev-uml-std.js index cf5155e7a..346c31d11 100644 --- a/addon/models/fd-dev-uml-std.js +++ b/addon/models/fd-dev-uml-std.js @@ -1,5 +1,6 @@ import { computed } from '@ember/object'; import { A } from '@ember/array'; +import { isNone } from '@ember/utils'; import { Model as DevUMLSTDMixin, defineBaseModel } from '../mixins/regenerated/models/fd-dev-uml-std'; import STDModel from './fd-std'; @@ -28,63 +29,66 @@ let Model = STDModel.extend(DevUMLSTDMixin, { for (let i = 0; i < primitives.length; i++) { let primitive = primitives[i]; - switch (primitive.$type) { - case 'STORMCASE.UML.Common.Note, UMLCommon': - result.pushObject(FdUmlNote.create({ primitive })); - break; - - case 'STORMCASE.UML.Common.NoteConnector, UMLCommon': - result.pushObject(FdUmlNoteConnector.create({ primitive })); - break; - - case 'STORMCASE.UML.std.CompositeState, UMLSTD': - case 'STORMCASE.UML.std.StateEx, UMLSTD': - result.pushObject(FdUmlStateEx.create({ primitive })); - break; - - case 'STORMCASE.UML.std.Class, UMLSTD': - result.pushObject(FdUmlStdClass.create({ primitive })); - break; - - case 'STORMCASE.UML.std.State, UMLSTD': - result.pushObject(FdUmlState.create({ primitive })); - break; - - case 'STORMCASE.UML.std.ComplexTransitionV, UMLSTD': - case 'STORMCASE.UML.std.ComplexTransitionH, UMLSTD': - result.pushObject(FdUmlComplexTransition.create({ primitive })); - break; - - case 'STORMCASE.UML.std.Transition, UMLSTD': - result.pushObject(FdUmlConnection.create({ primitive })); - break; - - case 'STORMCASE.UML.std.DeepHistory, UMLSTD': - case 'STORMCASE.UML.std.History, UMLSTD': - result.pushObject(FdUmlHistory.create({ primitive })); - break; - - case 'STORMCASE.UML.std.StartState, UMLSTD': - result.pushObject(FdUmlStartState.create({ primitive })); - break; - - case 'STORMCASE.UML.std.FinalState, UMLSTD': - result.pushObject(FdUmlFinalState.create({ primitive })); - break; - - case 'STORMCASE.UML.std.EventMessage, UMLSTD': // TODO need fix primitive EventMessage 169738 - break; - - case 'STORMCASE.UML.std.ConcurrentState, UMLSTD': // TODO need create primitive ConcurrentState 169738 - break; - - default: - throw new Error(`Unknown primitive type: '${primitive.$type}'.`); + let umlObject = this.createUmlObject(primitive); + if (!isNone(umlObject)) { + result.pushObject(umlObject); } } return result; }), + + /** + Create uml object by primitive. + + @method createUmlObject + @param {Object} primitive primitive uml. + */ + createUmlObject(primitive) { + switch (primitive.$type) { + case 'STORMCASE.UML.Common.Note, UMLCommon': + return FdUmlNote.create({ primitive }); + + case 'STORMCASE.UML.Common.NoteConnector, UMLCommon': + return FdUmlNoteConnector.create({ primitive }); + + case 'STORMCASE.UML.std.CompositeState, UMLSTD': + case 'STORMCASE.UML.std.StateEx, UMLSTD': + return FdUmlStateEx.create({ primitive }); + + case 'STORMCASE.UML.std.Class, UMLSTD': + return FdUmlStdClass.create({ primitive }); + + case 'STORMCASE.UML.std.State, UMLSTD': + return FdUmlState.create({ primitive }); + + case 'STORMCASE.UML.std.ComplexTransitionV, UMLSTD': + case 'STORMCASE.UML.std.ComplexTransitionH, UMLSTD': + return FdUmlComplexTransition.create({ primitive }); + + case 'STORMCASE.UML.std.Transition, UMLSTD': + return FdUmlConnection.create({ primitive }); + + case 'STORMCASE.UML.std.DeepHistory, UMLSTD': + case 'STORMCASE.UML.std.History, UMLSTD': + return FdUmlHistory.create({ primitive }); + + case 'STORMCASE.UML.std.StartState, UMLSTD': + return FdUmlStartState.create({ primitive }); + + case 'STORMCASE.UML.std.FinalState, UMLSTD': + return FdUmlFinalState.create({ primitive }); + + case 'STORMCASE.UML.std.EventMessage, UMLSTD': // TODO need fix primitive EventMessage 169738 + return; + + case 'STORMCASE.UML.std.ConcurrentState, UMLSTD': // TODO need create primitive ConcurrentState 169738 + return; + + default: + throw new Error(`Unknown primitive type: '${primitive.$type}'.`); + } + } }); defineBaseModel(Model); export default Model; diff --git a/addon/models/fd-dev-uml-ucd.js b/addon/models/fd-dev-uml-ucd.js index d4df40471..dfc7fe34a 100644 --- a/addon/models/fd-dev-uml-ucd.js +++ b/addon/models/fd-dev-uml-ucd.js @@ -1,6 +1,6 @@ import { computed } from '@ember/object'; import { A } from '@ember/array'; - +import { isNone } from '@ember/utils'; import { Model as DevUMLUCDMixin, defineBaseModel @@ -31,39 +31,43 @@ let Model = UCDModel.extend(DevUMLUCDMixin, { for (let i = 0; i < primitives.length; i++) { let primitive = primitives[i]; - switch (primitive.$type) { - case 'STORMCASE.UML.Common.Note, UMLCommon': - result.pushObject(FdUmlNote.create({ primitive })); - break; - case 'STORMCASE.UML.Common.NoteConnector, UMLCommon': - result.pushObject(FdUmlNoteConnector.create({ primitive })); - break; - case 'STORMCASE.UML.ucd.Actor, UMLUCD': - result.pushObject(FdUmlUsecaseActor.create({ primitive })); - break; - case 'STORMCASE.UML.ucd.UseCase, UMLUCD': - result.pushObject(FdUmlUseCase.create({ primitive })); - break; - case 'STORMCASE.UML.ucd.UndirectedAssoc, UMLUCD': - result.pushObject(FdUmlUnDirectedAssociation.create({ primitive })); - break; - case 'STORMCASE.UML.ucd.DirectedAssoc, UMLUCD': - result.pushObject(FdUmlDirectedAssociation.create({ primitive })); - break; - case 'STORMCASE.UML.ucd.Dependency, UMLUCD': - result.pushObject(FdUmlDependency.create({ primitive })); - break; - case 'STORMCASE.UML.ucd.Generalization, UMLUCD': - result.pushObject(FdUmlUsecaseGeneralization.create({ primitive })); - break; - case 'STORMCASE.UML.ucd.Boundary, UMLUCD': - result.pushObject(FdUmlPartition.create({ primitive })); - break; + let umlObject = this.createUmlObject(primitive); + if (!isNone(umlObject)) { + result.pushObject(umlObject); } } return result; }), + + /** + Create uml object by primitive. + + @method createUmlObject + @param {Object} primitive primitive uml. + */ + createUmlObject(primitive) { + switch (primitive.$type) { + case 'STORMCASE.UML.Common.Note, UMLCommon': + return FdUmlNote.create({ primitive }); + case 'STORMCASE.UML.Common.NoteConnector, UMLCommon': + return FdUmlNoteConnector.create({ primitive }); + case 'STORMCASE.UML.ucd.Actor, UMLUCD': + return FdUmlUsecaseActor.create({ primitive }); + case 'STORMCASE.UML.ucd.UseCase, UMLUCD': + return FdUmlUseCase.create({ primitive }); + case 'STORMCASE.UML.ucd.UndirectedAssoc, UMLUCD': + return FdUmlUnDirectedAssociation.create({ primitive }); + case 'STORMCASE.UML.ucd.DirectedAssoc, UMLUCD': + return FdUmlDirectedAssociation.create({ primitive }); + case 'STORMCASE.UML.ucd.Dependency, UMLUCD': + return FdUmlDependency.create({ primitive }); + case 'STORMCASE.UML.ucd.Generalization, UMLUCD': + return FdUmlUsecaseGeneralization.create({ primitive }); + case 'STORMCASE.UML.ucd.Boundary, UMLUCD': + return FdUmlPartition.create({ primitive }); + } + } }); defineBaseModel(Model); export default Model; diff --git a/addon/templates/components/fd-attribute-table.hbs b/addon/templates/components/fd-attribute-table.hbs index bd568fddd..6b4c5ea8b 100644 --- a/addon/templates/components/fd-attribute-table.hbs +++ b/addon/templates/components/fd-attribute-table.hbs @@ -37,7 +37,7 @@ {{/each}} {{#if editButtonInRow}}
diff --git a/addon/templates/components/fd-uml-diagram-editor.hbs b/addon/templates/components/fd-uml-diagram-editor.hbs index 556569f6d..48f84b73b 100644 --- a/addon/templates/components/fd-uml-diagram-editor.hbs +++ b/addon/templates/components/fd-uml-diagram-editor.hbs @@ -1,6 +1,6 @@ {{ fd-uml-diagram - primitives=model.primitives + model=model isLinkAdding=isLinkAdding paper=paper blankPointerClick=(action "blankPointerClick") diff --git a/addon/utils/fd-attributes-for-tree.js b/addon/utils/fd-attributes-for-tree.js index d4713cdd4..c3d940b27 100644 --- a/addon/utils/fd-attributes-for-tree.js +++ b/addon/utils/fd-attributes-for-tree.js @@ -32,7 +32,7 @@ let getDataForBuildTree = function(store, id) { for (let i = 0; i < inheritanceData.length; i++) { let inheritance = inheritanceData[i]; let parentStereotype = inheritance.get('parent.stereotype'); - if (isNone(parentStereotype)) { + if (isNone(parentStereotype) || parentStereotype === '«implementation»') { parentID = inheritance.get('parent.id'); classData.pushObjects(recordsDevClass.filterBy('id', parentID)); associationData.pushObjects(recordsAssociation.filterBy('endClass.id', parentID)); diff --git a/addon/utils/fd-update-class-diagram.js b/addon/utils/fd-update-class-diagram.js index b1b1a28b0..da20f629c 100644 --- a/addon/utils/fd-update-class-diagram.js +++ b/addon/utils/fd-update-class-diagram.js @@ -150,7 +150,7 @@ function updateDependencysOfClassName(store, currentProjectContext, devClass) { promises.pushObjects(updatedViews); promises.pushObject(diagram); - }); + }); return promises; } @@ -174,21 +174,25 @@ function getUpdatedViews(store, primitives, className, newClassName) { views.forEach((view) => { let definitionArray = view.get('definitionArray'); let definitionArrayUpdated = false; + let definitionDelete = A(); definitionArray.forEach(function(definition) { let defName = definition.get('name'); if (defName.indexOf(`${name}.`) !== -1) { if (!newName) { - definitionArray.removeObject(definition); + definitionDelete.pushObject(definition); } else { let newDefName = definition.get('name').replace(`${name}.`, `${newName}.`); definition.set('name', newDefName); } - + definitionArrayUpdated = true; } }); if (definitionArrayUpdated) { + if (definitionDelete.length > 0) { + definitionArray.removeObjects(definitionDelete); + } //For trigger computed propherty in fd-dev-view model. view.get('definitionArray');