1 /*****************************************************************************/ 2 /* Software Testing Automation Framework (STAF) */ 3 /* (C) Copyright IBM Corp. 2002 */ 4 /* */ 5 /* This software is licensed under the Eclipse Public License (EPL) V1.0. */ 6 /*****************************************************************************/ 7 8 package com.ibm.staf.service.stax; 9 import com.ibm.staf.*; 10 import java.util.HashMap; 11 12 public class STAXMessageAction extends STAXActionDefaultImpl 13 { STAXMessageAction()14 public STAXMessageAction() 15 { /* Do Nothing */ } 16 STAXMessageAction(String messageValue)17 public STAXMessageAction(String messageValue) 18 { 19 fUnevalMessageValue = messageValue; 20 fMessageValue = messageValue; 21 } 22 STAXMessageAction(String messageValue, String logAttr, String level, String ifAttr)23 public STAXMessageAction(String messageValue, String logAttr, String level, 24 String ifAttr) 25 { 26 fUnevalMessageValue = messageValue; 27 fMessageValue = messageValue; 28 fUnevalLogAttr = logAttr; 29 fUnevalLevel = level; 30 fLevel = level; 31 fUnevalIf = ifAttr; 32 } 33 getMessageValue()34 public String getMessageValue() { return fMessageValue; } 35 setMessageValue(String messageValue)36 public void setMessageValue(String messageValue) 37 { 38 fUnevalMessageValue = messageValue; 39 fMessageValue = messageValue; 40 } 41 getLogAttr()42 public boolean getLogAttr() { return fLogAttr; } setLogAttr(String logAttr)43 public void setLogAttr(String logAttr) 44 { 45 fUnevalLogAttr = logAttr; 46 } 47 getLevel()48 public String getLevel() { return fLevel; } setLevel(String level)49 public void setLevel(String level) 50 { 51 fUnevalLevel = level; 52 fLevel = level; 53 } 54 getIf()55 public boolean getIf() { return fIf; } setIf(String ifValue)56 public void setIf(String ifValue) 57 { 58 fUnevalIf = ifValue; 59 } 60 getXMLInfo()61 public String getXMLInfo() 62 { 63 StringBuffer info = new StringBuffer("<message"); 64 65 if (!fUnevalLogAttr.equals("STAXLogMessage")) 66 info.append(" log=\"").append(fUnevalLogAttr).append("\""); 67 if (!fUnevalLevel.equals("'info'")) 68 info.append(" level=\"").append(fUnevalLevel).append("\""); 69 if (!fUnevalIf.equals("1")) 70 info.append(" if=\"").append(fUnevalIf).append("\""); 71 info.append(">").append(STAFUtil.maskPrivateData(fUnevalMessageValue)). 72 append("</message>"); 73 74 return info.toString(); 75 } 76 getInfo()77 public String getInfo() 78 { 79 String info = STAFUtil.maskPrivateData(fMessageValue); 80 81 int msgLength = info.length(); 82 83 if (msgLength > 40) 84 return info.substring(0, 40) + "..."; 85 else 86 return info; 87 } 88 getDetails()89 public String getDetails() 90 { 91 return "MessageValue:" + STAFUtil.maskPrivateData(fMessageValue) + 92 ";LogAttr:" + fLogAttr + 93 ";LogLevel:" + fLevel + 94 ";If: " + fIf; 95 } 96 execute(STAXThread thread)97 public void execute(STAXThread thread) 98 { 99 fThread = thread; 100 String evalElem = getElement(); 101 String evalAttr = "if"; 102 103 try 104 { 105 fIf = fThread.pyBoolEval(fUnevalIf); 106 107 if (!fIf) 108 { // Ignore message element if "if" attribute evaluates to FALSE 109 fThread.popAction(); 110 return; 111 } 112 113 evalAttr = STAXElementInfo.NO_ATTRIBUTE_NAME; 114 fMessageValue = fThread.pyStringEval(fUnevalMessageValue); 115 116 evalAttr = "log"; 117 fLogAttr = fThread.pyBoolEval(fUnevalLogAttr); 118 119 evalAttr = "level"; 120 fLevel = fThread.pyStringEval(fUnevalLevel); 121 } 122 catch (STAXPythonEvaluationException e) 123 { 124 fThread.popAction(); 125 126 setElementInfo(new STAXElementInfo(evalElem, evalAttr)); 127 128 fThread.setSignalMsgVar( 129 "STAXPythonEvalMsg", STAXUtil.formatErrorMessage(this), e); 130 131 fThread.raiseSignal("STAXPythonEvaluationError"); 132 return; 133 } 134 135 // Send a message to the STAXMonitor (via an event) 136 137 STAXTimestamp timestamp = new STAXTimestamp(); 138 139 HashMap<String, String> messageMap = new HashMap<String, String>(); 140 messageMap.put("messagetext", timestamp.getTimestampString() + 141 " " + STAFUtil.maskPrivateData(fMessageValue)); 142 143 fThread.getJob().generateEvent( 144 STAXMessageActionFactory.STAX_MESSAGE, messageMap); 145 146 if (fLogAttr) 147 { 148 // Log the message in the STAX Job User log 149 150 STAFResult result = fThread.getJob().log( 151 STAXJob.USER_JOB_LOG, fLevel, fMessageValue); 152 153 if ((result.rc == 4004) && 154 (fThread.getJob().getInvalidLogLevelAction() == 155 STAXLogAction.LOGINFO)) 156 { 157 // Invalid log level. Log using "Info" for the log level. 158 result = fThread.getJob().log( 159 STAXJob.USER_JOB_LOG, "Info", fMessageValue); 160 } 161 162 if ((result.rc != STAFResult.Ok) && 163 (result.rc != STAFResult.UnknownService)) 164 { 165 fThread.popAction(); 166 167 String msg = "Request to LOG service to log to the STAX " + 168 "Job User log failed with RC: " + result.rc + 169 " Result: " + result.result; 170 171 if (result.rc == 4004) 172 msg += "\n\nInvalid log level: " + fLevel; 173 else 174 msg += "\n\nLevel: " + fLevel + 175 " Message: " + fMessageValue; 176 177 setElementInfo(new STAXElementInfo( 178 evalElem, STAXElementInfo.NO_ATTRIBUTE_NAME, msg)); 179 180 fThread.setSignalMsgVar( 181 "STAXLogMsg", STAXUtil.formatErrorMessage(this)); 182 183 fThread.raiseSignal("STAXLogError"); 184 185 return; 186 } 187 } 188 189 fThread.popAction(); 190 } 191 handleCondition(STAXThread thread, STAXCondition cond)192 public void handleCondition(STAXThread thread, STAXCondition cond) 193 { 194 thread.popAction(); 195 } 196 cloneAction()197 public STAXAction cloneAction() 198 { 199 STAXMessageAction clone = new STAXMessageAction(); 200 201 clone.setElement(getElement()); 202 clone.setLineNumberMap(getLineNumberMap()); 203 clone.setXmlFile(getXmlFile()); 204 clone.setXmlMachine(getXmlMachine()); 205 206 clone.fUnevalMessageValue = fUnevalMessageValue; 207 clone.fMessageValue = fMessageValue; 208 clone.fUnevalLogAttr = fUnevalLogAttr; 209 clone.fLogAttr = fLogAttr; 210 clone.fUnevalLevel = fUnevalLevel; 211 clone.fLevel = fLevel; 212 clone.fUnevalIf = fUnevalIf; 213 clone.fIf = fIf; 214 215 return clone; 216 } 217 218 private STAXThread fThread = null; 219 private String fUnevalMessageValue = new String(); 220 private String fUnevalLogAttr = "STAXLogMessage"; 221 private String fUnevalLevel = new String("'info'"); 222 private String fUnevalIf = "1"; 223 224 private String fMessageValue = new String(); 225 private boolean fLogAttr = false; 226 private String fLevel = new String(); 227 private boolean fIf = true; 228 } 229