diff --git a/CHANGELOG.adoc b/CHANGELOG.adoc index e69f16dfc4..b10e7ea741 100644 --- a/CHANGELOG.adoc +++ b/CHANGELOG.adoc @@ -93,6 +93,7 @@ image:doc/screenshots/insideLabelPositions.png[Inside label positions, 70%] - https://github.com/eclipse-sirius/sirius-web/issues/3623[#3623] [form] Remove unused form payload - https://github.com/eclipse-sirius/sirius-web/issues/3627[#3627] [form] Remove unused mutation in form - https://github.com/eclipse-sirius/sirius-web/issues/3606[#3606] [test] Improve error handling in ExecuteEditingContextFunctionRunner and ExecuteEditingContextFunctionEventHandler +- https://github.com/eclipse-sirius/sirius-web/issues/3464[#3464] [view] Improve i18n support for domain and view forms == v2024.5.0 diff --git a/integration-tests/cypress/e2e/project/deck/deck.cy.ts b/integration-tests/cypress/e2e/project/deck/deck.cy.ts index bddc61ecd1..e696798bae 100644 --- a/integration-tests/cypress/e2e/project/deck/deck.cy.ts +++ b/integration-tests/cypress/e2e/project/deck/deck.cy.ts @@ -115,7 +115,7 @@ describe('Verify the Deck Representation', () => { }); it('We create a new daily tag to verify that the deck is properly refreshed', () => { const explorer = new Explorer(); - explorer.createObject('Daily Project Dev', 'Tag'); + explorer.createObject('Daily Project Dev', 'ownedTags-TaskTag'); explorer.select('::'); const details = new Details(); details.getTextField('Prefix').type('daily{enter}'); diff --git a/integration-tests/cypress/e2e/project/details/form.cy.ts b/integration-tests/cypress/e2e/project/details/form.cy.ts index 002537e909..4efc1d47fc 100644 --- a/integration-tests/cypress/e2e/project/details/form.cy.ts +++ b/integration-tests/cypress/e2e/project/details/form.cy.ts @@ -11,47 +11,47 @@ * Obeo - initial API and implementation *******************************************************************************/ -import { Project } from "../../../pages/Project"; -import { Flow } from "../../../usecases/Flow"; -import { Studio } from "../../../usecases/Studio"; -import { Details } from "../../../workbench/Details"; -import { Explorer } from "../../../workbench/Explorer"; +import { Project } from '../../../pages/Project'; +import { Flow } from '../../../usecases/Flow'; +import { Studio } from '../../../usecases/Studio'; +import { Details } from '../../../workbench/Details'; +import { Explorer } from '../../../workbench/Explorer'; describe('/projects/:projectId/edit - Form', () => { context('Given a Form Description', () => { let studioProjectId: string = ''; before(() => - new Studio().createBlankStudioProjectWithView().then((createdProjectData) => { - studioProjectId = createdProjectData.projectId; - new Project().visit(createdProjectData.projectId); - const explorer = new Explorer(); - explorer.expand('ViewDocument'); - explorer.expand('View'); - explorer.createObject('View', 'Form Description'); - explorer.select('New Form Description'); - const details = new Details(); - details.getTextField('Domain Type').type('flow::System'); - details.getTextField('Name').type('{selectall}').type('ReadOnlyRepresentation'); - details.getTextField('Title Expression').type('{selectall}').type('ReadOnlyRepresentation'); - explorer.expand('ReadOnlyRepresentation'); - explorer.expand('PageDescription'); - explorer.select('GroupDescription') - details.getTextField('Name').type('Group ReadOnly{enter}'); - explorer.createObject('Group ReadOnly', 'Widgets Button Description'); - details.getTextField('Button Label Expression').type('Test Button'); - details.getTextField('Is Enabled Expression').type('aql:self.temperature==0'); - explorer.createObject('Group ReadOnly', 'Widgets Flexbox Container Description'); - details.getTextField('Name').invoke('text').should('eq', ''); - details.getTextField('Name').type('Flexbox Container'); - details.getTextField('Label Expression').type('Test flexbox container'); - details.getTextField('Is Enabled Expression').type("aql:self.name='NewSystem'"); + new Studio().createBlankStudioProjectWithView().then((createdProjectData) => { + studioProjectId = createdProjectData.projectId; + new Project().visit(createdProjectData.projectId); + const explorer = new Explorer(); + explorer.expand('ViewDocument'); + explorer.expand('View'); + explorer.createObject('View', 'descriptions-FormDescription'); + explorer.select('New Form Description'); + const details = new Details(); + details.getTextField('Domain Type').type('flow::System'); + details.getTextField('Name').type('{selectall}').type('ReadOnlyRepresentation'); + details.getTextField('Title Expression').type('{selectall}').type('ReadOnlyRepresentation'); + explorer.expand('ReadOnlyRepresentation'); + explorer.expand('Page Description'); + explorer.select('Group Description'); + details.getTextField('Name').type('Group ReadOnly{enter}'); + explorer.createObject('Group ReadOnly', 'children-ButtonDescription'); + details.getTextField('Button Label Expression').type('Test Button'); + details.getTextField('Is Enabled Expression').type('aql:self.temperature==0'); + explorer.createObject('Group ReadOnly', 'children-FlexboxContainerDescription'); + details.getTextField('Name').invoke('text').should('eq', ''); + details.getTextField('Name').type('Flexbox Container'); + details.getTextField('Label Expression').type('Test flexbox container'); + details.getTextField('Is Enabled Expression').type("aql:self.name='NewSystem'"); - explorer.createObject('Flexbox Container', 'Textfield Description'); - details.getTextField('Name').invoke('text').should('eq', ''); - details.getTextField('Label Expression').type('Name'); - details.getTextField('Value Expression').type('aql:self.name'); - }) + explorer.createObject('Flexbox Container', 'children-TextfieldDescription'); + details.getTextField('Name').invoke('text').should('eq', ''); + details.getTextField('Label Expression').type('Name'); + details.getTextField('Value Expression').type('aql:self.name'); + }) ); after(() => cy.deleteProject(studioProjectId)); @@ -68,16 +68,16 @@ describe('/projects/:projectId/edit - Form', () => { afterEach(() => cy.deleteProject(flowProjectId)); it('check widget read-only mode in form', () => { - const explorer = new Explorer(); - explorer.expand('FlowNewModel'); - explorer.createRepresentation('NewSystem', 'ReadOnlyRepresentation', 'ReadOnlyRepresentation'); - cy.getByTestId('Test Button').should('exist').should('not.be.disabled'); - explorer.select('NewSystem'); - const details = new Details(); - details.getTextField('Temperature').type('{selectall}2{enter}'); - cy.getByTestId('Test Button').should('be.disabled'); - details.getTextField('Temperature').type('{selectall}0{enter}'); - cy.getByTestId('Test Button').should('not.be.disabled'); + const explorer = new Explorer(); + explorer.expand('FlowNewModel'); + explorer.createRepresentation('NewSystem', 'ReadOnlyRepresentation', 'ReadOnlyRepresentation'); + cy.getByTestId('Test Button').should('exist').should('not.be.disabled'); + explorer.select('NewSystem'); + const details = new Details(); + details.getTextField('Temperature').type('{selectall}2{enter}'); + cy.getByTestId('Test Button').should('be.disabled'); + details.getTextField('Temperature').type('{selectall}0{enter}'); + cy.getByTestId('Test Button').should('not.be.disabled'); }); it('check the flexbox read-only mode is dispatched to children', () => { @@ -90,7 +90,5 @@ describe('/projects/:projectId/edit - Form', () => { cy.getByTestId('page').findByTestId('input-Name').should('be.disabled'); }); }); - - }); }); diff --git a/integration-tests/cypress/e2e/project/diagrams/collapse.cy.ts b/integration-tests/cypress/e2e/project/diagrams/collapse.cy.ts index 425451c9b8..619c35d298 100644 --- a/integration-tests/cypress/e2e/project/diagrams/collapse.cy.ts +++ b/integration-tests/cypress/e2e/project/diagrams/collapse.cy.ts @@ -40,7 +40,7 @@ describe('Diagram - collapsible node', () => { cy.get('[title="domain::Domain"]').then(($div) => { domainName = $div.data().testid; explorer.expand(domainName); - explorer.createObject('Entity1', 'Relation'); + explorer.createObject('Entity1', 'relations-Relation'); details.getCheckBox('Containment').check(); details.openReferenceWidgetOptions('Target Type'); details.selectReferenceWidgetOption('Entity2'); @@ -53,7 +53,7 @@ describe('Diagram - collapsible node', () => { details.selectReferenceWidgetOption('Entity2 Node'); explorer.expand('Entity1 Node'); explorer.expand('aql:self.name'); - explorer.select('InsideLabelStyle'); + explorer.select('Inside Label Style 14'); details.getCheckBox('With Header').check(); details.getCheckBox('Display Header Separator').check(); }); @@ -77,11 +77,15 @@ describe('Diagram - collapsible node', () => { afterEach(() => cy.deleteProject(instanceProjectId)); it('Then a collapsed node does not display its header line', () => { + cy.on('uncaught:exception', (err) => + err.message.includes('ResizeObserver loop limit exceeded') ? false : undefined + ); + const explorer = new Explorer(); const diagram = new Diagram(); const details = new Details(); - explorer.createObject('Root', 'Entity1s Entity1'); - explorer.createObject('Entity1', 'Relation Entity2'); + explorer.createObject('Root', 'entity1s-Entity1'); + explorer.createObject('Entity1', 'relation-Entity2'); explorer.select('Entity1'); details.getTextField('Name').type('Entity1{enter}'); diagram.fitToScreen(); diff --git a/integration-tests/cypress/e2e/project/diagrams/custom-shape.cy.ts b/integration-tests/cypress/e2e/project/diagrams/custom-shape.cy.ts index e5542ede14..c604529ffd 100644 --- a/integration-tests/cypress/e2e/project/diagrams/custom-shape.cy.ts +++ b/integration-tests/cypress/e2e/project/diagrams/custom-shape.cy.ts @@ -29,14 +29,14 @@ describe('/projects/:projectId/edit - Custom Shape', () => { cy.get('[data-testid$=" Diagram Description"]').dblclick(); cy.getByTestId('Entity1 Node').dblclick(); - cy.getByTestId('RectangularNodeStyleDescription-more').click(); + cy.getByTestId('Rectangular Node Style Description 3-more').click(); cy.getByTestId('delete').click(); cy.getByTestId('Entity1 Node-more').click(); cy.getByTestId('new-object').click(); cy.getByTestId('childCreationDescription').children('[role="button"]').invoke('text').should('have.length.gt', 1); cy.getByTestId('childCreationDescription').click(); cy.getByTestId('childCreationDescription') - .get('[data-value="Ellipse Node Style Description"]') + .get('[data-value="style-EllipseNodeStyleDescription"]') .should('exist') .click(); cy.getByTestId('create-object').click(); @@ -73,7 +73,7 @@ describe('/projects/:projectId/edit - Custom Shape', () => { cy.getByTestId('new-object').click(); cy.getByTestId('childCreationDescription').children('[role="button"]').invoke('text').should('have.length.gt', 1); cy.getByTestId('childCreationDescription').click(); - cy.getByTestId('childCreationDescription').get('[data-value="Entity1s Entity1"]').should('exist').click(); + cy.getByTestId('childCreationDescription').get('[data-value="entity1s-Entity1"]').should('exist').click(); cy.getByTestId('create-object').click(); cy.getByTestId('Ellipse - ').should('have.css', 'border-radius', '50%'); diff --git a/integration-tests/cypress/e2e/project/diagrams/diagram-contextual-palette.cy.js b/integration-tests/cypress/e2e/project/diagrams/diagram-contextual-palette.cy.js index f268880cf4..ea1ae8d2fb 100644 --- a/integration-tests/cypress/e2e/project/diagrams/diagram-contextual-palette.cy.js +++ b/integration-tests/cypress/e2e/project/diagrams/diagram-contextual-palette.cy.js @@ -106,22 +106,22 @@ describe('/projects/:projectId/edit - Robot Diagram', () => { cy.getByTestId('treeitem-contextmenu').findByTestId('rename-tree-item').click(); cy.getByTestId('name-edit').type('Diagram Description{enter}'); - cy.createChildObject('DiagramPalette', 'Diagram Tool Section'); + cy.createChildObject('Palette', 'toolSections-DiagramToolSection'); cy.getByTestId('Tool Section').click(); cy.getByTestId('Name').type('{selectAll}section1'); - cy.createChildObject('DiagramPalette', 'Diagram Tool Section'); + cy.createChildObject('Palette', 'toolSections-DiagramToolSection'); cy.getByTestId('Tool Section').click(); cy.getByTestId('Name').type('{selectAll}section2'); - cy.createChildObject('section1', 'Node Tool'); + cy.createChildObject('section1', 'nodeTools-NodeTool'); cy.getByTestId('Tool').click(); cy.getByTestId('Name').type('{selectAll}tool1_section1'); - cy.createChildObject('section1', 'Node Tool'); + cy.createChildObject('section1', 'nodeTools-NodeTool'); cy.getByTestId('Tool').click(); cy.getByTestId('Name').type('{selectAll}tool2_section1'); - cy.createChildObject('section2', 'Node Tool'); + cy.createChildObject('section2', 'nodeTools-NodeTool'); cy.getByTestId('Tool').click(); cy.getByTestId('Name').type('{selectAll}tool1_section2'); - cy.createChildObject('section2', 'Node Tool'); + cy.createChildObject('section2', 'nodeTools-NodeTool'); cy.getByTestId('Tool').click(); cy.getByTestId('Name').type('{selectAll}tool2_section2'); @@ -270,7 +270,6 @@ describe('/projects/:projectId/edit - Robot Diagram', () => { cy.getByTestId('confirmation-dialog').should('not.exist'); }); - it('diagram palette is closed once element palette is opened', () => { createFlowReactFlowDiagram(); diff --git a/integration-tests/cypress/e2e/project/diagrams/diagram-label.cy.ts b/integration-tests/cypress/e2e/project/diagrams/diagram-label.cy.ts index 4df07e066f..ba36d94568 100644 --- a/integration-tests/cypress/e2e/project/diagrams/diagram-label.cy.ts +++ b/integration-tests/cypress/e2e/project/diagrams/diagram-label.cy.ts @@ -45,18 +45,18 @@ describe('Diagram - inside outside labels', () => { explorer.expand('Entity1 Node'); explorer.select('aql:self.name'); details.getTextField('Label Expression').type('{selectAll}InsideLabelNode1{enter}'); - explorer.createObject('Entity1 Node', 'Outside Label Description'); + explorer.createObject('Entity1 Node', 'outsideLabels-OutsideLabelDescription'); explorer.select('aql:self.name'); details.getTextField('Label Expression').type('{selectAll}OutsideLabelNode1{enter}'); explorer.collapse('Entity1 Node'); explorer.expand('Entity2 Node'); explorer.select('aql:self.name'); details.getTextField('Label Expression').type('{selectAll}InsideLabelNode2{enter}'); - explorer.createObject('Entity2 Node', 'Outside Label Description'); + explorer.createObject('Entity2 Node', 'outsideLabels-OutsideLabelDescription'); explorer.select('aql:self.name'); details.getTextField('Label Expression').type('{selectAll}OutsideLabelNode2{enter}'); - explorer.delete('RectangularNodeStyleDescription'); - explorer.createObject('Entity2 Node', 'Style Image'); + explorer.delete('Rectangular Node Style Description 3'); + explorer.createObject('Entity2 Node', 'style-ImageNodeStyleDescription'); details.selectValue('Shape', 'camera'); }); } @@ -81,8 +81,8 @@ describe('Diagram - inside outside labels', () => { it('Then inside and outside label are display for both nodes', () => { const explorer = new Explorer(); const diagram = new Diagram(); - explorer.createObject('Root', 'Entity1s Entity1'); - explorer.createObject('Root', 'Entity2s Entity2'); + explorer.createObject('Root', 'entity1s-Entity1'); + explorer.createObject('Root', 'entity2s-Entity2'); diagram.getNodes('diagram', 'InsideLabelNode1').findByTestId('Label - InsideLabelNode1').should('exist'); diagram.getNodes('diagram', 'InsideLabelNode1').findByTestId('Label - OutsideLabelNode1').should('exist'); @@ -140,7 +140,7 @@ describe('Diagram - inside outside labels', () => { const explorer = new Explorer(); const diagram = new Diagram(); const details = new Details(); - explorer.createObject('Root', 'Entity1s Entity1'); + explorer.createObject('Root', 'entity1s-Entity1'); details.getTextField('Name').type('small{enter}'); diagram.fitToScreen(); let initialWidth: number; @@ -218,7 +218,7 @@ describe('Diagram - inside outside labels', () => { const explorer = new Explorer(); const diagram = new Diagram(); const details = new Details(); - explorer.createObject('Root', 'Entity1s Entity1'); + explorer.createObject('Root', 'entity1s-Entity1'); details.getTextField('Name').type('small{enter}'); diagram.fitToScreen(); let initialWidth: number; @@ -298,7 +298,7 @@ describe('Diagram - inside outside labels', () => { const explorer = new Explorer(); const diagram = new Diagram(); const details = new Details(); - explorer.createObject('Root', 'Entity1s Entity1'); + explorer.createObject('Root', 'entity1s-Entity1'); details.getTextField('Name').type('small{enter}'); diagram.fitToScreen(); let initialWidth: number; @@ -348,7 +348,7 @@ describe('Diagram - inside outside labels', () => { explorer.expand(`${domainName} Diagram Description`); explorer.expand('Entity1 Node'); explorer.delete('aql:self.name'); - explorer.createObject('Entity1 Node', 'Outside Label Description'); + explorer.createObject('Entity1 Node', 'outsideLabels-OutsideLabelDescription'); }); } }); @@ -373,7 +373,7 @@ describe('Diagram - inside outside labels', () => { const explorer = new Explorer(); const diagram = new Diagram(); const details = new Details(); - explorer.createObject('Root', 'Entity1s Entity1'); + explorer.createObject('Root', 'entity1s-Entity1'); details.getTextField('Name').type('small{enter}'); diagram.fitToScreen(); let initialWidth: number; diff --git a/integration-tests/cypress/e2e/project/diagrams/direct-edit-label.cy.ts b/integration-tests/cypress/e2e/project/diagrams/direct-edit-label.cy.ts index 25a531bab0..8784590c4a 100644 --- a/integration-tests/cypress/e2e/project/diagrams/direct-edit-label.cy.ts +++ b/integration-tests/cypress/e2e/project/diagrams/direct-edit-label.cy.ts @@ -42,7 +42,7 @@ describe('Diagram - Direct edit label', () => { explorer.expand('View'); explorer.expand(`${domainName} Diagram Description`); explorer.expand('Entity1 Node'); - explorer.expand('NodePalette'); + explorer.expand('Node Palette'); explorer.delete('Edit Label'); explorer.select('LinkedTo Edge'); new Details().getTextField('Center Label Expression').type('Edge center{enter}'); @@ -69,7 +69,7 @@ describe('Diagram - Direct edit label', () => { it('Then we cannot perform the direct edition of the node without the direct edit tool', () => { const explorer = new Explorer(); - explorer.createObject('Root', 'Entity1s Entity1'); + explorer.createObject('Root', 'entity1s-Entity1'); explorer.getTreeItemByLabel('Entity1').click(); const details = new Details(); @@ -87,7 +87,7 @@ describe('Diagram - Direct edit label', () => { it('Then we can perform the edition of the label of the node with the direct edit tool', () => { const explorer = new Explorer(); - explorer.createObject('Root', 'Entity2s Entity2'); + explorer.createObject('Root', 'entity2s-Entity2'); explorer.getTreeItemByLabel('Entity2').click(); const details = new Details(); @@ -105,7 +105,7 @@ describe('Diagram - Direct edit label', () => { it('Then during edit triggering escape cancelled the current edition', () => { const explorer = new Explorer(); - explorer.createObject('Root', 'Entity2s Entity2'); + explorer.createObject('Root', 'entity2s-Entity2'); explorer.getTreeItemByLabel('Entity2').click(); const details = new Details(); @@ -124,7 +124,7 @@ describe('Diagram - Direct edit label', () => { it('Then we can set the correct name when typing directly', () => { const explorer = new Explorer(); - explorer.createObject('Root', 'Entity2s Entity2'); + explorer.createObject('Root', 'entity2s-Entity2'); const details = new Details(); details.getTextField('Name').type('Entity2{Enter}'); @@ -135,8 +135,8 @@ describe('Diagram - Direct edit label', () => { it('Then we can use direct edit on edge', () => { const explorer = new Explorer(); - explorer.createObject('Root', 'Entity1s Entity1'); - explorer.createObject('Root', 'Entity2s Entity2'); + explorer.createObject('Root', 'entity1s-Entity1'); + explorer.createObject('Root', 'entity2s-Entity2'); explorer.select('Entity2'); const details = new Details(); details.getTextField('Name').type('Entity2'); @@ -155,7 +155,7 @@ describe('Diagram - Direct edit label', () => { it('Then during the direct edition, the palette is hidden', () => { const explorer = new Explorer(); - explorer.createObject('Root', 'Entity2s Entity2'); + explorer.createObject('Root', 'entity2s-Entity2'); explorer.getTreeItemByLabel('Entity2').click(); const details = new Details(); @@ -198,7 +198,7 @@ describe('Diagram - Direct edit label', () => { explorer.select('LinkedTo Edge'); new Details().getTextField('Center Label Expression').type('Edge center{enter}'); explorer.expand('LinkedTo Edge'); - explorer.expand('EdgePalette'); + explorer.expand('Edge Palette'); explorer.delete('Edit Label'); }); } @@ -223,8 +223,8 @@ describe('Diagram - Direct edit label', () => { it('Then we can not use direct edit on edge', () => { const explorer = new Explorer(); - explorer.createObject('Root', 'Entity1s Entity1'); - explorer.createObject('Root', 'Entity2s Entity2'); + explorer.createObject('Root', 'entity1s-Entity1'); + explorer.createObject('Root', 'entity2s-Entity2'); explorer.select('Entity2'); const details = new Details(); details.getTextField('Name').type('Entity2'); diff --git a/integration-tests/cypress/e2e/project/diagrams/edges.cy.ts b/integration-tests/cypress/e2e/project/diagrams/edges.cy.ts index 14afff8bc7..5a7bcae2ca 100644 --- a/integration-tests/cypress/e2e/project/diagrams/edges.cy.ts +++ b/integration-tests/cypress/e2e/project/diagrams/edges.cy.ts @@ -12,9 +12,9 @@ *******************************************************************************/ import { Project } from '../../../pages/Project'; import { Studio } from '../../../usecases/Studio'; -import { Explorer } from '../../../workbench/Explorer'; import { Details } from '../../../workbench/Details'; import { Diagram } from '../../../workbench/Diagram'; +import { Explorer } from '../../../workbench/Explorer'; describe('Diagram - edges', () => { context('Given a studio template', () => { @@ -30,7 +30,7 @@ describe('Diagram - edges', () => { cy.get('[title="domain::Domain"]').then(($div) => { domainName = $div.data().testid; explorer.expand(`${domainName}`); - explorer.createObject('Entity1', 'Relation'); + explorer.createObject('Entity1', 'relations-Relation'); const details = new Details(); details.getCheckBox('Containment').check(); details.openReferenceWidgetOptions('Target Type'); @@ -67,9 +67,9 @@ describe('Diagram - edges', () => { const details = new Details(); const diagram = new Diagram(); - explorer.createObject('Root', 'Entity1s Entity1'); + explorer.createObject('Root', 'entity1s-Entity1'); details.getTextField('Name').type('Entity1{Enter}'); - explorer.createObject('Entity1', 'Relation Entity2'); + explorer.createObject('Entity1', 'relation-Entity2'); details.getTextField('Name').should('have.value', ''); details.getTextField('Name').type('Entity2{Enter}'); @@ -110,8 +110,8 @@ describe('Diagram - edges', () => { explorer.expand('Entity1 Node'); details.getTextField('Default Width Expression').type('300{enter}'); details.getTextField('Default Height Expression').type('50{enter}'); - explorer.delete('RectangularNodeStyleDescription'); - explorer.createObject('Entity1 Node', 'Ellipse Node Style Description'); + explorer.delete('Rectangular Node Style Description 3'); + explorer.createObject('Entity1 Node', 'style-EllipseNodeStyleDescription'); }); }) ); @@ -135,12 +135,12 @@ describe('Diagram - edges', () => { const details = new Details(); const diagram = new Diagram(); - explorer.createObject('Root', 'Entity1s Entity1'); + explorer.createObject('Root', 'entity1s-Entity1'); details.getTextField('Name').type('Entity1{Enter}'); - explorer.createObject('Root', 'Entity2s Entity2'); + explorer.createObject('Root', 'entity2s-Entity2'); details.getTextField('Name').should('have.value', ''); details.getTextField('Name').type('Entity2{Enter}'); - explorer.createObject('Root', 'Entity2s Entity2'); + explorer.createObject('Root', 'entity2s-Entity2'); details.getTextField('Name').should('have.value', ''); details.getTextField('Name').type('Entity2.bis{Enter}'); explorer.select('Entity1'); diff --git a/integration-tests/cypress/e2e/project/diagrams/graphical-dnd.cy.ts b/integration-tests/cypress/e2e/project/diagrams/graphical-dnd.cy.ts index 785323c4e0..da44d7635c 100644 --- a/integration-tests/cypress/e2e/project/diagrams/graphical-dnd.cy.ts +++ b/integration-tests/cypress/e2e/project/diagrams/graphical-dnd.cy.ts @@ -12,9 +12,9 @@ *******************************************************************************/ import { Project } from '../../../pages/Project'; import { Studio } from '../../../usecases/Studio'; -import { Explorer } from '../../../workbench/Explorer'; import { Details } from '../../../workbench/Details'; import { Diagram } from '../../../workbench/Diagram'; +import { Explorer } from '../../../workbench/Explorer'; describe('Diagram - Graphical-dnd', () => { context('Given a studio template', () => { @@ -42,7 +42,7 @@ describe('Diagram - Graphical-dnd', () => { it.skip('Check graphical Drag and Drop', () => { const explorer = new Explorer(); - explorer.createObject('Entity2', 'Relation'); + explorer.createObject('Entity2', 'relations-Relation'); const details = new Details(); details.getCheckBox('Containment').check(); details.openReferenceWidgetOptions('Target Type'); @@ -54,14 +54,14 @@ describe('Diagram - Graphical-dnd', () => { explorer.expand('Entity2 Node'); details.openReferenceWidgetOptions('Reused Child Node Descriptions'); details.selectReferenceWidgetOption('Entity1 Node'); - explorer.createObject('NodePalette', 'Drop Node Tool'); + explorer.createObject('NodePalette', 'dropNodeTool-DropNodeTool'); explorer.select('Tool'); details.getTextField('Name').type('{selectAll}Drop Entity1 Tool{Enter}'); details.openReferenceWidgetOptions('Accepted Node Types'); details.selectReferenceWidgetOption('Entity1 Node'); - explorer.createObject('Drop Entity1 Tool', 'Change Context'); + explorer.createObject('Drop Entity1 Tool', 'body-ChangeContext'); details.getTextField('Expression').type('{selectAll}aql:targetElement{enter}'); - explorer.createObject('aql:targetElement', 'Set Value'); + explorer.createObject('aql:targetElement', 'children-SetValue'); details.getTextField('Feature Name').type('relation{Enter}'); details.getTextField('Value Expression').type('aql:droppedElement{Enter}'); @@ -71,16 +71,16 @@ describe('Diagram - Graphical-dnd', () => { new Explorer().createRepresentation('Root', `${domainName} Diagram Description`, 'diagram'); }); - explorer.createObject('Root', 'Entity1s Entity1'); + explorer.createObject('Root', 'entity1s-Entity1'); details.getTextField('Name').type('Entity1{Enter}'); - explorer.createObject('Root', 'Entity2s Entity2'); + explorer.createObject('Root', 'entity2s-Entity2'); details.getTextField('Name').type('Entity2{Enter}'); const diagram = new Diagram(); diagram.dragAndDropNode('Rectangle - Entity1', 'Rectangle - Entity2'); diagram.isNodeInside('Rectangle - Entity1', 'Rectangle - Entity2'); - explorer.createObject('Root', 'Entity1s Entity1'); + explorer.createObject('Root', 'entity1s-Entity1'); details.getTextField('Name').type('InvalidTarget{Enter}'); diagram.dragAndDropNode('Rectangle - Entity1', 'Rectangle - InvalidTarget'); diff --git a/integration-tests/cypress/e2e/project/diagrams/group-palette.cy.ts b/integration-tests/cypress/e2e/project/diagrams/group-palette.cy.ts index 6f5207f624..934c4e38df 100644 --- a/integration-tests/cypress/e2e/project/diagrams/group-palette.cy.ts +++ b/integration-tests/cypress/e2e/project/diagrams/group-palette.cy.ts @@ -11,11 +11,11 @@ * Obeo - initial API and implementation *******************************************************************************/ import { Project } from '../../../pages/Project'; -import { Explorer } from '../../../workbench/Explorer'; -import { Diagram } from '../../../workbench/Diagram'; import { Flow } from '../../../usecases/Flow'; import { Papaya } from '../../../usecases/Papaya'; import { Details } from '../../../workbench/Details'; +import { Diagram } from '../../../workbench/Diagram'; +import { Explorer } from '../../../workbench/Explorer'; const projectName = 'Cypress - group palette'; describe('Diagram - group palette', () => { @@ -143,19 +143,19 @@ describe('Diagram - group palette', () => { const explorer = new Explorer(); const details = new Details(); const diagram = new Diagram(); - explorer.createObject('Root', 'Components Component'); + explorer.createObject('Root', 'components-Component'); details.getTextField('Name').invoke('text').should('eq', ''); details.getTextField('Name').type('component{enter}'); - explorer.createObject('component', 'Packages Package'); + explorer.createObject('component', 'packages-Package'); details.getTextField('Name').invoke('text').should('eq', ''); details.getTextField('Name').type('package{enter}'); - explorer.createObject('package', 'Types Class'); + explorer.createObject('package', 'types-Class'); details.getTextField('Name').invoke('text').should('eq', ''); details.getTextField('Name').type('class{enter}'); - explorer.createObject('class', 'Attributes Attribute'); + explorer.createObject('class', 'attributes-Attribute'); details.getTextField('Name').invoke('text').should('eq', ''); details.getTextField('Name').type('attribute{enter}'); - explorer.createObject('class', 'Operations Operation'); + explorer.createObject('class', 'operations-Operation'); details.getTextField('Name').invoke('text').should('eq', ''); details.getTextField('Name').type('operation{enter}'); explorer.createRepresentation('Root', 'Diagram', 'diagram'); diff --git a/integration-tests/cypress/e2e/project/diagrams/list-node.cy.ts b/integration-tests/cypress/e2e/project/diagrams/list-node.cy.ts index b6d5f29dcb..1a2ef394c9 100644 --- a/integration-tests/cypress/e2e/project/diagrams/list-node.cy.ts +++ b/integration-tests/cypress/e2e/project/diagrams/list-node.cy.ts @@ -11,10 +11,10 @@ * Obeo - initial API and implementation *******************************************************************************/ -import { Studio } from '../../../usecases/Studio'; import { Project } from '../../../pages/Project'; -import { Explorer } from '../../../workbench/Explorer'; +import { Studio } from '../../../usecases/Studio'; import { Details } from '../../../workbench/Details'; +import { Explorer } from '../../../workbench/Explorer'; describe('List-node', () => { context('Given a studio template with a list node strategy', () => { @@ -35,7 +35,7 @@ describe('List-node', () => { explorer.expand(`${domainName} Diagram Description`); }); explorer.expand('Entity1 Node'); - explorer.createObject('Entity1 Node', 'Layout List'); + explorer.createObject('Entity1 Node', 'childrenLayoutStrategy-ListLayoutStrategyDescription'); }) ); diff --git a/integration-tests/cypress/e2e/project/diagrams/node-aspect-ratio.cy.ts b/integration-tests/cypress/e2e/project/diagrams/node-aspect-ratio.cy.ts index ac55fcc2bf..69f74b27c4 100644 --- a/integration-tests/cypress/e2e/project/diagrams/node-aspect-ratio.cy.ts +++ b/integration-tests/cypress/e2e/project/diagrams/node-aspect-ratio.cy.ts @@ -10,11 +10,11 @@ * Contributors: * Obeo - initial API and implementation *******************************************************************************/ -import { Studio } from '../../../usecases/Studio'; import { Project } from '../../../pages/Project'; -import { Explorer } from '../../../workbench/Explorer'; +import { Studio } from '../../../usecases/Studio'; import { Details } from '../../../workbench/Details'; import { Diagram } from '../../../workbench/Diagram'; +import { Explorer } from '../../../workbench/Explorer'; describe('Diagram - Node aspect ratio', () => { context('Given a studio template', () => { @@ -56,7 +56,7 @@ describe('Diagram - Node aspect ratio', () => { instanceProjectId = res.projectId; }); - explorer.createObject('Root', 'Entity1s Entity1'); + explorer.createObject('Root', 'entity1s-Entity1'); explorer.select('Entity1'); details.getTextField('Name').type('Node{enter}'); @@ -89,10 +89,10 @@ describe('Diagram - Node aspect ratio', () => { const explorer = new Explorer(); const details = new Details(); - explorer.createObject(domainName, 'Entity'); + explorer.createObject(domainName, 'types-Entity'); details.getTextField('Name').should('have.value', 'NewEntity'); details.getTextField('Name').clear().type('SubNode{enter}'); - explorer.createObject('Entity1', 'Relation'); + explorer.createObject('Entity1', 'relations-Relation'); details.getCheckBox('Containment').check(); details.openReferenceWidgetOptions('Target Type'); details.selectReferenceWidgetOption('SubNode'); @@ -101,7 +101,7 @@ describe('Diagram - Node aspect ratio', () => { explorer.expand('View'); explorer.expand(`${domainName} Diagram Description`); - explorer.createObject(`${domainName} Diagram Description`, 'Node Description'); + explorer.createObject(`${domainName} Diagram Description`, 'nodeDescriptions-NodeDescription'); details.getTextField('Domain Type').should('have.value', ''); details.getTextField('Domain Type').type(`${domainName}::SubNode`); @@ -128,11 +128,11 @@ describe('Diagram - Node aspect ratio', () => { instanceProjectId = res.projectId; }); - explorer.createObject('Root', 'Entity1s Entity1'); + explorer.createObject('Root', 'entity1s-Entity1'); explorer.select('Entity1'); details.getTextField('Name').type('Node{enter}'); - explorer.createObject('Node', 'Relation Sub Node'); + explorer.createObject('Node', 'relation-SubNode'); explorer.createRepresentation('Root', `${domainName} Diagram Description`, 'diagram'); @@ -156,11 +156,11 @@ describe('Diagram - Node aspect ratio', () => { instanceProjectId = res.projectId; }); - explorer.createObject('Root', 'Entity1s Entity1'); + explorer.createObject('Root', 'entity1s-Entity1'); explorer.select('Entity1'); details.getTextField('Name').type('Node{enter}'); - explorer.createObject('Node', 'Relation Sub Node'); + explorer.createObject('Node', 'relation-SubNode'); explorer.createRepresentation('Root', `${domainName} Diagram Description`, 'diagram'); diff --git a/integration-tests/cypress/e2e/project/explorer/document-context-menu.cy.js b/integration-tests/cypress/e2e/project/explorer/document-context-menu.cy.js index cb58ad9c30..c94964952e 100644 --- a/integration-tests/cypress/e2e/project/explorer/document-context-menu.cy.js +++ b/integration-tests/cypress/e2e/project/explorer/document-context-menu.cy.js @@ -108,7 +108,7 @@ describe('/projects/:projectId/edit - Document Context Menu', () => { cy.getByTestId('suggested').click({ force: true }); cy.getByTestId('type').click(); - cy.get('[data-value="Entity"]').click(); + cy.get('[data-value="types-Entity"]').click(); cy.getByTestId('create-object').click(); diff --git a/integration-tests/cypress/e2e/project/explorer/object-context-menu.cy.js b/integration-tests/cypress/e2e/project/explorer/object-context-menu.cy.js index 0269d4c23e..b1fe3e3117 100644 --- a/integration-tests/cypress/e2e/project/explorer/object-context-menu.cy.js +++ b/integration-tests/cypress/e2e/project/explorer/object-context-menu.cy.js @@ -81,10 +81,10 @@ describe('/projects/:projectId/edit - Object Context Menu', () => { cy.getByTestId('create-object').should('be.enabled'); cy.getByTestId('childCreationDescription').click(); - cy.get('[data-value="Power Input"]').click(); + cy.get('[data-value="powerInputs-PowerInput"]').click(); cy.getByTestId('create-object').click(); - cy.getByTestId('explorer://').contains('PowerInput'); + cy.getByTestId('explorer://').contains('Power Input'); }); it('can select the created child object', () => { @@ -96,11 +96,11 @@ describe('/projects/:projectId/edit - Object Context Menu', () => { cy.getByTestId('create-object').should('be.enabled'); cy.getByTestId('childCreationDescription').click(); - cy.get('[data-value="Power Input"]').click(); + cy.get('[data-value="powerInputs-PowerInput"]').click(); cy.getByTestId('create-object').click(); - cy.getByTestId('explorer://').contains('PowerInput'); - cy.getByTestId('selected').contains('PowerInput'); + cy.getByTestId('explorer://').contains('Power Input'); + cy.getByTestId('selected').contains('Power Input'); }); it('can open the new representation modal', () => { diff --git a/integration-tests/cypress/e2e/project/formdescriptioneditor/formdescriptioneditor.cy.js b/integration-tests/cypress/e2e/project/formdescriptioneditor/formdescriptioneditor.cy.js index 9ad57b5c11..c484e0469b 100644 --- a/integration-tests/cypress/e2e/project/formdescriptioneditor/formdescriptioneditor.cy.js +++ b/integration-tests/cypress/e2e/project/formdescriptioneditor/formdescriptioneditor.cy.js @@ -31,7 +31,7 @@ describe('/projects/:projectId/edit - FormDescriptionEditor', () => { //make sure the data are fetched before selecting cy.getByTestId('create-object').should('be.enabled'); cy.getByTestId('childCreationDescription').click(); - cy.get('[data-value="Form Description"]').click(); + cy.get('[data-value="descriptions-FormDescription"]').click(); cy.getByTestId('create-object').click(); // create the form description editor cy.getByTestId('New Form Description').click(); @@ -140,55 +140,59 @@ describe('/projects/:projectId/edit - FormDescriptionEditor', () => { cy.getByTestId('New Form Description-more').should('be.enabled').click(); cy.getByTestId('treeitem-contextmenu').findByTestId('new-object').click(); cy.getByTestId('childCreationDescription').children('[role="button"]').invoke('text').should('have.length.gt', 1); - cy.getByTestId('childCreationDescription').click().get('[data-value="Page Description"]').should('exist').click(); + cy.getByTestId('childCreationDescription') + .click() + .get('[data-value="pages-PageDescription"]') + .should('exist') + .click(); cy.getByTestId('create-object').click(); // Adds a widget to the first page - cy.getByTestId('PageDescription').eq(0).dblclick(); - cy.getByTestId('GroupDescription').eq(0).click(); - cy.getByTestId('GroupDescription-more').eq(0).should('be.enabled').click(); + cy.getByTestId('Page Description').eq(0).dblclick(); + cy.getByTestId('Group Description').eq(0).click(); + cy.getByTestId('Group Description-more').eq(0).should('be.enabled').click(); cy.getByTestId('treeitem-contextmenu').findByTestId('new-object').click(); cy.getByTestId('childCreationDescription').children('[role="button"]').invoke('text').should('have.length.gt', 1); cy.getByTestId('childCreationDescription') .click() - .get('[data-value="Widgets Pie Chart Description"]') + .get('[data-value="children-PieChartDescription"]') .should('exist') .click(); cy.getByTestId('create-object').click(); // Adds a widget to the second page - cy.getByTestId('PageDescription').eq(1).dblclick(); - cy.getByTestId('GroupDescription').eq(1).click(); - cy.getByTestId('GroupDescription-more').eq(1).should('be.enabled').click(); + cy.getByTestId('Page Description').eq(1).dblclick(); + cy.getByTestId('Group Description').eq(1).click(); + cy.getByTestId('Group Description-more').eq(1).should('be.enabled').click(); cy.getByTestId('treeitem-contextmenu').findByTestId('new-object').click(); cy.getByTestId('childCreationDescription').children('[role="button"]').invoke('text').should('have.length.gt', 1); cy.getByTestId('childCreationDescription') .click() - .get('[data-value="Widgets Bar Chart Description"]') + .get('[data-value="children-BarChartDescription"]') .should('exist') .click(); cy.getByTestId('create-object').click(); // Select the widget from the first page must display it on the editor, and the first page must be selected - cy.getByTestId('PieChartDescription').click(); + cy.getByTestId('Pie Chart Description').click(); cy.getByTestId('PieChart').should('exist'); cy.get('[data-testid^="Page-"]').eq(0).should('have.attr', 'aria-selected', 'true'); cy.get('[data-testid^="Page-"]').eq(1).should('have.attr', 'aria-selected', 'false'); // Select the widget from the second page must display it on the editor, and the second page must be selected - cy.getByTestId('BarChartDescription').click(); + cy.getByTestId('Bar Chart Description').click(); cy.getByTestId('PieChart').should('not.exist'); cy.getByTestId('BarChart').should('exist'); cy.get('[data-testid^="Page-"]').eq(0).should('have.attr', 'aria-selected', 'false'); cy.get('[data-testid^="Page-"]').eq(1).should('have.attr', 'aria-selected', 'true'); // Check page selection for group - cy.getByTestId('GroupDescription').eq(0).click(); + cy.getByTestId('Group Description').eq(0).click(); cy.get('[data-testid^="Page-"]').eq(0).should('have.attr', 'aria-selected', 'true'); cy.get('[data-testid^="Page-"]').eq(1).should('have.attr', 'aria-selected', 'false'); - cy.getByTestId('GroupDescription').eq(1).click(); + cy.getByTestId('Group Description').eq(1).click(); cy.get('[data-testid^="Page-"]').eq(0).should('have.attr', 'aria-selected', 'false'); cy.get('[data-testid^="Page-"]').eq(1).should('have.attr', 'aria-selected', 'true'); // Check page selection for page - cy.getByTestId('PageDescription').eq(0).click(); + cy.getByTestId('Page Description').eq(0).click(); cy.get('[data-testid^="Page-"]').eq(0).should('have.attr', 'aria-selected', 'true'); cy.get('[data-testid^="Page-"]').eq(1).should('have.attr', 'aria-selected', 'false'); - cy.getByTestId('PageDescription').eq(1).click(); + cy.getByTestId('Page Description').eq(1).click(); cy.get('[data-testid^="Page-"]').eq(0).should('have.attr', 'aria-selected', 'false'); cy.get('[data-testid^="Page-"]').eq(1).should('have.attr', 'aria-selected', 'true'); }); @@ -201,16 +205,16 @@ describe('/projects/:projectId/edit - FormDescriptionEditor', () => { cy.getByTestId('FormDescriptionEditor-ReferenceWidget').trigger('dragstart', { dataTransfer }); cy.get('[data-testid^="Group-Widgets-DropArea-"]').trigger('drop', { dataTransfer }); cy.get('[title="ReferenceWidget"]').should('be.visible'); - cy.getByTestId('PageDescription').dblclick(); - cy.getByTestId('GroupDescription').dblclick(); - cy.getByTestId('ReferenceWidgetDescription-more').should('be.enabled').click(); + cy.getByTestId('Page Description').dblclick(); + cy.getByTestId('Group Description').dblclick(); + cy.getByTestId('Reference Widget Description-more').should('be.enabled').click(); cy.getByTestId('treeitem-contextmenu').findByTestId('new-object').click(); cy.getByTestId('childCreationDescription').children('[role="button"]').invoke('text').should('have.length.gt', 1); cy.getByTestId('childCreationDescription') .click() - .get('[data-value="Conditional Styles Conditional Reference Widget Description Style"]') + .get('[data-value="conditionalStyles-ConditionalReferenceWidgetDescriptionStyle"]') .should('exist'); - cy.get('[data-value="Style Widget Description Style"]').should('exist').click(); + cy.get('[data-value="style-ReferenceWidgetDescriptionStyle"]').should('exist').click(); cy.getByTestId('create-object').click(); cy.getByTestId('Font Size').should('exist'); cy.getByTestId('Italic').should('exist'); @@ -236,12 +240,12 @@ describe('/projects/:projectId/edit - FormDescriptionEditor', () => { }); function checkWidgetIsEnabledExpression(widgetName, should) { - cy.getByTestId('GroupDescription-more').should('be.enabled').click(); + cy.getByTestId('Group Description-more').should('be.enabled').click(); cy.getByTestId('treeitem-contextmenu').findByTestId('new-object').click(); cy.getByTestId('childCreationDescription').children('[role="button"]').invoke('text').should('have.length.gt', 1); cy.getByTestId('childCreationDescription') .click() - .get('[data-value="' + widgetName + ' Description"]') + .get('[data-value="' + widgetName + '"]') .should('exist') .click(); cy.getByTestId('create-object').click(); @@ -249,17 +253,17 @@ describe('/projects/:projectId/edit - FormDescriptionEditor', () => { } it('is enabled expression is available only for the editable widgets', () => { - cy.getByTestId('PageDescription').dblclick(); + cy.getByTestId('Page Description').dblclick(); // Not editable widgets shouldn't have isEnabledExpression - checkWidgetIsEnabledExpression('Widgets Link', 'not.exist'); - checkWidgetIsEnabledExpression('Widgets Pie Chart', 'not.exist'); - checkWidgetIsEnabledExpression('Widgets Label', 'not.exist'); + checkWidgetIsEnabledExpression('children-LinkDescription', 'not.exist'); + checkWidgetIsEnabledExpression('children-PieChartDescription', 'not.exist'); + checkWidgetIsEnabledExpression('children-LabelDescription', 'not.exist'); // Editable widgets should have isEnabledExpression - checkWidgetIsEnabledExpression('Widgets Button', 'exist'); - checkWidgetIsEnabledExpression('Widgets Flexbox Container', 'exist'); - checkWidgetIsEnabledExpression('Toolbar Actions Button', 'exist'); - checkWidgetIsEnabledExpression('Widgets Slider', 'exist'); + checkWidgetIsEnabledExpression('children-ButtonDescription', 'exist'); + checkWidgetIsEnabledExpression('children-FlexboxContainerDescription', 'exist'); + checkWidgetIsEnabledExpression('toolbarActions-ButtonDescription', 'exist'); + checkWidgetIsEnabledExpression('children-SliderDescription', 'exist'); }); function createBorderStyleAndCheckProperties(styleName) { @@ -280,17 +284,17 @@ describe('/projects/:projectId/edit - FormDescriptionEditor', () => { } it('can create border style in a Group', () => { - cy.getByTestId('PageDescription').dblclick(); - cy.getByTestId('GroupDescription-more').should('be.enabled').click(); - createBorderStyleAndCheckProperties('Border Style Container Border Style'); + cy.getByTestId('Page Description').dblclick(); + cy.getByTestId('Group Description-more').should('be.enabled').click(); + createBorderStyleAndCheckProperties('borderStyle-ContainerBorderStyle'); - cy.getByTestId('GroupDescription-more').should('be.enabled').click(); - createBorderStyleAndCheckProperties('Conditional Border Styles Conditional Container Border Style'); + cy.getByTestId('Group Description-more').should('be.enabled').click(); + createBorderStyleAndCheckProperties('conditionalBorderStyles-ConditionalContainerBorderStyle'); cy.getByTestId('Condition').should('exist'); }); it('can create border style in a Flexbox Container', () => { - cy.getByTestId('PageDescription').dblclick(); + cy.getByTestId('Page Description').dblclick(); // Create a Flexbox inside the Group var dataTransfer = new DataTransfer(); @@ -298,12 +302,12 @@ describe('/projects/:projectId/edit - FormDescriptionEditor', () => { cy.get('[data-testid^="Group-Widgets-DropArea-"]').trigger('drop', { dataTransfer }); cy.get('[title="FlexboxContainer"]').should('be.visible'); - cy.getByTestId('GroupDescription').dblclick(); - cy.getByTestId('FlexboxContainerDescription-more').click(); - createBorderStyleAndCheckProperties('Border Style Container Border Style'); + cy.getByTestId('Group Description').dblclick(); + cy.getByTestId('Flexbox Container Description-more').click(); + createBorderStyleAndCheckProperties('borderStyle-ContainerBorderStyle'); - cy.getByTestId('FlexboxContainerDescription-more').click(); - createBorderStyleAndCheckProperties('Conditional Border Styles Conditional Container Border Style'); + cy.getByTestId('Flexbox Container Description-more').click(); + createBorderStyleAndCheckProperties('conditionalBorderStyles-ConditionalContainerBorderStyle'); cy.getByTestId('Condition').should('exist'); }); diff --git a/integration-tests/cypress/e2e/project/forms/widget-reference.cy.ts b/integration-tests/cypress/e2e/project/forms/widget-reference.cy.ts index 3107fd6964..649559ff7f 100644 --- a/integration-tests/cypress/e2e/project/forms/widget-reference.cy.ts +++ b/integration-tests/cypress/e2e/project/forms/widget-reference.cy.ts @@ -22,14 +22,14 @@ import { Form } from '../../../workbench/Form'; const createFormWithWidgetRef = (domainType: string, name: string, reference: string) => { const explorer = new Explorer(); const details = new Details(); - explorer.createObject('View', 'Form Description'); + explorer.createObject('View', 'descriptions-FormDescription'); explorer.select('New Form Description'); details.getTextField('Domain Type').type(domainType); details.getTextField('Name').type(`{selectall}${name}{enter}`); details.getTextField('Title Expression').type(`{selectall}${name}{enter}`); explorer.expand(name); - explorer.expand('PageDescription'); - explorer.createObject('GroupDescription', 'Widgets Reference Widget Description'); + explorer.expand('Page Description'); + explorer.createObject('Group Description', 'children-ReferenceWidgetDescription'); details.getTextField('Reference Name Expression').should('exist'); details.getTextField('Label Expression').type('Test Widget Reference'); details.getTextField('Reference Name Expression').type(`${reference}{enter}`); @@ -141,7 +141,7 @@ describe('Forms Widget-reference', () => { explorer.getTreeItemByLabel('standard').trigger('dragstart', { dataTransfer: dataTransferStandardExplorer }); form.getWidget('Test Widget Reference').trigger('drop', { dataTransfer: dataTransferStandardExplorer }); form.getWidgetElement('Test Widget Reference', 'reference-value-standard').should('exist'); - explorer.createObject('DataSource1', 'Data Flow'); + explorer.createObject('DataSource1', 'outgoingFlows-DataFlow'); form.getWidget('Test Widget Reference').click(); cy.getByTestId('option-standard').should('not.exist'); cy.getByTestId('option-unused').should('exist'); @@ -170,7 +170,10 @@ describe('Forms Widget-reference', () => { .should('have.length.gt', 1); cy.getByTestId('childCreationDescription').click(); cy.getByTestId('childCreationDescription').get('[data-value]').should('have.length', 1); - cy.getByTestId('childCreationDescription').get('[data-value="Power Output"]').should('exist').click(); + cy.getByTestId('childCreationDescription') + .get('[data-value="powerOutputs-PowerOutput"]') + .should('exist') + .click(); cy.getByTestId('create-modal').findByTestId('create-object').click(); cy.getByTestId('reference-value-1000').should('exist'); explorer.getTreeItemByLabel('1000').should('exist'); @@ -202,7 +205,10 @@ describe('Forms Widget-reference', () => { .should('have.length.gt', 1); cy.getByTestId('childCreationDescription').click(); cy.getByTestId('childCreationDescription').get('[data-value]').should('have.length', 1); - cy.getByTestId('childCreationDescription').get('[data-value="Power Output"]').should('exist').click(); + cy.getByTestId('childCreationDescription') + .get('[data-value="powerOutputs-PowerOutput"]') + .should('exist') + .click(); cy.getByTestId('create-modal').findByTestId('create-object').click(); cy.getByTestId('reference-value-1000').should('exist'); explorer.getTreeItemByLabel('1000').should('exist'); @@ -258,7 +264,7 @@ describe('Forms Widget-reference', () => { cy.getByTestId('childCreationDescription') .get('[data-value]') .should('have.length', 2) - .get('[data-value="Elements Data Flow"]') + .get('[data-value="elements-DataFlow"]') .should('exist') .click(); cy.getByTestId('create-modal').findByTestId('create-object').click(); @@ -297,21 +303,21 @@ describe('Forms Widget-reference', () => { const explorer = new Explorer(); const details = new Details(); const form = new Form(); - explorer.createObject(domainName, 'Entity'); + explorer.createObject(domainName, 'types-Entity'); details.getTextField('Name').should('have.value', 'NewEntity'); details.getTextField('Name').type('{selectall}SuperEntity1{enter}'); details.getCheckBox('Abstract').check(); - explorer.createObject(domainName, 'Entity'); + explorer.createObject(domainName, 'types-Entity'); details.getTextField('Name').should('have.value', 'NewEntity'); details.getTextField('Name').type('{selectall}MonoValuedContainment{enter}'); - explorer.createObject('MonoValuedContainment', 'Attribute'); + explorer.createObject('MonoValuedContainment', 'attributes-Attribute'); details.getTextField('Name').should('have.value', 'newString'); details.getTextField('Name').type('{selectall}Name{enter}'); - explorer.createObject('SuperEntity1', 'Relation'); + explorer.createObject('SuperEntity1', 'relations-Relation'); details.getCheckBox('Containment').check(); details.getCheckBox('Many').uncheck(); details.openReferenceWidgetOptions('Target Type'); @@ -319,7 +325,7 @@ describe('Forms Widget-reference', () => { explorer.select('Entity1'); details.getTextField('Name').should('have.value', 'Entity1'); - details.openReferenceWidgetOptions('Super Type'); + details.openReferenceWidgetOptions('Super Types'); details.selectReferenceWidgetOption('SuperEntity1'); explorer.expand('ViewNewModel'); @@ -329,7 +335,7 @@ describe('Forms Widget-reference', () => { instanceProjectId = res.projectId; }); - explorer.createObject('Root', 'Entity1s Entity1'); + explorer.createObject('Root', 'entity1s-Entity1'); explorer.select('Entity1'); details.getTextField('Name').type('{selectall}Entity1{enter}'); @@ -345,7 +351,7 @@ describe('Forms Widget-reference', () => { cy.getByTestId('childCreationDescription').click(); cy.getByTestId('childCreationDescription').get('[data-value]').should('have.length', 1); cy.getByTestId('childCreationDescription') - .get('[data-value="Relation Mono Valued Containment"]') + .get('[data-value="relation-MonoValuedContainment"]') .should('exist') .click(); cy.getByTestId('create-modal').findByTestId('create-object').click(); @@ -365,7 +371,7 @@ describe('Forms Widget-reference', () => { cy.getByTestId('childCreationDescription').click(); cy.getByTestId('childCreationDescription').get('[data-value]').should('have.length', 1); cy.getByTestId('childCreationDescription') - .get('[data-value="Relation Mono Valued Containment"]') + .get('[data-value="relation-MonoValuedContainment"]') .should('exist') .click(); cy.getByTestId('create-modal').findByTestId('create-object').click(); @@ -378,28 +384,28 @@ describe('Forms Widget-reference', () => { const form = new Form(); explorer.expand(domainName); - explorer.createObject('Entity1', 'Relation'); + explorer.createObject('Entity1', 'relations-Relation'); details.getCheckBox('Containment').check(); details.openReferenceWidgetOptions('Target Type'); details.selectReferenceWidgetOption('Entity2'); - explorer.createObject('Entity2', 'Relation'); + explorer.createObject('Entity2', 'relations-Relation'); details.getCheckBox('Containment').check(); details.openReferenceWidgetOptions('Target Type'); details.selectReferenceWidgetOption('Entity1'); explorer.expand('ViewNewModel'); - explorer.createObject('View', 'Form Description'); + explorer.createObject('View', 'descriptions-FormDescription'); explorer.select('New Form Description'); details.getTextField('Domain Type').type(`${domainName}::Entity1`); details.getTextField('Name').type(`{selectall}WidgetRefRepresentation{enter}`); details.getTextField('Title Expression').type(`{selectall}WidgetRefRepresentation{enter}`); explorer.expand('WidgetRefRepresentation'); - explorer.expand('PageDescription'); - explorer.createObject('GroupDescription', 'Widgets Reference Widget Description'); + explorer.expand('Page Description'); + explorer.createObject('Group Description', 'children-ReferenceWidgetDescription'); details.getTextField('Reference Name Expression').should('exist'); details.getTextField('Label Expression').type('Test Widget Reference linkedTo'); details.getTextField('Reference Name Expression').type(`linkedTo{enter}`); - explorer.createObject('GroupDescription', 'Widgets Reference Widget Description'); + explorer.createObject('Group Description', 'children-ReferenceWidgetDescription'); details.getTextField('Reference Name Expression').should('exist'); details.getTextField('Label Expression').type('Test Widget Reference relation'); details.getTextField('Reference Name Expression').type(`relation{enter}`); @@ -408,10 +414,10 @@ describe('Forms Widget-reference', () => { instanceProjectId = res.projectId; }); - explorer.createObject('Root', 'Entity2s Entity2'); + explorer.createObject('Root', 'entity2s-Entity2'); explorer.select('Entity2'); details.getTextField('Name').type('{selectall}Entity2{enter}'); - explorer.createObject('Entity2', 'Relation Entity1'); + explorer.createObject('Entity2', 'relation-Entity1'); explorer.createRepresentation('Entity1', 'WidgetRefRepresentation', 'WidgetRefRepresentation'); form.getWidget('Test Widget Reference linkedTo').click(); diff --git a/integration-tests/cypress/e2e/project/studio/color-palette.cy.js b/integration-tests/cypress/e2e/project/studio/color-palette.cy.js index 840b0133b4..3a4729f0f3 100644 --- a/integration-tests/cypress/e2e/project/studio/color-palette.cy.js +++ b/integration-tests/cypress/e2e/project/studio/color-palette.cy.js @@ -22,21 +22,21 @@ describe('/projects/:projectId/edit - Color Palette', () => { it('check the default color palette exist and populated', () => { cy.getByTestId('ViewNewModel-toggle').click(); cy.getByTestId('View-toggle').click(); - cy.getByTestId('ColorPalette').should('exist'); - cy.getByTestId('ColorPalette-toggle').click(); - cy.getByTestId('ColorPalette').should('exist'); + cy.getByTestId('Color Palette').should('exist'); + cy.getByTestId('Color Palette-toggle').click(); + cy.getByTestId('Color Palette').should('exist'); cy.getByTestId('color_dark').should('exist'); }); it('can add new fixed color to palette color', () => { cy.getByTestId('ViewNewModel-toggle').click(); cy.getByTestId('View-toggle').click(); - cy.getByTestId('ColorPalette-more').click(); + cy.getByTestId('Color Palette-more').click(); cy.getByTestId('new-object').click(); cy.getByTestId('childCreationDescription').children('[role="button"]').invoke('text').should('have.length.gt', 1); - cy.getByTestId('childCreationDescription').click().get('[data-value="Fixed Color"]').should('exist').click(); + cy.getByTestId('childCreationDescription').click().get('[data-value="colors-FixedColor"]').should('exist').click(); cy.getByTestId('create-object').click(); - cy.getByTestId('FixedColor').should('exist').click(); + cy.getByTestId('Fixed Color').should('exist').click(); cy.getByTestId('Name').type('color_test{enter}'); cy.getByTestId('Value').type('#e5f5f8{enter}'); cy.getByTestId('color_test').should('exist'); @@ -48,14 +48,18 @@ describe('/projects/:projectId/edit - Color Palette', () => { cy.getByTestId('View-more').click(); cy.getByTestId('new-object').click(); cy.getByTestId('childCreationDescription').children('[role="button"]').invoke('text').should('have.length.gt', 1); - cy.getByTestId('childCreationDescription').click().get('[data-value="Color Palette"]').should('exist').click(); + cy.getByTestId('childCreationDescription') + .click() + .get('[data-value="colorPalettes-ColorPalette"]') + .should('exist') + .click(); cy.getByTestId('create-object').click(); cy.getByTestId('New Color Palette').should('exist').click(); cy.getByTestId('Name').clear().type('OtherColorPalette{enter}'); cy.getByTestId('OtherColorPalette-more').click(); cy.getByTestId('new-object').click(); cy.getByTestId('childCreationDescription').children('[role="button"]').invoke('text').should('have.length.gt', 1); - cy.getByTestId('childCreationDescription').click().get('[data-value="Fixed Color"]').should('exist'); + cy.getByTestId('childCreationDescription').click().get('[data-value="colors-FixedColor"]').should('exist'); }); it('can select color from color palette in node style properties', () => { diff --git a/integration-tests/cypress/e2e/project/studio/studio.cy.ts b/integration-tests/cypress/e2e/project/studio/studio.cy.ts index 895e243d51..94da7336d9 100644 --- a/integration-tests/cypress/e2e/project/studio/studio.cy.ts +++ b/integration-tests/cypress/e2e/project/studio/studio.cy.ts @@ -13,8 +13,8 @@ import { Project } from '../../../pages/Project'; import { Studio } from '../../../usecases/Studio'; -import { Explorer } from '../../../workbench/Explorer'; import { Details } from '../../../workbench/Details'; +import { Explorer } from '../../../workbench/Explorer'; describe('/projects/:projectId/edit - Studio', () => { context('Given a studio template', () => { @@ -72,20 +72,20 @@ describe('/projects/:projectId/edit - Studio', () => { cy.getByTestId('ViewNewModel').dblclick(); cy.getByTestId('View').dblclick(); cy.get('[data-testid$=" Diagram Description"]').dblclick(); - cy.getByTestId('DiagramPalette').should('exist'); - cy.getByTestId('DiagramPalette-more').click(); + cy.getByTestId('Palette').should('exist'); + cy.getByTestId('Palette-more').click(); cy.getByTestId('new-object').click(); cy.getByTestId('childCreationDescription').find('input').invoke('val').should('not.be.empty'); cy.getByTestId('childCreationDescription').click(); - cy.get('[data-value="Diagram Tool Section"]').should('exist').click(); + cy.get('[data-value="toolSections-DiagramToolSection"]').should('exist').click(); cy.getByTestId('create-object').click(); cy.getByTestId('Tool Section').should('exist'); cy.getByTestId('Tool Section-more').click(); cy.getByTestId('new-object').click(); cy.getByTestId('childCreationDescription').find('input').invoke('val').should('not.be.empty'); cy.getByTestId('childCreationDescription').click(); - cy.get('[data-value="Node Tool"]').should('exist'); - cy.get('[data-value="Edge Tool"]').should('not.exist'); + cy.get('[data-value="nodeTools-NodeTool"]').should('exist'); + cy.get('[data-value="edgeTools-EdgeTool"]').should('not.exist'); }); it('Check the NodePalette toolSection creation', () => { @@ -93,20 +93,20 @@ describe('/projects/:projectId/edit - Studio', () => { cy.getByTestId('View').dblclick(); cy.get('[data-testid$=" Diagram Description"]').dblclick(); cy.getByTestId('Entity1 Node').dblclick(); - cy.getByTestId('NodePalette-more').click(); + cy.getByTestId('Node Palette-more').click(); cy.getByTestId('new-object').click(); cy.getByTestId('childCreationDescription').find('input').invoke('val').should('not.be.empty'); cy.getByTestId('childCreationDescription').click(); - cy.get('[data-value="Node Tool Section"]').should('exist').click(); + cy.get('[data-value="toolSections-NodeToolSection"]').should('exist').click(); cy.getByTestId('create-object').click(); cy.getByTestId('Tool Section').should('exist'); cy.getByTestId('Tool Section-more').click(); cy.getByTestId('new-object').click(); cy.getByTestId('childCreationDescription').find('input').invoke('val').should('not.be.empty'); cy.getByTestId('childCreationDescription').click(); - cy.get('[data-value="Node Tool"]').should('exist'); - cy.get('[data-value="Edge Tool"]').should('exist'); - cy.get('[data-value="Source Edge End Reconnection Tool"]').should('not.exist'); + cy.get('[data-value="nodeTools-NodeTool"]').should('exist'); + cy.get('[data-value="edgeTools-EdgeTool"]').should('exist'); + cy.get('[data-value="edgeReconnectionTools-SourceEdgeEndReconnectionTool"]').should('not.exist'); }); it('Check the EdgePalette toolSection creation', () => { @@ -114,21 +114,21 @@ describe('/projects/:projectId/edit - Studio', () => { cy.getByTestId('View').dblclick(); cy.get('[data-testid$=" Diagram Description"]').dblclick(); cy.getByTestId('LinkedTo Edge').dblclick(); - cy.getByTestId('EdgePalette-more').click(); + cy.getByTestId('Edge Palette-more').click(); cy.getByTestId('new-object').click(); cy.getByTestId('childCreationDescription').find('input').invoke('val').should('not.be.empty'); cy.getByTestId('childCreationDescription').click(); - cy.get('[data-value="Edge Tool Section"]').should('exist').click(); + cy.get('[data-value="toolSections-EdgeToolSection"]').should('exist').click(); cy.getByTestId('create-object').click(); cy.getByTestId('Tool Section').should('exist'); cy.getByTestId('Tool Section-more').click(); cy.getByTestId('new-object').click(); cy.getByTestId('childCreationDescription').find('input').invoke('val').should('not.be.empty'); cy.getByTestId('childCreationDescription').click(); - cy.get('[data-value="Node Tool"]').should('exist'); - cy.get('[data-value="Edge Tool"]').should('not.exist'); - cy.get('[data-value="Source Edge End Reconnection Tool"]').should('not.exist'); - cy.get('[data-value="Target Edge End Reconnection Tool"]').should('not.exist'); + cy.get('[data-value="nodeTools-NodeTool"]').should('exist'); + cy.get('[data-value="edgeTools-EdgeTool"]').should('not.exist'); + cy.get('[data-value="edgeReconnectionTools-SourceEdgeEndReconnectionTool"]').should('not.exist'); + cy.get('[data-value="edgeReconnectionTools-TargetEdgeEndReconnectionTool"]').should('not.exist'); }); it.skip('Check the precondition on tools', () => { @@ -139,7 +139,7 @@ describe('/projects/:projectId/edit - Studio', () => { cy.getByTestId('new-object').click(); cy.getByTestId('childCreationDescription').children('[role="button"]').invoke('text').should('have.length.gt', 1); cy.getByTestId('childCreationDescription').click(); - cy.getByTestId('childCreationDescription').get('[data-value="Node Tool"]').should('exist').click(); + cy.getByTestId('childCreationDescription').get('[data-value="nodeTools-NodeTool"]').should('exist').click(); cy.getByTestId('create-object').click(); cy.getByTestId('Precondition Expression').should('exist'); cy.getByTestId('Precondition Expression').type('aql:self.eAllContents()->size()>0'); @@ -200,13 +200,13 @@ describe('/projects/:projectId/edit - Studio', () => { explorer.expand('ViewNewModel'); explorer.expand('View'); explorer.expand(`${domainName} Diagram Description`); - explorer.createObject(`${domainName} Diagram Description`, 'Node Description'); + explorer.createObject(`${domainName} Diagram Description`, 'nodeDescriptions-NodeDescription'); explorer.expand('Node'); - explorer.select('RectangularNodeStyleDescription'); + explorer.select('Rectangular Node Style Description 3'); details.getReferenceWidgetSelectedValue('Background', 'white').should('exist'); details.getReferenceWidgetSelectedValue('Border Color', 'black').should('exist'); - explorer.delete('RectangularNodeStyleDescription'); - explorer.createObject('Node', 'Style Icon-Label'); + explorer.delete('Rectangular Node Style Description 3'); + explorer.createObject('Node', 'style-IconLabelNodeStyleDescription'); details.getReferenceWidgetSelectedValue('Background', 'white').should('exist'); details.getReferenceWidgetSelectedValue('Border Color', 'black').should('exist'); }); @@ -219,17 +219,23 @@ describe('/projects/:projectId/edit - Studio', () => { cy.getByTestId('new-object').click(); cy.getByTestId('childCreationDescription').children('[role="button"]').invoke('text').should('have.length.gt', 1); cy.getByTestId('childCreationDescription').click(); - cy.getByTestId('childCreationDescription').get('[data-value="Node Description"]').should('exist').click(); + cy.getByTestId('childCreationDescription') + .get('[data-value="nodeDescriptions-NodeDescription"]') + .should('exist') + .click(); cy.getByTestId('create-object').click(); cy.getByTestId('Node-toggle').click(); cy.getByTestId('Node-more').click(); cy.getByTestId('new-object').click(); cy.getByTestId('childCreationDescription').children('[role="button"]').invoke('text').should('have.length.gt', 1); cy.getByTestId('childCreationDescription').click(); - cy.getByTestId('childCreationDescription').get('[data-value="Sub-node"]').should('exist').click(); + cy.getByTestId('childCreationDescription') + .get('[data-value="childrenDescriptions-NodeDescription"]') + .should('exist') + .click(); cy.getByTestId('create-object').click(); cy.getByTestId('Sub-node-toggle').click(); - cy.getByTestId('RectangularNodeStyleDescription').eq(1).click(); + cy.getByTestId('Rectangular Node Style Description 3').eq(1).click(); cy.getByTestId('Background').findByTestId('reference-value-white').should('exist'); cy.getByTestId('Border Color').findByTestId('reference-value-black').should('exist'); }); @@ -242,17 +248,23 @@ describe('/projects/:projectId/edit - Studio', () => { cy.getByTestId('new-object').click(); cy.getByTestId('childCreationDescription').children('[role="button"]').invoke('text').should('have.length.gt', 1); cy.getByTestId('childCreationDescription').click(); - cy.getByTestId('childCreationDescription').get('[data-value="Node Description"]').should('exist').click(); + cy.getByTestId('childCreationDescription') + .get('[data-value="nodeDescriptions-NodeDescription"]') + .should('exist') + .click(); cy.getByTestId('create-object').click(); cy.getByTestId('Node-toggle').click(); cy.getByTestId('Node-more').click(); cy.getByTestId('new-object').click(); cy.getByTestId('childCreationDescription').children('[role="button"]').invoke('text').should('have.length.gt', 1); cy.getByTestId('childCreationDescription').click(); - cy.getByTestId('childCreationDescription').get('[data-value="Border node"]').should('exist').click(); + cy.getByTestId('childCreationDescription') + .get('[data-value="borderNodesDescriptions-NodeDescription"]') + .should('exist') + .click(); cy.getByTestId('create-object').click(); cy.getByTestId('Border node-toggle').click(); - cy.getByTestId('RectangularNodeStyleDescription').eq(1).click(); + cy.getByTestId('Rectangular Node Style Description 3').eq(1).click(); cy.getByTestId('Background').findByTestId('reference-value-white').should('exist'); cy.getByTestId('Border Color').findByTestId('reference-value-black').should('exist'); }); @@ -262,15 +274,18 @@ describe('/projects/:projectId/edit - Studio', () => { cy.getByTestId('View-toggle').click(); cy.get('[data-testid$=" Diagram Description"]').dblclick(); cy.getByTestId('Entity1 Node-toggle').click(); - cy.getByTestId('RectangularNodeStyleDescription-more').click(); + cy.getByTestId('Rectangular Node Style Description 3-more').click(); cy.getByTestId('delete').click(); cy.getByTestId('Entity1 Node-more').click(); cy.getByTestId('new-object').click(); cy.getByTestId('childCreationDescription').children('[role="button"]').invoke('text').should('have.length.gt', 1); cy.getByTestId('childCreationDescription').click(); - cy.getByTestId('childCreationDescription').get('[data-value="Style Rectangular"]').should('exist').click(); + cy.getByTestId('childCreationDescription') + .get('[data-value="style-RectangularNodeStyleDescription"]') + .should('exist') + .click(); cy.getByTestId('create-object').click(); - cy.getByTestId('RectangularNodeStyleDescription').click(); + cy.getByTestId('Rectangular Node Style Description 3').click(); cy.getByTestId('Background').findByTestId('reference-value-white').should('exist'); cy.getByTestId('Border Color').findByTestId('reference-value-black').should('exist'); }); @@ -283,10 +298,13 @@ describe('/projects/:projectId/edit - Studio', () => { cy.getByTestId('new-object').click(); cy.getByTestId('childCreationDescription').children('[role="button"]').invoke('text').should('have.length.gt', 1); cy.getByTestId('childCreationDescription').click(); - cy.getByTestId('childCreationDescription').get('[data-value="Edge Description"]').should('exist').click(); + cy.getByTestId('childCreationDescription') + .get('[data-value="edgeDescriptions-EdgeDescription"]') + .should('exist') + .click(); cy.getByTestId('create-object').click(); cy.getByTestId('Edge').dblclick(); - cy.getByTestId('EdgeStyle').click(); + cy.getByTestId('Edge Style 14').click(); cy.getByTestId('Color').findByTestId('reference-value-black').should('exist'); }); @@ -297,30 +315,33 @@ describe('/projects/:projectId/edit - Studio', () => { cy.getByTestId('new-object').click(); cy.getByTestId('childCreationDescription').children('[role="button"]').invoke('text').should('have.length.gt', 1); cy.getByTestId('childCreationDescription').click(); - cy.getByTestId('childCreationDescription').get('[data-value="Form Description"]').should('exist').click(); + cy.getByTestId('childCreationDescription') + .get('[data-value="descriptions-FormDescription"]') + .should('exist') + .click(); cy.getByTestId('create-object').click(); cy.getByTestId('New Form Description').dblclick(); - cy.getByTestId('PageDescription').dblclick(); - cy.getByTestId('GroupDescription').dblclick(); - cy.getByTestId('GroupDescription-more').click(); + cy.getByTestId('Page Description').dblclick(); + cy.getByTestId('Group Description').dblclick(); + cy.getByTestId('Group Description-more').click(); cy.getByTestId('new-object').click(); cy.getByTestId('childCreationDescription').children('[role="button"]').invoke('text').should('have.length.gt', 1); cy.getByTestId('childCreationDescription').click(); cy.getByTestId('childCreationDescription') - .get('[data-value="Widgets Textfield Description"]') + .get('[data-value="children-TextfieldDescription"]') .should('exist') .click(); cy.getByTestId('create-object').click(); - cy.getByTestId('TextfieldDescription-more').click(); + cy.getByTestId('Textfield Description-more').click(); cy.getByTestId('new-object').click(); cy.getByTestId('childCreationDescription').children('[role="button"]').invoke('text').should('have.length.gt', 1); cy.getByTestId('childCreationDescription').click(); cy.getByTestId('childCreationDescription') - .get('[data-value="Style Textfield Description Style"]') + .get('[data-value="style-TextfieldDescriptionStyle"]') .should('exist') .click(); cy.getByTestId('create-object').click(); - cy.getByTestId('TextfieldDescriptionStyle').click(); + cy.getByTestId('Textfield Description Style 14').click(); cy.getByTestId('Background Color').findByTestId('reference-value-transparent').should('exist'); cy.getByTestId('Foreground Color').findByTestId('reference-value-theme.palette.text.primary').should('exist'); @@ -337,7 +358,10 @@ describe('/projects/:projectId/edit - Studio', () => { cy.getByTestId('new-object').click(); cy.getByTestId('childCreationDescription').children('[role="button"]').invoke('text').should('have.length.gt', 1); cy.getByTestId('childCreationDescription').click(); - cy.getByTestId('childCreationDescription').get('[data-value="Node Description"]').should('exist').click(); + cy.getByTestId('childCreationDescription') + .get('[data-value="nodeDescriptions-NodeDescription"]') + .should('exist') + .click(); cy.getByTestId('create-object').click(); cy.getByTestId('Node').click(); cy.getByTestId('Default Width Expression').should('exist'); diff --git a/integration-tests/cypress/workbench/Deck.ts b/integration-tests/cypress/workbench/Deck.ts index 6e21193893..52d5714646 100644 --- a/integration-tests/cypress/workbench/Deck.ts +++ b/integration-tests/cypress/workbench/Deck.ts @@ -140,7 +140,9 @@ export class Deck { { condition, backgroundColor, color, italic, bold, underline, strikeThrough, fontSize }: ElementStyleProps ) { const details = new Details(); - const objectName = `${condition ? 'Conditional Style' : 'Style'} Description`; + const objectName = condition + ? 'conditionalStyles-ConditionalDeckElementDescriptionStyle' + : 'style-DeckElementDescriptionStyle'; cy.createChildObject(elementName, objectName); details.openReferenceWidgetOptions('Background Color'); details.selectReferenceWidgetOption(backgroundColor); @@ -162,7 +164,7 @@ export class Deck { public createDeckRepresentationtyle(elementName: string, backgroundColor: string, condition?: string) { const details = new Details(); - const objectName = `${condition ? 'Conditional Style' : 'Style'} Description`; + const objectName = condition ? 'conditionalStyles-ConditionalDeckDescriptionStyle' : 'style-DeckDescriptionStyle'; cy.createChildObject(elementName, objectName); details.openReferenceWidgetOptions('Background Color'); details.selectReferenceWidgetOption(backgroundColor); diff --git a/packages/diagrams/backend/sirius-components-collaborative-diagrams/src/main/resources/messages/sirius-web-spring-collaborative-diagrams_ru.properties b/packages/diagrams/backend/sirius-components-collaborative-diagrams/src/main/resources/messages/sirius-web-spring-collaborative-diagrams_ru.properties new file mode 100644 index 0000000000..1dc354d089 --- /dev/null +++ b/packages/diagrams/backend/sirius-components-collaborative-diagrams/src/main/resources/messages/sirius-web-spring-collaborative-diagrams_ru.properties @@ -0,0 +1,24 @@ +################################################################################################ +# Copyright (c) 2024 Obeo. +# This program and the accompanying materials +# are made available under the terms of the Eclipse Public License v2.0 +# which accompanies this distribution, and is available at +# https://www.eclipse.org/legal/epl-2.0/ +# +# SPDX-License-Identifier: EPL-2.0 +# +# Contributors: +# Obeo - initial API and implementation +################################################################################################ +INVALID_INPUT=\u041D\u0435\u043A\u043E\u0440\u0440\u0435\u043A\u0442\u043D\u044B\u0439 \u0442\u0438\u043F "{0}", \u043E\u0436\u0438\u0434\u0430\u0435\u0442\u0441\u044F "{1}" +EDGE_NOT_FOUND=\u0421\u0432\u044F\u0437\u044C "{0}" \u043D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D\u0430 +RECONNECT_EDGE_SAME_EDGE_END=\u0421\u0432\u044F\u0437\u044C \u0441\u0441\u044B\u043B\u0430\u0435\u0442\u0441\u044F \u043D\u0430 \u0442\u043E\u0442 \u0436\u0435 \u044D\u043B\u0435\u043C\u0435\u043D\u0442 +NODE_NOT_FOUND=\u0424\u0438\u0433\u0443\u0440\u0430 "{0}" \u043D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D\u0430 +SEMANTIC_OBJECT_NOT_FOUND=\u0421\u0435\u043C\u0430\u043D\u0442\u0438\u0447\u0435\u0441\u043A\u0438\u0439 \u043E\u0431\u044A\u0435\u043A\u0442 "{0}" \u043D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D +NODE_DESCRIPTION_NOT_FOUND=\u0421\u043F\u0435\u0446\u0438\u0444\u0438\u043A\u0430\u0446\u0438\u044F \u0444\u0438\u0433\u0443\u0440 "{0}" \u043D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D\u0430 +EDGE_DESCRIPTION_NOT_FOUND=\u0421\u043F\u0435\u0446\u0438\u0444\u0438\u043A\u0430\u0446\u0438\u044F \u0441\u0432\u044F\u0437\u0435\u0439 "{0}" \u043D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D\u0430 +DELETE_EGDE_FAILED=\u041D\u0435 \u0443\u0434\u0430\u043B\u043E\u0441\u044C \u0443\u0434\u0430\u043B\u0438\u0442\u044C \u0441\u0432\u044F\u0437\u044C "{0}" +DELETE_NODE_FAILED=\u041D\u0435 \u0443\u0434\u0430\u043B\u043E\u0441\u044C \u0443\u0434\u0430\u043B\u0438\u0442\u044C \u0444\u0438\u0433\u0443\u0440\u0443 "{0}" +DELETE_FAILED=\u041F\u0440\u043E\u0438\u0437\u043E\u0448\u043B\u0430 \u043A\u0430\u043A \u043C\u0438\u043D\u0438\u043C\u0443\u043C \u043E\u0434\u043D\u0430 \u043E\u0448\u0438\u0431\u043A\u0430 \u043F\u0440\u0438 \u0443\u0434\u0430\u043B\u0435\u043D\u0438\u0438: +INVALID_DROP=\u041D\u0435\u043B\u044C\u0437\u044F \u043F\u0435\u0440\u0435\u0442\u0430\u0449\u0438\u0442\u044C \u044D\u0442\u043E\u0442 \u043E\u0431\u044A\u0435\u043A\u0442 \u0441\u044E\u0434\u0430 +INVALID_NEW_VALUE=\u0417\u043D\u0430\u0447\u0435\u043D\u0438\u0435 "{0}" \u043D\u0435\u043A\u043E\u0440\u0440\u0435\u043A\u0442\u043D\u043E diff --git a/packages/domain/backend/sirius-components-domain-edit/src/main/resources/plugin_ru.properties b/packages/domain/backend/sirius-components-domain-edit/src/main/resources/plugin_ru.properties new file mode 100644 index 0000000000..68422a44b1 --- /dev/null +++ b/packages/domain/backend/sirius-components-domain-edit/src/main/resources/plugin_ru.properties @@ -0,0 +1,49 @@ +# Copyright (c) 2024 Obeo. +# This program and the accompanying materials +# are made available under the terms of the Eclipse Public License v2.0 +# which accompanies this distribution, and is available at +# https://www.eclipse.org/legal/epl-2.0/ +# +# SPDX-License-Identifier: EPL-2.0 +# +# Contributors: +# Obeo - initial API and implementation + +pluginName = Domain Edit Support +providerName = www.example.org + +_UI_CreateChild_text = {0} +_UI_CreateChild_text2 = {1} "{0}" +_UI_CreateChild_text3 = {1} +_UI_CreateChild_tooltip = \u0421\u043E\u0437\u0434\u0430\u0442\u044C \u043E\u0431\u044A\u0435\u043A\u0442 "{0}" \u0432 \u043A\u043E\u043B\u043B\u0435\u043A\u0446\u0438\u0438 "{1}" +_UI_CreateChild_description = \u0421\u043E\u0437\u0434\u0430\u0442\u044C \u043D\u043E\u0432\u044B\u0439 \u0434\u043E\u0447\u0435\u0440\u043D\u0438\u0439 \u044D\u043B\u0435\u043C\u0435\u043D\u0442 \u0442\u0438\u043F\u0430 "{0}" \u0432 \u043A\u043E\u043B\u043B\u0435\u043A\u0446\u0438\u0438 "{1}" \u043E\u0431\u044A\u0435\u043A\u0442\u0430 "{2}". +_UI_CreateSibling_description = \u0421\u043E\u0437\u0434\u0430\u0442\u044C \u043D\u043E\u0432\u044B\u0439 \u0441\u043E\u0441\u0435\u0434\u043D\u0438\u0439 \u044D\u043B\u0435\u043C\u0435\u043D\u0442 \u0442\u0438\u043F\u0430 "{0}" \u0434\u043B\u044F \u043E\u0431\u044A\u0435\u043A\u0442\u0430 "{2}", \u0432 \u043A\u043E\u043B\u043B\u0435\u043A\u0446\u0438\u0438 "{1}" \u0438\u0445 \u0440\u043E\u0434\u0438\u0442\u0435\u043B\u044C\u0441\u043A\u043E\u0433\u043E \u043E\u0431\u044A\u0435\u043A\u0442\u0430. + +_UI_PropertyDescriptor_description = \u0421\u0432\u043E\u0439\u0441\u0442\u0432\u043E "{0}" \u043E\u0431\u044A\u0435\u043A\u0442\u0430 "{1}" + +_UI_NamedElement_type = \u0418\u043C\u0435\u043D\u043E\u0432\u0430\u043D\u043D\u044B\u0439 \u044D\u043B\u0435\u043C\u0435\u043D\u0442 +_UI_Domain_type = \u041F\u0440\u0435\u0434\u043C\u0435\u0442\u043D\u0430\u044F \u043E\u0431\u043B\u0430\u0441\u0442\u044C +_UI_Entity_type = \u0421\u0443\u0449\u043D\u043E\u0441\u0442\u044C +_UI_Feature_type = \u0421\u0432\u043E\u0439\u0441\u0442\u0432\u043E +_UI_Attribute_type = \u0410\u0442\u0440\u0438\u0431\u0443\u0442 +_UI_Relation_type = \u041E\u0442\u043D\u043E\u0448\u0435\u043D\u0438\u0435 +_UI_Unknown_type = \u041E\u0431\u044A\u0435\u043A\u0442 + +_UI_Unknown_datatype = \u0417\u043D\u0430\u0447\u0435\u043D\u0438\u0435 + +_UI_NamedElement_name_feature = \u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 +_UI_Domain_types_feature = \u0422\u0438\u043F\u044B +_UI_Entity_attributes_feature = \u0410\u0442\u0440\u0438\u0431\u0443\u0442\u044B +_UI_Entity_relations_feature = \u041E\u0442\u043D\u043E\u0448\u0435\u043D\u0438\u044F +_UI_Entity_superTypes_feature = \u0420\u043E\u0434\u0438\u0442\u0435\u043B\u044C\u0441\u043A\u0438\u0435 \u0442\u0438\u043F\u044B +_UI_Entity_abstract_feature = \u0410\u0431\u0441\u0442\u0440\u0430\u043A\u0442\u043D\u044B\u0439 +_UI_Feature_optional_feature = \u041D\u0435\u043E\u0431\u044F\u0437\u0430\u0442\u0435\u043B\u044C\u043D\u044B\u0439 +_UI_Feature_many_feature = \u041C\u043D\u043E\u0436\u0435\u0441\u0442\u0432\u0435\u043D\u043D\u044B\u0439 +_UI_Attribute_type_feature = \u0422\u0438\u043F +_UI_Relation_containment_feature = \u0427\u0430\u0441\u0442\u044C-\u0446\u0435\u043B\u043E\u0435 +_UI_Relation_targetType_feature = \u0422\u0438\u043F +_UI_Unknown_feature = \u041D\u0435 \u043E\u043F\u0440\u0435\u0434\u0435\u043B\u0435\u043D\u043E + +_UI_DataType_STRING_literal = \u0441\u0442\u0440\u043E\u043A\u0430 +_UI_DataType_BOOLEAN_literal = \u043B\u043E\u0433\u0438\u0447\u0435\u0441\u043A\u043E\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435 +_UI_DataType_NUMBER_literal = \u0447\u0438\u0441\u043B\u043E diff --git a/packages/emf/backend/sirius-components-emf-forms/src/main/java/org/eclipse/sirius/components/emf/forms/EEnumIfDescriptionProvider.java b/packages/emf/backend/sirius-components-emf-forms/src/main/java/org/eclipse/sirius/components/emf/forms/EEnumIfDescriptionProvider.java index e942990f55..588eb47c55 100644 --- a/packages/emf/backend/sirius-components-emf-forms/src/main/java/org/eclipse/sirius/components/emf/forms/EEnumIfDescriptionProvider.java +++ b/packages/emf/backend/sirius-components-emf-forms/src/main/java/org/eclipse/sirius/components/emf/forms/EEnumIfDescriptionProvider.java @@ -128,13 +128,7 @@ private Function getOptionIdProvider() { } private Function getOptionLabelProvider() { - return variableManager -> { - Object litteral = variableManager.getVariables().get(SelectComponent.CANDIDATE_VARIABLE); - if (litteral instanceof Enumerator) { - return ((Enumerator) litteral).getLiteral(); - } - return ""; - }; + return new EEnumLiteralLabelProvider(EMFFormDescriptionProvider.ESTRUCTURAL_FEATURE, this.composedAdapterFactory); } private Function getOptionSelectedProvider() { diff --git a/packages/emf/backend/sirius-components-emf-forms/src/main/java/org/eclipse/sirius/components/emf/forms/EEnumLiteralLabelProvider.java b/packages/emf/backend/sirius-components-emf-forms/src/main/java/org/eclipse/sirius/components/emf/forms/EEnumLiteralLabelProvider.java new file mode 100644 index 0000000000..93867bfff8 --- /dev/null +++ b/packages/emf/backend/sirius-components-emf-forms/src/main/java/org/eclipse/sirius/components/emf/forms/EEnumLiteralLabelProvider.java @@ -0,0 +1,66 @@ +/******************************************************************************* + * Copyright (c) 2024 Obeo. + * This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v2.0 + * which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + * + * Contributors: + * Obeo - initial API and implementation + *******************************************************************************/ +package org.eclipse.sirius.components.emf.forms; + +import java.util.Objects; +import java.util.function.Function; + +import org.eclipse.emf.common.notify.Adapter; +import org.eclipse.emf.common.notify.AdapterFactory; +import org.eclipse.emf.common.util.Enumerator; +import org.eclipse.emf.ecore.EObject; +import org.eclipse.emf.ecore.EStructuralFeature; +import org.eclipse.emf.edit.provider.IItemPropertyDescriptor; +import org.eclipse.emf.edit.provider.IItemPropertySource; +import org.eclipse.sirius.components.forms.components.SelectComponent; +import org.eclipse.sirius.components.representations.VariableManager; + +/** + * Utility class used to provide a label for an enumeration literal in the variable manager. + * + * @author aresekb + */ +public class EEnumLiteralLabelProvider implements Function { + + private final String featureVariableName; + + private final AdapterFactory adapterFactory; + + public EEnumLiteralLabelProvider(String featureVariableName, AdapterFactory adapterFactory) { + this.featureVariableName = Objects.requireNonNull(featureVariableName); + this.adapterFactory = Objects.requireNonNull(adapterFactory); + } + + @Override + public String apply(VariableManager variableManager) { + Object object = variableManager.getVariables().get(VariableManager.SELF); + Object feature = variableManager.getVariables().get(this.featureVariableName); + Object literal = variableManager.getVariables().get(SelectComponent.CANDIDATE_VARIABLE); + + String result = ""; + if (object instanceof EObject eObject && feature instanceof EStructuralFeature eStructuralFeature) { + Adapter adapter = this.adapterFactory.adapt(eObject, IItemPropertySource.class); + if (adapter instanceof IItemPropertySource itemPropertySource) { + IItemPropertyDescriptor descriptor = itemPropertySource.getPropertyDescriptor(eObject, eStructuralFeature); + if (descriptor != null) { + result = descriptor.getLabelProvider(eObject).getText(literal); + } + } + } + if (result.isEmpty() && literal instanceof Enumerator enumerator) { + result = enumerator.getLiteral(); + } + return result; + } + +} diff --git a/packages/emf/backend/sirius-components-emf-forms/src/main/java/org/eclipse/sirius/components/emf/forms/EMFFormDescriptionProvider.java b/packages/emf/backend/sirius-components-emf-forms/src/main/java/org/eclipse/sirius/components/emf/forms/EMFFormDescriptionProvider.java index c0d0944d7c..48ca972769 100644 --- a/packages/emf/backend/sirius-components-emf-forms/src/main/java/org/eclipse/sirius/components/emf/forms/EMFFormDescriptionProvider.java +++ b/packages/emf/backend/sirius-components-emf-forms/src/main/java/org/eclipse/sirius/components/emf/forms/EMFFormDescriptionProvider.java @@ -204,7 +204,7 @@ private GroupDescription getGroupDescription() { return GroupDescription.newGroupDescription("groupId") .idProvider(variableManager -> "Core Properties") - .labelProvider(variableManager -> "Core Properties") + .labelProvider(variableManager -> this.emfMessageService.coreProperties()) .semanticElementsProvider(variableManager -> Collections.singletonList(variableManager.getVariables().get(VariableManager.SELF))) .controlDescriptions(controlDescriptions) .build(); diff --git a/packages/emf/backend/sirius-components-emf/src/main/java/org/eclipse/sirius/components/emf/services/DefaultEditService.java b/packages/emf/backend/sirius-components-emf/src/main/java/org/eclipse/sirius/components/emf/services/DefaultEditService.java index 618253f112..18cca4afb9 100644 --- a/packages/emf/backend/sirius-components-emf/src/main/java/org/eclipse/sirius/components/emf/services/DefaultEditService.java +++ b/packages/emf/backend/sirius-components-emf/src/main/java/org/eclipse/sirius/components/emf/services/DefaultEditService.java @@ -146,9 +146,10 @@ public List getChildCreationDescriptions(IEditingConte if (adapter instanceof IEditingDomainItemProvider editingDomainItemProvider) { if (editingDomainItemProvider instanceof Helper helper) { for (CommandParameter commandParameter : commandParameters) { - String text = helper.getCreateChildText(eObject, commandParameter.getFeature(), commandParameter.getValue(), null); + String id = this.getChildCreationDescriptionId(commandParameter); + String label = helper.getCreateChildText(eObject, commandParameter.getFeature(), commandParameter.getValue(), null); List iconURL = this.objectService.getImagePath(commandParameter.getValue()); - ChildCreationDescription childCreationDescription = new ChildCreationDescription(text, text, iconURL); + ChildCreationDescription childCreationDescription = new ChildCreationDescription(id, label, iconURL); childCreationDescriptions.add(childCreationDescription); } } @@ -166,37 +167,30 @@ public Optional createChild(IEditingContext editingContext, Object objec .map(IEMFEditingContext.class::cast) .map(IEMFEditingContext::getDomain); - Optional optionalEObject = Optional.of(object) + var optionalEObject = Optional.of(object) .filter(EObject.class::isInstance) .map(EObject.class::cast); if (optionalEditingDomain.isPresent() && optionalEObject.isPresent()) { - AdapterFactoryEditingDomain editingDomain = optionalEditingDomain.get(); - EObject eObject = optionalEObject.get(); - - Collection newChildDescriptors = editingDomain.getNewChildDescriptors(eObject, null); - - List commandParameters = newChildDescriptors.stream() + var editingDomain = optionalEditingDomain.get(); + var eObject = optionalEObject.get(); + var newChildDescriptors = editingDomain.getNewChildDescriptors(eObject, null); + return newChildDescriptors.stream() .filter(CommandParameter.class::isInstance) .map(CommandParameter.class::cast) - .toList(); - - Adapter adapter = editingDomain.getAdapterFactory().adapt(eObject, IEditingDomainItemProvider.class); - if (adapter instanceof IEditingDomainItemProvider editingDomainItemProvider) { - if (editingDomainItemProvider instanceof Helper helper) { - for (CommandParameter commandParameter : commandParameters) { - String text = helper.getCreateChildText(eObject, commandParameter.getFeature(), commandParameter.getValue(), null); - - if (childCreationDescriptionId.equals(text)) { - return this.createObject(editingDomain, eObject, commandParameter); - } - } - } - } + .filter(commandParameter -> childCreationDescriptionId.equals(this.getChildCreationDescriptionId(commandParameter))) + .findFirst() + .flatMap(commandParameter -> this.createObject(editingDomain, eObject, commandParameter)); } return Optional.empty(); } + private String getChildCreationDescriptionId(CommandParameter commandParameter) { + var containment = (EReference) commandParameter.getFeature(); + var value = (EObject) commandParameter.getValue(); + return containment.getName() + "-" + value.eClass().getName(); + } + private Optional createObject(AdapterFactoryEditingDomain editingDomain, EObject eObject, CommandParameter commandParameter) { Optional objectOptional = Optional.empty(); diff --git a/packages/emf/backend/sirius-components-emf/src/main/java/org/eclipse/sirius/components/emf/services/DefaultLabelService.java b/packages/emf/backend/sirius-components-emf/src/main/java/org/eclipse/sirius/components/emf/services/DefaultLabelService.java index b1b8351ce7..3ee215f71f 100644 --- a/packages/emf/backend/sirius-components-emf/src/main/java/org/eclipse/sirius/components/emf/services/DefaultLabelService.java +++ b/packages/emf/backend/sirius-components-emf/src/main/java/org/eclipse/sirius/components/emf/services/DefaultLabelService.java @@ -64,6 +64,12 @@ public String getLabel(Object object) { .map(eObject::eGet) .map(Object::toString) .orElse(""); + if (label.isBlank()) { + Adapter adapter = this.composedAdapterFactory.adapt(eObject, IItemLabelProvider.class); + if (adapter instanceof IItemLabelProvider labelProvider && !(adapter instanceof ReflectiveItemProvider)) { + label = labelProvider.getText(eObject); + } + } } else if (object instanceof IRepresentation representation) { label = representation.getLabel(); } diff --git a/packages/emf/backend/sirius-components-emf/src/main/java/org/eclipse/sirius/components/emf/services/messages/EMFMessageService.java b/packages/emf/backend/sirius-components-emf/src/main/java/org/eclipse/sirius/components/emf/services/messages/EMFMessageService.java index a283a0bbcc..7d9e3f259c 100644 --- a/packages/emf/backend/sirius-components-emf/src/main/java/org/eclipse/sirius/components/emf/services/messages/EMFMessageService.java +++ b/packages/emf/backend/sirius-components-emf/src/main/java/org/eclipse/sirius/components/emf/services/messages/EMFMessageService.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2019, 2023 Obeo. + * Copyright (c) 2019, 2024 Obeo. * This program and the accompanying materials * are made available under the terms of the Eclipse Public License v2.0 * which accompanies this distribution, and is available at @@ -52,4 +52,24 @@ public String upperBoundaryReached(String newInstanceClass, String feature) { return this.messageSourceAccessor.getMessage("UPPER_BOUNDARY_REACHED", new Object[] { newInstanceClass, feature }); } + @Override + public String properties() { + return this.messageSourceAccessor.getMessage("PROPERTIES"); + } + + @Override + public String coreProperties() { + return this.messageSourceAccessor.getMessage("CORE_PROPERTIES"); + } + + @Override + public String general() { + return this.messageSourceAccessor.getMessage("GENERAL"); + } + + @Override + public String shapePreview() { + return this.messageSourceAccessor.getMessage("SHAPE_PREVIEW"); + } + } diff --git a/packages/emf/backend/sirius-components-emf/src/main/java/org/eclipse/sirius/components/emf/services/messages/IEMFMessageService.java b/packages/emf/backend/sirius-components-emf/src/main/java/org/eclipse/sirius/components/emf/services/messages/IEMFMessageService.java index f8bd0f34c8..08a2219ad1 100644 --- a/packages/emf/backend/sirius-components-emf/src/main/java/org/eclipse/sirius/components/emf/services/messages/IEMFMessageService.java +++ b/packages/emf/backend/sirius-components-emf/src/main/java/org/eclipse/sirius/components/emf/services/messages/IEMFMessageService.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2019, 2023 Obeo. + * Copyright (c) 2019, 2024 Obeo. * This program and the accompanying materials * are made available under the terms of the Eclipse Public License v2.0 * which accompanies this distribution, and is available at @@ -27,6 +27,14 @@ public interface IEMFMessageService { String upperBoundaryReached(String newInstanceClass, String feature); + String properties(); + + String coreProperties(); + + String general(); + + String shapePreview(); + /** * Implementation which does nothing, used for mocks in unit tests. * @@ -53,5 +61,25 @@ public String invalidNumber(String newValue) { public String upperBoundaryReached(String newInstanceClass, String feature) { return ""; } + + @Override + public String properties() { + return ""; + } + + @Override + public String coreProperties() { + return ""; + } + + @Override + public String general() { + return ""; + } + + @Override + public String shapePreview() { + return ""; + } } } diff --git a/packages/emf/backend/sirius-components-emf/src/main/resources/messages/sirius-web-emf.properties b/packages/emf/backend/sirius-components-emf/src/main/resources/messages/sirius-web-emf.properties index 071856c928..eb7a1fda49 100644 --- a/packages/emf/backend/sirius-components-emf/src/main/resources/messages/sirius-web-emf.properties +++ b/packages/emf/backend/sirius-components-emf/src/main/resources/messages/sirius-web-emf.properties @@ -1,5 +1,5 @@ ################################################################################ -# Copyright (c) 2019, 2023 Obeo. +# Copyright (c) 2019, 2024 Obeo. # This program and the accompanying materials # are made available under the terms of the Eclipse Public License v2.0 # which accompanies this distribution, and is available at @@ -14,3 +14,7 @@ INVALID_INPUT = Invalid input type, "{0}" has been received while "{1}" was expe UNEXPECTED_ERROR = An unexpected error has occurred, please contact the server administrator INVALID_NUMBER = The new value "{0}" is not a valid number UPPER_BOUNDARY_REACHED = Unable to create a new instance of "{0}" in feature "{1}" because it has reached its upper-bound cardinality. +PROPERTIES = Properties +CORE_PROPERTIES = Core Properties +GENERAL = General +SHAPE_PREVIEW = Shape Preview diff --git a/packages/emf/backend/sirius-components-emf/src/main/resources/messages/sirius-web-emf_ru.properties b/packages/emf/backend/sirius-components-emf/src/main/resources/messages/sirius-web-emf_ru.properties new file mode 100644 index 0000000000..69c03deef8 --- /dev/null +++ b/packages/emf/backend/sirius-components-emf/src/main/resources/messages/sirius-web-emf_ru.properties @@ -0,0 +1,20 @@ +################################################################################ +# Copyright (c) 2024 Obeo. +# This program and the accompanying materials +# are made available under the terms of the Eclipse Public License v2.0 +# which accompanies this distribution, and is available at +# https://www.eclipse.org/legal/epl-2.0/ +# +# SPDX-License-Identifier: EPL-2.0 +# +# Contributors: +# Obeo - initial API and implementation +################################################################################# +INVALID_INPUT = \u041D\u0435\u043A\u043E\u0440\u0440\u0435\u043A\u0442\u043D\u044B\u0439 \u0442\u0438\u043F, \u0431\u044B\u043B\u043E \u043F\u043E\u043B\u0443\u0447\u0435\u043D\u043E "{0}", \u0430 \u043E\u0436\u0438\u0434\u0430\u043B\u043E\u0441\u044C "{1}" +UNEXPECTED_ERROR = \u041F\u0440\u043E\u0438\u0437\u043E\u0448\u043B\u0430 \u043D\u0435\u043E\u0436\u0438\u0434\u0430\u043D\u043D\u0430\u044F \u043E\u0448\u0438\u0431\u043A\u0430, \u0441\u0432\u044F\u0436\u0438\u0442\u0435\u0441\u044C, \u043F\u043E\u0436\u0430\u043B\u0443\u0439\u0441\u0442\u0430, \u0441 \u0430\u0434\u043C\u0438\u043D\u0438\u0441\u0442\u0440\u0430\u0442\u043E\u0440\u043E\u043C +INVALID_NUMBER = \u041D\u043E\u0432\u043E\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435 "{0}" \u043D\u0435 \u044F\u0432\u043B\u044F\u0435\u0442\u0441\u044F \u0447\u0438\u0441\u043B\u043E\u043C +UPPER_BOUNDARY_REACHED = \u041D\u0435 \u0443\u0434\u0430\u043B\u043E\u0441\u044C \u0441\u043E\u0437\u0434\u0430\u0442\u044C \u043E\u0431\u044A\u0435\u043A\u0442 "{0}" \u0432 \u043A\u043E\u043B\u043B\u0435\u043A\u0446\u0438\u0438 "{1}", \u043F\u043E\u0442\u043E\u043C\u0443 \u0447\u0442\u043E \u0434\u043E\u0441\u0442\u0438\u0433\u043D\u0443\u0442 \u043F\u0440\u0435\u0434\u0435\u043B \u043D\u0430 \u043C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u043E\u0435 \u043A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u043E\u0432. +PROPERTIES = \u0421\u0432\u043E\u0439\u0441\u0442\u0432\u0430 +CORE_PROPERTIES = \u041E\u0441\u043D\u043E\u0432\u043D\u044B\u0435 \u0441\u0432\u043E\u0439\u0441\u0442\u0432\u0430 +GENERAL = \u041E\u0431\u0449\u0438\u0435 +SHAPE_PREVIEW = \u041F\u0440\u0435\u0434\u043F\u0440\u043E\u0441\u043C\u043E\u0442\u0440 \u0444\u0438\u0433\u0443\u0440\u044B diff --git a/packages/forms/backend/sirius-components-forms-tests/src/main/java/org/eclipse/sirius/components/forms/tests/navigation/FormNavigator.java b/packages/forms/backend/sirius-components-forms-tests/src/main/java/org/eclipse/sirius/components/forms/tests/navigation/FormNavigator.java index 7f3302b263..6183cb1e4c 100644 --- a/packages/forms/backend/sirius-components-forms-tests/src/main/java/org/eclipse/sirius/components/forms/tests/navigation/FormNavigator.java +++ b/packages/forms/backend/sirius-components-forms-tests/src/main/java/org/eclipse/sirius/components/forms/tests/navigation/FormNavigator.java @@ -29,6 +29,10 @@ public FormNavigator(Form form) { this.form = Objects.requireNonNull(form); } + public PageNavigator page(int index) { + return new PageNavigator(this.form.getPages().get(index)); + } + public PageNavigator page(String label) { return this.form.getPages().stream() .filter(page -> page.getLabel().equals(label)) diff --git a/packages/sirius-web/backend/sirius-web-sample-application/src/main/java/org/eclipse/sirius/web/sample/configuration/DomainPropertiesConfigurer.java b/packages/sirius-web/backend/sirius-web-sample-application/src/main/java/org/eclipse/sirius/web/sample/configuration/DomainPropertiesConfigurer.java index a0ceb3d9c2..9448c7247c 100644 --- a/packages/sirius-web/backend/sirius-web-sample-application/src/main/java/org/eclipse/sirius/web/sample/configuration/DomainPropertiesConfigurer.java +++ b/packages/sirius-web/backend/sirius-web-sample-application/src/main/java/org/eclipse/sirius/web/sample/configuration/DomainPropertiesConfigurer.java @@ -45,6 +45,7 @@ import org.eclipse.sirius.components.view.form.WidgetDescription; import org.eclipse.sirius.components.view.widget.reference.ReferenceFactory; import org.eclipse.sirius.components.view.widget.reference.ReferenceWidgetDescription; +import org.eclipse.sirius.web.sample.messages.DomainPropertiesMessageService; import org.eclipse.sirius.web.sample.services.DomainAttributeServices; import org.eclipse.sirius.web.services.api.representations.IInMemoryViewRegistry; import org.springframework.context.annotation.Configuration; @@ -65,10 +66,13 @@ public class DomainPropertiesConfigurer implements IPropertiesDescriptionRegistr private final IInMemoryViewRegistry viewRegistry; - public DomainPropertiesConfigurer(ViewFormDescriptionConverter converter, IFeedbackMessageService feedbackMessageService, IInMemoryViewRegistry viewRegistry) { + private final DomainPropertiesMessageService messageService; + + public DomainPropertiesConfigurer(ViewFormDescriptionConverter converter, IFeedbackMessageService feedbackMessageService, IInMemoryViewRegistry viewRegistry, DomainPropertiesMessageService messageService) { this.viewRegistry = Objects.requireNonNull(viewRegistry); this.converter = Objects.requireNonNull(converter); this.feedbackMessageService = Objects.requireNonNull(feedbackMessageService); + this.messageService = Objects.requireNonNull(messageService); } @Override @@ -101,7 +105,7 @@ private FormDescription getAttributeDetails() { FormDescription form = FormFactory.eINSTANCE.createFormDescription(); form.setName("Attribute Details"); form.setDomainType("domain::Attribute"); - form.setTitleExpression("Attribute Details"); + form.setTitleExpression(this.messageService.getMessage("ATTRIBUTE_DETAILS")); PageDescription page = FormFactory.eINSTANCE.createPageDescription(); page.setDomainType("domain::Attribute"); @@ -123,13 +127,13 @@ private GroupDescription createEntityGroup() { GroupDescription group = FormFactory.eINSTANCE.createGroupDescription(); group.setDisplayMode(GroupDisplayMode.LIST); group.setName(CORE_PROPERTIES); - group.setLabelExpression(CORE_PROPERTIES); + group.setLabelExpression(this.messageService.getMessage("CORE_PROPERTIES")); group.setSemanticCandidatesExpression("aql:self"); - group.getChildren().add(this.createStringAttributeEditWidget("Name", DomainPackage.Literals.NAMED_ELEMENT__NAME.getName())); - group.getChildren().add(this.createReferenceWidget("Super Type", DomainPackage.Literals.ENTITY__SUPER_TYPES.getName())); - group.getChildren().add(this.createReferenceWidget("Attributes", DomainPackage.Literals.ENTITY__ATTRIBUTES.getName())); - group.getChildren().add(this.createReferenceWidget("Relations", DomainPackage.Literals.ENTITY__RELATIONS.getName())); - group.getChildren().add(this.createBooleanAttributeEditWidget("Abstract", DomainPackage.Literals.ENTITY__ABSTRACT.getName())); + group.getChildren().add(this.createStringAttributeEditWidget("Name", "NAME", DomainPackage.Literals.NAMED_ELEMENT__NAME.getName())); + group.getChildren().add(this.createReferenceWidget("Super Types", "SUPER_TYPES", DomainPackage.Literals.ENTITY__SUPER_TYPES.getName())); + group.getChildren().add(this.createReferenceWidget("Attributes", "ATTRIBUTES", DomainPackage.Literals.ENTITY__ATTRIBUTES.getName())); + group.getChildren().add(this.createReferenceWidget("Relations", "RELATIONS", DomainPackage.Literals.ENTITY__RELATIONS.getName())); + group.getChildren().add(this.createBooleanAttributeEditWidget("Abstract", "ABSTRACT", DomainPackage.Literals.ENTITY__ABSTRACT.getName())); return group; } @@ -137,20 +141,20 @@ private GroupDescription createGroup() { GroupDescription group = FormFactory.eINSTANCE.createGroupDescription(); group.setDisplayMode(GroupDisplayMode.LIST); group.setName(CORE_PROPERTIES); - group.setLabelExpression(CORE_PROPERTIES); + group.setLabelExpression(this.messageService.getMessage("CORE_PROPERTIES")); group.setSemanticCandidatesExpression("aql:self"); - group.getChildren().add(this.createStringAttributeEditWidget("Name", DomainPackage.Literals.NAMED_ELEMENT__NAME.getName())); + group.getChildren().add(this.createStringAttributeEditWidget("Name", "NAME", DomainPackage.Literals.NAMED_ELEMENT__NAME.getName())); group.getChildren().add(this.createTypeSelectorWidget()); - group.getChildren().add(this.createBooleanAttributeEditWidget("Optional", DomainPackage.Literals.FEATURE__OPTIONAL.getName())); - group.getChildren().add(this.createBooleanAttributeEditWidget("Many", DomainPackage.Literals.FEATURE__MANY.getName())); + group.getChildren().add(this.createBooleanAttributeEditWidget("Optional", "OPTIONAL", DomainPackage.Literals.FEATURE__OPTIONAL.getName())); + group.getChildren().add(this.createBooleanAttributeEditWidget("Many", "MANY", DomainPackage.Literals.FEATURE__MANY.getName())); group.getChildren().add(this.createCardinalityLabel()); return group; } - private WidgetDescription createStringAttributeEditWidget(String title, String attributeName) { + private WidgetDescription createStringAttributeEditWidget(String name, String label, String attributeName) { TextfieldDescription textfield = FormFactory.eINSTANCE.createTextfieldDescription(); - textfield.setName(title); - textfield.setLabelExpression(title); + textfield.setName(name); + textfield.setLabelExpression(this.messageService.getMessage(label)); textfield.setValueExpression("aql:self.%s".formatted(attributeName)); SetValue setValueOperation = ViewFactory.eINSTANCE.createSetValue(); setValueOperation.setFeatureName(attributeName); @@ -159,10 +163,10 @@ private WidgetDescription createStringAttributeEditWidget(String title, String a return textfield; } - private WidgetDescription createBooleanAttributeEditWidget(String title, String attributeName) { + private WidgetDescription createBooleanAttributeEditWidget(String name, String label, String attributeName) { CheckboxDescription checkbox = FormFactory.eINSTANCE.createCheckboxDescription(); - checkbox.setName(title); - checkbox.setLabelExpression(title); + checkbox.setName(name); + checkbox.setLabelExpression(this.messageService.getMessage(label)); checkbox.setValueExpression("aql:self.%s".formatted(attributeName)); SetValue setValueOperation = ViewFactory.eINSTANCE.createSetValue(); setValueOperation.setFeatureName(attributeName); @@ -174,7 +178,7 @@ private WidgetDescription createBooleanAttributeEditWidget(String title, String private WidgetDescription createTypeSelectorWidget() { SelectDescription selectWidget = FormFactory.eINSTANCE.createSelectDescription(); selectWidget.setName("Type"); - selectWidget.setLabelExpression("Type"); + selectWidget.setLabelExpression(this.messageService.getMessage("TYPE")); selectWidget.setCandidatesExpression("aql:self.getAvailableDataTypes()"); selectWidget.setValueExpression("aql:self.getDataType()"); selectWidget.setCandidateLabelExpression("aql:candidate.capitalize()"); @@ -184,10 +188,10 @@ private WidgetDescription createTypeSelectorWidget() { return selectWidget; } - private WidgetDescription createReferenceWidget(String name, String referenceName) { + private WidgetDescription createReferenceWidget(String name, String label, String referenceName) { ReferenceWidgetDescription refWidget = ReferenceFactory.eINSTANCE.createReferenceWidgetDescription(); refWidget.setName(name); - refWidget.setLabelExpression(name); + refWidget.setLabelExpression(this.messageService.getMessage(label)); refWidget.setReferenceNameExpression(referenceName); return refWidget; } @@ -195,7 +199,7 @@ private WidgetDescription createReferenceWidget(String name, String referenceNam private WidgetDescription createCardinalityLabel() { LabelDescription cardinalityLabel = FormFactory.eINSTANCE.createLabelDescription(); cardinalityLabel.setName("Cardinality"); - cardinalityLabel.setLabelExpression("Cardinality"); + cardinalityLabel.setLabelExpression(this.messageService.getMessage("CARDINALITY")); cardinalityLabel.setValueExpression("aql:(if self.optional then '0' else '1' endif) + '..' + (if self.many then '*' else '1' endif)"); return cardinalityLabel; } diff --git a/packages/sirius-web/backend/sirius-web-sample-application/src/main/java/org/eclipse/sirius/web/sample/configuration/MultipleDomainPropertiesConfigurer.java b/packages/sirius-web/backend/sirius-web-sample-application/src/main/java/org/eclipse/sirius/web/sample/configuration/MultipleDomainPropertiesConfigurer.java index 68a765d278..de87007591 100644 --- a/packages/sirius-web/backend/sirius-web-sample-application/src/main/java/org/eclipse/sirius/web/sample/configuration/MultipleDomainPropertiesConfigurer.java +++ b/packages/sirius-web/backend/sirius-web-sample-application/src/main/java/org/eclipse/sirius/web/sample/configuration/MultipleDomainPropertiesConfigurer.java @@ -37,6 +37,7 @@ import org.eclipse.sirius.components.view.form.PageDescription; import org.eclipse.sirius.components.view.form.SelectDescription; import org.eclipse.sirius.components.view.form.WidgetDescription; +import org.eclipse.sirius.web.sample.messages.DomainPropertiesMessageService; import org.eclipse.sirius.web.sample.services.DomainAttributeServices; import org.springframework.context.annotation.Configuration; @@ -50,8 +51,11 @@ public class MultipleDomainPropertiesConfigurer implements IPropertiesDescriptio private final ViewFormDescriptionConverter converter; - public MultipleDomainPropertiesConfigurer(ViewFormDescriptionConverter converter) { + private final DomainPropertiesMessageService messageService; + + public MultipleDomainPropertiesConfigurer(ViewFormDescriptionConverter converter, DomainPropertiesMessageService messageService) { this.converter = Objects.requireNonNull(converter); + this.messageService = Objects.requireNonNull(messageService); } @Override @@ -78,13 +82,13 @@ private FormDescription getAttributeDetails() { FormDescription form = FormFactory.eINSTANCE.createFormDescription(); form.setName("Attribute Details"); form.setDomainType("domain::Attribute"); - form.setTitleExpression("Attribute Details"); + form.setTitleExpression(this.messageService.getMessage("ATTRIBUTE_DETAILS")); PageDescription page = FormFactory.eINSTANCE.createPageDescription(); page.setSemanticCandidatesExpression("aql:self"); page.setDomainType("domain::Attribute"); page.setPreconditionExpression("aql:selection->filter(domain::Attribute)->size()>1"); - page.setLabelExpression("MultiSelection"); + page.setLabelExpression(this.messageService.getMessage("MULTI_SELECTION")); form.getPages().add(page); page.getGroups().add(this.createGroup()); return form; @@ -94,19 +98,19 @@ private GroupDescription createGroup() { GroupDescription group = FormFactory.eINSTANCE.createGroupDescription(); group.setDisplayMode(GroupDisplayMode.LIST); group.setName("Core Properties"); - group.setLabelExpression("Core Properties"); + group.setLabelExpression(this.messageService.getMessage("CORE_PROPERTIES")); group.setSemanticCandidatesExpression("aql:self"); group.getChildren().add(this.createTypeSelectorWidget()); - group.getChildren().add(this.createBooleanAttributeEditWidget("Optional", DomainPackage.Literals.FEATURE__OPTIONAL.getName())); - group.getChildren().add(this.createBooleanAttributeEditWidget("Many", DomainPackage.Literals.FEATURE__MANY.getName())); + group.getChildren().add(this.createBooleanAttributeEditWidget("Optional", "OPTIONAL", DomainPackage.Literals.FEATURE__OPTIONAL.getName())); + group.getChildren().add(this.createBooleanAttributeEditWidget("Many", "MANY", DomainPackage.Literals.FEATURE__MANY.getName())); return group; } - private WidgetDescription createBooleanAttributeEditWidget(String title, String attributeName) { + private WidgetDescription createBooleanAttributeEditWidget(String name, String label, String attributeName) { CheckboxDescription checkbox = FormFactory.eINSTANCE.createCheckboxDescription(); - checkbox.setName(title); - checkbox.setLabelExpression(title); + checkbox.setName(name); + checkbox.setLabelExpression(this.messageService.getMessage(label)); checkbox.setValueExpression("aql:self.%s".formatted(attributeName)); ChangeContext changeContext = ViewFactory.eINSTANCE.createChangeContext(); changeContext.setExpression("aql:selection->filter(domain::Attribute).setValue('%s',newValue)".formatted(attributeName)); @@ -117,7 +121,7 @@ private WidgetDescription createBooleanAttributeEditWidget(String title, String private WidgetDescription createTypeSelectorWidget() { SelectDescription selectWidget = FormFactory.eINSTANCE.createSelectDescription(); selectWidget.setName("Type"); - selectWidget.setLabelExpression("Type"); + selectWidget.setLabelExpression(this.messageService.getMessage("TYPE")); selectWidget.setCandidatesExpression("aql:self.getAvailableDataTypes()"); selectWidget.setValueExpression("aql:self.getDataType()"); selectWidget.setCandidateLabelExpression("aql:candidate.capitalize()"); diff --git a/packages/sirius-web/backend/sirius-web-sample-application/src/main/java/org/eclipse/sirius/web/sample/messages/DomainPropertiesMessageService.java b/packages/sirius-web/backend/sirius-web-sample-application/src/main/java/org/eclipse/sirius/web/sample/messages/DomainPropertiesMessageService.java new file mode 100644 index 0000000000..28d3e5a3b2 --- /dev/null +++ b/packages/sirius-web/backend/sirius-web-sample-application/src/main/java/org/eclipse/sirius/web/sample/messages/DomainPropertiesMessageService.java @@ -0,0 +1,41 @@ +/******************************************************************************* + * Copyright (c) 2024 Obeo. + * This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v2.0 + * which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + * + * Contributors: + * Obeo - initial API and implementation + *******************************************************************************/ +package org.eclipse.sirius.web.sample.messages; + +import org.springframework.context.support.MessageSourceAccessor; +import org.springframework.context.support.ResourceBundleMessageSource; +import org.springframework.stereotype.Service; + +/** + * The message service for a domain property form. + * + * @author aresekb + */ +@Service +public class DomainPropertiesMessageService { + + private static final String MESSAGES_PATH = "messages/sirius-web-sample-application-domain"; + + private final MessageSourceAccessor messageSourceAccessor; + + public DomainPropertiesMessageService() { + ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource(); + messageSource.addBasenames(MESSAGES_PATH); + this.messageSourceAccessor = new MessageSourceAccessor(messageSource); + } + + public String getMessage(String code) { + return this.messageSourceAccessor.getMessage(code); + } + +} diff --git a/packages/sirius-web/backend/sirius-web-sample-application/src/main/java/org/eclipse/sirius/web/sample/services/DomainAttributeServices.java b/packages/sirius-web/backend/sirius-web-sample-application/src/main/java/org/eclipse/sirius/web/sample/services/DomainAttributeServices.java index a2be4a11bb..009701bc46 100644 --- a/packages/sirius-web/backend/sirius-web-sample-application/src/main/java/org/eclipse/sirius/web/sample/services/DomainAttributeServices.java +++ b/packages/sirius-web/backend/sirius-web-sample-application/src/main/java/org/eclipse/sirius/web/sample/services/DomainAttributeServices.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2023 Obeo. + * Copyright (c) 2023, 2024 Obeo. * This program and the accompanying materials * are made available under the terms of the Eclipse Public License v2.0 * which accompanies this distribution, and is available at @@ -20,6 +20,7 @@ import org.eclipse.sirius.components.core.api.IFeedbackMessageService; import org.eclipse.sirius.components.domain.Attribute; import org.eclipse.sirius.components.domain.DataType; +import org.eclipse.sirius.components.domain.provider.DomainEditPlugin; import org.eclipse.sirius.components.representations.Message; import org.eclipse.sirius.components.representations.MessageLevel; import org.eclipse.sirius.components.view.form.FormDescription; @@ -38,11 +39,15 @@ public DomainAttributeServices(IFeedbackMessageService feedbackMessageService) { } public List getAvailableDataTypes(EObject self) { - return DataType.VALUES.stream().map(DataType::getName).toList(); + return DataType.VALUES.stream().map(this::getDataTypeLabel).toList(); } public String getDataType(Attribute attr) { - return Optional.ofNullable(attr.getType()).map(DataType::getName).orElse(null); + return Optional.ofNullable(attr.getType()).map(this::getDataTypeLabel).orElse(null); + } + + private String getDataTypeLabel(DataType dataType) { + return DomainEditPlugin.INSTANCE.getString("_UI_DataType_" + dataType.getName() + "_literal"); } public EObject setDataType(Attribute attr, String typeName) { diff --git a/packages/view/backend/sirius-components-view-emf/src/main/resources/messages/sirius-web-emf.properties b/packages/sirius-web/backend/sirius-web-sample-application/src/main/resources/messages/sirius-web-sample-application-domain.properties similarity index 64% rename from packages/view/backend/sirius-components-view-emf/src/main/resources/messages/sirius-web-emf.properties rename to packages/sirius-web/backend/sirius-web-sample-application/src/main/resources/messages/sirius-web-sample-application-domain.properties index e0baf6110f..f0466439dd 100644 --- a/packages/view/backend/sirius-components-view-emf/src/main/resources/messages/sirius-web-emf.properties +++ b/packages/sirius-web/backend/sirius-web-sample-application/src/main/resources/messages/sirius-web-sample-application-domain.properties @@ -1,5 +1,5 @@ ################################################################################################ -# Copyright (c) 2019, 2021 Obeo. +# Copyright (c) 2024 Obeo. # This program and the accompanying materials # are made available under the terms of the Eclipse Public License v2.0 # which accompanies this distribution, and is available at @@ -10,6 +10,15 @@ # Contributors: # Obeo - initial API and implementation ################################################################################################ -INVALID_INPUT=Invalid input type, "{0}" has been received while "{1}" was expected -UNEXPECTED_ERROR=An unexpected error has occurred, please contact the server administrator -INVALID_NUMBER=The new value "{0}" is not a valid number +ABSTRACT=Abstract +ATTRIBUTE_DETAILS=Attribute Details +ATTRIBUTES=Attributes +CARDINALITY=Cardinality +CORE_PROPERTIES=Core Properties +MANY=Many +MULTI_SELECTION=MultiSelection +NAME=Name +OPTIONAL=Optional +RELATIONS=Relations +SUPER_TYPES=Super Types +TYPE=Type diff --git a/packages/sirius-web/backend/sirius-web-sample-application/src/main/resources/messages/sirius-web-sample-application-domain_ru.properties b/packages/sirius-web/backend/sirius-web-sample-application/src/main/resources/messages/sirius-web-sample-application-domain_ru.properties new file mode 100644 index 0000000000..99fcdaa458 --- /dev/null +++ b/packages/sirius-web/backend/sirius-web-sample-application/src/main/resources/messages/sirius-web-sample-application-domain_ru.properties @@ -0,0 +1,24 @@ +################################################################################################ +# Copyright (c) 2024 Obeo. +# This program and the accompanying materials +# are made available under the terms of the Eclipse Public License v2.0 +# which accompanies this distribution, and is available at +# https://www.eclipse.org/legal/epl-2.0/ +# +# SPDX-License-Identifier: EPL-2.0 +# +# Contributors: +# Obeo - initial API and implementation +################################################################################################ +ABSTRACT=\u0410\u0431\u0441\u0442\u0440\u0430\u043A\u0442\u043D\u044B\u0439 +ATTRIBUTE_DETAILS=\u041F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u044B \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430 +ATTRIBUTES=\u0410\u0442\u0440\u0438\u0431\u0443\u0442\u044B +CARDINALITY=\u041C\u043D\u043E\u0436\u0435\u0441\u0442\u0432\u0435\u043D\u043D\u043E\u0441\u0442\u044C +CORE_PROPERTIES=\u041E\u0441\u043D\u043E\u0432\u043D\u044B\u0435 \u0441\u0432\u043E\u0439\u0441\u0442\u0432\u0430 +MANY=\u041C\u043D\u043E\u0436\u0435\u0441\u0442\u0432\u0435\u043D\u043D\u044B\u0439 +MULTI_SELECTION=\u041C\u043D\u043E\u0436\u0435\u0441\u0442\u0432\u0435\u043D\u043D\u044B\u0439 \u0432\u044B\u0431\u043E\u0440 +NAME=\u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 +OPTIONAL=\u041D\u0435\u043E\u0431\u044F\u0437\u0430\u0442\u0435\u043B\u044C\u043D\u044B\u0439 +RELATIONS=\u041E\u0442\u043D\u043E\u0448\u0435\u043D\u0438\u044F +SUPER_TYPES=\u0420\u043E\u0434\u0438\u0442\u0435\u043B\u044C\u0441\u043A\u0438\u0435 \u0442\u0438\u043F\u044B +TYPE=\u0422\u0438\u043F diff --git a/packages/sirius-web/backend/sirius-web-sample-application/src/test/java/org/eclipse/sirius/web/sample/tests/integration/formdescritpioneditors/FormDescriptionEditorPageIntegrationTests.java b/packages/sirius-web/backend/sirius-web-sample-application/src/test/java/org/eclipse/sirius/web/sample/tests/integration/formdescritpioneditors/FormDescriptionEditorPageIntegrationTests.java index f3066a0d0a..ba65bc8754 100644 --- a/packages/sirius-web/backend/sirius-web-sample-application/src/test/java/org/eclipse/sirius/web/sample/tests/integration/formdescritpioneditors/FormDescriptionEditorPageIntegrationTests.java +++ b/packages/sirius-web/backend/sirius-web-sample-application/src/test/java/org/eclipse/sirius/web/sample/tests/integration/formdescritpioneditors/FormDescriptionEditorPageIntegrationTests.java @@ -252,7 +252,7 @@ mutation createChild($input: CreateChildInput!) { } """; - var createChildInput = new CreateChildInput(UUID.randomUUID(), this.projectId.toString(), this.rootObjectId.toString(), "Form Description"); + var createChildInput = new CreateChildInput(UUID.randomUUID(), this.projectId.toString(), this.rootObjectId.toString(), "descriptions-FormDescription"); var createChildExecutionInput = ExecutionInput.newExecutionInput() .query(createChildQuery) diff --git a/packages/sirius-web/backend/sirius-web-services/src/main/java/org/eclipse/sirius/web/services/messages/IServicesMessageService.java b/packages/sirius-web/backend/sirius-web-services/src/main/java/org/eclipse/sirius/web/services/messages/IServicesMessageService.java index 1afae14128..5b83eb85f6 100644 --- a/packages/sirius-web/backend/sirius-web-services/src/main/java/org/eclipse/sirius/web/services/messages/IServicesMessageService.java +++ b/packages/sirius-web/backend/sirius-web-services/src/main/java/org/eclipse/sirius/web/services/messages/IServicesMessageService.java @@ -33,4 +33,16 @@ public interface IServicesMessageService { String stereotypeNotFound(UUID stereotypeId); + String representations(); + + String incoming(); + + String current(); + + String outgoing(); + + Object parent(); + + Object children(); + } diff --git a/packages/sirius-web/backend/sirius-web-services/src/main/java/org/eclipse/sirius/web/services/messages/ServicesMessageService.java b/packages/sirius-web/backend/sirius-web-services/src/main/java/org/eclipse/sirius/web/services/messages/ServicesMessageService.java index eb16fb65a7..0c2c2bd8dc 100644 --- a/packages/sirius-web/backend/sirius-web-services/src/main/java/org/eclipse/sirius/web/services/messages/ServicesMessageService.java +++ b/packages/sirius-web/backend/sirius-web-services/src/main/java/org/eclipse/sirius/web/services/messages/ServicesMessageService.java @@ -62,4 +62,34 @@ public String invalidDocumentName(String name) { public String stereotypeNotFound(UUID stereotypeId) { return this.messageSourceAccessor.getMessage("STEREOTYPE_NOT_FOUND", new Object[] { stereotypeId }); } + + @Override + public String representations() { + return this.messageSourceAccessor.getMessage("REPRESENTATIONS"); + } + + @Override + public String incoming() { + return this.messageSourceAccessor.getMessage("INCOMING"); + } + + @Override + public String current() { + return this.messageSourceAccessor.getMessage("CURRENT"); + } + + @Override + public String outgoing() { + return this.messageSourceAccessor.getMessage("OUTGOING"); + } + + @Override + public Object parent() { + return this.messageSourceAccessor.getMessage("PARENT"); + } + + @Override + public Object children() { + return this.messageSourceAccessor.getMessage("CHILDREN"); + } } diff --git a/packages/sirius-web/backend/sirius-web-services/src/main/java/org/eclipse/sirius/web/services/relatedelements/CurrentTreeProvider.java b/packages/sirius-web/backend/sirius-web-services/src/main/java/org/eclipse/sirius/web/services/relatedelements/CurrentTreeProvider.java index 1ed96d95ce..e6a0c47e84 100644 --- a/packages/sirius-web/backend/sirius-web-services/src/main/java/org/eclipse/sirius/web/services/relatedelements/CurrentTreeProvider.java +++ b/packages/sirius-web/backend/sirius-web-services/src/main/java/org/eclipse/sirius/web/services/relatedelements/CurrentTreeProvider.java @@ -36,6 +36,7 @@ import org.eclipse.sirius.components.forms.description.TreeDescription; import org.eclipse.sirius.components.representations.Success; import org.eclipse.sirius.components.representations.VariableManager; +import org.eclipse.sirius.web.services.messages.IServicesMessageService; /** * Provides the definition of the tree widget for the "Current" panel in the "Related Elements" view. It displays two @@ -55,12 +56,6 @@ public class CurrentTreeProvider { private static final String WIDGET_ID = "related/current"; - private static final String CATEGORY_PARENT = "Parent"; - - private static final String CATEGORY_CHILDREN = "Children"; - - private static final String TITLE = "Current"; - private static final String WIDGET_ICON_URL = "/images/arrow_downward_black_24dp.svg"; private static final String FOLDER_ICON_URL = "/images/folder_black_24dp.svg"; @@ -73,12 +68,15 @@ public class CurrentTreeProvider { private final IObjectService objectService; + private final IServicesMessageService messageService; + private final AdapterFactory adapterFactory; private final IPropertiesValidationProvider propertiesValidationProvider = new IPropertiesValidationProvider.NoOp(); - public CurrentTreeProvider(IObjectService objectService, AdapterFactory adapterFactory) { + public CurrentTreeProvider(IObjectService objectService, IServicesMessageService messageService, AdapterFactory adapterFactory) { this.objectService = Objects.requireNonNull(objectService); + this.messageService = Objects.requireNonNull(messageService); this.adapterFactory = Objects.requireNonNull(adapterFactory); } @@ -90,7 +88,7 @@ public TreeDescription getTreeDescription() { .diagnosticsProvider(this.propertiesValidationProvider.getDiagnosticsProvider()) .kindProvider(this.propertiesValidationProvider.getKindProvider()) .messageProvider(this.propertiesValidationProvider.getMessageProvider()) - .labelProvider(variableManager -> TITLE) + .labelProvider(variableManager -> this.messageService.current()) .iconURLProvider(variableManager -> List.of(WIDGET_ICON_URL)) .nodeIdProvider(this::getNodeId) .nodeLabelProvider(this::getNodeLabel) @@ -121,10 +119,10 @@ private List getCurrentChildren(VariableManager variableManager) { private List getCurrentChildren(Object self, EObject root, List ancestors) { List result = List.of(); if (ancestors.isEmpty()) { - result = List.of(CATEGORY_PARENT, CATEGORY_CHILDREN); - } else if (self.equals(CATEGORY_PARENT) && root.eContainer() != null) { + result = List.of(this.messageService.parent(), this.messageService.children()); + } else if (self.equals(this.messageService.parent()) && root.eContainer() != null) { result = List.of(root.eContainer()); - } else if (self.equals(CATEGORY_CHILDREN)) { + } else if (self.equals(this.messageService.children())) { result = this.getNonEmptyContainmentReferences(root); } else if (self instanceof EReference) { result = this.readReference(root, (EReference) self); diff --git a/packages/sirius-web/backend/sirius-web-services/src/main/java/org/eclipse/sirius/web/services/relatedelements/DefaultRelatedElementsDescriptionProvider.java b/packages/sirius-web/backend/sirius-web-services/src/main/java/org/eclipse/sirius/web/services/relatedelements/DefaultRelatedElementsDescriptionProvider.java index 362e1bf1df..b519b8d574 100644 --- a/packages/sirius-web/backend/sirius-web-services/src/main/java/org/eclipse/sirius/web/services/relatedelements/DefaultRelatedElementsDescriptionProvider.java +++ b/packages/sirius-web/backend/sirius-web-services/src/main/java/org/eclipse/sirius/web/services/relatedelements/DefaultRelatedElementsDescriptionProvider.java @@ -30,6 +30,7 @@ import org.eclipse.sirius.components.forms.description.GroupDescription; import org.eclipse.sirius.components.forms.description.PageDescription; import org.eclipse.sirius.components.representations.VariableManager; +import org.eclipse.sirius.web.services.messages.IServicesMessageService; import org.springframework.stereotype.Service; /** @@ -51,10 +52,13 @@ public class DefaultRelatedElementsDescriptionProvider implements IRelatedElemen private final IObjectService objectService; + private final IServicesMessageService messageService; + private final AdapterFactory adapterFactory; - public DefaultRelatedElementsDescriptionProvider(IObjectService objectService, ComposedAdapterFactory adapterFactory) { + public DefaultRelatedElementsDescriptionProvider(IObjectService objectService, IServicesMessageService messageService, ComposedAdapterFactory adapterFactory) { this.objectService = Objects.requireNonNull(objectService); + this.messageService = Objects.requireNonNull(messageService); this.adapterFactory = Objects.requireNonNull(adapterFactory); } @@ -89,9 +93,9 @@ private String getFormId(VariableManager variableManager) { private GroupDescription getGroupDescription() { List controlDescriptions = new ArrayList<>(); - controlDescriptions.add(new IncomingTreeProvider(this.objectService, this.adapterFactory).getTreeDescription()); - controlDescriptions.add(new CurrentTreeProvider(this.objectService, this.adapterFactory).getTreeDescription()); - controlDescriptions.add(new OutgoingTreeProvider(this.objectService, this.adapterFactory).getTreeDescription()); + controlDescriptions.add(new IncomingTreeProvider(this.objectService, this.messageService, this.adapterFactory).getTreeDescription()); + controlDescriptions.add(new CurrentTreeProvider(this.objectService, this.messageService, this.adapterFactory).getTreeDescription()); + controlDescriptions.add(new OutgoingTreeProvider(this.objectService, this.messageService, this.adapterFactory).getTreeDescription()); // @formatter:off return GroupDescription.newGroupDescription(GROUP_DESCRIPTION_ID) diff --git a/packages/sirius-web/backend/sirius-web-services/src/main/java/org/eclipse/sirius/web/services/relatedelements/IncomingTreeProvider.java b/packages/sirius-web/backend/sirius-web-services/src/main/java/org/eclipse/sirius/web/services/relatedelements/IncomingTreeProvider.java index d4f7722d1a..6528549b62 100644 --- a/packages/sirius-web/backend/sirius-web-services/src/main/java/org/eclipse/sirius/web/services/relatedelements/IncomingTreeProvider.java +++ b/packages/sirius-web/backend/sirius-web-services/src/main/java/org/eclipse/sirius/web/services/relatedelements/IncomingTreeProvider.java @@ -39,6 +39,7 @@ import org.eclipse.sirius.components.forms.description.TreeDescription; import org.eclipse.sirius.components.representations.Success; import org.eclipse.sirius.components.representations.VariableManager; +import org.eclipse.sirius.web.services.messages.IServicesMessageService; /** * Provides the definition of the tree widget for the "Incoming" panel in the "Related Elements" view. @@ -49,8 +50,6 @@ public class IncomingTreeProvider { private static final String WIDGET_ID = "related/incoming"; - private static final String TITLE = "Incoming"; - private static final String WIDGET_ICON_URL = "/images/west_black_24dp.svg"; private static final String INCOMING_REFERENCE_ICON_URL = "/images/west_black_24dp.svg"; @@ -59,12 +58,15 @@ public class IncomingTreeProvider { private final IObjectService objectService; + private final IServicesMessageService messageService; + private final AdapterFactory adapterFactory; private final IPropertiesValidationProvider propertiesValidationProvider = new IPropertiesValidationProvider.NoOp(); - public IncomingTreeProvider(IObjectService objectService, AdapterFactory adapterFactory) { + public IncomingTreeProvider(IObjectService objectService, IServicesMessageService messageService, AdapterFactory adapterFactory) { this.objectService = Objects.requireNonNull(objectService); + this.messageService = Objects.requireNonNull(messageService); this.adapterFactory = Objects.requireNonNull(adapterFactory); } @@ -76,7 +78,7 @@ public TreeDescription getTreeDescription() { .diagnosticsProvider(this.propertiesValidationProvider.getDiagnosticsProvider()) .kindProvider(this.propertiesValidationProvider.getKindProvider()) .messageProvider(this.propertiesValidationProvider.getMessageProvider()) - .labelProvider(variableManager -> TITLE) + .labelProvider(variableManager -> this.messageService.incoming()) .iconURLProvider(variableManager -> List.of(WIDGET_ICON_URL)) .nodeIdProvider(this::getNodeId) .nodeLabelProvider(this::getNodeLabel) diff --git a/packages/sirius-web/backend/sirius-web-services/src/main/java/org/eclipse/sirius/web/services/relatedelements/OutgoingTreeProvider.java b/packages/sirius-web/backend/sirius-web-services/src/main/java/org/eclipse/sirius/web/services/relatedelements/OutgoingTreeProvider.java index 847bda0436..c41d5ced07 100644 --- a/packages/sirius-web/backend/sirius-web-services/src/main/java/org/eclipse/sirius/web/services/relatedelements/OutgoingTreeProvider.java +++ b/packages/sirius-web/backend/sirius-web-services/src/main/java/org/eclipse/sirius/web/services/relatedelements/OutgoingTreeProvider.java @@ -35,6 +35,7 @@ import org.eclipse.sirius.components.forms.description.TreeDescription; import org.eclipse.sirius.components.representations.Success; import org.eclipse.sirius.components.representations.VariableManager; +import org.eclipse.sirius.web.services.messages.IServicesMessageService; /** * Provides the definition of the tree widget for the "Outgoing" panel in the "Related Elements" view. It has two @@ -52,8 +53,6 @@ public class OutgoingTreeProvider { private static final String WIDGET_ID = "related/outgoing"; - private static final String TITLE = "Outgoing"; - private static final String WIDGET_ICON_URL = "/images/east_black_24dp.svg"; private static final String OUTGOING_REFERENCE_ICON_URL = "/images/east_black_24dp.svg"; @@ -62,12 +61,15 @@ public class OutgoingTreeProvider { private final IObjectService objectService; + private final IServicesMessageService messageService; + private final AdapterFactory adapterFactory; private final IPropertiesValidationProvider propertiesValidationProvider = new IPropertiesValidationProvider.NoOp(); - public OutgoingTreeProvider(IObjectService objectService, AdapterFactory adapterFactory) { + public OutgoingTreeProvider(IObjectService objectService, IServicesMessageService messageService, AdapterFactory adapterFactory) { this.objectService = Objects.requireNonNull(objectService); + this.messageService = Objects.requireNonNull(messageService); this.adapterFactory = Objects.requireNonNull(adapterFactory); } @@ -79,7 +81,7 @@ public TreeDescription getTreeDescription() { .diagnosticsProvider(this.propertiesValidationProvider.getDiagnosticsProvider()) .kindProvider(this.propertiesValidationProvider.getKindProvider()) .messageProvider(this.propertiesValidationProvider.getMessageProvider()) - .labelProvider(variableManager -> TITLE) + .labelProvider(variableManager -> this.messageService.outgoing()) .iconURLProvider(variableManager -> List.of(WIDGET_ICON_URL)) .nodeIdProvider(this::getNodeId) .nodeLabelProvider(this::getNodeLabel) diff --git a/packages/sirius-web/backend/sirius-web-services/src/main/java/org/eclipse/sirius/web/services/representations/RepresentationsDescriptionProvider.java b/packages/sirius-web/backend/sirius-web-services/src/main/java/org/eclipse/sirius/web/services/representations/RepresentationsDescriptionProvider.java index f5c698b5a7..e1c22b2403 100644 --- a/packages/sirius-web/backend/sirius-web-services/src/main/java/org/eclipse/sirius/web/services/representations/RepresentationsDescriptionProvider.java +++ b/packages/sirius-web/backend/sirius-web-services/src/main/java/org/eclipse/sirius/web/services/representations/RepresentationsDescriptionProvider.java @@ -53,6 +53,7 @@ import org.eclipse.sirius.components.representations.Success; import org.eclipse.sirius.components.representations.VariableManager; import org.eclipse.sirius.web.services.api.representations.IRepresentationService; +import org.eclipse.sirius.web.services.messages.IServicesMessageService; import org.springframework.stereotype.Service; /** @@ -63,8 +64,6 @@ @Service public class RepresentationsDescriptionProvider implements IRepresentationsDescriptionProvider { - public static final String TITLE = "Representations"; - public static final String PREFIX = "representations://"; public static final String REPRESENTATIONS_DEFAULT_FORM_DESCRIPTION_ID = "representations_default_form_description"; @@ -75,15 +74,18 @@ public class RepresentationsDescriptionProvider implements IRepresentationsDescr private final IRepresentationSearchService representationSearchService; + private final IServicesMessageService servicesMessageService; + private final List representationImageProviders; private final Function semanticTargetIdProvider; public RepresentationsDescriptionProvider(IObjectService objectService, IRepresentationService representationService, IRepresentationSearchService representationSearchService, - List representationImageProviders) { + IServicesMessageService servicesMessageService, List representationImageProviders) { this.objectService = Objects.requireNonNull(objectService); this.representationService = Objects.requireNonNull(representationService); this.representationSearchService = Objects.requireNonNull(representationSearchService); + this.servicesMessageService = Objects.requireNonNull(servicesMessageService); this.representationImageProviders = Objects.requireNonNull(representationImageProviders); this.semanticTargetIdProvider = variableManager -> variableManager.get(VariableManager.SELF, Object.class).map(this.objectService::getId).orElse(null); } @@ -101,7 +103,7 @@ public FormDescription getRepresentationsDescription() { Function labelProvider = variableManager -> variableManager.get(VariableManager.SELF, Object.class) .map(this.objectService::getFullLabel) - .orElse(TITLE); + .orElse(this.servicesMessageService.representations()); return FormDescription.newFormDescription(UUID.nameUUIDFromBytes(REPRESENTATIONS_DEFAULT_FORM_DESCRIPTION_ID.getBytes()).toString()) .label("Representations default form description") @@ -137,7 +139,7 @@ private GroupDescription getGroupDescription() { ListDescription listDescription = ListDescription.newListDescription("RepresentationsList") .idProvider(new WidgetIdProvider()) - .labelProvider(variableManager -> TITLE) + .labelProvider(variableManager -> this.servicesMessageService.representations()) .itemsProvider(this.getItemsProvider()) .itemIdProvider(this.getItemIdProvider()) .itemLabelProvider(this.getItemLabelProvider()) diff --git a/packages/sirius-web/backend/sirius-web-services/src/main/java/org/eclipse/sirius/web/services/representations/RepresentationsMetadataProvider.java b/packages/sirius-web/backend/sirius-web-services/src/main/java/org/eclipse/sirius/web/services/representations/RepresentationsMetadataProvider.java index ddbbfff804..602e3f0f60 100644 --- a/packages/sirius-web/backend/sirius-web-services/src/main/java/org/eclipse/sirius/web/services/representations/RepresentationsMetadataProvider.java +++ b/packages/sirius-web/backend/sirius-web-services/src/main/java/org/eclipse/sirius/web/services/representations/RepresentationsMetadataProvider.java @@ -12,17 +12,28 @@ *******************************************************************************/ package org.eclipse.sirius.web.services.representations; +import java.util.Objects; + import org.eclipse.sirius.components.core.RepresentationMetadata; import org.eclipse.sirius.components.core.api.IRepresentationMetadataProvider; import org.eclipse.sirius.components.forms.Form; +import org.eclipse.sirius.web.services.messages.IServicesMessageService; +import org.springframework.stereotype.Service; /** * Provides the metadata for the "Representations" representation. * * @author pcdavid */ +@Service public class RepresentationsMetadataProvider implements IRepresentationMetadataProvider { + private final IServicesMessageService servicesMessageService; + + public RepresentationsMetadataProvider(IServicesMessageService servicesMessageService) { + this.servicesMessageService = Objects.requireNonNull(servicesMessageService); + } + @Override public boolean canHandle(String representationId) { return representationId != null && representationId.startsWith(RepresentationsDescriptionProvider.PREFIX); @@ -30,7 +41,7 @@ public boolean canHandle(String representationId) { @Override public RepresentationMetadata handle(String representationId) { - return new RepresentationMetadata(representationId, Form.KIND, RepresentationsDescriptionProvider.TITLE, RepresentationsDescriptionProvider.REPRESENTATIONS_DEFAULT_FORM_DESCRIPTION_ID); + return new RepresentationMetadata(representationId, Form.KIND, this.servicesMessageService.representations(), RepresentationsDescriptionProvider.REPRESENTATIONS_DEFAULT_FORM_DESCRIPTION_ID); } } diff --git a/packages/sirius-web/backend/sirius-web-services/src/main/resources/messages/sirius-web-services.properties b/packages/sirius-web/backend/sirius-web-services/src/main/resources/messages/sirius-web-services.properties index ad68dab4d1..5255fe16fb 100644 --- a/packages/sirius-web/backend/sirius-web-services/src/main/resources/messages/sirius-web-services.properties +++ b/packages/sirius-web/backend/sirius-web-services/src/main/resources/messages/sirius-web-services.properties @@ -15,4 +15,10 @@ INVALID_PROJECT_NAME=The name must contain between 3 and 20 characters PROJECT_NOT_FOUND=The project does not exist UNEXPECTED_ERROR=An unexpected error has occurred, please contact the server administrator INVALID_DOCUMENT_NAME=You cannot create a model with the name "{0}". Please use a valid name (no spaces, at least one character) for the new model -STEREOTYPE_NOT_FOUND=The model type with id "{0}" does not exist, therefore you cannot create a model from it \ No newline at end of file +STEREOTYPE_NOT_FOUND=The model type with id "{0}" does not exist, therefore you cannot create a model from it +REPRESENTATIONS=Representations +INCOMING=Incoming +CURRENT=Current +OUTGOING=Outgoing +PARENT=Parent +CHILDREN=Children diff --git a/packages/sirius-web/backend/sirius-web-services/src/main/resources/messages/sirius-web-services_ru.properties b/packages/sirius-web/backend/sirius-web-services/src/main/resources/messages/sirius-web-services_ru.properties new file mode 100644 index 0000000000..2cb1a62497 --- /dev/null +++ b/packages/sirius-web/backend/sirius-web-services/src/main/resources/messages/sirius-web-services_ru.properties @@ -0,0 +1,24 @@ +################################################################################################ +# Copyright (c) 2024 Obeo. +# This program and the accompanying materials +# are made available under the terms of the Eclipse Public License v2.0 +# which accompanies this distribution, and is available at +# https://www.eclipse.org/legal/epl-2.0/ +# +# SPDX-License-Identifier: EPL-2.0 +# +# Contributors: +# Obeo - initial API and implementation +################################################################################################ +INVALID_INPUT=\u041D\u0435\u043A\u043E\u0440\u0440\u0435\u043A\u0442\u043D\u044B\u0439 \u0442\u0438\u043F, \u0431\u044B\u043B\u043E \u043F\u043E\u043B\u0443\u0447\u0435\u043D\u043E "{0}", \u0430 \u043E\u0436\u0438\u0434\u0430\u043B\u043E\u0441\u044C "{1}" +INVALID_PROJECT_NAME=\u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u0434\u043E\u043B\u0436\u043D\u043E \u0441\u043E\u0434\u0435\u0440\u0436\u0430\u0442\u044C \u043E\u0442 3 \u0434\u043E 20 \u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432 +PROJECT_NOT_FOUND=\u041F\u0440\u043E\u0435\u043A\u0442 \u043D\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 +UNEXPECTED_ERROR=\u041F\u0440\u043E\u0438\u0437\u043E\u0448\u043B\u0430 \u043D\u0435\u043E\u0436\u0438\u0434\u0430\u043D\u043D\u0430\u044F \u043E\u0448\u0438\u0431\u043A\u0430, \u0441\u0432\u044F\u0436\u0438\u0442\u0435\u0441\u044C, \u043F\u043E\u0436\u0430\u043B\u0443\u0439\u0441\u0442\u0430, \u0441 \u0430\u0434\u043C\u0438\u043D\u0438\u0441\u0442\u0440\u0430\u0442\u043E\u0440\u043E\u043C +INVALID_DOCUMENT_NAME=\u0412\u044B \u043D\u0435 \u043C\u043E\u0436\u0435\u0442\u0435 \u0441\u043E\u0437\u0434\u0430\u0442\u044C \u043C\u043E\u0434\u0435\u043B\u044C \u0441 \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u0435\u043C "{0}". \u041F\u043E\u0436\u0430\u043B\u0443\u0439\u0441\u0442\u0430, \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0439\u0442\u0435 \u043A\u043E\u0440\u0440\u0435\u043A\u0442\u043D\u043E\u0435 \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 (\u0431\u0435\u0437 \u043F\u0440\u043E\u0431\u0435\u043B\u043E\u0432, \u0445\u043E\u0442\u044F \u0431\u044B \u043E\u0434\u0438\u043D \u0441\u0438\u043C\u0432\u043E\u043B) \u0434\u043B\u044F \u043D\u043E\u0432\u043E\u0439 \u043C\u043E\u0434\u0435\u043B\u0438 +STEREOTYPE_NOT_FOUND=\u0422\u0438\u043F \u043C\u043E\u0434\u0435\u043B\u0435\u0439 \u0441 \u0438\u0434\u0435\u043D\u0442\u0438\u0444\u0438\u043A\u0430\u0442\u043E\u0440\u043E\u043C "{0}" \u043D\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442, \u043F\u043E\u044D\u0442\u043E\u043C\u0443 \u0432\u044B \u043D\u0435 \u043C\u043E\u0436\u0435\u0442\u0435 \u0441\u043E\u0437\u0434\u0430\u0442\u044C \u043C\u043E\u0434\u0435\u043B\u044C \u043D\u0430 \u0435\u0433\u043E \u043E\u0441\u043D\u043E\u0432\u0435 +REPRESENTATIONS=\u041F\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043B\u0435\u043D\u0438\u044F +INCOMING=\u0412\u0445\u043E\u0434\u044F\u0449\u0438\u0435 +CURRENT=\u0422\u0435\u043A\u0443\u0449\u0438\u0435 +OUTGOING=\u0418\u0441\u0445\u043E\u0434\u044F\u0449\u0438\u0435 +PARENT=\u0420\u043E\u0434\u0438\u0442\u0435\u043B\u044C\u0441\u043A\u0438\u0439 \u043E\u0431\u044A\u0435\u043A\u0442 +CHILDREN=\u0414\u043E\u0447\u0435\u0440\u043D\u0438\u0435 \u043E\u0431\u044A\u0435\u043A\u0442\u044B diff --git a/packages/sirius-web/backend/sirius-web-services/src/test/java/org/eclipse/sirius/web/services/projects/NoOpServicesMessageService.java b/packages/sirius-web/backend/sirius-web-services/src/test/java/org/eclipse/sirius/web/services/projects/NoOpServicesMessageService.java index a72909d6df..2431cb645f 100644 --- a/packages/sirius-web/backend/sirius-web-services/src/test/java/org/eclipse/sirius/web/services/projects/NoOpServicesMessageService.java +++ b/packages/sirius-web/backend/sirius-web-services/src/test/java/org/eclipse/sirius/web/services/projects/NoOpServicesMessageService.java @@ -53,4 +53,34 @@ public String stereotypeNotFound(UUID stereotypeId) { return ""; } + @Override + public String representations() { + return ""; + } + + @Override + public String incoming() { + return ""; + } + + @Override + public String current() { + return ""; + } + + @Override + public String outgoing() { + return ""; + } + + @Override + public Object parent() { + return ""; + } + + @Override + public Object children() { + return ""; + } + } diff --git a/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/application/controllers/forms/CustomNodeDetailsViewControllerTests.java b/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/application/controllers/forms/CustomNodeDetailsViewControllerTests.java index 78a8c7e2d8..9154bc612b 100644 --- a/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/application/controllers/forms/CustomNodeDetailsViewControllerTests.java +++ b/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/application/controllers/forms/CustomNodeDetailsViewControllerTests.java @@ -29,12 +29,14 @@ import org.eclipse.sirius.components.collaborative.forms.dto.FormRefreshedEventPayload; import org.eclipse.sirius.components.collaborative.forms.dto.PropertiesEventInput; import org.eclipse.sirius.components.core.api.SuccessPayload; +import org.eclipse.sirius.components.emf.services.messages.IEMFMessageService; import org.eclipse.sirius.components.forms.Form; import org.eclipse.sirius.components.forms.Textfield; import org.eclipse.sirius.components.forms.tests.assertions.FormAssertions; import org.eclipse.sirius.components.forms.tests.graphql.EditTextfieldMutationRunner; import org.eclipse.sirius.components.forms.tests.graphql.PropertiesEventSubscriptionRunner; import org.eclipse.sirius.components.forms.tests.navigation.FormNavigator; +import org.eclipse.sirius.components.view.diagram.provider.DiagramEditPlugin; import org.eclipse.sirius.web.AbstractIntegrationTests; import org.eclipse.sirius.web.data.StudioIdentifiers; import org.eclipse.sirius.web.tests.services.api.IGivenInitialServerState; @@ -70,6 +72,9 @@ public class CustomNodeDetailsViewControllerTests extends AbstractIntegrationTes @Autowired private EditTextfieldMutationRunner editTextfieldMutationRunner; + @Autowired + private IEMFMessageService emfMessageService; + @BeforeEach public void beforeEach() { this.givenInitialServerState.initialize(); @@ -84,9 +89,9 @@ public void givenEllipseNodeStyleDescriptionWhenWeSubscribeToItsPropertiesEvents var flux = this.propertiesEventSubscriptionRunner.run(input); Predicate
formPredicate = form -> { - var groupNavigator = new FormNavigator(form).page("").group("Core Properties"); + var groupNavigator = new FormNavigator(form).page(0).group(this.emfMessageService.coreProperties()); - var borderSizeTextField = groupNavigator.findWidget("Border Size", Textfield.class); + var borderSizeTextField = groupNavigator.findWidget(DiagramEditPlugin.INSTANCE.getString("_UI_BorderStyle_borderSize_feature"), Textfield.class); FormAssertions.assertThat(borderSizeTextField) .hasValue("1"); @@ -130,8 +135,8 @@ public void givenEllipseNodeStyleDescriptionWhenBorderSizeIsEditedThenItsValueIs .ifPresentOrElse(form -> { formId.set(form.getId()); - var groupNavigator = new FormNavigator(form).page("").group("Core Properties"); - var textfield = groupNavigator.findWidget("Border Size", Textfield.class); + var groupNavigator = new FormNavigator(form).page(0).group(this.emfMessageService.coreProperties()); + var textfield = groupNavigator.findWidget(DiagramEditPlugin.INSTANCE.getString("_UI_BorderStyle_borderSize_feature"), Textfield.class); textfieldId.set(textfield.getId()); }, () -> fail("Missing form")); @@ -147,8 +152,8 @@ public void givenEllipseNodeStyleDescriptionWhenBorderSizeIsEditedThenItsValueIs Consumer updatedFormContentConsumer = payload -> Optional.of(payload) .map(FormRefreshedEventPayload::form) .ifPresentOrElse(form -> { - var groupNavigator = new FormNavigator(form).page("").group("Core Properties"); - var textfield = groupNavigator.findWidget("Border Size", Textfield.class); + var groupNavigator = new FormNavigator(form).page(0).group(this.emfMessageService.coreProperties()); + var textfield = groupNavigator.findWidget(DiagramEditPlugin.INSTANCE.getString("_UI_BorderStyle_borderSize_feature"), Textfield.class); FormAssertions.assertThat(textfield) .hasValue("3"); diff --git a/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/application/controllers/objects/ObjectCreationControllerIntegrationTests.java b/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/application/controllers/objects/ObjectCreationControllerIntegrationTests.java index c036ce6f7e..4da4ea6a47 100644 --- a/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/application/controllers/objects/ObjectCreationControllerIntegrationTests.java +++ b/packages/sirius-web/backend/sirius-web/src/test/java/org/eclipse/sirius/web/application/controllers/objects/ObjectCreationControllerIntegrationTests.java @@ -137,7 +137,7 @@ public void givenAnObjectWhenChildObjectCreationDescriptionsAreRequestedThenVali List creationDescriptionIds = JsonPath.read(result, "$.data.viewer.editingContext.childCreationDescriptions[*].id"); assertThat(creationDescriptionIds) .isNotEmpty() - .contains("Humans Human"); + .contains("humans-Human"); List> creationDescriptionIconURLs = JsonPath.read(result, "$.data.viewer.editingContext.childCreationDescriptions[*].iconURL"); assertThat(creationDescriptionIconURLs).hasSize(1); @@ -184,7 +184,7 @@ public void givenObjectWhenChildObjectIsCreatedThenItIsCreatedProperly() { UUID.randomUUID(), StudioIdentifiers.SAMPLE_STUDIO_PROJECT.toString(), StudioIdentifiers.DOMAIN_OBJECT.toString(), - "Entity" + "types-Entity" ); var result = this.createChildMutationRunner.run(input); diff --git a/packages/view/backend/sirius-components-view-deck-edit/src/main/resources/plugin_ru.properties b/packages/view/backend/sirius-components-view-deck-edit/src/main/resources/plugin_ru.properties new file mode 100644 index 0000000000..96498e832e --- /dev/null +++ b/packages/view/backend/sirius-components-view-deck-edit/src/main/resources/plugin_ru.properties @@ -0,0 +1,71 @@ +# Copyright (c) 2024 Obeo. +# This program and the accompanying materials +# are made available under the terms of the Eclipse Public License v2.0 +# which accompanies this distribution, and is available at +# https://www.eclipse.org/legal/epl-2.0/ +# +# SPDX-License-Identifier: EPL-2.0 +# +# Contributors: +# Obeo - initial API and implementation + +pluginName = Deck Edit Support +providerName = www.example.org + +_UI_CreateChild_text = {0} +_UI_CreateChild_text2 = {1} "{0}" +_UI_CreateChild_text3 = {1} +_UI_CreateChild_tooltip = \u0421\u043E\u0437\u0434\u0430\u0442\u044C \u043E\u0431\u044A\u0435\u043A\u0442 "{0}" \u0432 \u043A\u043E\u043B\u043B\u0435\u043A\u0446\u0438\u0438 "{1}" +_UI_CreateChild_description = \u0421\u043E\u0437\u0434\u0430\u0442\u044C \u043D\u043E\u0432\u044B\u0439 \u0434\u043E\u0447\u0435\u0440\u043D\u0438\u0439 \u044D\u043B\u0435\u043C\u0435\u043D\u0442 \u0442\u0438\u043F\u0430 "{0}" \u0432 \u043A\u043E\u043B\u043B\u0435\u043A\u0446\u0438\u0438 "{1}" \u043E\u0431\u044A\u0435\u043A\u0442\u0430 "{2}". +_UI_CreateSibling_description = \u0421\u043E\u0437\u0434\u0430\u0442\u044C \u043D\u043E\u0432\u044B\u0439 \u0441\u043E\u0441\u0435\u0434\u043D\u0438\u0439 \u044D\u043B\u0435\u043C\u0435\u043D\u0442 \u0442\u0438\u043F\u0430 "{0}" \u0434\u043B\u044F \u043E\u0431\u044A\u0435\u043A\u0442\u0430 "{2}", \u0432 \u043A\u043E\u043B\u043B\u0435\u043A\u0446\u0438\u0438 "{1}" \u0438\u0445 \u0440\u043E\u0434\u0438\u0442\u0435\u043B\u044C\u0441\u043A\u043E\u0433\u043E \u043E\u0431\u044A\u0435\u043A\u0442\u0430. + +_UI_PropertyDescriptor_description = \u0421\u0432\u043E\u0439\u0441\u0442\u0432\u043E "{0}" \u043E\u0431\u044A\u0435\u043A\u0442\u0430 "{1}" + +_UI_DeckDescription_type = \u0421\u043F\u0435\u0446\u0438\u0444\u0438\u043A\u0430\u0446\u0438\u044F \u0434\u043E\u0441\u043E\u043A +_UI_LaneDescription_type = \u0421\u043F\u0435\u0446\u0438\u0444\u0438\u043A\u0430\u0446\u0438\u044F \u0434\u043E\u0440\u043E\u0436\u0435\u043A +_UI_CardDescription_type = \u0421\u043F\u0435\u0446\u0438\u0444\u0438\u043A\u0430\u0446\u0438\u044F \u043A\u0430\u0440\u0442\u043E\u0447\u0435\u043A +_UI_DeckTool_type = \u0418\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442 +_UI_CreateCardTool_type = \u0418\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442 \u0441\u043E\u0437\u0434\u0430\u043D\u0438\u044F \u043A\u0430\u0440\u0442\u043E\u0447\u0435\u043A +_UI_EditCardTool_type = \u0418\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442 \u0440\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F \u043A\u0430\u0440\u0442\u043E\u0447\u0435\u043A +_UI_DeleteCardTool_type = \u0418\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442 \u0443\u0434\u0430\u043B\u0435\u043D\u0438\u044F \u043A\u0430\u0440\u0442\u043E\u0447\u0435\u043A +_UI_EditLaneTool_type = \u0418\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442 \u0440\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F \u0434\u043E\u0440\u043E\u0436\u0435\u043A +_UI_CardDropTool_type = \u0418\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442 \u043F\u0435\u0440\u0435\u0442\u0430\u0441\u043A\u0438\u0432\u0430\u043D\u0438\u044F \u043A\u0430\u0440\u0442\u043E\u0447\u0435\u043A +_UI_LaneDropTool_type = \u0418\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442 \u043F\u0435\u0440\u0435\u0442\u0430\u0441\u043A\u0438\u0432\u0430\u043D\u0438\u044F \u0434\u043E\u0440\u043E\u0436\u0435\u043A +_UI_DeckElementDescription_type = \u0421\u043F\u0435\u0446\u0438\u0444\u0438\u043A\u0430\u0446\u0438\u044F \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0430 +_UI_DeckDescriptionStyle_type = \u0421\u0442\u0438\u043B\u044C +_UI_ConditionalDeckDescriptionStyle_type = \u0423\u0441\u043B\u043E\u0432\u043D\u044B\u0439 \u0441\u0442\u0438\u043B\u044C +_UI_DeckElementDescriptionStyle_type = \u0421\u0442\u0438\u043B\u044C +_UI_ConditionalDeckElementDescriptionStyle_type = \u0423\u0441\u043B\u043E\u0432\u043D\u044B\u0439 \u0441\u0442\u0438\u043B\u044C +_UI_Unknown_type = \u041E\u0431\u044A\u0435\u043A\u0442 + +_UI_Unknown_datatype= \u0417\u043D\u0430\u0447\u0435\u043D\u0438\u0435 + +_UI_DeckDescription_laneDescriptions_feature = \u0414\u043E\u0440\u043E\u0436\u043A\u0438 +_UI_DeckDescription_backgroundColor_feature = \u0426\u0432\u0435\u0442 \u0444\u043E\u043D\u0430 +_UI_DeckDescription_laneDropTool_feature = \u0418\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442 \u043F\u0435\u0440\u0435\u0442\u0430\u0441\u043A\u0438\u0432\u0430\u043D\u0438\u044F \u0434\u043E\u0440\u043E\u0436\u0435\u043A +_UI_DeckDescription_style_feature = \u0421\u0442\u0438\u043B\u044C +_UI_DeckDescription_conditionalStyles_feature = \u0423\u0441\u043B\u043E\u0432\u043D\u044B\u0435 \u0441\u0442\u0438\u043B\u0438 +_UI_LaneDescription_name_feature = \u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 +_UI_LaneDescription_domainType_feature = \u0422\u0438\u043F +_UI_LaneDescription_ownedCardDescriptions_feature = \u0421\u043F\u0435\u0446\u0438\u0444\u0438\u043A\u0430\u0446\u0438\u0438 \u043A\u0430\u0440\u0442\u043E\u0447\u0435\u043A +_UI_LaneDescription_editTool_feature = \u0418\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442 \u0440\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F +_UI_LaneDescription_createTool_feature = \u0418\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442 \u0441\u043E\u0437\u0434\u0430\u043D\u0438\u044F +_UI_LaneDescription_cardDropTool_feature = \u0418\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442 \u043F\u0435\u0440\u0435\u0442\u0430\u0441\u043A\u0438\u0432\u0430\u043D\u0438\u044F \u043A\u0430\u0440\u0442\u043E\u0447\u0435\u043A +_UI_LaneDescription_isCollapsibleExpression_feature = \u041C\u043E\u0436\u0435\u0442 \u0441\u0432\u043E\u0440\u0430\u0447\u0438\u0432\u0430\u0442\u044C\u0441\u044F (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_CardDescription_name_feature = \u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 +_UI_CardDescription_domainType_feature = \u0422\u0438\u043F +_UI_CardDescription_descriptionExpression_feature = \u041E\u043F\u0438\u0441\u0430\u043D\u0438\u0435 (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_CardDescription_editTool_feature = \u0418\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442 \u0440\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F +_UI_CardDescription_deleteTool_feature = \u0418\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442 \u0443\u0434\u0430\u043B\u0435\u043D\u0438\u044F +_UI_DeckTool_name_feature = \u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 +_UI_DeckTool_body_feature = \u0414\u0435\u0439\u0441\u0442\u0432\u0438\u0435 +_UI_DeckElementDescription_semanticCandidatesExpression_feature = \u042D\u043B\u0435\u043C\u0435\u043D\u0442\u044B (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_DeckElementDescription_titleExpression_feature = \u0417\u0430\u0433\u043E\u043B\u043E\u0432\u043E\u043A (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_DeckElementDescription_labelExpression_feature = \u041D\u0430\u0434\u043F\u0438\u0441\u044C (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_DeckElementDescription_style_feature = \u0421\u0442\u0438\u043B\u044C +_UI_DeckElementDescription_conditionalStyles_feature = \u0423\u0441\u043B\u043E\u0432\u043D\u044B\u0435 \u0441\u0442\u0438\u043B\u0438 +_UI_DeckDescriptionStyle_backgroundColor_feature = \u0426\u0432\u0435\u0442 \u0444\u043E\u043D\u0430 +_UI_DeckElementDescriptionStyle_backgroundColor_feature = \u0426\u0432\u0435\u0442 \u0444\u043E\u043D\u0430 +_UI_DeckElementDescriptionStyle_color_feature = \u0426\u0432\u0435\u0442 +_UI_Unknown_feature = \u041D\u0435 \u043E\u043F\u0440\u0435\u0434\u0435\u043B\u0435\u043D\u043E + diff --git a/packages/view/backend/sirius-components-view-diagram-customnodes-edit/src/main/resources/plugin_ru.properties b/packages/view/backend/sirius-components-view-diagram-customnodes-edit/src/main/resources/plugin_ru.properties new file mode 100644 index 0000000000..fc519cdf50 --- /dev/null +++ b/packages/view/backend/sirius-components-view-diagram-customnodes-edit/src/main/resources/plugin_ru.properties @@ -0,0 +1,27 @@ +################################################################################ +# Copyright (c) 2024 Obeo. +# This program and the accompanying materials +# are made available under the terms of the Eclipse Public License v2.0 +# which accompanies this distribution, and is available at +# https://www.eclipse.org/legal/epl-2.0/ +# +# SPDX-License-Identifier: EPL-2.0 +# +# Contributors: +# Obeo - initial API and implementation +################################################################################# +pluginName = Customnodes Edit Support +providerName = www.example.org +_UI_CreateChild_text = {0} +_UI_CreateChild_text2 = {1} "{0}" +_UI_CreateChild_text3 = {1} +_UI_CreateChild_tooltip = \u0421\u043E\u0437\u0434\u0430\u0442\u044C \u043E\u0431\u044A\u0435\u043A\u0442 "{0}" \u0432 \u043A\u043E\u043B\u043B\u0435\u043A\u0446\u0438\u0438 "{1}" +_UI_CreateChild_description = \u0421\u043E\u0437\u0434\u0430\u0442\u044C \u043D\u043E\u0432\u044B\u0439 \u0434\u043E\u0447\u0435\u0440\u043D\u0438\u0439 \u044D\u043B\u0435\u043C\u0435\u043D\u0442 \u0442\u0438\u043F\u0430 "{0}" \u0432 \u043A\u043E\u043B\u043B\u0435\u043A\u0446\u0438\u0438 "{1}" \u043E\u0431\u044A\u0435\u043A\u0442\u0430 "{2}". +_UI_CreateSibling_description = \u0421\u043E\u0437\u0434\u0430\u0442\u044C \u043D\u043E\u0432\u044B\u0439 \u0441\u043E\u0441\u0435\u0434\u043D\u0438\u0439 \u044D\u043B\u0435\u043C\u0435\u043D\u0442 \u0442\u0438\u043F\u0430 "{0}" \u0434\u043B\u044F \u043E\u0431\u044A\u0435\u043A\u0442\u0430 "{2}", \u0432 \u043A\u043E\u043B\u043B\u0435\u043A\u0446\u0438\u0438 "{1}" \u0438\u0445 \u0440\u043E\u0434\u0438\u0442\u0435\u043B\u044C\u0441\u043A\u043E\u0433\u043E \u043E\u0431\u044A\u0435\u043A\u0442\u0430. +_UI_PropertyDescriptor_description = \u0421\u0432\u043E\u0439\u0441\u0442\u0432\u043E "{0}" \u043E\u0431\u044A\u0435\u043A\u0442\u0430 "{1}" +_UI_EllipseNodeStyleDescription_type = \u0421\u0442\u0438\u043B\u044C \u0444\u0438\u0433\u0443\u0440\u044B \u0432 \u0432\u0438\u0434\u0435 \u044D\u043B\u043B\u0438\u043F\u0441\u0430 +_UI_Unknown_type = \u041E\u0431\u044A\u0435\u043A\u0442 +_UI_Unknown_datatype = \u0417\u043D\u0430\u0447\u0435\u043D\u0438\u0435 +_UI_EllipseNodeStyleDescription_background_feature = \u0424\u043E\u043D +_UI_Unknown_feature = \u041D\u0435 \u043E\u043F\u0440\u0435\u0434\u0435\u043B\u0435\u043D\u043E + diff --git a/packages/view/backend/sirius-components-view-diagram-edit/src/main/resources/plugin_ru.properties b/packages/view/backend/sirius-components-view-diagram-edit/src/main/resources/plugin_ru.properties new file mode 100644 index 0000000000..a756ceaef5 --- /dev/null +++ b/packages/view/backend/sirius-components-view-diagram-edit/src/main/resources/plugin_ru.properties @@ -0,0 +1,216 @@ +################################################################################ +# Copyright (c) 2024 Obeo. +# This program and the accompanying materials +# are made available under the terms of the Eclipse Public License v2.0 +# which accompanies this distribution, and is available at +# https://www.eclipse.org/legal/epl-2.0/ +# +# SPDX-License-Identifier: EPL-2.0 +# +# Contributors: +# Obeo - initial API and implementation +################################################################################# +pluginName=Diagram Edit Support +providerName=www.example.org +_UI_CreateChild_text={0} +_UI_CreateChild_text2={1} "{0}" +_UI_CreateChild_text3={1} +_UI_CreateChild_tooltip=\u0421\u043E\u0437\u0434\u0430\u0442\u044C \u043E\u0431\u044A\u0435\u043A\u0442 "{0}" \u0432 \u043A\u043E\u043B\u043B\u0435\u043A\u0446\u0438\u0438 "{1}" +_UI_CreateChild_description=\u0421\u043E\u0437\u0434\u0430\u0442\u044C \u043D\u043E\u0432\u044B\u0439 \u0434\u043E\u0447\u0435\u0440\u043D\u0438\u0439 \u044D\u043B\u0435\u043C\u0435\u043D\u0442 \u0442\u0438\u043F\u0430 "{0}" \u0432 \u043A\u043E\u043B\u043B\u0435\u043A\u0446\u0438\u0438 "{1}" \u043E\u0431\u044A\u0435\u043A\u0442\u0430 "{2}". +_UI_CreateSibling_description=\u0421\u043E\u0437\u0434\u0430\u0442\u044C \u043D\u043E\u0432\u044B\u0439 \u0441\u043E\u0441\u0435\u0434\u043D\u0438\u0439 \u044D\u043B\u0435\u043C\u0435\u043D\u0442 \u0442\u0438\u043F\u0430 "{0}" \u0434\u043B\u044F \u043E\u0431\u044A\u0435\u043A\u0442\u0430 "{2}", \u0432 \u043A\u043E\u043B\u043B\u0435\u043A\u0446\u0438\u0438 "{1}" \u0438\u0445 \u0440\u043E\u0434\u0438\u0442\u0435\u043B\u044C\u0441\u043A\u043E\u0433\u043E \u043E\u0431\u044A\u0435\u043A\u0442\u0430. +_UI_PropertyDescriptor_description=\u0421\u0432\u043E\u0439\u0441\u0442\u0432\u043E "{0}" \u043E\u0431\u044A\u0435\u043A\u0442\u0430 "{1}" +_UI_DiagramDescription_type=\u0421\u043F\u0435\u0446\u0438\u0444\u0438\u043A\u0430\u0446\u0438\u044F \u0434\u0438\u0430\u0433\u0440\u0430\u043C\u043C +_UI_DiagramElementDescription_type=\u0421\u043F\u0435\u0446\u0438\u0444\u0438\u043A\u0430\u0446\u0438\u044F \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u043E\u0432 \u0434\u0438\u0430\u0433\u0440\u0430\u043C\u043C +_UI_NodeDescription_type=\u0421\u043F\u0435\u0446\u0438\u0444\u0438\u043A\u0430\u0446\u0438\u044F \u0444\u0438\u0433\u0443\u0440 +_UI_EdgeDescription_type=\u0421\u043F\u0435\u0446\u0438\u0444\u0438\u043A\u0430\u0446\u0438\u044F \u0441\u0432\u044F\u0437\u0435\u0439 +_UI_LayoutStrategyDescription_type=\u0421\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u044F \u0440\u0430\u0437\u043C\u0435\u0449\u0435\u043D\u0438\u044F \u0444\u0438\u0433\u0443\u0440 +_UI_ListLayoutStrategyDescription_type=\u0420\u0430\u0437\u043C\u0435\u0449\u0435\u043D\u0438\u0435 \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u043E\u0432 \u0432 \u0432\u0438\u0434\u0435 \u0441\u043F\u0438\u0441\u043A\u0430 +_UI_FreeFormLayoutStrategyDescription_type=\u0421\u0432\u043E\u0431\u043E\u0434\u043D\u043E\u0435 \u0440\u0430\u0437\u043C\u0435\u0449\u0435\u043D\u0438\u0435 \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u043E\u0432 +_UI_LabelDescription_type=\u0421\u043F\u0435\u0446\u0438\u0444\u0438\u043A\u0430\u0446\u0438\u044F \u043D\u0430\u0434\u043F\u0438\u0441\u0438 +_UI_InsideLabelDescription_type=\u041D\u0430\u0434\u043F\u0438\u0441\u044C \u0432\u043D\u0443\u0442\u0440\u0438 \u0444\u0438\u0433\u0443\u0440\u044B +_UI_OutsideLabelDescription_type=\u041D\u0430\u0434\u043F\u0438\u0441\u044C \u0441\u043D\u0430\u0440\u0443\u0436\u0438 \u0444\u0438\u0433\u0443\u0440\u044B +_UI_Style_type=\u0421\u0442\u0438\u043B\u044C +_UI_BorderStyle_type=\u0421\u0442\u0438\u043B\u044C \u0433\u0440\u0430\u043D\u0438\u0446\u044B +_UI_InsideLabelStyle_type=\u0421\u0442\u0438\u043B\u044C \u043D\u0430\u0434\u043F\u0438\u0441\u0438 \u0432\u043D\u0443\u0442\u0440\u0438 \u0444\u0438\u0433\u0443\u0440\u044B +_UI_OutsideLabelStyle_type=\u0421\u0442\u0438\u043B\u044C \u043D\u0430\u0434\u043F\u0438\u0441\u0438 \u0441\u043D\u0430\u0440\u0443\u0436\u0438 \u0444\u0438\u0433\u0443\u0440\u044B +_UI_NodeLabelStyle_type=\u0421\u0442\u0438\u043B\u044C \u043D\u0430\u0434\u043F\u0438\u0441\u0438 \u0434\u043B\u044F \u0444\u0438\u0433\u0443\u0440\u044B +_UI_NodeStyleDescription_type=\u0421\u0442\u0438\u043B\u044C \u0444\u0438\u0433\u0443\u0440\u044B +_UI_ConditionalNodeStyle_type=\u0423\u0441\u043B\u043E\u0432\u043D\u044B\u0439 \u0441\u0442\u0438\u043B\u044C \u0444\u0438\u0433\u0443\u0440\u044B +_UI_ConditionalInsideLabelStyle_type=\u0423\u0441\u043B\u043E\u0432\u043D\u044B\u0439 \u0441\u0442\u0438\u043B\u044C \u043D\u0430\u0434\u043F\u0438\u0441\u0438 \u0432\u043D\u0443\u0442\u0440\u0438 \u0444\u0438\u0433\u0443\u0440\u044B +_UI_ConditionalOutsideLabelStyle_type=\u0423\u0441\u043B\u043E\u0432\u043D\u044B\u0439 \u0441\u0442\u0438\u043B\u044C \u043D\u0430\u0434\u043F\u0438\u0441\u0438 \u0441\u043D\u0430\u0440\u0443\u0436\u0438 \u0444\u0438\u0433\u0443\u0440\u044B +_UI_RectangularNodeStyleDescription_type=\u0421\u0442\u0438\u043B\u044C \u0444\u0438\u0433\u0443\u0440\u044B \u0432 \u0432\u0438\u0434\u0435 \u043F\u0440\u044F\u043C\u043E\u0443\u0433\u043E\u043B\u044C\u043D\u0438\u043A\u0430 +_UI_ImageNodeStyleDescription_type=\u0421\u0442\u0438\u043B\u044C \u0444\u0438\u0433\u0443\u0440\u044B \u0432 \u0432\u0438\u0434\u0435 \u0438\u0437\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u0438\u044F +_UI_IconLabelNodeStyleDescription_type=\u0421\u0442\u0438\u043B\u044C \u0444\u0438\u0433\u0443\u0440\u044B \u0432 \u0432\u0438\u0434\u0435 \u043D\u0430\u0434\u043F\u0438\u0441\u0438 \u0441\u043E \u0437\u043D\u0430\u0447\u043A\u043E\u043C +_UI_EdgeStyle_type=\u0421\u0442\u0438\u043B\u044C \u0441\u0432\u044F\u0437\u0438 +_UI_ConditionalEdgeStyle_type=\u0423\u0441\u043B\u043E\u0432\u043D\u044B\u0439 \u0441\u0442\u0438\u043B\u044C \u0441\u0432\u044F\u0437\u0438 +_UI_DiagramPalette_type=\u041F\u0430\u043B\u0438\u0442\u0440\u0430 +_UI_NodePalette_type=\u041F\u0430\u043B\u0438\u0442\u0440\u0430 \u0434\u043B\u044F \u0444\u0438\u0433\u0443\u0440 +_UI_EdgePalette_type=\u041F\u0430\u043B\u0438\u0442\u0440\u0430 \u0434\u043B\u044F \u0441\u0432\u044F\u0437\u0435\u0439 +_UI_Tool_type=\u0418\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442 +_UI_DeleteTool_type=\u0418\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442 \u0443\u0434\u0430\u043B\u0435\u043D\u0438\u044F +_UI_DropTool_type=\u0418\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442 \u043F\u0435\u0440\u0435\u0442\u0430\u0441\u043A\u0438\u0432\u0430\u043D\u0438\u044F +_UI_EdgeTool_type=\u0418\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442 \u0441\u043E\u0437\u0434\u0430\u043D\u0438\u044F \u0441\u0432\u044F\u0437\u0435\u0439 +_UI_EdgeReconnectionTool_type=\u0418\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442 \u043F\u0435\u0440\u0435\u0441\u043E\u0435\u0434\u0438\u043D\u0435\u043D\u0438\u044F \u0441\u0432\u044F\u0437\u0435\u0439 +_UI_LabelEditTool_type=\u0418\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442 \u0440\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F \u043D\u0430\u0434\u043F\u0438\u0441\u0435\u0439 +_UI_NodeTool_type=\u0418\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442 \u0441\u043E\u0437\u0434\u0430\u043D\u0438\u044F \u0444\u0438\u0433\u0443\u0440 +_UI_SourceEdgeEndReconnectionTool_type=\u0418\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442 \u043F\u0435\u0440\u0435\u0441\u043E\u0435\u0434\u0438\u043D\u0435\u043D\u0438\u044F \u043D\u0430\u0447\u0430\u043B\u0430 \u0441\u0432\u044F\u0437\u0435\u0439 +_UI_TargetEdgeEndReconnectionTool_type=\u0418\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442 \u043F\u0435\u0440\u0435\u0441\u043E\u0435\u0434\u0438\u043D\u0435\u043D\u0438\u044F \u043A\u043E\u043D\u0446\u0430 \u0441\u0432\u044F\u0437\u0435\u0439 +_UI_CreateView_type=\u0421\u043E\u0437\u0434\u0430\u0442\u044C \u043F\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043B\u0435\u043D\u0438\u0435 +_UI_DeleteView_type=\u0423\u0434\u0430\u043B\u0438\u0442\u044C \u043F\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043B\u0435\u043D\u0438\u0435 +_UI_SelectionDescription_type=\u0421\u043F\u0435\u0446\u0438\u0444\u0438\u043A\u0430\u0446\u0438\u044F \u0432\u044B\u0431\u043E\u0440\u0430 +_UI_ToolSection_type=\u0413\u0440\u0443\u043F\u043F\u0430 \u0438\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442\u043E\u0432 +_UI_DiagramToolSection_type=\u0413\u0440\u0443\u043F\u043F\u0430 \u0438\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442\u043E\u0432 \u0434\u043B\u044F \u0434\u0438\u0430\u0433\u0440\u0430\u043C\u043C\u044B +_UI_NodeToolSection_type=\u0413\u0440\u0443\u043F\u043F\u0430 \u0438\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442\u043E\u0432 \u0434\u043B\u044F \u0444\u0438\u0433\u0443\u0440\u044B +_UI_EdgeToolSection_type=\u0413\u0440\u0443\u043F\u043F\u0430 \u0438\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442\u043E\u0432 \u0434\u043B\u044F \u0441\u0432\u044F\u0437\u0438 +_UI_DropNodeTool_type=\u0418\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442 \u043F\u0435\u0440\u0435\u0442\u0430\u0441\u043A\u0438\u0432\u0430\u043D\u0438\u044F \u0444\u0438\u0433\u0443\u0440 +_UI_Unknown_type=\u041E\u0431\u044A\u0435\u043A\u0442 +_UI_Unknown_datatype=\u0417\u043D\u0430\u0447\u0435\u043D\u0438\u0435 +_UI_DiagramDescription_autoLayout_feature=\u0410\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u0435\u0441\u043A\u043E\u0435 \u0440\u0430\u0437\u043C\u0435\u0449\u0435\u043D\u0438\u0435 \u0444\u0438\u0433\u0443\u0440 +_UI_DiagramDescription_palette_feature=\u041F\u0430\u043B\u0438\u0442\u0440\u0430 +_UI_DiagramDescription_nodeDescriptions_feature=\u0421\u043F\u0435\u0446\u0438\u0444\u0438\u043A\u0430\u0446\u0438\u0438 \u0444\u0438\u0433\u0443\u0440 +_UI_DiagramDescription_edgeDescriptions_feature=\u0421\u043F\u0435\u0446\u0438\u0444\u0438\u043A\u0430\u0446\u0438\u0438 \u0441\u0432\u044F\u0437\u0435\u0439 +_UI_DiagramDescription_arrangeLayoutDirection_feature=\u041D\u0430\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u0435 \u0440\u0430\u0437\u043C\u0435\u0449\u0435\u043D\u0438\u044F \u0444\u0438\u0433\u0443\u0440 +_UI_DiagramElementDescription_name_feature=\u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 +_UI_DiagramElementDescription_domainType_feature=\u0422\u0438\u043F +_UI_DiagramElementDescription_semanticCandidatesExpression_feature=\u042D\u043B\u0435\u043C\u0435\u043D\u0442\u044B \u043C\u043E\u0434\u0435\u043B\u0438 (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_DiagramElementDescription_preconditionExpression_feature=\u041F\u0440\u0435\u0434\u0443\u0441\u043B\u043E\u0432\u0438\u0435 (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_DiagramElementDescription_synchronizationPolicy_feature=\u041F\u043E\u043B\u0438\u0442\u0438\u043A\u0430 \u0441\u0438\u043D\u0445\u0440\u043E\u043D\u0438\u0437\u0430\u0446\u0438\u0438 +_UI_NodeDescription_collapsible_feature=\u041C\u043E\u0436\u043D\u043E \u0441\u0432\u043E\u0440\u0430\u0447\u0438\u0432\u0430\u0442\u044C +_UI_NodeDescription_palette_feature=\u041F\u0430\u043B\u0438\u0442\u0440\u0430 +_UI_NodeDescription_childrenLayoutStrategy_feature=\u0421\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u044F \u0440\u0430\u0437\u043C\u0435\u0449\u0435\u043D\u0438\u044F \u0434\u043E\u0447\u0435\u0440\u043D\u0438\u0445 \u0444\u0438\u0433\u0443\u0440 +_UI_NodeDescription_style_feature=\u0421\u0442\u0438\u043B\u044C +_UI_NodeDescription_conditionalStyles_feature=\u0423\u0441\u043B\u043E\u0432\u043D\u044B\u0435 \u0441\u0442\u0438\u043B\u0438 +_UI_NodeDescription_childrenDescriptions_feature=\u0414\u043E\u0447\u0435\u0440\u043D\u0438\u0435 \u0444\u0438\u0433\u0443\u0440\u044B +_UI_NodeDescription_borderNodesDescriptions_feature=\u0424\u0438\u0433\u0443\u0440\u044B \u043D\u0430 \u0433\u0440\u0430\u043D\u0438\u0446\u0435 +_UI_NodeDescription_reusedChildNodeDescriptions_feature=\u041F\u043E\u0432\u0442\u043E\u0440\u043D\u043E \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0435\u043C\u044B\u0435 \u0434\u043E\u0447\u0435\u0440\u043D\u0438\u0435 \u0444\u0438\u0433\u0443\u0440\u044B +_UI_NodeDescription_reusedBorderNodeDescriptions_feature=\u041F\u043E\u0432\u0442\u043E\u0440\u043D\u043E \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0435\u043C\u044B\u0435 \u0444\u0438\u0433\u0443\u0440\u044B \u043D\u0430 \u0433\u0440\u0430\u043D\u0438\u0446\u0435 +_UI_NodeDescription_userResizable_feature=\u041F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u0438 \u043C\u043E\u0433\u0443\u0442 \u0438\u0437\u043C\u0435\u043D\u044F\u0442\u044C \u0440\u0430\u0437\u043C\u0435\u0440 +_UI_NodeDescription_defaultWidthExpression_feature=\u0428\u0438\u0440\u0438\u043D\u0430 \u043F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_NodeDescription_defaultHeightExpression_feature=\u0412\u044B\u0441\u043E\u0442\u0430 \u043F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_NodeDescription_keepAspectRatio_feature=\u0421\u043E\u0445\u0440\u0430\u043D\u044F\u0442\u044C \u0441\u043E\u043E\u0442\u043D\u043E\u0448\u0435\u043D\u0438\u0435 \u0441\u0442\u043E\u0440\u043E\u043D +_UI_NodeDescription_isCollapsedByDefaultExpression_feature=\u0421\u0432\u0451\u0440\u043D\u0443\u0442\u043E \u043F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_NodeDescription_isHiddenByDefaultExpression_feature=\u0421\u043A\u0440\u044B\u0442\u043E \u043F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_NodeDescription_isFadedByDefaultExpression_feature=\u0417\u0430\u0442\u0435\u043D\u0435\u043D\u043E \u043F\u043E \u0443\u043C\u043E\u043B\u0447\u0430\u043D\u0438\u044E (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_NodeDescription_insideLabel_feature=\u041D\u0430\u0434\u043F\u0438\u0441\u044C \u0432\u043D\u0443\u0442\u0440\u0438 \u0444\u0438\u0433\u0443\u0440\u044B +_UI_NodeDescription_outsideLabels_feature=\u041D\u0430\u0434\u043F\u0438\u0441\u044C \u0441\u043D\u0430\u0440\u0443\u0436\u0438 \u0444\u0438\u0433\u0443\u0440\u044B +_UI_EdgeDescription_beginLabelExpression_feature=\u041D\u0430\u0447\u0430\u043B\u044C\u043D\u0430\u044F \u043D\u0430\u0434\u043F\u0438\u0441\u044C (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_EdgeDescription_centerLabelExpression_feature=\u0426\u0435\u043D\u0442\u0440\u0430\u043B\u044C\u043D\u0430\u044F \u043D\u0430\u0434\u043F\u0438\u0441\u044C (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_EdgeDescription_endLabelExpression_feature=\u041A\u043E\u043D\u0435\u0447\u043D\u0430\u044F \u043D\u0430\u0434\u043F\u0438\u0441\u044C (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_EdgeDescription_isDomainBasedEdge_feature=\u041E\u0441\u043D\u043E\u0432\u0430\u043D\u043E \u043D\u0430 \u0442\u0438\u043F\u0435 +_UI_EdgeDescription_palette_feature=\u041F\u0430\u043B\u0438\u0442\u0440\u0430 +_UI_EdgeDescription_sourceNodeDescriptions_feature=\u0421\u043F\u0435\u0446\u0438\u0444\u0438\u043A\u0430\u0446\u0438\u0438 \u0438\u0441\u0445\u043E\u0434\u043D\u044B\u0445 \u0444\u0438\u0433\u0443\u0440 +_UI_EdgeDescription_targetNodeDescriptions_feature=\u0421\u043F\u0435\u0446\u0438\u0444\u0438\u043A\u0430\u0446\u0438\u0438 \u0446\u0435\u043B\u0435\u0432\u044B\u0445 \u0444\u0438\u0433\u0443\u0440 +_UI_EdgeDescription_sourceNodesExpression_feature=\u0418\u0441\u0445\u043E\u0434\u043D\u044B\u0435 \u0444\u0438\u0433\u0443\u0440\u044B (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_EdgeDescription_targetNodesExpression_feature=\u0426\u0435\u043B\u0435\u0432\u044B\u0435 \u0444\u0438\u0433\u0443\u0440\u044B (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_EdgeDescription_style_feature=\u0421\u0442\u0438\u043B\u044C +_UI_EdgeDescription_conditionalStyles_feature=\u0423\u0441\u043B\u043E\u0432\u043D\u044B\u0435 \u0441\u0442\u0438\u043B\u0438 +_UI_ListLayoutStrategyDescription_areChildNodesDraggableExpression_feature=\u0414\u043E\u0447\u0435\u0440\u043D\u0438\u0435 \u0444\u0438\u0433\u0443\u0440\u044B \u043C\u043E\u0433\u0443\u0442 \u043F\u0435\u0440\u0435\u0442\u0430\u0441\u043A\u0438\u0432\u0430\u0442\u044C\u0441\u044F (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_ListLayoutStrategyDescription_topGapExpression_feature=\u041E\u0442\u0441\u0442\u0443\u043F \u0441\u0432\u0435\u0440\u0445\u0443 (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_ListLayoutStrategyDescription_bottomGapExpression_feature=\u041E\u0442\u0441\u0442\u0443\u043F \u0441\u043D\u0438\u0437\u0443 (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_LabelDescription_labelExpression_feature=\u041D\u0430\u0434\u043F\u0438\u0441\u044C (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_LabelDescription_overflowStrategy_feature=\u041F\u043E\u0432\u0435\u0434\u0435\u043D\u0438\u0435 \u0434\u043B\u044F \u0434\u043B\u0438\u043D\u043D\u044B\u0445 \u043D\u0430\u0434\u043F\u0438\u0441\u0435\u0439 +_UI_InsideLabelDescription_position_feature=\u0420\u0430\u0441\u043F\u043E\u043B\u043E\u0436\u0435\u043D\u0438\u0435 +_UI_InsideLabelDescription_style_feature=\u0421\u0442\u0438\u043B\u044C +_UI_InsideLabelDescription_conditionalStyles_feature=\u0423\u0441\u043B\u043E\u0432\u043D\u044B\u0435 \u0441\u0442\u0438\u043B\u0438 +_UI_OutsideLabelDescription_position_feature=\u0420\u0430\u0441\u043F\u043E\u043B\u043E\u0436\u0435\u043D\u0438\u0435 +_UI_OutsideLabelDescription_style_feature=\u0421\u0442\u0438\u043B\u044C +_UI_OutsideLabelDescription_conditionalStyles_feature=\u0423\u0441\u043B\u043E\u0432\u043D\u044B\u0435 \u0441\u0442\u0438\u043B\u0438 +_UI_ListLayoutStrategyDescription_growableNodes_feature=\u0424\u0438\u0433\u0443\u0440\u044B \u043C\u043E\u0433\u0443\u0442 \u0443\u0432\u0435\u043B\u0438\u0447\u0438\u0432\u0430\u0442\u044C\u0441\u044F +_UI_Style_color_feature=\u0426\u0432\u0435\u0442 +_UI_BorderStyle_borderColor_feature=\u0426\u0432\u0435\u0442 \u0433\u0440\u0430\u043D\u0438\u0446\u044B +_UI_BorderStyle_borderRadius_feature=\u0420\u0430\u0434\u0438\u0443\u0441 \u0433\u0440\u0430\u043D\u0438\u0446\u044B +_UI_BorderStyle_borderSize_feature=\u0422\u043E\u043B\u0449\u0438\u043D\u0430 \u0433\u0440\u0430\u043D\u0438\u0446\u044B +_UI_BorderStyle_borderLineStyle_feature=\u0421\u0442\u0438\u043B\u044C \u0433\u0440\u0430\u043D\u0438\u0446\u044B +_UI_InsideLabelStyle_withHeader_feature=\u0421 \u0437\u0430\u0433\u043E\u043B\u043E\u0432\u043A\u043E\u043C +_UI_InsideLabelStyle_displayHeaderSeparator_feature=\u041F\u043E\u043A\u0430\u0437\u044B\u0432\u0430\u0442\u044C \u0440\u0430\u0437\u0434\u0435\u043B\u0438\u0442\u0435\u043B\u044C \u0437\u0430\u0433\u043E\u043B\u043E\u0432\u043A\u0430 +_UI_NodeLabelStyle_labelColor_feature=\u0426\u0432\u0435\u0442 \u043D\u0430\u0434\u043F\u0438\u0441\u0438 +_UI_NodeLabelStyle_showIcon_feature=\u041F\u043E\u043A\u0430\u0437\u044B\u0432\u0430\u0442\u044C \u0437\u043D\u0430\u0447\u043E\u043A +_UI_NodeLabelStyle_labelIcon_feature=\u0417\u043D\u0430\u0447\u043E\u043A \u0434\u043B\u044F \u043D\u0430\u0434\u043F\u0438\u0441\u0438 +_UI_ConditionalNodeStyle_style_feature=\u0421\u0442\u0438\u043B\u044C +_UI_ConditionalInsideLabelStyle_style_feature=\u0421\u0442\u0438\u043B\u044C +_UI_ConditionalOutsideLabelStyle_style_feature=\u0421\u0442\u0438\u043B\u044C +_UI_RectangularNodeStyleDescription_background_feature=\u0426\u0432\u0435\u0442 \u0444\u043E\u043D\u0430 +_UI_ImageNodeStyleDescription_shape_feature=\u0424\u0438\u0433\u0443\u0440\u0430 +_UI_ImageNodeStyleDescription_positionDependentRotation_feature=\u041F\u043E\u0432\u043E\u0440\u043E\u0442 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043C\u043E\u0441\u0442\u0438 \u043E\u0442 \u0440\u0430\u0441\u043F\u043E\u043B\u043E\u0436\u0435\u043D\u0438\u044F +_UI_IconLabelNodeStyleDescription_background_feature=\u0426\u0432\u0435\u0442 \u0444\u043E\u043D\u0430 +_UI_EdgeStyle_lineStyle_feature=\u0421\u0442\u0438\u043B\u044C \u043B\u0438\u043D\u0438\u0438 +_UI_EdgeStyle_sourceArrowStyle_feature=\u0421\u0442\u0438\u043B\u044C \u043D\u0430\u0447\u0430\u043B\u044C\u043D\u043E\u0439 \u0441\u0442\u0440\u0435\u043B\u043A\u0438 +_UI_EdgeStyle_targetArrowStyle_feature=\u0421\u0442\u0438\u043B\u044C \u043A\u043E\u043D\u0435\u0447\u043D\u043E\u0439 \u0441\u0442\u0440\u0435\u043B\u043A\u0438 +_UI_EdgeStyle_edgeWidth_feature=\u0422\u043E\u043B\u0449\u0438\u043D\u0430 \u043B\u0438\u043D\u0438\u0438 +_UI_EdgeStyle_showIcon_feature=\u041F\u043E\u043A\u0430\u0437\u044B\u0432\u0430\u0442\u044C \u0437\u043D\u0430\u0447\u043E\u043A +_UI_EdgeStyle_labelIcon_feature=\u0417\u043D\u0430\u0447\u043E\u043A \u0434\u043B\u044F \u043D\u0430\u0434\u043F\u0438\u0441\u0438 +_UI_DiagramPalette_dropTool_feature=\u0418\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442 \u043F\u0435\u0440\u0435\u0442\u0430\u0441\u043A\u0438\u0432\u0430\u043D\u0438\u044F +_UI_DiagramPalette_dropNodeTool_feature=\u0418\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442 \u043F\u0435\u0440\u0435\u0442\u0430\u0441\u043A\u0438\u0432\u0430\u043D\u0438\u044F \u0444\u0438\u0433\u0443\u0440 +_UI_DiagramPalette_nodeTools_feature=\u0418\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442\u044B \u0434\u043B\u044F \u0444\u0438\u0433\u0443\u0440 +_UI_DiagramPalette_toolSections_feature=\u0413\u0440\u0443\u043F\u043F\u044B \u0438\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442\u043E\u0432 +_UI_NodePalette_deleteTool_feature=\u0418\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442 \u0443\u0434\u0430\u043B\u0435\u043D\u0438\u044F +_UI_NodePalette_labelEditTool_feature=\u0418\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442 \u0440\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F \u043D\u0430\u0434\u043F\u0438\u0441\u0438 +_UI_NodePalette_dropNodeTool_feature=\u0418\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442 \u043F\u0435\u0440\u0435\u0442\u0430\u0441\u043A\u0438\u0432\u0430\u043D\u0438\u044F \u0444\u0438\u0433\u0443\u0440 +_UI_NodePalette_nodeTools_feature=\u0418\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442\u044B \u0434\u043B\u044F \u0444\u0438\u0433\u0443\u0440 +_UI_NodePalette_edgeTools_feature=\u0418\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442\u044B \u0434\u043B\u044F \u0441\u0432\u044F\u0437\u0435\u0439 +_UI_NodePalette_toolSections_feature=\u0413\u0440\u0443\u043F\u043F\u044B \u0438\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442\u043E\u0432 +_UI_EdgePalette_deleteTool_feature=\u0418\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442 \u0443\u0434\u0430\u043B\u0435\u043D\u0438\u044F +_UI_EdgePalette_centerLabelEditTool_feature=\u0418\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442 \u0440\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F \u0446\u0435\u043D\u0442\u0440\u0430\u043B\u044C\u043D\u043E\u0439 \u043D\u0430\u0434\u043F\u0438\u0441\u0438 +_UI_EdgePalette_beginLabelEditTool_feature=\u0418\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442 \u0440\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F \u043D\u0430\u0447\u0430\u043B\u044C\u043D\u043E\u0439 \u043D\u0430\u0434\u043F\u0438\u0441\u0438 +_UI_EdgePalette_endLabelEditTool_feature=\u0418\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442 \u0440\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F \u043A\u043E\u043D\u0435\u0447\u043D\u043E\u0439 \u043D\u0430\u0434\u043F\u0438\u0441\u0438 +_UI_EdgePalette_nodeTools_feature=\u0418\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442\u044B \u0434\u043B\u044F \u0444\u0438\u0433\u0443\u0440 +_UI_EdgePalette_edgeReconnectionTools_feature=\u0418\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442\u044B \u043F\u0435\u0440\u0435\u0441\u043E\u0435\u0434\u0438\u043D\u0435\u043D\u0438\u044F \u0441\u0432\u044F\u0437\u0435\u0439 +_UI_EdgePalette_toolSections_feature=\u0413\u0440\u0443\u043F\u043F\u044B \u0438\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442\u043E\u0432 +_UI_Tool_name_feature=\u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 +_UI_Tool_preconditionExpression_feature=\u041F\u0440\u0435\u0434\u0443\u0441\u043B\u043E\u0432\u0438\u0435 (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_Tool_body_feature=\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u0435 +_UI_EdgeTool_targetElementDescriptions_feature=\u0421\u043F\u0435\u0446\u0438\u0444\u0438\u043A\u0430\u0446\u0438\u0438 \u0446\u0435\u043B\u0435\u0432\u044B\u0445 \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u043E\u0432 +_UI_EdgeTool_iconURLsExpression_feature=\u0410\u0434\u0440\u0435\u0441\u0430 \u0437\u043D\u0430\u0447\u043A\u043E\u0432 (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_LabelEditTool_initialDirectEditLabelExpression_feature=\u041D\u0430\u0447\u0430\u043B\u044C\u043D\u0430\u044F \u043D\u0430\u0434\u043F\u0438\u0441\u044C (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_NodeTool_selectionDescription_feature=\u0421\u043F\u0435\u0446\u0438\u0444\u0438\u043A\u0430\u0446\u0438\u044F \u0432\u044B\u0431\u043E\u0440\u0430 +_UI_NodeTool_iconURLsExpression_feature=\u0410\u0434\u0440\u0435\u0441\u0430 \u0437\u043D\u0430\u0447\u043A\u043E\u0432 (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_CreateView_parentViewExpression_feature=\u0420\u043E\u0434\u0438\u0442\u0435\u043B\u044C\u0441\u043A\u043E\u0435 \u043F\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043B\u0435\u043D\u0438\u0435 (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_CreateView_elementDescription_feature=\u0421\u043F\u0435\u0446\u0438\u0444\u0438\u043A\u0430\u0446\u0438\u044F \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0430 +_UI_CreateView_semanticElementExpression_feature=\u042D\u043B\u0435\u043C\u0435\u043D\u0442\u044B (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_CreateView_variableName_feature=\u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u043F\u0435\u0440\u0435\u043C\u0435\u043D\u043D\u043E\u0439 +_UI_CreateView_containmentKind_feature=\u0422\u0438\u043F \u0432\u043B\u043E\u0436\u0435\u043D\u0438\u044F +_UI_DeleteView_viewExpression_feature=\u041F\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043B\u0435\u043D\u0438\u0435 (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_SelectionDescription_selectionCandidatesExpression_feature=\u042D\u043B\u0435\u043C\u0435\u043D\u0442\u044B \u0434\u043B\u044F \u0432\u044B\u0431\u043E\u0440\u0430 (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_SelectionDescription_selectionMessage_feature=\u0421\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u0435 +_UI_ToolSection_name_feature=\u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 +_UI_DiagramToolSection_nodeTools_feature=\u0418\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442\u044B \u0434\u043B\u044F \u0444\u0438\u0433\u0443\u0440 +_UI_NodeToolSection_nodeTools_feature=\u0418\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442\u044B \u0434\u043B\u044F \u0444\u0438\u0433\u0443\u0440 +_UI_NodeToolSection_edgeTools_feature=\u0418\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442\u044B \u0434\u043B\u044F \u0441\u0432\u044F\u0437\u0435\u0439 +_UI_EdgeToolSection_nodeTools_feature=\u0418\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442\u044B \u0434\u043B\u044F \u0444\u0438\u0433\u0443\u0440 +_UI_DropNodeTool_acceptedNodeTypes_feature=\u0414\u043E\u043F\u0443\u0441\u0442\u0438\u043C\u044B\u0435 \u0442\u0438\u043F\u044B \u0444\u0438\u0433\u0443\u0440 +_UI_Unknown_feature=\u041D\u0435 \u043E\u043F\u0440\u0435\u0434\u0435\u043B\u0435\u043D\u043E +_UI_ArrowStyle_None_literal=\u043D\u0435\u0442 +_UI_ArrowStyle_OutputArrow_literal=\u0432\u044B\u0445\u043E\u0434\u043D\u0430\u044F \u0441\u0442\u0440\u0435\u043B\u043A\u0430 +_UI_ArrowStyle_InputArrow_literal=\u0432\u0445\u043E\u0434\u043D\u0430\u044F \u0441\u0442\u0440\u0435\u043B\u043A\u0430 +_UI_ArrowStyle_OutputClosedArrow_literal=\u0432\u044B\u0445\u043E\u0434\u043D\u0430\u044F \u0437\u0430\u043A\u0440\u044B\u0442\u0430\u044F \u0441\u0442\u0440\u0435\u043B\u043A\u0430 +_UI_ArrowStyle_InputClosedArrow_literal=\u0432\u0445\u043E\u0434\u043D\u0430\u044F \u0437\u0430\u043A\u0440\u044B\u0442\u0430\u044F \u0441\u0442\u0440\u0435\u043B\u043A\u0430 +_UI_ArrowStyle_OutputFillClosedArrow_literal=\u0432\u044B\u0445\u043E\u0434\u043D\u0430\u044F \u0437\u0430\u043A\u0440\u0430\u0448\u0435\u043D\u043D\u0430\u044F \u0441\u0442\u0440\u0435\u043B\u043A\u0430 +_UI_ArrowStyle_InputFillClosedArrow_literal=\u0432\u0445\u043E\u0434\u043D\u0430\u044F \u0437\u0430\u043A\u0440\u0430\u0448\u0435\u043D\u043D\u0430\u044F \u0441\u0442\u0440\u0435\u043B\u043A\u0430 +_UI_ArrowStyle_Diamond_literal=\u0440\u043E\u043C\u0431 +_UI_ArrowStyle_FillDiamond_literal=\u0437\u0430\u043A\u0440\u0430\u0448\u0435\u043D\u043D\u044B\u0439 \u0440\u043E\u043C\u0431 +_UI_ArrowStyle_InputArrowWithDiamond_literal=\u0432\u0445\u043E\u0434\u043D\u0430\u044F \u0441\u0442\u0440\u0435\u043B\u043A\u0430 \u0441 \u0440\u043E\u043C\u0431\u043E\u043C +_UI_ArrowStyle_InputArrowWithFillDiamond_literal=\u0432\u0445\u043E\u0434\u043D\u0430\u044F \u0441\u0442\u0440\u0435\u043B\u043A\u0430 \u0441 \u0437\u0430\u043A\u0440\u0430\u0448\u0435\u043D\u043D\u044B\u043C \u0440\u043E\u043C\u0431\u043E\u043C +_UI_ArrowStyle_Circle_literal=\u043A\u0440\u0443\u0433 +_UI_ArrowStyle_FillCircle_literal=\u0437\u0430\u043A\u0440\u0430\u0448\u0435\u043D\u043D\u044B\u0439 \u043A\u0440\u0443\u0433 +_UI_ArrowStyle_CrossedCircle_literal=\u043F\u0435\u0440\u0435\u0447\u0435\u0440\u043A\u043D\u0443\u0442\u044B\u0439 \u043A\u0440\u0443\u0433 +_UI_ArrowStyle_ClosedArrowWithVerticalBar_literal=\u0437\u0430\u043A\u0440\u044B\u0442\u0430\u044F \u0441\u0442\u0440\u0435\u043B\u043A\u0430 \u0441 \u0432\u0435\u0440\u0442\u0438\u043A\u0430\u043B\u044C\u043D\u043E\u0439 \u043B\u0438\u043D\u0438\u0435\u0439 +_UI_ArrowStyle_ClosedArrowWithDots_literal=\u0437\u0430\u043A\u0440\u044B\u0442\u0430\u044F \u0441\u0442\u0440\u0435\u043B\u043A\u0430 \u0441 \u0442\u043E\u0447\u043A\u0430\u043C\u0438 +_UI_LayoutDirection_Column_literal=\u0441\u0442\u043E\u043B\u0431\u0435\u0446 +_UI_LineStyle_Solid_literal=\u0441\u043F\u043B\u043E\u0448\u043D\u0430\u044F +_UI_LineStyle_Dash_literal=\u0448\u0442\u0440\u0438\u0445\u043E\u0432\u0430\u044F +_UI_LineStyle_Dot_literal=\u043F\u0443\u043D\u043A\u0442\u0438\u0440\u043D\u0430\u044F +_UI_LineStyle_Dash_Dot_literal=\u0448\u0442\u0440\u0438\u0445\u043F\u0443\u043D\u043A\u0442\u0438\u0440\u043D\u0430\u044F +_UI_NodeContainmentKind_CHILD_NODE_literal=\u0434\u043E\u0447\u0435\u0440\u043D\u044F\u044F \u0444\u0438\u0433\u0443\u0440\u0430 +_UI_NodeContainmentKind_BORDER_NODE_literal=\u0444\u0438\u0433\u0443\u0440\u0430 \u043D\u0430 \u0433\u0440\u0430\u043D\u0438\u0446\u0435 +_UI_SynchronizationPolicy_SYNCHRONIZED_literal=\u0441\u0438\u043D\u0445\u0440\u043E\u043D\u0438\u0437\u0438\u0440\u043E\u0432\u0430\u043D\u043E +_UI_SynchronizationPolicy_UNSYNCHRONIZED_literal=\u043D\u0435 \u0441\u0438\u043D\u0445\u0440\u043E\u043D\u0438\u0437\u0438\u0440\u043E\u0432\u0430\u043D\u043E +_UI_InsideLabelPosition_TOP_CENTER_literal=\u0441\u0432\u0435\u0440\u0445\u0443 \u043F\u043E \u0446\u0435\u043D\u0442\u0440\u0443 +_UI_OutsideLabelPosition_BOTTOM_CENTER_literal=\u0441\u043D\u0438\u0437\u0443 \u043F\u043E \u0446\u0435\u043D\u0442\u0440\u0443 +_UI_LabelOverflowStrategy_NONE_literal=\u043D\u0435\u0442 +_UI_LabelOverflowStrategy_WRAP_literal=\u043F\u0435\u0440\u0435\u043D\u043E\u0441 +_UI_LabelOverflowStrategy_ELLIPSIS_literal=\u043C\u043D\u043E\u0433\u043E\u0442\u043E\u0447\u0438\u0435 +_UI_ArrangeLayoutDirection_UNDEFINED_literal=\u043D\u0435 \u043E\u043F\u0440\u0435\u0434\u0435\u043B\u0435\u043D\u043E +_UI_ArrangeLayoutDirection_RIGHT_literal=\u043D\u0430\u043F\u0440\u0430\u0432\u043E +_UI_ArrangeLayoutDirection_DOWN_literal=\u0432\u043D\u0438\u0437 +_UI_ArrangeLayoutDirection_LEFT_literal=\u043D\u0430\u043B\u0435\u0432\u043E +_UI_ArrangeLayoutDirection_UP_literal=\u043D\u0430\u0432\u0435\u0440\u0445 diff --git a/packages/view/backend/sirius-components-view-edit/src/main/resources/plugin_ru.properties b/packages/view/backend/sirius-components-view-edit/src/main/resources/plugin_ru.properties new file mode 100644 index 0000000000..845e17d5ad --- /dev/null +++ b/packages/view/backend/sirius-components-view-edit/src/main/resources/plugin_ru.properties @@ -0,0 +1,72 @@ +# Copyright (c) 2024 Obeo. +# This program and the accompanying materials +# are made available under the terms of the Eclipse Public License v2.0 +# which accompanies this distribution, and is available at +# https://www.eclipse.org/legal/epl-2.0/ +# +# SPDX-License-Identifier: EPL-2.0 +# +# Contributors: +# Obeo - initial API and implementation + +pluginName = View Edit Support +providerName = www.example.org + +_UI_CreateChild_text = {0} +_UI_CreateChild_text2 = {1} "{0}" +_UI_CreateChild_text3 = {1} +_UI_CreateChild_tooltip = \u0421\u043E\u0437\u0434\u0430\u0442\u044C \u043E\u0431\u044A\u0435\u043A\u0442 "{0}" \u0432 \u043A\u043E\u043B\u043B\u0435\u043A\u0446\u0438\u0438 "{1}" +_UI_CreateChild_description = \u0421\u043E\u0437\u0434\u0430\u0442\u044C \u043D\u043E\u0432\u044B\u0439 \u0434\u043E\u0447\u0435\u0440\u043D\u0438\u0439 \u044D\u043B\u0435\u043C\u0435\u043D\u0442 \u0442\u0438\u043F\u0430 "{0}" \u0432 \u043A\u043E\u043B\u043B\u0435\u043A\u0446\u0438\u0438 "{1}" \u043E\u0431\u044A\u0435\u043A\u0442\u0430 "{2}". +_UI_CreateSibling_description = \u0421\u043E\u0437\u0434\u0430\u0442\u044C \u043D\u043E\u0432\u044B\u0439 \u0441\u043E\u0441\u0435\u0434\u043D\u0438\u0439 \u044D\u043B\u0435\u043C\u0435\u043D\u0442 \u0442\u0438\u043F\u0430 "{0}" \u0434\u043B\u044F \u043E\u0431\u044A\u0435\u043A\u0442\u0430 "{2}", \u0432 \u043A\u043E\u043B\u043B\u0435\u043A\u0446\u0438\u0438 "{1}" \u0438\u0445 \u0440\u043E\u0434\u0438\u0442\u0435\u043B\u044C\u0441\u043A\u043E\u0433\u043E \u043E\u0431\u044A\u0435\u043A\u0442\u0430. + +_UI_PropertyDescriptor_description = \u0421\u0432\u043E\u0439\u0441\u0442\u0432\u043E "{0}" \u043E\u0431\u044A\u0435\u043A\u0442\u0430 "{1}" + +_UI_View_type = \u041F\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043B\u0435\u043D\u0438\u0435 +_UI_ColorPalette_type = \u041F\u0430\u043B\u0438\u0442\u0440\u0430 \u0446\u0432\u0435\u0442\u043E\u0432 +_UI_FixedColor_type = \u0424\u0438\u043A\u0441\u0438\u0440\u043E\u0432\u0430\u043D\u043D\u044B\u0439 \u0446\u0432\u0435\u0442 +_UI_UserColor_type = \u041F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044C\u0441\u043A\u0438\u0439 \u0446\u0432\u0435\u0442 +_UI_RepresentationDescription_type = \u0421\u043F\u0435\u0446\u0438\u0444\u0438\u043A\u0430\u0446\u0438\u044F \u043F\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043B\u0435\u043D\u0438\u044F +_UI_LabelStyle_type = \u0421\u0442\u0438\u043B\u044C \u043D\u0430\u0434\u043F\u0438\u0441\u0438 +_UI_Operation_type = \u0414\u0435\u0439\u0441\u0442\u0432\u0438\u0435 +_UI_ChangeContext_type = \u0418\u0437\u043C\u0435\u043D\u0438\u0442\u044C \u043A\u043E\u043D\u0442\u0435\u043A\u0441\u0442 +_UI_CreateInstance_type = \u0421\u043E\u0437\u0434\u0430\u0442\u044C \u043E\u0431\u044A\u0435\u043A\u0442 +_UI_SetValue_type = \u0423\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435 +_UI_UnsetValue_type = \u0421\u0431\u0440\u043E\u0441\u0438\u0442\u044C \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435 +_UI_DeleteElement_type = \u0423\u0434\u0430\u043B\u0438\u0442\u044C \u044D\u043B\u0435\u043C\u0435\u043D\u0442 +_UI_Let_type = \u041F\u0435\u0440\u0435\u043C\u0435\u043D\u043D\u0430\u044F +_UI_If_type = \u0423\u0441\u043B\u043E\u0432\u0438\u0435 +_UI_Conditional_type = \u0423\u0441\u043B\u043E\u0432\u043D\u044B\u0439 +_UI_Unknown_type = \u041E\u0431\u044A\u0435\u043A\u0442 + +_UI_Unknown_datatype= \u0417\u043D\u0430\u0447\u0435\u043D\u0438\u0435 + +_UI_View_descriptions_feature = \u0421\u043F\u0435\u0446\u0438\u0444\u0438\u043A\u0430\u0446\u0438\u0438 +_UI_View_colorPalettes_feature = \u041F\u0430\u043B\u0438\u0442\u0440\u044B \u0446\u0432\u0435\u0442\u043E\u0432 +_UI_ColorPalette_name_feature = \u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 +_UI_ColorPalette_colors_feature = \u0426\u0432\u0435\u0442\u0430 +_UI_FixedColor_value_feature = \u0417\u043D\u0430\u0447\u0435\u043D\u0438\u0435 +_UI_UserColor_name_feature = \u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 +_UI_RepresentationDescription_name_feature = \u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 +_UI_RepresentationDescription_domainType_feature = \u0422\u0438\u043F \u043E\u0431\u044A\u0435\u043A\u0442\u043E\u0432 +_UI_RepresentationDescription_preconditionExpression_feature = \u041F\u0440\u0435\u0434\u0443\u0441\u043B\u043E\u0432\u0438\u0435 (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_RepresentationDescription_titleExpression_feature = \u0417\u0430\u0433\u043E\u043B\u043E\u0432\u043E\u043A (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_LabelStyle_fontSize_feature = \u0420\u0430\u0437\u043C\u0435\u0440 \u0448\u0440\u0438\u0444\u0442\u0430 +_UI_LabelStyle_italic_feature = \u041A\u0443\u0440\u0441\u0438\u0432 +_UI_LabelStyle_bold_feature = \u041F\u043E\u043B\u0443\u0436\u0438\u0440\u043D\u044B\u0439 +_UI_LabelStyle_underline_feature = \u041F\u043E\u0434\u0447\u0435\u0440\u043A\u043D\u0443\u0442\u044B\u0439 +_UI_LabelStyle_strikeThrough_feature = \u0417\u0430\u0447\u0435\u0440\u043A\u043D\u0443\u0442\u044B\u0439 +_UI_Operation_children_feature = \u0414\u043E\u0447\u0435\u0440\u043D\u0438\u0439 \u043E\u0431\u044A\u0435\u043A\u0442 +_UI_ChangeContext_expression_feature = \u0412\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435 +_UI_CreateInstance_typeName_feature = \u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u0442\u0438\u043F\u0430 +_UI_CreateInstance_referenceName_feature = \u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u0441\u0441\u044B\u043B\u043A\u0438 +_UI_CreateInstance_variableName_feature = \u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u043F\u0435\u0440\u0435\u043C\u0435\u043D\u043D\u043E\u0439 +_UI_SetValue_featureName_feature = \u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u0441\u0432\u043E\u0439\u0441\u0442\u0432\u0430 +_UI_SetValue_valueExpression_feature = \u0417\u043D\u0430\u0447\u0435\u043D\u0438\u0435 (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_UnsetValue_featureName_feature = \u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u0441\u0432\u043E\u0439\u0441\u0442\u0432\u0430 +_UI_UnsetValue_elementExpression_feature = \u042D\u043B\u0435\u043C\u0435\u043D\u0442 (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_Let_variableName_feature = \u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u043F\u0435\u0440\u0435\u043C\u0435\u043D\u043D\u043E\u0439 +_UI_Let_valueExpression_feature = \u0417\u043D\u0430\u0447\u0435\u043D\u0438\u0435 (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_If_conditionExpression_feature = \u0423\u0441\u043B\u043E\u0432\u0438\u0435 (\u0432\u044B\u0440\u0430\u0436\u0435\u043D\u0438\u0435) +_UI_Conditional_condition_feature = \u0423\u0441\u043B\u043E\u0432\u0438\u0435 +_UI_Unknown_feature = \u041D\u0435 \u043E\u043F\u0440\u0435\u0434\u0435\u043B\u0435\u043D\u043E + diff --git a/packages/view/backend/sirius-components-view-emf/pom.xml b/packages/view/backend/sirius-components-view-emf/pom.xml index 6fd896a22d..1dbcc54130 100644 --- a/packages/view/backend/sirius-components-view-emf/pom.xml +++ b/packages/view/backend/sirius-components-view-emf/pom.xml @@ -1,6 +1,6 @@