f.mkdirs();
}
StringBuffer sb = new StringBuffer();
String line = null;
TelnetMessage telnetMessage = null;
BufferedReader reader = arg0.getReader();
while ((line = reader.readLine()) != null)
sb.append(line);
String decodeMessage = URLDecoder.decode(sb.toString(), "UTF-8");
XStream xStream = new XStream(new DomDriver());
xStream.alias("TelnetMessage", TelnetMessage.class);
xStream.alias("TelnetCommand", TelnetCommand.class);
telnetMessage = (TelnetMessage) xStream.fromXML(decodeMessage);
String instanceId = telnetMessage.getInstanceId();
String eventParentDivName = telnetMessage.getEventParentDivName();
String eventDivName = telnetMessage.getEventDivName();
if (!UEngineUtil.isNotEmpty(instanceId)) {
ProcessManagerFactoryBean processManagerFactory = new ProcessManagerFactoryBean();
ProcessManagerRemote pm = null;
InitialContext context = null;
UserTransaction tx = null;
try {
context = new InitialContext();
tx = (GlobalContext.useManagedTransaction ? (UserTransaction) context.lookup(GlobalContext.USERTRANSACTION_JNDI_NAME) : null);
} catch (NamingException e2) {
e2.printStackTrace();
}
try {
pm = processManagerFactory.getProcessManager();
if (tx != null)
tx.begin();
String processDefinition = telnetMessage.getProcessDefinition();
String endpoint = telnetMessage.getEndpoint();
RoleMapping loggedRoleMapping = RoleMapping.create();
loggedRoleMapping.setEndpoint(endpoint);
// ActivityReference initiatorHumanActivityReference = pm.getInitiatorHumanActivityReference(processDefinition);
// String initiatorDefVerId = initiatorHumanActivityReference.getActivity().getProcessDefinition().getId();
String fantomInstanceId = pm.initialize(processDefinition, null, loggedRoleMapping);
// ProcessInstance piRemote = pm.getProcessInstance(fantomInstanceId);
pm.executeProcess(fantomInstanceId);
pm.applyChanges();
instanceId = fantomInstanceId;
if (tx != null && tx.getStatus() != Status.STATUS_NO_TRANSACTION)
tx.commit();
} catch (Exception e) {
try {
pm.cancelChanges();
} catch (Exception ex) {
}
try {
if (tx != null && tx.getStatus() != Status.STATUS_NO_TRANSACTION)
tx.rollback();
} catch (IllegalStateException e1) {
e1.printStackTrace();
} catch (SecurityException e1) {
e1.printStackTrace();
} catch (SystemException e1) {
e1.printStackTrace();
}
} finally {
try {
pm.remove();
} catch (Exception e) {
}
}
}
if (telnetMessage != null) {
TelnetNormalModule tc = new TelnetNormalModule();
tc.setHost(telnetMessage.getHostName(), telnetMessage.getPort());
tc.setSessionTimeout(telnetMessage.getSessionTimeout());
if (telnetMessage.getTelnetCommand() != null) {
String[] waitFor = new String[telnetMessage.getTelnetCommand().size()];
String[] command = new String[telnetMessage.getTelnetCommand().size()];
long[] timeout = new long[telnetMessage.getTelnetCommand().size()+1];
timeout[0] = 5000;
String serverType = telnetMessage.getServerType();
for (int i = 0; i < telnetMessage.getTelnetCommand().size(); i++) {
TelnetCommand telnetCommand = telnetMessage.getTelnetCommand().get(i);
waitFor[i] = telnetCommand.getWaitFor();
command[i] = telnetCommand.getCommand();
timeout[i+1] = telnetCommand.getTimeout();
}
// String echo = telnetMessage.getIsEcho();
// boolean isEcho = false;
// if ("true".equals(echo) || "".equals(echo) || echo == null) {
// isEcho = true;
// }
tc.setWaitFor(waitFor);
tc.setCommand(command);
tc.setTimeout(timeout);
// tc.setEcho(isEcho);
tc.setServerType(serverType);
tc.start();
String resultStr = tc.getTotalResultString();
PrintWriter out = arg1.getWriter();
arg1.setContentType("text/xml");
arg1.setHeader("Cache-Control", "no-cache");
// Test 용 코드
// out.println("<?xml version='1.0' encoding='UTF-8' ?>");
// out.println("<TelnetResponseMessage>");
// out.println("<error>none</error>");
// out.println("<totalResult>xxxx"+URLEncoder.encode("한글 + 토탈 결과 !@#$%^&*()_+|-=\\`~,./".replace(" ", "%20"), "UTF-8")+"</totalResult>");
// BufferedWriter bw = new BufferedWriter(new FileWriter(TEMP_DIRECTORY + File.separatorChar + instanceId + "."
// + telnetMessage.getTracingTag() + "." + eventParentDivName + "." + eventDivName + ".totalResult.log"));
// bw.write("한글 + 토탈 결과 !@#$%^&*()_+|-=\\`~,./");
// bw.close();
// out.println("<instanceId>" + instanceId + "</instanceId>");
// out.println("<results>");
// for (int i = 0; i < waitFor.length; i++) {
// out.println("<result>yyyy" + (i + 1) +URLEncoder.encode(" abcdefghijklmnopqrstuvwxyz결과 !@#$%^&*()_+|-=\\`~,./".replace(" ", "%20"), "UTF-8")+ "</result>");
// bw = new BufferedWriter(new FileWriter(TEMP_DIRECTORY + File.separatorChar + instanceId + "."
// + telnetMessage.getTracingTag() + "." + eventParentDivName + "." + eventDivName + "." + i + "."
// + URLEncoder.encode(waitFor[i], "UTF-8") + ".log"));
// bw.write("yyyy" + (i + 1) +" abcdefghijklmnopqrstuvwxyz결과 !@#$%^&*()_+|-=\\`~,./");
// bw.close();
// }
// out.println("</results>");
// out.println("</TelnetResponseMessage>");
// out.close();
BufferedWriter bw = null;
out.println("<?xml version='1.0' encoding='UTF-8' ?>");
out.println("<TelnetResponseMessage>");
if (resultStr.length() < 1) {
out.println("<error>Login Error</error>");
out.println("<instanceId>" + instanceId + "</instanceId>");
} else {
if (tc.isTimeoutExit() == true) {
out.println("<error>TimeOut</error>");
} else {
if (tc.getErrorLog().size() != 0) {
StringBuffer errorLog = new StringBuffer();
for (int i = 0; i < tc.getErrorLog().size(); i++) {
errorLog.append((String) tc.getErrorLog().get(i));
}
out.println("<error>" + errorLog.toString() + "</error>");
} else {
out.println("<error>none</error>");
}
}
out.println("<instanceId>" + instanceId + "</instanceId>");
out.println("<totalResult>" + URLEncoder.encode(resultStr.replace(" ", "%20"), "UTF-8") + "</totalResult>");
if (UEngineUtil.isNotEmpty(resultStr)) {
bw = new BufferedWriter(new FileWriter(TEMP_DIRECTORY + File.separatorChar + instanceId + "."
+ telnetMessage.getTracingTag() + "." + eventParentDivName + "." + eventDivName + ".totalResult.log"));
bw.write(resultStr);
bw.close();
}
out.println("<results>");
for (int i = 0; i < tc.getResultStringList().size(); i++) {
String result = (String) tc.getResultStringList().get(i);
if (result.lastIndexOf("\r\n") != -1) {
result = result.substring(0, result.lastIndexOf("\r\n"));
} else if (result.lastIndexOf("\n") != -1) {
result = result.substring(0, result.lastIndexOf("\n"));
}
result = result.replace(" ", "");
out.println("<result>" + URLEncoder.encode(result.replace(" ", "%20"), "UTF-8") + "</result>");
if (UEngineUtil.isNotEmpty(result)) {
bw = new BufferedWriter(new FileWriter(TEMP_DIRECTORY + File.separatorChar + instanceId + "."
+ telnetMessage.getTracingTag() + "." + eventParentDivName + "." + eventDivName + "." + i + "."
+ URLEncoder.encode(waitFor[i], "UTF-8") + ".log"));
bw.write(result);
bw.close();
}
}