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.Collection;
019import java.util.List;
020import java.util.Map;
021import java.util.Optional;
022
023import org.xml.sax.ContentHandler;
024import org.xml.sax.SAXException;
025
026import org.ametys.plugins.repository.data.DataComment;
027import org.ametys.plugins.repository.data.external.ExternalizableDataProvider.ExternalizableDataStatus;
028import org.ametys.plugins.repository.data.holder.ModelAwareDataHolder;
029import org.ametys.plugins.repository.data.holder.ModifiableDataHolder;
030import org.ametys.runtime.model.ModelItem;
031import org.ametys.runtime.model.ModelItemContainer;
032import org.ametys.runtime.model.ViewItemAccessor;
033import org.ametys.runtime.model.exception.BadDataPathCardinalityException;
034import org.ametys.runtime.model.exception.BadItemTypeException;
035import org.ametys.runtime.model.exception.NotUniqueTypeException;
036import org.ametys.runtime.model.exception.UndefinedItemPathException;
037import org.ametys.runtime.model.exception.UnknownTypeException;
038import org.ametys.runtime.model.type.DataContext;
039
040/**
041 * Interface for model aware composites
042 */
043public interface ModelAwareComposite extends ModelAwareDataHolder, Composite
044{
045    @Override
046    public default ModelAwareComposite getComposite(String compositePath) throws IllegalArgumentException, UndefinedItemPathException, BadItemTypeException, BadDataPathCardinalityException
047    {
048        return getDefaultDataHolder().getComposite(compositePath);
049    }
050
051    @Override
052    public default ModelAwareComposite getLocalComposite(String compositePath) throws IllegalArgumentException, UndefinedItemPathException, BadItemTypeException, BadDataPathCardinalityException
053    {
054        return getDefaultDataHolder().getLocalComposite(compositePath);
055    }
056
057    @Override
058    public default ModelAwareComposite getExternalComposite(String compositePath) throws IllegalArgumentException, UndefinedItemPathException, BadItemTypeException, BadDataPathCardinalityException
059    {
060        return getDefaultDataHolder().getExternalComposite(compositePath);
061    }
062
063    @Override
064    public default ModelAwareRepeater getRepeater(String repeaterPath) throws IllegalArgumentException, UndefinedItemPathException, BadItemTypeException, BadDataPathCardinalityException
065    {
066        return getDefaultDataHolder().getRepeater(repeaterPath);
067    }
068
069    @Override
070    public default ModelAwareRepeater getLocalRepeater(String repeaterPath) throws IllegalArgumentException, UndefinedItemPathException, BadItemTypeException, BadDataPathCardinalityException
071    {
072        return getDefaultDataHolder().getLocalRepeater(repeaterPath);
073    }
074
075    @Override
076    public default ModelAwareRepeater getExternalRepeater(String repeaterPath) throws IllegalArgumentException, UndefinedItemPathException, BadItemTypeException, BadDataPathCardinalityException
077    {
078        return getDefaultDataHolder().getExternalRepeater(repeaterPath);
079    }
080
081    @Override
082    public default <T> T getValue(String dataPath) throws IllegalArgumentException, UndefinedItemPathException, BadItemTypeException, BadDataPathCardinalityException
083    {
084        return getDefaultDataHolder().getValue(dataPath);
085    }
086
087    @Override
088    public default <T> T getValue(String dataPath, boolean allowMultiValuedPathSegments) throws IllegalArgumentException, UndefinedItemPathException, BadItemTypeException, BadDataPathCardinalityException
089    {
090        return getDefaultDataHolder().getValue(dataPath, allowMultiValuedPathSegments);
091    }
092
093    @Override
094    public default <T> T getValue(String dataPath, boolean useDefaultFromModel, T defaultValue) throws IllegalArgumentException, UndefinedItemPathException, BadItemTypeException, BadDataPathCardinalityException
095    {
096        return getDefaultDataHolder().getValue(dataPath, useDefaultFromModel, defaultValue);
097    }
098
099    @Override
100    public default <T> T getLocalValue(String dataPath) throws IllegalArgumentException, UndefinedItemPathException, BadItemTypeException, BadDataPathCardinalityException
101    {
102        return getDefaultDataHolder().getLocalValue(dataPath);
103    }
104
105    @Override
106    public default <T> T getExternalValue(String dataPath) throws IllegalArgumentException, UndefinedItemPathException, BadItemTypeException, BadDataPathCardinalityException
107    {
108        return getDefaultDataHolder().getExternalValue(dataPath);
109    }
110
111    @Override
112    public default ExternalizableDataStatus getStatus(String dataPath) throws IllegalArgumentException, UndefinedItemPathException, BadDataPathCardinalityException
113    {
114        return getDefaultDataHolder().getStatus(dataPath);
115    }
116
117    @Override
118    public default List<DataComment> getComments(String dataName) throws IllegalArgumentException, UndefinedItemPathException
119    {
120        return getDefaultDataHolder().getComments(dataName);
121    }
122    
123    public default boolean hasValue(String dataPath) throws IllegalArgumentException, BadDataPathCardinalityException
124    {
125        return getDefaultDataHolder().hasValue(dataPath);
126    }
127
128    @Override
129    public default boolean hasLocalValue(String dataPath) throws IllegalArgumentException, BadDataPathCardinalityException
130    {
131        return getDefaultDataHolder().hasLocalValue(dataPath);
132    }
133
134    @Override
135    public default boolean hasExternalValue(String dataPath) throws IllegalArgumentException, BadDataPathCardinalityException
136    {
137        return getDefaultDataHolder().hasExternalValue(dataPath);
138    }
139    
140    @Override
141    public default boolean hasValueOrEmpty(String dataPath) throws IllegalArgumentException
142    {
143        return getDefaultDataHolder().hasValueOrEmpty(dataPath);
144    }
145
146    @Override
147    public default boolean hasLocalValueOrEmpty(String dataPath) throws IllegalArgumentException, BadDataPathCardinalityException
148    {
149        return getDefaultDataHolder().hasLocalValueOrEmpty(dataPath);
150    }
151
152    @Override
153    public default boolean hasExternalValueOrEmpty(String dataPath) throws IllegalArgumentException, BadDataPathCardinalityException
154    {
155        return getDefaultDataHolder().hasExternalValueOrEmpty(dataPath);
156    }
157
158    @Override
159    public default boolean hasComments(String dataName) throws IllegalArgumentException, UndefinedItemPathException
160    {
161        return getDefaultDataHolder().hasComments(dataName);
162    }
163
164    @Override
165    public default Collection< ? extends ModelItemContainer> getModel()
166    {
167        return getDefaultDataHolder().getModel();
168    }
169
170    @Override
171    public default ModelItem getDefinition(String path) throws IllegalArgumentException, UndefinedItemPathException
172    {
173        return getDefaultDataHolder().getDefinition(path);
174    }
175
176    @Override
177    public default boolean hasDefinition(String path) throws IllegalArgumentException
178    {
179        return getDefaultDataHolder().hasDefinition(path);
180    }
181    
182    @Override
183    public default Collection<String> getDataNames()
184    {
185        return getDefaultDataHolder().getDataNames();
186    }
187    
188    @Override
189    public default void copyTo(ModifiableDataHolder dataHolder) throws UndefinedItemPathException, BadItemTypeException, UnknownTypeException, NotUniqueTypeException
190    {
191        getDefaultDataHolder().copyTo(dataHolder);
192    }
193    
194    public default void dataToSAX(ContentHandler contentHandler, ViewItemAccessor viewItemAccessor, DataContext context) throws SAXException, BadItemTypeException
195    {
196        getDefaultDataHolder().dataToSAX(contentHandler, viewItemAccessor, context);
197    }
198    
199    public default void dataToSAXForEdition(ContentHandler contentHandler, ViewItemAccessor viewItemAccessor, DataContext context) throws SAXException, BadItemTypeException
200    {
201        getDefaultDataHolder().dataToSAXForEdition(contentHandler, viewItemAccessor, context);
202    }
203    
204    public default Map<String, Object> dataToJSON(ViewItemAccessor viewItemAccessor, DataContext context) throws BadItemTypeException
205    {
206        return getDefaultDataHolder().dataToJSON(viewItemAccessor, context);
207    }
208    
209    public default Map<String, Object> dataToJSONForEdition(ViewItemAccessor viewItemAccessor, DataContext context) throws BadItemTypeException
210    {
211        return getDefaultDataHolder().dataToJSONForEdition(viewItemAccessor, context);
212    }
213    
214    public default Map<String, Object> dataToMap(ViewItemAccessor viewItemAccessor, DataContext context)
215    {
216        return getDefaultDataHolder().dataToMap(viewItemAccessor, context);
217    }
218
219    @Override
220    public default Optional<? extends ModelAwareDataHolder> getParentDataHolder()
221    {
222        return getDefaultDataHolder().getParentDataHolder();
223    }
224
225    @Override
226    public default ModelAwareDataHolder getRootDataHolder()
227    {
228        return getDefaultDataHolder().getRootDataHolder();
229    }
230
231    @Override
232    public ModelAwareDataHolder getDefaultDataHolder();
233}