src.com.ibm.as400.access.Printer Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of jt400-jdk8 Show documentation
Show all versions of jt400-jdk8 Show documentation
The Open Source version of the IBM Toolbox for Java
The newest version!
///////////////////////////////////////////////////////////////////////////////
//
// JTOpen (IBM Toolbox for Java - OSS version)
//
// Filename: Printer.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.beans.PropertyVetoException;
import java.io.IOException;
/**
* The Printer class represents a printer.
* An instance of this class can be used to manipulate an individual
* printer.
*
* See Printer Attributes for
* valid attributes.
*
**/
public class Printer extends PrintObject
implements java.io.Serializable
{
static final long serialVersionUID = 4L;
private static boolean fAttrIDsToRtvBuilt_ = false;
private static final String NAME = "name";
// constructor used internally (not externalized since it takes
// an ID code point
Printer(AS400 system, NPCPIDPrinter id, NPCPAttribute attrs)
{
super(system, id, attrs, NPConstants.PRINTER_DEVICE);
}
/**
* Constructs a Printer object. The system and the
* name of the printer 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 #setName
**/
public Printer()
{
super(null, null, NPConstants.PRINTER_DEVICE);
// Because of this constructor we will need to check the
// system and printer name before trying to use them.
}
/**
* Constructs a Printer object. It uses the specified system name and
* the printer name that identifies it on that system.
*
* @param system The system on which this printer device exists.
* @param printerName The name of the printer. It cannot be greater
* than 10 characters or less than 1 character
* in length.
*
**/
public Printer(AS400 system,
String printerName)
{
super(system, new NPCPIDPrinter(printerName), null, NPConstants.PRINTER_DEVICE);
// base class constructor checks for a null system.
checkPrinterName(printerName);
}
// check the printer name to see if valid
void checkPrinterName( String printerName )
{
if (printerName == null) {
Trace.log(Trace.ERROR, "Parameter 'printerName' is null.");
throw new NullPointerException("printerName");
}
if ((printerName.length() > 10) || (printerName.length() < 1)) {
Trace.log(Trace.ERROR, "Parameter 'printerName' is greater than 10 or less than 1 characters in length " + printerName);
throw new ExtendedIllegalArgumentException(
"printerName("+printerName+")",
ExtendedIllegalArgumentException.LENGTH_NOT_VALID);
}
}
// Check the run time state
void checkRunTimeState()
{
// check whatever the base class needs to check
super.checkRunTimeState();
// Printers need to additionally check the printer name.
// In this context, getIDCodePoint() returns the printer name.
if( getIDCodePoint() == null )
{
Trace.log(Trace.ERROR, "Printer name has not been set.");
throw new ExtendedIllegalStateException(
"name", ExtendedIllegalStateException.PROPERTY_NOT_SET);
}
}
// A4A - Added chooseImpl() method
/**
* Chooses the implementation
**/
void chooseImpl()
throws IOException, AS400SecurityException
{
AS400 system = getSystem();
if (system == null) {
Trace.log( Trace.ERROR, "Attempt to use Printer before setting system." );
throw new ExtendedIllegalStateException("system",
ExtendedIllegalStateException.PROPERTY_NOT_SET);
}
impl_ = (PrinterImpl) system.loadImpl2("com.ibm.as400.access.PrinterImplRemote",
"com.ibm.as400.access.PrinterImplProxy");
super.setImpl();
}
/**
* Returns the name of the printer.
*
* @return The name of the printer. If name is not set, "" is returned.
**/
public String getName()
{
NPCPID IDCodePoint = getIDCodePoint();
if( IDCodePoint == null ) {
return EMPTY_STRING; // ""
} else {
return IDCodePoint.getStringValue(ATTR_PRINTER);
}
}
/**
* Sets one or more attributes of the object. See
* Printer Attributes for
* a list of valid attributes that can be changed.
*
Note that only the following attributes can be changed:
*
* - {@link PrintObject#ATTR_CHANGES ATTR_CHANGES}
*
- {@link PrintObject#ATTR_DRWRSEP ATTR_DRWRSEP}
*
- {@link PrintObject#ATTR_FILESEP ATTR_FILESEP}
*
- {@link PrintObject#ATTR_FORMTYPE ATTR_FORMTYPE}
*
- {@link PrintObject#ATTR_OUTPUT_QUEUE ATTR_OUTPUT_QUEUE}
*
- {@link PrintObject#ATTR_DESCRIPTION ATTR_DESCRIPTION}
*
* Any other attributes will be ignored by this method.
*
* @param attributes A print parameter list that contains the
* attributes to be changed.
*
* @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.
**/
public void setAttributes(PrintParameterList attributes)
throws AS400Exception,
AS400SecurityException,
ErrorCompletingRequestException,
IOException,
InterruptedException
{
if (attributes == null) {
Trace.log(Trace.ERROR, "Parameter 'attributes' is null.");
throw new NullPointerException("attributes");
}
checkRunTimeState();
if (impl_ == null) chooseImpl();
((PrinterImpl) impl_).setAttributes(attributes);
// propagate any changes to attrs
attrs = impl_.getAttrValue();
}
/**
* Sets the name of the printer.
*
* @param name The name of the printer. It cannot be greater
* than 10 characters.
*
* @exception PropertyVetoException If the change is vetoed.
*
**/
public void setName(String name)
throws PropertyVetoException
{
checkPrinterName(name);
String oldName = getName();
// Tell any vetoers about the change. If anyone objects
// we let the PropertyVetoException propagate back to
// our caller.
vetos.fireVetoableChange(NAME, oldName, name );
// No one vetoed, make the change.
setIDCodePoint(new NPCPIDPrinter(name));
// Notify any property change listeners.
changes.firePropertyChange( NAME, oldName, name );
}
} // end Printer class