The GetMyWeather sample illustrates a typical custom-state implementation. This type of state is called a service state, because its function is to call a specific Web service (in this case a weather service), and store the results for the application to use. This type of state is commonly integrated with enterprise systems.
public class GetMyWeather extends SmappStatePlugin {
private static final Logger LOG =
LoggerFactory.getLogger(GetMyWeather.class);
// Define Input attributes
private static final TextBoxAttribute inPostCode =
new TextBoxAttribute("POSTCODE", "Zip or Postal Code", false);
// Define Output attributes
private static final OutputAttribute outWeather =
new OutputAttribute("WEATHER", "Your Weather Synopsis");
private static Attribute[] stateAttr;
static {
stateAttr = new Attribute[] {inPostCode, outWeather};
}
private static long STATE_ID = 600000L;
@Override
public long getStateId() {
return STATE_ID;
}
@Override
public String getStateName() {
return "Example - Get My Weather";
}
@Override
public String getRevisionString() {
return "1.0.0";
}
@Override
public String getStateNotes() {
StringBuilder sb = new StringBuilder();
sb.append("A sample state. When executed, it checks for a ");
sb.append("Postal/ZIP Code, and returns the weather report for ");
sb.append(" that area.\n\n Use the following follow up states:\n ");
sb.append("- OK: Weather report for the area was found\n ");
sb.append("- FAIL: Unexpected error\n ");
sb.append("- Dyn -1: Area code entered was not valid\n ");
sb.append("- Dyn -2: No weather report for the area\n ");
return sb.toString();
}
@Override
public boolean supportsFailTransition() {
return true;
}
@Override
protected Attribute[] getStateAttributes() {
return stateAttr.clone();
}
@Override
protected SmappState processStateLogic(
SmappStateProcessingContext context,
SmappStateProcessingAction action)
throws MwizProcessingException, DBException {
WeatherResult result = null;
try {
// Call the weather Web service
// Details are Web service specific and therefore
// are encapsulated in the callWeatherService method
result = callWeatherService();
if (result == null)
return continueFail();
if (result.status == -1)
return continueDyn(-1);
if (result.status == -2)
return continueDyn(-2);
// Output attribute
outWeather.setValue(result.text);
return continueOk();
}
catch (DBException dbex) {
// Database exception can occur while saving session attributes
LOG.error("error");
return continueFail();
}
}
}