Search in sources :

Example 1 with SelectMultiData

use of org.javarosa.core.model.data.SelectMultiData in project collect by opendatakit.

the class GeneralSelectMultiWidgetTest method getNextAnswer.

@NonNull
@Override
public SelectMultiData getNextAnswer() {
    List<SelectChoice> selectChoices = getSelectChoices();
    int selectedIndex = Math.abs(random.nextInt()) % selectChoices.size();
    SelectChoice selectChoice = selectChoices.get(selectedIndex);
    Selection selection = new Selection(selectChoice);
    return new SelectMultiData(ImmutableList.of(selection));
}
Also used : SelectMultiData(org.javarosa.core.model.data.SelectMultiData) SelectChoice(org.javarosa.core.model.SelectChoice) Selection(org.javarosa.core.model.data.helper.Selection) NonNull(android.support.annotation.NonNull)

Example 2 with SelectMultiData

use of org.javarosa.core.model.data.SelectMultiData in project javarosa by opendatakit.

the class TreeElement method populateTemplate.

// this method is for copying in the answers to an itemset. the template node of the destination
// is used for overall structure (including data types), and the itemset source node is used for
// raw data. note that data may be coerced across types, which may result in type conversion error
// very similar in structure to populate()
public void populateTemplate(TreeElement incoming, FormDef f) {
    if (this.isLeaf()) {
        IAnswerData value = incoming.getValue();
        if (value == null) {
            this.setValue(null);
        } else {
            Class classType = CompactInstanceWrapper.classForDataType(this.dataType);
            if (classType == null) {
                throw new RuntimeException("data type [" + value.getClass().getName() + "] not supported inside itemset");
            } else if (classType.isAssignableFrom(value.getClass()) && !(value instanceof SelectOneData || value instanceof SelectMultiData)) {
                this.setValue(value);
            } else {
                String textVal = RestoreUtils.xfFact.serializeData(value);
                IAnswerData typedVal = RestoreUtils.xfFact.parseData(textVal, this.dataType, this.getRef(), f);
                this.setValue(typedVal);
            }
        }
    } else {
        for (int i = 0; i < this.getNumChildren(); i++) {
            TreeElement child = this.getChildAt(i);
            List<TreeElement> newChildren = incoming.getChildrenWithName(child.getName());
            if (child.getMaskVar(MASK_REPEATABLE)) {
                for (int k = 0; k < newChildren.size(); k++) {
                    TreeElement template = f.getMainInstance().getTemplate(child.getRef());
                    TreeElement newChild = template.deepCopy(false);
                    newChild.setMult(k);
                    this.children.add(i + k + 1, newChild);
                    newChild.populateTemplate(newChildren.get(k), f);
                }
                i += newChildren.size();
            } else {
                child.populateTemplate(newChildren.get(0), f);
            }
        }
    }
}
Also used : IAnswerData(org.javarosa.core.model.data.IAnswerData) SelectOneData(org.javarosa.core.model.data.SelectOneData) SelectMultiData(org.javarosa.core.model.data.SelectMultiData) Constraint(org.javarosa.core.model.condition.Constraint)

Example 3 with SelectMultiData

use of org.javarosa.core.model.data.SelectMultiData in project javarosa by opendatakit.

the class SelectMultiDataTests method testNullData.

public void testNullData() {
    boolean exceptionThrown = false;
    SelectMultiData data = new SelectMultiData();
    data.setValue(firstTwo);
    try {
        data.setValue(null);
    } catch (NullPointerException e) {
        exceptionThrown = true;
    }
    assertTrue("SelectMultiData failed to throw an exception when setting null data", exceptionThrown);
    assertTrue("SelectMultiData overwrote existing value on incorrect input", data.getValue().equals(firstTwo));
}
Also used : SelectMultiData(org.javarosa.core.model.data.SelectMultiData)

Example 4 with SelectMultiData

use of org.javarosa.core.model.data.SelectMultiData in project javarosa by opendatakit.

the class XFormAnswerDataParser method getAnswerData.

public static IAnswerData getAnswerData(String text, int dataType, QuestionDef q) {
    String trimmedText = text.trim();
    if (trimmedText.length() == 0)
        trimmedText = null;
    switch(dataType) {
        case Constants.DATATYPE_NULL:
        case Constants.DATATYPE_UNSUPPORTED:
        case Constants.DATATYPE_TEXT:
        case Constants.DATATYPE_BARCODE:
        case Constants.DATATYPE_BINARY:
            return new StringData(text);
        case Constants.DATATYPE_INTEGER:
            try {
                return (trimmedText == null ? null : new IntegerData(Integer.parseInt(trimmedText)));
            } catch (NumberFormatException nfe) {
                return null;
            }
        case Constants.DATATYPE_LONG:
            try {
                return (trimmedText == null ? null : new LongData(Long.parseLong(trimmedText)));
            } catch (NumberFormatException nfe) {
                return null;
            }
        case Constants.DATATYPE_DECIMAL:
            try {
                return (trimmedText == null ? null : new DecimalData(Double.parseDouble(trimmedText)));
            } catch (NumberFormatException nfe) {
                return null;
            }
        case Constants.DATATYPE_CHOICE:
            Selection selection = getSelection(text, q);
            return (selection == null ? null : new SelectOneData(selection));
        case Constants.DATATYPE_CHOICE_LIST:
            return new SelectMultiData(getSelections(text, q));
        case Constants.DATATYPE_DATE_TIME:
            Date dt = (trimmedText == null ? null : DateUtils.parseDateTime(trimmedText));
            return (dt == null ? null : new DateTimeData(dt));
        case Constants.DATATYPE_DATE:
            Date d = (trimmedText == null ? null : DateUtils.parseDate(trimmedText));
            return (d == null ? null : new DateData(d));
        case Constants.DATATYPE_TIME:
            Date t = (trimmedText == null ? null : DateUtils.parseTime(trimmedText));
            return (t == null ? null : new TimeData(t));
        case Constants.DATATYPE_BOOLEAN:
            if (trimmedText == null) {
                return null;
            } else {
                if (trimmedText.equals("1")) {
                    return new BooleanData(true);
                }
                if (trimmedText.equals("0")) {
                    return new BooleanData(false);
                }
                return trimmedText.equals("t") ? new BooleanData(true) : new BooleanData(false);
            }
        case Constants.DATATYPE_GEOPOINT:
            if (trimmedText == null) {
                return new GeoPointData();
            }
            try {
                UncastData uncast = new UncastData(trimmedText);
                // silly...
                GeoPointData gp = new GeoPointData();
                return gp.cast(uncast);
            } catch (Exception e) {
                return null;
            }
        case Constants.DATATYPE_GEOSHAPE:
            if (trimmedText == null) {
                return new GeoShapeData();
            }
            try {
                UncastData uncast = new UncastData(trimmedText);
                // silly...
                GeoShapeData gs = new GeoShapeData();
                return gs.cast(uncast);
            } catch (Exception e) {
                return null;
            }
        case Constants.DATATYPE_GEOTRACE:
            if (trimmedText == null) {
                return new GeoTraceData();
            }
            try {
                UncastData uncast = new UncastData(trimmedText);
                // silly...
                GeoTraceData gl = new GeoTraceData();
                return gl.cast(uncast);
            } catch (Exception e) {
                return null;
            }
        default:
            return new UncastData(trimmedText);
    }
}
Also used : SelectOneData(org.javarosa.core.model.data.SelectOneData) Selection(org.javarosa.core.model.data.helper.Selection) IntegerData(org.javarosa.core.model.data.IntegerData) GeoPointData(org.javarosa.core.model.data.GeoPointData) LongData(org.javarosa.core.model.data.LongData) Date(java.util.Date) DecimalData(org.javarosa.core.model.data.DecimalData) BooleanData(org.javarosa.core.model.data.BooleanData) GeoTraceData(org.javarosa.core.model.data.GeoTraceData) SelectMultiData(org.javarosa.core.model.data.SelectMultiData) DateData(org.javarosa.core.model.data.DateData) GeoShapeData(org.javarosa.core.model.data.GeoShapeData) DateTimeData(org.javarosa.core.model.data.DateTimeData) TimeData(org.javarosa.core.model.data.TimeData) UncastData(org.javarosa.core.model.data.UncastData) DateTimeData(org.javarosa.core.model.data.DateTimeData) StringData(org.javarosa.core.model.data.StringData)

Example 5 with SelectMultiData

use of org.javarosa.core.model.data.SelectMultiData in project javarosa by opendatakit.

the class FormEntryPrompt method getAnswerText.

public String getAnswerText() {
    IAnswerData data = this.getAnswerValue();
    if (data == null)
        return null;
    else {
        String text;
        // and multi-selects.
        if (data instanceof SelectOneData) {
            text = this.getSelectItemText((Selection) data.getValue());
        } else if (data instanceof SelectMultiData) {
            StringBuilder b = new StringBuilder();
            List<Selection> values = (List<Selection>) data.getValue();
            for (Selection value : values) {
                b.append(this.getSelectItemText(value)).append(" ");
            }
            text = b.toString();
        } else {
            text = data.getDisplayText();
        }
        if (getControlType() == Constants.CONTROL_SECRET) {
            StringBuilder b = new StringBuilder();
            for (int i = 0; i < text.length(); ++i) {
                b.append("*");
            }
            text = b.toString();
        }
        return text;
    }
}
Also used : IAnswerData(org.javarosa.core.model.data.IAnswerData) SelectOneData(org.javarosa.core.model.data.SelectOneData) SelectMultiData(org.javarosa.core.model.data.SelectMultiData) Selection(org.javarosa.core.model.data.helper.Selection) ArrayList(java.util.ArrayList) List(java.util.List) ConstraintHint(org.javarosa.core.model.condition.pivot.ConstraintHint) Constraint(org.javarosa.core.model.condition.Constraint)

Aggregations

SelectMultiData (org.javarosa.core.model.data.SelectMultiData)18 Selection (org.javarosa.core.model.data.helper.Selection)14 ArrayList (java.util.ArrayList)10 SelectOneData (org.javarosa.core.model.data.SelectOneData)8 List (java.util.List)7 SelectChoice (org.javarosa.core.model.SelectChoice)7 Constraint (org.javarosa.core.model.condition.Constraint)5 IAnswerData (org.javarosa.core.model.data.IAnswerData)5 DateData (org.javarosa.core.model.data.DateData)3 DateTimeData (org.javarosa.core.model.data.DateTimeData)3 SuppressLint (android.annotation.SuppressLint)2 Date (java.util.Date)2 QuestionDef (org.javarosa.core.model.QuestionDef)2 EvaluationContext (org.javarosa.core.model.condition.EvaluationContext)2 ConstraintHint (org.javarosa.core.model.condition.pivot.ConstraintHint)2 BooleanData (org.javarosa.core.model.data.BooleanData)2 DecimalData (org.javarosa.core.model.data.DecimalData)2 GeoPointData (org.javarosa.core.model.data.GeoPointData)2 GeoShapeData (org.javarosa.core.model.data.GeoShapeData)2 GeoTraceData (org.javarosa.core.model.data.GeoTraceData)2