This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository observe. See https://gitlab.nuiton.org/codelutin/observe.git commit ce1a11c06a586ec3b59625050e8b45ba1a648f17 Author: Tony CHEMIT <chemit@codelutin.com> Date: Tue Aug 16 16:25:57 2016 +0200 Ajout méthode pour récupérer l'enveloppe des référentiels --- .../controller/v1/DataSourceServiceController.java | 6 ++ .../services/service/DataSourceService.java | 3 + .../services/service/DataSourceServiceTopia.java | 119 ++++++++++++++++++--- 3 files changed, 113 insertions(+), 15 deletions(-) diff --git a/observe-application-web/src/main/java/fr/ird/observe/application/web/controller/v1/DataSourceServiceController.java b/observe-application-web/src/main/java/fr/ird/observe/application/web/controller/v1/DataSourceServiceController.java index a4d2513..9ee58b7 100644 --- a/observe-application-web/src/main/java/fr/ird/observe/application/web/controller/v1/DataSourceServiceController.java +++ b/observe-application-web/src/main/java/fr/ird/observe/application/web/controller/v1/DataSourceServiceController.java @@ -35,6 +35,7 @@ import fr.ird.observe.services.dto.DataSourceCreateConfigurationDto; import fr.ird.observe.services.dto.DataSourceCreateWithNoReferentialImportException; import fr.ird.observe.services.dto.IncompatibleDataSourceCreateConfigurationException; import fr.ird.observe.services.dto.ObserveDbUserDto; +import fr.ird.observe.services.dto.referential.ReferentialDto; import fr.ird.observe.services.service.BabModelVersionException; import fr.ird.observe.services.service.DataSourceService; import fr.ird.observe.services.service.DatabaseConnexionNotAuthorizedException; @@ -136,6 +137,11 @@ public class DataSourceServiceController extends ObserveServiceControllerSupport getAnonymousService(dataSourceConfigurationTopia).migrateData(dataSourceConfiguration); } + @Override + public Set<Class<? extends ReferentialDto>> getReferentialTypesInShell() { + return getAuthenticatedService().getReferentialTypesInShell(); + } + protected ObserveDataSourceConfiguration getTopiaDataSourceConfiguration(ObserveDataSourceConfiguration dataSourceConfigurationFromRequest) { Preconditions.checkArgument(dataSourceConfigurationFromRequest instanceof ObserveDataSourceConfigurationRest); diff --git a/observe-services-api/src/main/java/fr/ird/observe/services/service/DataSourceService.java b/observe-services-api/src/main/java/fr/ird/observe/services/service/DataSourceService.java index bd951dd..ee00650 100644 --- a/observe-services-api/src/main/java/fr/ird/observe/services/service/DataSourceService.java +++ b/observe-services-api/src/main/java/fr/ird/observe/services/service/DataSourceService.java @@ -30,6 +30,7 @@ import fr.ird.observe.services.dto.DataSourceCreateConfigurationDto; import fr.ird.observe.services.dto.DataSourceCreateWithNoReferentialImportException; import fr.ird.observe.services.dto.IncompatibleDataSourceCreateConfigurationException; import fr.ird.observe.services.dto.ObserveDbUserDto; +import fr.ird.observe.services.dto.referential.ReferentialDto; import fr.ird.observe.services.spi.NoDataAccess; import java.io.Closeable; @@ -62,6 +63,8 @@ public interface DataSourceService extends ObserveService, Closeable { @NoDataAccess void migrateData(ObserveDataSourceConfiguration dataSourceConfiguration); + Set<Class<? extends ReferentialDto>> getReferentialTypesInShell(); + @Override void close(); diff --git a/observe-services-topia/src/main/java/fr/ird/observe/services/service/DataSourceServiceTopia.java b/observe-services-topia/src/main/java/fr/ird/observe/services/service/DataSourceServiceTopia.java index 00095d2..1e2382a 100644 --- a/observe-services-topia/src/main/java/fr/ird/observe/services/service/DataSourceServiceTopia.java +++ b/observe-services-topia/src/main/java/fr/ird/observe/services/service/DataSourceServiceTopia.java @@ -27,14 +27,17 @@ import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Iterables; import com.google.common.collect.Sets; +import fr.ird.observe.ObserveEntityEnum; import fr.ird.observe.ObserveTopiaApplicationContext; import fr.ird.observe.ObserveTopiaConfiguration; import fr.ird.observe.ObserveTopiaConfigurationFactory; import fr.ird.observe.entities.migration.ObserveMigrationConfigurationProvider; +import fr.ird.observe.entities.referentiel.ObserveReferentialEntity; import fr.ird.observe.services.ObserveJdbcHelper; import fr.ird.observe.services.ObserveSecurityHelper; import fr.ird.observe.services.ObserveServiceTopia; import fr.ird.observe.services.ObserveTopiaApplicationContextFactory; +import fr.ird.observe.services.binder.BinderEngine; import fr.ird.observe.services.configuration.ObserveDataSourceConfiguration; import fr.ird.observe.services.configuration.ObserveDataSourceConfigurationTopiaH2; import fr.ird.observe.services.configuration.ObserveDataSourceConfigurationTopiaPG; @@ -47,9 +50,13 @@ import fr.ird.observe.services.dto.DataSourceCreateWithNoReferentialImportExcept import fr.ird.observe.services.dto.IncompatibleDataSourceCreateConfigurationException; import fr.ird.observe.services.dto.ObserveDbUserDto; import fr.ird.observe.services.dto.ObserveDbUserDtos; +import fr.ird.observe.services.dto.referential.ReferentialDto; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.topia.persistence.jdbc.JdbcHelper; +import org.nuiton.topia.persistence.metadata.TopiaMetadataEntity; +import org.nuiton.topia.persistence.metadata.TopiaMetadataModel; +import org.nuiton.topia.persistence.metadata.TopiaMetadataModelVisitor; import org.nuiton.version.Version; import java.io.File; @@ -108,12 +115,12 @@ public class DataSourceServiceTopia extends ObserveServiceTopia implements DataS // On tente une connection à la base ObserveTopiaConfiguration topiaConfiguration = ObserveTopiaConfigurationFactory.forH2Database(h2DataSourceConfiguration.getDirectory(), - h2DataSourceConfiguration.getDbName(), - h2DataSourceConfiguration.getUsername(), - new String(h2DataSourceConfiguration.getPassword()), - false, - false, - false); + h2DataSourceConfiguration.getDbName(), + h2DataSourceConfiguration.getUsername(), + new String(h2DataSourceConfiguration.getPassword()), + false, + false, + false); try { @@ -134,11 +141,11 @@ public class DataSourceServiceTopia extends ObserveServiceTopia implements DataS ObserveDataSourceConfigurationTopiaPG pgDataSourceConfiguration = (ObserveDataSourceConfigurationTopiaPG) dataSourceConfigurationTopiaSupport; // On tente une connexion au serveur ObserveTopiaConfiguration topiaConfiguration = ObserveTopiaConfigurationFactory.forPostgresqlDatabase(pgDataSourceConfiguration.getJdbcUrl(), - pgDataSourceConfiguration.getUsername(), - new String(pgDataSourceConfiguration.getPassword()), - false, - false, - false); + pgDataSourceConfiguration.getUsername(), + new String(pgDataSourceConfiguration.getPassword()), + false, + false, + false); try { new JdbcHelper(topiaConfiguration).runSelectOnString("SELECT 1;"); @@ -412,7 +419,7 @@ public class DataSourceServiceTopia extends ObserveServiceTopia implements DataS ObserveDataSourceConfigurationTopiaSupport dataSourceConfiguration = serviceContext.getDataSourceConfiguration(); - if (! dataSourceConfiguration.isH2Database()) { + if (!dataSourceConfiguration.isH2Database()) { throw new DatabaseDestroyNotAuthorizedException(dataSourceConfiguration); @@ -503,6 +510,16 @@ public class DataSourceServiceTopia extends ObserveServiceTopia implements DataS } + @Override + public Set<Class<? extends ReferentialDto>> getReferentialTypesInShell() { + ObserveTopiaApplicationContext topiaApplicationContext = serviceContext.getTopiaApplicationContext(); + TopiaMetadataModel metadataModel = topiaApplicationContext.getMetadataModel(); + + DetectReferentialTypesInShellBuilder visitor = new DetectReferentialTypesInShellBuilder(); + metadataModel.accept(visitor); + return visitor.build(); + } + protected ObserveDataSourceConnectionTopia createDataSourceConnection(ObserveDataSourceInformation dataSourceInformation, String authenticationToken) { ObserveDataSourceConnectionTopia dataSourceConnection = new ObserveDataSourceConnectionTopia( @@ -576,9 +593,9 @@ public class DataSourceServiceTopia extends ObserveServiceTopia implements DataS if (log.isDebugEnabled()) { log.debug("User can read refererential : " + readReferential + ", " + - "write referential : " + writeReferential + ", " + - "read data : " + readData + ", " + - "write data : " + writeData + "."); + "write referential : " + writeReferential + ", " + + "read data : " + readData + ", " + + "write data : " + writeData + "."); } ObserveMigrationConfigurationProvider observeMigrationConfigurationProvider = ObserveMigrationConfigurationProvider.get(); @@ -608,4 +625,76 @@ public class DataSourceServiceTopia extends ObserveServiceTopia implements DataS return result; } + private static class DetectReferentialTypesInShellBuilder implements TopiaMetadataModelVisitor { + + private final ImmutableSet.Builder<Class<? extends ReferentialDto>> typesInShellBuilder = ImmutableSet.builder(); + + @Override + public void visitModelStart(TopiaMetadataModel metadataModel) { + + } + + @Override + public void visitModelEnd(TopiaMetadataModel metadataModel) { + + } + + @Override + public void visitEntiyStart(TopiaMetadataModel metadataModel, TopiaMetadataEntity metadataEntity) { + + } + + @Override + public void visitEntiyEnd(TopiaMetadataModel metadataModel, TopiaMetadataEntity metadataEntity) { + + } + + @Override + public void visitReversedAssociation(TopiaMetadataModel metadataModel, TopiaMetadataEntity metadataEntity, String propertyName, TopiaMetadataEntity propertyType) { + + } + + @Override + public void visitOneToManyAssociation(TopiaMetadataModel metadataModel, TopiaMetadataEntity metadataEntity, String propertyName, TopiaMetadataEntity propertyType) { + addTypeInShell(metadataEntity, propertyType); + } + + @Override + public void visitManyToManyAssociation(TopiaMetadataModel metadataModel, TopiaMetadataEntity metadataEntity, String propertyName, TopiaMetadataEntity propertyType) { + addTypeInShell(metadataEntity, propertyType); + } + + @Override + public void visitManyToOneAssociation(TopiaMetadataModel metadataModel, TopiaMetadataEntity metadataEntity, String propertyName, TopiaMetadataEntity propertyType) { + addTypeInShell(metadataEntity, propertyType); + } + + @Override + public void visitProperty(TopiaMetadataModel metadataModel, TopiaMetadataEntity metadataEntity, String propertyName, String propertyType) { + + } + + private void addTypeInShell(TopiaMetadataEntity containerType, TopiaMetadataEntity propertyType) { + + ObserveEntityEnum parentObserveEntityEnum = ObserveEntityEnum.valueOf(containerType.getType()); + Class parentEntityType = parentObserveEntityEnum.getContract(); + if (ObserveReferentialEntity.class.isAssignableFrom(parentEntityType)) { + + String type = propertyType.getType(); + + ObserveEntityEnum observeEntityEnum = ObserveEntityEnum.valueOf(type); + Class entityType = observeEntityEnum.getContract(); + Class<? extends ReferentialDto> dtoType = BinderEngine.get().getReferentialDtoType(entityType); + typesInShellBuilder.add(dtoType); + if (log.isInfoEnabled()) { + log.info("For container type:" + parentObserveEntityEnum + ", add to shell: " + observeEntityEnum); + } + } + + } + + public Set<Class<? extends ReferentialDto>> build() { + return typesInShellBuilder.build(); + } + } } -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.