001/*
002 *  Copyright 2019 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.ametysobject;
017
018import java.io.IOException;
019import java.util.Collection;
020import java.util.Locale;
021
022import org.xml.sax.ContentHandler;
023import org.xml.sax.SAXException;
024
025import org.ametys.plugins.repository.AmetysObject;
026import org.ametys.plugins.repository.data.external.ExternalizableDataProvider.ExternalizableDataStatus;
027import org.ametys.plugins.repository.data.holder.ModelAwareDataHolder;
028import org.ametys.plugins.repository.data.holder.group.impl.ModelAwareComposite;
029import org.ametys.plugins.repository.data.holder.group.impl.ModelAwareRepeater;
030import org.ametys.runtime.model.ModelItem;
031import org.ametys.runtime.model.ModelItemContainer;
032import org.ametys.runtime.model.exception.BadDataPathCardinalityException;
033import org.ametys.runtime.model.exception.BadItemTypeException;
034import org.ametys.runtime.model.exception.UndefinedItemPathException;
035
036/**
037 * Model aware {@link AmetysObject} that can handle data.
038 */
039public interface ModelAwareDataAwareAmetysObject extends DataAwareAmetysObject, ModelAwareDataHolder
040{
041    @Override
042    public ModelAwareDataHolder getDataHolder();
043    
044    public default ModelAwareComposite getComposite(String compositePath) throws IllegalArgumentException, UndefinedItemPathException, BadItemTypeException, BadDataPathCardinalityException
045    {
046        return getDataHolder().getComposite(compositePath);
047    }
048    
049    public default ModelAwareComposite getLocalComposite(String compositePath) throws IllegalArgumentException, UndefinedItemPathException, BadItemTypeException, BadDataPathCardinalityException
050    {
051        return getDataHolder().getLocalComposite(compositePath);
052    }
053    
054    public default ModelAwareComposite getExternalComposite(String compositePath) throws IllegalArgumentException, UndefinedItemPathException, BadItemTypeException, BadDataPathCardinalityException
055    {
056        return getDataHolder().getExternalComposite(compositePath);
057    }
058
059    public default ModelAwareRepeater getRepeater(String repeaterPath) throws IllegalArgumentException, UndefinedItemPathException, BadItemTypeException, BadDataPathCardinalityException
060    {
061        return getDataHolder().getRepeater(repeaterPath);
062    }
063
064    public default ModelAwareRepeater getLocalRepeater(String repeaterPath) throws IllegalArgumentException, UndefinedItemPathException, BadItemTypeException, BadDataPathCardinalityException
065    {
066        return getDataHolder().getLocalRepeater(repeaterPath);
067    }
068
069    public default ModelAwareRepeater getExternalRepeater(String repeaterPath) throws IllegalArgumentException, UndefinedItemPathException, BadItemTypeException, BadDataPathCardinalityException
070    {
071        return getDataHolder().getExternalRepeater(repeaterPath);
072    }
073    
074    public default boolean hasValue(String dataPath) throws IllegalArgumentException, BadDataPathCardinalityException
075    {
076        return DataAwareAmetysObject.super.hasValue(dataPath);
077    }
078    
079    public default boolean hasLocalValue(String dataPath) throws IllegalArgumentException, BadDataPathCardinalityException
080    {
081        return getDataHolder().hasLocalValue(dataPath);
082    }
083    
084    public default boolean hasExternalValue(String dataPath) throws IllegalArgumentException, BadDataPathCardinalityException
085    {
086        return getDataHolder().hasExternalValue(dataPath);
087    }
088
089    public default <T extends Object> T getValue(String dataPath, boolean allowMultiValuedPathSegments) throws IllegalArgumentException, UndefinedItemPathException, BadItemTypeException, BadDataPathCardinalityException
090    {
091        return getDataHolder().getValue(dataPath, allowMultiValuedPathSegments);
092    }
093    
094    public default <T> T getValue(String dataPath, boolean useDefaultFromModel, T defaultValue) throws IllegalArgumentException, UndefinedItemPathException, BadItemTypeException, BadDataPathCardinalityException
095    {
096        return getDataHolder().getValue(dataPath, useDefaultFromModel, defaultValue);
097    }
098    
099    public default <T> T getLocalValue(String dataPath) throws IllegalArgumentException, UndefinedItemPathException, BadItemTypeException, BadDataPathCardinalityException
100    {
101        return getDataHolder().getLocalValue(dataPath);
102    }
103    
104    public default <T> T getExternalValue(String dataPath) throws IllegalArgumentException, UndefinedItemPathException, BadItemTypeException, BadDataPathCardinalityException
105    {
106        return getDataHolder().getExternalValue(dataPath);
107    }
108    
109    public default ExternalizableDataStatus getStatus(String dataPath) throws IllegalArgumentException, UndefinedItemPathException, BadDataPathCardinalityException
110    {
111        return getDataHolder().getStatus(dataPath);
112    }
113    
114    public default Collection< ? extends ModelItemContainer> getModel()
115    {
116        return getDataHolder().getModel();
117    }
118    
119    public default ModelItem getDefinition(String path) throws IllegalArgumentException, UndefinedItemPathException
120    {
121        return getDataHolder().getDefinition(path);
122    }
123    
124    default boolean hasDefinition(String path) throws IllegalArgumentException
125    {
126        return getDataHolder().hasDefinition(path);
127    }
128    
129    public default void dataToSAX(ContentHandler contentHandler, Locale locale) throws SAXException, IOException, BadItemTypeException
130    {
131        getDataHolder().dataToSAX(contentHandler, locale);
132    }
133
134    public default Collection<String> getDataNames()
135    {
136        return getDataHolder().getDataNames();
137    }
138}