blob: ef015c379c7e7a654f085c8fa57a3a0f91881303 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.jackrabbit.oak.security.user;
import java.util.Iterator;
import javax.jcr.RepositoryException;
import javax.jcr.Value;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
/**
* Internal interface covering those methods of {link Authorizable} that deal
* with reading and writing custom properties defined with user and groups.
*/
interface AuthorizableProperties {
/**
* Retrieve all property names located at the given relative path underneath
* the associated {@code Authorizable} instance.
*
* @param relPath A relative path referring to a node associated with a
* given authorizable. A relative path consisting only of the current
* element "." refers to the authorizable node itself.
* @return An iterator of property names available at the given {@code relPath}.
* @throws RepositoryException If an error occurs.
*/
@NotNull
Iterator<String> getNames(@NotNull String relPath) throws RepositoryException;
/**
* Returns {@code true} if there is a custom authorizable property at the
* specified {@code relPath}; false if no such property exists or if the
* path refers to a property located outside of the authorizable tree
* or a protected property that cannot be read/modified using
* the {@code AuthorizableProperties}.
*
* @param relPath A relative path to a property.
* @return {@code true} if a valid property exists; {@code false} otherwise.
* @throws RepositoryException If an error occurs.
*/
boolean hasProperty(@NotNull String relPath) throws RepositoryException;
/**
* Returns the values of the property identified by the specified
* {@code relPath}. If no such property exists or the property doesn't
* represent a custom property associated with this authorizable {@code null}
* is returned.
*
* @param relPath A relative path to an authorizable property.
* @return The value(s) of the specified property or {@code null} if no
* such property exists or the property doesn't represent a valid authorizable
* property exposed by this interface.
* @throws RepositoryException If an error occurs.
*/
@Nullable
Value[] getProperty(@NotNull String relPath) throws RepositoryException;
/**
* Creates or modifies the property at the specified {@code relPath}. If
* the property exists and is multi-valued it is converted into a single
* valued property.
*
* @param relPath A relative path referring to a custom authorizable property
* located underneath the associated authorizable.
* @param value The value of the property.
* @throws RepositoryException If the {@code relPath} refers to an invalid
* property: located outside of the scope of this authorizable or one
* that represents protected content that cannot be modified using this API.
* @see #setProperty(String, javax.jcr.Value[])
*/
void setProperty(@NotNull String relPath, @Nullable Value value) throws RepositoryException;
/**
* Creates or modifies the property at the specified {@code relPath}. If
* the property exists and is single-valued it is converted into a multi-
* value property.
*
* @param relPath A relative path referring to a custom authorizable property
* associated with the authorizable.
* @param values The values of the property.
* @throws RepositoryException If the {@code relPath} refers to an invalid
* property: located outside of the scope of this authorizable or one
* that represents protected content that cannot be modified using this API.
* @see #setProperty(String, javax.jcr.Value)
*/
void setProperty(@NotNull String relPath, @Nullable Value[] values) throws RepositoryException;
/**
* Removes the property identified by the given {@code relPath} and returns
* {@code true} if the property was successfully removed.
*
* @param relPath A relative path referring to a custom authorizable property
* associated with the authorizable.
* @return {@code true} if the property exists and could successfully be
* removed; {@code false} if no such property exists.
* @throws RepositoryException If the specified path points to a property
* that cannot be altered using this API because it is not associated with
* this authorizable or is otherwise considered protected.
*/
boolean removeProperty(@NotNull String relPath) throws RepositoryException;
}