📄 deviceservice.java
字号:
/*****************************************************************************//* Software Testing Automation Framework (STAF) *//* (C) Copyright IBM Corp. 2001, 2004, 2005 *//* *//* This software is licensed under the Common Public License (CPL) V1.0. *//*****************************************************************************/package com.ibm.staf.service.deviceservice;import com.ibm.staf.*;import com.ibm.staf.service.*;import java.util.Map;import java.util.List;import java.util.ArrayList;import java.util.TreeMap;import java.util.Iterator;import java.util.StringTokenizer;public class DeviceService implements STAFServiceInterfaceLevel30{ private final String kVersion = "3.0.1"; private String fServiceName; private STAFHandle fHandle; private String fLocalMachineName = ""; // Define any error codes unique to this service private static final int kDeviceInvalidSerialNumber = 4001; // STAFCommandParsers for each request private STAFCommandParser fListParser; private STAFCommandParser fQueryParser; private STAFCommandParser fAddParser; private STAFCommandParser fDeleteParser; // Map Class Definitions used to create marshalled results public static STAFMapClassDefinition fListDeviceMapClass; public static STAFMapClassDefinition fQueryDeviceMapClass; private String fLineSep; private TreeMap fPrinterMap = new TreeMap(); private TreeMap fModemMap = new TreeMap(); public DeviceService() {} public STAFResult init(STAFServiceInterfaceLevel30.InitInfo info) { try { fServiceName = info.name; fHandle = new STAFHandle("STAF/Service/" + info.name); } catch (STAFException e) { return new STAFResult(STAFResult.STAFRegistrationError, e.toString()); } // ADD parser fAddParser = new STAFCommandParser(); fAddParser.addOption("ADD", 1, STAFCommandParser.VALUENOTALLOWED); fAddParser.addOption("PRINTER", 1, STAFCommandParser.VALUEREQUIRED); fAddParser.addOption("MODEL", 1, STAFCommandParser.VALUEREQUIRED); fAddParser.addOption("SN", 1, STAFCommandParser.VALUEREQUIRED); fAddParser.addOption("MODEM", 1, STAFCommandParser.VALUEREQUIRED); // this means you can have PRINTER or MODEM, but not both fAddParser.addOptionGroup("PRINTER MODEM", 0, 1); // if you specify ADD, MODEL is required fAddParser.addOptionNeed("ADD", "MODEL"); // if you specify ADD, SN is required fAddParser.addOptionNeed("ADD", "SN"); // if you specify PRINTER or MODEM, ADD is required fAddParser.addOptionNeed("PRINTER MODEM", "ADD"); // if you specify ADD, PRINTER or MODEM is required fAddParser.addOptionNeed("ADD", "PRINTER MODEM"); // LIST parser fListParser = new STAFCommandParser(); fListParser.addOption("LIST", 1, STAFCommandParser.VALUENOTALLOWED); fListParser.addOption("PRINTERS", 1, STAFCommandParser.VALUENOTALLOWED); fListParser.addOption("MODEMS", 1, STAFCommandParser.VALUENOTALLOWED); // QUERY parser fQueryParser = new STAFCommandParser(); fQueryParser.addOption("QUERY", 1, STAFCommandParser.VALUENOTALLOWED); fQueryParser.addOption("PRINTER", 1, STAFCommandParser.VALUEREQUIRED); fQueryParser.addOption("MODEM", 1, STAFCommandParser.VALUEREQUIRED); // This means you can have PRINTER or MODEM, but not both fQueryParser.addOptionGroup("PRINTER MODEM", 0, 1); // If you specify PRINTER or MODEM, QUERY is required fQueryParser.addOptionNeed("PRINTER MODEM", "QUERY"); // If you specify QUERY, PRINTER or MODEM is required fQueryParser.addOptionNeed("QUERY", "PRINTER MODEM"); // DELETE parser fDeleteParser = new STAFCommandParser(); fDeleteParser.addOption("DELETE", 1, STAFCommandParser.VALUENOTALLOWED); fDeleteParser.addOption("PRINTER", 1, STAFCommandParser.VALUEREQUIRED); fDeleteParser.addOption("MODEM", 1, STAFCommandParser.VALUEREQUIRED); fDeleteParser.addOption("CONFIRM", 1, STAFCommandParser.VALUENOTALLOWED); // This means you must have PRINTER or MODEM, but not both fDeleteParser.addOptionGroup("PRINTER MODEM", 0, 1); // If you specify PRINTER or MODEM, DELETE is required fDeleteParser.addOptionNeed("PRINTER MODEM", "DELETE"); // If you specify DELETE, PRINTER or MODEM is required fDeleteParser.addOptionNeed("DELETE", "PRINTER MODEM"); // If you specify DELETE, CONFIRM is required fDeleteParser.addOptionNeed("DELETE", "CONFIRM"); // Construct map class for the result from a LIST request. fListDeviceMapClass = new STAFMapClassDefinition( "STAF/Service/Device/ListDevice"); fListDeviceMapClass.addKey("name", "Name"); fListDeviceMapClass.addKey("type", "Type"); fListDeviceMapClass.addKey("model", "Model"); fListDeviceMapClass.addKey("serial#", "Serial Number"); fListDeviceMapClass.setKeyProperty( "serial#", "display-short-name", "Serial #"); // Construct map class for the result from a QUERY request. fQueryDeviceMapClass = new STAFMapClassDefinition( "STAF/Service/Device/QueryDevice"); fQueryDeviceMapClass.addKey("model", "Model"); fQueryDeviceMapClass.addKey("serial#", "Serial Number"); STAFResult res = new STAFResult(); // Resolve the line separator variable for the local machine res = STAFUtil.resolveInitVar("{STAF/Config/Sep/Line}", fHandle); if (res.rc != STAFResult.Ok) return res; fLineSep = res.result; // Resolve the machine name variable for the local machine res = STAFUtil.resolveInitVar("{STAF/Config/Machine}", fHandle); if (res.rc != STAFResult.Ok) return res; fLocalMachineName = res.result; // Register Help Data registerHelpData( kDeviceInvalidSerialNumber, "Invalid serial number", "A non-numeric value was specified for serial number"); return new STAFResult(STAFResult.Ok); } public STAFResult acceptRequest(STAFServiceInterfaceLevel30.RequestInfo info) { String lowerRequest = info.request.toLowerCase(); StringTokenizer requestTokenizer = new StringTokenizer(lowerRequest); String request = requestTokenizer.nextToken(); // Call the appropriate method to handle the command if (request.equals("list")) return handleList(info); else if (request.equals("query")) return handleQuery(info); else if (request.equals("add")) return handleAdd(info); else if (request.equals("delete")) return handleDelete(info); else if (request.equals("help")) return handleHelp(info); else if (request.equals("version")) return handleVersion(info); else { return new STAFResult( STAFResult.InvalidRequestString, "Unknown DeviceService Request: " + lowerRequest); } } private STAFResult handleHelp(STAFServiceInterfaceLevel30.RequestInfo info) { // Verify the requester has at least trust level 1 STAFResult trustResult = STAFUtil.validateTrust( 1, fServiceName, "HELP", fLocalMachineName, info); if (trustResult.rc != STAFResult.Ok) return trustResult; // Return help text for the service return new STAFResult( STAFResult.Ok, "DeviceService Service Help" + fLineSep + fLineSep + "ADD (PRINTER <printerName> | MODEM <modemName>)" + " MODEL <model> SN <serial#>" + fLineSep + "DELETE PRINTER <printerName> | MODEM <modemName> CONFIRM" + fLineSep + "LIST [PRINTERS] [MODEMS]" + fLineSep + "QUERY PRINTER <printerName> | MODEM <modemName>" + fLineSep + "VERSION" + fLineSep + "HELP"); } private STAFResult handleVersion( STAFServiceInterfaceLevel30.RequestInfo info) { // Verify the requester has at least trust level 1 STAFResult trustResult = STAFUtil.validateTrust( 1, fServiceName, "VERSION", fLocalMachineName, info); if (trustResult.rc != STAFResult.Ok) return trustResult; // Return the service's version return new STAFResult(STAFResult.Ok, kVersion); } private STAFResult handleAdd(STAFServiceInterfaceLevel30.RequestInfo info) { // Verify the requester has at least trust level 3 STAFResult trustResult = STAFUtil.validateTrust( 3, fServiceName, "ADD", fLocalMachineName, info); if (trustResult.rc != STAFResult.Ok) return trustResult; // Parse the request STAFCommandParseResult parsedRequest = fAddParser.parse(info.request); if (parsedRequest.rc != STAFResult.Ok) { return new STAFResult(STAFResult.InvalidRequestString, parsedRequest.errorBuffer); } // Resolve any STAF variables in the printer option's value STAFResult res = new STAFResult(); res = STAFUtil.resolveRequestVar( parsedRequest.optionValue("printer"), fHandle, info.requestNumber); if (res.rc != STAFResult.Ok) return res; String printer = res.result; // Resolve any STAF variables in the modem option's value res = STAFUtil.resolveRequestVar( parsedRequest.optionValue("modem"), fHandle, info.requestNumber); if (res.rc != STAFResult.Ok) return res; String modem = res.result; // Resolve any STAF variables in the model option's value res = STAFUtil.resolveRequestVar( parsedRequest.optionValue("model"), fHandle, info.requestNumber); if (res.rc != STAFResult.Ok) return res; String model = res.result; // Resolve any STAF variables in the sn option's value res = STAFUtil.resolveRequestVar( parsedRequest.optionValue("sn"), fHandle, info.requestNumber); if (res.rc != STAFResult.Ok) return res; String sn = res.result; // Verify that the serial number is numeric try { new Integer(sn); }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -