protected org.kuali.rice.krad.bo.DataObjectRelationship getRelationshipMetadata( Class<?> dataObjectClass, String attributeName, String attributePrefix) { RelationshipDefinition relationshipDefinition = getDictionaryRelationship(dataObjectClass, attributeName); if (relationshipDefinition == null) { return null; } org.kuali.rice.krad.bo.DataObjectRelationship dataObjectRelationship = new org.kuali.rice.krad.bo.DataObjectRelationship( relationshipDefinition.getSourceClass(), relationshipDefinition.getObjectAttributeName(), relationshipDefinition.getTargetClass()); if (!StringUtils.isEmpty(attributePrefix)) { attributePrefix += "."; } List<PrimitiveAttributeDefinition> primitives = relationshipDefinition.getPrimitiveAttributes(); for (PrimitiveAttributeDefinition primitiveAttributeDefinition : primitives) { dataObjectRelationship .getParentToChildReferences() .put( attributePrefix + primitiveAttributeDefinition.getSourceName(), primitiveAttributeDefinition.getTargetName()); } return dataObjectRelationship; }
public Class<? extends BusinessObject> getRelationshipTargetClass( String entryName, String relationshipName) { Class targetClass = null; RelationshipDefinition rd = getRelationshipDefinition(entryName, relationshipName); if (rd != null) { targetClass = rd.getTargetClass(); } return targetClass; }
protected org.kuali.rice.krad.bo.DataObjectRelationship populateRelationshipFromDictionaryReference( Class<?> dataObjectClass, RelationshipDefinition ddReference, String attributePrefix, boolean keysOnly) { org.kuali.rice.krad.bo.DataObjectRelationship relationship = new org.kuali.rice.krad.bo.DataObjectRelationship( dataObjectClass, ddReference.getObjectAttributeName(), ddReference.getTargetClass()); for (PrimitiveAttributeDefinition def : ddReference.getPrimitiveAttributes()) { if (StringUtils.isNotBlank(attributePrefix)) { relationship .getParentToChildReferences() .put(attributePrefix + "." + def.getSourceName(), def.getTargetName()); } else { relationship.getParentToChildReferences().put(def.getSourceName(), def.getTargetName()); } } if (!keysOnly) { for (SupportAttributeDefinition def : ddReference.getSupportAttributes()) { if (StringUtils.isNotBlank(attributePrefix)) { relationship .getParentToChildReferences() .put(attributePrefix + "." + def.getSourceName(), def.getTargetName()); if (def.isIdentifier()) { relationship.setUserVisibleIdentifierKey(attributePrefix + "." + def.getSourceName()); } } else { relationship.getParentToChildReferences().put(def.getSourceName(), def.getTargetName()); if (def.isIdentifier()) { relationship.setUserVisibleIdentifierKey(def.getSourceName()); } } } } return relationship; }
/** * This method does validation on the quickfinderParameterString and * quickfinderParameterStringBuilderClass members * * @param rootBusinessObjectClass * @param boMetadataService */ private void validateQuickfinderParameters( Class rootBusinessObjectClass, BusinessObjectMetaDataService boMetadataService) { if (quickfinderParameterStringBuilderClass != null && quickfinderParameterString != null) { throw new AttributeValidationException( "Both quickfinderParameterString and quickfinderParameterStringBuilderClass can not be specified on attribute " + getAttributeName() + " in rootBusinessObjectClass " + rootBusinessObjectClass.getName()); } // String used for building exception messages String quickfinderParameterStringSource = "quickfinderParameterString"; if (quickfinderParameterStringBuilderClass != null) { try { quickfinderParameterStringSource = "quickfinderParameterStringBuilderClass " + quickfinderParameterStringBuilderClass.getCanonicalName(); quickfinderParameterString = quickfinderParameterStringBuilderClass.newInstance().getValue(); } catch (InstantiationException e) { throw new ClassValidationException( "unable to create new instance of " + quickfinderParameterStringSource + " while validating rootBusinessObjectClass '" + rootBusinessObjectClass.getName() + "'", e); } catch (IllegalAccessException e) { throw new ClassValidationException( "unable to create new instance of " + quickfinderParameterStringSource + " while validating rootBusinessObjectClass '" + rootBusinessObjectClass.getName() + "'", e); } } if (!StringUtils.isEmpty(quickfinderParameterString)) { // quickfinderParameterString will look something like "campusTypeCode=P,active=Y" for (String quickfinderParam : quickfinderParameterString.split(",")) { // this is guaranteed to return at least one if (quickfinderParam.contains("=")) { String propertyName = quickfinderParam.split("=")[0]; RelationshipDefinition relationship = boMetadataService.getBusinessObjectRelationshipDefinition( rootBusinessObjectClass, attributeName); Class targetClass = relationship.getTargetClass(); // This is insufficient to ensure the property is valid for a lookup default, but it's // better than nothing. if (!DataDictionary.isPropertyOf(targetClass, propertyName)) { throw new ClassValidationException( "malformed parameter string '" + quickfinderParameterString + "' from " + quickfinderParameterStringSource + ", '" + propertyName + "' is not a property of " + targetClass + "' for rootBusinessObjectClass '" + rootBusinessObjectClass.getName() + "'"); } } else { throw new ClassValidationException( "malformed parameter string '" + quickfinderParameterString + "' from " + quickfinderParameterStringSource + " for rootBusinessObjectClass '" + rootBusinessObjectClass.getName() + "'"); } } } }