001: /*
002: * This file is part of PFIXCORE.
003: *
004: * PFIXCORE is free software; you can redistribute it and/or modify
005: * it under the terms of the GNU Lesser General Public License as published by
006: * the Free Software Foundation; either version 2 of the License, or
007: * (at your option) any later version.
008: *
009: * PFIXCORE is distributed in the hope that it will be useful,
010: * but WITHOUT ANY WARRANTY; without even the implied warranty of
011: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
012: * GNU Lesser General Public License for more details.
013: *
014: * You should have received a copy of the GNU Lesser General Public License
015: * along with PFIXCORE; if not, write to the Free Software
016: * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
017: */
018:
019: package de.schlund.pfixcore.editor2.core.dom;
020:
021: import java.util.Collection;
022:
023: /**
024: * Represents a Pustefix project. A project is the top-level organization unit
025: * of Pustefix. All pages belonging to a project build a functional unit, having
026: * remote dependencies to the "common" and "core" project only.
027: *
028: * @author Sebastian Marsching <sebastian.marsching@1und1.de>
029: */
030: public interface Project {
031: /**
032: * Returns the unique name identifying the project. Each project name is
033: * unique within a given Pustefix environment. The name of the project
034: * matches the name of the directory on the filesystem, which contains the
035: * file of the project.
036: *
037: * @return The name identifying this Project object
038: */
039: String getName();
040:
041: /**
042: * Returns comment describing the project
043: *
044: * @return Comment stored for this Project
045: */
046: String getComment();
047:
048: /**
049: * Returns all pages belonging to this project
050: *
051: * @return Enumeration containing the page objects of this Project
052: * @see Page
053: */
054: Collection<Page> getAllPages();
055:
056: /**
057: * Returns all pages of this project which are at the top-level in
058: * navigation
059: *
060: * @return Enumeration containing the top-level page objects of this Project
061: * @see Page
062: */
063: Collection<Page> getTopPages();
064:
065: /**
066: * Returns page belonging to this Project. To retrieve a certain variant of
067: * a page, use "pagename::variant:subvariant" as the pagename
068: *
069: * @param pagename
070: * Name of the page, optionally including variant name
071: * @param variant
072: * Variant to return page for. If <code>null</code> default
073: * page (without any variant) is returned.
074: * @return Corresponding Page object or <code>null</code> if no page with
075: * the specified name / variant can be found
076: */
077: Page getPage(String pagename, Variant variant);
078:
079: /**
080: * Returns all variants of a page with the specified name.
081: *
082: * @param name
083: * Name of the page
084: * @return All variants of the page with name <code>name</code>
085: */
086: Collection<Page> getPageByName(String name);
087:
088: /**
089: * Returns target belonging to this project.
090: *
091: * @param name
092: * Name of the target (either virtual name or path)
093: * @return Target object or <code>null</code> if no target can be found
094: * for the name
095: */
096: Target getTarget(String name);
097:
098: /**
099: * Returns a {@link Collection} of all {@link IncludePartThemeVariant}
100: * objects, which are used by this project. This list may not be complete
101: * unless all pages of this project are up to date.
102: *
103: * @return List of IncludePartThemeVariants for this project
104: */
105: Collection<IncludePartThemeVariant> getAllIncludeParts();
106:
107: /**
108: * Returns a {@link Collection} of all {@link Image} objects, which are used
109: * by this project. This list may not be complete unless all pages of this
110: * project are up to date.
111: *
112: * @return List of Images for this project
113: */
114: Collection<Image> getAllImages();
115:
116: /**
117: * Finds an IncludePartThemeVariant using the supplied identifiers
118: *
119: * @param file
120: * (relative) path to the file that contains the include part
121: * @param part
122: * Name of the part
123: * @param theme
124: * Name of the theme
125: * @return The corresponding IncludePartThemeVariant or <code>null</code>
126: * if the specified part does not exist or is not used by this
127: * project
128: */
129: IncludePartThemeVariant findIncludePartThemeVariant(String file,
130: String part, String theme);
131:
132: /**
133: * Finds out if the given IncludePart is part of this <code>Project</code>.
134: * @param file (relative) path to the file that contains the include part
135: * @param part Name of the part
136: * @param theme Name of the theme
137: * @return
138: */
139: boolean hasIncludePart(String file, String part, String theme);
140: }
|