001/*
002 *  Copyright 2018 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.data.holder.group;
017
018import java.util.List;
019import java.util.Map;
020import java.util.Optional;
021
022import org.ametys.plugins.repository.data.DataComment;
023import org.ametys.plugins.repository.data.UnknownDataException;
024import org.ametys.plugins.repository.data.external.ExternalizableDataProvider.ExternalizableDataStatus;
025import org.ametys.plugins.repository.data.holder.ModifiableModelAwareDataHolder;
026import org.ametys.plugins.repository.data.holder.values.SynchronizationContext;
027import org.ametys.plugins.repository.data.holder.values.SynchronizationResult;
028import org.ametys.runtime.model.ViewItemContainer;
029import org.ametys.runtime.model.exception.BadDataPathCardinalityException;
030import org.ametys.runtime.model.exception.BadItemTypeException;
031import org.ametys.runtime.model.exception.UndefinedItemPathException;
032
033/**
034 * Interface for modifiable model aware composites
035 */
036public interface ModifiableModelAwareComposite extends ModelAwareComposite, ModifiableComposite, ModifiableModelAwareDataHolder
037{
038    @Override
039    public default ModifiableModelAwareComposite getComposite(String compositePath) throws IllegalArgumentException, UndefinedItemPathException, BadItemTypeException, BadDataPathCardinalityException
040    {
041        return getDefaultDataHolder().getComposite(compositePath);
042    }
043    
044    @Override
045    public default ModifiableModelAwareComposite getLocalComposite(String compositePath) throws IllegalArgumentException, UndefinedItemPathException, BadItemTypeException, BadDataPathCardinalityException
046    {
047        return getDefaultDataHolder().getLocalComposite(compositePath);
048    }
049    
050    @Override
051    public default ModifiableModelAwareComposite getExternalComposite(String compositePath) throws IllegalArgumentException, UndefinedItemPathException, BadItemTypeException, BadDataPathCardinalityException
052    {
053        return getDefaultDataHolder().getExternalComposite(compositePath);
054    }
055
056    @Override
057    public default ModifiableModelAwareRepeater getRepeater(String repeaterPath) throws IllegalArgumentException, UndefinedItemPathException, BadItemTypeException, BadDataPathCardinalityException
058    {
059        return getDefaultDataHolder().getRepeater(repeaterPath);
060    }
061    
062    @Override
063    public default ModifiableModelAwareRepeater getLocalRepeater(String repeaterPath) throws IllegalArgumentException, UndefinedItemPathException, BadItemTypeException, BadDataPathCardinalityException
064    {
065        return getDefaultDataHolder().getLocalRepeater(repeaterPath);
066    }
067    
068    @Override
069    public default ModifiableModelAwareRepeater getExternalRepeater(String repeaterPath) throws IllegalArgumentException, UndefinedItemPathException, BadItemTypeException, BadDataPathCardinalityException
070    {
071        return getDefaultDataHolder().getExternalRepeater(repeaterPath);
072    }
073
074    public default ModifiableModelAwareComposite getComposite(String compositePath, boolean createNew) throws IllegalArgumentException, UndefinedItemPathException, BadItemTypeException, BadDataPathCardinalityException
075    {
076        return getDefaultDataHolder().getComposite(compositePath, createNew);
077    }
078    
079    public default ModifiableModelAwareComposite getLocalComposite(String compositePath, boolean createNew) throws IllegalArgumentException, UndefinedItemPathException, BadItemTypeException, BadDataPathCardinalityException
080    {
081        return getDefaultDataHolder().getLocalComposite(compositePath, createNew);
082    }
083    
084    public default ModifiableModelAwareComposite getExternalComposite(String compositePath, boolean createNew) throws IllegalArgumentException, UndefinedItemPathException, BadItemTypeException, BadDataPathCardinalityException
085    {
086        return getDefaultDataHolder().getExternalComposite(compositePath, createNew);
087    }
088
089    public default ModifiableModelAwareRepeater getRepeater(String repeaterPath, boolean createNew) throws IllegalArgumentException, UndefinedItemPathException, BadItemTypeException, BadDataPathCardinalityException
090    {
091        return getDefaultDataHolder().getRepeater(repeaterPath, createNew);
092    }
093    
094    public default ModifiableModelAwareRepeater getLocalRepeater(String repeaterPath, boolean createNew) throws IllegalArgumentException, UndefinedItemPathException, BadItemTypeException, BadDataPathCardinalityException
095    {
096        return getDefaultDataHolder().getLocalRepeater(repeaterPath, createNew);
097    }
098    
099    public default ModifiableModelAwareRepeater getExternalRepeater(String repeaterPath, boolean createNew) throws IllegalArgumentException, UndefinedItemPathException, BadItemTypeException, BadDataPathCardinalityException
100    {
101        return getDefaultDataHolder().getExternalRepeater(repeaterPath, createNew);
102    }
103    
104    public default <T extends SynchronizationResult> T synchronizeValues(Map<String, Object> values) throws UndefinedItemPathException, BadItemTypeException
105    {
106        return getDefaultDataHolder().synchronizeValues(values);
107    }
108    
109    public default <T extends SynchronizationResult> T synchronizeValues(Map<String, Object> values, SynchronizationContext context) throws UndefinedItemPathException, BadItemTypeException
110    {
111        return getDefaultDataHolder().synchronizeValues(values, context);
112    }
113    
114    public default <T extends SynchronizationResult> T synchronizeValues(ViewItemContainer viewItemContainer, Map<String, Object> values) throws UndefinedItemPathException, BadItemTypeException
115    {
116        return getDefaultDataHolder().synchronizeValues(viewItemContainer, values);
117    }
118    
119    public default <T extends SynchronizationResult> T synchronizeValues(ViewItemContainer viewItemContainer, Map<String, Object> values, SynchronizationContext context) throws UndefinedItemPathException, BadItemTypeException
120    {
121        return getDefaultDataHolder().synchronizeValues(viewItemContainer, values, context);
122    }
123
124    public default void setValue(String dataPath, Object value) throws IllegalArgumentException, UndefinedItemPathException, BadItemTypeException, BadDataPathCardinalityException
125    {
126        getDefaultDataHolder().setValue(dataPath, value);
127    }
128    
129    public default void setLocalValue(String dataPath, Object localValue) throws IllegalArgumentException, UndefinedItemPathException, BadItemTypeException, BadDataPathCardinalityException
130    {
131        getDefaultDataHolder().setLocalValue(dataPath, localValue);
132    }
133    
134    public default void setExternalValue(String dataPath, Object externalValue) throws IllegalArgumentException, UndefinedItemPathException, BadItemTypeException, BadDataPathCardinalityException
135    {
136        getDefaultDataHolder().setExternalValue(dataPath, externalValue);
137    }
138    
139    public default void setStatus(String dataPath, ExternalizableDataStatus status) throws IllegalArgumentException, UndefinedItemPathException, BadItemTypeException, BadDataPathCardinalityException
140    {
141        getDefaultDataHolder().setStatus(dataPath, status);
142    }
143    
144    public default void setComments(String dataName, List<DataComment> comments) throws IllegalArgumentException, UndefinedItemPathException
145    {
146        getDefaultDataHolder().setComments(dataName, comments);
147    }
148    
149    public default void removeValue(String dataPath) throws IllegalArgumentException, UndefinedItemPathException, UnknownDataException, BadDataPathCardinalityException
150    {
151        getDefaultDataHolder().removeValue(dataPath);
152    }
153    
154    public default void removeLocalValue(String dataPath) throws IllegalArgumentException, UndefinedItemPathException, BadItemTypeException, UnknownDataException, BadDataPathCardinalityException
155    {
156        getDefaultDataHolder().removeLocalValue(dataPath);
157    }
158    
159    public default void removeExternalValue(String dataPath) throws IllegalArgumentException, UndefinedItemPathException, BadItemTypeException, UnknownDataException, BadDataPathCardinalityException
160    {
161        getDefaultDataHolder().removeExternalValue(dataPath);
162    }
163    
164    public default void removeExternalizableMetadataIfExists(String dataPath) throws IllegalArgumentException, BadItemTypeException, UndefinedItemPathException, BadDataPathCardinalityException
165    {
166        getDefaultDataHolder().removeExternalizableMetadataIfExists(dataPath);
167    }
168    
169    @Override
170    public default Optional<? extends ModifiableModelAwareDataHolder> getParentDataHolder()
171    {
172        return getDefaultDataHolder().getParentDataHolder();
173    }
174    
175    @Override
176    public default ModifiableModelAwareDataHolder getRootDataHolder()
177    {
178        return getDefaultDataHolder().getRootDataHolder();
179    }
180
181    @Override
182    public ModifiableModelAwareDataHolder getDefaultDataHolder();
183}