package org.activityinfo.core.shared.importing.strategy; import org.activityinfo.model.formTree.FormTree; import org.activityinfo.core.shared.type.converter.Converter; import org.activityinfo.core.shared.type.converter.ConverterFactory; import java.util.Collections; import java.util.List; import java.util.Map; /** * Imports a simple data field */ public class DataFieldImportStrategy implements FieldImportStrategy { public static final TargetSiteId VALUE = new TargetSiteId("value"); private final ConverterFactory converterFactory; public DataFieldImportStrategy(ConverterFactory converterFactory) { this.converterFactory = converterFactory; } @Override public boolean accept(FormTree.Node fieldNode) { return !fieldNode.isReference(); } @Override public List<ImportTarget> getImportSites(FormTree.Node node) { return Collections.singletonList(target(node)); } @Override public FieldImporter createImporter(FormTree.Node node, Map<TargetSiteId, ColumnAccessor> bindings) { ImportTarget requiredTarget = target(node); ColumnAccessor column = bindings.get(VALUE); if(column == null) { column = MissingColumn.INSTANCE; } Converter converter = converterFactory.createStringConverter(node.getTypeClass()); return new DataFieldImporter(column, requiredTarget, converter); } private ImportTarget target(FormTree.Node node) { return new ImportTarget(node.getField(), VALUE, node.getField().getLabel(), node.getDefiningFormClass().getId()); } }