package org.joget.designer.jped;
import java.io.InputStream;
import java.net.URL;
import org.enhydra.jawe.base.xpdlhandler.XPDLHandlerSettings;
import org.jped.base.xpdlhandler.PluggableXPDLHandler;
import org.enhydra.shark.xpdl.elements.Package;
public class CustomXPDLHandler extends PluggableXPDLHandler {
public CustomXPDLHandler() {
super();
}
public CustomXPDLHandler(XPDLHandlerSettings settings) throws Exception {
super(settings);
}
@Override
public Package openPackage(String pkgReference, boolean handleExternalPackages) {
if (pkgReference != null && pkgReference.startsWith("http")) {
// open XPDL from URL
InputStream in = null;
byte[] bytes = null;
Package pkg = null;
try {
try {
// read from URL
URL url = new URL(pkgReference);
in = url.openStream();
byte[] buffer = new byte[4096];
String contents = "";
int length;
while ((length = in.read(buffer, 0, buffer.length)) > 0) {
contents += new String(buffer, 0, length, "UTF-8");
}
bytes = contents.getBytes("UTF-8");
} finally {
if (in != null) {
try {
in.close();
} catch (Exception ie) {
}
}
}
// open package
if (bytes != null) {
pkg = super.openPackageFromStream(bytes, true);
return pkg;
}
} catch (Exception e) {
throw new RuntimeException("Unable to open URL " + pkgReference, e);
} finally {
return pkg;
}
} else {
return super.openPackage(pkgReference, handleExternalPackages);
}
}
}