You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
argos/dmp-backend/web/src/main/java/eu/eudat/logic/utilities/helpers/FieldFactory.java

64 lines
2.6 KiB
Java

package eu.eudat.logic.utilities.helpers;
import eu.eudat.models.data.components.commons.datafield.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.lang.reflect.Modifier;
import java.util.Map;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class FieldFactory {
private static final Logger logger = LoggerFactory.getLogger(FieldFactory.class);
private static final Map<String, Class<? extends FieldData>> fieldMap = Stream.of(new Object[][]{
{"combobox", ComboBoxData.class},
{"autocomplete", AutoCompleteData.class},
{"wordlist", WordListData.class},
{"internalDmpEntities", InternalDmpEntitiesData.class},
{"researchers", ResearcherData.class},
{"datasets", DatasetsAutoCompleteData.class},
{"dmps", DMPsAutoCompleteData.class},
{"booleanDecision", BooleanDecisionData.class},
{"radiobox", RadioBoxData.class},
{"checkBox", CheckBoxData.class},
{"freetext", FreeTextData.class},
{"textarea", TextAreaData.class},
{"richTextarea", RichTextAreaData.class},
{"upload", UploadData.class},
{"datePicker", DatePickerData.class},
{"externalDatasets", ExternalDatasetsData.class},
{"dataRepositories", DataRepositoriesData.class},
{"pubRepositories", DataRepositoriesData.class},
{"journalRepositories", DataRepositoriesData.class},
{"taxonomies", TaxonomiesData.class},
{"licenses", LicensesData.class},
{"publications", PublicationsData.class},
{"registries", RegistriesData.class},
{"services", ServicesData.class},
{"tags", TagsData.class},
{"organizations", OrganizationsData.class},
{"datasetIdentifier", DatasetIdentifierData.class},
{"currency", CurrencyData.class},
{"validation", ValidationData.class}
}).collect(Collectors.toMap(data -> (String) data[0], data -> (Class<? extends FieldData>) data[1]));
public static FieldData fromData(String type, Object data, String subType) {
if (Modifier.isAbstract(fieldMap.get(type).getModifiers())) {
return fromData(subType, data);
} else {
return fromData(type, data);
}
}
public static FieldData fromData(String type, Object data) {
try {
return (FieldData) fieldMap.get(type).newInstance().fromData(data);
} catch (InstantiationException | IllegalAccessException e) {
logger.error(e.getMessage(), e);
}
return null;
}
}