Skip to content

Commit b991db4

Browse files
fix: refactored changelist
1 parent 72670a6 commit b991db4

File tree

7 files changed

+83
-61
lines changed

7 files changed

+83
-61
lines changed

src/commands/omnistudio/migration/migrate.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import { CardMigrationTool } from '../../../migration/flexcard';
2020
import { OmniScriptExportType, OmniScriptMigrationTool } from '../../../migration/omniscript';
2121
import { Logger } from '../../../utils/logger';
2222
import OmnistudioRelatedObjectMigrationFacade from '../../../migration/related/OmnistudioRelatedObjectMigrationFacade';
23+
import { generatePackageXml } from '../../../utils/generatePackageXml';
2324

2425
// Initialize Messages with the current plugin directory
2526
Messages.importMessagesDirectory(__dirname);
@@ -175,7 +176,11 @@ export default class Migrate extends OmniStudioBaseCommand {
175176
allVersions,
176177
this.org
177178
);
178-
omnistudioRelatedObjectsMigration.migrateAll(objectMigrationResults, []);
179+
const relatedObjectMigrationResult = omnistudioRelatedObjectsMigration.migrateAll(objectMigrationResults, []);
180+
generatePackageXml.createChangeList(
181+
relatedObjectMigrationResult.apexClasses,
182+
relatedObjectMigrationResult.lwcComponents
183+
);
179184
await ResultsBuilder.generate(objectMigrationResults, conn.instanceUrl);
180185

181186
// save timer to debug logger

src/migration/interfaces.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,9 +100,16 @@ export interface RelatedObjectsMigrate {
100100
* @param namespace The namespace used to perform the migration.
101101
* @param migrationCandidates List of candidates to migrate.
102102
*/
103-
migrateRelatedObjects(migrationResults: MigrationResult[], migrationCandidates: JSON[]): void;
103+
migrateRelatedObjects(migrationResults: MigrationResult[], migrationCandidates: JSON[]): string[];
104+
105+
processObjectType(): string;
104106
}
105107

106108
export type LWCComponentMigrationTool = MigrationTool;
107109

108110
export type CustomLabelMigrationTool = MigrationTool;
111+
112+
export interface RelatedObjectMigrationResult {
113+
apexClasses: string[];
114+
lwcComponents: string[];
115+
}

src/migration/related/ApexMigration.ts

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,20 +37,24 @@ export class ApexMigration extends BaseRelatedObjectMigration implements Related
3737
this.vlocityOpenInterface2 = new InterfaceImplements(VLOCITY_OPEN_INTERFACE2, this.namespace);
3838
this.vlocityOpenInterface = new InterfaceImplements(VLOCITY_OPEN_INTERFACE, this.namespace);
3939
}
40+
public processObjectType(): string {
41+
return 'apex';
42+
}
4043
public identifyObjects(migrationResults: MigrationResult[]): Promise<JSON[]> {
4144
throw new Error('Method not implemented.');
4245
}
43-
public migrateRelatedObjects(migrationResults: MigrationResult[], migrationCandidates: JSON[]): void {
44-
this.migrate();
46+
public migrateRelatedObjects(migrationResults: MigrationResult[], migrationCandidates: JSON[]): string[] {
47+
return this.migrate();
4548
}
46-
public migrate(): void {
49+
public migrate(): string[] {
4750
const pwd = shell.pwd();
4851
shell.cd(this.projectPath);
4952
const targetOrg: Org = this.org;
5053
sfProject.retrieve(APEXCLASS, targetOrg.getUsername());
51-
this.processApexFiles(this.projectPath);
54+
const apexAssessmentInfos = this.processApexFiles(this.projectPath);
5255
sfProject.deploy(APEXCLASS, targetOrg.getUsername());
5356
shell.cd(pwd);
57+
return this.mapTOName(apexAssessmentInfos);
5458
}
5559

5660
public assess(): ApexAssessmentInfo[] {
@@ -180,4 +184,10 @@ export class ApexMigration extends BaseRelatedObjectMigration implements Related
180184
}
181185
`;
182186
}
187+
188+
private mapTOName(apexAssessmentInfos: ApexAssessmentInfo[]): string[] {
189+
return apexAssessmentInfos.map((apexAssessmentInfo) => {
190+
return apexAssessmentInfo.name;
191+
});
192+
}
183193
}

src/migration/related/BaseRealtedObjectMigration.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,5 @@ export abstract class BaseRelatedObjectMigration {
1010
this.namespace = namespace;
1111
this.org = org;
1212
}
13+
public abstract processObjectType(): string;
1314
}

src/migration/related/LwcMigration.ts

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
import * as shell from 'shelljs';
33
import { Org } from '@salesforce/core';
44
import { fileutil, File } from '../../utils/file/fileutil';
5-
import { MigrationResult } from '../interfaces';
5+
import { MigrationResult, RelatedObjectsMigrate } from '../interfaces';
66
import { sfProject } from '../../utils/sfcli/project/sfProject';
77
import { Logger } from '../../utils/logger';
88
import { FileProcessorFactory } from '../../utils/lwcparser/fileutils/FileProcessorFactory';
@@ -12,14 +12,16 @@ import { BaseRelatedObjectMigration } from './BaseRealtedObjectMigration';
1212
const LWC_DIR_PATH = '/force-app/main/default/lwc';
1313
const LWCTYPE = 'LightningComponentBundle';
1414

15-
export class LwcMigration extends BaseRelatedObjectMigration {
15+
export class LwcMigration extends BaseRelatedObjectMigration implements RelatedObjectsMigrate {
16+
public processObjectType(): string {
17+
return 'lwc';
18+
}
1619
public identifyObjects(migrationResults: MigrationResult[]): Promise<JSON[]> {
1720
this.assessment();
1821
throw new Error('Method not implemented.');
1922
}
20-
public migrateRelatedObjects(migrationResults: MigrationResult[], migrationCandidates: JSON[]): void {
21-
this.migrate();
22-
this.processLwcFiles(this.projectPath);
23+
public migrateRelatedObjects(migrationResults: MigrationResult[], migrationCandidates: JSON[]): string[] {
24+
return this.mapToName(this.migrate());
2325
}
2426
public assessment(): LWCAssessmentInfo[] {
2527
const type = 'assessment';
@@ -31,14 +33,16 @@ export class LwcMigration extends BaseRelatedObjectMigration {
3133
return this.processFiles(filesMap, type);
3234
}
3335

34-
public migrate(): void {
36+
public migrate(): LWCAssessmentInfo[] {
3537
const pwd = shell.pwd();
3638
shell.cd(this.projectPath);
3739
const targetOrg: Org = this.org;
3840
sfProject.retrieve(LWCTYPE, targetOrg.getUsername());
39-
this.processLwcFiles(this.projectPath);
40-
// sfProject.deploy(LWCTYPE, targetOrg.getUsername());
41+
const filesMap = this.processLwcFiles(this.projectPath);
42+
const LWCAssessmentInfos = this.processFiles(filesMap, 'migration');
43+
sfProject.deploy(LWCTYPE, targetOrg.getUsername());
4144
shell.cd(pwd);
45+
return LWCAssessmentInfos;
4246
}
4347

4448
// This method is returning a Map of directory and list of file in directory
@@ -97,4 +101,10 @@ export class LwcMigration extends BaseRelatedObjectMigration {
97101
private isValideFile(filename: string): boolean {
98102
return !filename.includes('_def') && !filename.includes('styleDefinition') && !filename.includes('definition');
99103
}
104+
105+
private mapToName(lwcAssessmentInfos: LWCAssessmentInfo[]): string[] {
106+
return lwcAssessmentInfos.map((lwcAssessmentInfo) => {
107+
return lwcAssessmentInfo.name;
108+
});
109+
}
100110
}

src/migration/related/OmnistudioRelatedObjectMigrationFacade.ts

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
import { Org } from '@salesforce/core';
66
import '../../utils/prototypes';
77
import { DebugTimer, MigratedObject } from '../../utils';
8-
import { RelatedObjectsMigrate } from '../interfaces';
8+
import { RelatedObjectMigrationResult, RelatedObjectsMigrate } from '../interfaces';
99
import { sfProject } from '../../utils/sfcli/project/sfProject';
1010
import { Logger } from '../../utils/logger';
1111
import { ApexMigration } from './ApexMigration';
@@ -44,7 +44,7 @@ export default class OmnistudioRelatedObjectMigrationFacade {
4444
return process.cwd() + '/' + defaultProjectName;
4545
}
4646
}
47-
public migrateAll(migrationResult: MigratedObject[], relatedObjects: string[]): any {
47+
public migrateAll(migrationResult: MigratedObject[], relatedObjects: string[]): RelatedObjectMigrationResult {
4848
// Start the debug timer
4949
DebugTimer.getInstance().start();
5050

@@ -63,15 +63,14 @@ export default class OmnistudioRelatedObjectMigrationFacade {
6363
if (relatedObjects.includes('apex')) {
6464
migrationTools.push(this.createApexClassMigrationTool(projectDirectory));
6565
}
66-
66+
const results = new Map<string, string[]>();
6767
// Proceed with migration logic
68-
for (const migrationTool of migrationTools.reverse()) {
68+
for (const migrationTool of migrationTools) {
6969
try {
70-
migrationTool.migrateRelatedObjects(null, null);
70+
results.set(migrationTool.processObjectType(), migrationTool.migrateRelatedObjects(null, null));
7171
} catch (Error) {
7272
// Log the error
7373
Logger.logger.error(Error.message);
74-
return { migrationResult };
7574
}
7675
}
7776
// Truncate existing objects if necessary
@@ -82,7 +81,7 @@ export default class OmnistudioRelatedObjectMigrationFacade {
8281
Logger.logger.debug(timer);
8382

8483
// Return results needed for --json flag
85-
return { migrationResult };
84+
return { apexClasses: results.get('apex'), lwcComponents: results.get('lwc') };
8685
}
8786

8887
// Factory methods to create instances of specific tools

src/utils/generatePackageXml.ts

Lines changed: 30 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
import * as fs from 'fs';
22
import * as path from 'path';
33

4-
// Method to generate package.xml with additional types
5-
function createChangeList(apexClasses: string[], lwcComponents: string[]): void {
6-
const apexXml = apexClasses.map((name) => `<members>${name}</members>`).join('\n ');
7-
const lwcXml = lwcComponents.map((name) => `<members>${name}</members>`).join('\n ');
4+
export class generatePackageXml {
5+
// Method to generate package.xml with additional types
6+
public static createChangeList(apexClasses: string[], lwcComponents: string[]): void {
7+
const apexXml = generatePackageXml.getXmlElementforMembers(apexClasses, 'ApexClass');
8+
const lwcXml = generatePackageXml.getXmlElementforMembers(lwcComponents, 'LightningComponentBundle');
89

9-
const additionalTypes = `
10+
const additionalTypes = `
1011
<types>
1112
<members>*</members>
1213
<name>OmniDataTransform</name>
@@ -25,56 +26,45 @@ function createChangeList(apexClasses: string[], lwcComponents: string[]): void
2526
</types>
2627
`;
2728

28-
const packageXmlContent = `
29+
const packageXmlContent = `
2930
<?xml version="1.0" encoding="UTF-8"?>
3031
<Package xmlns="http://soap.sforce.com/2006/04/metadata">
31-
<types>
32-
${apexXml}
33-
<name>ApexClass</name>
34-
</types>
35-
<types>
36-
${lwcXml}
37-
<name>LightningComponentBundle</name>
38-
</types>
32+
${apexXml}
33+
${lwcXml}
3934
${additionalTypes}
4035
<version>57.0</version>
4136
</Package>
4237
`;
4338

44-
const filePath = path.join(__dirname, 'package.xml');
45-
fs.writeFileSync(filePath, packageXmlContent.trim());
46-
}
39+
const filePath = path.join(__dirname, 'package.xml');
40+
fs.writeFileSync(filePath, packageXmlContent.trim());
41+
}
4742

48-
// Backup method without additional types
49-
function backupChangeList(apexClasses: string[], lwcComponents: string[]): void {
50-
const apexXml = apexClasses.map((name) => `<members>${name}</members>`).join('\n ');
51-
const lwcXml = lwcComponents.map((name) => `<members>${name}</members>`).join('\n ');
43+
// Backup method without additional types
44+
public static backupChangeList(apexClasses: string[], lwcComponents: string[]): void {
45+
const apexXml = generatePackageXml.getXmlElementforMembers(apexClasses, 'ApexClass');
46+
const lwcXml = generatePackageXml.getXmlElementforMembers(lwcComponents, 'LightningComponentBundle');
5247

53-
const packageXmlContent = `
48+
const packageXmlContent = `
5449
<?xml version="1.0" encoding="UTF-8"?>
5550
<Package xmlns="http://soap.sforce.com/2006/04/metadata">
56-
<types>
5751
${apexXml}
58-
<name>ApexClass</name>
59-
</types>
60-
<types>
6152
${lwcXml}
62-
<name>LightningComponentBundle</name>
63-
</types>
6453
<version>57.0</version>
6554
</Package>
6655
`;
6756

68-
const filePath = path.join(__dirname, 'backup-package.xml');
69-
fs.writeFileSync(filePath, packageXmlContent.trim());
70-
}
71-
72-
// remove all this code later --- only for testing
73-
const apexClasses = ['MyApexClass1', 'MyApexClass2'];
74-
const lwcComponents = ['MyLwcComponent1', 'MyLwcComponent2'];
75-
76-
// creating normal package.xml with additional types
77-
createChangeList(apexClasses, lwcComponents);
57+
const filePath = path.join(__dirname, 'backup-package.xml');
58+
fs.writeFileSync(filePath, packageXmlContent.trim());
59+
}
7860

79-
// creating backup-package.xml without additional types
80-
backupChangeList(apexClasses, lwcComponents);
61+
private static getXmlElementforMembers(members: string[], type: string): string {
62+
if (!members || members.length === 0) return '';
63+
const membersTag = members.map((member) => `<members>${member}</members>`).join('\n ');
64+
return `
65+
<types>
66+
${membersTag}
67+
<name>${type}</name>
68+
</types> `;
69+
}
70+
}

0 commit comments

Comments
 (0)