001: /*
002: * Licensed to the Apache Software Foundation (ASF) under one or more
003: * contributor license agreements. See the NOTICE file distributed with
004: * this work for additional information regarding copyright ownership.
005: * The ASF licenses this file to You under the Apache License, Version 2.0
006: * (the "License"); you may not use this file except in compliance with
007: * the License. You may obtain a copy of the License at
008: *
009: * http://www.apache.org/licenses/LICENSE-2.0
010: *
011: * Unless required by applicable law or agreed to in writing, software
012: * distributed under the License is distributed on an "AS IS" BASIS,
013: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014: * See the License for the specific language governing permissions and
015: * limitations under the License.
016: *
017: */
018: package org.apache.lenya.cms.repository;
019:
020: import java.io.OutputStream;
021: import java.util.Collection;
022:
023: /**
024: * A repository node is used to persist a {@link Persistable}.
025: *
026: * @version $Id: Node.java 568271 2007-08-21 20:49:18Z andreas $
027: */
028: public interface Node extends RepositoryItem, ContentHolder {
029:
030: /**
031: * @return The session this node belongs to.
032: */
033: Session getSession();
034:
035: /**
036: * The protocol with which to find Lenya nodes
037: */
038: String LENYA_PROTOCOL = "lenya://";
039:
040: /**
041: * The identifiable type.
042: */
043: String IDENTIFIABLE_TYPE = "node";
044:
045: /**
046: * @return if the node exists.
047: * @throws RepositoryException if an error occurs.
048: */
049: boolean exists() throws RepositoryException;
050:
051: /**
052: * @return if the node is a collection.
053: * @throws RepositoryException if an error occurs.
054: */
055: boolean isCollection() throws RepositoryException;
056:
057: /**
058: * @return children
059: * @throws RepositoryException if an error occurs.
060: */
061: public Collection getChildren() throws RepositoryException;
062:
063: /**
064: * @return The output stream.
065: * @throws RepositoryException if the node does not exist.
066: */
067: OutputStream getOutputStream() throws RepositoryException;
068:
069: /**
070: * Locks the node.
071: * @throws RepositoryException if an error occurs.
072: */
073: void lock() throws RepositoryException;
074:
075: /**
076: * Unlocks the node.
077: * @throws RepositoryException if an error occurs.
078: */
079: void unlock() throws RepositoryException;
080:
081: /**
082: * Checks out the node with restriction to the current session..
083: * @throws RepositoryException if an error occurs.
084: */
085: void checkout() throws RepositoryException;
086:
087: /**
088: * Checks out the node with the possibility to allow other sessions to check it in.
089: * This is a workaround for the current WYSIWYG editor infrastructure, which can't
090: * use the same session for opening and saving a node.
091: * @param restrictedToSession if the check-out is restricted to the current session.
092: * @throws RepositoryException if an error occurs.
093: */
094: void checkout(boolean restrictedToSession)
095: throws RepositoryException;
096:
097: /**
098: * Checks in the node.
099: * @throws RepositoryException if the node is not checked out or is checked
100: * out by a different session.
101: */
102: void checkin() throws RepositoryException;
103:
104: /**
105: * Checks in the node even if it is checked out by a different session.
106: * @throws RepositoryException if the node is not checked out.
107: */
108: void forceCheckIn() throws RepositoryException;
109:
110: /**
111: * Registers the node as dirty.
112: * @throws RepositoryException if an error occurs.
113: */
114: void registerDirty() throws RepositoryException;
115:
116: /**
117: * @return if the node is checked out.
118: * @throws RepositoryException if an error occurs.
119: */
120: boolean isCheckedOut() throws RepositoryException;
121:
122: /**
123: * @return The ID of the user who has checked out this node.
124: * @throws RepositoryException if the node is not checked out.
125: */
126: String getCheckoutUserId() throws RepositoryException;
127:
128: /**
129: * Checks if the node is checked out by a certain session. We pass the session
130: * as a parameter to allow the check for nodes from the shared item store.
131: * @param session The session.
132: * @return if the node is checked out by a specific session.
133: * @throws RepositoryException if an error occurs.
134: */
135: boolean isCheckedOutBySession(Session session)
136: throws RepositoryException;
137:
138: /**
139: * @param source The node to copy the revisions from.
140: * @throws RepositoryException if an error occurs.
141: */
142: void copyRevisionsFrom(Node source) throws RepositoryException;
143:
144: /**
145: * @param revisionNumber The revision number to roll back.
146: * @throws RepositoryException if this revision doesn't exist.
147: */
148: void rollback(int revisionNumber) throws RepositoryException;
149:
150: /**
151: * @return if the node is locked.
152: * @throws RepositoryException if an error occurs.
153: */
154: boolean isLocked() throws RepositoryException;
155:
156: /**
157: * Registers the node as removed.
158: * @throws RepositoryException if an error occurs.
159: */
160: void registerRemoved() throws RepositoryException;
161:
162: /**
163: * @return The revision history.
164: */
165: History getHistory();
166:
167: /**
168: * Delete this node.
169: * @throws RepositoryException if an error occurs.
170: */
171: void delete() throws RepositoryException;
172:
173: /**
174: * @param persistable The object which is persisted using the node.
175: * @throws RepositoryException if the node already has an item.
176: */
177: void setPersistable(Persistable persistable)
178: throws RepositoryException;
179:
180: /**
181: * @return The object which is persisted using this node or <code>null</code>
182: * if no object is registered.
183: */
184: Persistable getPersistable();
185:
186: }
|