com.ibm.as400.access.OutputQueue 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: OutputQueue.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;
import java.io.IOException;
import java.util.Vector;
import java.beans.PropertyVetoException;
/**
* The OutputQueue class represents an output queue.
* An instance of this class can be used to manipulate an individual
* output queue (hold, release, clear, and so on).
*
* See Output Queue Attributes for
* valid attributes.
*
**/
public class OutputQueue extends PrintObject
implements java.io.Serializable
{
private static final String copyright = "Copyright (C) 1997-2000 International Business Machines Corporation and others.";
static final long serialVersionUID = 4L;
private static final String PATH = "path";
transient private Vector outputQueueListeners_ = new Vector();
// constructor used internally (not externalized since it takes
// an ID code point
OutputQueue(AS400 system, NPCPIDOutQ id, NPCPAttribute attrs)
{
super(system, id, attrs, NPConstants.OUTPUT_QUEUE);
}
/**
* Constructs an OutputQueue object. The system and the
* integrated file system name of the output queue must be set
* later. This constructor is provided for visual application
* builders that support JavaBeans. It is not intended for use
* by application programmers.
*
* @see PrintObject#setSystem
* @see #setPath
**/
public OutputQueue()
{
super(null, null, NPConstants.OUTPUT_QUEUE);
// Because of this constructor we will need to check the
// run time state of OutputQueue objects.
}
/**
* Constructs an OutputQueue object. It uses the specified system and
* output queue name that identifies it on that system.
*
* @param system The system on which this output queue exists.
* @param queueName The integrated file system name of the output queue. The format of
* the queue string must be in the format of /QSYS.LIB/libname.LIB/queuename.OUTQ.
*
**/
public OutputQueue(AS400 system,
String queueName)
{
super(system, buildIDCodePoint(queueName), null, NPConstants.OUTPUT_QUEUE);
// base class constructor checks for null system.
// QSYSObjectPathName() checks for a null queueName.
}
/**
*Adds the specified OutputQueue listener to receive
*OutputQueue events from this OutputQueue.
*
* @see #removeOutputQueueListener
* @param listener The OutputQueue listener.
**/
public void addOutputQueueListener( OutputQueueListener listener )
{
outputQueueListeners_.addElement(listener);
}
private static NPCPIDOutQ buildIDCodePoint(String IFSQueueName)
{
QSYSObjectPathName ifsPath = new QSYSObjectPathName(IFSQueueName, "OUTQ");
return new NPCPIDOutQ(ifsPath.getObjectName(), ifsPath.getLibraryName());
}
// Check the run time state
void checkRunTimeState()
{
// check whatever the base class needs to check
super.checkRunTimeState();
// OutputQueue's need to additionally check the IFS pathname.
if( getIDCodePoint() == null )
{
Trace.log(Trace.ERROR, "Parameter 'path' has not been set.");
throw new ExtendedIllegalStateException(
PATH, ExtendedIllegalStateException.PROPERTY_NOT_SET);
}
}
// A1A - Added function
/**
* Chooses the implementation
**/
void chooseImpl()
throws IOException, AS400SecurityException
{
// We need to get the system to connect to...
AS400 system = getSystem();
if (system == null) {
Trace.log( Trace.ERROR, "Attempt to use OutputQueue before setting system." );
throw new ExtendedIllegalStateException("system",
ExtendedIllegalStateException.PROPERTY_NOT_SET);
}
impl_ = (OutputQueueImpl) system.loadImpl2("com.ibm.as400.access.OutputQueueImplRemote",
"com.ibm.as400.access.OutputQueueImplProxy");
super.setImpl();
}
/**
* Clears the output queue on the system.
*
* @param clearOptions A PrintParameterList object that may have any of the
* following attributes set:
*
* -
* ATTR_JOBUSER - Clear output queue by a user id. May be a specific userid, "*ALL" or
* "*CURRENT". "*CURRENT" is the default.
*
-
* ATTR_FORMTYPE - Clear output queue by a form type. May be a specific form type, "*ALL" or
* "*STD". "*ALL" is the default.
*
-
* ATTR_USERDATA - Clear output queue by user data. May be a specific user data or "*ALL".
* "*ALL" is the default.
*
* clearOptions may be null.
*
* @exception AS400Exception If the system returns an error message.
* @exception AS400SecurityException If a security or authority error occurs.
* @exception ErrorCompletingRequestException If an error occurs before the request is completed.
* @exception IOException If an error occurs while communicating with the system.
* @exception InterruptedException If this thread is interrupted.
* @exception RequestNotSupportedException If the requested function is not supported because the
* system operating system is not at the correct level.
**/
public void clear(PrintParameterList clearOptions)
throws AS400Exception,
AS400SecurityException,
ErrorCompletingRequestException,
IOException,
InterruptedException,
RequestNotSupportedException
{
checkRunTimeState();
if (impl_ == null)
chooseImpl();
((OutputQueueImpl) impl_).clear(clearOptions);
// update the attrs, since updateAttrs was
// called on the remote side...
attrs = impl_.getAttrValue();
fireOutputQueueEvent(OutputQueueEvent.CLEARED);
} // end clear
// The JavaBeans 1.0 Specification strongly recommends to avoid
// using a synchronized method to fire an event. We use a
// synchronized block to locate the target listeners and then
// call the event listeners from unsynchronized code.
private void fireOutputQueueEvent( int id )
{
// Return if no listeners are registered.
if( outputQueueListeners_.isEmpty() )
{
return;
}
Vector l;
OutputQueueEvent event = new OutputQueueEvent(this, id);
synchronized(this) { l = (Vector)outputQueueListeners_.clone(); }
for( int i=0; i < l.size(); i++ )
{
switch(id)
{
case OutputQueueEvent.CLEARED:
((OutputQueueListener)l.elementAt(i)).outputQueueCleared(event);
break;
case OutputQueueEvent.HELD:
((OutputQueueListener)l.elementAt(i)).outputQueueHeld(event);
break;
case OutputQueueEvent.RELEASED:
((OutputQueueListener)l.elementAt(i)).outputQueueReleased(event);
break;
}
}
}
/**
* Returns the name of the output queue.
*
* @return The name of the output queue.
**/
public String getName()
{
NPCPID IDCodePoint = getIDCodePoint();
if( IDCodePoint == null ) {
return EMPTY_STRING; // ""
} else {
return IDCodePoint.getStringValue(ATTR_OUTQUE);
}
}
/**
* Returns the integrated file system pathname of the output queue.
*
* @return The integrated file system pathname of the output queue.
**/
public String getPath()
{
NPCPID IDCodePoint = getIDCodePoint();
if( IDCodePoint == null ) {
return EMPTY_STRING; // ""
} else {
return QSYSObjectPathName.toPath(
IDCodePoint.getStringValue(ATTR_OUTQUELIB), // library name
IDCodePoint.getStringValue(ATTR_OUTQUE), // queue name
"OUTQ" ); // type
}
}
/**
* Holds the output queue on the system.
*
* @exception AS400Exception If the system returns an error message.
* @exception AS400SecurityException If a security or authority error occurs.
* @exception ErrorCompletingRequestException If an error occurs before the request is completed.
* @exception IOException If an error occurs while communicating with the system.
* @exception InterruptedException If this thread is interrupted.
* @exception RequestNotSupportedException If the requested function is not supported because the
* system operating system is not at the correct level.
**/
public void hold()
throws AS400Exception,
AS400SecurityException,
ErrorCompletingRequestException,
IOException,
InterruptedException,
RequestNotSupportedException
{
checkRunTimeState();
if (impl_ == null)
chooseImpl();
((OutputQueueImpl) impl_).hold();
// update the attrs, since updateAttrs was
// called on the remote side...
attrs = impl_.getAttrValue();
fireOutputQueueEvent(OutputQueueEvent.HELD);
} // end hold
// We need to initialize our transient and static data when
// the object is de-serialized. static final data is OK.
private void readObject(java.io.ObjectInputStream in)
throws IOException, ClassNotFoundException
{
in.defaultReadObject();
outputQueueListeners_ = new Vector();
}
/**
* Releases a held output queue on the system.
*
* @exception AS400Exception If the system returns an error message.
* @exception AS400SecurityException If a security or authority error occurs.
* @exception ErrorCompletingRequestException If an error occurs before the request is completed.
* @exception IOException If an error occurs while communicating with the system.
* @exception InterruptedException If this thread is interrupted.
* @exception RequestNotSupportedException If the requested function is not supported because the
* system operating system is not at the correct level.
**/
public void release()
throws AS400Exception,
AS400SecurityException,
ErrorCompletingRequestException,
IOException,
InterruptedException,
RequestNotSupportedException
{
checkRunTimeState();
if (impl_ == null)
chooseImpl();
((OutputQueueImpl) impl_).release();
// update the attrs, since updateAttrs was
// called on the remote side...
attrs = impl_.getAttrValue();
fireOutputQueueEvent(OutputQueueEvent.RELEASED);
} // end release
/**
*Removes the specified OutputQueue listener
*so that it no longer receives OutputQueue events
*from this OutputQueue.
*
* @see #addOutputQueueListener
* @param listener The OutputQueue listener.
**/
public void removeOutputQueueListener( OutputQueueListener listener )
{
outputQueueListeners_.removeElement(listener);
}
/**
* Sets the integrated file system pathname of the output queue.
*
* @param path The integrated file system pathname of the output queue. The format of
* the queue string must be in the format of /QSYS.LIB/libname.LIB/queuename.OUTQ.
*
* @exception PropertyVetoException If the change is vetoed.
*
**/
public void setPath(String path)
throws PropertyVetoException
{
if( path == null )
{
Trace.log( Trace.ERROR, "Parameter 'path' is null" );
throw new NullPointerException( PATH );
}
// check for connection...
if (impl_ != null) {
Trace.log(Trace.ERROR, "Cannot set property 'Path' after connect.");
throw new ExtendedIllegalStateException(PATH, ExtendedIllegalStateException.PROPERTY_NOT_CHANGED );
}
String oldPath = getPath();
// Tell any vetoers about the change. If anyone objects
// we let the PropertyVetoException propagate back to
// our caller.
vetos.fireVetoableChange( PATH, oldPath, path );
// No one vetoed, make the change.
setIDCodePoint(buildIDCodePoint(path));
// Notify any property change listeners.
changes.firePropertyChange( PATH, oldPath, path );
}
} // end OutputQueue class
© 2015 - 2025 Weber Informatics LLC | Privacy Policy