Merge branch 'dmp-refactoring' of https://code-repo.d4science.org/MaDgiK-CITE/argos into dmp-refactoring

This commit is contained in:
Sofia Papacharalampous 2024-03-21 18:01:34 +02:00
commit efd6f5df47
5 changed files with 183 additions and 112 deletions

View File

@ -197,7 +197,7 @@ export class DmpEditorComponent extends BaseEditor<DmpEditorModel, Dmp> implemen
this.buildForm();
}
if (this.item.id != null) {
if (this.item && this.item.id != null) {
this.checkLock(this.item.id, LockTargetType.Dmp, 'DMP-EDITOR.LOCKED-DIALOG.TITLE', 'DMP-EDITOR.LOCKED-DIALOG.MESSAGE');
}
} catch (error) {

View File

@ -15,7 +15,6 @@ import eu.eudat.model.Dmp;
import eu.eudat.model.Reference;
import eu.eudat.model.ReferenceType;
import eu.eudat.query.*;
import eu.eudat.service.reference.ReferenceService;
import eu.old.eudat.data.dao.entities.DatasetDao;
import eu.old.eudat.data.entities.Dataset;
import eu.old.eudat.logic.services.operations.DatabaseRepository;
@ -25,7 +24,6 @@ import gr.cite.tools.fieldset.BaseFieldSet;
import gr.cite.tools.logging.LoggerService;
import jakarta.persistence.EntityManager;
import jakarta.xml.bind.JAXBException;
import org.apache.commons.lang3.StringEscapeUtils;
import org.json.JSONObject;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
@ -54,16 +52,16 @@ public class DatasetMigrationService {
private static final boolean TestMode = false;
private final EntityManager entityManager;
private final ConventionService conventionService;
private final ReferenceService referenceService;
private final MigrationTools migrationTools;
public DatasetMigrationService(DatabaseRepository databaseRepository, JsonHandlingService jsonHandlingService, QueryFactory queryFactory, XmlHandlingService xmlHandlingService, EntityManager entityManager, ConventionService conventionService, ReferenceService referenceService) {
public DatasetMigrationService(DatabaseRepository databaseRepository, JsonHandlingService jsonHandlingService, QueryFactory queryFactory, XmlHandlingService xmlHandlingService, EntityManager entityManager, ConventionService conventionService, MigrationTools migrationTools) {
this.databaseRepository = databaseRepository;
this.jsonHandlingService = jsonHandlingService;
this.queryFactory = queryFactory;
this.xmlHandlingService = xmlHandlingService;
this.entityManager = entityManager;
this.conventionService = conventionService;
this.referenceService = referenceService;
this.migrationTools = migrationTools;
}
public void migrate() throws IOException, JAXBException, ParserConfigurationException, InstantiationException, IllegalAccessException, SAXException {
@ -387,20 +385,20 @@ public class DatasetMigrationService {
}
case SELECT -> {
if(!this.conventionService.isNullOrEmpty(textValue)) {
String[] valuesParsed = this.tryParseJsonAsObjectString(String[].class, textValue);
String[] valuesParsed = migrationTools.tryParseJsonAsObjectString(String[].class, textValue);
fieldEntity.setTextListValue(valuesParsed == null ? List.of(textValue) : Arrays.stream(valuesParsed).toList());
}
}
case DATASET_IDENTIFIER, VALIDATION -> {
if(!this.conventionService.isNullOrEmpty(textValue)) {
ExternalIdentifierEntity externalIdentifierEntity = this.tryParseJsonAsObjectString(ExternalIdentifierEntity.class, textValue);
ExternalIdentifierEntity externalIdentifierEntity = migrationTools.tryParseJsonAsObjectString(ExternalIdentifierEntity.class, textValue);
if (externalIdentifierEntity == null) throw new MyApplicationException("Could not parse dataset External Identifier : " + textValue);
fieldEntity.setExternalIdentifier(externalIdentifierEntity);
}
}
case UPLOAD -> {
if(!this.conventionService.isNullOrEmpty(textValue)) {
Map<String, String> valuesParsed = this.tryParseJsonAsObjectString(Map.class, textValue);
Map<String, String> valuesParsed = migrationTools.tryParseJsonAsObjectString(Map.class, textValue);
if (valuesParsed == null) {
valuesParsed = (Map<String, String>) properties.get(currentField.getId());
}
@ -412,7 +410,7 @@ public class DatasetMigrationService {
}
case CURRENCY -> {
if(!this.conventionService.isNullOrEmpty(textValue)) {
Currency currency = this.tryParseJsonAsObjectString(Currency.class, textValue);
Currency currency = migrationTools.tryParseJsonAsObjectString(Currency.class, textValue);
if (currency == null && textValue.toUpperCase(Locale.ROOT).contains("EUR")) {
currency = new Currency();
currency.setName("Euro");
@ -431,12 +429,12 @@ public class DatasetMigrationService {
}
case TAGS -> {
if(!this.conventionService.isNullOrEmpty(textValue)) {
Tag[] tags = this.tryParseJsonAsObjectString(Tag[].class, textValue);
Tag[] tags = migrationTools.tryParseJsonAsObjectString(Tag[].class, textValue);
if (tags == null) {
Tag tag = this.tryParseJsonAsObjectString(Tag.class, textValue);
Tag tag = migrationTools.tryParseJsonAsObjectString(Tag.class, textValue);
if (tag != null) tags = List.of(tag).toArray(Tag[]::new);
}
if (tags == null) tags = this.jsonHandlingService.fromJsonSafe(Tag[].class, this.cleanTagString(textValue));
if (tags == null) tags = this.jsonHandlingService.fromJsonSafe(Tag[].class, migrationTools.cleanTagString(textValue));
if (tags == null) throw new MyApplicationException("Could not parse tag : " + textValue);
fieldEntity.setTextListValue(Arrays.stream(tags).toList().stream().map(Tag::getName).toList());
}
@ -446,13 +444,13 @@ public class DatasetMigrationService {
case INTERNAL_ENTRIES_DESCRIPTIONS -> throw new MyApplicationException("Found INTERNAL_ENTRIES_DMPS into description");
case REFERENCE_TYPES -> {
if(!this.conventionService.isNullOrEmpty(textValue)) { //TODO
Map<String, Object>[] references = this.tryParseJsonAsObjectString(Map[].class, textValue);
Map<String, Object>[] references = migrationTools.tryParseJsonAsObjectString(Map[].class, textValue);
ReferenceTypeDataEntity referenceTypeDataEntity = (ReferenceTypeDataEntity)currentField.getData();
if (referenceTypeDataEntity == null) throw new MyApplicationException("Could not parse description template reference : " + textValue);
if (references == null) {
Map<String, Object> reference = this.tryParseJsonAsObjectString(Map.class, textValue);
Map<String, Object> reference = migrationTools.tryParseJsonAsObjectString(Map.class, textValue);
if (reference != null) references = List.of(reference).toArray(Map[]::new);
}
if (references == null && !textValue.contains("{") && !textValue.contains("[") ) {
@ -506,7 +504,7 @@ public class DatasetMigrationService {
source = referenceTypeDefinition.getSources().getFirst().getKey();
String[] parts = null;
if (textValue.startsWith("[\"")){
parts = this.tryParseJsonAsObjectString(String[].class, textValue);
parts = migrationTools.tryParseJsonAsObjectString(String[].class, textValue);
} else{
if (textValue.startsWith("[")) textValue = textValue.substring(1).trim();
if (textValue.endsWith("]")) textValue = textValue.substring(0, textValue.length() -1).trim();
@ -564,7 +562,7 @@ public class DatasetMigrationService {
if (textValue.equals("[\"-\"]")){
break;
} else if (textValue.startsWith("[\"") && !textValue.startsWith("[\"{") && textValue.contains(",")){
references = this.tryParseJsonAsObjectString(Map[].class, textValue.replace(textValue.substring(1, textValue.indexOf(",") + 1), ""));
references = migrationTools.tryParseJsonAsObjectString(Map[].class, textValue.replace(textValue.substring(1, textValue.indexOf(",") + 1), ""));
} else if (textValue.contains(",") && !textValue.contains("{") && !textValue.contains("[") ){
String[] parts = textValue.split(",");
@ -601,7 +599,7 @@ public class DatasetMigrationService {
} else if (!textValue.contains("{")) {
String[] parts = null;
if (textValue.startsWith("[\"")){
parts = this.tryParseJsonAsObjectString(String[].class, textValue);
parts = migrationTools.tryParseJsonAsObjectString(String[].class, textValue);
} else{
if (textValue.startsWith("[")) textValue = textValue.substring(1).trim();
if (textValue.endsWith("]")) textValue = textValue.substring(0, textValue.length() -1).trim();
@ -985,81 +983,6 @@ public class DatasetMigrationService {
}
private <T> T tryParseJsonAsObjectString(Class<T> type, String value){
T item = this.jsonHandlingService.fromJsonSafe(type, value);
if (item == null) item = this.jsonHandlingService.fromJsonSafe(type, StringEscapeUtils.unescapeJava(value));
if (item == null) item = this.jsonHandlingService.fromJsonSafe(type, StringEscapeUtils.unescapeJson(value));
if (item == null) {
String newValue = StringEscapeUtils.unescapeJava(value);
newValue = newValue.trim().replace("[\"{", "[{");
newValue = newValue.trim().replace("}\"]", "}]");
newValue = newValue.trim().replace("}\", \"{", "}, {");
newValue = newValue.trim().replace("}\",\"{", "},{");
newValue = newValue.trim().replace(", \"{", ", {");
newValue = newValue.trim().replace(",\"{", ",{");
newValue = newValue.trim().replace("}\",", "},");
while (!this.conventionService.isNullOrEmpty(newValue) && newValue.startsWith("\"")) newValue = newValue.substring(1);
while (!this.conventionService.isNullOrEmpty(newValue) && newValue.endsWith("\"")) newValue = newValue.substring(0, newValue.length() - 1);
item = this.jsonHandlingService.fromJsonSafe(type, newValue);
}
if (item == null) {
String newValue = StringEscapeUtils.unescapeJson(value);
newValue = newValue.trim().replace("[\"{", "[{");
newValue = newValue.trim().replace("}\"]", "}]");
newValue = newValue.trim().replace("}\", \"{", "}, {");
newValue = newValue.trim().replace("}\",\"{", "},{");
newValue = newValue.trim().replace(", \"{", ", {");
newValue = newValue.trim().replace(",\"{", ",{");
newValue = newValue.trim().replace("}\",", "},");
while (!this.conventionService.isNullOrEmpty(newValue) && newValue.startsWith("\"")) newValue = newValue.substring(1);
while (!this.conventionService.isNullOrEmpty(newValue) && newValue.endsWith("\"")) newValue = newValue.substring(0, newValue.length() - 1);
item = this.jsonHandlingService.fromJsonSafe(type, newValue);
}
if (item == null) {
String newValue = value.trim().replace("\\", "");
newValue = newValue.trim().replace("[\"{", "[{");
newValue = newValue.trim().replace("}\"]", "}]");
newValue = newValue.trim().replace("}\", \"{", "}, {");
newValue = newValue.trim().replace("}\",\"{", "},{");
newValue = newValue.trim().replace(", \"{", ", {");
newValue = newValue.trim().replace(",\"{", ",{");
newValue = newValue.trim().replace("}\",", "},");
while (!this.conventionService.isNullOrEmpty(newValue) && newValue.startsWith("\"")) newValue = newValue.substring(1);
while (!this.conventionService.isNullOrEmpty(newValue) && newValue.endsWith("\"")) newValue = newValue.substring(0, newValue.length() - 1);
item = this.jsonHandlingService.fromJsonSafe(type, newValue);
}
if (item == null) {
String newValue = value.trim().replace("=", ":");
newValue = newValue.trim().replace("{", "{\"");
newValue = newValue.trim().replace("}", "\"}");
newValue = newValue.trim().replace(":", "\":\"");
newValue = newValue.trim().replace(", ", "\", \"");
newValue = newValue.trim().replace("}\", \"{", "}, {");
newValue = newValue.trim().replace("\"\"", "\"");
newValue = newValue.trim().replace(":\"null,", ":null,");
newValue = newValue.trim().replace(":\"null\",", ":null,");
newValue = newValue.trim().replace(":\"null\"", ":null");
newValue = newValue.trim().replace(":\"null}\"", ":null}");
newValue = newValue.trim().replace("https\":\"", "https:");
newValue = newValue.trim().replace("datarepo\":\"", "datarepo:");
item = this.jsonHandlingService.fromJsonSafe(type, newValue);
}
return item;
}
private String cleanTagString(String value){
value = value.trim().replace("=", ":");
value = value.trim().replace("{", "{\"");
value = value.trim().replace("}", "\"}");
value = value.trim().replace(":", "\":\"");
value = value.trim().replace(", ", "\", \"");
value = value.trim().replace("}\", \"{", "}, {");
return value;
}
public static class Currency{
private String name;

View File

@ -34,12 +34,16 @@ import org.w3c.dom.Document;
import org.xml.sax.SAXException;
import javax.management.InvalidApplicationException;
import javax.ws.rs.NotSupportedException;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.TransformerException;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import java.time.Instant;
import java.time.LocalDate;
import java.time.ZoneOffset;
import java.time.format.DateTimeParseException;
import java.util.*;
import java.util.stream.Collectors;
@ -51,15 +55,17 @@ public class DescriptionTemplateXmlMigrationService {
private final ConventionService conventionService;
private final XmlHandlingService xmlHandlingService;
private final QueryFactory queryFactory;
private final MigrationTools migrationTools;
private static final int PageSize = 500;
private static final boolean TestMode = false;
public DescriptionTemplateXmlMigrationService(EntityManager entityManager, ConventionService conventionService, XmlHandlingService xmlHandlingService, QueryFactory queryFactory) {
public DescriptionTemplateXmlMigrationService(EntityManager entityManager, ConventionService conventionService, XmlHandlingService xmlHandlingService, QueryFactory queryFactory, MigrationTools migrationTools) {
this.entityManager = entityManager;
this.conventionService = conventionService;
this.xmlHandlingService = xmlHandlingService;
this.queryFactory = queryFactory;
this.migrationTools = migrationTools;
}
public void migrate() throws IOException, NoSuchFieldException, IllegalAccessException, JAXBException, ParserConfigurationException, InstantiationException, SAXException, InvalidApplicationException, TransformerException, URISyntaxException {
@ -223,7 +229,7 @@ public class DescriptionTemplateXmlMigrationService {
if (persist.getVisible() != null && !this.conventionService.isListNullOrEmpty(persist.getVisible().getRules())) {
data.setVisibilityRules(new ArrayList<>());
for (Rule fieldPersist : persist.getVisible().getRules()) {
data.getVisibilityRules().add(this.buildRuleEntity(fieldPersist));
data.getVisibilityRules().add(this.buildRuleEntity(fieldPersist, data.getData().getFieldType()));
}
}
return data;
@ -392,13 +398,50 @@ public class DescriptionTemplateXmlMigrationService {
}
private @NotNull RuleEntity buildRuleEntity(Rule persist) {
private @NotNull RuleEntity buildRuleEntity(Rule persist, FieldType fieldType) {
RuleEntity data = new RuleEntity();
if (persist == null)
return data;
String textValue = persist.getValue();
if (textValue == null || textValue.isEmpty()) return data;
data.setTarget(persist.getTarget());
data.setValue(persist.getValue());
switch (fieldType){
case FREE_TEXT, TEXT_AREA, RICH_TEXT_AREA, RADIO_BOX -> data.setTextValue(textValue.trim());
case CHECK_BOX, BOOLEAN_DECISION -> data.setTextValue(textValue.trim().toLowerCase(Locale.ROOT));
case DATE_PICKER -> {
Instant instant = null;
if(!this.conventionService.isNullOrEmpty(textValue)) {
try {
instant = Instant.parse(textValue);
} catch (DateTimeParseException ex) {
instant = LocalDate.parse(textValue).atStartOfDay().toInstant(ZoneOffset.UTC);
}
}
data.setDateValue(instant);
}
case SELECT -> {
if(!this.conventionService.isNullOrEmpty(textValue)) {
String[] valuesParsed = migrationTools.tryParseJsonAsObjectString(String[].class, textValue);
data.setTextListValue(valuesParsed == null ? List.of(textValue) : Arrays.stream(valuesParsed).toList());
}
}
case DATASET_IDENTIFIER, VALIDATION -> {
if(!this.conventionService.isNullOrEmpty(textValue)) {
eu.eudat.commons.types.descriptiontemplate.ExternalIdentifierEntity externalIdentifierEntity = migrationTools.tryParseJsonAsObjectString(eu.eudat.commons.types.descriptiontemplate.ExternalIdentifierEntity.class, textValue);
if (externalIdentifierEntity == null) throw new MyApplicationException("Could not parse dataset External Identifier : " + textValue);
data.setExternalIdentifier(externalIdentifierEntity);
}
}
case UPLOAD -> throw new NotSupportedException("Upload validator not supported");
case CURRENCY -> throw new NotSupportedException("Currency validator not supported");
case TAGS -> throw new NotSupportedException("Tags validator not supported");
case INTERNAL_ENTRIES_DMPS -> throw new NotSupportedException("INTERNAL_ENTRIES_DMPS validator not supported");
case INTERNAL_ENTRIES_DESCRIPTIONS -> throw new NotSupportedException("INTERNAL_ENTRIES_DESCRIPTIONS validator not supported");
case REFERENCE_TYPES -> throw new NotSupportedException("REFERENCE_TYPES validator not supported");
default -> throw new MyApplicationException("unrecognized type " + fieldType);
}
return data;
}
private @NotNull MultiplicityEntity buildMultiplicityEntity(Multiplicity persist) {

View File

@ -100,7 +100,7 @@ public class DmpMigrationService {
DataManagementPlan model = new DataManagementPlan();
model.fromDataModel(item);
List<DMP> itemGroupDmps = groupDmpMap.get(item.getGroupId());
DMP currentVersionDmp = itemGroupDmps.stream().max(Comparator.comparing(DMP::getVersion)).orElseThrow();
DMP currentVersionDmp = itemGroupDmps.stream().filter(x-> DmpStatus.Finalized.getValue().equals(x.getStatus())).max(Comparator.comparing(DMP::getVersion)).orElse(null);
DmpPropertiesEntity dmpProperties = new DmpPropertiesEntity();
dmpProperties.setDmpBlueprintValues(new ArrayList<>());
@ -124,7 +124,16 @@ public class DmpMigrationService {
}
data.setGroupId(model.getGroupId());
data.setVersion((short) model.getVersion());
data.setVersionStatus(currentVersionDmp.getId().equals(item.getId()) ? DmpVersionStatus.Current: DmpVersionStatus.Previous);
if (currentVersionDmp != null && currentVersionDmp.getId().equals(item.getId())){
data.setVersionStatus(DmpVersionStatus.Current);
} else {
if (DmpStatus.Finalized.getValue().equals(item.getStatus())){
if (currentVersionDmp == null) throw new MyApplicationException("Found Finalized Dmp out of the group ");
data.setVersionStatus(DmpVersionStatus.Previous);
} else {
data.setVersionStatus(DmpVersionStatus.NotFinalized);
}
}
if (model.getCreated() != null)
data.setCreatedAt(model.getCreated().toInstant());
if (model.getModified() != null)
@ -170,24 +179,25 @@ public class DmpMigrationService {
}
if (data.getCreatorId() == null){
throw new MyApplicationException("Migration skipped creator not found " + item.getId());
} else {
boolean shouldCreateOwner = item.getUsers() == null || item.getUsers().stream().noneMatch(x-> x.getUser() != null && data.getCreatorId().equals(x.getUser().getId()) && DmpUserRole.Owner.getValue().equals(x.getRole().shortValue()));
if (shouldCreateOwner) {
DmpUserEntity dmpUserEntity = new DmpUserEntity();
dmpUserEntity.setId(item.getId());
dmpUserEntity.setDmpId(item.getId());
dmpUserEntity.setUserId(data.getCreatorId());
dmpUserEntity.setRole(DmpUserRole.Owner);
dmpUserEntity.setCreatedAt(data.getCreatedAt());
dmpUserEntity.setUpdatedAt(data.getCreatedAt());
dmpUserEntity.setIsActive(IsActive.Active);
this.entityManager.persist(dmpUserEntity);
}
}
this.entityManager.persist(data);
this.entityManager.flush();
boolean shouldCreateOwner = item.getUsers() == null || item.getUsers().stream().noneMatch(x-> x.getUser() != null && data.getCreatorId().equals(x.getUser().getId()) && DmpUserRole.Owner.getValue().equals(x.getRole().shortValue()));
if (shouldCreateOwner) {
DmpUserEntity dmpUserEntity = new DmpUserEntity();
dmpUserEntity.setId(UUID.randomUUID());
dmpUserEntity.setDmpId(data.getId());
dmpUserEntity.setUserId(data.getCreatorId());
dmpUserEntity.setRole(DmpUserRole.Owner);
dmpUserEntity.setCreatedAt(data.getCreatedAt());
dmpUserEntity.setUpdatedAt(data.getCreatedAt());
dmpUserEntity.setIsActive(IsActive.Active);
this.entityManager.persist(dmpUserEntity);
this.entityManager.flush();
}
licenseIdByName = this.migrateLicense(item, model, licenseIdByName, referenceTypeFieldsByDmpBlueprintId.getOrDefault(data.getBlueprintId(), null));
this.migrateOrganizations(item, referenceTypeFieldsByDmpBlueprintId.getOrDefault(data.getBlueprintId(), null));
this.migrateResearchers(item, referenceTypeFieldsByDmpBlueprintId.getOrDefault(data.getBlueprintId(), null));

View File

@ -0,0 +1,95 @@
package eu.old.eudat.migration;
import eu.eudat.commons.JsonHandlingService;
import eu.eudat.convention.ConventionService;
import org.apache.commons.lang3.StringEscapeUtils;
import org.springframework.stereotype.Service;
@Service
public class MigrationTools {
private final JsonHandlingService jsonHandlingService;
private final ConventionService conventionService;
public MigrationTools(JsonHandlingService jsonHandlingService, ConventionService conventionService) {
this.jsonHandlingService = jsonHandlingService;
this.conventionService = conventionService;
}
public <T> T tryParseJsonAsObjectString(Class<T> type, String value){
T item = this.jsonHandlingService.fromJsonSafe(type, value);
if (item == null) item = this.jsonHandlingService.fromJsonSafe(type, StringEscapeUtils.unescapeJava(value));
if (item == null) item = this.jsonHandlingService.fromJsonSafe(type, StringEscapeUtils.unescapeJson(value));
if (item == null) {
String newValue = StringEscapeUtils.unescapeJava(value);
newValue = newValue.trim().replace("[\"{", "[{");
newValue = newValue.trim().replace("}\"]", "}]");
newValue = newValue.trim().replace("}\", \"{", "}, {");
newValue = newValue.trim().replace("}\",\"{", "},{");
newValue = newValue.trim().replace(", \"{", ", {");
newValue = newValue.trim().replace(",\"{", ",{");
newValue = newValue.trim().replace("}\",", "},");
while (!this.conventionService.isNullOrEmpty(newValue) && newValue.startsWith("\"")) newValue = newValue.substring(1);
while (!this.conventionService.isNullOrEmpty(newValue) && newValue.endsWith("\"")) newValue = newValue.substring(0, newValue.length() - 1);
item = this.jsonHandlingService.fromJsonSafe(type, newValue);
}
if (item == null) {
String newValue = StringEscapeUtils.unescapeJson(value);
newValue = newValue.trim().replace("[\"{", "[{");
newValue = newValue.trim().replace("}\"]", "}]");
newValue = newValue.trim().replace("}\", \"{", "}, {");
newValue = newValue.trim().replace("}\",\"{", "},{");
newValue = newValue.trim().replace(", \"{", ", {");
newValue = newValue.trim().replace(",\"{", ",{");
newValue = newValue.trim().replace("}\",", "},");
while (!this.conventionService.isNullOrEmpty(newValue) && newValue.startsWith("\"")) newValue = newValue.substring(1);
while (!this.conventionService.isNullOrEmpty(newValue) && newValue.endsWith("\"")) newValue = newValue.substring(0, newValue.length() - 1);
item = this.jsonHandlingService.fromJsonSafe(type, newValue);
}
if (item == null) {
String newValue = value.trim().replace("\\", "");
newValue = newValue.trim().replace("[\"{", "[{");
newValue = newValue.trim().replace("}\"]", "}]");
newValue = newValue.trim().replace("}\", \"{", "}, {");
newValue = newValue.trim().replace("}\",\"{", "},{");
newValue = newValue.trim().replace(", \"{", ", {");
newValue = newValue.trim().replace(",\"{", ",{");
newValue = newValue.trim().replace("}\",", "},");
while (!this.conventionService.isNullOrEmpty(newValue) && newValue.startsWith("\"")) newValue = newValue.substring(1);
while (!this.conventionService.isNullOrEmpty(newValue) && newValue.endsWith("\"")) newValue = newValue.substring(0, newValue.length() - 1);
item = this.jsonHandlingService.fromJsonSafe(type, newValue);
}
if (item == null) {
String newValue = value.trim().replace("=", ":");
newValue = newValue.trim().replace("{", "{\"");
newValue = newValue.trim().replace("}", "\"}");
newValue = newValue.trim().replace(":", "\":\"");
newValue = newValue.trim().replace(", ", "\", \"");
newValue = newValue.trim().replace("}\", \"{", "}, {");
newValue = newValue.trim().replace("\"\"", "\"");
newValue = newValue.trim().replace(":\"null,", ":null,");
newValue = newValue.trim().replace(":\"null\",", ":null,");
newValue = newValue.trim().replace(":\"null\"", ":null");
newValue = newValue.trim().replace(":\"null}\"", ":null}");
newValue = newValue.trim().replace("https\":\"", "https:");
newValue = newValue.trim().replace("datarepo\":\"", "datarepo:");
item = this.jsonHandlingService.fromJsonSafe(type, newValue);
}
return item;
}
public String cleanTagString(String value){
value = value.trim().replace("=", ":");
value = value.trim().replace("{", "{\"");
value = value.trim().replace("}", "\"}");
value = value.trim().replace(":", "\":\"");
value = value.trim().replace(", ", "\", \"");
value = value.trim().replace("}\", \"{", "}, {");
return value;
}
}