@Override protected void init() { ResourceTemplate template = super.getTemplate(this.id); Set<AttachedTemplate> attachedTemplates = template.attachedTemplates(); if(!attachedTemplates.isEmpty() && this.attachments.isEmpty()) { for(AttachedTemplate attachedTemplate:attachedTemplates) { JPAAttachment newAttachment = new JPAAttachment(attachedTemplate.id()); this.attachments.add(newAttachment); } } this.attachmentCollection.init(this.attachments); }
@Override protected void fillInMetadata(ContentPreferences contentPreferences, final Individual<?, ?> individual, final Context ctx) { individual. addValue( ctx.property(RDF.TYPE), ctx.reference(LDP.RESOURCE)); for(Entry<String, PublicResource> entry:attachments().entrySet()) { AttachedTemplate attachedTemplate = template().attachedTemplate(entry.getKey()); individual.addValue( attachedTemplate.predicate().or(HAS_ATTACHMENT), ctx.newIndividual(entry.getValue())); populateAdditionalMetadata(contentPreferences,individual,ctx,entry.getValue()); } }
@Override <T extends DelegatedResourceSnapshot> T createAttachedResource( Class<? extends T> snapshotClass, String attachmentId, Name<?> name, Class<? extends ResourceHandler> handlerClass, DelegatedResourceSnapshot ctx) { AttachedTemplate attachedTemplate = template().attachedTemplate(attachmentId); checkState(attachedTemplate!=null,"No attachment '%s' is defined for template '%s'",attachmentId,template()); checkState(attachedTemplate.template().handlerClass().isAssignableFrom(handlerClass),"Attachment '%s' of template '%s' is not compatible with '%s' (%s)",attachmentId,template().id(),handlerClass.getCanonicalName(),attachedTemplate.template().handlerClass().getCanonicalName()); checkState(nameFilterForAttachment(attachmentId).isValid(name),"Resource name '%s' is already in use",name); T newSnapshot= ctx.newChildResource(ResourceId.createId(name,attachedTemplate.template()),snapshotClass); DelegatedAttachmentSnapshot newAttachment = AttachmentSnapshotCollection.newAttachment(attachmentId, newSnapshot); this.attachments.add(newAttachment); UnitOfWork.getCurrent().registerDirty(ctx); newSnapshot.markNew(); if(LOGGER.isTraceEnabled()) { LOGGER.trace("Attached '{}' as '{}' to '{}'",newSnapshot.resourceId(),attachmentId,ctx.resourceId()); } return snapshotClass.cast(newSnapshot); }
private String generatePathForAttachment(Resource child, Resource parent) throws EndpointNotFoundException { Attachment attachment=parent.findAttachment(child.id()); if(attachment==null) { return null; } Endpoint endpoint=getResourceEndpoint(parent.id()); ResourceTemplate parentTemplate=this.templateManagementService.templateOfId(parent.id().templateId()); AttachedTemplate attachedTemplate = parentTemplate.attachedTemplate(attachment.id()); return PathBuilder. create(). addSegment(endpoint.path()). addSegment(attachedTemplate.path()). addSegment(attachment.version()>0?attachment.version():null). build(); }
private void configurePropertyValidationConstraints( ValidatorBuilder builder, Individual<?, ?> individual, DataSet metadata, Property property, Collection<AttachedTemplate> value) { builder.withPropertyConstraint(ValidationConstraintFactory.readOnlyProperty(property)); for(AttachedTemplate attachedTemplate:value) { PublicResource resource = attachments().get(attachedTemplate.id()); if(resource!=null) { configureAdditionalValidationConstraints(builder,individual,metadata,resource); } } }
@Override protected void configureValidationConstraints(ValidatorBuilder builder, Individual<?,?> individual, DataSet metadata) { builder.withPropertyConstraint(ValidationConstraintFactory.mandatoryPropertyValues(individual.property(RDF.TYPE.as(URI.class)))); Multimap<URI,AttachedTemplate> attachmentMap=LinkedHashMultimap.create(); for(AttachedTemplate attachedTemplate:template().attachedTemplates()) { URI propertyId = attachedTemplate.predicate().or(HAS_ATTACHMENT); attachmentMap.put(propertyId, attachedTemplate); } for(Entry<URI, Collection<AttachedTemplate>> entry:attachmentMap.asMap().entrySet()) { URI propertyId=entry.getKey(); Property property = individual.property(propertyId); if(property!=null) { configurePropertyValidationConstraints(builder,individual,metadata,property,entry.getValue()); } else { builder.withPropertyConstraint(ValidationConstraintFactory.readOnlyProperty(individual.id(),propertyId)); } } }