/* * Copyright (C) 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.avm; import java.util.Map; import org.alfresco.filesys.alfresco.AlfrescoContext; import org.alfresco.filesys.alfresco.IOControlHandler; import org.alfresco.filesys.server.filesys.DiskInterface; import org.alfresco.filesys.server.filesys.FileName; import org.alfresco.filesys.server.filesys.FileSystem; import org.alfresco.filesys.server.filesys.NotifyChange; import org.alfresco.filesys.server.state.FileState; import org.alfresco.filesys.server.state.FileStateTable; import org.alfresco.repo.avm.CreateStoreCallback; import org.alfresco.repo.avm.CreateVersionCallback; import org.alfresco.repo.avm.PurgeStoreCallback; import org.alfresco.repo.avm.PurgeVersionCallback; import org.alfresco.repo.domain.PropertyValue; import org.alfresco.service.namespace.NamespaceService; import org.alfresco.service.namespace.QName; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; /** * AVM Filesystem Context Class * *
Contains per filesystem context. * * @author GKSpencer */ public class AVMContext extends AlfrescoContext implements CreateStoreCallback, PurgeStoreCallback, CreateVersionCallback, PurgeVersionCallback { // Logging private static final Log logger = LogFactory.getLog(AVMContext.class); // Constants // // Version id that indicates the head version public static final int VERSION_HEAD = -1; // Store properties public static QName PROP_WORKFLOWPREVIEW = QName.createQName(NamespaceService.DEFAULT_URI, ".sandbox.workflow.preview"); public static QName PROP_AUTHORPREVIEW = QName.createQName(NamespaceService.DEFAULT_URI, ".sandbox.author.preview"); // Store, root path and version private String m_storePath; private int m_version = VERSION_HEAD; // Flag to indicate if the virtualization view is enabled // // The first set of folders then map to the stores and the second layer map to the versions with // paths below. private boolean m_virtualView; // Show sandboxes in the virtualization view private boolean m_showSandboxes = false; // associated AVM filesystem driver private AVMDiskDriver m_avmDriver; /** * Class constructor * *
Construct a context for a normal view onto a single store/version within AVM. * * @param filesysName String * @param storePath String * @param version int */ public AVMContext( String filesysName, String storePath, int version) { super( filesysName, storePath + "(" + version + ")"); // Set the store root path, remove any trailing slash as relative paths will be appended to this value m_storePath = storePath; if ( m_storePath.endsWith( "/")) m_storePath = m_storePath.substring(0, m_storePath.length() - 1); // Set the store version to use m_version = version; } /** * Class constructor * *
Construct a context for a virtualization view onto all stores/versions within AVM.
*
* @param filesysName String
* @param showSandboxes boolean
* @param avmDriver AVMDiskDriver
*/
public AVMContext( String filesysName, boolean showSandboxes, AVMDiskDriver avmDriver)
{
super( filesysName, "VirtualView");
// Enable the virtualization view
m_virtualView = true;
m_showSandboxes = showSandboxes;
// Save the associated filesystem driver
m_avmDriver = avmDriver;
}
/**
* Return the filesystem type, either FileSystem.TypeFAT or FileSystem.TypeNTFS.
*
* @return String
*/
public String getFilesystemType()
{
return FileSystem.TypeNTFS;
}
/**
* Return the store path
*
* @return String
*/
public final String getStorePath()
{
return m_storePath;
}
/**
* Return the version
*
* @return int
*/
public final int isVersion()
{
return m_version;
}
/**
* Check if the virtualization view is enabled
*
* @return boolean
*/
public final boolean isVirtualizationView()
{
return m_virtualView;
}
/**
* Check if sandboxes should be shown in the virtualization view
*
* @return boolean
*/
public final boolean showSandboxes()
{
return m_showSandboxes;
}
/**
* Close the filesystem context
*/
public void CloseContext() {
// Call the base class
super.CloseContext();
}
/**
* Create the I/O control handler for this filesystem type
*
* @param filesysDriver DiskInterface
* @return IOControlHandler
*/
protected IOControlHandler createIOHandler( DiskInterface filesysDriver)
{
return null;
}
/**
* Create store call back handler
*
* @param storeName String
* @param versionID int
*/
public void storeCreated(String storeName)
{
// Make sure the file state cache is enabled
FileStateTable fsTable = getStateTable();
if ( fsTable == null)
return;
// Find the file state for the root folder
FileState rootState = fsTable.findFileState( FileName.DOS_SEPERATOR_STR, true, true);
if ( rootState != null)
{
// Get the properties for the new store
boolean sandbox = false;
Map