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.Map;
020
021import org.ametys.plugins.repository.AmetysObject;
022import org.ametys.plugins.repository.data.UnknownDataException;
023import org.ametys.plugins.repository.data.external.ExternalizableDataProvider.ExternalizableDataStatus;
024import org.ametys.plugins.repository.data.external.ExternalizableDataProviderExtensionPoint;
025import org.ametys.plugins.repository.data.holder.ModifiableModelAwareDataHolder;
026import org.ametys.plugins.repository.data.holder.group.impl.ModifiableModelAwareComposite;
027import org.ametys.plugins.repository.data.holder.group.impl.ModifiableModelAwareRepeater;
028import org.ametys.plugins.repository.data.repositorydata.ModifiableRepositoryData;
029import org.ametys.runtime.model.ViewItemContainer;
030import org.ametys.runtime.model.exception.BadDataPathCardinalityException;
031import org.ametys.runtime.model.exception.BadItemTypeException;
032import org.ametys.runtime.model.exception.UndefinedItemPathException;
033
034/**
035 * Model aware {@link AmetysObject} that can handle modifiable data.
036 */
037public interface ModifiableModelAwareDataAwareAmetysObject extends ModelAwareDataAwareAmetysObject, ModifiableModelAwareDataHolder
038{
039    @Override
040    public ModifiableModelAwareDataHolder getDataHolder();
041
042    @Override
043    public default ModifiableModelAwareComposite getComposite(String compositePath) throws IllegalArgumentException, UndefinedItemPathException, BadItemTypeException, BadDataPathCardinalityException
044    {
045        return getDataHolder().getComposite(compositePath);
046    }
047    
048    @Override
049    public default ModifiableModelAwareComposite getLocalComposite(String compositePath) throws IllegalArgumentException, UndefinedItemPathException, BadItemTypeException, BadDataPathCardinalityException
050    {
051        return getDataHolder().getLocalComposite(compositePath);
052    }
053    
054    @Override
055    public default ModifiableModelAwareComposite getExternalComposite(String compositePath) throws IllegalArgumentException, UndefinedItemPathException, BadItemTypeException, BadDataPathCardinalityException
056    {
057        return getDataHolder().getExternalComposite(compositePath);
058    }
059
060    @Override
061    public default ModifiableModelAwareRepeater getRepeater(String repeaterPath) throws IllegalArgumentException, UndefinedItemPathException, BadItemTypeException, BadDataPathCardinalityException
062    {
063        return getDataHolder().getRepeater(repeaterPath);
064    }
065    
066    @Override
067    public default ModifiableModelAwareRepeater getLocalRepeater(String repeaterPath) throws IllegalArgumentException, UndefinedItemPathException, BadItemTypeException, BadDataPathCardinalityException
068    {
069        return getDataHolder().getLocalRepeater(repeaterPath);
070    }
071    
072    @Override
073    public default ModifiableModelAwareRepeater getExternalRepeater(String repeaterPath) throws IllegalArgumentException, UndefinedItemPathException, BadItemTypeException, BadDataPathCardinalityException
074    {
075        return getDataHolder().getExternalRepeater(repeaterPath);
076    }
077
078    public default ModifiableModelAwareComposite getComposite(String compositePath, boolean createNew) throws IllegalArgumentException, UndefinedItemPathException, BadItemTypeException, BadDataPathCardinalityException
079    {
080        return getDataHolder().getComposite(compositePath, createNew);
081    }
082    
083    public default ModifiableModelAwareComposite getLocalComposite(String compositePath, boolean createNew) throws IllegalArgumentException, UndefinedItemPathException, BadItemTypeException, BadDataPathCardinalityException
084    {
085        return getDataHolder().getLocalComposite(compositePath, createNew);
086    }
087    
088    public default ModifiableModelAwareComposite getExternalComposite(String compositePath, boolean createNew) throws IllegalArgumentException, UndefinedItemPathException, BadItemTypeException, BadDataPathCardinalityException
089    {
090        return getDataHolder().getExternalComposite(compositePath, createNew);
091    }
092
093    public default ModifiableModelAwareRepeater getRepeater(String repeaterPath, boolean createNew) throws IllegalArgumentException, UndefinedItemPathException, BadItemTypeException, BadDataPathCardinalityException
094    {
095        return getDataHolder().getRepeater(repeaterPath, createNew);
096    }
097    
098    public default ModifiableModelAwareRepeater getLocalRepeater(String repeaterPath, boolean createNew) throws IllegalArgumentException, UndefinedItemPathException, BadItemTypeException, BadDataPathCardinalityException
099    {
100        return getDataHolder().getLocalRepeater(repeaterPath, createNew);
101    }
102    
103    public default ModifiableModelAwareRepeater getExternalRepeater(String repeaterPath, boolean createNew) throws IllegalArgumentException, UndefinedItemPathException, BadItemTypeException, BadDataPathCardinalityException
104    {
105        return getDataHolder().getExternalRepeater(repeaterPath, createNew);
106    }
107    
108    public default boolean synchronizeValues(Map<String, Object> values, ExternalizableDataProviderExtensionPoint externalizableDataProviderEP, boolean useDefaultFromModel) throws UndefinedItemPathException, BadItemTypeException, IOException
109    {
110        return getDataHolder().synchronizeValues(values, externalizableDataProviderEP, useDefaultFromModel);
111    }
112    
113    public default boolean synchronizeValues(ViewItemContainer viewItemContainer, Map<String, Object> values, ExternalizableDataProviderExtensionPoint externalizableDataProviderEP, boolean useDefaultFromModel) throws UndefinedItemPathException, BadItemTypeException, IOException
114    {
115        return getDataHolder().synchronizeValues(viewItemContainer, values, externalizableDataProviderEP, useDefaultFromModel);
116    }
117
118    public default void setValue(String dataPath, Object value) throws IllegalArgumentException, UndefinedItemPathException, BadItemTypeException, BadDataPathCardinalityException
119    {
120        getDataHolder().setValue(dataPath, value);
121    }
122    
123    public default void setLocalValue(String dataPath, Object localValue) throws IllegalArgumentException, UndefinedItemPathException, BadItemTypeException, BadDataPathCardinalityException
124    {
125        getDataHolder().setLocalValue(dataPath, localValue);
126    }
127    
128    public default void setExternalValue(String dataPath, Object externalValue) throws IllegalArgumentException, UndefinedItemPathException, BadItemTypeException, BadDataPathCardinalityException
129    {
130        getDataHolder().setExternalValue(dataPath, externalValue);
131    }
132    
133    public default void setStatus(String dataPath, ExternalizableDataStatus status) throws IllegalArgumentException, UndefinedItemPathException, BadItemTypeException, BadDataPathCardinalityException
134    {
135        getDataHolder().setStatus(dataPath, status);
136    }
137
138    public default void removeValue(String dataPath) throws IllegalArgumentException, UndefinedItemPathException, UnknownDataException, BadDataPathCardinalityException
139    {
140        getDataHolder().removeValue(dataPath);
141    }
142
143    public default void removeLocalValue(String dataPath) throws IllegalArgumentException, UndefinedItemPathException, UnknownDataException, BadDataPathCardinalityException
144    {
145        getDataHolder().removeLocalValue(dataPath);
146    }
147
148    public default void removeExternalValue(String dataPath) throws IllegalArgumentException, UndefinedItemPathException, UnknownDataException, BadDataPathCardinalityException
149    {
150        getDataHolder().removeExternalValue(dataPath);
151    }
152    
153    public default ModifiableRepositoryData getRepositoryData()
154    {
155        return getDataHolder().getRepositoryData();
156    }
157}