com.ibm.as400.access.IFSOpenReq Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of jt400 Show documentation
Show all versions of jt400 Show documentation
The Open Source version of the IBM Toolbox for Java
The newest version!
///////////////////////////////////////////////////////////////////////////////
//
// JTOpen (IBM Toolbox for Java - OSS version)
//
// Filename: IFSOpenReq.java
//
// The source code contained herein is licensed under the IBM Public License
// Version 1.0, which has been approved by the Open Source Initiative.
// Copyright (C) 1997-2000 International Business Machines Corporation and
// others. All rights reserved.
//
///////////////////////////////////////////////////////////////////////////////
package com.ibm.as400.access;
/**
"Open file" request.
**/
class IFSOpenReq extends IFSDataStreamReq
{
// "access intent" values:
static final int PROGRAM_LOAD_ACCESS = 4; // "program load" access
static final int READ_ACCESS = 1; // "read" access
static final int WRITE_ACCESS = 2; // "write" access
// "share option" values:
static final int DENY_NONE = 0; // deny neither readers nor writers
static final int DENY_READERS = 1; // deny readers
static final int DENY_WRITERS = 2; // deny writers
// "data conversion" values:
static final int NO_CONVERSION = 0; // no conversion (binary forced)
static final int CONVERT_TO_CLIENT_CCSID = 1; // text forced, client CCSID
static final int CONVERT_TO_SERVER_CCSID = 2; // text forced, server CCSID
// @D1a: add the following open options.
// IF FILE DOES NOT EXIST | IF FILE DOES EXIST
// ----------------------------- | ---------------------
static final int OPEN_OPTION_CREATE_OPEN = 1; // create if file does not exist | open existing file
static final int OPEN_OPTION_CREATE_REPLACE = 2; // create if file does not exist | replace existing file
static final int OPEN_OPTION_CREATE_FAIL = 4; // create if file does not exist | fail if file exists
static final int OPEN_OPTION_FAIL_OPEN = 8; // fail if file does not exist | open if file exists
static final int OPEN_OPTION_FAIL_REPLACE = 16; // fail if file does not exist | replace if file exists
private static final int HEADER_LENGTH = 20;
private static final int FILE_NAME_CCSID_OFFSET = 22;
private static final int WORKING_DIR_HANDLE_OFFSET = 24;
private static final int FILE_DATA_CCSID_OFFSET = 28;
private static final int ACCESS_OFFSET = 30;
private static final int FILE_SHARING_OFFSET = 32;
private static final int DATA_CONVERSION_OFFSET = 34;
private static final int DUPLICATE_FILE_OPT_OFFSET = 36;
private static final int CREATE_SIZE_OFFSET = 38; // field must be 0 if DSL >= 16
private static final int FIXED_ATTRS_OFFSET = 42;
private static final int ATTRS_LIST_LEVEL_OFFSET = 46;
private static final int PRE_READ_OFFSET_OFFSET = 48;
private static final int PRE_READ_LENGTH_OFFSET = 52;
// Additional field if datastreamLevel >= 16:
private static final int LARGE_CREATE_SIZE_OFFSET = 56;
/**
Construct an open file request.
@param fileName the name of the file to open
@param fileDataCCSID CCSID of the file data
@param accessIntent the intended access
@param fileSharing how the file can be shared with other users
@param dataConversionOption indicates the type of conversion the server performs
@param duplicateFileOption
bit 4: on = fail the open if the file doesn't exist, replace the file if it does;
bit 3: on = fail the open if the file doesn't exist, open the file if it does;
bit 2: on = create then open the file if it doesn't exist, fail the open if it does;
bit 1: on = create then open the file if it doesn't exist, replace the file if it does;
bit 0: on = create then open the file if it doesn't exist, open the file if it does
@param datastreamLevel the datastream level of the server
**/
IFSOpenReq(byte[] fileName,
int fileNameCCSID,
int fileDataCCSID,
int accessIntent,
int fileSharing,
int dataConversionOption,
int duplicateFileOption,
int datastreamLevel)
{
super(HEADER_LENGTH + getTemplateLength(datastreamLevel) + 6 + fileName.length);
setLength(data_.length);
setTemplateLen(getTemplateLength(datastreamLevel));
setReqRepID(0x0002);
set16bit(fileNameCCSID, FILE_NAME_CCSID_OFFSET);
set32bit(1, WORKING_DIR_HANDLE_OFFSET);
set16bit(fileDataCCSID, FILE_DATA_CCSID_OFFSET);
set16bit(accessIntent, ACCESS_OFFSET);
set16bit(fileSharing, FILE_SHARING_OFFSET);
set16bit(dataConversionOption, DATA_CONVERSION_OFFSET);
set16bit(duplicateFileOption, DUPLICATE_FILE_OPT_OFFSET);
set32bit(0, FIXED_ATTRS_OFFSET);
set16bit(1, ATTRS_LIST_LEVEL_OFFSET);
set32bit(0, PRE_READ_OFFSET_OFFSET);
set32bit(0, PRE_READ_LENGTH_OFFSET);
if (datastreamLevel < 16)
{ // Just set the old fields (4-byte length).
set32bit(0, CREATE_SIZE_OFFSET);
}
else
{
// Set old field to zero.
set32bit(0, CREATE_SIZE_OFFSET);
// Set new field (8-byte length).
set64bit(0L, LARGE_CREATE_SIZE_OFFSET);
}
// Set the LL.
set32bit(fileName.length + 6, getFilenameLLOffset(datastreamLevel));
// Set the code point.
set16bit(0x0002, getFilenameCPOffset(datastreamLevel));
// Set the file name characters.
System.arraycopy(fileName, 0, data_, getFilenameOffset(datastreamLevel), fileName.length);
}
// Determine offset (from beginning of request) to the 4-byte File Name "LL" field.
private final static int getFilenameLLOffset(int datastreamLevel)
{
return (datastreamLevel < 16 ? 56 : 64);
}
// Determine offset (from beginning of request) to the 2-byte File Name "CP" field.
private final static int getFilenameCPOffset(int datastreamLevel)
{
return (datastreamLevel < 16 ? 60 : 68);
}
// Determine offset (from beginning of request) to the File Name value field (follows LL/CP).
private final static int getFilenameOffset(int datastreamLevel)
{
return (datastreamLevel < 16 ? 62 : 70);
}
private final static int getTemplateLength(int datastreamLevel)
{
return (datastreamLevel < 16 ? 36 : 44);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy