/* * Copyright (C) 2005-2006 Alfresco, Inc. * * Licensed under the Mozilla Public License version 1.1 * with a permitted attribution clause. You may obtain a * copy of the License at * * http://www.alfresco.org/legal/license.txt * * 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.alfresco.filesys.alfresco; import java.util.Enumeration; import org.alfresco.filesys.server.filesys.*; import org.alfresco.filesys.server.pseudo.PseudoFileImpl; import org.alfresco.filesys.server.pseudo.PseudoFileInterface; import org.alfresco.filesys.server.state.FileStateReaper; import org.alfresco.filesys.server.state.FileStateTable; /** * Alfresco Filesystem Context Class * *
Contains per filesystem context.
*
* @author GKSpencer
*/
public abstract class AlfrescoContext extends DiskDeviceContext
{
// File state table and associated file state reaper
private FileStateTable m_stateTable;
private FileStateReaper m_stateReaper;
// URL pseudo file web path prefix (server/port/webapp) and link file name
private String m_urlPathPrefix;
private String m_urlFileName;
// Pseudo file interface
private PseudoFileInterface m_pseudoFileInterface;
// Desktop actions
private DesktopActionTable m_desktopActions;
// I/O control handler
private IOControlHandler m_ioHandler;
/**
* Class constructor
*
* @param filesysName String
* @param devName String
*/
public AlfrescoContext(String filesysName, String devName)
{
super(filesysName, devName);
// Default the filesystem to look like an 80Gb sized disk with 90% free space
setDiskInformation(new SrvDiskInfo(2560000, 64, 512, 2304000));
// Set parameters
setFilesystemAttributes(FileSystem.CasePreservedNames + FileSystem.UnicodeOnDisk +
FileSystem.CaseSensitiveSearch);
}
/**
* Return the filesystem type, either FileSystem.TypeFAT or FileSystem.TypeNTFS.
*
* @return String
*/
public String getFilesystemType()
{
return FileSystem.TypeNTFS;
}
/**
* Determine if the file state table is enabled
*
* @return boolean
*/
public final boolean hasStateTable()
{
return m_stateTable != null ? true : false;
}
/**
* Return the file state table
*
* @return FileStateTable
*/
public final FileStateTable getStateTable()
{
return m_stateTable;
}
/**
* Enable/disable the file state table
*
* @param ena boolean
* @param stateReaper FileStateReaper
*/
public final void enableStateTable(boolean ena, FileStateReaper stateReaper)
{
if ( ena == false)
{
// Remove the state table from the reaper
stateReaper.removeStateTable( getFilesystemName());
m_stateTable = null;
}
else if ( m_stateTable == null)
{
// Create the file state table
m_stateTable = new FileStateTable();
// Register with the file state reaper
stateReaper.addStateTable( getFilesystemName(), m_stateTable);
}
// Save the reaper, for deregistering when the filesystem is closed
m_stateReaper = stateReaper;
}
/**
* Determine if the pseudo file interface is enabled
*
* @return boolean
*/
public final boolean hasPseudoFileInterface()
{
return m_pseudoFileInterface != null ? true : false;
}
/**
* Return the pseudo file interface
*
* @return PseudoFileInterface
*/
public final PseudoFileInterface getPseudoFileInterface()
{
return m_pseudoFileInterface;
}
/**
* Enable the pseudo file interface for this filesystem
*/
public final void enabledPseudoFileInterface()
{
if ( m_pseudoFileInterface == null)
m_pseudoFileInterface = new PseudoFileImpl();
}
/**
* Determine if there are desktop actins configured
*
* @return boolean
*/
public final boolean hasDesktopActions()
{
return m_desktopActions != null ? true : false;
}
/**
* Return the desktop actions table
*
* @return DesktopActionTable
*/
public final DesktopActionTable getDesktopActions()
{
return m_desktopActions;
}
/**
* Return the count of desktop actions
*
* @return int
*/
public final int numberOfDesktopActions()
{
return m_desktopActions != null ? m_desktopActions.numberOfActions() : 0;
}
/**
* Add a desktop action
*
* @param action DesktopAction
* @return boolean
*/
public final boolean addDesktopAction(DesktopAction action)
{
// Check if the desktop actions table has been created
if ( m_desktopActions == null)
{
m_desktopActions = new DesktopActionTable();
// Enable pseudo files
enabledPseudoFileInterface();
}
// Add the action
return m_desktopActions.addAction(action);
}
/**
* Determine if custom I/O control handling is enabled for this filesystem
*
* @return boolean
*/
public final boolean hasIOHandler()
{
return m_ioHandler != null ? true : false;
}
/**
* Return the custom I/O control handler
*
* @return IOControlHandler
*/
public final IOControlHandler getIOHandler()
{
return m_ioHandler;
}
/**
* Determine if the URL pseudo file is enabled
*
* @return boolean
*/
public final boolean hasURLFile()
{
if ( m_urlPathPrefix != null && m_urlFileName != null)
return true;
return false;
}
/**
* Return the URL pseudo file path prefix
*
* @return String
*/
public final String getURLPrefix()
{
return m_urlPathPrefix;
}
/**
* Return the URL pseudo file name
*
* @return String
*/
public final String getURLFileName()
{
return m_urlFileName;
}
/**
* Set the URL path prefix
*
* @param urlPrefix String
*/
public final void setURLPrefix(String urlPrefix)
{
m_urlPathPrefix = urlPrefix;
if ( urlPrefix != null)
enabledPseudoFileInterface();
}
/**
* Set the URL pseudo file name
*
* @param urlFileName String
*/
public final void setURLFileName(String urlFileName)
{
m_urlFileName = urlFileName;
if ( urlFileName != null)
enabledPseudoFileInterface();
}
/**
* Set the desktop actions
*
* @param desktopActions DesktopActionTable
* @param filesysDriver DiskInterface
*/
public final void setDesktopActions(DesktopActionTable desktopActions, DiskInterface filesysDriver)
{
// Enumerate the desktop actions and add to this filesystem
Enumeration