BeanDescriptorElementEmbeddedMap(BeanDescriptorMap owner, DeployBeanDescriptor<T> deploy, ElementHelp elementHelp) { super(owner, deploy, elementHelp); this.scalarTypeKey = firstBaseScalarType(); this.stringKey = String.class.equals(scalarTypeKey.getType()); }
@Override public Object jsonReadCollection(SpiJsonReader readJson, EntityBean parentBean) throws IOException { JsonParser parser = readJson.getParser(); ElementCollector add = elementHelp.createCollector(); do { JsonToken token = parser.nextToken(); if (token != JsonToken.START_OBJECT) { break; } if (stringKey) { String key = parser.nextFieldName(); parser.nextToken(); Object val = readJsonElement(readJson, null); add.addKeyValue(key, val); } else { parser.nextFieldName(); Object key = scalarTypeKey.jsonRead(parser); parser.nextFieldName(); Object val = readJsonElement(readJson, null); add.addKeyValue(key, val); } token = parser.nextToken(); if (token != JsonToken.END_OBJECT) { break; } } while (true); return add.collection(); }
@Override @SuppressWarnings("unchecked") public void jsonWriteMapEntry(SpiJsonWriter ctx, Map.Entry<?, ?> entry) throws IOException { ctx.writeStartObject(); if (stringKey) { Object key = entry.getKey(); String keyName = (key == null) ? "null" : key.toString(); ctx.writeFieldName(keyName); writeJsonElement(ctx, entry.getValue()); } else { ctx.writeFieldName("key"); scalarTypeKey.jsonWrite(ctx.gen(), entry.getKey()); ctx.writeFieldName("value"); writeJsonElement(ctx, entry.getValue()); } ctx.writeEndObject(); }
/** * Create a BeanDescriptor for an ElementCollection target. */ public <A> BeanDescriptor<A> createElementDescriptor(DeployBeanDescriptor<A> elementDescriptor, ManyType manyType, boolean scalar) { ElementHelp elementHelp = elementHelper(manyType); if (manyType.isMap()) { if (scalar) { return new BeanDescriptorElementScalarMap<>(this, elementDescriptor, elementHelp); } else { return new BeanDescriptorElementEmbeddedMap<>(this, elementDescriptor, elementHelp); } } if (scalar) { return new BeanDescriptorElementScalar<>(this, elementDescriptor, elementHelp); } else { return new BeanDescriptorElementEmbedded<>(this, elementDescriptor, elementHelp); } }
/** * Create a BeanDescriptor for an ElementCollection target. */ public <A> BeanDescriptor<A> createElementDescriptor(DeployBeanDescriptor<A> elementDescriptor, ManyType manyType, boolean scalar) { ElementHelp elementHelp = elementHelper(manyType); if (manyType.isMap()) { if (scalar) { return new BeanDescriptorElementScalarMap<>(this, elementDescriptor, elementHelp); } else { return new BeanDescriptorElementEmbeddedMap<>(this, elementDescriptor, elementHelp); } } if (scalar) { return new BeanDescriptorElementScalar<>(this, elementDescriptor, elementHelp); } else { return new BeanDescriptorElementEmbedded<>(this, elementDescriptor, elementHelp); } }
BeanDescriptorElementEmbeddedMap(BeanDescriptorMap owner, DeployBeanDescriptor<T> deploy, ElementHelp elementHelp) { super(owner, deploy, elementHelp); this.scalarTypeKey = firstBaseScalarType(); this.stringKey = String.class.equals(scalarTypeKey.getType()); }
@Override @SuppressWarnings("unchecked") public void jsonWriteMapEntry(SpiJsonWriter ctx, Map.Entry<?, ?> entry) throws IOException { ctx.writeStartObject(); if (stringKey) { Object key = entry.getKey(); String keyName = (key == null) ? "null" : key.toString(); ctx.writeFieldName(keyName); writeJsonElement(ctx, entry.getValue()); } else { ctx.writeFieldName("key"); scalarTypeKey.jsonWrite(ctx.gen(), entry.getKey()); ctx.writeFieldName("value"); writeJsonElement(ctx, entry.getValue()); } ctx.writeEndObject(); }
@Override public Object jsonReadCollection(SpiJsonReader readJson, EntityBean parentBean) throws IOException { JsonParser parser = readJson.getParser(); ElementCollector add = elementHelp.createCollector(); do { JsonToken token = parser.nextToken(); if (token != JsonToken.START_OBJECT) { break; } if (stringKey) { String key = parser.nextFieldName(); parser.nextToken(); Object val = readJsonElement(readJson, null); add.addKeyValue(key, val); } else { parser.nextFieldName(); Object key = scalarTypeKey.jsonRead(parser); parser.nextFieldName(); Object val = readJsonElement(readJson, null); add.addKeyValue(key, val); } token = parser.nextToken(); if (token != JsonToken.END_OBJECT) { break; } } while (true); return add.collection(); }