package com.processpuzzle.applet.control; import java.applet.Applet; import java.awt.Button; import java.awt.GridLayout; import java.awt.HeadlessException; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.io.UnsupportedEncodingException; import java.net.HttpURLConnection; import java.net.URL; import java.net.URLDecoder; import java.util.ArrayList; import org.w3c.dom.NodeList; import org.w3c.dom.html.HTMLDocument; import org.w3c.dom.html.HTMLElement; import org.w3c.dom.html.HTMLImageElement; import org.w3c.dom.html.HTMLInputElement; import org.w3c.dom.html.HTMLTableCellElement; import com.sun.java.browser.dom.DOMAccessException; import com.sun.java.browser.dom.DOMAccessor; import com.sun.java.browser.dom.DOMAction; import com.sun.java.browser.dom.DOMService; import com.sun.java.browser.dom.DOMUnsupportedException; public class ReleaseApplet extends Applet { public class MyDOMAction implements DOMAction { private ArrayList<HTMLInputElement> selectedCheckBoxes = null; private ArrayList<HTMLImageElement> images = null; private ArrayList<HTMLInputElement> messages = null; private ArrayList<HTMLTableCellElement> modifierCells = null; private HTMLDocument document = null; private HTMLInputElement stepButton; private HTMLInputElement resetButton; private HTMLInputElement stepInterval; private HTMLInputElement showHideButton; private HTMLInputElement imgSelectorButton; private HTMLInputElement imgSelector; private HTMLInputElement resetPageButton; private HTMLElement infoLine; public Object run(DOMAccessor accessor) { document = (HTMLDocument) accessor.getDocument(ja); showHideButton = (HTMLInputElement) document.getElementsByName("showHideButton").item(0); stepButton = (HTMLInputElement) document.getElementsByName("stepButton").item(0); resetButton = (HTMLInputElement) document.getElementsByName("resetButton").item(0); stepInterval = (HTMLInputElement) document.getElementsByName("stepInterval").item(0); imgSelectorButton = (HTMLInputElement) document.getElementsByName("imageSelectorButton").item(0); imgSelector = (HTMLInputElement) document.getElementsByName("imageSelector").item(0); resetPageButton = (HTMLInputElement) document.getElementsByName("resetPageButton").item(0); infoLine = (HTMLElement) document.getElementById("infoLine"); NodeList checkBoxes = document.getElementsByName("artifactNames"); selectedCheckBoxes = new ArrayList<HTMLInputElement>(); images = new ArrayList<HTMLImageElement>(); messages = new ArrayList<HTMLInputElement>(); modifierCells = new ArrayList<HTMLTableCellElement>(); for (int i = 0; i < checkBoxes.getLength(); i++) { HTMLInputElement elem = (HTMLInputElement) checkBoxes.item(i); if (elem.getChecked()) { selectedCheckBoxes.add(elem); images.add((HTMLImageElement) document.getElementById("img" + elem.getValue())); messages.add((HTMLInputElement) document.getElementById("msg" + elem.getValue())); modifierCells.add((HTMLTableCellElement) document.getElementById("modifier" + elem.getValue())); } } return null; } public HTMLDocument getDocument() { return document; } public ArrayList<HTMLInputElement> getSelectedCheckBoxes() { return selectedCheckBoxes; } public HTMLInputElement getStepButton() { return stepButton; } public HTMLInputElement getResetButton() { return resetButton; } public HTMLInputElement getStepInterval() { return stepInterval; } public HTMLInputElement getShowHideButton() { return showHideButton; } public ArrayList<HTMLImageElement> getImages() { return images; } public ArrayList<HTMLInputElement> getMessages() { return messages; } public HTMLInputElement getImgSelector() { return imgSelector; } public HTMLInputElement getImgSelectorButton() { return imgSelectorButton; } public HTMLInputElement getResetPageButton() { return resetPageButton; } public HTMLElement getInfoLine() { return infoLine; } protected ArrayList<HTMLTableCellElement> getModifierCells() { return modifierCells; } }; private static final long serialVersionUID = 8566762977388286405L; private String message = ""; private Button okButton; private File file; private Applet ja = this; private MyDOMAction dAction; public ReleaseApplet() throws HeadlessException { super(); } public void init() { setLayout(new GridLayout(0, 1)); okButton = new Button(getParameter("buttonText")); okButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { sendFile(); } }); add(okButton); } private void sendFile() { URL url; String host = getCodeBase().getHost(); String protocol = getCodeBase().getProtocol(); int port = getCodeBase().getPort(); ArrayList<HTMLInputElement> selectedArtifactNames = getSelectedArtifactNames(); resetPage(); showHideProgressBar(); for (int i = 0; i < selectedArtifactNames.size(); i++) { String status = "ok"; HTMLInputElement element = selectedArtifactNames.get(i); HttpURLConnection con = null; String artifactName = element.getValue(); String fileName = element.getId(); message = ""; String parameters = "?action=ReleaseArtifact&method=canRelease&subjectArtifactName=" + artifactName; String urlSuffix = "/ADIBrowserInterface/CommandControllerServlet" + parameters; resetProgressBar(fileName); try { boolean l = true; url = new URL(protocol, host, port, urlSuffix); con = (HttpURLConnection) url.openConnection(); if ((fileName != null) && !(fileName.equals(""))) { file = new File(getParameter("location") + "\\" + fileName); if ((file == null) || !(file.exists())) { message = getParameter("missingFileMessage") + getParameter("location") + "\\" + fileName + ")."; setMessage(message, i, artifactName); l = false; } } if (l) { con = (HttpURLConnection) url.openConnection(); con.setDoInput(true); con.setDoOutput(true); con.setUseCaches(false); InputStream result = con.getInputStream(); byte buffer[] = new byte[1024]; int length; message = ""; while ((length = result.read(buffer)) != -1) { message += new String(buffer, 0, length); } con.disconnect(); if (message.length() == 3) { if ((fileName != null) && !(fileName.equals(""))) { parameters = "?action=ReleaseArtifact&method=release&subjectArtifactName=" + artifactName; urlSuffix = "/ADIBrowserInterface/CommandControllerServlet" + parameters; url = new URL(protocol, host, port, urlSuffix); con = (HttpURLConnection) url.openConnection(); con.setRequestProperty("Content-Type", "application/msword"); con.setRequestMethod("POST"); con.setDoOutput(true); con.setDoInput(true); con.setUseCaches(false); BufferedOutputStream out = new BufferedOutputStream(con.getOutputStream()); BufferedInputStream fr = new BufferedInputStream(new FileInputStream(file)); int blocks = 300; if ((file.length() / 1024 > 0) && (file.length() != 0)) { blocks = 300 / ((new Long(file.length()).intValue()) / 1024); } if (blocks <= 0) blocks = 1; setStepInterval(new Integer(blocks).toString()); int start = 0; length = 1024; int offset = -1; while ((offset = fr.read(buffer, start, length)) != -1) { out.write(buffer, start, offset); executeProgressBar(); } out.close(); con.getInputStream(); fr.close(); con.disconnect(); message = (new Long(file.length())).toString(); } else message = ""; parameters = "?action=ReleaseArtifact&method=released&subjectArtifactName=" + artifactName + "&status=" + status + "&fileSize=" + message; urlSuffix = "/ADIBrowserInterface/CommandControllerServlet" + parameters; url = new URL(protocol, host, port, urlSuffix); con = (HttpURLConnection) url.openConnection(); con.setRequestProperty("Content-Type", "text/plain"); con.setRequestMethod("POST"); con.setDoInput(true); con.setDoOutput(true); con.setUseCaches(false); result = con.getInputStream(); message = ""; while ((length = result.read(buffer)) != -1) { message += new String(buffer, 0, length); } con.disconnect(); message = URLDecoder.decode(message, "UTF-8"); } } } catch (IOException e) { if (con != null) con.disconnect(); message = getParameter("ioErrorMessage"); } try { setMessage(URLDecoder.decode(message, "UTF-8"), i, artifactName); } catch (UnsupportedEncodingException e) {} if (message.length() == 3) { if ((file != null) && (file.exists())) { file.delete(); } } } showHideProgressBar(); } private void resetProgressBar(String fileName) { dAction.getResetButton().click(); dAction.getInfoLine().setAttribute("innerHTML", getParameter("buttonText") + ": " + fileName); } private void executeProgressBar() { dAction.getStepButton().click(); } private void setStepInterval(String step) { dAction.getStepInterval().setValue(step); } private void showHideProgressBar() { dAction.getShowHideButton().click(); } private void setMessage(String message, int index, String artifactName) { if (message.length() == 3) { dAction.getImages().get(index).setSrc("./images/icons/ok.JPG"); dAction.getMessages().get(index).setValue(getParameter("acceptedText")); dAction.getModifierCells().get(index).setAttribute("innerHTML", ""); } else { dAction.getImages().get(index).setSrc("./images/icons/error.JPG"); dAction.getMessages().get(index).setValue(message); } dAction.getImgSelector().setValue(artifactName); dAction.getImgSelectorButton().click(); } private ArrayList<HTMLInputElement> getSelectedArtifactNames() { dAction = new MyDOMAction(); try { DOMService service = DOMService.getService(this); service.invokeAndWait(dAction); } catch (DOMAccessException dae) { dae.printStackTrace(); } catch (DOMUnsupportedException use) { use.printStackTrace(); } return dAction.getSelectedCheckBoxes(); } private void resetPage() { dAction.getResetPageButton().click(); } }