private DelegatedResourceSnapshot instantiateTemplate(ResourceId resourceId, ResourceTemplate template) { DelegatedResourceSnapshot snapshot=null; TemplateIntrospector introspector=TemplateIntrospector.newInstance(template); if(!introspector.isContainer()) { snapshot=new DelegatedResourceSnapshot(resourceId,template.handlerClass()); } else { snapshot=new DelegatedContainerSnapshot(resourceId,handlerClass(template,ContainerHandler.class)); } return snapshot; }
@Override public void visitResourceTemplate(ResourceTemplate template) { TemplateIntrospector introspector = TemplateIntrospector.newInstance(template); assertThat(introspector.template(),sameInstance(template)); assertThat(introspector.isResource(),equalTo(true)); assertThat(introspector.isContainer(),equalTo(false)); assertThat(introspector.isBasicContainer(),equalTo(false)); assertThat(introspector.isMembershipAwareContainer(),equalTo(false)); assertThat(introspector.isDirectContainer(),equalTo(false)); assertThat(introspector.isIndirectContainer(),equalTo(false)); }
@Override public void visitBasicContainerTemplate(BasicContainerTemplate template) { TemplateIntrospector introspector = TemplateIntrospector.newInstance(template); assertThat(introspector.template(),sameInstance((ResourceTemplate)template)); assertThat(introspector.isResource(),equalTo(false)); assertThat(introspector.isContainer(),equalTo(true)); assertThat(introspector.isBasicContainer(),equalTo(true)); assertThat(introspector.isMembershipAwareContainer(),equalTo(false)); assertThat(introspector.isDirectContainer(),equalTo(false)); assertThat(introspector.isIndirectContainer(),equalTo(false)); }
protected final JPAResource createChild(ResourceId resourceId, ResourceTemplate template) { JPAResource newResource=null; if(!TemplateIntrospector.newInstance(template).isContainer()) { newResource=new JPAResource(resourceId,this.id); } else { newResource=new JPAContainer(resourceId,this.id); } newResource.setTemplateLibrary(getTemplateLibrary()); return newResource; }
protected final InMemoryResource createChild(ResourceId resourceId, ResourceTemplate template) { InMemoryResource newResource=null; if(!TemplateIntrospector.newInstance(template).isContainer()) { newResource=new InMemoryResource(resourceId,this.id); } else { newResource=new InMemoryContainer(resourceId,this.id); } newResource.setTemplateLibrary(getTemplateLibrary()); return newResource; }
@Override public void visitDirectContainerTemplate(DirectContainerTemplate template) { TemplateIntrospector introspector = TemplateIntrospector.newInstance(template); assertThat(introspector.template(),sameInstance((ResourceTemplate)template)); assertThat(introspector.isResource(),equalTo(false)); assertThat(introspector.isContainer(),equalTo(true)); assertThat(introspector.isBasicContainer(),equalTo(false)); assertThat(introspector.isMembershipAwareContainer(),equalTo(true)); assertThat(introspector.isDirectContainer(),equalTo(true)); assertThat(introspector.isIndirectContainer(),equalTo(false)); assertThat(introspector.getMembershipPredicate(),equalTo(template.membershipPredicate())); assertThat(introspector.getMembershipRelation(),equalTo(template.membershipRelation())); }
Capabilities endpointCapabilities(Endpoint endpoint) { MutableCapabilities result=new MutableCapabilities(); Resource resource = resolveResource(endpoint); ResourceTemplate template=resourceTemplate(resource); Class<? extends ResourceHandler> handlerClass = template.handlerClass(); result.setQueryable(Queryable.class.isAssignableFrom(handlerClass)); result.setModifiable(Modifiable.class.isAssignableFrom(handlerClass)); result.setDeletable(Deletable.class.isAssignableFrom(handlerClass) && !resource.isRoot()); // TODO: Analyze how to provide patch support result.setPatchable(false); TemplateIntrospector introspector = TemplateIntrospector.newInstance(template); result.setFactory(introspector.isContainer()); return result; }
@Override public void visitIndirectContainerTemplate(IndirectContainerTemplate template) { TemplateIntrospector introspector = TemplateIntrospector.newInstance(template); assertThat(introspector.template(),sameInstance((ResourceTemplate)template)); assertThat(introspector.isResource(),equalTo(false)); assertThat(introspector.isContainer(),equalTo(true)); assertThat(introspector.isBasicContainer(),equalTo(false)); assertThat(introspector.isMembershipAwareContainer(),equalTo(true)); assertThat(introspector.isDirectContainer(),equalTo(false)); assertThat(introspector.isIndirectContainer(),equalTo(true)); assertThat(introspector.getMembershipPredicate(),equalTo(template.membershipPredicate())); assertThat(introspector.getMembershipRelation(),equalTo(template.membershipRelation())); assertThat(introspector.getInsertedContentRelation(),equalTo(template.insertedContentRelation())); }
private void deleteAttachedResource(DelegatedResourceSnapshot snapshot) { TemplateIntrospector introspector = TemplateIntrospector.newInstance(parent().template()); if(!introspector.isContainer()) { return; } DelegatedContainerSnapshot parent=(DelegatedContainerSnapshot)snapshot; if(parent.softRemoveMember(this)) { UnitOfWork.getCurrent().registerDirty(parent); if(introspector.isMembershipAwareContainer() && !parent.isRoot()) { UnitOfWork.getCurrent().registerDirty(parent.parent()); } } }