001/*
002 *  Copyright 2010 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.web.repository.page;
017
018import java.util.Set;
019
020import org.ametys.cms.repository.TagAwareAmetysObject;
021import org.ametys.plugins.explorer.resources.ResourceCollection;
022import org.ametys.plugins.repository.AmetysObject;
023import org.ametys.plugins.repository.AmetysObjectIterable;
024import org.ametys.plugins.repository.AmetysRepositoryException;
025import org.ametys.plugins.repository.data.holder.ModelAwareDataHolder;
026
027/**
028 * {@link AmetysObject} for reading page informations.<p>
029 */
030public interface Page extends MetadataAwarePagesContainer, TagAwareAmetysObject
031{
032    /** Type of a page. */
033    public enum PageType
034    {
035        /** Empty page (no zone, nor link) */
036        NODE,
037        /** Link page. */
038        LINK,
039        /** Multiple zone (content, service) page. */
040        CONTAINER
041    }
042
043    /** Type of a link page. */
044    public enum LinkType
045    {
046        /** External page */
047        WEB,
048        /** Internal page */
049        PAGE
050    }
051
052    /**
053     * Retrieves the title.
054     * @return the title.
055     * @throws AmetysRepositoryException if an error occurs.
056     */
057    String getTitle() throws AmetysRepositoryException;
058
059    /**
060     * Retrieves the long title.
061     * @return the title.
062     * @throws AmetysRepositoryException if an error occurs.
063     */
064    String getLongTitle() throws AmetysRepositoryException;
065
066    /**
067     * Retrieves the type.<br>
068     * @return the type.
069     * @throws AmetysRepositoryException if an error occurs.
070     * @see PageType
071     */
072    PageType getType() throws AmetysRepositoryException;
073
074    /**
075     * Retrieves the linked URL.
076     * @return the linked URL.
077     * @throws AmetysRepositoryException if an error occurs.
078     */
079    String getURL() throws AmetysRepositoryException;
080
081    /**
082     * Retrieves the linked URL type.
083     * @return the linked URL type.
084     * @throws AmetysRepositoryException if an error occurs.
085     */
086    LinkType getURLType() throws AmetysRepositoryException;
087
088    /**
089     * Get the page depth
090     * @return the page depth
091     * @throws AmetysRepositoryException if an error occurs.
092     */
093    int getDepth () throws AmetysRepositoryException;
094    
095    /**
096     * Retrieves the template name.
097     * @return the template name or <code>null</code> if none has
098     *         been set.
099     * @throws AmetysRepositoryException if an error occurs.
100     */
101    String getTemplate() throws AmetysRepositoryException;
102
103    /**
104     * Retrieves the zones.
105     * @return the zones.
106     * @throws AmetysRepositoryException if an error occurs.
107     */
108    AmetysObjectIterable<? extends Zone> getZones() throws AmetysRepositoryException;
109    
110    /**
111     * Determine if a zone exists
112     * @param name The name of the zone
113     * @return true if the zone exists
114     * @throws AmetysRepositoryException If an error occured
115     */
116    boolean hasZone(String name) throws AmetysRepositoryException;
117    
118    /**
119     * Retrieves a given zone.
120     * @param name the name of the zone.
121     * @return the given zone.
122     * @throws UnknownZoneException if there is no zone for the given name.
123     * @throws AmetysRepositoryException if an error occurs.
124     */
125    Zone getZone(String name) throws UnknownZoneException, AmetysRepositoryException;
126
127    /**
128     * Retrieves the attachments root node
129     * @return The the attachments root node
130     * @throws AmetysRepositoryException if an error occurs.
131     */
132    ResourceCollection getRootAttachments()  throws AmetysRepositoryException;
133    
134    /**
135     * Retrieves all {@link AmetysObject} ids referencing this page.
136     * @return the {@link AmetysObject} ids referencing this page.
137     * @throws AmetysRepositoryException if an error occurs.
138     */
139    Set<String> getReferers() throws AmetysRepositoryException;
140    
141    /**
142     * Determine if the page is visible into navigation elements
143     * @return true if the page is visible.
144     * @throws AmetysRepositoryException if an error occurs.
145     */
146    boolean isVisible() throws AmetysRepositoryException;
147    
148    /**
149     * Get the view parameters
150     * @return the view parameters
151     * @throws AmetysRepositoryException if an error occurs.
152     */
153    ModelAwareDataHolder getTemplateParametersHolder() throws AmetysRepositoryException;
154}