001/* 002 * Copyright 2025 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 */ 016package org.ametys.plugins.repository.trash; 017 018import org.ametys.plugins.repository.AmetysObject; 019import org.ametys.plugins.repository.jcr.JCRAmetysObject; 020 021/** 022 * {@link AmetysObject} which can be moved to trash or restored. 023 */ 024public interface TrashableAmetysObject extends JCRAmetysObject 025{ 026 /** 027 * Move this {@link AmetysObject} to the trash. 028 * @return the created trash element that represents the object in the trash 029 */ 030 public TrashElement moveToTrash(); 031 032 /** 033 * Restore this {@link AmetysObject} from the trash. 034 * @implNote when invoked on a object that is not in the trash, this method should have no effect 035 * when invoked on a object in the trash, it should restore the Ametys object in the default workspace and return it. 036 * 037 * @return the restored ametys object 038 * @throws UnknownParentException if it's not possible to determine a location to restore the object 039 */ 040 public TrashableAmetysObject restoreFromTrash() throws UnknownParentException; 041}