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.template;
028
029import java.net.URI;
030
031import org.ldp4j.application.ext.annotations.MembershipRelation;
032
033public final class TemplateIntrospector {
034
035  private static final class TemplateIntrospectorInitializer implements TemplateVisitor {
036
037    private final TemplateIntrospector introspector;
038
039    TemplateIntrospectorInitializer(TemplateIntrospector introspector) {
040      this.introspector = introspector;
041    }
042
043    @Override
044    public void visitResourceTemplate(ResourceTemplate template) {
045      this.introspector.container=false;
046    }
047
048    @Override
049    public void visitContainerTemplate(ContainerTemplate template) {
050      this.introspector.container=true;
051    }
052
053    @Override
054    public void visitBasicContainerTemplate(BasicContainerTemplate template) {
055      visitContainerTemplate(template);
056      this.introspector.basicContainer=true;
057    }
058
059    @Override
060    public void visitMembershipAwareContainerTemplate(MembershipAwareContainerTemplate template) {
061      visitContainerTemplate(template);
062      this.introspector.membershipAware=true;
063      this.introspector.membershipPredicate=template.membershipPredicate();
064      this.introspector.membershipRelation=template.membershipRelation();
065    }
066
067    @Override
068    public void visitDirectContainerTemplate(DirectContainerTemplate template) {
069      visitMembershipAwareContainerTemplate(template);
070      this.introspector.directContainer=true;
071    }
072
073    @Override
074    public void visitIndirectContainerTemplate(IndirectContainerTemplate template) {
075      visitMembershipAwareContainerTemplate(template);
076      this.introspector.indirectContainer=true;
077      this.introspector.insertedContentRelation=template.insertedContentRelation();
078    }
079  }
080
081  private final ResourceTemplate template;
082
083  private boolean container;
084  private boolean basicContainer;
085  private boolean membershipAware;
086  private boolean directContainer;
087  private boolean indirectContainer;
088
089  private URI membershipPredicate;
090  private MembershipRelation membershipRelation;
091  private URI insertedContentRelation;
092
093  private TemplateIntrospector(ResourceTemplate template) {
094    this.template = template;
095  }
096
097  public ResourceTemplate template() {
098    return template;
099  }
100
101  public boolean isResource() {
102    return !container;
103  }
104
105  public boolean isContainer() {
106    return container;
107  }
108
109  public boolean isBasicContainer() {
110    return basicContainer;
111  }
112
113  public boolean isMembershipAwareContainer() {
114    return membershipAware;
115  }
116
117  public MembershipRelation getMembershipRelation() {
118    return membershipRelation;
119  }
120
121  public URI getMembershipPredicate() {
122    return membershipPredicate;
123  }
124
125  public boolean isDirectContainer() {
126    return directContainer;
127  }
128
129  public boolean isIndirectContainer() {
130    return indirectContainer;
131  }
132
133  public URI getInsertedContentRelation() {
134    return insertedContentRelation;
135  }
136
137  public static TemplateIntrospector newInstance(ResourceTemplate template) {
138    TemplateIntrospector introspector = new TemplateIntrospector(template);
139    template.accept(new TemplateIntrospectorInitializer(introspector));
140    return introspector;
141  }
142
143}