private boolean usesDefaultObjectRealization(ReferenceLink link) { if (link.getReferenceRealization() == null) { return true; } boolean noInlineLinkDescriptor = (link.getReferenceRealization().getInlineObjectRealization() == null) || (link.getReferenceRealization().getInlineObjectRealization().getAllIncludedProperties().isEmpty()); boolean noLinkDescriptor = (link.getLinkDescriptor() == null) || (link.getLinkDescriptor().getAllIncludedProperties().isEmpty()); return noInlineLinkDescriptor && noLinkDescriptor; }
private void normalizeUserDefinedReferenceLink(final ReferenceLink referenceLink) { maybeSetReferenceRealization(referenceLink); if (TagUtils.getTagWithName(referenceLink.getReferenceRealization().getLinkDescriptor(), TagUtils.GENERATED) .isPresent() && referenceLink.getTargetResource() instanceof ServiceDataResource) { EcoreUtil.remove(referenceLink.getReferenceRealization().getLinkDescriptor()); // This is a fix for JSON Schema generator which otherwise inlines the referenceLink markWithDefaultRealization(referenceLink); NamedLinkDescriptor linkDescriptor = ((ServiceDataResource) referenceLink.getTargetResource()).getDefaultLinkDescriptor(); referenceLink.getReferenceRealization().setProperties(linkDescriptor); } // usesDefaultObjectRealization uses getAllIncludedProperties defined in // referenceTreatmentInlineLinkDescriptorProcessor if (usesDefaultObjectRealization(referenceLink)) { markWithDefaultRealization(referenceLink); } }
private void generateImplicitCollectionLinks(CollectionResource serviceDataResource, boolean hasRealizationRule) { ServiceDataResource targetResource = resourceFinder.findResource(serviceDataResource.getDataType(), true); boolean useReferenceLinkList = targetResource != null && serviceDataResource.isWithDefaultRealization() && !hasRealizationRule; serviceDataResource .setResourceRealizationKind(useReferenceLinkList ? CollectionRealizationEnum.REFERENCE_LINK_LIST : CollectionRealizationEnum.EMBEDDED_OBJECT_LIST); if (useReferenceLinkList) { ReferenceLink hyperlink = rapidmlFactory.createReferenceLink(); ReferenceTreatmentFactory.maybeSetReferenceRealization(hyperlink); hyperlink.getReferenceRealization().setTargetResource(targetResource); serviceDataResource.getReferenceTreatments().add(hyperlink); if (targetResource.getDefaultLinkDescriptor() != null) { hyperlink.getReferenceRealization().setProperties(targetResource.getDefaultLinkDescriptor()); } else { ObjectRealization linkDescriptor = rapidmlFactory.createObjectRealization(); // set container hyperlink.getReferenceRealization().setInlineObjectRealization(linkDescriptor); // Set by ReferenceTreatmentInlineLinkDescriptorProcessor for user-defined link descriptors hyperlink.getReferenceRealization().setProperties(linkDescriptor); } CollectionReferenceElement collectionReferenceElement = rapidmlFactory.createCollectionReferenceElement(); collectionReferenceElement.setCardinality(new int[] { 0, -1 }); collectionReferenceElement.setDataType(serviceDataResource.getDataType()); hyperlink.setReferenceElement(collectionReferenceElement); serviceDataResource.getReferenceElements().add(collectionReferenceElement); } }