au.org.theark.lims.web.component.button.PrinterListPanel.java Source code

Java tutorial

Introduction

Here is the source code for au.org.theark.lims.web.component.button.PrinterListPanel.java

Source

/*******************************************************************************
 * Copyright (c) 2011  University of Western Australia. All rights reserved.
 * 
 * This file is part of The Ark.
 * 
 * The Ark is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; either version 3
 * of the License, or (at your option) any later version.
 * 
 * The Ark is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 ******************************************************************************/
package au.org.theark.lims.web.component.button;

import java.util.Arrays;
import java.util.List;

import org.apache.wicket.AttributeModifier;
import org.apache.wicket.ajax.AbstractDefaultAjaxBehavior;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.form.DropDownChoice;
import org.apache.wicket.markup.html.form.HiddenField;
import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.model.PropertyModel;
import org.apache.wicket.request.cycle.RequestCycle;
import org.apache.wicket.util.string.StringValue;

/**
 * Embedded PrintApplet and dynamic drop-down list that populates with the printers connected to the client machine
 * 
 * @author cellis
 * 
 */
public class PrinterListPanel extends Panel {
    private static final long serialVersionUID = -3613468944612447644L;
    protected String selected = new String();
    protected HiddenField<String> selectedPrinter;
    protected static List<String> PRINTERLIST = Arrays.asList("zebra", "brady_bbp_11");

    protected boolean isNew;

    public PrinterListPanel(String id, String selected, boolean isNew) {
        super(id);
        setOutputMarkupId(true);
        this.isNew = isNew;
        setSelected(selected);
        setDefaultModel(new PropertyModel<String>(this, "selected"));
        initPanel();
    }

    private void initPanel() {
        DropDownChoice<String> printerListDdc = new DropDownChoice<String>("printerList",
                new PropertyModel<String>(this, "selected"), PRINTERLIST);
        printerListDdc.add(new AttributeModifier("name", "printerList"));
        printerListDdc.add(new AttributeModifier("onchange", "changeHiddenInput(this)"));
        printerListDdc.setOutputMarkupPlaceholderTag(true);
        this.add(printerListDdc);

        selectedPrinter = new HiddenField<String>("selectedPrinter", new PropertyModel<String>(this, "selected"));
        selectedPrinter.setOutputMarkupPlaceholderTag(true);
        selectedPrinter.add(new AttributeModifier("name", "selectedPrinter"));
        selectedPrinter.add(new AbstractDefaultAjaxBehavior() {
            private static final long serialVersionUID = 1L;

            @Override
            protected void respond(AjaxRequestTarget arg0) {
                StringValue selectedPrinter = RequestCycle.get().getRequest().getQueryParameters()
                        .getParameterValue("selectedPrinter");
                selected = selectedPrinter.toString();
            }
        });
        this.add(selectedPrinter);

        StringBuilder javaScript = new StringBuilder();
        javaScript.append("function findPrinters() {");
        javaScript.append("\n");
        javaScript.append("   var applet = document.jZebra;");
        javaScript.append("\n");
        javaScript.append("   if (applet != null) {");
        javaScript.append("\n");
        javaScript.append("      document.getElementById('");
        javaScript.append(printerListDdc.getMarkupId());
        javaScript.append("').disabled = false;");
        javaScript.append("\n");
        javaScript.append("      var listing = applet.getPrinters();");
        javaScript.append("\n");
        javaScript.append("      var printers = listing.split(',');\n");
        javaScript.append("      var objHidden = document.getElementById('");
        javaScript.append(selectedPrinter.getMarkupId());
        javaScript.append("');\n");
        javaScript.append("\n");
        javaScript.append("      for ( var i in printers) {");
        javaScript.append("\n");
        javaScript.append("         if(objHidden.value == printers[i]) {\n");
        javaScript.append("            document.getElementById('");
        javaScript.append(printerListDdc.getMarkupId());
        javaScript.append("').options[i] = new Option(printers[i], printers[i], true, true);\n");
        javaScript.append("         } else {\n");
        javaScript.append("            document.getElementById('");
        javaScript.append(printerListDdc.getMarkupId());
        javaScript.append("').options[i] = new Option(printers[i], printers[i], false, false);\n");
        javaScript.append("         }\n");
        javaScript.append("      }");
        javaScript.append("\n");
        javaScript.append("   } else {");
        javaScript.append("\n");
        javaScript.append("      document.getElementById('");
        javaScript.append(printerListDdc.getMarkupId());
        javaScript.append("').options[i] = new Option('N/A');");
        javaScript.append("\n");
        javaScript.append("      document.getElementById('");
        javaScript.append(printerListDdc.getMarkupId());
        javaScript.append("').disabled = true;");
        javaScript.append("\n");
        javaScript.append("   }");
        javaScript.append("\n");
        javaScript.append("}");
        javaScript.append("\n");
        javaScript.append("\n");
        javaScript.append("function changeHiddenInput (objDropDown) {");
        javaScript.append("\n");
        javaScript.append("   var objHidden = document.getElementById('");
        javaScript.append(selectedPrinter.getMarkupId());
        javaScript.append("');\n");
        javaScript.append("   objHidden.value = objDropDown.value;");
        javaScript.append("\n");
        javaScript.append("   callWicket(objDropDown.value);");
        javaScript.append("}");

        final Label script = new Label("script", javaScript.toString());
        script.setOutputMarkupPlaceholderTag(true);
        script.add(new AttributeModifier("onload", "findPrinters()"));
        script.setEscapeModelStrings(false); // do not HTML escape JavaScript code
        this.add(script);
    }

    /**
     * @return the selected
     */
    public String getSelected() {
        return selected;
    }

    /**
     * @param selected the selected to set
     */
    public void setSelected(String selected) {
        this.selected = selected;
    }

    /**
     * @return the selectedPrinter
     */
    public HiddenField<String> getSelectedPrinter() {
        return selectedPrinter;
    }

    /**
     * @param selectedPrinter the selectedPrinter to set
     */
    public void setSelectedPrinter(HiddenField<String> selectedPrinter) {
        this.selectedPrinter = selectedPrinter;
    }
}