/*
* Copyright (C) 2012 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.impl.quota;
import org.exoplatform.services.jcr.impl.backup.BackupException;
import org.exoplatform.services.jcr.impl.dataflow.serialization.ZipObjectReader;
import org.exoplatform.services.jcr.impl.dataflow.serialization.ZipObjectWriter;
import java.util.Set;
/**
* @author <a href="abazko@exoplatform.com">Anatoliy Bazko</a>
* @version $Id: QuotaPersister.java 34360 2009-07-22 23:58:59Z tolusha $
*/
public interface QuotaPersister
{
/**
* Release all resources.
*/
void destroy();
/**
* @see QuotaManager#getNodeQuota(String, String, String)
*/
long getNodeQuotaOrGroupOfNodesQuota(String repositoryName, String workspaceName, String nodePath)
throws UnknownQuotaLimitException;
/**
* Indicates if quota by specific path or by pattern should use asynchronous update.
*/
boolean isNodeQuotaOrGroupOfNodesQuotaAsync(String repositoryName, String workspaceName, String nodePath)
throws UnknownQuotaLimitException;
/**
* @see QuotaManager#setNodeQuota(String, String, String, long, boolean)
*/
void setNodeQuota(String repositoryName, String workspaceName, String nodePath, long quotaLimit, boolean asyncUpdate);
/**
* Removes node quota limit and node data size if node path is not matched by
* any patterns.
*/
void removeNodeQuotaAndDataSize(String repositoryName, String workspaceName, String nodePath);
/**
* Removes node quota limit.
*/
void removeNodeQuota(String repositoryName, String workspaceName, String nodePath);
/**
* Removes group of nodes quota limit and node data size if node path is matched by
* pattern and not equals to path.
*/
void removeGroupOfNodesAndDataSize(String repositoryName, String workspaceName, String patternPath);
/**
* Removes group of nodes quota.
*/
void removeGroupOfNodesQuota(String repositoryName, String workspaceName, String patternPath);
/**
* @see QuotaManager#setGroupOfNodesQuota(String, String, String, long, boolean)
*/
void setGroupOfNodesQuota(String repositoryName, String workspaceName, String patternPath, long quotaLimit,
boolean asyncUpdate);
/**
* @see QuotaManager#getNodeDataSize(String, String, String)
*/
long getNodeDataSize(String repositoryName, String workspaceName, String nodePath)
throws UnknownDataSizeException;
/**
* Persists node data size.
*/
void setNodeDataSize(String repositoryName, String workspaceName, String nodePath, long dataSize);
/**
* Persists node data size only if only quota exists.
*/
void setNodeDataSizeIfQuotaExists(String repositoryName, String workspaceName, String nodePath, long dataSize);
/**
* Removes node data size.
*/
void removeNodeDataSize(String repositoryName, String workspaceName, String nodePath);
/**
* Returns all paths of parent nodes (and node itself) for which quota is defined either directly or
* via pattern.
*/
Set<String> getAllParentNodesWithQuota(String repositoryName, String workspaceName, String nodePath);
/**
* @see QuotaManager#getWorkspaceQuota(String, String)
*/
long getWorkspaceQuota(String repositoryName, String workspaceName) throws UnknownQuotaLimitException;
/**
* @see QuotaManager#setWorkspaceQuota(String, String, long)
*/
void setWorkspaceQuota(String repositoryName, String workspaceName, long quotaLimit);
/**
* @see QuotaManager#removeWorkspaceQuota(String, String)
*/
void removeWorkspaceQuota(String repositoryName, String workspaceName);
/**
* Persists workspace data size.
*/
void setWorkspaceDataSize(String repositoryName, String workspaceName, long dataSize);
/**
* @see QuotaManager#getWorkspaceDataSize(String, String)
*/
long getWorkspaceDataSize(String repositoryName, String workspaceName) throws UnknownDataSizeException;
/**
* @see QuotaManager#getRepositoryQuota(String)
*/
long getRepositoryQuota(String repositoryName) throws UnknownQuotaLimitException;
/**
* @see QuotaManager#setRepositoryQuota(String, long)
*/
void setRepositoryQuota(String repositoryName, long quotaLimit);
/**
* @see QuotaManager#removeRepositoryQuota
*/
void removeRepositoryQuota(String repositoryName);
/**
* @see QuotaManager#getRepositoryDataSize(String)
*/
long getRepositoryDataSize(String repositoryName) throws UnknownDataSizeException;
/**
* Persists repository data size.
*/
void setRepositoryDataSize(String repositoryName, long dataSize);
/**
* @see QuotaManager#getGlobalDataSize()
*/
long getGlobalDataSize() throws UnknownDataSizeException;
/**
* Persists global data size.
*/
void setGlobalDataSize(long dataSize);
/**
* @see QuotaManager#getGlobalQuota()
*/
long getGlobalQuota() throws UnknownQuotaLimitException;
/**
* @see QuotaManager#setGlobalQuota(long)
*/
void setGlobalQuota(long quotaLimit);
/**
* @see QuotaManager#removeGlobalQuota
*/
void removeGlobalQuota();
/**
* Removes all info about workspace entity.
*/
void clearWorkspaceData(String repositoryName, String workspaceName) throws BackupException;
/**
* Backups all info about workspace entity.
*/
void backupWorkspaceData(String repositoryName, String workspaceName, ZipObjectWriter out) throws BackupException;
/**
* Restore all info about workspace entity.
*/
void restoreWorkspaceData(String repositoryName, String workspaceName, ZipObjectReader in)
throws BackupException;
/**
* @see QuotaManager#getNodeQuota(String, String, String)
*/
long getNodeQuota(String repositoryName, String workspaceName, String nodePath)
throws UnknownQuotaLimitException;
/**
* @see QuotaManager#getNodeQuota(String, String, String)
*/
long getGroupOfNodesQuota(String repositoryName, String workspaceName, String patternPath)
throws UnknownQuotaLimitException;
/**
* Indicates if quota by specific path should use asynchronous update or not.
*/
boolean isNodeQuotaAsync(String repositoryName, String workspaceName, String nodePath)
throws UnknownQuotaLimitException;
/**
* Indicates if quota by specific pattern should use asynchronous update or not.
*/
boolean isGroupOfNodesQuotaAsync(String repositoryName, String workspaceName, String patternPath)
throws UnknownQuotaLimitException;
/**
* Returns pattern with quota that matches for specific node path.
*/
String getAcceptableGroupOfNodesQuota(String repositoryName, String workspaceName, String nodePath);
/**
* Returns all existed node paths with quota.
*/
Set<String> getAllNodeQuota(String repositoryName, String workspaceName);
/**
* Returns all existed group of nodes quota.
*/
Set<String> getAllGroupOfNodesQuota(String repositoryName, String workspaceName);
/**
* Returns all tracked nodes, which means node data size is known.
*/
Set<String> getAllTrackedNodes(String repositoryName, String workspaceName);
}