public FieldValue getRecursiveValue(FieldPath path) { RecursiveIteratorHandler handler = new RecursiveIteratorHandler(); iterateNested(path, 0, handler); return handler.retVal; }
FieldPathIteratorHandler.ModificationStatus iterateSubset(int startPos, int endPos, FieldPath fieldPath, String variable, int nextPos, FieldPathIteratorHandler handler) { FieldPathIteratorHandler.ModificationStatus retVal = FieldPathIteratorHandler.ModificationStatus.NOT_MODIFIED; LinkedList<Integer> indicesToRemove = new LinkedList<Integer>(); for (int i = startPos; i <= endPos && i < values.size(); i++) { if (variable != null) { handler.getVariables().put(variable, new FieldPathIteratorHandler.IndexValue(i)); } FieldValue fv = values.get(i); FieldPathIteratorHandler.ModificationStatus status = fv.iterateNested(fieldPath, nextPos, handler); if (status == FieldPathIteratorHandler.ModificationStatus.REMOVED) { indicesToRemove.addFirst(i); retVal = FieldPathIteratorHandler.ModificationStatus.MODIFIED; } else if (status == FieldPathIteratorHandler.ModificationStatus.MODIFIED) { retVal = status; } } if (variable != null) { handler.getVariables().remove(variable); } for (Integer idx : indicesToRemove) { values.remove(idx.intValue()); } return retVal; }
wasModified = checkAndRemove(fieldPath.get(pos).getLookupKey(), val.iterateNested(fieldPath, pos + 1, handler), wasModified, keysToRemove); } else if (handler.createMissingPath()) { val = getDataType().getValueType().createFieldValue(); FieldPathIteratorHandler.ModificationStatus status = val.iterateNested(fieldPath, pos + 1, handler); if (status == FieldPathIteratorHandler.ModificationStatus.MODIFIED) { put((K)fieldPath.get(pos).getLookupKey(), (V)val); wasModified = checkAndRemove(f, f.iterateNested(fieldPath, pos + 1, handler), wasModified, keysToRemove); wasModified = checkAndRemove(entry.getKey(), entry.getValue().iterateNested(fieldPath, pos + 1, handler), wasModified, keysToRemove); FieldValue val = values.get(idx.getKey()); if (val != null) { wasModified = checkAndRemove(idx.getKey(), val.iterateNested(fieldPath, pos + 1, handler), wasModified, keysToRemove); wasModified = checkAndRemove(entry.getKey(), entry.getValue().iterateNested(fieldPath, pos + 1, handler), wasModified, keysToRemove); wasModified = checkAndRemove(entry.getKey(), entry.getKey().iterateNested(fieldPath, pos, handler), wasModified, keysToRemove); wasModified = checkAndRemove(entry.getKey(), entry.getKey().iterateNested(fieldPath, pos, handler), wasModified, keysToRemove);
FieldValue fieldVal = getFieldValue(fieldPath.get(pos).getFieldRef()); if (fieldVal != null) { FieldPathIteratorHandler.ModificationStatus status = fieldVal.iterateNested(fieldPath, pos + 1, handler); if (status == FieldPathIteratorHandler.ModificationStatus.REMOVED) { removeFieldValue(fieldPath.get(pos).getFieldRef()); FieldPathIteratorHandler.ModificationStatus status = newVal.iterateNested(fieldPath, pos + 1, handler); if (status == FieldPathIteratorHandler.ModificationStatus.MODIFIED) { setFieldValue(fieldPath.get(pos).getFieldRef(), newVal); for (Iterator<Map.Entry<Field, FieldValue>> iter = iterator(); iter.hasNext();) { Map.Entry<Field, FieldValue> entry = iter.next(); FieldPathIteratorHandler.ModificationStatus currStatus = entry.getValue().iterateNested(fieldPath, pos, handler); if (currStatus == FieldPathIteratorHandler.ModificationStatus.REMOVED) { fieldsToRemove.add(entry.getKey());