3270 印刷ジョブの listen
サービス・マネージャーを使用して プラグインが 3270 印刷ジョブ・イベントを listen できるようにする方法を 以下の例に示します。以下の変更は、RCP アプリケーション・プラグイン・クラスに対して行います。
- ServiceManagerListener、ISessionServiceListener、および IPrintJobManagerChangeListener の実装
- ServiceManagerListener メソッド public void serviceChanged(ServiceManagerEvent event) を実装します。このメソッドは、サービス・マネージャーが 変化したときに呼び出されます。この例では、いつ新規セッションが作成または 破棄されたかを判別するために使用します。新規セッションが作成されるときには、 自分自身をリスナーとして追加します。セッションが破棄されるときには、 自分自身をリスナーから除去します。
- ISessionServiceListener メソッドの実装
- public void sessionStateChanged(StateChangeEvent event) - このメソッドは、セッションの状態が変更された場合に呼び出されます。このメソッドは、 セッションの印刷ジョブ・マネージャーを検出し、 自分自身をリスナーとして追加するために使用します。
- public void aboutToProcessCommand(CommandEvent event) - このメソッドは、この例では空のままです。
- public void afterProcessCommand(CommandEvent event) - このメソッドは、この例では空のままです。
- IPrintJobManagerChangeListeners をインプリメントします。
- public void addPrintJob(PrintJobManager printJobManager, PrintJob printJob) - このメソッドは、印刷ジョブが印刷ジョブ・マネージャーに追加されると呼び出されます。
- public void removePrintJob(PrintJobManager printJobManager, PrintJob printJob) - このメソッドは、印刷ジョブが印刷ジョブ・マネージャーから除去 (削除) されると呼び出されます。
- public void updatePrintJob(PrintJobManager printJobManager, PrintJob printJob) - このメソッドは、印刷ジョブが更新されると呼び出されます。
- アプリケーション・プラグインの start() メソッドで、ユーザー本人をサービス・マネージャー・リスナーとして追加します。
- アプリケーション・プラグインの stop() メソッドで、ユーザー本人をサービス・マネージャー・リスナーから除去します。
package printExample;
import java.util.HashSet;
import org.eclipse.jface.resource.ImageDescriptor;
import org.osgi.framework.BundleContext;
import com.ibm.hats.rcp.runtime.RcpRuntimePlugin;
import com.ibm.hats.rcp.ui.AbstractRcpApplicationPlugin;
import com.ibm.hats.runtime.ApplicationSpecificInfo;
import com.ibm.hats.runtime.ClientSpecificInfo;
import com.ibm.hats.runtime.IPrintJobManagerChangeListener;
import com.ibm.hats.runtime.PrintJob;
import com.ibm.hats.runtime.PrintJobManager;
import com.ibm.hats.runtime.PrintResourceHandler;
import com.ibm.hats.runtime.PrintSpecificInfo;
import com.ibm.hats.runtime.events.CommandEvent;
import com.ibm.hats.runtime.events.ISessionServiceListener;
import com.ibm.hats.runtime.events.ServiceManagerEvent;
import com.ibm.hats.runtime.events.ServiceManagerListener;
import com.ibm.hats.runtime.events.StateChangeEvent;
import com.ibm.hats.runtime.services.IService;
import com.ibm.hats.runtime.services.IServiceManager;
import com.ibm.hats.runtime.services.ISessionService;
import com.ibm.hats.util.StateType;
/**
* The activator class controls the plug-in life cycle
*/
public class PrintExamplePlugin extends AbstractRcpApplicationPlugin implements
ServiceManagerListener, ISessionServiceListener,
IPrintJobManagerChangeListener
{
// The plug-in ID
public static final String PLUGIN_ID = "PrintExample";
// The shared instance
private static PrintExamplePlugin plugin;
// The service manager
private IServiceManager serviceManager = null;
// The print managers we are listeners for
private HashSet printJobManagers = new HashSet();
/**
* The constructor
*/
public PrintExamplePlugin()
{
plugin = this;
System.out.println("PrintExamplePlugin: ctor");
}
/*
* (non-Javadoc)
*
* @see org.eclipse.ui.plugin.AbstractRcpApplicationPlugin#
* start(org.osgi.framework.BundleContext)
*/
public void start(BundleContext context) throws Exception
{
super.start(context);
// Add the service manager listener
serviceManager = RcpRuntimePlugin.getDefault().getServiceManager();
serviceManager.addServiceManagerListener(this);
}
/*
* (non-Javadoc)
*
* @see org.eclipse.ui.plugin.AbstractRcpApplicationPlugin#stop(org.osgi.
* framework.BundleContext)
*/
public void stop(BundleContext context) throws Exception
{
plugin = null;
// Remove the service manager listener
if (serviceManager != null)
serviceManager.removeServiceManagerListener(this);
super.stop(context);
}
/**
* Returns the shared instance
*
* @return the shared instance
*/
public static PrintExamplePlugin getDefault()
{
return plugin;
}
/**
* Returns an image descriptor for the image file at the given plug-in
* relative path
*
* @param path
* the path
* @return the image descriptor
*/
public static ImageDescriptor getImageDescriptor(String path)
{
return imageDescriptorFromPlugin(PLUGIN_ID, path);
}
/*
* (non-Javadoc)
*
* @see com.ibm.hats.runtime.IPrintJobManagerChangeListener#
* addPrintJob(com.ibm.hats.runtime.PrintJobManager,
* com.ibm.hats.runtime.PrintJob)
*/
public void addPrintJob(PrintJobManager printJobManager,
PrintJob printJob)
{
System.out.println("PrintExamplePlugin: addPrintJob:
" + printJob.toString());
}
/*
* (non-Javadoc)
*
* @see com.ibm.hats.runtime.IPrintJobManagerChangeListener#
* removePrintJob(com.ibm.hats.runtime.PrintJobManager,
* com.ibm.hats.runtime.PrintJob)
*/
public void removePrintJob(PrintJobManager printJobManager,
PrintJob printJob)
{
System.out.println("PrintExamplePlugin: removePrintJob: "
+ printJob.toString());
}
/*
* (non-Javadoc)
*
* @see com.ibm.hats.runtime.IPrintJobManagerChangeListener#
* updatePrintJob(com.ibm.hats.runtime.PrintJobManager,
* com.ibm.hats.runtime.PrintJob)
*/
public void updatePrintJob(PrintJobManager printJobManager,
PrintJob printJob)
{
System.out.println("PrintExamplePlugin: updatePrintJob: "
+ printJob.toString());
}
/*
* (non-Javadoc)
*
* @see com.ibm.hats.runtime.events.ServiceManagerListener#
* serviceChanged(com.ibm.hats.runtime.events.ServiceManagerEvent)
*/
public void serviceChanged(ServiceManagerEvent event)
{
IService theService = event.getService();
if (theService instanceof ISessionService)
{
ISessionService sessionService = (ISessionService) theService;
int type = event.getType();
if (type == ServiceManagerEvent.TYPE_SERVICE_CREATED)
{
sessionService.addSessionServiceListener(this);
}
else if (type == ServiceManagerEvent.TYPE_SERVICE_DESTROYED)
{
sessionService.removeSessionServiceListener(this);
}
}
}
/*
* (non-Javadoc)
*
* @see com.ibm.hats.runtime.events.SessionStateListener#
* sessionStateChanged(com.ibm.hats.runtime.events.SessionStateEvent)
*/
public void sessionStateChanged(StateChangeEvent event)
{
// If the session has change to operational then add a listener to
// the PrintJobManager (if there is one and we haven't already done so).
StateType state = event.getNewState();
if (state == StateType.OPERATIONAL)
{
ISessionService sessionService = event.getSessionService();
ClientSpecificInfo csi = sessionService.getRuntimeService()
.getClientContainer().accessClient(sessionService.getClientId());
if (csi != null)
{
String asiId = ApplicationSpecificInfo.
createCompositeAsiId(sessionService.
getApplicationId(),
sessionService.getViewId());
ApplicationSpecificInfo asi = csi.peekAll(asiId);
if (asi != null)
{
PrintSpecificInfo psi = asi.getPrint();
if (psi != null)
{
PrintResourceHandler prh = psi.getResourceHandler();
if (prh != null)
{
PrintJobManager pjm = prh.getPrintJobManager();
// Add this PrintJobManager to our list of
// PrintJobManagers.
// This will return true if we haven't encountered
// this PrintJobManager before.
// In this case, add ourselves as a
// listener to this PrintJobManager.
if (printJobManagers.add(pjm))
{
pjm.addChangeListener(this);
}
}
}
}
}
}
}
/*
* (non-Javadoc)
*
* @see com.ibm.hats.runtime.events.ISessionServiceListener#
* aboutToProcessCommand(com.ibm.hats.runtime.events.CommandEvent)
*/
public void aboutToProcessCommand(CommandEvent event)
{
}
/*
* (non-Javadoc)
*
* @see com.ibm.hats.runtime.events.ISessionServiceListener#
* afterProcessCommand(com.ibm.hats.runtime.events.CommandEvent)
*/
public void afterProcessCommand(CommandEvent event)
{
}
}