/*
* Copyright (C) 2010 eXo Platform SAS.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.xcmis.spi;
/**
* @author <a href="mailto:andrey00x@gmail.com">Andrey Parfonov</a>
* @version $Id: $
*/
public interface FolderData extends ObjectData
{
/**
* Get absolute path to folder. Path to root folder is '/'. This method is
* shortcut to property 'cmis:path'.
*
* @return path to this folder
*/
String getPath();
/**
* Get children of current folder.
*
* Implementation Compatibility: SHOULD be implemented if the implementation
* supports hierarchical view (capabilityGetDescendants, capabilityGetFolderTree).
* Otherwise empty ItemsIterator should be returned.
*
* @param orderBy comma-separated list of query names and the ascending
* modifier 'ASC' or the descending modifier 'DESC' for each query
* name. This parameter may be ignored if implementation has not
* possibility to sort items
* @return children iterator. If folder does not contains any children then
* empty {@link ItemsIterator} must be returned, never
* <code>null</code>.
*/
ItemsIterator<ObjectData> getChildren(String orderBy);
/**
* @return <code>true</code> if current folder has children and
* <code>otherwise</code>
*/
boolean hasChildren();
/**
* Add existed fileable object in this folder.
* 2.2.5.1 addObjectToFolder
*
* Implementation Compatibility: SHOULD be implemented if the implementation
* supports multifiling capability (capabilityMultifiling).
* Otherwise {@link NotSupportedException} should be thrown.
*
* @param object the object to be added
* @throws ConstraintException if <code>object</code> has type that is
* unsupported by current folder. See
* {@link CMIS#ALLOWED_CHILD_OBJECT_TYPE_IDS}
* @throws NotSupportedException if multifiling capability is not supported
*/
void addObject(ObjectData object) throws ConstraintException;
/**
* Remove fileable object from current folder. This method don't remove
* object just unsigned it as child of this folder.
*
* Implementation Compatibility: SHOULD be implemented if the implementation
* supports unfiling capability (capabilityUnfiling).
* Otherwise {@link NotSupportedException} should be thrown.
*
* @param object object to be removed from current folder
* @throws NotSupportedException if unfiling capability is not supported
*/
void removeObject(ObjectData object);
/**
* Check is specified type in list of allowed child object types. Info about
* allowed child object types may be provided by property
* {@value CMIS#ALLOWED_CHILD_OBJECT_TYPE_IDS}. Empty or <code>null</code>
* property minds there is no any constrains about child type for this folder
* and any fileable objects may be created or added (if multifiling
* supported) in this folder.
*
* @param typeId type to be checked
* @return <code>true</code> if type allowed as child and <code>false</code>
* otherwise
*/
boolean isAllowedChildType(String typeId);
/**
* @return <code>true</code> if current folder is root folder and
* <code>otherwise</code>
*/
boolean isRoot();
}