64 lines
2.6 KiB
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;
|
|
}
|
|
|
|
}
|