/** * Accessor for whether the key is serialised into this table. * This can be an serialised persistable, or a serialised simple type. * @return Whether the key is serialised. */ public boolean isSerialisedKey() { if (mmd.getMap() != null && mmd.getMap().isSerializedKey()) { return true; } return false; }
/** * Accessor for whether the value is serialised into this table. * This can be an serialised persistable, or a serialised simple type. * @return Whether the value is serialised. */ public boolean isSerialisedValue() { if (mmd.getMap() != null && mmd.getMap().isSerializedValue()) { return true; } return false; }
/** * Accessor for whether the key is embedded into this table. * This can be an embedded persistable, or an embedded simple type. * @return Whether the key is embedded. */ public boolean isEmbeddedKey() { if (mmd.getMap() != null && mmd.getMap().isSerializedKey()) { // Serialized takes precedence over embedded return false; } else if (mmd.getMap() != null && mmd.getMap().isEmbeddedKey()) { return true; } return false; }
/** * Accessor for whether the value is embedded into this table. * This can be an embedded persistable, or an embedded simple type. * @return Whether the value is embedded. */ public boolean isEmbeddedValue() { if (mmd.getMap() != null && mmd.getMap().isSerializedValue()) { // Serialized takes precedence over embedded return false; } else if (mmd.getMap() != null && mmd.getMap().isEmbeddedValue()) { return true; } return false; }
/** * Accessor for the value type for this Map. * @return Name of value type. */ public String getValueType() { return mmd.getMap().getValueType(); }
/** * Accessor for the key type for this Map. * @return Name of key type. */ public String getKeyType() { return mmd.getMap().getKeyType(); }
public MapMetadata getMapMetadata() { MapMetaData internalMapmd = getInternal().getMap(); if (internalMapmd == null) { return null; } MapMetadataImpl mapmd = new MapMetadataImpl(internalMapmd); mapmd.parent = this; return mapmd; }
public <K, V> MapAttribute<? super X, K, V> getMap(String attr, Class<K> keyType, Class<V> valueType) { AttributeImpl<X, ?> theAttr = (AttributeImpl<X, ?>) attributes.get(attr); if (theAttr == null) { throw new IllegalArgumentException("Attribute " + attr + " was not found in class"); } AbstractMemberMetaData mmd = theAttr.getMetadata(); if (!Map.class.isAssignableFrom(mmd.getType())) { throw new IllegalArgumentException("Attribute " + attr + " isnt a Map"); } Class keyCls = model.getClassLoaderResolver().classForName(mmd.getMap().getKeyType()); if (!keyType.isAssignableFrom(keyCls)) { throw new IllegalArgumentException("Attribute " + attr + " doesn't have a Map with Key of type " + keyType.getName()); } Class valueCls = model.getClassLoaderResolver().classForName(mmd.getMap().getValueType()); if (!valueType.isAssignableFrom(valueCls)) { throw new IllegalArgumentException("Attribute " + attr + " doesn't have a Map with Value of type " + valueType.getName()); } return (MapAttribute<? super X, K, V>)theAttr; }
private Object getMapValueForReturnValue(AbstractMemberMetaData mmd, Object value) { String valueType = mmd.getMap().getValueType(); Class valueCls = ec.getClassLoaderResolver().classForName(valueType); if (valueCls == Long.class || valueCls == Double.class || valueCls == Float.class || valueCls == Integer.class || valueCls == Short.class || valueCls == String.class) { return value; } else if (Enum.class.isAssignableFrom(valueCls)) { return Enum.valueOf(valueCls, (String)value); } else { throw new NucleusException("Dont currently support persistence/retrieval of maps with values of type " + valueType); } } }
private Object getMapKeyForReturnValue(AbstractMemberMetaData mmd, Object value) { String keyType = mmd.getMap().getKeyType(); Class keyCls = ec.getClassLoaderResolver().classForName(keyType); if (keyCls == Long.class || keyCls == Double.class || keyCls == Float.class || keyCls == Integer.class || keyCls == Short.class || keyCls == String.class) { return value; } else if (Enum.class.isAssignableFrom(keyCls)) { return Enum.valueOf(keyCls, (String)value); } else { throw new NucleusException("Dont currently support persistence/retrieval of maps with keys of type " + keyType); } }
public Class<K> getKeyJavaType() { return owner.model.getClassLoaderResolver().classForName(mmd.getMap().getKeyType()); }
/** * Initialize this JavaTypeMapping with the given DatastoreAdapter for the given metadata. * @param table The datastore container storing this mapping (if any) * @param clr the ClassLoaderResolver * @param fmd FieldMetaData for the field to be mapped (if any) */ public void initialize(AbstractMemberMetaData fmd, Table table, ClassLoaderResolver clr) { initialize(fmd, table, clr, fmd.getKeyMetaData().getEmbeddedMetaData(), fmd.getMap().getKeyType(), ObjectProvider.EMBEDDED_MAP_KEY_PC); } }
/** * * Gets the class metadata for a member's type. For collections, get the metadata for the type parameter * * @param ammd The member whose class metadata you want to retrieve * @param clr the classloader resolver to use * @param mdm the metadata manager to use * @return the class metadata object for the given member */ public static AbstractClassMetaData getMemberElementClassMetaData(AbstractMemberMetaData ammd, ClassLoaderResolver clr, MetaDataManager mdm) { if (ammd.getCollection() != null) { return ammd.getCollection().getElementClassMetaData(clr, mdm); } else if (ammd.getMap() != null) { return ammd.getMap().getValueClassMetaData(clr, mdm); } else { return mdm.getMetaDataForClass(ammd.getType(), clr); } }
/** * * Gets the class metadata for a member's type. For collections, get the metadata for the type parameter * * @param ammd The member whose class metadata you want to retrieve * @param clr the classloader resolver to use * @param mdm the metadata manager to use * @return the class metadata object for the given member */ public static AbstractClassMetaData getMemberElementClassMetaData(AbstractMemberMetaData ammd, ClassLoaderResolver clr, MetaDataManager mdm) { if (ammd.getCollection() != null) { return ammd.getCollection().getElementClassMetaData(clr, mdm); } else if (ammd.getMap() != null) { return ammd.getMap().getValueClassMetaData(clr, mdm); } else { return mdm.getMetaDataForClass(ammd.getType(), clr); } }
/** * Initialize this JavaTypeMapping with the given DatastoreAdapter for the given metadata. * @param mmd MetaData for the field to be mapped (if any) * @param table The datastore container storing this mapping (if any) * @param clr the ClassLoaderResolver */ public void initialize(AbstractMemberMetaData mmd, Table table, ClassLoaderResolver clr) { initialize(mmd, table, clr, mmd.getValueMetaData().getEmbeddedMetaData(), mmd.getMap().getValueType(), ObjectProvider.EMBEDDED_MAP_VALUE_PC); } }
public Type<K> getKeyType() { Class keyCls = owner.model.getClassLoaderResolver().classForName(mmd.getMap().getKeyType()); return owner.model.getType(keyCls); } }
@Override public ValueMetadata setConverter(AttributeConverter<?, ?> conv) { String valType = ((AbstractMemberMetaData)getInternal().getParent()).getMap().getKeyType(); Class valCls = getInternal().getMetaDataManager().getNucleusContext().getClassLoaderResolver(null).classForName(valType); Class attrType = JDOTypeConverterUtils.getAttributeTypeForAttributeConverter(conv.getClass(), valCls); Class dbType = JDOTypeConverterUtils.getDatastoreTypeForAttributeConverter(conv.getClass(), attrType, null); // Register the TypeConverter under the name of the AttributeConverter class JDOTypeConverter typeConv = new JDOTypeConverter(conv); TypeManager typeMgr = getInternal().getMetaDataManager().getNucleusContext().getTypeManager(); typeMgr.registerConverter(conv.getClass().getName(), typeConv, attrType, dbType, false, null); getInternal().addExtension(MetaData.EXTENSION_MEMBER_TYPE_CONVERTER_NAME, conv.getClass().getName()); return this; }
@Override public KeyMetadata setConverter(AttributeConverter<?, ?> conv) { String keyType = ((AbstractMemberMetaData)getInternal().getParent()).getMap().getKeyType(); Class keyCls = getInternal().getMetaDataManager().getNucleusContext().getClassLoaderResolver(null).classForName(keyType); Class attrType = JDOTypeConverterUtils.getAttributeTypeForAttributeConverter(conv.getClass(), keyCls); Class dbType = JDOTypeConverterUtils.getDatastoreTypeForAttributeConverter(conv.getClass(), attrType, null); // Register the TypeConverter under the name of the AttributeConverter class JDOTypeConverter typeConv = new JDOTypeConverter(conv); TypeManager typeMgr = getInternal().getMetaDataManager().getNucleusContext().getTypeManager(); typeMgr.registerConverter(conv.getClass().getName(), typeConv, attrType, dbType, false, null); getInternal().addExtension(MetaData.EXTENSION_MEMBER_TYPE_CONVERTER_NAME, conv.getClass().getName()); return this; }