Package com.jalios.jcms.quota
Class QuotaManager
- java.lang.Object
-
- com.jalios.jcms.quota.QuotaManager
-
- All Implemented Interfaces:
AssociatedFilesEventListener
,AlarmListener
,JPropertiesListener
public class QuotaManager extends java.lang.Object implements JPropertiesListener, AssociatedFilesEventListener, AlarmListener
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static class
QuotaManager.WorkspaceNode
Inner class to save a workspace and it's level in hierarchystatic class
QuotaManager.WorkspaceNodeComparator
-
Field Summary
-
Fields inherited from interface com.jalios.jdring.AlarmListener
REVISION
-
Fields inherited from interface com.jalios.util.JPropertiesListener
REVISION
-
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description void
addDocumentToVersionCache(FileDocument fileDoc)
Add the current filename of the specified FileDocument to the cache.void
addDocumentVersionToVersionCache(FileDocument oldFileDoc, FileDocument fileDoc)
Add the current filename of the new FileDocument version to the cache.void
associatedFileEventFired(AssociatedFileEvent event)
Trigger a quota refresh if a new associated file is added/updated or deletedvoid
checkQuotas()
Check all quotas and send notifications if needed.void
checkQuotas(Workspace workspace)
Check workspace quota and send notifications if needed, this method is called after the end of an analyzeThread.static FileSize
computeFileSizes(java.io.File realFile, AssociatedFilesManager afMgr)
Compute file size (with and without associated files)AssociatedFilesEventListener
createAssociatedFilesEventListener()
void
deleteDocumentFromVersionCache(FileDocument fileDoc)
Remove filename of the specified FileDocument from the cache.FileAnalyzerThread
executeFileAnalyzerThread(Workspace workspace)
static java.util.List<QuotaManager.WorkspaceNode>
generateWorkspaceTreeList()
java.util.concurrent.ExecutorService
getAnalyzerThreadPool()
get analyzer thread pool use to count real file size in background modejava.util.List<java.lang.String>
getCachedVersionList(FileDocument fileDoc)
Retrieve all filename previously cached for the specified FileDocument.FileSize
getCacheFileSize(java.io.File file)
get the cache file size with computed sizeQuotaElement
getChannelQuotaAlert()
FileAnalyzerThread
getCurrentChannelAnalyzerThread()
Return the current analyzer thread if analyze is in progressint
getDefaultAlertThreshold()
long
getDefaultQuotaSize()
QuotaElement
getElement(Workspace wk)
create aQuotaElement
for aWorkspace
.java.util.Map<Workspace,QuotaElement>
getElements()
returns theMap
with allQuotaElement
per workspace, the value with the null key is for the whole site.java.util.Map<Workspace,QuotaElement>
getElements(Workspace workspace)
returns theMap
with allQuotaElement
per workspace, the value with the null key is for the whole site.WorkspaceFileSizeResult
getGlobalFileAnalyzer(boolean refresh)
returnsWorkspaceFileSizeResult
instance associated with this site.static QuotaManager
getInstance()
long
getLastChannelQuotaNotificationDate()
QuotaElement
getSiteElement()
create aQuotaElement
for a whiole site.void
handleAlarm(AlarmEntry entry)
Manage periodically quota refreshvoid
handleFileAnalyzeEnd(WorkspaceFileSizeResult fileAnalyzer)
This method is called when global file analyzer has endboolean
isQuotaEnabled()
boolean
isQuotaFeatureEnabled()
boolean
isUploadAccepted(long fileLength, Workspace wk)
indicates if document can be uploaded (regarding the global site quota and provided workspace if not null)boolean
isUploadAccepted(DocUploadInfo info)
indicates if document can be uploaded (regarding the global site quota)boolean
isUploadAccepted(DocUploadInfo info, Workspace wk)
indicates if document can be uploaded (regarding the global site quota and provided workspace if not null)ControllerStatus
isUploadEnabled()
indicates if upload is enabled for all the siteControllerStatus
isUploadEnabled(Workspace wk)
indicates if upload is enabled for all the site and provided workspace if not nullvoid
propertiesChange(JProperties properties)
Invoked after properties have been modified in JCMS and save on disk.protected void
readProperties()
void
setChannelQuotaAlert(QuotaElement channelQuotaAlert)
void
setDefaultAlertThreshold(int defaultAlertThreshold)
void
setDefaultQuotaSize(long defaultQuotaSize)
void
setLastChannelQuotaNotificationDate(long lastChannelQuotaNotificationDate)
void
shutdownThreads()
void
updateAfterFileChange(java.io.File file)
update quota after a file changevoid
updateAfterFileDocumentChange(FileDocument fileDoc)
update quota after a filedocument changevoid
updateCacheFileSize(java.io.File file, FileSize fileSizeObj)
update the cache file size with computed sizevoid
updateQuota(Workspace wk)
Update workspace quota in separate threadsvoid
updateWorkspacesQuota()
Update all workspaces quota in separate threads
-
-
-
Field Detail
-
ADMIN_QUOTA_DEFAULT_WORKSPACE_QUOTA
public static final java.lang.String ADMIN_QUOTA_DEFAULT_WORKSPACE_QUOTA
- See Also:
- Constant Field Values
-
ADMIN_QUOTA_MAXIMUM_SITE_QUOTA
public static final java.lang.String ADMIN_QUOTA_MAXIMUM_SITE_QUOTA
- See Also:
- Constant Field Values
-
ADMIN_QUOTA_DEFAULT_WORKSPACE_ALERT_THRESHOLD
public static final java.lang.String ADMIN_QUOTA_DEFAULT_WORKSPACE_ALERT_THRESHOLD
- See Also:
- Constant Field Values
-
ADMIN_QUOTA_SITE_ALERT_THRESHOLD
public static final java.lang.String ADMIN_QUOTA_SITE_ALERT_THRESHOLD
- See Also:
- Constant Field Values
-
ADMIN_QUOTA_DELAY_BETWEEN_QUOTA_ALERT
public static final java.lang.String ADMIN_QUOTA_DELAY_BETWEEN_QUOTA_ALERT
- See Also:
- Constant Field Values
-
ADMIN_QUOTA_CHECK_SCHEDULE
public static final java.lang.String ADMIN_QUOTA_CHECK_SCHEDULE
- See Also:
- Constant Field Values
-
CHANNEL_FILE_ANALYZER_THREAD_POOL_SIZE
public static final java.lang.String CHANNEL_FILE_ANALYZER_THREAD_POOL_SIZE
- See Also:
- Constant Field Values
-
CHANNEL_WS_UPDATER_THREAD_POOL_SIZE
public static final java.lang.String CHANNEL_WS_UPDATER_THREAD_POOL_SIZE
- See Also:
- Constant Field Values
-
CHANNEL_QUOTA_MANAGEMENT_ENABLED
public static final java.lang.String CHANNEL_QUOTA_MANAGEMENT_ENABLED
- See Also:
- Constant Field Values
-
REJECT_UPLOAD_OVER_QUOTA_PROPERTIES_NAME
public static final java.lang.String REJECT_UPLOAD_OVER_QUOTA_PROPERTIES_NAME
- See Also:
- Constant Field Values
-
CHANNEL_QUOTA_FEATURE
public static final java.lang.String CHANNEL_QUOTA_FEATURE
- See Also:
- Constant Field Values
-
DEFAULT_ALERT_THRESHOLD
public static final int DEFAULT_ALERT_THRESHOLD
- See Also:
- Constant Field Values
-
DEFAULT_WORKSPACE_QUOTA
public static final long DEFAULT_WORKSPACE_QUOTA
-
DEFAULT_SITE_QUOTA
public static final long DEFAULT_SITE_QUOTA
-
DEFAULT_DELAY
public static final long DEFAULT_DELAY
- See Also:
- Constant Field Values
-
channelFileAnalyzer
protected transient WorkspaceFileSizeResult channelFileAnalyzer
-
previousChannelFileAnalyzer
protected transient WorkspaceFileSizeResult previousChannelFileAnalyzer
-
currentChannelAnalyzerThread
protected transient FileAnalyzerThread currentChannelAnalyzerThread
-
analyzerThreadPool
protected transient java.util.concurrent.ExecutorService analyzerThreadPool
-
wsUpdaterThreadPool
protected transient java.util.concurrent.ExecutorService wsUpdaterThreadPool
-
lastChannelQuotaNotificationDate
protected transient long lastChannelQuotaNotificationDate
-
channelQuotaAlert
protected transient QuotaElement channelQuotaAlert
-
cacheFileSize
protected transient java.util.Map<java.lang.String,FileSize> cacheFileSize
-
-
Method Detail
-
getInstance
public static QuotaManager getInstance()
-
propertiesChange
public void propertiesChange(JProperties properties)
Description copied from interface:JPropertiesListener
Invoked after properties have been modified in JCMS and save on disk.You cannot alter the value received in parameters.
Note that properties parameter may be null, a limited set of site properties, or all site properties.
To check that a property has been modified, reload the "current" property instead using
channel.getProperties
orchannel.getProperty
.- Specified by:
propertiesChange
in interfaceJPropertiesListener
- Parameters:
properties
- the properties which have been submitted to change
-
readProperties
protected void readProperties()
-
isQuotaFeatureEnabled
public boolean isQuotaFeatureEnabled()
-
getElement
public QuotaElement getElement(Workspace wk)
create aQuotaElement
for aWorkspace
. If the workspace has a running analyze thread, this method will return null- Parameters:
wk
- theWorkspace
- Returns:
- the
QuotaElement
-
getSiteElement
public QuotaElement getSiteElement()
create aQuotaElement
for a whiole site. If the site has a running analyze thread, this method will return null- Returns:
- the
QuotaElement
-
getElements
public java.util.Map<Workspace,QuotaElement> getElements()
returns theMap
with allQuotaElement
per workspace, the value with the null key is for the whole site. Values can be null is a running analyze thread exists for the workspace or site.- Returns:
- the
Map
with allQuotaElement
per workspace, the value with the null key is for the whole site. Values can be null is a running analyze thread exists for the workspace or site.
-
getElements
public java.util.Map<Workspace,QuotaElement> getElements(Workspace workspace)
returns theMap
with allQuotaElement
per workspace, the value with the null key is for the whole site. Values can be null is a running analyze thread exists for the workspace or site.- Parameters:
workspace
- the workspace used to filter elements (if null, global element are returned)- Returns:
- the
Map
with allQuotaElement
per workspace, the value with the null key is for the whole site. Values can be null is a running analyze thread exists for the workspace or site.
-
isQuotaEnabled
public boolean isQuotaEnabled()
-
getDefaultQuotaSize
public long getDefaultQuotaSize()
-
setDefaultQuotaSize
public void setDefaultQuotaSize(long defaultQuotaSize)
-
getDefaultAlertThreshold
public int getDefaultAlertThreshold()
-
setDefaultAlertThreshold
public void setDefaultAlertThreshold(int defaultAlertThreshold)
-
createAssociatedFilesEventListener
public AssociatedFilesEventListener createAssociatedFilesEventListener()
-
updateWorkspacesQuota
public void updateWorkspacesQuota()
Update all workspaces quota in separate threads
-
updateQuota
public void updateQuota(Workspace wk)
Update workspace quota in separate threads- Parameters:
wk
- the workspace
-
associatedFileEventFired
public void associatedFileEventFired(AssociatedFileEvent event)
Trigger a quota refresh if a new associated file is added/updated or deleted- Specified by:
associatedFileEventFired
in interfaceAssociatedFilesEventListener
-
updateAfterFileChange
public void updateAfterFileChange(java.io.File file)
update quota after a file change- Parameters:
file
- theFile
-
updateAfterFileDocumentChange
public void updateAfterFileDocumentChange(FileDocument fileDoc)
update quota after a filedocument change- Parameters:
fileDoc
- theFileDocument
-
handleAlarm
public void handleAlarm(AlarmEntry entry)
Manage periodically quota refresh- Specified by:
handleAlarm
in interfaceAlarmListener
- Parameters:
entry
- the AlarmEntry which has been triggered.
-
checkQuotas
public void checkQuotas()
Check all quotas and send notifications if needed.
-
checkQuotas
public void checkQuotas(Workspace workspace)
Check workspace quota and send notifications if needed, this method is called after the end of an analyzeThread.- Parameters:
workspace
- the workspace to check, or null for the global sire
-
executeFileAnalyzerThread
public FileAnalyzerThread executeFileAnalyzerThread(Workspace workspace)
-
getAnalyzerThreadPool
public java.util.concurrent.ExecutorService getAnalyzerThreadPool()
get analyzer thread pool use to count real file size in background mode- Returns:
- the
ExecutorService
-
getGlobalFileAnalyzer
public WorkspaceFileSizeResult getGlobalFileAnalyzer(boolean refresh)
returnsWorkspaceFileSizeResult
instance associated with this site. Note that as file analyze is down asynchronously, this method should returns null if an analyze is in progress (or if refresh is asked). In this case, user should ask getCurrentAnalyzerThread() to retrieve the analyze thread. getCompleteness() method on the thread can be used to know the state of the thread.- Parameters:
refresh
- force to ignore data previously present in cache- Returns:
WorkspaceFileSizeResult
instance associated with this site or null if an analyze is in progress (or if refresh is asked).
-
getCurrentChannelAnalyzerThread
public FileAnalyzerThread getCurrentChannelAnalyzerThread()
Return the current analyzer thread if analyze is in progress- Returns:
- the
FileAnalyzerThread
or null if no analyze is running
-
handleFileAnalyzeEnd
public void handleFileAnalyzeEnd(WorkspaceFileSizeResult fileAnalyzer)
This method is called when global file analyzer has end- Parameters:
fileAnalyzer
- a WorkspaceFileAnalyzer
-
getLastChannelQuotaNotificationDate
public long getLastChannelQuotaNotificationDate()
-
setLastChannelQuotaNotificationDate
public void setLastChannelQuotaNotificationDate(long lastChannelQuotaNotificationDate)
-
getChannelQuotaAlert
public QuotaElement getChannelQuotaAlert()
-
setChannelQuotaAlert
public void setChannelQuotaAlert(QuotaElement channelQuotaAlert)
-
shutdownThreads
public void shutdownThreads()
-
updateCacheFileSize
public void updateCacheFileSize(java.io.File file, FileSize fileSizeObj)
update the cache file size with computed size- Parameters:
file
- theFile
used to generate map keyfileSizeObj
- theFileSize
to store
-
getCacheFileSize
public FileSize getCacheFileSize(java.io.File file)
get the cache file size with computed size- Parameters:
file
- theFile
used to generate map key- Returns:
- the size stored for this file or 0L if the file cannot be found.
-
computeFileSizes
public static FileSize computeFileSizes(java.io.File realFile, AssociatedFilesManager afMgr)
Compute file size (with and without associated files)- Parameters:
realFile
- theFile
afMgr
- the currentAssociatedFilesManager
if any- Returns:
- an array of long, the first element is the size without any associated files and the second with these files
-
generateWorkspaceTreeList
public static java.util.List<QuotaManager.WorkspaceNode> generateWorkspaceTreeList()
- Returns:
- the
Workspace
List
already sorted
-
getCachedVersionList
public java.util.List<java.lang.String> getCachedVersionList(FileDocument fileDoc)
Retrieve all filename previously cached for the specified FileDocument.- Parameters:
fileDoc
- the FileDocument for which filename cache must be retrieved- Returns:
- a List of filename, may return null if no filename was ever cached for the specified FileDocument
- See Also:
addDocumentToVersionCache(FileDocument)
,addDocumentVersionToVersionCache(FileDocument, FileDocument)
,deleteDocumentFromVersionCache(FileDocument)
-
addDocumentToVersionCache
public void addDocumentToVersionCache(FileDocument fileDoc)
Add the current filename of the specified FileDocument to the cache.- Parameters:
fileDoc
- the FileDocument whose filename must be cached
-
addDocumentVersionToVersionCache
public void addDocumentVersionToVersionCache(FileDocument oldFileDoc, FileDocument fileDoc)
Add the current filename of the new FileDocument version to the cache.- Parameters:
oldFileDoc
- Previous document (ignored in current implementation)fileDoc
- the new FileDocument whose filename must be cached
-
deleteDocumentFromVersionCache
public void deleteDocumentFromVersionCache(FileDocument fileDoc)
Remove filename of the specified FileDocument from the cache.- Parameters:
fileDoc
- FileDocument whose filename must be removed
-
isUploadEnabled
public ControllerStatus isUploadEnabled()
indicates if upload is enabled for all the site- Returns:
- ControllerStatus.OK if it is enabled, false otherwise. a warn
JcmsMessage
is available in status message.
-
isUploadEnabled
public ControllerStatus isUploadEnabled(Workspace wk)
indicates if upload is enabled for all the site and provided workspace if not null- Parameters:
wk
- theWorkspace
to check for quota- Returns:
- ControllerStatus.OK if it is enabled, false otherwise. a warn
JcmsMessage
is available in status message.
-
isUploadAccepted
public boolean isUploadAccepted(DocUploadInfo info)
indicates if document can be uploaded (regarding the global site quota)- Parameters:
info
- theDocUploadInfo
used to compute new size- Returns:
- true is accepted, false otherwise. a warn
JcmsMessage
is available inJcmsContext
if it's disabled.
-
isUploadAccepted
public boolean isUploadAccepted(DocUploadInfo info, Workspace wk)
indicates if document can be uploaded (regarding the global site quota and provided workspace if not null)- Parameters:
info
- theDocUploadInfo
used to compute new sizewk
- theWorkspace
to check for quota- Returns:
- true is accepted, false otherwise. a warn
JcmsMessage
is available inJcmsContext
if it's disabled.
-
isUploadAccepted
public boolean isUploadAccepted(long fileLength, Workspace wk)
indicates if document can be uploaded (regarding the global site quota and provided workspace if not null)- Parameters:
fileLength
- the length of the file used to compute new sizewk
- theWorkspace
to check for quota- Returns:
- true is accepted, false otherwise. a warn
JcmsMessage
is available inJcmsContext
if it's disabled.
-
-