/*
* Copyright (C) 2006-2008 Alfresco Software Limited.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
* This program 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 General Public License for more details.
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* As a special exception to the terms and conditions of version 2.0 of
* the GPL, you may redistribute this Program in connection with Free/Libre
* and Open Source Software ("FLOSS") applications as described in Alfresco's
* FLOSS exception. You should have recieved a copy of the text describing
* the FLOSS exception, and it is also available here:
* http://www.alfresco.com/legal/licensing"
*/
package org.alfresco.jlan.server.filesys.loader;
import java.util.StringTokenizer;
import org.alfresco.jlan.util.NameValue;
import org.alfresco.jlan.util.NameValueList;
/**
* File Request Class
*
* <p>File loader file load/save requests class.
*
* @author gkspencer
*/
public class FileRequest {
// Request types
public final static int LOAD = 0;
public final static int SAVE = 1;
public final static int TRANSSAVE = 2;
public final static int DELETE = 3;
// Standard attribute names
public final static String AttrUserName = "UserName";
public final static String AttrProtocol = "Protocol";
// File request type
private int m_reqType;
// Thread id of the worker thread that is servicing the request
private int m_threadId;
// Transaction id, if this request is part of a transaction else -1
private int m_tranId = -1;
private boolean m_lastFile;
// Additional attributes saved as part of the file request
private NameValueList m_attributes;
/**
* Class constructor
*
* @param typ int
*/
protected FileRequest(int typ) {
m_reqType = typ;
}
/**
* Return the file request type
*
* @return int
*/
public final int isType() {
return m_reqType;
}
/**
* Return the thread id of the worker thread servicing the request
*
* @return int
*/
public final int getThreadId() {
return m_threadId;
}
/**
* Check if the request is the last file in the transaction
*
* @return boolean
*/
public final boolean isLastTransactionFile() {
return m_lastFile;
}
/**
* Check if the request is part of a transaction
*
* @return boolean
*/
public final boolean isTransaction() {
return m_tranId != -1 ? true : false;
}
/**
* Return the transaction id
*
* @return int
*/
public final int getTransactionId() {
return m_tranId;
}
/**
* Set the thread id of the worker thread servicing the request
*
* @param id int
*/
public final void setThreadId(int id) {
m_threadId = id;
}
/**
* Set the transaction id
*
* @param id int
*/
public final void setTransactionId(int id) {
m_tranId = id;
}
/**
* Set the transaction id and last file of transaction flag
*
* @param id int
* @param last boolean
*/
public final void setTransactionId(int id, boolean last) {
m_tranId = id;
m_lastFile = last;
}
/**
* Check if the file request has any attributes
*
* @return boolean
*/
public final boolean hasAttributes() {
return m_attributes != null && m_attributes.numberOfItems() > 0 ? true : false;
}
/**
* Return the associated attributes list
*
* @return NameValueList
*/
public final NameValueList getAttributes() {
return m_attributes;
}
/**
* Add an attribute
*
* @param attr NameValue
*/
public final void addAttribute( NameValue attr) {
if ( m_attributes == null)
m_attributes = new NameValueList();
m_attributes.addItem( attr);
}
/**
* Check for the specified attribute
*
* @param attrName String
* @return NameValue
*/
public final NameValue hasAttribute( String attrName) {
NameValue attr = null;
if ( m_attributes != null)
attr = m_attributes.findItem( attrName);
return attr;
}
/**
* Get the attributes as a comma delimted list
*
* @return String
*/
public final String getAttributesString() {
// Check if there are any attributes
if ( hasAttributes() == false)
return "";
// Build the attributes string
StringBuffer str = new StringBuffer( 256);
NameValueList attrList = getAttributes();
for ( int i = 0; i < attrList.numberOfItems(); i++) {
// Add the current attribute string
NameValue attr = attrList.getItemAt( i);
if ( str.length() > 0)
str.append( ",");
str.append( attr.getName());
str.append("=");
str.append( attr.getValue());
}
return str.toString();
}
/**
* Set the attributes from a comma delimted list
*
* @param attrs String
*/
public final void setAttributes( String attrs) {
// Check if the attributes string is valid
if ( attrs == null || attrs.length() == 0) {
m_attributes = null;
return;
}
// Allocate the list for the attributes
m_attributes = new NameValueList();
// Parse the attributes string
StringTokenizer token = new StringTokenizer( attrs, ",");
while ( token.hasMoreTokens()) {
// Get the current name/value string
String nameVal = token.nextToken();
int pos = nameVal.indexOf( '=');
if ( pos != -1) {
// Split the name and value
String name = nameVal.substring( 0, pos);
String value = nameVal.substring( pos + 1);
// Add the attribute
m_attributes.addItem( new NameValue( name, value));
}
}
}
}