| | |
| | | import com.ibm.staf.wrapper.*; |
| | | import com.ibm.staf.service.*; |
| | | import com.ibm.staf.service.opends.tester.*; |
| | | import java.util.StringTokenizer; |
| | | import java.util.*; |
| | | import java.io.*; |
| | | import java.util.ArrayList; |
| | | |
| | |
| | | public class DSMLService implements STAFServiceInterfaceLevel30 { |
| | | |
| | | private static final String OP_COMPARE = "COMPARE"; |
| | | private static final String OP_CHECK_ERROR_STRINGS = "CHECK_ERROR_STRINGS"; |
| | | private static final String OP_HELP = "HELP"; |
| | | private static final String OP_FILE = "FILE"; |
| | | private static final String OP_EXP_FILE = "EXP_FILE"; |
| | |
| | | private STAFHandle fHandle; |
| | | private String fLocalMachineName = ""; |
| | | private STAFLog logger = null; |
| | | |
| | | // Define any error codes unique to this service |
| | | private static final int kDSMLInvalidSomething = 4001; |
| | | |
| | | private static final int kErrorStringMatchOffset = 100000000; |
| | | // STAFCommandParsers for each request |
| | | private STAFCommandParser fCompareParser; |
| | | private STAFCommandParser fParser; |
| | | private String fLineSep; |
| | | |
| | | public STAFResult init(STAFServiceInterfaceLevel30.InitInfo info) { |
| | |
| | | } |
| | | |
| | | // COMPARE parser |
| | | fCompareParser = new STAFCommandParser(0, false); |
| | | fCompareParser.addOption(OP_COMPARE, 1, STAFCommandParser.VALUENOTALLOWED); |
| | | fCompareParser.addOption(OP_FILE, 1, STAFCommandParser.VALUEREQUIRED); |
| | | //fCompareParser.addOption(OP_F_SHORTCUT, 0, STAFCommandParser.VALUEREQUIRED); |
| | | fCompareParser.addOption(OP_DIR, 1, STAFCommandParser.VALUEREQUIRED); |
| | | fCompareParser.addOption(OP_EXP_FILE, 1, STAFCommandParser.VALUEREQUIRED); |
| | | fCompareParser.addOption(OP_EXP_DIR, 1, STAFCommandParser.VALUEREQUIRED); |
| | | //fCompareParser.addOption(OP_DIR_SHORT, 0, STAFCommandParser.VALUEREQUIRED); |
| | | //fCompareParser.addOption(OP_D_SHORTCUT, 0, STAFCommandParser.VALUEREQUIRED); |
| | | // either we compare directory or file |
| | | //fCompareParser.addOptionGroup(OP_FILE_GROUP, 1, 3); |
| | | //fCompareParser.addOptionGroup(OP_DIR_GROUP, 1, 3); |
| | | //TODO.1 not needed per dependency below |
| | | //TODO.1 fCompareParser.addOptionGroup(OP_EXPECTED_GROUP, 0, 1); |
| | | //TODO.1 fCompareParser.addOptionNeed(OP_EXPECTED_RESULT_FILE, OP_RESULT_FILE); |
| | | //TODO.1 fCompareParser.addOptionNeed(OP_EXPECTED_RESULT_DIR, OP_RESULT_DIR); |
| | | fParser = new STAFCommandParser(0, false); |
| | | fParser.addOption(OP_COMPARE, 1, STAFCommandParser.VALUENOTALLOWED); |
| | | fParser.addOption(OP_FILE, 1, STAFCommandParser.VALUEREQUIRED); |
| | | fParser.addOption(OP_DIR, 1, STAFCommandParser.VALUEREQUIRED); |
| | | fParser.addOption(OP_EXP_FILE, 1, STAFCommandParser.VALUEREQUIRED); |
| | | fParser.addOption(OP_EXP_DIR, 1, STAFCommandParser.VALUEREQUIRED); |
| | | |
| | | // if you specify COMPARE, RESULT_FILE is required |
| | | fCompareParser.addOptionNeed(OP_FILE, OP_EXP_FILE); |
| | | fCompareParser.addOptionNeed(OP_EXP_FILE, OP_FILE); |
| | | fCompareParser.addOptionNeed(OP_DIR, OP_EXP_DIR); |
| | | fCompareParser.addOptionNeed(OP_EXP_DIR, OP_DIR); |
| | | fCompareParser.addOptionNeed(OP_COMPARE, OP_FILE + " " + OP_DIR); |
| | | fCompareParser.addOptionNeed(OP_FILE + " " + OP_DIR, OP_COMPARE); |
| | | fParser.addOptionNeed(OP_EXP_FILE, OP_FILE); |
| | | fParser.addOptionNeed(OP_EXP_DIR, OP_DIR); |
| | | fParser.addOptionNeed(OP_COMPARE, OP_EXP_FILE + " " + OP_EXP_DIR); |
| | | fParser.addOptionNeed(OP_EXP_FILE + " " + OP_EXP_DIR, OP_COMPARE); |
| | | |
| | | // CHECK_ERROR_STRINGS parser |
| | | fParser.addOption(OP_CHECK_ERROR_STRINGS, 1, STAFCommandParser.VALUENOTALLOWED); |
| | | fParser.addOptionNeed(OP_CHECK_ERROR_STRINGS, OP_FILE); |
| | | STAFResult res = new STAFResult(); |
| | | |
| | | // Resolve the line separator variable for the local machine |
| | |
| | | } |
| | | |
| | | public STAFResult acceptRequest(STAFServiceInterfaceLevel30.RequestInfo info) { |
| | | // dumping the RequestInfo |
| | | //TODO |
| | | |
| | | //delegate the request handling |
| | | StringTokenizer requestTokenizer = new StringTokenizer(info.request); |
| | | String request = requestTokenizer.nextToken().toLowerCase(); |
| | |
| | | // call the appropriate method to handle the command |
| | | if (request.equalsIgnoreCase(OP_COMPARE)) { |
| | | return handleCompare(info); |
| | | } else if (request.equalsIgnoreCase(OP_CHECK_ERROR_STRINGS)) { |
| | | return handleCheckErrorStrings(info); |
| | | } else if (request.equalsIgnoreCase(OP_HELP)) { |
| | | return handleHelp(info); |
| | | } else { |
| | |
| | | return new STAFResult(STAFResult.Ok); |
| | | } |
| | | |
| | | private STAFResult handleCheckErrorStrings(STAFServiceInterfaceLevel30.RequestInfo info) { |
| | | STAFResult sr = new STAFResult(0); |
| | | STAFCommandParseResult parsedRequest = fParser.parse(info.request); |
| | | if (parsedRequest.rc != STAFResult.Ok) { |
| | | return new STAFResult(STAFResult.InvalidRequestString, |
| | | parsedRequest.errorBuffer); |
| | | } |
| | | String resultFile = parsedRequest.optionValue(OP_FILE); |
| | | Properties errProps = new Properties(); |
| | | final String RE = ".r"; |
| | | final String lblMarker = "_"; |
| | | try { |
| | | ClassLoader cl = this.getClass().getClassLoader(); |
| | | InputStream in = cl.getResourceAsStream("errorStrings.properties"); |
| | | errProps.load(in); |
| | | in.close(); |
| | | Enumeration errEnum = errProps.propertyNames(); |
| | | while (errEnum.hasMoreElements()) { |
| | | String k = (String) errEnum.nextElement(); |
| | | String issueID = null; |
| | | String lbl = null; |
| | | boolean re = k.endsWith(RE); |
| | | int lblNdx = k.indexOf(lblMarker); |
| | | if (lblNdx != -1) { |
| | | if (re) { |
| | | lbl = k.substring(lblNdx + 1, k.length() - RE.length()); |
| | | } else { |
| | | lbl = k.substring(lblNdx + 1); |
| | | } |
| | | } |
| | | if (lblNdx != -1) { |
| | | issueID = k.substring(0, lblNdx); |
| | | } else if (re) { |
| | | issueID = k.substring(0, k.length() - RE.length()); |
| | | } else { |
| | | issueID = k; |
| | | } |
| | | String v = errProps.getProperty(k); |
| | | BufferedReader rbr = new BufferedReader(new FileReader(resultFile)); |
| | | String line = ""; |
| | | while ((line = rbr.readLine()) != null) { |
| | | if (re) { |
| | | if (line.matches(v)) { |
| | | sr = new STAFResult(kErrorStringMatchOffset + |
| | | Integer.parseInt(issueID),""+lbl+line); |
| | | } |
| | | } else { |
| | | if (line.indexOf(v) != -1) { |
| | | sr = new STAFResult(kErrorStringMatchOffset + |
| | | Integer.parseInt(issueID),""+lbl+line); |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } catch (FileNotFoundException fnfe) { |
| | | sr.rc = kDSMLInvalidSomething + 11; |
| | | sr.result = fnfe.getMessage(); |
| | | } catch (IOException ioe) { |
| | | sr.rc = kDSMLInvalidSomething + 12; |
| | | sr.result = ioe.getMessage(); |
| | | } catch (Exception e) { |
| | | sr.rc = kDSMLInvalidSomething + 13; |
| | | sr.result = e.getMessage(); |
| | | } |
| | | return sr; |
| | | } |
| | | |
| | | private STAFResult handleCompare(STAFServiceInterfaceLevel30.RequestInfo info) { |
| | | STAFResult sr = new STAFResult(0); |
| | | |
| | | //parse the input request |
| | | STAFCommandParseResult parsedRequest = fCompareParser.parse(info.request); |
| | | STAFCommandParseResult parsedRequest = fParser.parse(info.request); |
| | | if (parsedRequest.rc != STAFResult.Ok) { |
| | | return new STAFResult(STAFResult.InvalidRequestString, |
| | | parsedRequest.errorBuffer); |
| | |
| | | erl.add(expectedContent.toString()); |
| | | expectedBufferReader.close(); |
| | | if (rl.size() != erl.size()) { |
| | | sr.rc = kDSMLInvalidSomething+3;//TODO |
| | | sr.rc = kDSMLInvalidSomething + 3; |
| | | sr.result = "number of results " + |
| | | resultFile + "[" + rl.size() + "]" + |
| | | expectedFile + "[" + erl.size() + "]"; |
| | |
| | | boolean identical = true; |
| | | for (int i = 0; i < rl.size(); i++) { |
| | | //starting from 1, because the first is always empty |
| | | /*PIERRE choose this one or below |
| | | identical &= compareResults("HTTP" + erl.get(i), |
| | | "HTTP" + rl.get(i)); |
| | | * */ |
| | | identical &= compareResults((String) erl.get(i), (String) rl.get(i)); |
| | | logger.log(STAFLog.Warning, "comparing\n"+(String)erl.get(i)+"\nwith\n"+ (String)rl.get(i)); |
| | | if (identical) { |
| | |
| | | } |
| | | } |
| | | } catch (FileNotFoundException fnfe) { |
| | | sr.rc = kDSMLInvalidSomething+5;//TODO |
| | | sr.rc = kDSMLInvalidSomething + 5; |
| | | sr.result = fnfe.getMessage(); |
| | | } catch (IOException ioe) { |
| | | sr.rc = kDSMLInvalidSomething+6;//TODO |
| | | sr.rc = kDSMLInvalidSomething + 6; |
| | | sr.result = ioe.getMessage(); |
| | | } catch (Exception e) { |
| | | sr.rc = kDSMLInvalidSomething+7;//TODO |
| | | sr.rc = kDSMLInvalidSomething + 7; |
| | | sr.result = e.getMessage(); |
| | | } |
| | | } |
| | |
| | | "DSML Service Help :" + fLineSep + fLineSep + OP_COMPARE + "(" + |
| | | OP_EXP_FILE + " filename " + OP_FILE + " filename " + " | " + |
| | | OP_EXP_DIR + " dirname " + OP_DIR + " dirname )" + |
| | | fLineSep + OP_CHECK_ERROR_STRINGS + " " + OP_FILE + " filename " + |
| | | fLineSep + OP_HELP); |
| | | } |
| | | |
| | | |
| | | // Register error codes for the STAX Service with the HELP service |
| | | private void registerHelpData(int errorNumber, String info, |
| | | String description) { |