String name = named.getValue();
String fieldName = conversationFieldName.getValue();
String beginName = beginMethodName.getValue();
String endName = endMethodName.getValue();
Boolean overwriteValue = overwrite.getValue();
UIOutput output = uiContext.getProvider().getOutput();
if (resource.exists())
{
if (resource.getJavaSource().isClass())
{
JavaClass javaClass = (JavaClass) resource.getJavaSource();
if (javaClass.hasField(fieldName) && !javaClass.getField(fieldName).isType(Conversation.class))
{
if (overwriteValue)
{
javaClass.removeField(javaClass.getField(fieldName));
}
else
{
return Results.fail("Field [" + fieldName + "] already exists.");
}
}
if (javaClass.hasMethodSignature(beginName)
&& (javaClass.getMethod(beginName).getParameters().size() == 0))
{
if (overwriteValue)
{
javaClass.removeMethod(javaClass.getMethod(beginName));
}
else
{
return Results.fail("Method [" + beginName + "] exists.");
}
}
if (javaClass.hasMethodSignature(endName) && (javaClass.getMethod(endName).getParameters().size() == 0))
{
if (overwriteValue)
{
javaClass.removeMethod(javaClass.getMethod(endName));
}
else
{
return Results.fail("Method [" + endName + "] exists.");
}
}
javaClass.addField().setPrivate().setName(fieldName).setType(Conversation.class)
.addAnnotation(Inject.class);
Method<JavaClass> beginMethod = javaClass.addMethod().setName(beginName).setReturnTypeVoid().setPublic();
if (Strings.isNullOrEmpty(name))
{
beginMethod.setBody(fieldName + ".begin();");
}
else
{
beginMethod.setBody(fieldName + ".begin(\"" + name + "\");");
}
if (timeout.getValue() != null)
{
beginMethod.setBody(beginMethod.getBody() + "\n" + fieldName + ".setTimeout(" + timeout + ");");
}
javaClass.addMethod().setName(endName).setReturnTypeVoid().setPublic()
.setBody(fieldName + ".end();");
if (javaClass.hasSyntaxErrors())
{
output.err().println("Modified Java class contains syntax errors:");
for (SyntaxError error : javaClass.getSyntaxErrors())
{
output.err().print(error.getDescription());
}
}
resource.setContents(javaClass);
}