This example demonstrates how to answer a nested object prompt consisting of any number of element prompts and value prompts. This code can be structured to answer any number of prompts of any type.
The following workflow is used in the code below:
Quick Tips for Programmatically Answering Prompts
package com.Strategy.sdk.examples.standalone;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintStream;
import com.Strategy.sdk.utils.SessionUtil;
import com.Strategy.web.app.WebAppRuntimeException;
import com.Strategy.web.app.beans.EnumWebStateLevel;
import com.Strategy.web.app.tasks.architect.json.JSONException;
import com.Strategy.web.app.tasks.architect.json.XML;
import com.Strategy.web.beans.BeanFactory;
import com.Strategy.web.beans.EnumRequestStatus;
import com.Strategy.web.beans.RWBean;
import com.Strategy.web.beans.ReportBean;
import com.Strategy.web.beans.WebBeanException;
import com.Strategy.web.objects.EnumWebPromptType;
import com.Strategy.web.objects.WebConstantPrompt;
import com.Strategy.web.objects.WebElementSource;
import com.Strategy.web.objects.WebElements;
import com.Strategy.web.objects.WebElementsPrompt;
import com.Strategy.web.objects.WebFolder;
import com.Strategy.web.objects.WebObjectInfo;
import com.Strategy.web.objects.WebObjectsException;
import com.Strategy.web.objects.WebObjectsFactory;
import com.Strategy.web.objects.WebObjectsPrompt;
import com.Strategy.web.objects.WebPrompt;
import com.Strategy.web.objects.WebPrompts;
public class AnswerNestedPromptsStandalone {
public static final String REPORT_ID = "DFD6FF1A40A62212FC8889BB6EC7E336";
public static final String DOC_ID = "C2EBF7794605BC1F25350E82ECB895D9";
private static final String OBJ_PROMPT_ID = "8879FB6542BEA042F503A4892F2D890E";
private static final boolean DEBUG_MODE = true;
private static final String OUTPUT_FILENAME = "C:\\results.txt";
public static void main(String[] args) {
out("Method Call: main");
ReportBean rb = (ReportBean) BeanFactory.getInstance().newBean("ReportBean");
rb.setSessionInfo(SessionUtil.getSession());
rb.setObjectID(REPORT_ID);
rb.setDefaultStateLevel(EnumWebStateLevel.TYPICAL_STATE_INFO);
RWBean rwb = (RWBean) BeanFactory.getInstance().newBean("RWBean");
rwb.setSessionInfo(SessionUtil.getSession());
rwb.setObjectID(DOC_ID);
rwb.setDefaultStateLevel(EnumWebStateLevel.TYPICAL_STATE_INFO);
String results = "", error = "";
try {
if (rb != null) {
rb.collectData();
while (rb.getXMLStatus() == EnumRequestStatus.WebBeanRequestWaitingForUserInput)
answerPrompts(rb);
results += rb.getReportInstance().getResultsAsXML();
}
if (rwb != null) {
rwb.collectData();
while (rwb.getXMLStatus() == EnumRequestStatus.WebBeanRequestWaitingForUserInput)
answerPrompts(rwb);
results += rwb.getRWInstance().getResultsAsXML();
}
out(XML.toJSONObject(results).toString(1), OUTPUT_FILENAME);
} catch (WebBeanException ex1) {
error += "No Results";
throw new WebAppRuntimeException(ex1);
} catch (WebObjectsException ex2) {
error += "No Results";
throw new WebAppRuntimeException(ex2);
} catch (JSONException e) {
error += "JSON error";
e.printStackTrace();
} finally {
out(error);
SessionUtil.closeSession();
}
}
private static void answerPrompts(ReportBean rb) throws WebBeanException, WebObjectsException {
out("\nMethod Call: answerPrompts (ReportBean)");
WebPrompts prompts = rb.getReportInstance().getPrompts();
int index = 0;
while (index < prompts.size()) {
WebPrompt prompt = prompts.get(index);
if (prompt == null) continue;
if (!prompt.isClosed()) {
switch (prompt.getPromptType()) {
case EnumWebPromptType.WebPromptTypeObjects:
WebObjectsPrompt wop = (WebObjectsPrompt) prompt;
answerObjectPrompt(wop);
break;
case EnumWebPromptType.WebPromptTypeElements:
WebElementsPrompt welp = (WebElementsPrompt) prompt;
answerElementPrompt(welp);
break;
case EnumWebPromptType.WebPromptTypeConstant:
WebConstantPrompt wcp = (WebConstantPrompt) prompt;
answerConstantPrompt(wcp);
break;
}
}
index++;
}
prompts.validate();
prompts.answerPrompts();
rb.collectData();
}
private static void answerPrompts(RWBean rwb) throws WebBeanException, WebObjectsException {
out("\nMethod Call: answerPrompts (RWBean)");
WebPrompts prompts = rwb.getRWInstance().getPrompts();
int index = 0;
while (index < prompts.size()) {
WebPrompt prompt = prompts.get(index);
if (prompt == null) continue;
if (!prompt.isClosed()) {
switch (prompt.getPromptType()) {
case EnumWebPromptType.WebPromptTypeObjects:
WebObjectsPrompt wop = (WebObjectsPrompt) prompt;
answerObjectPrompt(wop);
break;
case EnumWebPromptType.WebPromptTypeElements:
WebElementsPrompt welp = (WebElementsPrompt) prompt;
answerElementPrompt(welp);
break;
case EnumWebPromptType.WebPromptTypeConstant:
WebConstantPrompt wcp = (WebConstantPrompt) prompt;
answerConstantPrompt(wcp);
break;
}
}
index++;
}
prompts.validate();
prompts.answerPrompts();
rwb.collectData();
}
private static void answerConstantPrompt(WebConstantPrompt prompt) throws WebObjectsException, IllegalArgumentException {
out("\nMethod Call: answerConstantPrompt");
if (prompt.getName().equals("Start Date")) {
prompt.setAnswer("07/09/2012");
}
if (prompt.getName().equals("End Date")) {
prompt.setAnswer("07/12/2012");
}
}
private static void answerObjectPrompt(WebObjectsPrompt prompt) throws WebObjectsException, IllegalArgumentException {
out("\nMethod Call: answerObjectPrompt");
WebFolder defaultWebFolder = prompt.getAnswer();
defaultWebFolder.clear();
WebObjectInfo object = WebObjectsFactory.getInstance().getObjectSource().getObject(OBJ_PROMPT_ID, 1);
prompt.getAnswer().add(object);
return;
}
private static void answerElementPrompt(WebElementsPrompt prompt) throws WebObjectsException {
out("\nMethod Call: answerElementPrompt");
WebElementSource eltsrc=prompt.getOrigin().getElementSource();
WebElements elements = eltSrc.getElements();
WebElements we = prompt.getAnswer();
for (int e = 0; e < elements.size(); e++) {
String originName = prompt.getOrigin().getName();
String elemName = elements.get(e).getDisplayName();
out("originName: " + originName + "; elemName: " + elemName);
if (originName.equals("Year") && elemName.equals("2012")) {
we.add(elements.get(e).getElementID());
break;
}
if (originName.equals("Quarter") && elemName.equals("2012 Q3")) {
we.add(elements.get(e).getElementID());
break;
}
if (originName.equals("Category") && elemName.equals("Books")) {
we.add(elements.get(e).getElementID());
break;
}
if (originName.equals("Country") && elemName.equals("USA")) {
we.add(elements.get(e).getElementID());
break;
}
if (originName.equals("Subcategory") && elemName.equals("Science & Technology")) {
we.add(elements.get(e).getElementID());
break;
}
if (originName.equals("Quarter") && elemName.equals("2012 Q3")) {
we.add(elements.get(e).getElementID());
break;
}
if (originName.equals("Region") && elemName.equals("Central")) {
we.add(elements.get(e).getElementID());
break;
}
if (originName.equals("Quarter") && elemName.equals("2012 Q3")) {
we.add(elements.get(e).getElementID());
break;
}
if (originName.equals("Month") && elemName.equals("Jul 2012")) {
we.add(elements.get(e).getElementID());
break;
}
if (originName.equals("Item") && elemName.equals("Nanotechnology")) {
we.add(elements.get(e).getElementID());
break;
}
if (originName.equals("Call Center") && elemName.equals("Fargo")) {
we.add(elements.get(e).getElementID());
break;
}
if (originName.equals("Day") && (elemName.equals("7/9/2012"))) {
we.add(elements.get(e).getElementID());
continue;
}
if (originName.equals("Day") && (elemName.equals("7/12/2012"))) {
we.add(elements.get(e).getElementID());
break;
}
}
prompt.setAnswer(we);
return;
}
private static void out(String message) {
if (DEBUG_MODE) System.out.println(message);
}
private static void out(String message, String filename) {
PrintStream out = null;
try {
out = new PrintStream(new FileOutputStream(filename));
out.print(message);
out("\nFile output successful");
} catch (IOException e) {
out("\nError: could not write to the file");
} finally {
if (out != null) out.close();
}
}
}