| /* |
| ****************************************************************************** |
| * Copyright © 2018 PTA GmbH. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| ****************************************************************************** |
| */ |
| import { SingleGridMeasure } from '../../model/single-grid-measure'; |
| import { GridMeasure } from '../../model/grid-measure'; |
| import { Globals } from '../../common/globals'; |
| |
| export class CloneGridMeasureHelper { |
| |
| static cloneGridMeasure(parentGridMeasure: GridMeasure): GridMeasure { |
| |
| // use as deep copy |
| const gm: GridMeasure = JSON.parse(JSON.stringify(parentGridMeasure)); |
| |
| gm.id = null; |
| gm.statusId = null; |
| gm.descriptiveId = null; |
| gm.title = 'Kopie von ' + parentGridMeasure.title; |
| |
| clearIdFromNewSingleGMsAndSteps(gm.listSingleGridmeasures); |
| |
| return gm; |
| } |
| |
| static cloneSingleGridMeasure(parentGridMeasure: GridMeasure, singleGridMeasureToCopy: SingleGridMeasure): SingleGridMeasure { |
| |
| // use as deep copy |
| const singleGM: SingleGridMeasure = JSON.parse(JSON.stringify(singleGridMeasureToCopy)); |
| |
| // alter values according to inversion |
| |
| // new inverted singleGM is ordered after the hitherto last singleGM |
| singleGM.sortorder = parentGridMeasure.listSingleGridmeasures[parentGridMeasure.listSingleGridmeasures.length - 1].sortorder + 1; |
| |
| singleGM.title = singleGridMeasureToCopy.title ? 'Rückschaltung von ' + singleGridMeasureToCopy.title : 'Rückschaltung'; |
| |
| singleGM.id = null; |
| singleGM.plannedEndtimeSinglemeasure = null; |
| singleGM.plannedStarttimeSinglemeasure = null; |
| |
| // inverted singleGM has inverted step order |
| if (singleGM.listSteps && singleGM.listSteps.length > 0) { |
| singleGM.listSteps.reverse(); |
| |
| reverseStepSortOrder(singleGM); |
| clearIdFromNewSteps(singleGM, false); |
| } |
| |
| return singleGM; |
| } |
| |
| } |
| |
| function clearIdFromNewSingleGMsAndSteps(singleGMs: SingleGridMeasure[]) { |
| singleGMs.forEach(sgm => { |
| sgm.id = null; |
| clearIdFromNewSteps(sgm, true); |
| }); |
| } |
| |
| function clearIdFromNewSteps(singleGM: SingleGridMeasure, isDuplicate: boolean) { |
| singleGM.listSteps.forEach(step => { |
| if (isDuplicate) { |
| step.id = null; |
| } else { |
| step.id = Globals.TEMP_ID_TO_SHOW_NEW_STEPS; |
| } |
| }); |
| } |
| |
| function reverseStepSortOrder(singleGM: SingleGridMeasure) { |
| for (let i = 0; i < singleGM.listSteps.length / 2; i++) { |
| const tmpSortorder: number = singleGM.listSteps[i].sortorder; |
| |
| singleGM.listSteps[i].sortorder = singleGM.listSteps[singleGM.listSteps.length - i - 1].sortorder; |
| singleGM.listSteps[singleGM.listSteps.length - i - 1].sortorder = tmpSortorder; |
| |
| singleGM.listSteps[i].id = null; |
| |
| } |
| } |