use of org.openforis.idm.model.NumberValue in project collect by openforis.
the class CSVValueFormatter method format.
public String format(AttributeDefinition defn, Value value) {
if (value == null) {
return "";
} else if (value instanceof BooleanValue) {
return ((BooleanValue) value).getValue().toString();
} else if (value instanceof Code) {
CodeListService codeListService = defn.getSurvey().getContext().getCodeListService();
CodeList list = ((CodeAttributeDefinition) defn).getList();
if (codeListService.hasQualifiableItems(list)) {
return String.format("%s: %s", ((Code) value).getCode(), ((Code) value).getQualifier());
} else {
return ((Code) value).getCode();
}
} else if (value instanceof Coordinate) {
return value.toString();
} else if (value instanceof Date) {
Date date = (Date) value;
return String.format("%d/%d/%d", ((Date) value).getDay(), ((Date) value).getMonth(), date.getYear());
} else if (value instanceof File) {
return ((File) value).getFilename();
} else if (value instanceof NumberValue) {
Number val = ((NumberValue<?>) value).getValue();
NumberFormat numberFormat = NumberFormat.getInstance(Locale.ENGLISH);
String formattedVal = numberFormat.format(val);
return formattedVal;
} else if (value instanceof NumericRange) {
Number from = ((NumericRange<?>) value).getFrom();
Number to = ((NumericRange<?>) value).getFrom();
String format;
if (value instanceof IntegerRange) {
format = "%d-%d";
} else {
format = "%f-%f";
}
String formattedValue = String.format(Locale.ENGLISH, format, from, to);
return formattedValue;
} else if (value instanceof TextValue) {
return ((TextValue) value).getValue();
} else if (value instanceof Time) {
Time time = (Time) value;
return String.format("%d:%d", time.getHour(), time.getMinute());
} else
throw new IllegalArgumentException("Unsupported attribute value type: " + value.getClass().getName());
}
use of org.openforis.idm.model.NumberValue in project collect by openforis.
the class CollectEarthGridTemplateGenerator method validateCell.
/**
* Checks if a value can be used as the input for an attribute
* @param attributeDefinition The attribute that we want to check the value against
* @param value The value that should be checked
* @return True if the value can be used in the attribute. False otherwise (for instance trying to use a string "abc" as the input for a Number attribute
*/
private String validateCell(CollectSurvey survey, AttributeDefinition attributeDefinition, String value) {
try {
// By creating the value using hte attribute definitoon a validation is performed
Value valueCreated = attributeDefinition.createValue(value);
if (attributeDefinition.isAlwaysRequired() && StringUtils.isBlank(value)) {
return String.format("The attribute %s is marekd as \"always required\". The value in the cell is empty!", attributeDefinition.getLabel(NodeLabel.Type.INSTANCE));
}
if (isEpsg4326SRS(survey) && attributeDefinition.getName().equals(LAT_COORDINATE)) {
double lat = ((NumberValue<Number>) valueCreated).getValue().doubleValue();
if (lat < -90 || lat > 90) {
return "The latitude of a plot must be between -90 and 90 degrees!";
}
}
if (isEpsg4326SRS(survey) && attributeDefinition.getName().equals(LONG_COORDINATE)) {
double longitude = ((NumberValue<Number>) valueCreated).getValue().doubleValue();
if (longitude < -180 || longitude > 180) {
return "The latitude of a plot must be between -180 and 180 degrees!";
}
}
// Make sure that the code used in a code-attribute is actually present on the codelist
if (attributeDefinition instanceof CodeAttributeDefinition) {
CodeAttributeDefinition cad = (CodeAttributeDefinition) attributeDefinition;
// IF IT IS A STRICT CODE LIST
if (!cad.isAllowUnlisted()) {
// Check that the code exists in the codelist
// Gets the level (in case of hierarchical codelists) that the attribute refers to. If it is a flat codelist then it is alway 0
int levelIndex = cad.getLevelIndex();
CodeListService codeListService = attributeDefinition.getSurvey().getContext().getCodeListService();
List<CodeListItem> items = codeListService.loadItems(cad.getList(), levelIndex + 1);
// Check one by one in the codes of the codelist assigned to the attribute if the value is present as a code!
for (CodeListItem codeListItem : items) {
if (codeListItem.getCode().equals(value)) {
// FOUND! All good, return null
return null;
}
}
return String.format("The code with value \"%s\" is not part of the codelist used by code %s ", value, attributeDefinition.getLabel(NodeLabel.Type.INSTANCE));
}
} else if (attributeDefinition instanceof CodeAttributeDefinition) {
}
} catch (Exception e) {
return String.format("The value \"%s\" cannot be used as a value for the attribute %s", value, attributeDefinition.getLabel(NodeLabel.Type.INSTANCE));
}
return null;
}
Aggregations