fix artifact not updating with versioning 34/84434/4 1.4.0
authorAriel Kenan <Ariel.Kenan@amdocs.com>
Sun, 7 Apr 2019 09:16:37 +0000 (12:16 +0300)
committerAvi Gaffa <avi.gaffa@amdocs.com>
Sun, 14 Apr 2019 08:38:08 +0000 (08:38 +0000)
Change-Id: Id343b73f600154eff7b52b643be3aeca3bdf23c9
Issue-ID: SDC-2223
Signed-off-by: Ariel Kenan <Ariel.Kenan@amdocs.com>
workflow-designer-ui/src/main/frontend/src/features/version/composition/CompositionUpdate.js [new file with mode: 0644]
workflow-designer-ui/src/main/frontend/src/features/version/versionConstants.js
workflow-designer-ui/src/main/frontend/src/features/version/versionController/VersionController.js
workflow-designer-ui/src/main/frontend/src/features/version/versionController/VersionControllerView.jsx
workflow-designer-ui/src/main/frontend/src/features/version/versionController/__tests__/VersionControllerView_snapshot-test.js
workflow-designer-ui/src/main/frontend/src/features/version/versionController/__tests__/__snapshots__/VersionControllerView_snapshot-test.js.snap
workflow-designer-ui/src/main/frontend/src/features/version/versionController/views/ActionButtons.js
workflow-designer-ui/src/main/frontend/src/features/version/versionReducer.js

diff --git a/workflow-designer-ui/src/main/frontend/src/features/version/composition/CompositionUpdate.js b/workflow-designer-ui/src/main/frontend/src/features/version/composition/CompositionUpdate.js
new file mode 100644 (file)
index 0000000..e5756eb
--- /dev/null
@@ -0,0 +1,131 @@
+/*
+* Copyright © 2018 European Support Limited
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*http://www.apache.org/licenses/LICENSE-2.0
+*
+ * Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+import React, { Component } from 'react';
+import PropTypes from 'prop-types';
+import { I18n } from 'react-redux-i18n';
+
+import CustomModeler from 'features/version/composition/custom-modeler';
+import camundaModuleDescriptor from 'features/version/composition/custom-properties-provider/descriptors/camunda';
+import { setElementInputsOutputs } from 'features/version/composition/bpmnUtils.js';
+
+import { connect } from 'react-redux';
+import { updateComposition } from 'features/version/composition/compositionActions';
+import { showErrorModalAction } from 'shared/modal/modalWrapperActions';
+import { getComposition } from 'features/version/composition/compositionSelectors';
+import { getWorkflowName } from 'features/workflow/workflowSelectors';
+import { activitiesSelector } from 'features/activities/activitiesSelectors';
+import { getInputOutputForComposition } from 'features/version/inputOutput/inputOutputSelectors';
+
+class CompositionUpdate extends Component {
+    static propTypes = {
+        compositionUpdate: PropTypes.func,
+        showErrorModal: PropTypes.func,
+        composition: PropTypes.oneOfType([PropTypes.string, PropTypes.bool]),
+        inputOutput: PropTypes.object,
+        activities: PropTypes.object,
+        certifyBack: PropTypes.func
+    };
+
+    constructor(props) {
+        super(props);
+        this.generatedId = 'bpmn-container' + Date.now();
+        this.fileInput = React.createRef();
+        this.bpmnContainer = React.createRef();
+    }
+
+    componentDidMount() {
+        const { composition, activities, inputOutput } = this.props;
+
+        this.modeler = new CustomModeler({
+            moddleExtensions: {
+                camunda: camundaModuleDescriptor
+            },
+            workflow: {
+                activities: activities,
+                workflowInputOutput: inputOutput
+            }
+        });
+
+        this.setDiagramToBPMN(composition);
+    }
+
+    setDiagramToBPMN = diagram => {
+        let modeler = this.modeler;
+        this.modeler.importXML(diagram, err => {
+            if (err) {
+                return this.props.showErrorModal(
+                    I18n.t('workflow.composition.importErrorMsg')
+                );
+            }
+            const canvas = modeler.get('canvas');
+            const { businessObject } = canvas._rootElement;
+
+            setElementInputsOutputs(
+                businessObject,
+                this.props.inputOutput,
+                this.modeler.get('moddle')
+            );
+
+            this.exportDiagramToStore();
+        });
+    };
+
+    exportDiagramToStore = () => {
+        this.modeler.saveXML({ format: true }, (err, xml) => {
+            if (err) {
+                return this.props.showErrorModal(
+                    I18n.t('workflow.composition.saveErrorMsg')
+                );
+            }
+            this.props.compositionUpdate(xml);
+            this.props.certifyBack();
+        });
+    };
+
+    render() {
+        return <div />;
+    }
+}
+
+function mapStateToProps(state) {
+    return {
+        composition: getComposition(state),
+        name: getWorkflowName(state),
+        activities: activitiesSelector(state),
+        inputOutput: getInputOutputForComposition(state)
+    };
+}
+
+function mapDispatchToProps(dispatch) {
+    return {
+        compositionUpdate: composition =>
+            dispatch(updateComposition(composition)),
+        showErrorModal: msg =>
+            dispatch(
+                showErrorModalAction({
+                    title: I18n.t('workflow.composition.bpmnError'),
+                    body: msg,
+                    withButtons: true,
+                    closeButtonText: I18n.t('buttons.okBtn')
+                })
+            )
+    };
+}
+
+export default connect(
+    mapStateToProps,
+    mapDispatchToProps
+)(CompositionUpdate);
index 8c2b422..5b945a0 100644 (file)
@@ -20,6 +20,8 @@ export const FETCH_REQUESTED = 'workflow/version/FETCH_REQUESTED';
 export const DETAILS_CHANGED = 'workflow/version/DETAILS_CHANGED';
 export const FETCH_REQUESTED_FAILED = 'workflow/version/FETCH_REQUESTED_FAILED';
 export const VERSION_STATE_CHANGED = 'workflow/version/VERSION_STATE_CHANGED';
+export const TOGGLE_COMPOSITION_UPDATE =
+    'workflow/version/TOGGLE_COMPOSITION_UPDATE';
 export const SET_OPERRATION_MODE = 'workflow/version/SET_OPERRATION_MODE';
 
 export const workflowVersionFetchRequestedAction = createAction(
@@ -41,8 +43,16 @@ export const versionStateChangedAction = createAction(
     payload => payload
 );
 
+export const toggleCompositionUpdate = createAction(
+    TOGGLE_COMPOSITION_UPDATE,
+    payload => ({ isCompositionUpdating: payload })
+);
+
 export const setOperationModeAction = createAction(SET_OPERRATION_MODE);
 
+export const getIsCompositionUpdating = state =>
+    state.currentVersion.general.isCompositionUpdating;
+
 export const versionState = {
     DRAFT: 'draft',
     CERTIFIED: 'certified'
index 7f8769c..8c37a0e 100644 (file)
@@ -21,8 +21,8 @@ import {
     getVersions,
     getSortedVersions
 } from 'features/workflow/overview/overviewSelectors';
-import { isWorkflowArchive } from 'features/workflow/workflowSelectors';
 import {
+    isWorkflowArchive,
     getWorkflowId,
     getWorkflowName
 } from 'features/workflow/workflowSelectors';
@@ -30,11 +30,16 @@ import {
     saveParamsAction,
     certifyVersionAction
 } from 'features/version/versionController/versionControllerConstants';
-import { workflowVersionFetchRequestedAction } from '../versionConstants';
+import {
+    workflowVersionFetchRequestedAction,
+    toggleCompositionUpdate,
+    getIsCompositionUpdating
+} from 'features/version/versionConstants';
 import { getIsCertified } from 'features/version/general/generalSelectors';
 import { getIOErrors } from 'features/version/inputOutput/inputOutputSelectors';
 import { getCompositionHasErrors } from 'features/version/composition/compositionSelectors';
 import { pluginContextSelector } from 'wfapp/pluginContext/pluginContextSelector';
+
 function mapStateToProps(state) {
     return {
         workflowName: getWorkflowName(state),
@@ -45,7 +50,8 @@ function mapStateToProps(state) {
         isCertifyDisable: getIsCertified(state),
         isArchive: isWorkflowArchive(state),
         currentWorkflowVersion: state.currentVersion.general,
-        pluginContext: pluginContextSelector(state)
+        pluginContext: pluginContextSelector(state),
+        isCompositionUpdating: getIsCompositionUpdating(state)
     };
 }
 
@@ -55,7 +61,9 @@ function mapDispatchToProps(dispatch) {
         saveParamsToServer: params => dispatch(saveParamsAction(params)),
         certifyVersion: payload => dispatch(certifyVersionAction(payload)),
         changeVersion: payload =>
-            dispatch(workflowVersionFetchRequestedAction(payload))
+            dispatch(workflowVersionFetchRequestedAction(payload)),
+        toggleCompositionUpdate: payload =>
+            dispatch(toggleCompositionUpdate(payload))
     };
 }
 
index ef5e116..730d92f 100644 (file)
@@ -45,7 +45,9 @@ export default class VersionControllerView extends Component {
         hasErrors: PropTypes.bool,
         isArchive: PropTypes.bool,
         operationMode: PropTypes.bool,
-        pluginContext: PropTypes.object
+        pluginContext: PropTypes.object,
+        isCompositionUpdating: PropTypes.bool,
+        toggleCompositionUpdate: PropTypes.func
     };
 
     constructor(props) {
@@ -118,7 +120,9 @@ export default class VersionControllerView extends Component {
             hasErrors,
             isCertifyDisable,
             isArchive,
-            operationMode
+            operationMode,
+            isCompositionUpdating,
+            toggleCompositionUpdate
         } = this.props;
         const isReadonly = isCertifyDisable || hasErrors || isArchive;
         return (
@@ -147,11 +151,13 @@ export default class VersionControllerView extends Component {
                     )}
                     {!operationMode && (
                         <ActionButtons
+                            isCompositionUpdating={isCompositionUpdating}
                             saveDisabled={isReadonly}
                             onSaveClick={this.sendSaveParamsToServer}
                             certifyDisabled={isReadonly}
                             onCertifyClick={this.certifyVersion}
                             onUndoClick={this.undoClickCallback}
+                            toggleCompositionUpdate={toggleCompositionUpdate}
                         />
                     )}
                 </div>
index 5dfb573..2bcfa30 100644 (file)
@@ -16,7 +16,7 @@
 import React from 'react';
 import renderer from 'react-test-renderer';
 
-import VersionControllerView from 'features/version/versionController/VersionControllerView';
+import VersionsContainer from 'features/version/versionController/views/VersionsContainer';
 
 describe('Version Controller View Snapshot', () => {
     it('renders correctly', () => {
@@ -27,6 +27,7 @@ describe('Version Controller View Snapshot', () => {
                 description:
                     'Initial version, bug fix for previous version that fixed an exception when the port was occupied',
                 status: 'Draft',
+                state: 'Draft',
                 creationTime: 1530687330460,
                 modificationTime: 1530687330575,
                 archivedStatus: 'ACTIVE'
@@ -37,6 +38,7 @@ describe('Version Controller View Snapshot', () => {
                 description:
                     'Test version, bug fix for previous version that fixed an exception when the port was occupied',
                 status: 'Draft',
+                state: 'Draft',
                 creationTime: 1530687330461,
                 modificationTime: 1530687330576,
                 archivedStatus: 'ACTIVE',
@@ -45,7 +47,7 @@ describe('Version Controller View Snapshot', () => {
         ];
         const tree = renderer
             .create(
-                <VersionControllerView
+                <VersionsContainer
                     viewableVersions={versionList}
                     currentWorkflowVersion={versionList[0]}
                 />
index 1c8ffba..ea135fc 100644 (file)
 
 exports[`Version Controller View Snapshot renders correctly 1`] = `
 <div
-  className="version-controller-bar"
+  className="version-section-wrapper"
 >
   <div
-    className="version-section-wrapper"
+    className="version-status-container"
   >
-    <div
-      className="group-name-wrapper"
+    version
+    <select
+      className="version-selector"
+      data-test-id="vc-versions-select-box"
+      onChange={[Function]}
+      value="7b5f6b086613470985082df2c0f6c713"
     >
-      <div
-        className="group-name"
+      <option
+        data-test-id="vc-version-option"
+        value="7b5f6b086613470985082df2c0f6c713"
       >
-        
-      </div>
-    </div>
-  </div>
-  <div
-    className="vc-container "
-  >
-    <div
-      className="version-section-wrapper"
-    >
-      <div
-        className="version-status-container"
+        1.0 DRAFT
+      </option>
+      <option
+        data-test-id="vc-version-option"
+        value="7b5f6b086613470985082df2c0f6c666"
       >
-        version
-        <select
-          className="version-selector"
-          data-test-id="vc-versions-select-box"
-          onChange={[Function]}
-          value="7b5f6b086613470985082df2c0f6c713"
-        />
-        <span
-          className="version-selector-more-versions"
-          data-test-id="vc-versions-page-link"
-          onClick={[Function]}
-        >
-          viewOverview
-        </span>
-      </div>
-    </div>
-    <div
-      className="save-submit-cancel-container"
+        2.0 Draft
+      </option>
+    </select>
+    <span
+      className="version-selector-more-versions"
+      data-test-id="vc-versions-page-link"
+      onClick={undefined}
     >
-      <div
-        className="action-buttons"
-      >
-        <div
-          className="select-action-buttons"
-        >
-          <div
-            className="separator vc-separator"
-          />
-          <div
-            className="action-button-wrapper clickable"
-            onClick={[Function]}
-          >
-            <div
-              className="action-buttons-svg"
-            >
-              <div
-                className="svg-icon-wrapper     bottom"
-                data-test-id="vc-save-btn"
-                disabled={undefined}
-                onClick={undefined}
-              >
-                <test-file-stub
-                  className="svg-icon __version-controller-save"
-                />
-                <span
-                  className="svg-icon-label action-button-label"
-                >
-                  saveBtn
-                </span>
-              </div>
-            </div>
-          </div>
-          <div
-            className="separator vc-separator"
-          />
-          <div
-            className="action-button-wrapper clickable"
-            onClick={[Function]}
-          >
-            <div
-              className="action-buttons-svg"
-            >
-              <div
-                className="svg-icon-wrapper     bottom"
-                data-test-id="vc-undo-btn"
-                disabled={undefined}
-                onClick={undefined}
-              >
-                <test-file-stub
-                  className="svg-icon __version-controller-undo"
-                />
-                <span
-                  className="svg-icon-label action-button-label"
-                >
-                  undoBtn
-                </span>
-              </div>
-            </div>
-          </div>
-          <div
-            className="separator vc-separator"
-          />
-          <button
-            className="sdc-button sdc-button__primary  certifyBtn "
-            disabled={false}
-            onClick={[Function]}
-          >
-            certifyBtn
-          </button>
-        </div>
-      </div>
-    </div>
+      viewOverview
+    </span>
   </div>
 </div>
 `;
index e2a7dc5..472b3a0 100644 (file)
@@ -19,12 +19,15 @@ import { I18n } from 'react-redux-i18n';
 import { Button } from 'sdc-ui/lib/react';
 import PropTypes from 'prop-types';
 import SvgButton from 'features/version/versionController/views/SvgButton';
+import CompositionUpdate from 'features/version/composition/CompositionUpdate';
 
 const ActionButtons = props => {
     const {
         onSaveClick,
         certifyDisabled,
         onCertifyClick,
+        isCompositionUpdating,
+        toggleCompositionUpdate,
         onUndoClick,
         saveDisabled
     } = props;
@@ -58,9 +61,18 @@ const ActionButtons = props => {
                         className="certifyBtn"
                         btnType="primary"
                         disabled={certifyDisabled}
-                        onClick={onCertifyClick}>
+                        onClick={() => toggleCompositionUpdate(true)}>
                         {I18n.t('buttons.certifyBtn')}
                     </Button>
+
+                    {isCompositionUpdating && (
+                        <CompositionUpdate
+                            certifyBack={() => {
+                                toggleCompositionUpdate(false);
+                                onCertifyClick();
+                            }}
+                        />
+                    )}
                 </div>
             </div>
         </div>
@@ -72,7 +84,9 @@ ActionButtons.propTypes = {
     certifyDisabled: PropTypes.bool,
     onCertifyClick: PropTypes.func,
     onUndoClick: PropTypes.func,
-    saveDisabled: PropTypes.bool
+    saveDisabled: PropTypes.bool,
+    isCompositionUpdating: PropTypes.bool,
+    toggleCompositionUpdate: PropTypes.func
 };
 
 export default ActionButtons;
index c7fccd2..d05af2d 100644 (file)
 import {
     SET_CURRENT_VERSION,
     DETAILS_CHANGED,
-    VERSION_STATE_CHANGED
+    VERSION_STATE_CHANGED,
+    TOGGLE_COMPOSITION_UPDATE
 } from 'features/version/versionConstants';
-const initialState = {};
+
+const initialState = {
+    isCompositionUpdating: false
+};
 
 function versionReducer(state = initialState, action) {
     switch (action.type) {
@@ -34,6 +38,11 @@ function versionReducer(state = initialState, action) {
                 ...state,
                 ...action.payload
             };
+        case TOGGLE_COMPOSITION_UPDATE:
+            return {
+                ...state,
+                isCompositionUpdating: action.payload.isCompositionUpdating
+            };
         default:
             return state;
     }