use of io.crnk.meta.model.resource.MetaJsonObject in project crnk-framework by crnk-project.
the class JpaMetaEnricher method onInitialized.
@Override
public void onInitialized(MetaElement element) {
if (element instanceof MetaJsonObject) {
MetaJsonObject jsonDataObject = (MetaJsonObject) element;
Class<?> implementationClass = jsonDataObject.getImplementationClass();
if (metaProvider.hasMeta(implementationClass)) {
MetaJpaDataObject jpaDataObject = metaProvider.getMeta(implementationClass);
if (jpaDataObject.getPrimaryKey() != null && jsonDataObject.getPrimaryKey() != null) {
jsonDataObject.getPrimaryKey().setGenerated(jpaDataObject.getPrimaryKey().isGenerated());
}
List<? extends MetaAttribute> declaredAttributes = jsonDataObject.getDeclaredAttributes();
for (MetaAttribute declaredAttribute : declaredAttributes) {
String name = declaredAttribute.getName();
if (jpaDataObject.hasAttribute(name)) {
MetaAttribute jpaAttribute = jpaDataObject.getAttribute(name);
declaredAttribute.setLob(jpaAttribute.isLob());
declaredAttribute.setVersion(jpaAttribute.isVersion());
declaredAttribute.setNullable(jpaAttribute.isNullable());
declaredAttribute.setCascaded(jpaAttribute.isCascaded());
}
}
}
}
}
use of io.crnk.meta.model.resource.MetaJsonObject in project crnk-framework by crnk-project.
the class ResourceMetaFilter method onInitialized.
@Override
public void onInitialized(MetaElement element) {
if (element instanceof MetaResourceBase) {
MetaResourceBase metaResource = (MetaResourceBase) element;
ResourceInformation information = getResourceInformation(metaResource, true);
PreconditionUtil.assertNotNull(information.getResourceType(), metaResource);
for (ResourceField field : information.getRelationshipFields()) {
if (field.getOppositeName() != null) {
String oppositeType = field.getOppositeResourceType();
MetaResource oppositeMeta = (MetaResource) context.getMetaElement(partition.getId(oppositeType)).get();
MetaAttribute attr = metaResource.getAttribute(field.getUnderlyingName());
MetaAttribute oppositeAttr = oppositeMeta.getAttribute(field.getOppositeName());
PreconditionUtil.assertNotNull(attr.getId() + " opposite not found", oppositeAttr);
attr.setOppositeAttribute(oppositeAttr);
}
}
ResourceField idField = information.getIdField();
if (idField != null) {
MetaAttribute idAttr = metaResource.getAttribute(idField.getUnderlyingName());
idAttr.setPrimaryKeyAttribute(true);
if (metaResource.getSuperType() == null || metaResource.getSuperType().getPrimaryKey() == null) {
MetaPrimaryKey primaryKey = new MetaPrimaryKey();
primaryKey.setName(metaResource.getName() + "$primaryKey");
primaryKey.setName(metaResource.getId() + "$primaryKey");
primaryKey.setElements(Arrays.asList(idAttr));
primaryKey.setUnique(true);
primaryKey.setParent(metaResource, true);
metaResource.setPrimaryKey(primaryKey);
partition.addElement(null, primaryKey);
}
}
}
if (element instanceof MetaAttribute && element.getParent() instanceof MetaResourceBase) {
MetaAttribute attr = (MetaAttribute) element;
MetaResourceBase parent = (MetaResourceBase) attr.getParent();
ResourceInformation information = getResourceInformation(parent, true);
ResourceField field = information.findFieldByUnderlyingName(attr.getName());
PreconditionUtil.assertNotNull(attr.getName(), field);
if (field.getResourceFieldType() == ResourceFieldType.RELATIONSHIP) {
String oppositeType = field.getOppositeResourceType();
String oppositeId = partition.getId(oppositeType);
Optional<MetaElement> optOppositeMeta = context.getMetaElement(oppositeId);
if (!optOppositeMeta.isPresent()) {
throw new IllegalStateException("opposite meta element '" + oppositeId + "' for element '" + element.getId() + "' not found");
}
MetaResource oppositeMeta = (MetaResource) optOppositeMeta.get();
if (field.isCollection()) {
boolean isSet = Set.class.isAssignableFrom(field.getType());
String suffix = (isSet ? "$set" : "$list");
Optional<MetaElement> optMetaCollection = context.getMetaElement(oppositeId + suffix);
MetaCollectionType metaCollection;
if (optMetaCollection.isPresent()) {
metaCollection = (MetaCollectionType) optMetaCollection.get();
} else {
metaCollection = isSet ? new MetaSetType() : new MetaListType();
metaCollection.setId(oppositeMeta.getId() + suffix);
metaCollection.setName(oppositeMeta.getName() + suffix);
metaCollection.setImplementationType(field.getGenericType());
metaCollection.setElementType(oppositeMeta);
partition.addElement(null, metaCollection);
}
attr.setType(metaCollection);
} else {
attr.setType(oppositeMeta);
}
} else {
Type implementationType = field.getGenericType();
MetaElement metaType = partition.allocateMetaElement(implementationType).get();
attr.setType(metaType.asType());
}
} else if (element instanceof MetaAttribute && element.getParent() instanceof MetaJsonObject) {
MetaAttribute attr = (MetaAttribute) element;
MetaDataObject parent = attr.getParent();
Type implementationType = PropertyUtils.getPropertyType(parent.getImplementationClass(), attr.getName());
MetaElement metaType = partition.allocateMetaElement(implementationType).get();
attr.setType(metaType.asType());
}
}
use of io.crnk.meta.model.resource.MetaJsonObject in project crnk-framework by crnk-project.
the class MetaDataObjectTest method checkNestedObject.
@Test
public void checkNestedObject() {
MetaJsonObject meta = resourceProvider.getMeta(ProjectData.class);
Assert.assertEquals("ProjectData", meta.getName());
Assert.assertEquals("resources.types.projectdata", meta.getId());
Assert.assertNotNull(meta.getAttribute("data").getType());
}
use of io.crnk.meta.model.resource.MetaJsonObject in project crnk-framework by crnk-project.
the class MetaKeyTest method parse.
@Test
// no longer supported to find any kind of object
@Ignore
public void parse() {
MetaJsonObject metaKeyType = resourceProvider.getMeta(SomePrimaryKey.class);
MetaAttribute keyAttr = new MetaAttribute();
keyAttr.setType(metaKeyType);
MetaKey metaKey = new MetaKey();
metaKey.setElements(Arrays.asList(keyAttr));
SomePrimaryKey key = new SomePrimaryKey();
key.setAttr1("test");
key.setAttr2(13);
String keyString = metaKey.toKeyString(key);
Assert.assertEquals("test-13", keyString);
}
Aggregations