private InMemoryResource createMemberResource(ResourceId resourceId) { checkNotNull(resourceId,"Member resource identifier cannot be null"); checkState(!this.members.containsKey(resourceId),"A resource with id '%s' is already a member of the container",resourceId); return createChild(resourceId,template().memberTemplate()); }
@Override public Class<? extends ContainerHandler> handlerClass() { return template().handlerClass(); }
@Override public Optional<String> memberPath() { return template().memberPath(); }
@Override public ResourceTemplate memberTemplate() { return ImmutableTemplateFactory.newImmutable(template().memberTemplate()); }
private String generatePathForMember(Resource child, Container parent, String desiredPath) throws EndpointNotFoundException { Member member = parent.findMember(child.id()); if(member!=null) { Endpoint endpoint=getResourceEndpoint(parent.id()); ContainerTemplate parentTemplate=this.templateManagementService.templateOfId(parent.id().templateId(),ContainerTemplate.class); if(parentTemplate==null) { throw new IllegalStateException("Could not find template resource '"+parent+"'"); } String slugPath=getSlugPath(parent, desiredPath); return PathBuilder. create(). addSegment(endpoint.path()). addSegment(parentTemplate.memberPath().or("")). addSegment(member.number()). addSegment(slugPath). build(); } return null; }
@Override public Resource addMember(ResourceId resourceId) { checkNotNull(resourceId,"Member resource identifier cannot be null"); Key memberId = Key.newInstance(resourceId); checkState(!this.members.containsKey(memberId),"A resource with id '%s' is already a member of the container",resourceId); JPAResource newResource=createChild(resourceId,template().memberTemplate()); createMember(memberId); return newResource; }
/** * NOTE: For the time being containers will always behave as containers. * Whenever we support downgrading containers to resources the visitor will * have to be updated to reflect that. */ private void verifyInteractionModel(InteractionModel interactionModel) { if(interactionModel==null) { return; } Set<InteractionModel> acceptable=Sets.newHashSet(); containerTemplate().memberTemplate().accept(new AcceptableInteractionModelCollector(acceptable)); if(!acceptable.contains(interactionModel)) { throw new UnsupportedInteractionModelException(interactionModel,acceptable); } }
@Override DelegatedResourceSnapshot addMember(Name<?> resourceName, DelegatedResourceSnapshot ctx) { checkNotNull(resourceName,"Member resource name cannot be null"); ContainerTemplate containerTemplate=(ContainerTemplate)template(); DelegatedResourceSnapshot newMember=ctx.newChildResource(ResourceId.createId(resourceName, containerTemplate.memberTemplate()),DelegatedResourceSnapshot.class); this.members.addMember(newMember); newMember.markNew(); ctx.markDirty(); if(LOGGER.isTraceEnabled()) { LOGGER.trace("Added member '{}' to '{}'",newMember.resourceId(),ctx.resourceId()); } return newMember; }