package org.activityinfo.core.shared.importing.strategy; import com.google.common.base.Objects; import org.activityinfo.core.shared.type.converter.ConverterFactory; import org.activityinfo.model.type.FieldTypeClass; import org.activityinfo.model.formTree.FormTree; import org.activityinfo.i18n.shared.I18N; import java.util.Arrays; import java.util.List; import java.util.Map; public class GeographicPointImportStrategy implements FieldImportStrategy { static final TargetSiteId LATITUDE = new TargetSiteId("latitude"); static final TargetSiteId LONGITUDE = new TargetSiteId("longitude"); private final ConverterFactory converterFactory; public GeographicPointImportStrategy(ConverterFactory converterFactory) { this.converterFactory = converterFactory; } @Override public boolean accept(FormTree.Node fieldNode) { return fieldNode.getTypeClass() == FieldTypeClass.GEOGRAPHIC_POINT; } @Override public List<ImportTarget> getImportSites(FormTree.Node node) { return Arrays.asList( latitudeTarget(node), longitudeTarget(node)); } private ImportTarget longitudeTarget(FormTree.Node node) { return new ImportTarget(node.getField(), LONGITUDE, I18N.CONSTANTS.longitude(), node.getDefiningFormClass().getId()); } private ImportTarget latitudeTarget(FormTree.Node node) { return new ImportTarget(node.getField(), LATITUDE, I18N.CONSTANTS.latitude(), node.getDefiningFormClass().getId()); } @Override public FieldImporter createImporter(FormTree.Node node, Map<TargetSiteId, ColumnAccessor> mappings) { ColumnAccessor sourceColumns[] = new ColumnAccessor[] { Objects.firstNonNull(mappings.get(LATITUDE), MissingColumn.INSTANCE), Objects.firstNonNull(mappings.get(LONGITUDE), MissingColumn.INSTANCE) }; ImportTarget targets[] = new ImportTarget[] { latitudeTarget(node), longitudeTarget(node) }; return new GeographicPointImporter(node.getFieldId(), sourceColumns, targets, converterFactory.getCoordinateNumberFormatter()); } }