com.ibm.as400.access.NLSTableDownload 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: NLSTableDownload.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-2016 International Business Machines Corporation and
// others. All rights reserved.
//
///////////////////////////////////////////////////////////////////////////////
package com.ibm.as400.access;
import java.io.IOException;
import java.io.*;
import java.net.UnknownHostException;
public class NLSTableDownload extends Object
{
private static final String copyright = "Copyright (C) 1997-2016 International Business Machines Corporation and others.";
private AS400Server server_;
private AS400ImplRemote sys_;
static
{
AS400Server.addReplyStream(new NLSExchangeAttrReply(), "as-central");
AS400Server.addReplyStream(new NLSGetTableReply(), "as-central");
}
boolean checkRetry = false;
/**
* @param system The server to execute the program.
**/
public NLSTableDownload(AS400ImplRemote system)
{
setSystem(system);
String retryProperty = System.getProperty("retry");
if (retryProperty != null) {
checkRetry = true;
}
}
/**
* connect to the previously set server.
* @throws ServerStartupException If the server cannot be started.
* @throws UnknownHostException If the host is not know.
* @throws AS400SecurityException If a security or authority error occurs.
* @throws ConnectionDroppedException If the connection is dropped.
* @throws InterruptedException If this thread is interrupted.
* @throws IOException If an error occurs while communicating with the system.
**/
public void connect() throws ServerStartupException, UnknownHostException, AS400SecurityException, ConnectionDroppedException, InterruptedException, IOException
{
// Connect to server
if (server_ == null)
{
server_ = sys_.getConnection(AS400.CENTRAL, false /*forceNewConnection*/, false /*skip signon server */);
// Exchange attributes with server job. (This must be first
// exchange with server job to complete initialization.)
// First check to see if server has already been initialized
// by another user.
synchronized (server_)
{
DataStream baseReply = server_.getExchangeAttrReply();
if (baseReply == null)
{
try
{
NLSExchangeAttrRequest exchangeAttrRequest;
try {
exchangeAttrRequest = new NLSExchangeAttrRequest(true);
} catch (java.lang.NoSuchMethodError e) {
exchangeAttrRequest = new NLSExchangeAttrRequest();
}
baseReply = server_.sendExchangeAttrRequest(exchangeAttrRequest);
}
catch(IOException e)
{
Trace.log(Trace.ERROR, "IOException After Exchange Attribute Request");
disconnect();
throw e;
}
if (baseReply instanceof NLSExchangeAttrReply)
{
// means request completed OK
NLSExchangeAttrReply NLSReply = (NLSExchangeAttrReply)baseReply;
if (NLSReply.primaryRC_ != 0)
{
Trace.log(Trace.WARNING, "Exchange attribute failed, primary return code =", NLSReply.primaryRC_);
Trace.log(Trace.ERROR, "Exchange attribute failed, secondary return code =", NLSReply.getSecondaryRC_() );
disconnect();
throw new IOException();
}
}
else // unknown data stream
{
Trace.log(Trace.ERROR, "Unknown instance returned from Exchange Attribute Reply");
throw new InternalErrorException(InternalErrorException.DATA_STREAM_UNKNOWN);
}
}
}
}
}
/**
* Disconnect from the host server.
**/
public void disconnect()
{
if (server_ != null)
try {
getSystem().disconnectServer(server_);
server_ = null;
}
catch (Exception e)
{}
}
public final static int SINGLE_BYTE_FROM_CCSID = 1;
public final static int DOUBLE_BYTE_FROM_CCSID = 2;
/* Get the double byte portion of a mixed CCSID */
public final static int MIXED_BYTE_FROM_CCSID = 3;
public char[] download( int fromCCSID, int toCCSID, boolean doubleByteFrom ) throws ConnectionDroppedException, IOException, InterruptedException {
if (doubleByteFrom) {
return download(fromCCSID, toCCSID, DOUBLE_BYTE_FROM_CCSID);
} else {
return download(fromCCSID, toCCSID, SINGLE_BYTE_FROM_CCSID);
}
}
/**
* Download table
* @param fromCCSID the ccsid to translate from
* @param toCCSID the ccsid to traslate to
* @param fromType the type of the from CCSID, i.e. DOUBLE_TYPE_FROM_CCSID, etc..
* @return table as character array
* @throws ConnectionDroppedException If the connection is dropped.
* @throws IOException If an error occurs while communicating with the system.
* @throws InterruptedException If this thread is interrupted.
*
**/
public char[] download( int fromCCSID, int toCCSID, int fromType ) throws ConnectionDroppedException, IOException, InterruptedException
{
NLSGetTableReply NLSReply = null;
NLSGetTableRequest reqDs = null;
BufferedReader reader = null;
boolean retry = true;
while (retry) {
retry = false;
if (fromType == DOUBLE_BYTE_FROM_CCSID) {
reqDs = new NLSGetDoubleByteTableRequest(fromCCSID);
} else if (fromType == SINGLE_BYTE_FROM_CCSID) {
reqDs = new NLSGetTableRequest();
} else if (fromType == MIXED_BYTE_FROM_CCSID) {
reqDs = new NLSGetMixedByteTableRequest(fromCCSID, toCCSID);
} else {
throw new IOException("Invalid fromType=" + fromType);
}
reqDs.setCCSIDs( fromCCSID, toCCSID );
DataStream repDs = server_.sendAndReceive(reqDs);
if (repDs instanceof NLSGetTableReply)
{
NLSReply = (NLSGetTableReply)repDs;
if (NLSReply.primaryRC_ != 0)
{
System.out.println("fromCCSID="+fromCCSID+" toCCSID="+toCCSID+" fromType="+fromType);
System.out.println("ERROR: Exchange attribute failed, primary return code ="+ NLSReply.primaryRC_);
System.out.println("ERROR: Exchange attribute failed, secondary return code ="+ NLSReply.secondaryRC_ );
Trace.log(Trace.WARNING, "Exchange attribute failed, primary return code =", NLSReply.primaryRC_);
Trace.log(Trace.ERROR, "Exchange attribute failed, secondary return code =", NLSReply.secondaryRC_ );
if (checkRetry) {
System.out.println("Enter Y to retry");
if (reader == null) {
reader = new BufferedReader(new InputStreamReader(System.in));
}
String line = reader.readLine();
if (line != null && line.length() > 0 && line.charAt(0) == 'Y') {
retry = true;
System.out.println("Retrying");
}
}
if (!retry) {
throw new IOException();
}
}
}
else // unknown data stream
{
disconnect(); //@A1A
Trace.log(Trace.ERROR, "Unknown instance returned from Exchange Attribute Reply");
throw new InternalErrorException(InternalErrorException.DATA_STREAM_UNKNOWN);
}
}
disconnect(); //@A1A
if (NLSReply != null) {
return NLSReply.table_;
} else {
return null;
}
}
/**
* Retrieve the system to execute the program.
* @return iSeries system where the program will execute.
**/
AS400ImplRemote getSystem()
{
return(sys_);
}
void setSystem(AS400ImplRemote system)
{
if (system == null)
{
throw new NullPointerException();
}
sys_ = system;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy