/*
R * Copyright (C) 2009 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.exoplatform.services.jcr.dataflow.persistent;
import org.exoplatform.management.annotations.Managed;
import org.exoplatform.management.annotations.ManagedDescription;
import org.exoplatform.management.jmx.annotations.NameTemplate;
import org.exoplatform.management.jmx.annotations.Property;
import org.exoplatform.services.jcr.datamodel.ItemData;
import org.exoplatform.services.jcr.datamodel.ItemType;
import org.exoplatform.services.jcr.datamodel.NodeData;
import org.exoplatform.services.jcr.datamodel.PropertyData;
import org.exoplatform.services.jcr.datamodel.QPathEntry;
import org.exoplatform.services.jcr.impl.core.itemfilters.QPathEntryFilter;
import java.util.List;
/**
* Created by The eXo Platform SAS<br>
*
* Defines storage cache contract
*
* @author <a href="mailto:geaz@users.sourceforge.net">Gennady Azarenkov</a>
* @version $Id: WorkspaceStorageCache.java 13869 2008-05-05 08:40:10Z pnedonosko $
* @LevelAPI Unsupported
*/
@Managed
@NameTemplate(@Property(key = "service", value = "Cache"))
public interface WorkspaceStorageCache extends MandatoryItemsPersistenceListener
{
public static final String MAX_SIZE_PARAMETER_NAME = "max-size";
public static final String LIVE_TIME_PARAMETER_NAME = "live-time";
/**
* Get item by parent identifier and name +index of define type.
*
* @param parentIdentifier
* parent identifier
* @param name
* item name
* @param itemType
* item type
* @return itemData by parent Identifier and item name with index of define type or null in other case
*/
ItemData get(String parentIdentifier, QPathEntry name, ItemType itemType);
/**
* Get item by identifier.
*
* @param identifier the Item Data identifier
* @return ItemData by Identifier or null if not found
*/
ItemData get(String identifier);
/**
* Get child nodes.
*
* @param parent the parent node data
* @return child nodes for parent if found; empty list if no items found; null if no items
* initialized
*/
List<NodeData> getChildNodes(NodeData parent);
/**
* Get page of child nodes.
*
* @param parent
* the parent node data
* @param fromOrderNum
* the order number related to page of child nodes
* @return child nodes for parent if found; empty list if no items found; null if no items
* initialized
*/
List<NodeData> getChildNodesByPage(final NodeData parent, final int fromOrderNum);
/**
* Get child nodes by pattern.
*
* @param parent the parent node data
* @param pattern the filter to use
* @return child nodes for parent if found; empty list if no items found; null if no items
* initialized
*/
List<NodeData> getChildNodes(NodeData parent, QPathEntryFilter pattern);
/**
* Get child nodes count.
*
* @param parent the parent node data
* @return child nodes count for parent if found; 0 if no items found; -1 if no items
* initialized
*/
int getChildNodesCount(NodeData parent);
/**
* Get node child properties.<br>
*
* @param parent the parent node data
* @return child properties for parent if found; empty list if no items found; null if no items
* initialized
*/
List<PropertyData> getChildProperties(NodeData parent);
/**
* Get node child properties by pattern.<br>
*
* @param parent the parent node data
* @param pattern the filter to use
* @return child properties for parent if found; empty list if no items found; null if no items
* initialized
*/
List<PropertyData> getChildProperties(NodeData parent, QPathEntryFilter pattern);
/**
* List node child properties.<br> A difference from {@link #getChildProperties(org.exoplatform.services.jcr.datamodel.NodeData)} it's that the
* method may return list of node properties (PropertyData) which contains no data
* (ValueData).<br> Used for Node.hasProperties(), NodeIndexer.createDoc().
*
* @param parentData the parent node data
* @return child properties for parent if found; null if no items initialized
*/
List<PropertyData> listChildProperties(final NodeData parentData);
/**
* Get referenced properties.
*
* @param identifier
* referenceable id
* @return
* list of REFERENCE properties
*/
List<PropertyData> getReferencedProperties(String identifier);
/**
* Add referenced properties.
*
* @param identifier
* referenceable id
* @param refProperties
* list of properties
*/
void addReferencedProperties(String identifier, List<PropertyData> refProperties);
/**
* Adds (or updates if found) ItemData.
*
* @param item the item data
*/
void put(ItemData item);
/**
* Adds the total amount of children nodes.
*
* @param parent
* the parent node data
* @param count
* the total amount of nodes
*/
void addChildNodesCount(NodeData parent, int count);
/**
* Adds page of child nodes.
*
* @param parent
* the parent node data
* @param childs
* the list of child nodes
* @param fromOrderNum
* the order number related to page of child nodes
*/
void addChildNodesByPage(NodeData parent, List<NodeData> childs, int fromOrderNum);
/**
* Adds (update should not be the case!) list of child nodes. The list can be empty. If list is
* null the operation is ignored.
*
* @param parent the parent node data
* @param childNodes the list of child nodes
*/
void addChildNodes(NodeData parent, List<NodeData> childNodes);
/**
* Adds (update should not be the case!) list of child nodes. The list can be empty. If list is
* null the operation is ignored.
*
* @param parent the parent node data
* @param pattern the filter to use
* @param childNodes the list of children nodes
*/
void addChildNodes(NodeData parent, QPathEntryFilter pattern, List<NodeData> childNodes);
/**
* Adds (update should not be the case!) list of child properties. The list can be empty. If list
* is null the operation is ignored.
*
* @param parent the parent node data
* @param childProperties the children properties
*/
void addChildProperties(NodeData parent, List<PropertyData> childProperties);
/**
* Adds (update should not be the case!) list of child properties. The list can be empty. If list
* is null the operation is ignored.
*
* @param parent the parent node data
* @param pattern the filter to use
* @param childProperties the children properties
*/
void addChildProperties(NodeData parent, QPathEntryFilter pattern, List<PropertyData> childProperties);
/**
* Adds (update should not be the case!) list of child properties with empty values. The list can
* be empty. If list is null the operation is ignored.
*
* @param parent the parent node data
* @param childProperties the list of child properties
*/
void addChildPropertiesList(NodeData parent, List<PropertyData> childProperties);
/**
* Removes data and its children from cache.
*
* @param item the item data
*/
void remove(ItemData item);
/**
* Removes an item from the cache if and only if the current item for the provided
* identifier is equals to the provided item.
*
* @param item the item data
* @param identifier the Item Data identifier
*/
void remove(String identifier, ItemData item);
/**
*
* @return enabled status flag, if true then cache is enabled
*/
@Managed
@ManagedDescription("Indicates whether the cache is enabled or not")
boolean isEnabled();
/**
*
* @return isPatternSupported status flag, if true then cache can store pattern results
*/
boolean isPatternSupported();
/**
* @return isPatternSupported status flag, if true then cache can store child lists grouped
* by pages
*/
boolean isChildNodesByPageSupported();
/**
* Cache size.
*
* @return long value
*/
@Managed
@ManagedDescription("Indicates the total amount of items into the cache")
long getSize();
/**
* Start buffering process.
*/
void beginTransaction();
/**
* Sort changes and commit data to the cache.
*/
void commitTransaction();
/**
* Forget about changes
*/
void rollbackTransaction();
/**
* Adds a new listener
* @param listener the listener to register
* @throws UnsupportedOperationException in case the listeners are not supported by the
* implementation
*/
void addListener(WorkspaceStorageCacheListener listener) throws UnsupportedOperationException;
/**
* Removes a listener
* @param listener the listener to remove
* @throws UnsupportedOperationException in case the listeners are not supported by the
* implementation
*/
void removeListener(WorkspaceStorageCacheListener listener) throws UnsupportedOperationException;
}