001/**
002 * #-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=#
003 *   This file is part of the LDP4j Project:
004 *     http://www.ldp4j.org/
005 *
006 *   Center for Open Middleware
007 *     http://www.centeropenmiddleware.com/
008 * #-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=#
009 *   Copyright (C) 2014-2016 Center for Open Middleware.
010 * #-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=#
011 *   Licensed under the Apache License, Version 2.0 (the "License");
012 *   you may not use this file except in compliance with the License.
013 *   You may obtain a copy of the License at
014 *
015 *             http://www.apache.org/licenses/LICENSE-2.0
016 *
017 *   Unless required by applicable law or agreed to in writing, software
018 *   distributed under the License is distributed on an "AS IS" BASIS,
019 *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
020 *   See the License for the specific language governing permissions and
021 *   limitations under the License.
022 * #-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=#
023 *   Artifact    : org.ldp4j.framework:ldp4j-application-kernel-api:0.2.1
024 *   Bundle      : ldp4j-application-kernel-api-0.2.1.jar
025 * #-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=#
026 */
027package org.ldp4j.application.kernel.resource;
028
029import java.net.URI;
030import java.util.Date;
031import java.util.Set;
032
033import org.ldp4j.application.data.constraints.Constraints;
034import org.ldp4j.application.engine.context.HttpRequest;
035import org.ldp4j.application.kernel.constraints.ConstraintReport;
036import org.ldp4j.application.kernel.constraints.ConstraintReportId;
037
038/**
039 * TODO: Update API to enable using Individual identifiers instead of plain
040 * URIs when dealing with indirect identifiers.
041 */
042public interface Resource {
043
044  ResourceId id();
045
046  void setIndirectId(URI indirectId);
047
048  URI indirectId();
049
050  boolean isRoot();
051
052  ResourceId parentId();
053
054  Attachment findAttachment(ResourceId resourceId);
055
056  Resource attach(String attachmentId, ResourceId resourceId);
057
058  <T extends Resource> T attach(String attachmentId, ResourceId resourceId, Class<? extends T> clazz);
059
060  boolean detach(Attachment attachment);
061
062  Set<? extends Attachment> attachments();
063
064  void accept(ResourceVisitor visitor);
065
066  ConstraintReport addConstraintReport(Constraints constraints, Date date, HttpRequest request);
067
068  Set<ConstraintReportId> constraintReports();
069
070  void removeFailure(ConstraintReport report);
071
072}