package org.joget.designer.jped;
import org.joget.designer.Designer;
import java.awt.event.ActionEvent;
import java.io.File;
import java.io.IOException;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.swing.JOptionPane;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.methods.multipart.FilePart;
import org.apache.commons.httpclient.methods.multipart.MultipartRequestEntity;
import org.apache.commons.httpclient.methods.multipart.Part;
import org.apache.commons.httpclient.methods.multipart.StringPart;
import org.enhydra.jawe.ActionBase;
import org.enhydra.jawe.JaWEComponent;
import org.enhydra.jawe.JaWEManager;
import org.enhydra.jawe.ResourceManager;
import org.enhydra.jawe.base.controller.JaWEController;
import org.enhydra.jawe.base.xpdlvalidator.ValidationError;
import org.enhydra.shark.xpdl.elements.Package;
public class Deploy extends ActionBase {
private String myName;
public Deploy(JaWEComponent jawecomponent) {
super(jawecomponent);
}
public Deploy(JaWEComponent jawecomponent, String name) {
super(jawecomponent, name);
this.myName = name;
}
@Override
public void enableDisableAction() {
setEnabled(Designer.DEPLOY);
}
public void actionPerformed(ActionEvent e) {
JaWEController jc = (JaWEController) jawecomponent;
int deployStatus = JOptionPane.showConfirmDialog(null, ResourceManager.getLanguageDependentString("DeployConfirm"));
if (deployStatus == JOptionPane.YES_OPTION) {
if (checkValidity(jc)) {
HttpClient httpClient = new HttpClient();
String url = Designer.URLPATH + "/web/json/workflow/package/deploy?j_username=" + Designer.USERNAME + "&hash=" + Designer.HASH;
PostMethod post = new PostMethod(url);
try {
File file = saveTempFile();
Part[] parts = {
new StringPart("param_name", "value"),
new FilePart("packageXpdl", file)
};
post.setRequestEntity(new MultipartRequestEntity(parts, post.getParams()));
httpClient.executeMethod(post);
String jsonString = post.getResponseBodyAsString();
Pattern pattern = Pattern.compile("\"([^\"]{2,})\":\"([^\"]{2,})\"");
Matcher matcher = pattern.matcher(jsonString);
while (matcher.find()) {
if(matcher.group(1).equals("status") && matcher.group(2).equals("complete")){
JOptionPane.showMessageDialog(null, ResourceManager.getLanguageDependentString("DeploySuccessful"));
System.exit(0);
}else if(matcher.group(1).equals("errorMsg")){
JOptionPane.showMessageDialog(null, matcher.group(2));
}
}
file.delete();
} catch (Exception ex) {
ex.printStackTrace();
JOptionPane.showMessageDialog(null, ex.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
}
} else {
JOptionPane.showMessageDialog(null, ResourceManager.getLanguageDependentString("DeployInvalidXpdl"), "Error", JOptionPane.ERROR_MESSAGE);
}
}
}
protected boolean checkValidity(JaWEController jc) {
boolean checkValidity = true;
List checkValidityList = jc.checkValidity(jc.getMainPackage(), true);
for (int i = 0; i < checkValidityList.size(); i++) {
Object obj = checkValidityList.get(i);
if (obj instanceof String) {
String error = (String) obj;
if (!error.equals(ResourceManager.getLanguageDependentString("ERROR_NO_ERROR"))) {
checkValidity = false;
}
} else {
ValidationError error = (ValidationError) obj;
if (!"WARNING".equals(error.getType())) {
checkValidity = false;
}
}
}
return checkValidity;
}
public File saveTempFile() throws IOException {
JaWEController jc = JaWEManager.getInstance().getJaWEController();
Package pkg = jc.getMainPackage();
File file = File.createTempFile("wfxpdl", null);
jc.savePackage(pkg.getId(), file.getAbsolutePath());
return file;
}
}