From 1cc8f3b38fb8de8734d853b8de61417c4915b179 Mon Sep 17 00:00:00 2001 From: leon2Meudon92 Date: Wed, 15 Jan 2025 15:33:56 +0100 Subject: [PATCH 1/5] WEBITOOLS-258: snapshot data management --- .../tools/commands/SnapshotCommand.java | 7 ++-- .../console/tools/SnapshotCommandTest.java | 18 ++++++++++ .../core/dto/jobs/JobRequestBuilder.java | 9 ++++- .../core/services/ApplicationService.java | 2 ++ .../core/services/ApplicationServiceImpl.java | 12 +++++++ .../console/tools/core/utils/DateUtils.java | 35 +++++++++++++++++++ 6 files changed, 80 insertions(+), 3 deletions(-) create mode 100644 aip-console-tools-core/src/main/java/com/castsoftware/aip/console/tools/core/utils/DateUtils.java diff --git a/aip-console-tools-cli/src/main/java/com/castsoftware/aip/console/tools/commands/SnapshotCommand.java b/aip-console-tools-cli/src/main/java/com/castsoftware/aip/console/tools/commands/SnapshotCommand.java index fca5ba36..25d0fdc2 100644 --- a/aip-console-tools-cli/src/main/java/com/castsoftware/aip/console/tools/commands/SnapshotCommand.java +++ b/aip-console-tools-cli/src/main/java/com/castsoftware/aip/console/tools/commands/SnapshotCommand.java @@ -16,6 +16,7 @@ import com.castsoftware.aip.console.tools.core.services.RestApiService; import com.castsoftware.aip.console.tools.core.services.UploadService; import com.castsoftware.aip.console.tools.core.utils.Constants; +import com.castsoftware.aip.console.tools.core.utils.DateUtils; import com.castsoftware.aip.console.tools.core.utils.SemVerUtils; import com.castsoftware.aip.console.tools.core.utils.VersionInformation; import com.castsoftware.aip.console.tools.providers.CliLogPollingProviderImpl; @@ -28,6 +29,7 @@ import java.text.DateFormat; import java.text.SimpleDateFormat; +import java.time.LocalDateTime; import java.util.Comparator; import java.util.Date; import java.util.Optional; @@ -134,8 +136,9 @@ protected Integer processCallCommand() throws Exception { foundVersion = optionalVersionDto.get(); } + LocalDateTime snapshoteDate = applicationService.getVersionLocalDateTime(snapshotDateString); if (StringUtils.isBlank(snapshotName)) { - snapshotName = String.format("Snapshot-%s", new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS").format(new Date())); + snapshotName = String.format("Snapshot-%s", new SimpleDateFormat("yyyy-MM-dd'T'HH-mm-ss").format(applicationService.getVersionDate(snapshotDateString))); } boolean forcedConsolidation = processImaging || consolidation; @@ -178,7 +181,7 @@ protected Integer processCallCommand() throws Exception { .versionName(foundVersion.getName()) .snapshotName(snapshotName) .uploadApplication(true) - .snapshotDate(applicationService.getVersionDate(snapshotDateString)) + .releaseAndSnapshotDateStr(DateUtils.toJsonString(snapshoteDate)) .processImaging(processImaging) .uploadApplication(true) .endStep(SemVerUtils.isNewerThan115(apiInfoDto.getApiVersionSemVer()) ? diff --git a/aip-console-tools-cli/src/test/java/com/castsoftware/aip/console/tools/SnapshotCommandTest.java b/aip-console-tools-cli/src/test/java/com/castsoftware/aip/console/tools/SnapshotCommandTest.java index 0f8c751f..8260ed91 100644 --- a/aip-console-tools-cli/src/test/java/com/castsoftware/aip/console/tools/SnapshotCommandTest.java +++ b/aip-console-tools-cli/src/test/java/com/castsoftware/aip/console/tools/SnapshotCommandTest.java @@ -1,9 +1,27 @@ package com.castsoftware.aip.console.tools; import com.castsoftware.aip.console.tools.commands.SnapshotCommand; +import com.castsoftware.aip.console.tools.core.dto.jobs.CreateJobsRequest; +import com.castsoftware.aip.console.tools.core.dto.jobs.JobRequestBuilder; +import com.castsoftware.aip.console.tools.core.dto.jobs.JobType; +import com.castsoftware.aip.console.tools.core.exceptions.ApplicationServiceException; +import com.castsoftware.aip.console.tools.core.utils.Constants; +import com.castsoftware.aip.console.tools.core.utils.DateUtils; +import org.apache.commons.lang3.StringUtils; import org.junit.Test; import picocli.CommandLine; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.time.Instant; +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.time.ZonedDateTime; +import java.time.format.DateTimeFormatter; +import java.util.Date; +import java.util.Map; +import java.util.TimeZone; + import static org.junit.Assert.assertEquals; public class SnapshotCommandTest extends AipCommandTest { diff --git a/aip-console-tools-core/src/main/java/com/castsoftware/aip/console/tools/core/dto/jobs/JobRequestBuilder.java b/aip-console-tools-core/src/main/java/com/castsoftware/aip/console/tools/core/dto/jobs/JobRequestBuilder.java index afaaf495..a2648f58 100644 --- a/aip-console-tools-core/src/main/java/com/castsoftware/aip/console/tools/core/dto/jobs/JobRequestBuilder.java +++ b/aip-console-tools-core/src/main/java/com/castsoftware/aip/console/tools/core/dto/jobs/JobRequestBuilder.java @@ -17,7 +17,7 @@ public class JobRequestBuilder { public static final DateTimeFormatter DELIVERY_DATETIME_FORMAT = DateTimeFormatter.ofPattern("yyyyMMddHHmm"); public static final DateTimeFormatter DELIVERY_DATETIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"); - public static final String RELEASE_DATE_FORMAT = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"; + public static final String RELEASE_DATE_FORMAT = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"; public static final DateFormat RELEASE_DATE_FORMATTER = new SimpleDateFormat(RELEASE_DATE_FORMAT); private static final DateFormat VERSION_NAME_FORMATTER = new SimpleDateFormat("yyMMdd.HHmmss"); private static final String GLOBAL_RISK_OBJECTIVE = "GLOBAL_RISK"; @@ -163,6 +163,13 @@ public JobRequestBuilder releaseAndSnapshotDate(Date date) { .snapshotDateStr(dateStr); } + public JobRequestBuilder releaseAndSnapshotDateStr(String dateString) { + if (dateString == null) { + return this; + } + return releaseDateStr(dateString) + .snapshotDateStr(dateString); + } public JobRequestBuilder snapshotDate(Date date) { if (date == null) { return this; diff --git a/aip-console-tools-core/src/main/java/com/castsoftware/aip/console/tools/core/services/ApplicationService.java b/aip-console-tools-core/src/main/java/com/castsoftware/aip/console/tools/core/services/ApplicationService.java index d966195e..a1a94abe 100644 --- a/aip-console-tools-core/src/main/java/com/castsoftware/aip/console/tools/core/services/ApplicationService.java +++ b/aip-console-tools-core/src/main/java/com/castsoftware/aip/console/tools/core/services/ApplicationService.java @@ -21,6 +21,7 @@ import com.castsoftware.aip.console.tools.core.exceptions.PackagePathInvalidException; import com.castsoftware.aip.console.tools.core.exceptions.UploadException; +import java.time.LocalDateTime; import java.util.Date; import java.util.Set; import java.util.function.Consumer; @@ -50,6 +51,7 @@ public interface ApplicationService { DomainDto getDomainFromName(String domainName) throws ApplicationServiceException; + LocalDateTime getVersionLocalDateTime(String versionDateString) throws ApplicationServiceException ; Date getVersionDate(String versionDateString) throws ApplicationServiceException; /** diff --git a/aip-console-tools-core/src/main/java/com/castsoftware/aip/console/tools/core/services/ApplicationServiceImpl.java b/aip-console-tools-core/src/main/java/com/castsoftware/aip/console/tools/core/services/ApplicationServiceImpl.java index 4c92cc29..63733ab0 100644 --- a/aip-console-tools-core/src/main/java/com/castsoftware/aip/console/tools/core/services/ApplicationServiceImpl.java +++ b/aip-console-tools-core/src/main/java/com/castsoftware/aip/console/tools/core/services/ApplicationServiceImpl.java @@ -32,6 +32,7 @@ import com.castsoftware.aip.console.tools.core.exceptions.UploadException; import com.castsoftware.aip.console.tools.core.utils.ApiEndpointHelper; import com.castsoftware.aip.console.tools.core.utils.Constants; +import com.castsoftware.aip.console.tools.core.utils.DateUtils; import com.fasterxml.jackson.core.type.TypeReference; import lombok.extern.slf4j.Slf4j; import okhttp3.Response; @@ -39,6 +40,7 @@ import java.nio.file.Paths; import java.text.ParseException; +import java.time.LocalDateTime; import java.util.Arrays; import java.util.Collections; import java.util.Comparator; @@ -354,6 +356,16 @@ public boolean applicationHasVersion(String applicationGuid) throws ApplicationS !appVersions.isEmpty(); } + @Override + public LocalDateTime getVersionLocalDateTime(String versionDateString) throws ApplicationServiceException { + if (!StringUtils.isEmpty(versionDateString)) { + // Ensure format is supported if not exception will be thrown + getVersionDate(versionDateString); + } + return (StringUtils.isEmpty(versionDateString)) ? + LocalDateTime.now(): DateUtils.parseJsonLocalDateTime(versionDateString + ".000Z"); + } + @Override public Date getVersionDate(String versionDateString) throws ApplicationServiceException { if (StringUtils.isEmpty(versionDateString)) { diff --git a/aip-console-tools-core/src/main/java/com/castsoftware/aip/console/tools/core/utils/DateUtils.java b/aip-console-tools-core/src/main/java/com/castsoftware/aip/console/tools/core/utils/DateUtils.java new file mode 100644 index 00000000..8449dca2 --- /dev/null +++ b/aip-console-tools-core/src/main/java/com/castsoftware/aip/console/tools/core/utils/DateUtils.java @@ -0,0 +1,35 @@ +package com.castsoftware.aip.console.tools.core.utils; + +import java.time.*; +import java.time.format.DateTimeFormatter; + +public final class DateUtils { + public static final String JSON_DATE_FORMAT_PATTERN = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"; + public static final DateTimeFormatter JSON_DATE_FORMAT = DateTimeFormatter.ofPattern(JSON_DATE_FORMAT_PATTERN) + .withZone(ZoneOffset.UTC); + + private DateUtils() { + } + + public static LocalDateTime parseJsonLocalDateTime(String string) { + return ZonedDateTime.parse(string, JSON_DATE_FORMAT) + .withZoneSameInstant(ZoneId.systemDefault()) + .toLocalDateTime(); + } + + public static String toJsonString(LocalDateTime date) { + return toZonedDateTime(date).format(JSON_DATE_FORMAT); + } + + public static ZonedDateTime toZonedDateTime(LocalDateTime date) { + return ZonedDateTime.of(date, ZoneId.systemDefault()); + } + + public static LocalDateTime toLocalDateTime(Instant instant) { + return LocalDateTime.ofInstant(instant, ZoneId.systemDefault()); + } + + public static LocalDateTime toLocalDateTime(long epochMilli) { + return toLocalDateTime(Instant.ofEpochMilli(epochMilli)); + } +} From d8148c02b3a2a6842d4e342036fef7a07956a395 Mon Sep 17 00:00:00 2001 From: leon2Meudon92 Date: Wed, 15 Jan 2025 16:43:08 +0100 Subject: [PATCH 2/5] WEBITOOLS-258: added tests --- .../tools/SnapshotCommandIntegrationTest.java | 45 +++++++++++++++++++ .../console/tools/SnapshotCommandTest.java | 18 ++++++++ 2 files changed, 63 insertions(+) diff --git a/aip-console-tools-cli/src/test/java/com/castsoftware/aip/console/tools/SnapshotCommandIntegrationTest.java b/aip-console-tools-cli/src/test/java/com/castsoftware/aip/console/tools/SnapshotCommandIntegrationTest.java index 61874937..8b4ed53d 100644 --- a/aip-console-tools-cli/src/test/java/com/castsoftware/aip/console/tools/SnapshotCommandIntegrationTest.java +++ b/aip-console-tools-cli/src/test/java/com/castsoftware/aip/console/tools/SnapshotCommandIntegrationTest.java @@ -11,6 +11,7 @@ import com.castsoftware.aip.console.tools.core.exceptions.ApplicationServiceException; import com.castsoftware.aip.console.tools.core.exceptions.JobServiceException; import com.castsoftware.aip.console.tools.core.utils.Constants; +import com.castsoftware.aip.console.tools.core.utils.DateUtils; import com.castsoftware.aip.console.tools.providers.CliLogPollingProviderImpl; import org.apache.commons.lang3.StringUtils; import org.junit.Test; @@ -22,6 +23,8 @@ import org.springframework.test.context.junit4.SpringRunner; import picocli.CommandLine; +import java.text.ParseException; +import java.time.LocalDateTime; import java.util.Date; import java.util.List; import java.util.Map; @@ -78,6 +81,48 @@ public void testSnapshotCommand_WhenAnalysisNotDone() throws ApplicationServiceE assertThat(spec, is(notNullValue())); assertThat(exitCode, is(Constants.RETURN_VERSION_WITH_ANALYSIS_DONE_NOT_FOUND)); } + @Test + public void testSnapshotCommand_LegacyWorkFlow() throws ApplicationServiceException, ParseException, JobServiceException { + boolean verbose = true; + String SNAPSHOT_DATE="2025-01-15T15:14:00"; + String[] args = new String[]{"--apikey", TestConstants.TEST_API_KEY, + "--app-name=" + TestConstants.TEST_CREATRE_APP, + "--version-name", TestConstants.TEST_VERSION_NAME, + "--snapshot-date",SNAPSHOT_DATE, + "--process-imaging"}; + + ApplicationDto applicationDto = ApplicationDto.builder() + .guid(TestConstants.TEST_APP_GUID) + .name(TestConstants.TEST_CREATRE_APP) + .onboarded(false) + .schemaPrefix("ShouldHave_One").build(); + + when(applicationService.getApplicationFromName(TestConstants.TEST_CREATRE_APP)).thenReturn(applicationDto); + VersionDto versionDto = new VersionDto(); + versionDto.setName(TestConstants.TEST_VERSION_NAME); + versionDto.setStatus(VersionStatus.ANALYSIS_DONE); + when(applicationService.getApplicationVersion(TestConstants.TEST_APP_GUID)).thenReturn(Sets.newSet(versionDto)); + + String snapshotDateString = SNAPSHOT_DATE + ".000Z"; + Date suffixDate = JobRequestBuilder.RELEASE_DATE_FORMATTER.parse(snapshotDateString);; + when(applicationService.getVersionDate(anyString())).thenReturn(suffixDate); + when(applicationService.getVersionLocalDateTime(anyString())).thenReturn(DateUtils.parseJsonLocalDateTime(snapshotDateString)); + + when(jobsService.startJob(any(JobRequestBuilder.class))).thenReturn(TestConstants.TEST_JOB_GUID); + JobExecutionDto jobStatus = new JobExecutionDto(); + jobStatus.setAppGuid(TestConstants.TEST_APP_GUID); + jobStatus.setState(JobState.COMPLETED); + jobStatus.setCreatedDate(new Date()); + jobStatus.setAppName(TestConstants.TEST_CREATRE_APP); + when(jobsService.pollAndWaitForJobFinished(anyString(), any(Function.class), anyBoolean())).thenReturn(jobStatus); + + runStringArgs(snapshotCommand, args); + + CommandLine.Model.CommandSpec spec = cliToTest.getCommandSpec(); + assertThat(spec, is(notNullValue())); + assertThat(snapshotCommand.getSnapshotName(), is("Snapshot-2025-01-15T15-14-00")); + assertThat(exitCode, is(Constants.RETURN_OK)); + } @Test public void testSnapshotCommand_WhenFastScanWorkFlow_JobFailed() throws ApplicationServiceException { diff --git a/aip-console-tools-cli/src/test/java/com/castsoftware/aip/console/tools/SnapshotCommandTest.java b/aip-console-tools-cli/src/test/java/com/castsoftware/aip/console/tools/SnapshotCommandTest.java index 8260ed91..647cb844 100644 --- a/aip-console-tools-cli/src/test/java/com/castsoftware/aip/console/tools/SnapshotCommandTest.java +++ b/aip-console-tools-cli/src/test/java/com/castsoftware/aip/console/tools/SnapshotCommandTest.java @@ -42,6 +42,24 @@ public void testSnapshotCommand_WithDefaultParams() { assertEquals(true, aipCommand.getSharedOptions().isVerbose()); assertEquals(true, aipCommand.isProcessImaging()); } + @Test + public void testSnapshotCommand_WithSomeParameters() { + String[] sb = new String[]{"--apikey", + TestConstants.TEST_API_KEY, "--app-name=" + TestConstants.TEST_CREATRE_APP, + "--version-name", TestConstants.TEST_VERSION_NAME, + "--process-imaging","--snapshot-date","2025-01-15T15:14:00" + }; + + aipCommandLine.parseArgs(sb); + assertEquals(TestConstants.TEST_API_KEY, aipCommand.getSharedOptions().getApiKey()); + assertEquals(TestConstants.TEST_CREATRE_APP, aipCommand.getApplicationName()); + assertEquals(TestConstants.TEST_VERSION_NAME, aipCommand.getVersionName()); + assertEquals(true, aipCommand.getSharedOptions().isVerbose()); + assertEquals(true, aipCommand.isProcessImaging()); + + assertEquals("2025-01-15T15:14:00", aipCommand.getSnapshotDateString()); + + } @Test(expected = CommandLine.MissingParameterException.class) public void testSnapshotCommand_WithMissingRequiredParams() { From 83f0da31012ac47d26f7f9e9a4d7b7364f2e3e50 Mon Sep 17 00:00:00 2001 From: leon2Meudon92 Date: Thu, 16 Jan 2025 10:24:58 +0100 Subject: [PATCH 3/5] WEBITOOLS-258: Changes to bound the feature version --- .../aip/console/tools/commands/SnapshotCommand.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/aip-console-tools-cli/src/main/java/com/castsoftware/aip/console/tools/commands/SnapshotCommand.java b/aip-console-tools-cli/src/main/java/com/castsoftware/aip/console/tools/commands/SnapshotCommand.java index 25d0fdc2..01d10370 100644 --- a/aip-console-tools-cli/src/main/java/com/castsoftware/aip/console/tools/commands/SnapshotCommand.java +++ b/aip-console-tools-cli/src/main/java/com/castsoftware/aip/console/tools/commands/SnapshotCommand.java @@ -53,6 +53,7 @@ public class SnapshotCommand extends BasicCallable { private static final DateFormat RELEASE_DATE_FORMATTER = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"); @CommandLine.Mixin private SharedOptions sharedOptions; + private static final VersionInformation MAX_VERSION = VersionInformation.fromVersionString("3.0.0"); @CommandLine.Option(names = {"-n", "--app-name"}, paramLabel = "APPLICATION_NAME", @@ -136,7 +137,7 @@ protected Integer processCallCommand() throws Exception { foundVersion = optionalVersionDto.get(); } - LocalDateTime snapshoteDate = applicationService.getVersionLocalDateTime(snapshotDateString); + LocalDateTime snapshotDate = applicationService.getVersionLocalDateTime(snapshotDateString); if (StringUtils.isBlank(snapshotName)) { snapshotName = String.format("Snapshot-%s", new SimpleDateFormat("yyyy-MM-dd'T'HH-mm-ss").format(applicationService.getVersionDate(snapshotDateString))); } @@ -181,7 +182,7 @@ protected Integer processCallCommand() throws Exception { .versionName(foundVersion.getName()) .snapshotName(snapshotName) .uploadApplication(true) - .releaseAndSnapshotDateStr(DateUtils.toJsonString(snapshoteDate)) + .releaseAndSnapshotDateStr(DateUtils.toJsonString(snapshotDate)) .processImaging(processImaging) .uploadApplication(true) .endStep(SemVerUtils.isNewerThan115(apiInfoDto.getApiVersionSemVer()) ? @@ -231,6 +232,10 @@ private Thread getShutdownHookForJobGuid(String jobGuid) { protected VersionInformation getMinVersion() { return null; } + @Override + protected VersionInformation getMaxVersion() { + return MAX_VERSION; + } @Override public SharedOptions getSharedOptions() { From c1801a13f09dffcc2329d4b23ff4efb72f70f60a Mon Sep 17 00:00:00 2001 From: leon2Meudon92 Date: Fri, 24 Jan 2025 10:19:42 +0100 Subject: [PATCH 4/5] WEBITOOLS-258: update snapshot ans release date --- .../tools/commands/AddVersionCommand.java | 22 +++++++++---------- .../tools/commands/DeliverVersionCommand.java | 7 ++++-- .../tools/commands/SnapshotCommand.java | 4 +--- .../core/dto/jobs/JobRequestBuilder.java | 3 +++ .../core/services/ApplicationService.java | 1 + .../core/services/ApplicationServiceImpl.java | 6 +++++ 6 files changed, 27 insertions(+), 16 deletions(-) diff --git a/aip-console-tools-cli/src/main/java/com/castsoftware/aip/console/tools/commands/AddVersionCommand.java b/aip-console-tools-cli/src/main/java/com/castsoftware/aip/console/tools/commands/AddVersionCommand.java index 750aa132..589897f6 100644 --- a/aip-console-tools-cli/src/main/java/com/castsoftware/aip/console/tools/commands/AddVersionCommand.java +++ b/aip-console-tools-cli/src/main/java/com/castsoftware/aip/console/tools/commands/AddVersionCommand.java @@ -18,10 +18,7 @@ import com.castsoftware.aip.console.tools.core.services.JobsService; import com.castsoftware.aip.console.tools.core.services.RestApiService; import com.castsoftware.aip.console.tools.core.services.UploadService; -import com.castsoftware.aip.console.tools.core.utils.ApiEndpointHelper; -import com.castsoftware.aip.console.tools.core.utils.Constants; -import com.castsoftware.aip.console.tools.core.utils.VersionInformation; -import com.castsoftware.aip.console.tools.core.utils.VersionObjective; +import com.castsoftware.aip.console.tools.core.utils.*; import com.castsoftware.aip.console.tools.providers.CliLogPollingProviderImpl; import lombok.Getter; import lombok.Setter; @@ -31,6 +28,7 @@ import picocli.CommandLine; import java.io.File; +import java.time.LocalDateTime; import java.util.EnumSet; import java.util.List; import java.util.function.Function; @@ -46,6 +44,7 @@ @Getter @Setter public class AddVersionCommand extends BasicCallable { + private static final VersionInformation MAX_VERSION = VersionInformation.fromVersionString("3.0.0"); @CommandLine.Mixin private SharedOptions sharedOptions; @@ -222,12 +221,14 @@ protected Integer processCallCommand() throws Exception { // check that the application actually has versions, otherwise it's just an add version job boolean cloneVersion = (app.isInPlaceMode() || !disableClone) && applicationService.applicationHasVersion(applicationGuid); + snapshotName = applicationService.buildSnapshotName(snapshotName); + LocalDateTime snapshotDate = applicationService.getVersionLocalDateTime(snapshotDateString); builder = JobRequestBuilder.newInstance(applicationGuid, sourcePath, cloneVersion ? JobType.CLONE_VERSION : JobType.ADD_VERSION, app.getCaipVersion()) .nodeName(app.getTargetNode()) .versionName(versionName) - .versionReleaseDate(applicationService.getVersionDate(versionDateString)) - .snapshotDate(applicationService.getVersionDate(snapshotDateString)) + .releaseAndSnapshotDateStr(DateUtils.toJsonString(snapshotDate)) + .snapshotName(snapshotName) .objectives(VersionObjective.DATA_SAFETY, enableDataSafety) .backupApplication(backupEnabled) .backupName(backupName) @@ -242,11 +243,6 @@ protected Integer processCallCommand() throws Exception { builder.objectives(VersionObjective.SECURITY, enableSecurityDataflow); applicationService.updateModuleGenerationType(applicationGuid, builder, moduleGenerationType, !cloneVersion); - - if (StringUtils.isNotBlank(snapshotName)) { - builder.snapshotName(snapshotName); - } - //Snapshot required now see whether we upload application or not boolean forcedConsolidation = processImaging || consolidation; builder.uploadApplication(forcedConsolidation); @@ -343,6 +339,10 @@ private Thread getShutdownHookForJobGuid(String jobGuid) { protected VersionInformation getMinVersion() { return null; // for this feature to run on all server versions } + @Override + protected VersionInformation getMaxVersion() { + return MAX_VERSION; + } @Override public SharedOptions getSharedOptions() { diff --git a/aip-console-tools-cli/src/main/java/com/castsoftware/aip/console/tools/commands/DeliverVersionCommand.java b/aip-console-tools-cli/src/main/java/com/castsoftware/aip/console/tools/commands/DeliverVersionCommand.java index 41f9a5df..83bfd837 100644 --- a/aip-console-tools-cli/src/main/java/com/castsoftware/aip/console/tools/commands/DeliverVersionCommand.java +++ b/aip-console-tools-cli/src/main/java/com/castsoftware/aip/console/tools/commands/DeliverVersionCommand.java @@ -16,6 +16,7 @@ import com.castsoftware.aip.console.tools.core.services.RestApiService; import com.castsoftware.aip.console.tools.core.services.UploadService; import com.castsoftware.aip.console.tools.core.utils.Constants; +import com.castsoftware.aip.console.tools.core.utils.DateUtils; import com.castsoftware.aip.console.tools.core.utils.VersionInformation; import com.castsoftware.aip.console.tools.core.utils.VersionObjective; import com.castsoftware.aip.console.tools.providers.CliLogPollingProviderImpl; @@ -27,6 +28,7 @@ import picocli.CommandLine; import java.io.File; +import java.time.LocalDateTime; import java.util.Date; import java.util.function.Function; @@ -212,14 +214,15 @@ protected Integer processCallCommand() throws Exception { // Clone the version if we're in "in-place" mode or the user wants to clone the version and the application has versions boolean cloneVersion = (app.isInPlaceMode() || !disableClone) && applicationService.applicationHasVersion(applicationGuid); + LocalDateTime versionDate = applicationService.getVersionLocalDateTime(versionDateString); JobRequestBuilder builder = JobRequestBuilder .newInstance(applicationGuid, sourcePath, cloneVersion ? JobType.CLONE_VERSION : JobType.ADD_VERSION, app.getCaipVersion()) .endStep(autoDeploy ? Constants.SET_CURRENT_STEP_NAME : Constants.DELIVER_VERSION) .versionName(versionName) .nodeName(app.getTargetNode()) - .versionReleaseDate(applicationService.getVersionDate(versionDateString)) - .snapshotDate(new Date()) + .versionReleaseDateStr(DateUtils.toJsonString(versionDate)) + .snapshotDateStr(DateUtils.toJsonString(LocalDateTime.now())) .objectives(VersionObjective.DATA_SAFETY, enableDataSafety) .backupApplication(backupEnabled) .backupName(backupName) diff --git a/aip-console-tools-cli/src/main/java/com/castsoftware/aip/console/tools/commands/SnapshotCommand.java b/aip-console-tools-cli/src/main/java/com/castsoftware/aip/console/tools/commands/SnapshotCommand.java index 01d10370..04909d59 100644 --- a/aip-console-tools-cli/src/main/java/com/castsoftware/aip/console/tools/commands/SnapshotCommand.java +++ b/aip-console-tools-cli/src/main/java/com/castsoftware/aip/console/tools/commands/SnapshotCommand.java @@ -138,9 +138,7 @@ protected Integer processCallCommand() throws Exception { } LocalDateTime snapshotDate = applicationService.getVersionLocalDateTime(snapshotDateString); - if (StringUtils.isBlank(snapshotName)) { - snapshotName = String.format("Snapshot-%s", new SimpleDateFormat("yyyy-MM-dd'T'HH-mm-ss").format(applicationService.getVersionDate(snapshotDateString))); - } + snapshotName = applicationService.buildSnapshotName(snapshotName); boolean forcedConsolidation = processImaging || consolidation; //TODO: refactor after release to get separated workflows diff --git a/aip-console-tools-core/src/main/java/com/castsoftware/aip/console/tools/core/dto/jobs/JobRequestBuilder.java b/aip-console-tools-core/src/main/java/com/castsoftware/aip/console/tools/core/dto/jobs/JobRequestBuilder.java index a2648f58..b7753a26 100644 --- a/aip-console-tools-core/src/main/java/com/castsoftware/aip/console/tools/core/dto/jobs/JobRequestBuilder.java +++ b/aip-console-tools-core/src/main/java/com/castsoftware/aip/console/tools/core/dto/jobs/JobRequestBuilder.java @@ -185,6 +185,9 @@ public JobRequestBuilder versionReleaseDate(Date releaseDate) { String dateStr = RELEASE_DATE_FORMATTER.format(releaseDate); return releaseDateStr(dateStr); } + public JobRequestBuilder versionReleaseDateStr(String releaseDate) { + return releaseDateStr(releaseDate); + } public JobRequestBuilder snapshotDateStr(String snapshotDateStr) { this.snapshotDateStr = snapshotDateStr; diff --git a/aip-console-tools-core/src/main/java/com/castsoftware/aip/console/tools/core/services/ApplicationService.java b/aip-console-tools-core/src/main/java/com/castsoftware/aip/console/tools/core/services/ApplicationService.java index a1a94abe..12c17616 100644 --- a/aip-console-tools-core/src/main/java/com/castsoftware/aip/console/tools/core/services/ApplicationService.java +++ b/aip-console-tools-core/src/main/java/com/castsoftware/aip/console/tools/core/services/ApplicationService.java @@ -52,6 +52,7 @@ public interface ApplicationService { DomainDto getDomainFromName(String domainName) throws ApplicationServiceException; LocalDateTime getVersionLocalDateTime(String versionDateString) throws ApplicationServiceException ; + String buildSnapshotName( String actualName ) throws ApplicationServiceException; Date getVersionDate(String versionDateString) throws ApplicationServiceException; /** diff --git a/aip-console-tools-core/src/main/java/com/castsoftware/aip/console/tools/core/services/ApplicationServiceImpl.java b/aip-console-tools-core/src/main/java/com/castsoftware/aip/console/tools/core/services/ApplicationServiceImpl.java index 63733ab0..51d07967 100644 --- a/aip-console-tools-core/src/main/java/com/castsoftware/aip/console/tools/core/services/ApplicationServiceImpl.java +++ b/aip-console-tools-core/src/main/java/com/castsoftware/aip/console/tools/core/services/ApplicationServiceImpl.java @@ -40,6 +40,7 @@ import java.nio.file.Paths; import java.text.ParseException; +import java.text.SimpleDateFormat; import java.time.LocalDateTime; import java.util.Arrays; import java.util.Collections; @@ -366,6 +367,11 @@ public LocalDateTime getVersionLocalDateTime(String versionDateString) throws Ap LocalDateTime.now(): DateUtils.parseJsonLocalDateTime(versionDateString + ".000Z"); } + public String buildSnapshotName( String actualName ) throws ApplicationServiceException { + return StringUtils.isEmpty(actualName) ? + String.format("Snapshot-%s", new SimpleDateFormat("yyyy-MM-dd'T'HH-mm-ss").format(getVersionDate(actualName))) + : actualName; + } @Override public Date getVersionDate(String versionDateString) throws ApplicationServiceException { if (StringUtils.isEmpty(versionDateString)) { From 333e412987ccc616a4033e2e662d247ad6087fd7 Mon Sep 17 00:00:00 2001 From: leon2Meudon92 Date: Fri, 24 Jan 2025 10:19:42 +0100 Subject: [PATCH 5/5] WEBITOOLS-258: update snapshot ans release date --- aip-console-jenkins/pom.xml | 2 +- .../tools/commands/AddVersionCommand.java | 22 +++++++++---------- .../tools/commands/DeliverVersionCommand.java | 7 ++++-- .../tools/commands/SnapshotCommand.java | 4 +--- .../core/dto/jobs/JobRequestBuilder.java | 3 +++ .../core/services/ApplicationService.java | 1 + .../core/services/ApplicationServiceImpl.java | 6 +++++ pom.xml | 2 +- 8 files changed, 29 insertions(+), 18 deletions(-) diff --git a/aip-console-jenkins/pom.xml b/aip-console-jenkins/pom.xml index 5b533b20..1d49248b 100644 --- a/aip-console-jenkins/pom.xml +++ b/aip-console-jenkins/pom.xml @@ -14,7 +14,7 @@ hpi - 2.11.10-SNAPSHOT + 2.11.11 2.60.3 diff --git a/aip-console-tools-cli/src/main/java/com/castsoftware/aip/console/tools/commands/AddVersionCommand.java b/aip-console-tools-cli/src/main/java/com/castsoftware/aip/console/tools/commands/AddVersionCommand.java index 750aa132..589897f6 100644 --- a/aip-console-tools-cli/src/main/java/com/castsoftware/aip/console/tools/commands/AddVersionCommand.java +++ b/aip-console-tools-cli/src/main/java/com/castsoftware/aip/console/tools/commands/AddVersionCommand.java @@ -18,10 +18,7 @@ import com.castsoftware.aip.console.tools.core.services.JobsService; import com.castsoftware.aip.console.tools.core.services.RestApiService; import com.castsoftware.aip.console.tools.core.services.UploadService; -import com.castsoftware.aip.console.tools.core.utils.ApiEndpointHelper; -import com.castsoftware.aip.console.tools.core.utils.Constants; -import com.castsoftware.aip.console.tools.core.utils.VersionInformation; -import com.castsoftware.aip.console.tools.core.utils.VersionObjective; +import com.castsoftware.aip.console.tools.core.utils.*; import com.castsoftware.aip.console.tools.providers.CliLogPollingProviderImpl; import lombok.Getter; import lombok.Setter; @@ -31,6 +28,7 @@ import picocli.CommandLine; import java.io.File; +import java.time.LocalDateTime; import java.util.EnumSet; import java.util.List; import java.util.function.Function; @@ -46,6 +44,7 @@ @Getter @Setter public class AddVersionCommand extends BasicCallable { + private static final VersionInformation MAX_VERSION = VersionInformation.fromVersionString("3.0.0"); @CommandLine.Mixin private SharedOptions sharedOptions; @@ -222,12 +221,14 @@ protected Integer processCallCommand() throws Exception { // check that the application actually has versions, otherwise it's just an add version job boolean cloneVersion = (app.isInPlaceMode() || !disableClone) && applicationService.applicationHasVersion(applicationGuid); + snapshotName = applicationService.buildSnapshotName(snapshotName); + LocalDateTime snapshotDate = applicationService.getVersionLocalDateTime(snapshotDateString); builder = JobRequestBuilder.newInstance(applicationGuid, sourcePath, cloneVersion ? JobType.CLONE_VERSION : JobType.ADD_VERSION, app.getCaipVersion()) .nodeName(app.getTargetNode()) .versionName(versionName) - .versionReleaseDate(applicationService.getVersionDate(versionDateString)) - .snapshotDate(applicationService.getVersionDate(snapshotDateString)) + .releaseAndSnapshotDateStr(DateUtils.toJsonString(snapshotDate)) + .snapshotName(snapshotName) .objectives(VersionObjective.DATA_SAFETY, enableDataSafety) .backupApplication(backupEnabled) .backupName(backupName) @@ -242,11 +243,6 @@ protected Integer processCallCommand() throws Exception { builder.objectives(VersionObjective.SECURITY, enableSecurityDataflow); applicationService.updateModuleGenerationType(applicationGuid, builder, moduleGenerationType, !cloneVersion); - - if (StringUtils.isNotBlank(snapshotName)) { - builder.snapshotName(snapshotName); - } - //Snapshot required now see whether we upload application or not boolean forcedConsolidation = processImaging || consolidation; builder.uploadApplication(forcedConsolidation); @@ -343,6 +339,10 @@ private Thread getShutdownHookForJobGuid(String jobGuid) { protected VersionInformation getMinVersion() { return null; // for this feature to run on all server versions } + @Override + protected VersionInformation getMaxVersion() { + return MAX_VERSION; + } @Override public SharedOptions getSharedOptions() { diff --git a/aip-console-tools-cli/src/main/java/com/castsoftware/aip/console/tools/commands/DeliverVersionCommand.java b/aip-console-tools-cli/src/main/java/com/castsoftware/aip/console/tools/commands/DeliverVersionCommand.java index 41f9a5df..83bfd837 100644 --- a/aip-console-tools-cli/src/main/java/com/castsoftware/aip/console/tools/commands/DeliverVersionCommand.java +++ b/aip-console-tools-cli/src/main/java/com/castsoftware/aip/console/tools/commands/DeliverVersionCommand.java @@ -16,6 +16,7 @@ import com.castsoftware.aip.console.tools.core.services.RestApiService; import com.castsoftware.aip.console.tools.core.services.UploadService; import com.castsoftware.aip.console.tools.core.utils.Constants; +import com.castsoftware.aip.console.tools.core.utils.DateUtils; import com.castsoftware.aip.console.tools.core.utils.VersionInformation; import com.castsoftware.aip.console.tools.core.utils.VersionObjective; import com.castsoftware.aip.console.tools.providers.CliLogPollingProviderImpl; @@ -27,6 +28,7 @@ import picocli.CommandLine; import java.io.File; +import java.time.LocalDateTime; import java.util.Date; import java.util.function.Function; @@ -212,14 +214,15 @@ protected Integer processCallCommand() throws Exception { // Clone the version if we're in "in-place" mode or the user wants to clone the version and the application has versions boolean cloneVersion = (app.isInPlaceMode() || !disableClone) && applicationService.applicationHasVersion(applicationGuid); + LocalDateTime versionDate = applicationService.getVersionLocalDateTime(versionDateString); JobRequestBuilder builder = JobRequestBuilder .newInstance(applicationGuid, sourcePath, cloneVersion ? JobType.CLONE_VERSION : JobType.ADD_VERSION, app.getCaipVersion()) .endStep(autoDeploy ? Constants.SET_CURRENT_STEP_NAME : Constants.DELIVER_VERSION) .versionName(versionName) .nodeName(app.getTargetNode()) - .versionReleaseDate(applicationService.getVersionDate(versionDateString)) - .snapshotDate(new Date()) + .versionReleaseDateStr(DateUtils.toJsonString(versionDate)) + .snapshotDateStr(DateUtils.toJsonString(LocalDateTime.now())) .objectives(VersionObjective.DATA_SAFETY, enableDataSafety) .backupApplication(backupEnabled) .backupName(backupName) diff --git a/aip-console-tools-cli/src/main/java/com/castsoftware/aip/console/tools/commands/SnapshotCommand.java b/aip-console-tools-cli/src/main/java/com/castsoftware/aip/console/tools/commands/SnapshotCommand.java index 01d10370..04909d59 100644 --- a/aip-console-tools-cli/src/main/java/com/castsoftware/aip/console/tools/commands/SnapshotCommand.java +++ b/aip-console-tools-cli/src/main/java/com/castsoftware/aip/console/tools/commands/SnapshotCommand.java @@ -138,9 +138,7 @@ protected Integer processCallCommand() throws Exception { } LocalDateTime snapshotDate = applicationService.getVersionLocalDateTime(snapshotDateString); - if (StringUtils.isBlank(snapshotName)) { - snapshotName = String.format("Snapshot-%s", new SimpleDateFormat("yyyy-MM-dd'T'HH-mm-ss").format(applicationService.getVersionDate(snapshotDateString))); - } + snapshotName = applicationService.buildSnapshotName(snapshotName); boolean forcedConsolidation = processImaging || consolidation; //TODO: refactor after release to get separated workflows diff --git a/aip-console-tools-core/src/main/java/com/castsoftware/aip/console/tools/core/dto/jobs/JobRequestBuilder.java b/aip-console-tools-core/src/main/java/com/castsoftware/aip/console/tools/core/dto/jobs/JobRequestBuilder.java index a2648f58..b7753a26 100644 --- a/aip-console-tools-core/src/main/java/com/castsoftware/aip/console/tools/core/dto/jobs/JobRequestBuilder.java +++ b/aip-console-tools-core/src/main/java/com/castsoftware/aip/console/tools/core/dto/jobs/JobRequestBuilder.java @@ -185,6 +185,9 @@ public JobRequestBuilder versionReleaseDate(Date releaseDate) { String dateStr = RELEASE_DATE_FORMATTER.format(releaseDate); return releaseDateStr(dateStr); } + public JobRequestBuilder versionReleaseDateStr(String releaseDate) { + return releaseDateStr(releaseDate); + } public JobRequestBuilder snapshotDateStr(String snapshotDateStr) { this.snapshotDateStr = snapshotDateStr; diff --git a/aip-console-tools-core/src/main/java/com/castsoftware/aip/console/tools/core/services/ApplicationService.java b/aip-console-tools-core/src/main/java/com/castsoftware/aip/console/tools/core/services/ApplicationService.java index a1a94abe..12c17616 100644 --- a/aip-console-tools-core/src/main/java/com/castsoftware/aip/console/tools/core/services/ApplicationService.java +++ b/aip-console-tools-core/src/main/java/com/castsoftware/aip/console/tools/core/services/ApplicationService.java @@ -52,6 +52,7 @@ public interface ApplicationService { DomainDto getDomainFromName(String domainName) throws ApplicationServiceException; LocalDateTime getVersionLocalDateTime(String versionDateString) throws ApplicationServiceException ; + String buildSnapshotName( String actualName ) throws ApplicationServiceException; Date getVersionDate(String versionDateString) throws ApplicationServiceException; /** diff --git a/aip-console-tools-core/src/main/java/com/castsoftware/aip/console/tools/core/services/ApplicationServiceImpl.java b/aip-console-tools-core/src/main/java/com/castsoftware/aip/console/tools/core/services/ApplicationServiceImpl.java index 63733ab0..51d07967 100644 --- a/aip-console-tools-core/src/main/java/com/castsoftware/aip/console/tools/core/services/ApplicationServiceImpl.java +++ b/aip-console-tools-core/src/main/java/com/castsoftware/aip/console/tools/core/services/ApplicationServiceImpl.java @@ -40,6 +40,7 @@ import java.nio.file.Paths; import java.text.ParseException; +import java.text.SimpleDateFormat; import java.time.LocalDateTime; import java.util.Arrays; import java.util.Collections; @@ -366,6 +367,11 @@ public LocalDateTime getVersionLocalDateTime(String versionDateString) throws Ap LocalDateTime.now(): DateUtils.parseJsonLocalDateTime(versionDateString + ".000Z"); } + public String buildSnapshotName( String actualName ) throws ApplicationServiceException { + return StringUtils.isEmpty(actualName) ? + String.format("Snapshot-%s", new SimpleDateFormat("yyyy-MM-dd'T'HH-mm-ss").format(getVersionDate(actualName))) + : actualName; + } @Override public Date getVersionDate(String versionDateString) throws ApplicationServiceException { if (StringUtils.isEmpty(versionDateString)) { diff --git a/pom.xml b/pom.xml index 2eece9f9..4bb51d37 100644 --- a/pom.xml +++ b/pom.xml @@ -22,7 +22,7 @@ - 2.11.10-SNAPSHOT + 2.11.11 1.8 ${project.parent.version} 4.7.5