This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository tutti. See https://gitlab.nuiton.org/codelutin/tutti.git commit 20af7e1a45e4dfb8379a28a4d7a787a852368045 Author: Tony CHEMIT <chemit@codelutin.com> Date: Mon Jul 18 16:30:31 2016 +0200 Revue de la gestion des valeurs primitives --- .../ui/admin/synchronize/SynchronizeUIHandler.java | 1 - .../synchro/InsertSqlStatementGenerator.java | 43 ++++++++++++++++++++++ .../synchro/UpdateSqlStatementGenerator.java | 42 +++++++++++++++++++++ .../persistence/metadata/TopiaMetadataEntity.java | 28 ++++++++++++++ 4 files changed, 113 insertions(+), 1 deletion(-) diff --git a/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/synchronize/SynchronizeUIHandler.java b/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/synchronize/SynchronizeUIHandler.java index d763900..28aa641 100644 --- a/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/synchronize/SynchronizeUIHandler.java +++ b/observe-application-swing/src/main/java/fr/ird/observe/ui/admin/synchronize/SynchronizeUIHandler.java @@ -334,7 +334,6 @@ public class SynchronizeUIHandler extends AdminTabUIHandler { } - getModel().getSaveLocalModel().setLocalSourceNeedSave(true); getModel().getSaveLocalModel().addStepForSave(AdminStep.SYNCHRONIZE); } diff --git a/observe-services-topia/src/main/java/fr/ird/observe/services/service/actions/synchro/InsertSqlStatementGenerator.java b/observe-services-topia/src/main/java/fr/ird/observe/services/service/actions/synchro/InsertSqlStatementGenerator.java index 760e993..c63641f 100644 --- a/observe-services-topia/src/main/java/fr/ird/observe/services/service/actions/synchro/InsertSqlStatementGenerator.java +++ b/observe-services-topia/src/main/java/fr/ird/observe/services/service/actions/synchro/InsertSqlStatementGenerator.java @@ -40,6 +40,10 @@ public class InsertSqlStatementGenerator<R extends ReferentialDto> { private final String[] simplePropertyNames; private final String[] manyToOneAssociationNames; private final Set<ManyToManyAssociationStruct> manyToManyAssociations; + private final Set<String> primitiveBooleanPropertyNames; + private final Set<String> primitiveIntegerPropertyNames; + private final Set<String> primitiveLongPropertyNames; + private final Set<String> primitiveFloatPropertyNames; /** * Pour décrire une association nm. @@ -72,6 +76,10 @@ public class InsertSqlStatementGenerator<R extends ReferentialDto> { this.tableName = metadataEntity.getDbTableName(); Set<String> propertyNamesSet = metadataEntity.getProperties().keySet(); this.simplePropertyNames = propertyNamesSet.toArray(new String[propertyNamesSet.size()]); + this.primitiveBooleanPropertyNames = metadataEntity.getPrimitivePropertyNames("boolean"); + this.primitiveIntegerPropertyNames = metadataEntity.getPrimitivePropertyNames("int"); + this.primitiveLongPropertyNames = metadataEntity.getPrimitivePropertyNames("long"); + this.primitiveFloatPropertyNames = metadataEntity.getPrimitivePropertyNames("float"); Set<String> manyToOneAssociationNamesSet = metadataEntity.getManyToOneAssociations().keySet(); this.manyToOneAssociationNames = manyToOneAssociationNamesSet.toArray(new String[manyToOneAssociationNamesSet.size()]); @@ -99,6 +107,25 @@ public class InsertSqlStatementGenerator<R extends ReferentialDto> { Map<String, Object> simpleParameters = binder.obtainProperties(referentialDto, true, true, simplePropertyNames); for (String simplePropertyName : simplePropertyNames) { Object parameterValue = simpleParameters.get(simplePropertyName); + + if (primitiveBooleanPropertyNames.contains(simplePropertyName)) { + addPrimitiveBooleanParameter((Boolean) parameterValue, parameters); + continue; + } + if (primitiveIntegerPropertyNames.contains(simplePropertyName)) { + addPrimitiveIntegerParameter((Integer) parameterValue, parameters); + continue; + } + if (primitiveLongPropertyNames.contains(simplePropertyName)) { + addPrimitiveLongParameter((Long) parameterValue, parameters); + continue; + } + if (primitiveFloatPropertyNames.contains(simplePropertyName)) { + addPrimitiveFloatParameter((Float) parameterValue, parameters); + continue; + } + + if (parameterValue == null) { addNullParameter(parameters); continue; @@ -213,6 +240,22 @@ public class InsertSqlStatementGenerator<R extends ReferentialDto> { parameters.add("'" + parameter + "'"); } + private void addPrimitiveBooleanParameter(Boolean parameter, List<String> parameters) { + parameters.add("" + (parameter != null && parameter)); + } + + private void addPrimitiveIntegerParameter(Integer parameter, List<String> parameters) { + parameters.add("" + (parameter == null ? 0 : parameter)); + } + + private void addPrimitiveLongParameter(Long parameter, List<String> parameters) { + parameters.add("" + (parameter == null ? 0 : parameter)); + } + + private void addPrimitiveFloatParameter(Float parameter, List<String> parameters) { + parameters.add("" + (parameter == null ? 0f : parameter)); + } + private void addTimestampParameter(Date parameter, List<String> parameters) { parameters.add("'" + parameter + "'::timestamp"); } diff --git a/observe-services-topia/src/main/java/fr/ird/observe/services/service/actions/synchro/UpdateSqlStatementGenerator.java b/observe-services-topia/src/main/java/fr/ird/observe/services/service/actions/synchro/UpdateSqlStatementGenerator.java index 513a5a2..e59f461 100644 --- a/observe-services-topia/src/main/java/fr/ird/observe/services/service/actions/synchro/UpdateSqlStatementGenerator.java +++ b/observe-services-topia/src/main/java/fr/ird/observe/services/service/actions/synchro/UpdateSqlStatementGenerator.java @@ -40,6 +40,10 @@ public class UpdateSqlStatementGenerator<R extends ReferentialDto> { private final String[] simplePropertyNames; private final String[] manyToOneAssociationNames; private final Set<ManyToManyAssociationStruct> manyToManyAssociations; + private final Set<String> primitiveBooleanPropertyNames; + private final Set<String> primitiveIntegerPropertyNames; + private final Set<String> primitiveLongPropertyNames; + private final Set<String> primitiveFloatPropertyNames; /** * Pour décrire une association nm. @@ -73,6 +77,10 @@ public class UpdateSqlStatementGenerator<R extends ReferentialDto> { Set<String> simplePropertyNamesSet = metadataEntity.getProperties().keySet(); this.simplePropertyNames = simplePropertyNamesSet.toArray(new String[simplePropertyNamesSet.size()]); + this.primitiveBooleanPropertyNames = metadataEntity.getPrimitivePropertyNames("boolean"); + this.primitiveIntegerPropertyNames = metadataEntity.getPrimitivePropertyNames("int"); + this.primitiveLongPropertyNames = metadataEntity.getPrimitivePropertyNames("long"); + this.primitiveFloatPropertyNames = metadataEntity.getPrimitivePropertyNames("float"); Set<String> manyToOneAssociationNamesSet = metadataEntity.getManyToOneAssociations().keySet(); this.manyToOneAssociationNames = manyToOneAssociationNamesSet.toArray(new String[manyToOneAssociationNamesSet.size()]); @@ -106,6 +114,23 @@ public class UpdateSqlStatementGenerator<R extends ReferentialDto> { String columnName = columnNames.get(simplePropertyName); Object simplePropertyValue = entry.getValue(); + if (primitiveBooleanPropertyNames.contains(simplePropertyName)) { + addPrimitiveBooleanParameter(columnName, (Boolean) simplePropertyValue, parameters); + continue; + } + if (primitiveIntegerPropertyNames.contains(simplePropertyName)) { + addPrimitiveIntegerParameter(columnName, (Integer) simplePropertyValue, parameters); + continue; + } + if (primitiveFloatPropertyNames.contains(simplePropertyName)) { + addPrimitiveFloatParameter(columnName, (Float) simplePropertyValue, parameters); + continue; + } + if (primitiveLongPropertyNames.contains(simplePropertyName)) { + addPrimitiveLongParameter(columnName, (Long) simplePropertyValue, parameters); + continue; + } + if (simplePropertyValue == null) { addNullParameter(columnName, parameters); continue; @@ -122,6 +147,7 @@ public class UpdateSqlStatementGenerator<R extends ReferentialDto> { addEnumParameter(columnName, (Enum) simplePropertyValue, parameters); continue; } + addOtherTypeParameter(columnName, simplePropertyValue, parameters); } @@ -269,4 +295,20 @@ public class UpdateSqlStatementGenerator<R extends ReferentialDto> { private void addParameter0(String columnName, String value, StringBuilder parameters) { parameters.append(", ").append(columnName).append(" = ").append(value); } + + private void addPrimitiveBooleanParameter(String columnName, Boolean parameter, StringBuilder parameters) { + addParameter0(columnName, "" + (parameter != null && parameter), parameters); + } + + private void addPrimitiveIntegerParameter(String columnName, Integer parameter, StringBuilder parameters) { + addParameter0(columnName, "" + (parameter == null ? 0 : parameter), parameters); + } + + private void addPrimitiveLongParameter(String columnName, Long parameter, StringBuilder parameters) { + addParameter0(columnName, "" + (parameter == null ? 0 : parameter), parameters); + } + + private void addPrimitiveFloatParameter(String columnName, Float parameter, StringBuilder parameters) { + addParameter0(columnName, "" + (parameter == null ? 0f : parameter), parameters); + } } diff --git a/observe-topia-extension/src/main/java/org/nuiton/topia/persistence/metadata/TopiaMetadataEntity.java b/observe-topia-extension/src/main/java/org/nuiton/topia/persistence/metadata/TopiaMetadataEntity.java index 22b89e9..e952710 100644 --- a/observe-topia-extension/src/main/java/org/nuiton/topia/persistence/metadata/TopiaMetadataEntity.java +++ b/observe-topia-extension/src/main/java/org/nuiton/topia/persistence/metadata/TopiaMetadataEntity.java @@ -23,12 +23,15 @@ package org.nuiton.topia.persistence.metadata; */ import com.google.common.base.MoreObjects; +import com.google.common.collect.ImmutableSet; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import java.util.LinkedHashMap; +import java.util.LinkedHashSet; import java.util.Map; import java.util.Objects; +import java.util.Set; /** * Created on 03/01/16. @@ -157,6 +160,31 @@ public class TopiaMetadataEntity { return properties; } + public static final Set<String> PRIMITIVE_TYPES = ImmutableSet.of("byte", "boolean", "char", "int", "long", "float", "double"); + + public Set<String> getPrimitivePropertyNames() { + Set<String> names = new LinkedHashSet<>(); + for (Map.Entry<String, String> entry : properties.entrySet()) { + String propertyType = entry.getValue(); + if (PRIMITIVE_TYPES.contains(propertyType)) { + names.add(entry.getKey()); + } + } + return names; + } + + public Set<String> getPrimitivePropertyNames(String primitiveType) { + Set<String> names = new LinkedHashSet<>(); + for (Map.Entry<String, String> entry : properties.entrySet()) { + String propertyType = entry.getValue(); + if (primitiveType.equals(propertyType)) { + names.add(entry.getKey()); + } + } + return names; + } + + public Map<String, String> getDbColumnsName() { return dbColumnsName; } -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.