boolean isRelation = DataTypeEnum.RELATIONSHIP.equals(field.getDataType()); if (array) {
throw new IllegalMetaClassException("unknow datatype: " + getDataType().toString());
@Override public MetaField readObject(JsonNode node, String fieldName) throws JsonParseException, JsonMappingException, IOException { JsonNode typeNode = node.get("dataType"); if (typeNode == null || typeNode.getTextValue() == null) { logger.error("didn't found dataType in field"); throw new JsonParsingException("didn't found dataType in field"); } String dataTypeStr = typeNode.getTextValue(); MetaField.DataTypeEnum dataType = MetaField.DataTypeEnum.fromString(dataTypeStr); MetaField f; if (dataType == MetaField.DataTypeEnum.RELATIONSHIP) { f = mapper.readValue(node, MetaRelationship.class); } else { f = mapper.readValue(node, MetaAttribute.class); } if (f.getName() == null) { f.setName(fieldName); } return f; }
} else if (field.getDataType().equals(DataTypeEnum.JSON)) {
} else if (field.getDataType().equals(DataTypeEnum.JSON)) {
Assert.assertNotNull(getManifest); Assert.assertNotNull(getManifest.getFieldByName("versions")); Assert.assertNotNull(getManifest.getFieldByName("versions").getDataType().equals(DataTypeEnum.RELATIONSHIP)); MetaRelationship getRel = (MetaRelationship) getManifest.getFieldByName("versions"); Assert.assertNotNull(getRel.getRelationType() == RelationTypeEnum.Embedded);
MetaClass metaClass = givenEntity.getMetaClass(); MetaField field = metaClass.getFieldByName(fieldName); boolean isRelation = DataTypeEnum.RELATIONSHIP.equals(field.getDataType()); boolean array = CardinalityEnum.Many.equals(field.getCardinality()); boolean hasFoundField = foundEntity.hasField(fieldName);
if (value != null && metaField.getDataType().equals(DataTypeEnum.RELATIONSHIP)) { refMetaClass = ((MetaRelationship) metaField).getRefMetaClass(); MetaClass givenMeta = ((JsonEntity) value).getMetaClass();
private void validate(AggFuncEnum func2, AbstractSearchField aggreField) { if (aggreField != null) { CheckConditions.checkArgument(aggreField.getRootField().getDataType() != DataTypeEnum.RELATIONSHIP, "Invalid aggregation on referece type!"); CheckConditions.checkArgument(aggreField.getRootField().getDataType() != DataTypeEnum.JSON, "Invalid aggregation on json type!"); } switch (func2) { case AVG: //pass through case SUM: DataTypeEnum dte = aggreField.getRootField().getDataType(); CheckConditions.checkArgument( (dte == DataTypeEnum.LONG || dte == DataTypeEnum.INTEGER || dte == DataTypeEnum.DOUBLE), MessageFormat.format("{0} function could only applied on long/integer/double fields while field {1} is {2}", func2.getName(), aggreField.getFieldName(), dte.toString())); break; case COUNT: CheckConditions.checkArgument(aggreField == null, "count function can't have parameter. "); break; case MAX: //pass through case MIN: CheckConditions.checkArgument(aggreField != null, MessageFormat.format("{0} function must have a field parameter.", func2.getName())); break; default: break; } }
@Override protected DBObject buildModifyBody(BitSet arrayBits, DBObject rootObject, MetaClass rootMetaClass) { BasicDBObject embedObject = (BasicDBObject) EmbedDBObjectFilter.filter(entity.getId(), rootObject, rootMetaClass, null, helper); MetaField field = getField(); if (field.getCardinality() == CardinalityEnum.Many) { buildArrayBody(embedObject, field); } else if (field.getDataType().equals(DataTypeEnum.JSON)) { buildJsonBody(embedObject, field); } else { // non-array & non-json : replace the whole field buildRepalceBody(embedObject, field); } embedObject.put(InternalFieldEnum.MODIFIER.getDbName(), entity.getModifier()); embedObject.put(InternalFieldEnum.LASTMODIFIED.getDbName(), entity.getLastModified()); return buildSetBody(rootObject); }
@Override public boolean isIndexUsable(ISearchField field, MetaClass metaClass) { Collection<IndexInfo> indexes = metaClass.getIndexesOnField(field .getFieldName()); for (IndexInfo index : indexes) { String firstKey = index.getKeyList().get(0); MetaField metaField = metaClass.getFieldByName(firstKey); String physicalKeyName = getFieldValueName(metaField); if (metaField.getDataType().equals(DataTypeEnum.RELATIONSHIP)) { physicalKeyName = metaField.getFlattenValueDbName() + AbstractEntityIDHelper.DOT + InternalFieldEnum.ID.getDbName(); } if (physicalKeyName.equals(field.getFullDbName())) { return true; } } return false; }
@Override public boolean isIndexUsable(ISearchField field, MetaClass metaClass) { Collection<IndexInfo> indexes = metaClass.getIndexesOnField(field.getFieldName()); for (IndexInfo index : indexes) { String firstKey = index.getKeyList().get(0); MetaField metaField = metaClass.getFieldByName(firstKey); String physicalKeyName = getFieldValueName(metaField); if (metaField.getDataType().equals(DataTypeEnum.RELATIONSHIP)) { physicalKeyName = metaField.getValueDbName() + AbstractEntityIDHelper.DOT + InternalFieldEnum.ID.getDbName(); } if (physicalKeyName.equals(field.getFullDbName())) { return true; } } return false; }
private DBObject buildModifyBody() { MetaField field = getField(); DBObject modifyBody = new BasicDBObject(); // system modify body including entity version, entity time stamp buildInternalUpdate(modifyBody); if (field.getCardinality() == CardinalityEnum.Many) { // appending to list, $addToSet buildArrayBody(modifyBody); } else if (field.getDataType().equals(DataTypeEnum.JSON)) { // incremental $set buildJsonBody(modifyBody); } else { buildSetFieldBody(modifyBody); } return modifyBody; }
private DBObject buildModifyBody() { MetaField field = getField(); DBObject modifyBody = new BasicDBObject(); // system modify body including entity version, entity time stamp buildInternalUpdate(modifyBody); if (field.getCardinality() == CardinalityEnum.Many) { // appending to list, $addToSet buildArrayBody(modifyBody); } else if (field.getDataType().equals(DataTypeEnum.JSON)) { // incremental $set buildJsonBody(modifyBody); } else { buildSetFieldBody(modifyBody); } return modifyBody; }
@Override public boolean isIndexUsable(ISearchField field, MetaClass metaClass) { Collection<IndexInfo> indexes = metaClass.getIndexesOnField(field.getFieldName()); for (IndexInfo index : indexes) { String firstKey = index.getKeyList().get(0); MetaField metaField = metaClass.getFieldByName(firstKey); String physicalKeyName = getFieldValueName(metaField); if (metaField.getDataType().equals(DataTypeEnum.RELATIONSHIP)) { physicalKeyName = metaField.getValueDbName() + AbstractEntityIDHelper.DOT + InternalFieldEnum.ID.getDbName(); } if (physicalKeyName.equals(field.getFullDbName())) { return true; } } return false; }
private DBObject buildModifyBody() { MetaField field = getField(); DBObject modifyBody = new BasicDBObject(); // system modify body including entity version, entity time stamp buildInternalUpdate(modifyBody); if (field.getCardinality() == CardinalityEnum.Many) { // appending to list, $addToSet buildArrayBody(modifyBody); } else if (field.getDataType().equals(DataTypeEnum.JSON)) { // incremental $set buildJsonBody(modifyBody); } else { buildSetFieldBody(modifyBody); } return modifyBody; }
@Override public void serialize(DataTypeEnum value, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonProcessingException { jgen.writeString(value.toString()); } }
@Override public DataTypeEnum deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException { String str = mapper.readValue(jp, String.class); return DataTypeEnum.fromString(str); } }
public static DataTypeEnum fromString(String value) { if (value == null || value.length() < 1) { throw new IllegalArgumentException(); } for (DataTypeEnum v : DataTypeEnum.values()) { if (v.toString().equals(value)) { return v; } } throw new IllegalArgumentException(MessageFormat.format("Invalid date type {0}", value)); }
static boolean isRelationshipField(ISearchField field) { if (AbstractSearchField.class.isInstance(field)) { AbstractSearchField selection = (AbstractSearchField) field; return selection.getRootField().getDataType().equals(DataTypeEnum.RELATIONSHIP) && (selection.getInnerField() == null || selection.getInnerField().equals( InternalFieldEnum.ID.getDbName())); } return false; }