protected void _getQueryPath(final QueryPath path) { if (parent != null) { parent._getQueryPath(path); path.add(parentKey); } }
private static void _findDirtyElements(Data data, List<QueryPath> results, QueryPath currentFrame) { if (data == null) { return; } Data flags = getDirtyFlags(data); if (flags != null && flags.size() > 0) { for (Data.Property p : flags) { QueryPath q = new QueryPath(); q.addAll(currentFrame); Key key = p.getWrappedKey(); q.add(key); results.add(q); } } for (Data.Property p : data) { if (p.getValueType().equals(Data.class) && p.getValue() != null) { QueryPath q = new QueryPath(); q.addAll(currentFrame); Key key = p.getWrappedKey(); q.add(key); _findDirtyElements((Data) p.getValue(), results, q); } } } public static Data getDirtyFlags(Data data) {
@Override public void remove() { impl.remove(); QueryPath path = getQueryPath(); path.add(current.getKey()); execChangeCallbacks(ChangeType.REMOVE, path); } };
/** * Flags the data at the provided path as dirty * * @param model * the DataModel containing the dirty data * @param qPath * the path to the dirty data */ protected void setDirtyFlag(DataModel model, QueryPath qPath) { QueryPath parent = qPath.subPath(0, qPath.size() - 1); QueryPath qPathDirty = new QueryPath(); qPathDirty.addAll(parent); qPathDirty.add(RUNTIME_ROOT); qPathDirty.add(DIRTY_PATH); ensureDirtyFlagPath(model.getRoot(), qPathDirty); Data flags = model.get(qPathDirty); flags.set(qPath.get(qPath.size() - 1), Boolean.TRUE); }
@Override public void remove() { impl.remove(); QueryPath path = getQueryPath(); path.add(current.getKey()); execChangeCallbacks(ChangeType.REMOVE, path); } };
public void remove(Key key) { // TODO probably need to add all of the other remove(type) methods map.remove(key); QueryPath path = getQueryPath(); path.add(key); execChangeCallbacks(ChangeType.REMOVE, path); }
private void put(Key key, Value value) { Value existing = map.put(key, value); ChangeType type = existing == null ? ChangeType.ADD : ChangeType.UPDATE; QueryPath path = getQueryPath(); path.add(key); execChangeCallbacks(type, path); }
@Override public QueryPath parse(final String path) { final QueryPath result = new QueryPath(); final String[] elements = path.split(PATH_SEPARATOR); for (String element : elements) { element = element.trim(); if (!element.isEmpty()) { Integer index = null; try { index = Integer.valueOf(element); } catch (final Exception e) { // do nothing } if (index == null) { result.add(new Data.StringKey(element)); } else { result.add(new Data.IntegerKey(index)); } } } return result; }
public QueryPath subPath(final int fromIndex, final int toIndex) { // TODO revamp this method to use subList once GWT issue 1791 is fixed final QueryPath result = new QueryPath(); for (int i = fromIndex; i < toIndex; i++) { result.add(this.get(i)); } return result; }
private void dirtyCheckField(FieldDescriptor fieldDescriptor, DataModel model){ QueryPath fieldPath = QueryPath.parse(fieldDescriptor.getFieldKey()); QueryPath qPathDirty = fieldPath.subPath(0, fieldPath.size() - 1); qPathDirty.add(ModelWidgetBindingSupport.RUNTIME_ROOT); qPathDirty.add(ModelWidgetBindingSupport.DIRTY_PATH); qPathDirty.add(fieldPath.get(fieldPath.size()-1)); Boolean dirty = false; if(ensureDirtyFlagPath(model.getRoot(), qPathDirty)){ dirty = model.get(qPathDirty); } if(dirty){ setIsDirty(true); fieldDescriptor.setDirty(true); } }
private Object getCrossFieldMinValue(DataModel model, QueryPath path, Metadata meta) { Object v = null; List<ConstraintMetadata> constraints = meta.getConstraints(); for (int i = 0; i < constraints.size(); i++) { ConstraintMetadata cons = constraints.get(i); if (cons.getMinValue() != null && cons.getMinValue().contains("../")) { QueryPath crossFieldPath = QueryPath.parse(path.toString()); String crossFieldKey = cons.getMinValue().substring(3); crossFieldPath.remove(crossFieldPath.size() - 1); crossFieldPath.add(new StringKey(crossFieldKey)); v = model.get(crossFieldPath); } } return v; }
private Object getCrossFieldMaxValue(DataModel model, QueryPath path, Metadata meta) { Object v = null; List<ConstraintMetadata> constraints = meta.getConstraints(); for (int i = 0; i < constraints.size(); i++) { ConstraintMetadata cons = constraints.get(i); if (cons.getMaxValue() != null && cons.getMaxValue().contains("../")) { QueryPath crossFieldPath = QueryPath.parse(path.toString()); String crossFieldKey = cons.getMinValue().substring(3); crossFieldPath.remove(crossFieldPath.size() - 1); crossFieldPath.add(new StringKey(crossFieldKey)); v = model.get(crossFieldPath); } } return v; }
if (s.equals(UtilConstants.IMPOSSIBLE_CHARACTERS)) { QueryPath path = new QueryPath(); path.add(new StringKey(element.get(0).toString())); addError(results, path, INVALID_VALUE); } else {
for (Map.Entry<QueryPath, Object> e : values.entrySet()) { QueryPath listPath = QueryPath.parse(e.getKey().toString()); listPath.add(Data.WILDCARD_KEY); values = model.query(listPath);
if (metadata.getDataType().equals(DataType.STRING)) { QueryPath translatedPath = fullPath.subPath(0, fullPath.size()-1); translatedPath.add(new Data.StringKey("_runtimeData")); translatedPath.add(new Data.StringKey((String)fullPath.get(fullPath.size() - 1).get())); translatedPath.add(new Data.StringKey("id-translation")); fieldPath = translatedPath.subPath(i, translatedPath.size());
if(!"_runtimeData".equals(p.getKey())){ QueryPath translationPath = new QueryPath(); translationPath.add(new Data.StringKey(qPath.toString())); translationPath.add(new Data.StringKey("_runtimeData")); translationPath.add(new Data.IntegerKey((Integer)p.getKey())); translationPath.add(new Data.StringKey("id-translation")); String translation = model.get(translationPath.toString()); String id = p.getValue().toString(); if(widget instanceof TranslatableValueWidget) { QueryPath translationPath = qPath.subPath(0, qPath.size()-1); translationPath.add(new Data.StringKey("_runtimeData")); translationPath.add(new Data.StringKey((String)qPath.get(qPath.size() - 1).get())); translationPath.add(new Data.StringKey("id-translation"));