| /******************************************************************************* |
| * Copyright (c) 2007, 2021 THALES GLOBAL SERVICES. |
| * This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License 2.0 |
| * which accompanies this distribution, and is available at |
| * https://www.eclipse.org/legal/epl-2.0/ |
| * |
| * SPDX-License-Identifier: EPL-2.0 |
| * |
| * Contributors: |
| * Obeo - initial API and implementation |
| *******************************************************************************/ |
| package org.eclipse.sirius.ecore.extender.business.api.permission; |
| |
| import java.util.Collection; |
| import java.util.List; |
| |
| import org.eclipse.emf.ecore.EObject; |
| import org.eclipse.emf.ecore.resource.ResourceSet; |
| |
| /** |
| * A permission authority is able to say whether the software has the right, or not, to set/unset add or remove |
| * attributes. |
| * |
| * @author cbrun |
| * |
| */ |
| public interface IPermissionAuthority { |
| /** |
| * return true if the software may edit the data, false otherwise. |
| * |
| * @param eObj |
| * instance to edit. |
| * @param featureName |
| * name of the feature to edit. |
| * @return true if the software may edit the data, false otherwise. |
| */ |
| boolean canEditFeature(EObject eObj, String featureName); |
| |
| /** |
| * return true if the software may edit the data, false otherwise. |
| * |
| * @param eObj |
| * instance to edit. |
| * @return true if the software may edit the data, false otherwise. |
| */ |
| boolean canEditInstance(EObject eObj); |
| |
| /** |
| * Check whether an element can have new children or not. |
| * |
| * @param eObj |
| * any instance. |
| * @return true if an instance may be aggregated to the given one, false otherwise. |
| */ |
| boolean canCreateIn(EObject eObj); |
| |
| /** |
| * return true if the given instance is a newly created one. |
| * |
| * @param instance |
| * any instance. |
| * @return true if the given instance is a newly created one. |
| */ |
| boolean isNewInstance(EObject instance); |
| |
| /** |
| * return true if the given instance has been changed. |
| * |
| * @param instance |
| * any instance. |
| * @return true if the given instance has been changed. |
| */ |
| boolean isChanged(EObject instance); |
| |
| /** |
| * Called when an instance has been changed. |
| * |
| * @param instance |
| * changed instance. |
| */ |
| void notifyInstanceChange(EObject instance); |
| |
| /** |
| * Called when an instance has been created. |
| * |
| * @param instance |
| * new instance. |
| */ |
| void notifyNewInstanceCreation(EObject instance); |
| |
| /** |
| * Called when an instance has been deleted. |
| * |
| * @param instance |
| * deleted instance. |
| */ |
| void notifyInstanceDeletion(EObject instance); |
| |
| /** |
| * initialize the permission authority. |
| * |
| * @param set |
| * the model. |
| */ |
| void init(ResourceSet set); |
| |
| /** |
| * Clear the permission authority. |
| * |
| * @param set |
| * the model. |
| */ |
| void dispose(ResourceSet set); |
| |
| /** |
| * Add a new listener on the current authority. |
| * |
| * @param listener |
| * new listener. |
| */ |
| void addAuthorityListener(IAuthorityListener listener); |
| |
| /** |
| * Remove an existing listener from the current authority. |
| * |
| * @param listener |
| * listener to remove. |
| */ |
| void removeAuthorityListener(IAuthorityListener listener); |
| |
| /** |
| * Tell whether the authority should report issues through Exceptions. |
| * |
| * @param report |
| * if true then the permission authority will complain when a locked element has been changed. |
| */ |
| void setReportIssues(boolean report); |
| |
| /** |
| * Tell whether the authority should listen the model changes and notify listeners accordingly or not. |
| * |
| * @param shouldListen |
| * true if the authority should listen for changes, false otherwise. |
| */ |
| void setListening(boolean shouldListen); |
| |
| /** |
| * Tell whether the given instance may be deleted or not. An instance can be deleted if the following conditions are |
| * satisfied: |
| * <ul> |
| * <li>The parent modification is authorized. (The deletion will modify the containing feature)</li> |
| * <li>The element itself can be deleted.</li> |
| * <li>The children can be deleted.</li> |
| * </ul> |
| * |
| * @param target |
| * any instance. |
| * @return true if the instance can be deleted. |
| */ |
| boolean canDeleteInstance(EObject target); |
| |
| /** |
| * Notify the lock of given elements. |
| * |
| * @param elements |
| * the locked elements |
| */ |
| void notifyLock(Collection<? extends EObject> elements); |
| |
| /** |
| * Notify the unlock of given elements. |
| * |
| * @param elements |
| * the unlocked elements |
| */ |
| void notifyUnlock(Collection<? extends EObject> elements); |
| |
| /** |
| * Get the {@link LockStatus} of the <code>element</code> {@link EObject}. |
| * |
| * @param element |
| * the {@link EObject} for which we want {@link LockStatus} |
| * |
| * @return the {@link LockStatus} of <code>element</code> |
| */ |
| LockStatus getLockStatus(EObject element); |
| |
| /** |
| * Get the locked objects. |
| * |
| * @return an unmodifiable list of the locked objects. |
| */ |
| List<EObject> getLockedObjects(); |
| } |