use of org.openforis.idm.metamodel.CodeListItem in project collect by openforis.
the class CodeListManager method loadValidItems.
public <T extends CodeListItem> List<T> loadValidItems(Entity parent, CodeAttributeDefinition def) {
List<T> items = null;
CodeList list = def.getList();
if (StringUtils.isEmpty(def.getParentExpression())) {
items = loadRootItems(list);
} else {
CodeAttribute parentCodeAttribute = getCodeParent(parent, def);
if (parentCodeAttribute != null) {
CodeListItem parentCodeListItem = loadItemByAttribute(parentCodeAttribute);
if (parentCodeListItem != null) {
items = loadChildItems(parentCodeListItem);
}
}
}
Record record = parent.getRecord();
ModelVersion version = record.getVersion();
return filterApplicableItems(items, version);
}
use of org.openforis.idm.metamodel.CodeListItem in project collect by openforis.
the class CodeListManager method createPersistedItems.
protected List<PersistedCodeListItem> createPersistedItems(Collection<CodeListItem> items, int nextId, Integer parentItemId) {
List<PersistedCodeListItem> result = new ArrayList<PersistedCodeListItem>();
int sortOrder = 1;
for (CodeListItem item : items) {
PersistedCodeListItem persistedChildItem = PersistedCodeListItem.fromItem(item);
persistedChildItem.setParentId(parentItemId);
int id = nextId++;
persistedChildItem.setSystemId(id);
persistedChildItem.setSortOrder(sortOrder++);
result.add(persistedChildItem);
List<PersistedCodeListItem> temp = createPersistedItems(item.getChildItems(), nextId, id);
nextId += temp.size();
result.addAll(temp);
}
return result;
}
use of org.openforis.idm.metamodel.CodeListItem in project collect by openforis.
the class CodeListManager method findValidItems.
public List<CodeListItem> findValidItems(Entity parent, CodeAttributeDefinition defn, String... codes) {
List<CodeListItem> result = new ArrayList<CodeListItem>();
List<CodeListItem> assignableItems = loadValidItems(parent, defn);
if (!assignableItems.isEmpty()) {
Record record = parent.getRecord();
ModelVersion version = record.getVersion();
for (String code : codes) {
CodeListItem item = findCodeListItem(assignableItems, code, version);
if (item != null) {
result.add(item);
}
}
}
return result;
}
use of org.openforis.idm.metamodel.CodeListItem 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;
}
use of org.openforis.idm.metamodel.CodeListItem in project collect by openforis.
the class CodeListImagesImportTask method execute.
@Override
protected void execute() throws Throwable {
Enumeration<? extends ZipEntry> entries = zipFile.entries();
while (entries.hasMoreElements()) {
ZipEntry entry = entries.nextElement();
String entryName = entry.getName();
if (CodeListImageEntry.isValidEntry(entryName)) {
CodeListImageEntry codeListImageEntry = CodeListImageEntry.parseEntryName(entryName);
CodeList codeList = survey.getCodeListById(codeListImageEntry.getListId());
if (codeList != null) {
CodeListItem item = codeListManager.loadItem(codeList, codeListImageEntry.getItemId());
if (item != null && item instanceof PersistedCodeListItem) {
byte[] content = IOUtils.toByteArray(zipFile.getInputStream(entry));
codeListManager.saveImageContent((PersistedCodeListItem) item, new FileWrapper(content, codeListImageEntry.getFileName()));
} else {
log().warn("Error restoring code list image file : " + entry.getName());
}
}
}
}
}
Aggregations