private AbstractMemberMetaData getFieldMetaData(String fieldName) { return cmd.getMetaDataForMember(fieldName); }
boolean isPrimaryKey(String propertyName) { return elementCmd.getMetaDataForMember(propertyName).isPrimaryKey(); }
private Annotation getProxy(Class type, Method method) { AbstractClassMetaData acmd = metaDataMgr.getMetaDataForClass(method.getDeclaringClass(), clr); AbstractMemberMetaData ammd = acmd.getMetaDataForMember(method.getName()); if (ammd == null) { return null; } return getAnnotationHandler(type, ammd); } }
private Annotation getProxy(Class type, Field field) { AbstractClassMetaData acmd = metaDataMgr.getMetaDataForClass(field.getDeclaringClass(), clr); if (acmd == null) { //happens when field type is enum return null; } AbstractMemberMetaData ammd = acmd.getMetaDataForMember(field.getName()); if (ammd == null) { return null; } return getAnnotationHandler(type, ammd); }
private String determineSequenceName(AbstractClassMetaData acmd) { String sequenceName = (String) properties.get("sequence-name"); if (sequenceName != null) { return sequenceName; } if (acmd == null) { throw new IllegalStateException( "Received a null AbstractClassMetaData and properties did not contain a sequence-name attribute."); } String fieldName = (String) properties.get("field-name"); // Look up the meta-data for the field with the generator AbstractMemberMetaData ammd = acmd.getMetaDataForMember(fieldName.substring(fieldName.lastIndexOf(".") + 1)); // For JPA the sequence name is stored as the valueGeneratorName return ammd.getSequence() != null ? ammd.getSequence() : ammd.getValueGeneratorName(); }
public <Y> SingularAttribute<? super X, Y> getVersion(Class<Y> cls) { String verFieldName = (cmd.getVersionMetaData() != null ? cmd.getVersionMetaData().getFieldName() : null); if (verFieldName != null) { AbstractMemberMetaData verMmd = cmd.getMetaDataForMember(verFieldName); if (cls.isAssignableFrom(verMmd.getType())) { return (SingularAttribute<? super X, Y>) attributes.get(verFieldName); } throw new IllegalArgumentException("Version is not of specified type (" + cls.getName() + "). Should be " + verMmd.getTypeName()); } return null; }
public boolean hasMethodAnnotation(Class<? extends Annotation> anntype, Method method) { if (!isSupportedMemberAnnotation(anntype)) { return false; } AbstractClassMetaData acmd = metaDataMgr.getMetaDataForClass(method.getDeclaringClass(), clr); AbstractMemberMetaData ammd = acmd.getMetaDataForMember(method.getName()); if (ammd == null || ammd.getPersistenceModifier() != FieldPersistenceModifier.PERSISTENT) { return false; } // TODO Implement this if (anntype == XmlTransient.class) { //return true; } return false; }
public static boolean isChildOfHierarchicalMapping(AbstractMemberMetaData mmd, MetaDataManager mmgr) { String mappedBy = mmd.getMappedBy(); if (mappedBy != null) { AbstractClassMetaData targetCmd = LDAPUtils.getEffectiveClassMetaData(mmd, mmgr); AbstractMemberMetaData mappedByMmd = targetCmd.getMetaDataForMember(mappedBy); if (mappedByMmd != null) { return isParentOfHierarchicalMapping(mappedByMmd, mmgr); } } return false; }
@Override public boolean isForeignJoinColumn(EntityType<?> ownerType, String attributeName) { ManagedTypeImpl<?> managedType = (ManagedTypeImpl<?>) ownerType; String[] parts = attributeName.split("\\."); AbstractMemberMetaData metaData = managedType.getMetadata().getMetaDataForMember(parts[0]); for (int i = 1; i < parts.length; i++) { EmbeddedMetaData embeddedMetaData = metaData.getEmbeddedMetaData(); if (embeddedMetaData == null) { // Probably trying to access the id attribute of a ToMany relation return metaData.getJoinMetaData() != null; } else { AbstractMemberMetaData[] metaDatas = embeddedMetaData.getMemberMetaData(); metaData = null; for (int j = 0; j < metaDatas.length; j++) { if (parts[i].equals(metaDatas[j].getName())) { metaData = metaDatas[j]; break; } } if (metaData == null) { throw new IllegalArgumentException("Could not find property '" + parts[i] + "' in embeddable type: " + ((AbstractMemberMetaData) embeddedMetaData.getParent()).getType().getName()); } } } return metaData.getJoinMetaData() != null; }
public AbstractMemberMetaData getRealMemberMetaData() { if (mmd.getParent() instanceof EmbeddedMetaData) { // Get the real owner classMetaData (when embedded the cmd is often the embedded) AbstractClassMetaData cmd = storeMgr.getMetaDataManager().getMetaDataForClass(mmd.getClassName(), clr); return cmd.getMetaDataForMember(mmd.getName()); } return mmd; } }
private void appendContainsExpression(ExpressionBuilderHelper h, InvokeExpression expr, boolean not) { PrimaryExpression pe = (PrimaryExpression) expr.getLeft(); TupleName fieldName = new TupleName(pe.getTuples()); AbstractMemberMetaData ammd = h.acmd.getMetaDataForMember(fieldName.getShortName()); if (ammd != null && (ammd.getMap() != null || ammd.getCollection() != null)) { processJoinExpression(pe, null, h, h.compilation, false, false, not); if (expr.getArguments().size() > 0) { String name = hints != null ? (String) hints.get(QueryHints.MEMBER_OF_FIELD) : null; h.sb.append(" where "); appendExpression(h, new PrimaryExpression(new TupleName(name != null ? name : "name").getTuple()), ec); h.sb.append(" = "); appendExpression(h, expr.getArguments().get(0), ec); } h.sb.append(")"); } else { // This is simply picklist values appendExpression(h, expr.getLeft(), ec); if (expr.getArguments().size() > 0) { h.sb.append(not ? " excludes(" : " includes("); Literal l = (Literal) expr.getArguments().get(0); h.sb.append(new MultiPicklistFormatter(l.getLiteral().toString()).getFormattedString()); h.sb.append(")"); } else { h.sb.append(not ? " = " : " != ").append("null"); } } }
private static String getForceApiRelationshipName(AbstractMemberMetaData ammd, Map<String, String> extensions, OMFContext omf) { AbstractClassMetaData acmd = PersistenceUtils.getMemberElementClassMetaData(ammd, omf.getClassLoaderResolver(null), omf.getMetaDataManager()); AbstractMemberMetaData mmd = acmd.getMetaDataForMember(ammd.getMappedBy()); if (mmd == null) { // The mappedBy field does not exist throw new NucleusUserException("Cannot access mappedBy field " + ammd.getMappedBy() + " on entity " + acmd.getName() + " at " + ammd.getFullFieldName()); } String tableName = acmd.getEntityName(); String fieldNameNoSuffix = getFieldName(mmd, extensions); extensions = getForceExtensions(mmd); String childRelationshipName = extensions.get("childRelationshipName"); String relationshipName = childRelationshipName != null ? childRelationshipName : String.format("%s_%ss", fieldNameNoSuffix, tableName); if (relationshipName.length() > 40) { relationshipName = relationshipName.substring(0, 40); } return relationshipName; }
private static String getForceApiRelationshipName(AbstractMemberMetaData ammd, Map<String, String> extensions, OMFContext omf) { AbstractClassMetaData acmd = PersistenceUtils.getMemberElementClassMetaData(ammd, omf.getClassLoaderResolver(null), omf.getMetaDataManager()); AbstractMemberMetaData mmd = acmd.getMetaDataForMember(ammd.getMappedBy()); if (mmd == null) { // The mappedBy field does not exist throw new NucleusUserException("Cannot access mappedBy field " + ammd.getMappedBy() + " on entity " + acmd.getName() + " at " + ammd.getFullFieldName()); } String tableName = acmd.getEntityName(); String fieldNameNoSuffix = getFieldName(mmd, extensions); extensions = getForceExtensions(mmd); String childRelationshipName = extensions.get("childRelationshipName"); String relationshipName = childRelationshipName != null ? childRelationshipName : String.format("%s_%ss", fieldNameNoSuffix, tableName); if (relationshipName.length() > 40) { relationshipName = relationshipName.substring(0, 40); } return relationshipName; }
private void handleContainsOperation(InvokeExpression invokeExpr, QueryData qd) { Expression param = (Expression) invokeExpr.getArguments().get(0); param.bind(getSymbolTable()); if (invokeExpr.getLeft() instanceof PrimaryExpression) { PrimaryExpression left = (PrimaryExpression) invokeExpr.getLeft(); // Make sure that the left expression is a collection List<String> tuples = getTuples(left, qd.compilation.getCandidateAlias()); if (tuples.size() == 1) { // Handle case of simple field name AbstractMemberMetaData mmd = qd.acmd.getMetaDataForMember(tuples.get(0)); if (mmd != null && !Collection.class.isAssignableFrom(mmd.getType())) { throw new UnsupportedDatastoreFeatureException("The 'contains' method is only for use with a Collection expression"); } } // treat contains as equality since that's how the low-level api does checks on multi-value properties. addLeftPrimaryExpression(left, Expression.OP_EQ, param, qd); } else if (invokeExpr.getLeft() instanceof ParameterExpression && param instanceof PrimaryExpression) { ParameterExpression pe = (ParameterExpression) invokeExpr.getLeft(); addLeftPrimaryExpression((PrimaryExpression) param, Expression.OP_EQ, pe, qd); } else { throw newUnsupportedQueryMethodException(invokeExpr); } }
private void verifyOneToManyOrderBy(AbstractMemberMetaData ammd, AbstractClassMetaData childAcmd) { OrderMetaData omd = ammd.getOrderMetaData(); OrderMetaData.FieldOrder[] fieldOrders = omd.getFieldOrders(); if (fieldOrders == null) { return; } for (OrderMetaData.FieldOrder fieldOrder : omd.getFieldOrders()) { String propertyName = fieldOrder.getFieldName(); AbstractMemberMetaData orderField = childAcmd.getMetaDataForMember(propertyName); if (orderField.hasExtension(DatastoreManager.PK_ID) || orderField.hasExtension(DatastoreManager.PK_NAME)) { throw new InvalidMetaDataException(GAE_LOCALISER, "AppEngine.MetaData.OrderPartOfPK", ammd.getFullFieldName(), propertyName); } } }
/** * This is a lot of hackery. Basically, force the class to go through ForceAnnotationReader * and create a fake class that has Force.com annotations read in as * extension data. We then transfer the extension data from the fake class to the actual one. * * @param cmd - actual class metadata that will get updated with Force.com annotations */ private void updateAnnotations(AbstractClassMetaData cmd) { ClassLoaderResolver clr = storeManager.getOMFContext().getClassLoaderResolver(storeManager.getClass().getClassLoader()); Class<?> clazz = clr.classForName(cmd.getFullClassName()); AbstractClassMetaData cmdNew = annotationReader.getMetaDataForClass(clazz, cmd.getPackageMetaData(), clr); ExtensionMetaData[] extensions = cmdNew.getExtensions(); if (extensions != null && extensions.length > 0) { for (ExtensionMetaData e : extensions) { if (ForceStoreManager.FORCE_KEY.equals(e.getVendorName())) { cmd.addExtension(ForceStoreManager.FORCE_KEY, e.getKey(), e.getValue()); } } } for (AbstractMemberMetaData ammdNew : ((ForceClassMetaData) cmdNew).getMembers()) { AbstractMemberMetaData ammd = cmd.getMetaDataForMember(ammdNew.getName()); for (ExtensionMetaData e : ammdNew.getExtensions()) { ammd.addExtension(e.getVendorName(), e.getKey(), e.getValue()); } } }
/** * This is a lot of hackery. Basically, force the class to go through ForceAnnotationReader * and create a fake class that has Force.com annotations read in as * extension data. We then transfer the extension data from the fake class to the actual one. * * @param cmd - actual class metadata that will get updated with Force.com annotations */ private void updateAnnotations(AbstractClassMetaData cmd) { ClassLoaderResolver clr = storeManager.getOMFContext().getClassLoaderResolver(storeManager.getClass().getClassLoader()); Class<?> clazz = clr.classForName(cmd.getFullClassName()); AbstractClassMetaData cmdNew = annotationReader.getMetaDataForClass(clazz, cmd.getPackageMetaData(), clr); ExtensionMetaData[] extensions = cmdNew.getExtensions(); if (extensions != null && extensions.length > 0) { for (ExtensionMetaData e : extensions) { if (ForceStoreManager.FORCE_KEY.equals(e.getVendorName())) { cmd.addExtension(ForceStoreManager.FORCE_KEY, e.getKey(), e.getValue()); } } } for (AbstractMemberMetaData ammdNew : ((ForceClassMetaData) cmdNew).getMembers()) { AbstractMemberMetaData ammd = cmd.getMetaDataForMember(ammdNew.getName()); for (ExtensionMetaData e : ammdNew.getExtensions()) { ammd.addExtension(e.getVendorName(), e.getKey(), e.getValue()); } } }
public RelationByDnMetaData(AbstractMemberMetaData mmd, MetaDataManager mmgr) { this.mmd = mmd; AbstractClassMetaData otherClassMetaData = LDAPUtils.getEffectiveClassMetaData(mmd, mmgr); hasColumn = mmd.getColumnMetaData() != null && mmd.getColumnMetaData().length > 0; if (mmd.getMappedBy() != null) { otherMmd = otherClassMetaData.getMetaDataForMember(mmd.getMappedBy()); } else if (mmd.getElementMetaData() != null && !hasColumn) { // always null otherMmd = null; } // else ??? if (mmd.getMappedBy() != null) { emptyValue = LDAPUtils.getEmptyValue(otherMmd); } else { emptyValue = LDAPUtils.getEmptyValue(mmd); } }
private void appendMappedByExpression(ExpressionBuilderHelper h, InvokeExpression expr) { TupleName fieldName = getMappedExpression(h, expr); /** * The key is defined by @MapKey on the Map field and defaulted to "id" */ String columnToAdd = "id"; AbstractClassMetaData acmd = fieldName.getTuple().size() > 1 ? ec.getMetaDataManager() .getMetaDataForClass(h.compilation.getSymbolTable().getSymbol(fieldName.getShortNamePrefix()) .getValueType(), ec.getClassLoaderResolver()) : h.acmd; AbstractMemberMetaData ammd = acmd.getMetaDataForMember(fieldName.getShortName()); if (ammd.getKeyMetaData() != null) { AbstractClassMetaData cmd = PersistenceUtils.getMemberElementClassMetaData(ammd, ec.getClassLoaderResolver(), ec.getMetaDataManager()); if (cmd != null) { TableImpl joinedTable = ((ForceStoreManager) ec.getStoreManager()).getTable(cmd); ColumnImpl col = joinedTable.getColumnByJavaName(ammd.getKeyMetaData().getMappedBy()); if (col != null) { columnToAdd = col.getFieldName(); } } } h.sb.append(columnToAdd); }
private void appendMappedByExpression(ExpressionBuilderHelper h, InvokeExpression expr) { TupleName fieldName = getMappedExpression(h, expr); /** * The key is defined by @MapKey on the Map field and defaulted to "id" */ String columnToAdd = "id"; AbstractClassMetaData acmd = fieldName.getTuple().size() > 1 ? ec.getMetaDataManager() .getMetaDataForClass(h.compilation.getSymbolTable().getSymbol(fieldName.getShortNamePrefix()) .getValueType(), ec.getClassLoaderResolver()) : h.acmd; AbstractMemberMetaData ammd = acmd.getMetaDataForMember(fieldName.getShortName()); if (ammd.getKeyMetaData() != null) { AbstractClassMetaData cmd = PersistenceUtils.getMemberElementClassMetaData(ammd, ec.getClassLoaderResolver(), ec.getMetaDataManager()); if (cmd != null) { TableImpl joinedTable = ((ForceStoreManager) ec.getStoreManager()).getTable(cmd); ColumnImpl col = joinedTable.getColumnByJavaName(ammd.getKeyMetaData().getMappedBy()); if (col != null) { columnToAdd = col.getFieldName(); } } } h.sb.append(columnToAdd); }