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}