package org.activityinfo.core.shared.importing.strategy;
import com.google.common.collect.Lists;
import org.activityinfo.model.resource.ResourceId;
import org.activityinfo.core.shared.criteria.FormClassSet;
import org.activityinfo.model.formTree.FieldPath;
import org.activityinfo.model.formTree.FormTree;
import java.util.List;
import java.util.Map;
/**
* Created by alex on 4/4/14.
*/
public class SingleClassTargetBuilder {
private final FormTree.Node rootField;
private final TargetCollector targetCollector;
public SingleClassTargetBuilder(FormTree.Node referenceField) {
rootField = referenceField;
targetCollector = new TargetCollector(referenceField);
}
public List<ImportTarget> getTargets() {
return targetCollector.getTargets();
}
public SingleClassImporter newImporter(Map<TargetSiteId, ColumnAccessor> mappings) {
List<ColumnAccessor> sourceColumns = Lists.newArrayList();
Map<FieldPath, Integer> referenceValues = targetCollector.getPathMap(mappings, sourceColumns);
List<FieldImporterColumn> fieldImporterColumns = targetCollector.fieldImporterColumns(mappings);
ResourceId rangeClassId = FormClassSet.of(rootField.getRange()).unique();
return new SingleClassImporter(rangeClassId, rootField.getField().isRequired(),
sourceColumns, referenceValues, fieldImporterColumns, rootField.getFieldId());
}
}