/** * Converts a Object to a {@link JsonNode}. This is a default implementation, but it will likely * need to be overridden by implementing classes depending on the specifics of the source Object. * @param field - {@link SimpleField} * @param value - Source {@link Object} to be converted * @return {@link JsonNode} representation of {@link Object}. */ protected JsonNode translate(SimpleField field, Object value) { return toJson(field.getType(), value); }
private void ensureIdField(EntitySchema schema) { LOGGER.debug("ensureIdField: begin"); SimpleField idField; FieldTreeNode field; try { field = schema.resolve(DocTranslator.ID_PATH); } catch (Error e) { field = null; } if (field == null) { LOGGER.debug("Adding _id field"); idField = new SimpleField(ID_STR, StringType.TYPE); schema.getFields().addNew(idField); } else if (!(field instanceof SimpleField)) { throw Error.get(MongoMetadataConstants.ERR_INVALID_ID); } LOGGER.debug("ensureIdField: end"); }
private static boolean required(SimpleField f) { List<FieldConstraint> constraints = f.getConstraints(); if (constraints != null) { for (FieldConstraint c : constraints) { if (c instanceof RequiredConstraint) { return ((RequiredConstraint) c).getValue(); } else if (c instanceof IdentityConstraint) { return ((IdentityConstraint) c).isValidForFieldType(f.getType()); } else if (c instanceof ArrayElementIdConstraint) { return ((ArrayElementIdConstraint) c).isValidForFieldType(f.getType()); } } } return false; }
private Field parseSimpleField(String name, String type) { SimpleField field = new SimpleField(name); Type t = typeResolver.getType(type); if (t == null) { throw Error.get(MetadataConstants.ERR_INVALID_TYPE, type); } field.setType(t); return field; }
public static JsonNode generate(Factory factory, SimpleField field, EntityMetadata md) { ValueGeneratorSupport vgs = factory.getValueGenerator(field.getValueGenerator(), md.getDataStore().getBackend()); if (vgs == null) { throw new IllegalArgumentException("Cannot generate value for " + field.getFullPath()); } Object value = vgs.generateValue(md, field.getValueGenerator()); return field.getType().toJson(factory.getNodeFactory(), value); }
SimpleField newField = new SimpleField(field.getName(), field.getType()); newField.shallowCopyFrom(field); dest.put(newField); } else if (field instanceof ObjectField) {
private SimpleField parseSimpleField(String name, String type, T object) { SimpleField field = new SimpleField(name); Type t = typeResolver.getType(type); if (t == null) { throw Error.get(MetadataConstants.ERR_INVALID_TYPE, type); } field.setType(t); T vg = getObjectProperty(object, STR_VALUE_GENERATOR); if (vg != null) { field.setValueGenerator(parseValueGenerator(vg)); } parseProperties(field, object, SIMPLE_FIELD_ELEMENTS); return field; }
@Override public boolean isIncluded(SimpleField field) { List<FieldConstraint> constraints = field.getConstraints(); if (constraints != null) { for (FieldConstraint x : constraints) { if (x instanceof ArrayElementIdConstraint) { return true; } } } return false; } });
private void getIdentityFields(TreeMap<Path, Field> fieldMap, FieldCursor cursor) { if (cursor.firstChild()) { do { FieldTreeNode fn = cursor.getCurrentNode(); if (fn instanceof ObjectField) { getIdentityFields(fieldMap, cursor); } else if (fn instanceof SimpleField) { SimpleField f = (SimpleField) fn; for (FieldConstraint fc : f.getConstraints()) { if (fc instanceof IdentityConstraint) { fieldMap.put(f.getFullPath(), f); break; } } } } while (cursor.nextSibling()); cursor.parent(); } } }
@Override public FieldTreeNode resolve(Path p, int level) { if (p.numSegments() == level) { return this; } else if (Path.PARENT.equals(p.head(level))) { return this.getParent().resolve(p, level + 1); } if (p.head(level).equals(Path.THIS)) { return this.resolve(p,level+1); } else { throw Error.get(MetadataConstants.ERR_INVALID_FIELD_REFERENCE, p.head(level) + " in " + p.toString()); } }
ValueGenerator generator = field.getValueGenerator(); if (generator != null) { Path p = cursor.getCurrentPath();
@Override public FieldTreeNode resolve(Path p, int level) { if (p.numSegments() == level) { return this; } else if (Path.PARENT.equals(p.head(level))) { return this.getParent().resolve(p, level + 1); } else { throw Error.get(MetadataConstants.ERR_INVALID_FIELD_REFERENCE); } }
public static JsonNode generate(Factory factory, SimpleField field, EntityMetadata md) { ValueGeneratorSupport vgs = factory.getValueGenerator(field.getValueGenerator(), md.getDataStore().getBackend()); if (vgs == null) { throw new IllegalArgumentException("Cannot generate value for " + field.getFullPath()); } Object value = vgs.generateValue(md, field.getValueGenerator()); return field.getType().toJson(factory.getNodeFactory(), value); }
try { if (field instanceof SimpleField) { SimpleField newField = new SimpleField(field.getName(), field.getType()); newField.shallowCopyFrom(field); dest.put(newField); } else if (field instanceof ObjectField) {
private SimpleField parseSimpleField(String name, String type, T object) { SimpleField field = new SimpleField(name); Type t = typeResolver.getType(type); if (t == null) { throw Error.get(MetadataConstants.ERR_INVALID_TYPE, type); } field.setType(t); T vg = getObjectProperty(object, STR_VALUE_GENERATOR); if (vg != null) { field.setValueGenerator(parseValueGenerator(vg)); } parseProperties(field, object, SIMPLE_FIELD_ELEMENTS); return field; }
/** * Returns a map where the key is the array field name, and value is a * List<Path> listing the identity fields for that array */ public Map<Path, List<Path>> getArrayIdentities() { FieldCursor cursor = getFieldCursor(); Map<Path, List<Path>> idMap = new HashMap<>(); while (cursor.next()) { FieldTreeNode fn = cursor.getCurrentNode(); if (fn instanceof SimpleField) { for (FieldConstraint fc : ((SimpleField) fn).getConstraints()) { if (fc instanceof ArrayElementIdConstraint) { Path fieldName = cursor.getCurrentPath(); int lastAny = findLastAnyIndex(fieldName); if (lastAny != -1) { Path arrayName = fieldName.prefix(lastAny); Path idName = fieldName.suffix(-(lastAny + 1)); List<Path> ids = idMap.get(arrayName); if (ids == null) { idMap.put(arrayName, ids = new ArrayList<>()); } ids.add(idName); } } } } } return idMap; }
@Override public FieldTreeNode resolve(Path p, int level) { if (p.numSegments() == level) { return this; } else if (Path.PARENT.equals(p.head(level))) { return this.getParent().resolve(p, level + 1); } if (p.head(level).equals(Path.THIS)) { return this.resolve(p,level+1); } else { throw Error.get(MetadataConstants.ERR_INVALID_FIELD_REFERENCE, p.head(level) + " in " + p.toString()); } }
ValueGenerator generator = field.getValueGenerator(); if (generator != null) { Path p = cursor.getCurrentPath();
@Override public boolean isIncluded(SimpleField field) { return field.getType().equals(UIDType.TYPE); } });
private static boolean required(SimpleField f) { List<FieldConstraint> constraints = f.getConstraints(); if (constraints != null) { for (FieldConstraint c : constraints) { if (c instanceof RequiredConstraint) { return ((RequiredConstraint) c).getValue(); } else if (c instanceof IdentityConstraint) { return ((IdentityConstraint) c).isValidForFieldType(f.getType()); } else if (c instanceof ArrayElementIdConstraint) { return ((ArrayElementIdConstraint) c).isValidForFieldType(f.getType()); } } } return false; }