Node.java :  » Content-Management-System » apache-lenya-2.0 » org » apache » lenya » cms » repository » Java Open Source

Java Open Source » Content Management System » apache lenya 2.0 
apache lenya 2.0 » org » apache » lenya » cms » repository » Node.java
/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 *  contributor license agreements.  See the NOTICE file distributed with
 *  this work for additional information regarding copyright ownership.
 *  The ASF licenses this file to You under the Apache License, Version 2.0
 *  (the "License"); you may not use this file except in compliance with
 *  the License.  You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 *
 */
package org.apache.lenya.cms.repository;

import java.io.OutputStream;
import java.util.Collection;

/**
 * A repository node is used to persist a {@link Persistable}.
 * 
 * @version $Id: Node.java 568271 2007-08-21 20:49:18Z andreas $
 */
public interface Node extends RepositoryItem, ContentHolder {

    /**
     * @return The session this node belongs to.
     */
    Session getSession();

    /**
     * The protocol with which to find Lenya nodes
     */
    String LENYA_PROTOCOL = "lenya://";

    /**
     * The identifiable type.
     */
    String IDENTIFIABLE_TYPE = "node";

    /**
     * @return if the node exists.
     * @throws RepositoryException if an error occurs.
     */
    boolean exists() throws RepositoryException;

    /**
     * @return if the node is a collection.
     * @throws RepositoryException if an error occurs.
     */
    boolean isCollection() throws RepositoryException;

    /**
     * @return children
     * @throws RepositoryException if an error occurs.
     */
    public Collection getChildren() throws RepositoryException;

    /**
     * @return The output stream.
     * @throws RepositoryException if the node does not exist.
     */
    OutputStream getOutputStream() throws RepositoryException;

    /**
     * Locks the node.
     * @throws RepositoryException if an error occurs.
     */
    void lock() throws RepositoryException;

    /**
     * Unlocks the node.
     * @throws RepositoryException if an error occurs.
     */
    void unlock() throws RepositoryException;

    /**
     * Checks out the node with restriction to the current session..
     * @throws RepositoryException if an error occurs.
     */
    void checkout() throws RepositoryException;

    /**
     * Checks out the node with the possibility to allow other sessions to check it in.
     * This is a workaround for the current WYSIWYG editor infrastructure, which can't
     * use the same session for opening and saving a node.
     * @param restrictedToSession if the check-out is restricted to the current session.
     * @throws RepositoryException if an error occurs.
     */
    void checkout(boolean restrictedToSession) throws RepositoryException;

    /**
     * Checks in the node.
     * @throws RepositoryException if the node is not checked out or is checked
     *         out by a different session.
     */
    void checkin() throws RepositoryException;

    /**
     * Checks in the node even if it is checked out by a different session.
     * @throws RepositoryException if the node is not checked out.
     */
    void forceCheckIn() throws RepositoryException;

    /**
     * Registers the node as dirty.
     * @throws RepositoryException if an error occurs.
     */
    void registerDirty() throws RepositoryException;

    /**
     * @return if the node is checked out.
     * @throws RepositoryException if an error occurs.
     */
    boolean isCheckedOut() throws RepositoryException;

    /**
     * @return The ID of the user who has checked out this node.
     * @throws RepositoryException if the node is not checked out.
     */
    String getCheckoutUserId() throws RepositoryException;

    /**
     * Checks if the node is checked out by a certain session. We pass the session
     * as a parameter to allow the check for nodes from the shared item store.
     * @param session The session.
     * @return if the node is checked out by a specific session.
     * @throws RepositoryException if an error occurs.
     */
    boolean isCheckedOutBySession(Session session) throws RepositoryException;

    /**
     * @param source The node to copy the revisions from.
     * @throws RepositoryException if an error occurs.
     */
    void copyRevisionsFrom(Node source) throws RepositoryException;

    /**
     * @param revisionNumber The revision number to roll back.
     * @throws RepositoryException if this revision doesn't exist.
     */
    void rollback(int revisionNumber) throws RepositoryException;

    /**
     * @return if the node is locked.
     * @throws RepositoryException if an error occurs.
     */
    boolean isLocked() throws RepositoryException;

    /**
     * Registers the node as removed.
     * @throws RepositoryException if an error occurs.
     */
    void registerRemoved() throws RepositoryException;

    /**
     * @return The revision history.
     */
    History getHistory();

    /**
     * Delete this node.
     * @throws RepositoryException if an error occurs.
     */
    void delete() throws RepositoryException;
    
    /**
     * @param persistable The object which is persisted using the node.
     * @throws RepositoryException if the node already has an item.
     */
    void setPersistable(Persistable persistable) throws RepositoryException;
    
    /**
     * @return The object which is persisted using this node or <code>null</code>
     * if no object is registered.
     */
    Persistable getPersistable();

}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.