Skip to content

Commit

Permalink
#349 when updating a script, preserve saved parameters
Browse files Browse the repository at this point in the history
  • Loading branch information
syjer committed Mar 20, 2018
1 parent 793c021 commit 2fe9d6f
Show file tree
Hide file tree
Showing 3 changed files with 34 additions and 12 deletions.
16 changes: 8 additions & 8 deletions src/main/java/alfio/extension/ExtensionService.java
Original file line number Diff line number Diff line change
Expand Up @@ -20,10 +20,7 @@
import alfio.model.Event;
import alfio.model.ExtensionLog;
import alfio.model.ExtensionSupport;
import alfio.model.ExtensionSupport.ExtensionMetadataValue;
import alfio.model.ExtensionSupport.ExtensionParameterMetadataAndValue;
import alfio.model.ExtensionSupport.NameAndValue;
import alfio.model.ExtensionSupport.ScriptPathNameHash;
import alfio.model.ExtensionSupport.*;
import alfio.model.user.Organization;
import alfio.repository.ExtensionLogRepository;
import alfio.repository.ExtensionRepository;
Expand Down Expand Up @@ -122,7 +119,6 @@ public void createOrUpdate(String previousPath, String previousName, Extension s
extensionRepository.insert(script.getPath(), script.getName(), extensionMetadata.displayName, hash, script.isEnabled(), extensionMetadata.async, script.getScript());
} else {
extensionRepository.update(script.getPath(), script.getName(), extensionMetadata.displayName, hash, script.isEnabled(), extensionMetadata.async, script.getScript());
//TODO: load all saved parameters value, then delete the register extension parameter
}

int extensionId = extensionRepository.getExtensionIdFor(script.getPath(), script.getName());
Expand All @@ -135,12 +131,16 @@ public void createOrUpdate(String previousPath, String previousName, Extension s
//
ExtensionMetadata.Parameters parameters = extensionMetadata.getParameters();
if (parameters != null) {
List<ExtensionParameterKeyValue> extensionParameterKeyValue = extensionRepository.findExtensionParameterKeyValue(extensionId);
extensionRepository.deleteExtensionParameter(extensionId);
//TODO: handle if already present, cleanup key that are no more present
for (ExtensionMetadata.Field field : parameters.getFields()) {
for (String level : parameters.getConfigurationLevels()) {
extensionRepository.registerExtensionConfigurationMetadata(extensionId, field.getName(), field.getDescription(), field.getType(), level, field.isRequired());
//if for this key,level is present a value -> save
int confFieldId = extensionRepository.registerExtensionConfigurationMetadata(extensionId, field.getName(), field.getDescription(), field.getType(), level, field.isRequired()).getKey();
List<ExtensionParameterKeyValue> filteredParam = extensionParameterKeyValue.stream().filter(kv -> field.getName().equals(kv.getName()) && level.equals(kv.getConfigurationLevel())).collect(Collectors.toList());
for(ExtensionParameterKeyValue kv : filteredParam) {
//TODO: can be optimized with a bulk insert...
extensionRepository.insertSettingValue(confFieldId, kv.getConfigurationPath(), kv.getConfigurationValue());
}
}
}
}
Expand Down
18 changes: 18 additions & 0 deletions src/main/java/alfio/model/ExtensionSupport.java
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,24 @@ public ScriptPathNameHash(@Column("path") String path,
}
}

@Getter
public static class ExtensionParameterKeyValue {
private final String name;
private final String configurationLevel;
private final String configurationPath;
private final String configurationValue;

public ExtensionParameterKeyValue(@Column("ecm_name") String name,
@Column("ecm_configuration_level") String configurationLevel,
@Column("conf_path") String configurationPath,
@Column("conf_value") String configurationValue) {
this.name = name;
this.configurationLevel = configurationLevel;
this.configurationPath = configurationPath;
this.configurationValue = configurationValue;
}
}

@Getter
public static class ExtensionParameterMetadataAndValue {
private final int id;
Expand Down
12 changes: 8 additions & 4 deletions src/main/java/alfio/repository/ExtensionRepository.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,7 @@
package alfio.repository;

import alfio.model.ExtensionSupport;
import ch.digitalfondue.npjt.Bind;
import ch.digitalfondue.npjt.Query;
import ch.digitalfondue.npjt.QueryRepository;
import ch.digitalfondue.npjt.*;

import java.util.List;
import java.util.Optional;
Expand Down Expand Up @@ -90,9 +88,15 @@ List<ExtensionSupport.ScriptPathNameHash> findActive(@Bind("possiblePaths") Set<
@Query("delete from extension_configuration_metadata where ecm_es_id_fk = :extensionId")
int deleteExtensionParameter(@Bind("extensionId") int extensionId);

@Query("select ecm_name, ecm_configuration_level, conf_path, conf_value from extension_configuration_metadata " +
" inner join extension_configuration_metadata_value on fk_ecm_id = ecm_id " +
" where ecm_es_id_fk = :extensionId ")
List<ExtensionSupport.ExtensionParameterKeyValue> findExtensionParameterKeyValue(@Bind("extensionId") int extensionId);

@Query("insert into extension_configuration_metadata(ecm_es_id_fk, ecm_name, ecm_description, ecm_type, ecm_configuration_level, ecm_mandatory) " +
" values (:extensionId, :name, :description, :type, :configurationLevel, :mandatory)")
int registerExtensionConfigurationMetadata(@Bind("extensionId") int extensionId,
@AutoGeneratedKey("ecm_id")
AffectedRowCountAndKey<Integer> registerExtensionConfigurationMetadata(@Bind("extensionId") int extensionId,
@Bind("name") String name,
@Bind("description") String description,
@Bind("type") String type,
Expand Down

0 comments on commit 2fe9d6f

Please sign in to comment.