Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe Commits: f5fd9e69 by Tony Chemit at 2022-02-22T18:57:55+01:00 Correction des lastUpdateDate non mis à jour sur les formulaires de type tableau - Closes ultreiaio/ird-observe#2173 - - - - - eb34f407 by Tony Chemit at 2022-02-22T18:57:55+01:00 Revoir le démarrage du serveur web - Closes #2170 - - - - - e8e1ebaf by Tony Chemit at 2022-02-22T18:57:55+01:00 Définir comment mettre à jour une marée via l'API publique- Closes ird-observe#2171 - - - - - 20cbe332 by Tony Chemit at 2022-02-22T18:58:18+01:00 snapshot toolkit - - - - - 15 changed files: - core/persistence/java/src/main/java/fr/ird/observe/entities/data/ll/common/TripGearUseFeaturesSpi.java - core/persistence/java/src/main/java/fr/ird/observe/entities/data/ll/logbook/ActivitySampleSpi.java - core/persistence/java/src/main/java/fr/ird/observe/entities/data/ll/logbook/ActivitySpi.java - core/persistence/java/src/main/java/fr/ird/observe/entities/data/ll/logbook/SampleSpi.java - core/persistence/java/src/main/java/fr/ird/observe/entities/data/ll/observation/BranchlineSpi.java - core/persistence/java/src/main/java/fr/ird/observe/entities/data/ll/observation/SetDetailCompositionSpi.java - core/persistence/java/src/main/java/fr/ird/observe/entities/data/ps/common/TripBatchSpi.java - core/persistence/java/src/main/java/fr/ird/observe/entities/data/ps/common/TripGearUseFeaturesSpi.java - core/persistence/java/src/main/java/fr/ird/observe/entities/data/ps/observation/SampleSpi.java - core/services/local/src/test/java/fr/ird/observe/services/local/service/api/DataEntityServiceLocalWriteTest.java - core/services/test/src/main/java/fr/ird/observe/services/service/api/DataEntityServiceFixtures.java - core/services/test/src/main/resources/fixtures/fr/ird/observe/services/service/data/ps/common/TripService-routeLogbook.json - pom.xml - server/configuration/src/main/java/fr/ird/observe/server/configuration/ServerConfig.java - server/configuration/src/main/java/fr/ird/observe/server/configuration/ServerResources.java Changes: ===================================== core/persistence/java/src/main/java/fr/ird/observe/entities/data/ll/common/TripGearUseFeaturesSpi.java ===================================== @@ -22,18 +22,14 @@ package fr.ird.observe.entities.data.ll.common; * #L% */ -import java.util.Date; -import java.util.function.BiConsumer; +import fr.ird.observe.spi.result.AddEntityToUpdateStep; public class TripGearUseFeaturesSpi extends GeneratedTripGearUseFeaturesSpi { @Override - public BiConsumer<Trip, Date> saveCallback() { - return (e, lastUpdateDate) -> { - for (GearUseFeatures features : e.getGearUseFeatures()) { - features.setLastUpdateDate(lastUpdateDate); - features.getGearUseFeaturesMeasurement().forEach(measurement -> measurement.setLastUpdateDate(lastUpdateDate)); - } - }; + public void saveCallback(AddEntityToUpdateStep saveHelper, Trip entity) { + super.saveCallback(saveHelper, entity); + entity.getGearUseFeatures().forEach(c -> saveHelper.updateCollection(GearUseFeaturesMeasurement.SPI, c.getGearUseFeaturesMeasurement(), false)); + saveHelper.updateLastUpdateDateTable(GearUseFeaturesMeasurement.SPI); } } ===================================== core/persistence/java/src/main/java/fr/ird/observe/entities/data/ll/logbook/ActivitySampleSpi.java ===================================== @@ -48,8 +48,8 @@ public class ActivitySampleSpi extends GeneratedActivitySampleSpi { @Override protected SaveResultDto saveEntity(ServiceContext context, Activity parent, Sample entity) { return newSaveHelper(context) - .update(this, entity, false, true) - .updateLastUpdateDateField(Activity.SPI, parent) + .update(this, entity) +// .updateLastUpdateDateField(Activity.SPI, parent) .build(entity); } } ===================================== core/persistence/java/src/main/java/fr/ird/observe/entities/data/ll/logbook/ActivitySpi.java ===================================== @@ -143,7 +143,8 @@ public class ActivitySpi extends GeneratedActivitySpi { newActivity.setSample(sample); newSaveHelper(context) .update(this, oldActivity) - .update(this, newActivity, (activity, date) -> activity.getSample().setLastUpdateDate(date)) + .update(this, newActivity, false) + .update(Sample.ACTIVITY_SAMPLE_SPI, sample) .updateLastUpdateDateTable(Sample.ACTIVITY_SAMPLE_SPI) .build(); return Collections.singleton(sample.getTopiaId()); @@ -156,7 +157,7 @@ public class ActivitySpi extends GeneratedActivitySpi { TripSpi.copyTripLogbookMetaData(oldTrip, newTrip); newSaveHelper(context) .update(this, oldActivity) - .update(Sample.ACTIVITY_SAMPLE_SPI, sample) + .update(Sample.SPI, sample) .build(); return Collections.singleton(sample.getTopiaId()); } ===================================== core/persistence/java/src/main/java/fr/ird/observe/entities/data/ll/logbook/SampleSpi.java ===================================== @@ -85,8 +85,9 @@ public class SampleSpi extends GeneratedSampleSpi { TripSpi.copyTripLogbookMetaData(oldParent, newTrip); newSaveHelper(context) .update(Trip.SPI, oldParent) - .update(Activity.SPI, newParent, (activity, date) -> activity.getSample().setLastUpdateDate(date)) - .updateLastUpdateDateTable(Sample.SPI) + .update(Activity.SPI, newParent, false) + .update(Sample.ACTIVITY_SAMPLE_SPI, replicateData) +// .updateLastUpdateDateTable(Sample.SPI) .build(); return Collections.singleton(replicateData.getTopiaId()); } ===================================== core/persistence/java/src/main/java/fr/ird/observe/entities/data/ll/observation/BranchlineSpi.java ===================================== @@ -26,7 +26,6 @@ import fr.ird.observe.dto.ToolkitParentIdDtoBean; import fr.ird.observe.dto.data.ll.observation.BranchlineDto; import fr.ird.observe.dto.form.Form; import fr.ird.observe.dto.result.SaveResultDto; -import fr.ird.observe.entities.Entity; import fr.ird.observe.spi.service.ServiceContext; public class BranchlineSpi extends GeneratedBranchlineSpi { @@ -42,7 +41,8 @@ public class BranchlineSpi extends GeneratedBranchlineSpi { checkLastUpdateDate(context, entity, dto); Branchline.fromDto(context.getReferentialLocale(), entity, dto); return newSaveHelper(context) - .update(this, entity, Entity::setLastUpdateDate, false, true) +// .update(this, entity, Entity::setLastUpdateDate, true) + .update(this, entity) .updateLastUpdateDateField(Set.SPI, parent) .build(entity); } ===================================== core/persistence/java/src/main/java/fr/ird/observe/entities/data/ll/observation/SetDetailCompositionSpi.java ===================================== @@ -35,7 +35,8 @@ import fr.ird.observe.spi.service.ServiceContext; public class SetDetailCompositionSpi extends GeneratedSetDetailCompositionSpi { @Override - public void onLoadForm(ServiceContext context, Set entity, Form<SetDetailCompositionDto> form) { + public Form<SetDetailCompositionDto> entityToForm(ServiceContext context, Set entity) { + Form<SetDetailCompositionDto> form = super.entityToForm(context, entity); SetDetailCompositionDto dto = form.getObject(); SetTopiaDao dao = Set.getDao(context); //FIXME Use a real sql query to get this in one time @@ -57,5 +58,6 @@ public class SetDetailCompositionSpi extends GeneratedSetDetailCompositionSpi { }); }); }); + return form; } } ===================================== core/persistence/java/src/main/java/fr/ird/observe/entities/data/ps/common/TripBatchSpi.java ===================================== @@ -31,7 +31,6 @@ import fr.ird.observe.spi.service.ServiceContext; import java.util.Date; import java.util.LinkedHashSet; -import java.util.function.BiConsumer; import java.util.stream.Collectors; public class TripBatchSpi extends GeneratedTripBatchSpi { @@ -42,11 +41,6 @@ public class TripBatchSpi extends GeneratedTripBatchSpi { form.getObject().setAvailablePackagings(availablePackaging); } - @Override - public BiConsumer<Trip, Date> saveCallback() { - return (e, lastUpdateDate) -> e.getLocalmarketBatch().forEach(c -> c.setLastUpdateDate(lastUpdateDate)); - } - protected LinkedHashSet<PackagingReference> getPackaging(ServiceContext context, Trip trip) { Harbour landingHarbour = trip.getLandingHarbour(); Date date = trip.getEndDate(); ===================================== core/persistence/java/src/main/java/fr/ird/observe/entities/data/ps/common/TripGearUseFeaturesSpi.java ===================================== @@ -22,18 +22,14 @@ package fr.ird.observe.entities.data.ps.common; * #L% */ -import java.util.Date; -import java.util.function.BiConsumer; +import fr.ird.observe.spi.result.AddEntityToUpdateStep; public class TripGearUseFeaturesSpi extends GeneratedTripGearUseFeaturesSpi { @Override - public BiConsumer<Trip, Date> saveCallback() { - return (e, lastUpdateDate) -> { - for (GearUseFeatures features : e.getGearUseFeatures()) { - features.setLastUpdateDate(lastUpdateDate); - features.getGearUseFeaturesMeasurement().forEach(measurement -> measurement.setLastUpdateDate(lastUpdateDate)); - } - }; + public void saveCallback(AddEntityToUpdateStep saveHelper, Trip entity) { + super.saveCallback(saveHelper, entity); + entity.getGearUseFeatures().forEach(c -> saveHelper.updateCollection(GearUseFeaturesMeasurement.SPI, c.getGearUseFeaturesMeasurement(), false)); + saveHelper.updateLastUpdateDateTable(GearUseFeaturesMeasurement.SPI); } } ===================================== core/persistence/java/src/main/java/fr/ird/observe/entities/data/ps/observation/SampleSpi.java ===================================== @@ -27,6 +27,7 @@ import fr.ird.observe.dto.form.Form; import fr.ird.observe.dto.result.SaveResultDto; import fr.ird.observe.entities.referential.common.Species; import fr.ird.observe.entities.referential.ps.common.SpeciesFate; +import fr.ird.observe.spi.result.AddEntityToUpdateStep; import fr.ird.observe.spi.service.ServiceContext; import java.util.Objects; @@ -62,8 +63,10 @@ public class SampleSpi extends GeneratedSampleSpi { parent.addSample(entity); } context.getTopiaPersistenceContext().flush(); - return newSaveHelper(context) - .update(this, entity) + AddEntityToUpdateStep saveHelper = newSaveHelper(context) + .update(this, entity); + saveCallback(saveHelper, entity); + return saveHelper .updateLastUpdateDateField(Set.SPI, parent) .build(entity); } ===================================== core/services/local/src/test/java/fr/ird/observe/services/local/service/api/DataEntityServiceLocalWriteTest.java ===================================== @@ -24,15 +24,19 @@ package fr.ird.observe.services.local.service.api; import fr.ird.observe.dto.ToolkitId; import fr.ird.observe.dto.data.DataDto; +import fr.ird.observe.dto.data.ps.common.TripDto; import fr.ird.observe.dto.db.DataSourceValidationMode; +import fr.ird.observe.entities.data.ps.common.Trip; import fr.ird.observe.navigation.tree.io.ToolkitTreeNodeStates; import fr.ird.observe.services.service.api.InvalidDataException; +import fr.ird.observe.services.service.data.ps.common.TripService; import fr.ird.observe.test.DatabaseName; import fr.ird.observe.test.spi.CopyDatabaseConfiguration; import fr.ird.observe.test.spi.DatabaseNameConfiguration; import org.junit.Assert; import org.junit.Test; +import java.util.Collection; import java.util.List; import java.util.Map; import java.util.Objects; @@ -108,24 +112,54 @@ public class DataEntityServiceLocalWriteTest extends GeneratedDataEntityServiceL @DatabaseNameConfiguration(DatabaseName.referential) public void updatePsTrip() throws InvalidDataException { TOPIA_TEST_CLASS_RESOURCE.getServiceInitializerConfig().setValidationMode(DataSourceValidationMode.NONE); - Map<?, ?> tripMap = null; + Map<?, ?> tripMap; { tripMap = assertCreateTrip0(fr.ird.observe.services.service.data.ps.common.TripService.class, fr.ird.observe.dto.data.ps.common.TripDto.class, "gearUseFeatures"); Assert.assertNotNull(tripMap); + Assert.assertNotNull(tripMap.get(Trip.PROPERTY_GEAR_USE_FEATURES)); + Assert.assertEquals(1, ((Collection<?>) tripMap.get(Trip.PROPERTY_GEAR_USE_FEATURES)).size()); + Assert.assertNotNull(tripMap.get(Trip.PROPERTY_ROUTE_OBS)); + Assert.assertEquals(0, ((Collection<?>) tripMap.get(Trip.PROPERTY_ROUTE_OBS)).size()); + Assert.assertNotNull(tripMap.get(Trip.PROPERTY_ROUTE_LOGBOOK)); + Assert.assertEquals(0, ((Collection<?>) tripMap.get(Trip.PROPERTY_ROUTE_LOGBOOK)).size()); } Objects.requireNonNull(tripMap); String tripId = (String) tripMap.get(ToolkitId.PROPERTY_TOOLKIT_TOPIA_ID); - int exceptedRouteCount = 2; + int exceptedRouteObsCount = 2; + int exceptedRouteLogbookCount = 1; { - List<?> data = assertUpdateTrip(fr.ird.observe.services.service.data.ps.common.TripService.class, - fr.ird.observe.dto.data.ps.common.TripDto.class, Objects.requireNonNull(tripId), "routeObs", exceptedRouteCount); + Map<String, Object> data = assertUpdateTrip(TripService.class, + TripDto.class, Objects.requireNonNull(tripId), Trip.PROPERTY_ROUTE_OBS, exceptedRouteObsCount); Assert.assertNotNull(data); + Assert.assertNotNull(data.get(Trip.PROPERTY_GEAR_USE_FEATURES)); + Assert.assertEquals(0, ((Collection<?>) data.get(Trip.PROPERTY_GEAR_USE_FEATURES)).size()); + Assert.assertNotNull(data.get(Trip.PROPERTY_ROUTE_OBS)); + Assert.assertEquals(exceptedRouteObsCount, ((Collection<?>) data.get(Trip.PROPERTY_ROUTE_OBS)).size()); + Assert.assertNotNull(data.get(Trip.PROPERTY_ROUTE_LOGBOOK)); + Assert.assertEquals(0, ((Collection<?>) data.get(Trip.PROPERTY_ROUTE_LOGBOOK)).size()); } { - List<?> data = assertUpdateTrip(fr.ird.observe.services.service.data.ps.common.TripService.class, - fr.ird.observe.dto.data.ps.common.TripDto.class, Objects.requireNonNull(tripId), "routeObs", 2*exceptedRouteCount); + Map<String, Object> data = assertUpdateTrip(TripService.class, + TripDto.class, Objects.requireNonNull(tripId), Trip.PROPERTY_ROUTE_OBS, exceptedRouteObsCount); Assert.assertNotNull(data); + Assert.assertNotNull(data.get(Trip.PROPERTY_GEAR_USE_FEATURES)); + Assert.assertEquals(0, ((Collection<?>) data.get(Trip.PROPERTY_GEAR_USE_FEATURES)).size()); + Assert.assertNotNull(data.get(Trip.PROPERTY_ROUTE_OBS)); + Assert.assertEquals(exceptedRouteObsCount, ((Collection<?>) data.get(Trip.PROPERTY_ROUTE_OBS)).size()); + Assert.assertNotNull(data.get(Trip.PROPERTY_ROUTE_LOGBOOK)); + Assert.assertEquals(0, ((Collection<?>) data.get(Trip.PROPERTY_ROUTE_LOGBOOK)).size()); + } + { + Map<String, Object> data = assertUpdateTrip(TripService.class, + TripDto.class, Objects.requireNonNull(tripId), Trip.PROPERTY_ROUTE_LOGBOOK, exceptedRouteLogbookCount); + Assert.assertNotNull(data); + Assert.assertNotNull(data.get(Trip.PROPERTY_GEAR_USE_FEATURES)); + Assert.assertEquals(0, ((Collection<?>) data.get(Trip.PROPERTY_GEAR_USE_FEATURES)).size()); + Assert.assertNotNull(data.get(Trip.PROPERTY_ROUTE_OBS)); + Assert.assertEquals(0, ((Collection<?>) data.get(Trip.PROPERTY_ROUTE_OBS)).size()); + Assert.assertNotNull(data.get(Trip.PROPERTY_ROUTE_LOGBOOK)); + Assert.assertEquals(exceptedRouteLogbookCount, ((Collection<?>) data.get(Trip.PROPERTY_ROUTE_LOGBOOK)).size()); } //FIXME Add more test for update https://gitlab.com/ultreiaio/ird-observe/-/issues/2171 } @@ -196,14 +230,14 @@ public class DataEntityServiceLocalWriteTest extends GeneratedDataEntityServiceL } - protected List<?> assertUpdateTrip(Class<?> serviceType, Class<? extends DataDto> dtoType, String id, String classifier, int expectedCount) throws InvalidDataException { + protected Map<String, Object> assertUpdateTrip(Class<?> serviceType, Class<? extends DataDto> dtoType, String id, String classifier, int expectedCount) throws InvalidDataException { Map<String, Object> resultObject = assertUpdateTrip0(serviceType, dtoType, id, classifier); Assert.assertNotNull(resultObject); List<?> data = (List<?>) resultObject.get(classifier); Assert.assertNotNull(data); Assert.assertEquals(expectedCount, data.size()); - return data; + return resultObject; } protected Map<String, Object> assertUpdateTrip0(Class<?> serviceType, Class<? extends DataDto> dtoType, String id, String classifier) throws InvalidDataException { ===================================== core/services/test/src/main/java/fr/ird/observe/services/service/api/DataEntityServiceFixtures.java ===================================== @@ -376,6 +376,10 @@ public class DataEntityServiceFixtures extends GeneratedDataEntityServiceFixture if (mainDtoType != dtoType && !EditableDto.class.isAssignableFrom(dtoType)) { return; } + if (RootOpenableDto.class.isAssignableFrom(dtoType)) { + // This will regenerate some ids, can't do it here + return; + } try { String content = loadFixture(module, subModule, dtoType, "content.json"); testUpdate(service, dtoType, null, content); @@ -408,7 +412,7 @@ public class DataEntityServiceFixtures extends GeneratedDataEntityServiceFixture log.debug(String.format("for type: %s", dtoType.getName())); Pair<String, List<Object>> result = JsonHelper.removeAndCollectProperties(gson, content, ToolkitId.PROPERTY_TOOLKIT_TOPIA_ID, ToolkitId.PROPERTY_TOOLKIT_CREATE_DATE, ToolkitId.PROPERTY_TOOLKIT_LAST_UPDATE_DATE); content = result.getKey(); - if (id==null) { + if (id == null) { id = (String) result.getValue().get(0); } ===================================== core/services/test/src/main/resources/fixtures/fr/ird/observe/services/service/data/ps/common/TripService-routeLogbook.json ===================================== @@ -23,6 +23,7 @@ "latitude": 3.0, "longitude": -4.0, "number": 1.0, + "topiaId": "$$fr.ird.data.ps.logbook.Activity#1616767975989#0.4873500558653976", "vesselActivity": "fr.ird.referential.ps.common.VesselActivity#1239832675369#0.12552908048322586", "catches": [ { @@ -76,7 +77,7 @@ ], "wellPlan": [ { - "activity": "fr.ird.data.ps.logbook.Activity#1616767975989#0.4873500558653976", + "activity": "$$fr.ird.data.ps.logbook.Activity#1616767975989#0.4873500558653976", "well": "3T", "species": "fr.ird.referential.common.Species#1239832685475#0.13349466123905152", "weightCategory": "fr.ird.referential.ps.common.WeightCategory#1464000000000#00001", @@ -95,10 +96,7 @@ "totalWeight": 45.0, "sampleActivity": [ { - "topiaId": "fr.ird.data.ps.logbook.SampleActivity#1612861310013#0.9926675881926301", - "topiaCreateDate": "2021-02-09T10:01:31.980Z", - "lastUpdateDate": "2021-02-09T10:01:50.010Z", - "activity": "fr.ird.data.ps.logbook.Activity#1616767975989#0.4873500558653976", + "activity": "$$fr.ird.data.ps.logbook.Activity#1616767975989#0.4873500558653976", "weightedWeight": 1.2 } ], @@ -140,18 +138,19 @@ "species": "fr.ird.referential.common.Species#1308738639113#0.434038308601438", "packaging": "fr.ird.referential.ps.localmarket.Packaging#1464000000000#005", "count": 12.0, - "survey": "fr.ird.data.ps.localmarket.Survey#1616777784834#0.5204977416802337", + "survey": "$$fr.ird.data.ps.localmarket.Survey#1616777784834#0.5204977416802337", "origin": "zzz" }, { "species": "fr.ird.referential.common.Species#1308738639113#0.434038308601438", "packaging": "fr.ird.referential.ps.localmarket.Packaging#1464000000000#001", "weight": 4.99, - "survey": "fr.ird.data.ps.localmarket.Survey#1616777784834#0.5204977416802337" + "survey": "$$fr.ird.data.ps.localmarket.Survey#1616777784834#0.5204977416802337" } ], "localmarketSurvey": [ { + "topiaId": "$$fr.ird.data.ps.localmarket.Survey#1616777784834#0.5204977416802337", "comment": "djdjdj", "date": "2021-03-26T00:00:00.000Z", "number": 1.0, ===================================== pom.xml ===================================== @@ -155,7 +155,7 @@ <!-- build timestamp configuration --> <maven.build.timestamp.format>dd/MM/yyyy HH:mm z</maven.build.timestamp.format> <buildDate>${maven.build.timestamp}</buildDate> - <lib.version.toolkit>6.0.3</lib.version.toolkit> + <lib.version.toolkit>6.0.4-SNAPSHOT</lib.version.toolkit> <lib.version.ognl>3.1.29</lib.version.ognl> <!--can't use 1.4.197 (date has changed + blob also)--> <lib.version.h2>1.4.196</lib.version.h2> ===================================== server/configuration/src/main/java/fr/ird/observe/server/configuration/ServerConfig.java ===================================== @@ -105,7 +105,6 @@ public class ServerConfig extends GeneratedServerConfig implements CleanTemporar .forAllScopesWithout(ApplicationConfigScope.CURRENT, ApplicationConfigScope.HOME, ApplicationConfigScope.ENV, - ApplicationConfigScope.JVM, ApplicationConfigScope.CLASS_PATH, ApplicationConfigScope.SYSTEM) .addDefaults(ServerConfigOption.CONTEXT_PATH.getKey(), "observe-${build.version}") @@ -153,6 +152,10 @@ public class ServerConfig extends GeneratedServerConfig implements CleanTemporar } } + public boolean isWindows() { + return get().getOsName().toLowerCase().contains("windows"); + } + public void init(boolean strict) { log.info("Starts to init ObServe server configuration..."); @@ -164,7 +167,7 @@ public class ServerConfig extends GeneratedServerConfig implements CleanTemporar File extraConfigFile = get().getExtraConfigFile(); if (Files.notExists(extraConfigFile.toPath())) { - boolean generated = ServerResources.APPLICATION_CONFIGURATION.copyResource(getCommonConfigurationFile().toPath(), extraConfigFile); + boolean generated = ServerResources.APPLICATION_CONFIGURATION.setForWindows(isWindows()).copyResource(getCommonConfigurationFile().toPath(), extraConfigFile); if (generated) { log.info(String.format("Generate empty configuration file to: %s", extraConfigFile)); } else { @@ -181,7 +184,7 @@ public class ServerConfig extends GeneratedServerConfig implements CleanTemporar if (strict && !commonSecurityConfigurationFile.exists()) { throw new IllegalStateException(String.format("Can not start application. Could not find security.yml file.\n\nPlease add it to one of this places:\n\t%s\n\t%s", commonSecurityConfigurationFile, securityConfigurationFile)); } - boolean generated = ServerResources.SECURITY_CONFIGURATION.setStrict(strict).copyResource(commonSecurityConfigurationFile.toPath(), securityConfigurationFile); + boolean generated = ServerResources.SECURITY_CONFIGURATION.setStrict(strict).setForWindows(isWindows()).copyResource(commonSecurityConfigurationFile.toPath(), securityConfigurationFile); if (generated) { log.info("Generate default security.yml"); } else { ===================================== server/configuration/src/main/java/fr/ird/observe/server/configuration/ServerResources.java ===================================== @@ -25,6 +25,7 @@ package fr.ird.observe.server.configuration; import io.ultreia.java4all.config.ConfigResource; import java.io.File; +import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; @@ -35,13 +36,14 @@ import java.nio.file.Path; * @since 9.0.0 */ public class ServerResources { - public static final ConfigResource APPLICATION_CONFIGURATION = new ConfigResource("/META-INF/configuration/observe-server.conf"); + public static final ConfigResource2 APPLICATION_CONFIGURATION = new ConfigResource2("/META-INF/configuration/observe-server.conf"); public static final ConfigResource2 SECURITY_CONFIGURATION = new ConfigResource2("/META-INF/configuration/security.yml"); - public static final ConfigResource LOG_CONFIGURATION = new ConfigResource("/META-INF/configuration/log.xml"); + public static final ConfigResource2 LOG_CONFIGURATION = new ConfigResource2("/META-INF/configuration/log.xml"); static class ConfigResource2 extends ConfigResource { private boolean strict; + private boolean forWindows; public ConfigResource2(String location) { super(location); @@ -56,11 +58,32 @@ public class ServerResources { return this; } + public boolean isForWindows() { + return forWindows; + } + + public ConfigResource2 setForWindows(boolean forWindows) { + this.forWindows = forWindows; + return this; + } + @Override public boolean copyResource(Path sharedFile, File file) { if (isStrict() && Files.notExists(sharedFile)) { throw new IllegalStateException(String.format("You are not allowed to copy this resource: %s", this)); } + if (isForWindows()) { + if (Files.exists(sharedFile)) { + try { + Files.copy(sharedFile, file.toPath()); + return false; + } catch (IOException e) { + throw new IllegalStateException(String.format("Could not copy from %s to %s", sharedFile, file), e); + } + } + copyResource(file); + return true; + } return super.copyResource(sharedFile, file); } } View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/compare/532c68b7cd157738c8964b282... -- View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/compare/532c68b7cd157738c8964b282... You're receiving this email because of your account on gitlab.com.