/** * @param metadatas */ private void getMetadata(List<MetaClass> baseMetadatas, List<MetaClass> allMetadatas) { for (MetaClass baseMeta : baseMetadatas) { allMetadatas.add(baseMeta); List<MetaRelationship> baseRelationships = baseMeta.getFromReference(); if (!baseRelationships.isEmpty()) { List<MetaClass> outerMetadatas = new LinkedList<MetaClass>(); for (MetaRelationship baseRelationship : baseRelationships) { if (baseRelationship.getRelationType().equals(RelationTypeEnum.Embedded)) { MetaClass fromMeta = baseRelationship.getSourceMetaClass(); outerMetadatas.add(fromMeta); } } getMetadata(outerMetadatas, allMetadatas); } } }
public void validate(MetaClass meta) { checkMetaClassName(meta.getName()); checkNotInheritedFromEmbededClass(meta, Collections.<String, MetaClass> emptyMap()); validateFields(meta, Collections.<String, MetaClass> emptyMap(), true); validateIndex(meta, Collections.<String, MetaClass> emptyMap(), meta.getGraph()); for (MetaRelationship rel : meta.getFromReference()) { rel.validate(true, rel.getSourceMetaClass(), Collections.<String, MetaClass> emptyMap()); } }
/** * Returns the join field. * * <pre> * ---------------------------------------------------------------------------- * | | Normal (A.b) | Reverse (A.a!B) | * ---------------------------------------------------------------------------- * | fromChildToParent = true | return field b | return A's ID field | * ---------------------------------------------------------------------------- * | fromChildToParent = false | return B's ID field | return field a | * ---------------------------------------------------------------------------- * </pre> */ private MetaField getJoinField(MetaRelationship referenceField, boolean fromChildToParent) { if (fromChildToParent) { if (referenceField instanceof ReverseMetaRelationship) { return ((ReverseMetaRelationship) referenceField).getReversedReference().getSourceMetaClass() .getFieldByName(InternalFieldEnum.ID.getName()); } else { return referenceField; } } else { if (referenceField instanceof ReverseMetaRelationship) { return ((ReverseMetaRelationship) referenceField).getReversedReference(); } else { return referenceField.getSourceMetaClass().getFieldByName(InternalFieldEnum.ID.getName()); } } }
private void checkFromStrongReferencesInDB(PersistenceContext context, IEntity entity, MetaRelationship metaRef) { // call search service to get the referencing entity MetaClass fromClass = metaRef.getSourceMetaClass(); MetaField idField = fromClass.getFieldByName(InternalFieldEnum.ID.getName()); SearchOption option = new SearchOption(); option.setLimit(1); SearchProjection projection = new SearchProjection(); ISearchStrategy strategy = context.getRegistration().searchStrategy; projection.addField(new ProjectionField(idField, true, strategy)); FieldSearchCriteria criteria = new FieldSearchCriteria(new SelectionField(metaRef, strategy), FieldOperatorEnum.EQ, entity.getId()); SearchQuery query = new SearchQuery(fromClass, criteria, projection, strategy); SearchResult result = searchService.search(query, option, context); if (result.getResultSet().size() > 0) { StringBuilder errInfo = new StringBuilder(); errInfo.append(" entity = ").append(result.getResultSet().get(0).getId()); errInfo.append(" type = ").append(fromClass.getName()); errInfo.append(" reference = ").append(metaRef.getName()); throw new CmsEntMgrException(CmsEntMgrException.EntMgrErrCodeEnum.VIOLATE_REFERENCE_INTEGRITY, errInfo.toString()); } }
mr.getSourceMetaClass(); Assert.fail(); } catch (Exception e) { mr.getSourceMetaClass(); Assert.fail(); } catch (Exception e) { Assert.assertNotNull(relation.getRefMetaClass()); Assert.assertNotNull(relation.getSourceMetaClass());