001/* 002 * Copyright 2026 Anyware Services 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016 017package org.ametys.cms.repository; 018 019import java.util.Map; 020import java.util.Set; 021 022import javax.jcr.Node; 023 024import org.ametys.core.group.GroupIdentity; 025import org.ametys.core.right.ProfileAssignmentStorage.AnonymousOrAnyConnectedKeys; 026import org.ametys.core.right.ProfileAssignmentStorage.UserOrGroup; 027import org.ametys.core.user.UserIdentity; 028import org.ametys.plugins.repository.AmetysObject; 029import org.ametys.plugins.repository.AmetysObjectIterable; 030import org.ametys.plugins.repository.AmetysRepositoryException; 031import org.ametys.plugins.repository.ModifiableACLAmetysObject; 032import org.ametys.plugins.repository.RepositoryIntegrityViolationException; 033import org.ametys.plugins.repository.TraversableAmetysObject; 034import org.ametys.plugins.repository.UnknownAmetysObjectException; 035import org.ametys.plugins.repository.jcr.ACLJCRAmetysObjectHelper; 036import org.ametys.plugins.repository.jcr.JCRTraversableAmetysObject; 037 038/** 039 * Default implementation of a {@link TraversableAmetysObject}, backed by a JCR node.<br> 040 * This implementation heavily relies on its {@link DefaultIndexableTraversableAmetysObjectFactory} counterpart. 041 * @param <F> the actual type of factory. 042 */ 043public class DefaultIndexableTraversableAmetysObject<F extends DefaultIndexableTraversableAmetysObjectFactory> extends SimpleIndexableAmetysObject<F> implements JCRTraversableAmetysObject, ModifiableACLAmetysObject 044{ 045 private DefaultIndexableTraversableAmetysObjectFactory _traversableFactory; 046 047 /** 048 * Creates a DefaultModelAwareTraversableAmetysObject. 049 * @param node the node backing this {@link AmetysObject}. 050 * @param parentPath the parent path in the Ametys hierarchy. 051 * @param factory the {@link DefaultIndexableTraversableAmetysObjectFactory} which creates the AmetysObject. 052 */ 053 public DefaultIndexableTraversableAmetysObject(Node node, String parentPath, F factory) 054 { 055 super(node, parentPath, factory); 056 _traversableFactory = factory; 057 } 058 059 public boolean hasChild(String name) throws AmetysRepositoryException 060 { 061 return _traversableFactory.hasChild(this, name); 062 } 063 064 @SuppressWarnings("unchecked") 065 public <A extends AmetysObject> A createChild(String name, String type) throws AmetysRepositoryException, RepositoryIntegrityViolationException 066 { 067 return (A) _traversableFactory.createChild(this, name, type); 068 } 069 070 @SuppressWarnings("unchecked") 071 public <A extends AmetysObject> A getChild(String path) throws AmetysRepositoryException, UnknownAmetysObjectException 072 { 073 return (A) _traversableFactory.getChild(this, path); 074 } 075 076 public <A extends AmetysObject> AmetysObjectIterable<A> getChildren() throws AmetysRepositoryException 077 { 078 return _traversableFactory.getChildren(this); 079 } 080 081 public Map<AnonymousOrAnyConnectedKeys, Set<String>> getProfilesForAnonymousAndAnyConnectedUser() 082 { 083 return ACLJCRAmetysObjectHelper.getProfilesForAnonymousAndAnyConnectedUser(getNode()); 084 } 085 086 public Map<GroupIdentity, Map<UserOrGroup, Set<String>>> getProfilesForGroups(Set<GroupIdentity> groups) 087 { 088 return ACLJCRAmetysObjectHelper.getProfilesForGroups(getNode(), groups); 089 } 090 091 public Map<UserIdentity, Map<UserOrGroup, Set<String>>> getProfilesForUsers(UserIdentity user) 092 { 093 return ACLJCRAmetysObjectHelper.getProfilesForUsers(getNode(), user); 094 } 095 096 public void addAllowedProfilesForAnyConnectedUser(Set<String> profileIds) 097 { 098 ACLJCRAmetysObjectHelper.addAllowedProfilesForAnyConnectedUser(getNode(), profileIds); 099 } 100 101 public void removeAllowedProfilesForAnyConnectedUser(Set<String> profileIds) 102 { 103 ACLJCRAmetysObjectHelper.removeAllowedProfilesForAnyConnectedUser(getNode(), profileIds); 104 } 105 106 public void addDeniedProfilesForAnyConnectedUser(Set<String> profileIds) 107 { 108 ACLJCRAmetysObjectHelper.addDeniedProfilesForAnyConnectedUser(getNode(), profileIds); 109 } 110 111 public void removeDeniedProfilesForAnyConnectedUser(Set<String> profileIds) 112 { 113 ACLJCRAmetysObjectHelper.removeDeniedProfilesForAnyConnectedUser(getNode(), profileIds); 114 } 115 116 public void addAllowedProfilesForAnonymous(Set<String> profileIds) 117 { 118 ACLJCRAmetysObjectHelper.addAllowedProfilesForAnonymous(getNode(), profileIds); 119 } 120 121 public void removeAllowedProfilesForAnonymous(Set<String> profileIds) 122 { 123 ACLJCRAmetysObjectHelper.removeAllowedProfilesForAnonymous(getNode(), profileIds); 124 } 125 126 public void addDeniedProfilesForAnonymous(Set<String> profileIds) 127 { 128 ACLJCRAmetysObjectHelper.addDeniedProfilesForAnonymous(getNode(), profileIds); 129 } 130 131 public void removeDeniedProfilesForAnonymous(Set<String> profileIds) 132 { 133 ACLJCRAmetysObjectHelper.removeDeniedProfilesForAnonymous(getNode(), profileIds); 134 } 135 136 public void addAllowedUsers(Set<UserIdentity> users, String profileId) 137 { 138 ACLJCRAmetysObjectHelper.addAllowedUsers(users, getNode(), profileId); 139 } 140 141 public void removeAllowedUsers(Set<UserIdentity> users, String profileId) 142 { 143 ACLJCRAmetysObjectHelper.removeAllowedUsers(users, getNode(), profileId); 144 } 145 146 public void removeAllowedUsers(Set<UserIdentity> users) 147 { 148 ACLJCRAmetysObjectHelper.removeAllowedUsers(users, getNode()); 149 } 150 151 public void addAllowedGroups(Set<GroupIdentity> groups, String profileId) 152 { 153 ACLJCRAmetysObjectHelper.addAllowedGroups(groups, getNode(), profileId); 154 } 155 156 public void removeAllowedGroups(Set<GroupIdentity> groups, String profileId) 157 { 158 ACLJCRAmetysObjectHelper.removeAllowedGroups(groups, getNode(), profileId); 159 } 160 161 public void removeAllowedGroups(Set<GroupIdentity> groups) 162 { 163 ACLJCRAmetysObjectHelper.removeAllowedGroups(groups, getNode()); 164 } 165 166 public void addDeniedUsers(Set<UserIdentity> users, String profileId) 167 { 168 ACLJCRAmetysObjectHelper.addDeniedUsers(users, getNode(), profileId); 169 } 170 171 public void removeDeniedUsers(Set<UserIdentity> users, String profileId) 172 { 173 ACLJCRAmetysObjectHelper.removeDeniedUsers(users, getNode(), profileId); 174 } 175 176 public void removeDeniedUsers(Set<UserIdentity> users) 177 { 178 ACLJCRAmetysObjectHelper.removeDeniedUsers(users, getNode()); 179 } 180 181 public void addDeniedGroups(Set<GroupIdentity> groups, String profileId) 182 { 183 ACLJCRAmetysObjectHelper.addDeniedGroups(groups, getNode(), profileId); 184 } 185 186 public void removeDeniedGroups(Set<GroupIdentity> groups, String profileId) 187 { 188 ACLJCRAmetysObjectHelper.removeDeniedGroups(groups, getNode(), profileId); 189 } 190 191 public void removeDeniedGroups(Set<GroupIdentity> groups) 192 { 193 ACLJCRAmetysObjectHelper.removeDeniedGroups(groups, getNode()); 194 } 195 196 public boolean isInheritanceDisallowed() 197 { 198 return ACLJCRAmetysObjectHelper.isInheritanceDisallowed(getNode()); 199 } 200 201 public void disallowInheritance(boolean disallow) 202 { 203 ACLJCRAmetysObjectHelper.disallowInheritance(getNode(), disallow); 204 } 205}