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> 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) 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; } }