org.kuali.continuity.admin.main.client.Location.java Source code

Java tutorial

Introduction

Here is the source code for org.kuali.continuity.admin.main.client.Location.java

Source

// 
// Copyright 2011 Kuali Foundation, Inc. Licensed under the
// Educational Community License, Version 2.0 (the "License"); you may
// not use this file except in compliance with the License. You may
// obtain a copy of the License at
// 
// http://www.opensource.org/licenses/ecl2.php
// 
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an "AS IS"
// BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
// or implied. See the License for the specific language governing
// permissions and limitations under the License.
// 
package org.kuali.continuity.admin.main.client;

import java.util.HashMap;

import com.google.gwt.user.client.Cookies;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.ChangeListener;
import com.google.gwt.user.client.ui.ClickListener;
import com.google.gwt.user.client.ui.FileUpload;
import com.google.gwt.user.client.ui.FlexTable;
import com.google.gwt.user.client.ui.FormHandler;
import com.google.gwt.user.client.ui.FormPanel;
import com.google.gwt.user.client.ui.FormSubmitCompleteEvent;
import com.google.gwt.user.client.ui.FormSubmitEvent;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.Hidden;
import com.google.gwt.user.client.ui.ListBox;
import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.Widget;
import com.gwtext.client.data.FieldDef;
import com.gwtext.client.data.Record;
import com.gwtext.client.data.RecordDef;
import com.gwtext.client.data.StringFieldDef;
import com.gwtext.client.widgets.form.Label;
import com.gwtext.client.widgets.grid.ColumnConfig;
import com.gwtext.client.widgets.grid.ColumnModel;

public class Location extends SimpleGridViewerS {

    final ListBox locationList = new ListBox();
    final TextBox instBox = new TextBox();
    final TextBox customUrlBox = new TextBox();

    String thisLocType = "";
    final ListBox access = new ListBox();

    final TextBox idpBox = new TextBox();
    final TextBox shibUniqueIdBox = new TextBox();
    final ListBox loginMethod = new ListBox();

    final FileUpload imgUpload1 = new FileUpload();
    final FileUpload imgUpload2 = new FileUpload();
    final FileUpload imgUpload3 = new FileUpload();
    final FileUpload imgUpload4 = new FileUpload();

    final Button imgInstallButton1 = new Button("Install Image");
    final Button imgInstallButton2 = new Button("Install Image");
    final Button imgInstallButton3 = new Button("Install Image");
    final Button imgInstallButton4 = new Button("Install Image");
    final Button imgRestoreButton1 = new Button("Restore Default Image");
    final Button imgRestoreButton2 = new Button("Restore Default Image");
    final Button imgRestoreButton3 = new Button("Restore Default Image");
    final Button imgRestoreButton4 = new Button("Restore Default Image");

    final Hidden systemDomainId = new Hidden("systemDomainId");
    final Hidden systemDomainAccess = new Hidden("systemDomainAccess");
    final Hidden restore = new Hidden("restore");
    final Hidden uiImageEnum = new Hidden("uiImageEnum");

    int[] gcsize = { 75, 120, 50, 50, 0, 0 };

    public ColumnConfig groupCol = new ColumnConfig("Institution", "group", gcsize[0], true);
    public ColumnConfig locationCol = new ColumnConfig("Location", "name", gcsize[1], true);
    //   public ColumnConfig sublocationCol = new ColumnConfig("Sublocation",
    //         "subLocation", gcsize[1], true);

    //   public ColumnConfig typeCol = new ColumnConfig("Type", "typestr", gcsize[2],
    //         true);
    public ColumnConfig accessCol = new ColumnConfig("Access", "accessstr", gcsize[3], true);

    ColumnModel columnModel = new ColumnModel(new ColumnConfig[] { groupCol, locationCol,
            //         sublocationCol, typeCol, 
            accessCol });
    RecordDef recordDef = new RecordDef(new FieldDef[] { new StringFieldDef("id"), new StringFieldDef("group"),
            new StringFieldDef("parentSystemDomainName"), new StringFieldDef("name"), new StringFieldDef("typestr"),
            new StringFieldDef("accessstr"), new StringFieldDef("order") });
    int thisAuthId = 0;

    HashMap<String, String> systemAccessIndex = new HashMap<String, String>();

    public void onModuleLoad() {

        this.formController = lfc;
        this.setElementNames(columnModel, recordDef);

        // labels
        Label lblIns = new Label("Institution");
        Label lblLoc = new Label("Location");
        Label lblAcc = new Label("Access");
        Label lblCus = new Label("User Friendly Url:");
        Label lblCs1 = new Label("https://us.continuity.ariahgroup.org/");
        Label lblLog = new Label("Login Method");
        Label lblIdp = new Label("IDP");
        Label lblIdi = new Label("Shibboleth unique attribute");
        lblIns.setStyleName("gwt-HTML-location");
        lblLoc.setStyleName("gwt-HTML-location");
        lblAcc.setStyleName("gwt-HTML-location");
        lblCus.setStyleName("gwt-HTML-location");
        lblCs1.setStyleName("gwt-HTML-location");
        lblLog.setStyleName("gwt-HTML-location");
        lblIdp.setStyleName("gwt-HTML-location");
        lblIdi.setStyleName("gwt-HTML-location");

        instBox.setWidth("100px");
        textBox.setWidth("180px");
        customUrlBox.setWidth("100px");
        idpBox.setWidth("350px");
        shibUniqueIdBox.setWidth("350px");

        // enable text boxes
        enableTextBox(instBox, true);
        enableTextBox(textBox, true);
        enableTextBox(customUrlBox, true);
        enableTextBox(idpBox, false);
        enableTextBox(shibUniqueIdBox, false);

        // access
        access.setVisibleItemCount(1);
        access.addItem("System Admin Only", "0");
        access.addItem("System and Institutional Admins Only", "3");
        access.addItem("Admins Only", "1");
        access.addItem("All Users", "2");
        systemAccessIndex.put("0", "0"); // For System Admins
        systemAccessIndex.put("3", "1"); // For System and Insitutional
        systemAccessIndex.put("1", "2"); // For Admins
        systemAccessIndex.put("2", "3"); // For All Users

        // login method
        loginMethod.setVisibleItemCount(1);
        loginMethod.addItem("Direct Login", "0");
        loginMethod.addItem("Shibboleth Login", "1");
        loginMethod.addChangeListener(new ChangeListener() {
            public void onChange(Widget sender) {
                showErr(false);
                int idx = loginMethod.getSelectedIndex();
                enableShibTextBoxes(idx);
            }
        });

        // tables
        FlexTable formTable = new FlexTable();
        formTable.setStylePrimaryName("location-form");
        formTable.setWidget(0, 0, lblIns);
        formTable.setWidget(0, 1, instBox);
        formTable.setWidget(0, 2, lblLoc);
        formTable.setWidget(0, 3, textBox);
        formTable.getFlexCellFormatter().setColSpan(1, 0, 4);
        formTable.setWidget(1, 0, lblCus);
        formTable.setWidget(2, 0, lblCs1);
        formTable.setWidget(2, 1, customUrlBox);
        formTable.setWidget(2, 2, lblAcc);
        formTable.setWidget(2, 3, access);

        FlexTable shibTable = new FlexTable();
        shibTable.setStylePrimaryName("location-shib-form");
        shibTable.setWidget(0, 0, lblLog);
        shibTable.setWidget(0, 1, loginMethod);
        shibTable.setWidget(0, 2, lblIdp);
        shibTable.setWidget(0, 3, idpBox);
        shibTable.setWidget(1, 0, new Label(" "));
        shibTable.setWidget(1, 1, new Label(" "));
        shibTable.setWidget(1, 2, lblIdi);
        shibTable.setWidget(1, 3, shibUniqueIdBox);

        flexForm.add(formTable);
        flexForm.add(shibTable);
        itemRootName = "location";

        // set token
        String token = Cookies.getCookie(CSRF_TOKEN);
        csrfToken.setValue(token);
        flexForm.registerWidget(csrfToken);

        this.doExtraSectionLoad();
    }

    /**
     * The LocationFormController has special formatting tasks.  
        
     *  
     * @author richkatz
     *
     */
    class LocationFormController extends SimpleFormController {

        /**
           *    For sublocation: Load the pull-down (if not already loaded) 
           *       Point to the current item.   And display the pulldown.
           *      
           *  For main location the parent is loaded into instBox.
           *      And display the textbox.
         */
        public boolean formLoad(Object result) {

            LocationItem item = (LocationItem) result;
            instBox.setText(item.getGroup());
            textBox.setText(item.getName());
            customUrlBox.setText(item.getCustomUrl());
            access.setItemSelected(Integer.parseInt((String) systemAccessIndex.get(item.getAccess())), true);
            thisAuthId = item.getAuthId();
            thisLocType = item.getTypestr();

            idpBox.setText(item.getAuthLocation());
            shibUniqueIdBox.setText(item.getShibUniqueId());
            if (item.isShibMode()) {
                loginMethod.setSelectedIndex(1);
            } else {
                loginMethod.setSelectedIndex(0);
            }
            enableShibTextBoxes(loginMethod.getSelectedIndex());

            systemDomainId.setValue("" + item.getAuthId());
            systemDomainAccess.setValue(access.getValue(access.getSelectedIndex()));

            // set visible
            imgRestoreButton1.setVisible(item.isCustomImage1());
            imgRestoreButton2.setVisible(item.isCustomImage2());
            imgRestoreButton3.setVisible(item.isCustomImage3());
            imgRestoreButton4.setVisible(item.isCustomImage4());

            return true;
        }

        /**
         * validateSave
         * For items of type 
         *       Member  - set the name to the subLocation.
         *       Primary - set the name to the Main location.
         *     
         */
        @Override
        public NamedItem validateSave(NamedItem item) {

            LocationItem it = new LocationItem();
            it.setTypestr(thisLocType);

            it.setName(textBox.getText());
            it.setGroup(instBox.getText());
            it.setCustomUrl(customUrlBox.getText());
            it.setCsrfToken(csrfToken.getValue());

            it.setAuthId(thisAuthId); // This means the parent ID.
            it.setAccess(access.getValue(access.getSelectedIndex()));
            //            Window.alert(
            //                   it.getName()
            //                   +" "+it.getAccess()
            //                   +" "+it.getTypestr()
            //                   +" "+it.getAuthId());

            if (loginMethod.getSelectedIndex() == 0) {
                it.setShibMode(false);
                it.setAuthLocation(idpBox.getText());
                it.setShibUniqueId(shibUniqueIdBox.getText());
            } else {
                it.setShibMode(true);
                it.setAuthLocation(idpBox.getText());
                it.setShibUniqueId(shibUniqueIdBox.getText());
            }

            if (buttonPressed.equals("delete")) {
                mainerror = "Institution/Location is in use and may not be deleted.";
                //  Previous mainerror="Unable to delete location that has plans or user. Please delete all plans and users first.";
            }
            if (buttonPressed.equals("insert")) {
                // Check for duplicates.
                int nitems = store.getTotalCount();
                for (int i = 0; i < nitems; i++) {
                    Record rec = store.getRecordAt(i);
                    String thisname = rec.getAsString("name");
                    if (it.getName().equals(thisname)) {
                        // Duplicate found.
                        // Window.alert("Potential duplicate location "+thisname+" already exists.");
                        String tableGroup = rec.getAsString("group");
                        String newGroup = it.getGroup();
                        // Window.alert("Table: "+tableGroup+"  new "+newGroup+ " "+isEmpty(tableGroup)+" "+isEmpty(newGroup));
                        if (it.getGroup().equals(tableGroup) || (isEmpty(tableGroup) && isEmpty(newGroup))) {
                            mainerror = "Location " + newGroup + " : " + thisname + " already exists.";
                            setError(mainerror);
                            // showErr(true);
                            // Window.alert("Location "+rec.getAsString("group")+" : "+thisname+" already exists.");
                            it = null;
                        }
                    }

                }
                // Check for empty Location.
                if (it.getName().trim().length() == 0) {
                    mainerror = "Location must not be empty.";
                    setError(mainerror);
                    return null;
                }

                // Check for empty Institution.
                if (it.getGroup().trim().length() == 0) {
                    mainerror = "Institution must not be empty.";
                    setError(mainerror);
                    return null;
                }
            } else if (buttonPressed.equals("update")) {
                if (it.getName().trim().length() == 0) {
                    mainerror = "Location must not be empty.";
                    setError(mainerror);
                    return null;
                }

                // Check for empty Institution.
                if (it.getGroup().trim().length() == 0) {
                    mainerror = "Institution must not be empty.";
                    setError(mainerror);
                    return null;
                }
            }
            return it;
        }
    }

    boolean isEmpty(String s) {
        boolean ret = false;
        if (null == s || s.trim().length() == 0) {
            ret = true;
        }
        return ret;
    }

    LocationFormController lfc = new LocationFormController();

    void enableShibTextBoxes(int index) {
        if (index == 0) {
            enableTextBox(idpBox, false);
            enableTextBox(shibUniqueIdBox, false);
        } else {
            enableTextBox(idpBox, true);
            enableTextBox(shibUniqueIdBox, true);
        }

    }

    void enableTextBox(TextBox t, boolean enabled) {
        t.setEnabled(enabled);
        t.setReadOnly(!enabled);
        String primarycolor = "gandalfwhite";
        if (!enabled) {
            primarycolor = "gandalfgrey";

        }
        t.setStylePrimaryName(primarycolor);
        t.setStyleName(primarycolor);

    }

    protected void clearThisForm() {
        instBox.setText("");
        textBox.setText("");
        customUrlBox.setText("");
        idpBox.setText("");
        shibUniqueIdBox.setText("");
        access.setSelectedIndex(0);
        loginMethod.setSelectedIndex(0);
    }

    protected void doExtraSectionLoad() {
        // init form
        final VerticalPanel vPanel = new VerticalPanel();
        final FormPanel formPanel = new FormPanel();
        formPanel.setEncoding(FormPanel.ENCODING_MULTIPART);
        formPanel.setMethod(FormPanel.METHOD_POST);
        formPanel.setAction(Window.Location.getProtocol() + "//" + Window.Location.getHost()
                + "/continuity/admin/customImageUpload");

        // set form handler
        formPanel.addFormHandler(new FormHandler() {
            public void onSubmit(FormSubmitEvent event) {
                // event.setCancelled(true);
            }

            public void onSubmitComplete(FormSubmitCompleteEvent event) {
                boolean isRestore = restore.getValue().equals("true");
                if (uiImageEnum.getValue().equals("BEGIN")) {
                    imgRestoreButton1.setVisible(!isRestore);
                } else if (uiImageEnum.getValue().equals("BEGIN_TEXT")) {
                    imgRestoreButton2.setVisible(!isRestore);
                } else if (uiImageEnum.getValue().equals("BANNER")) {
                    imgRestoreButton3.setVisible(!isRestore);
                } else if (uiImageEnum.getValue().equals("BANNER_TEXT")) {
                    imgRestoreButton4.setVisible(!isRestore);
                }
                csrfToken.setValue(Cookies.getCookie(CSRF_TOKEN));
                String message = isRestore ? "Default image restored!" : "Custom image upload completed!";
                Window.alert(message);
            }
        });

        // custom image labels
        Label lblImg1 = new Label("Entry screen top image:");
        Label lblImg2 = new Label("Entry screen bottom image:");
        Label lblImg3 = new Label("Banner left image:");
        Label lblImg4 = new Label("Banner right image:");
        Label lblImgDim1 = new Label("Recommended dimensions:  700 pixels x 200 pixels");
        Label lblImgDim2 = new Label("Recommended dimensions:  700 pixels x 100 pixels");
        Label lblImgDim3 = new Label("Recommended height:  80 pixels");
        Label lblImgDim4 = new Label("Recommended height:  80 pixels");

        // styles
        lblImg1.setStyleName("gwt-HTML-location-bold");
        lblImg2.setStyleName("gwt-HTML-location-bold");
        lblImg3.setStyleName("gwt-HTML-location-bold");
        lblImg4.setStyleName("gwt-HTML-location-bold");
        lblImgDim1.setStyleName("gwt-HTML-location");
        lblImgDim2.setStyleName("gwt-HTML-location");
        lblImgDim3.setStyleName("gwt-HTML-location");
        lblImgDim4.setStyleName("gwt-HTML-location");

        // entry fields
        imgInstallButton1.setStyleName("ButtonClass");
        imgInstallButton2.setStyleName("ButtonClass");
        imgInstallButton3.setStyleName("ButtonClass");
        imgInstallButton4.setStyleName("ButtonClass");
        imgRestoreButton1.setStyleName("ButtonClass");
        imgRestoreButton2.setStyleName("ButtonClass");
        imgRestoreButton3.setStyleName("ButtonClass");
        imgRestoreButton4.setStyleName("ButtonClass");
        imgUpload1.setStyleName("ButtonClass");
        imgUpload2.setStyleName("ButtonClass");
        imgUpload3.setStyleName("ButtonClass");
        imgUpload4.setStyleName("ButtonClass");
        imgUpload1.setWidth("300px");
        imgUpload2.setWidth("300px");
        imgUpload3.setWidth("300px");
        imgUpload4.setWidth("300px");
        imgUpload1.setName("uploadedImg1");
        imgUpload2.setName("uploadedImg2");
        imgUpload3.setName("uploadedImg3");
        imgUpload4.setName("uploadedImg4");

        // construct table
        FlexTable imageTable = new FlexTable();
        imageTable.setStylePrimaryName("location-form");

        imageTable.getFlexCellFormatter().setColSpan(0, 0, 3);
        imageTable.setWidget(0, 0, lblImg1);
        imageTable.getFlexCellFormatter().setColSpan(1, 0, 3);
        imageTable.setWidget(1, 0, lblImgDim1);
        imageTable.setWidget(2, 0, imgUpload1);
        imageTable.setWidget(2, 1, imgInstallButton1);
        imageTable.setWidget(2, 2, imgRestoreButton1);

        imageTable.getFlexCellFormatter().setColSpan(3, 0, 3);
        imageTable.setWidget(3, 0, lblImg2);
        imageTable.getFlexCellFormatter().setColSpan(4, 0, 3);
        imageTable.setWidget(4, 0, lblImgDim2);
        imageTable.setWidget(5, 0, imgUpload2);
        imageTable.setWidget(5, 1, imgInstallButton2);
        imageTable.setWidget(5, 2, imgRestoreButton2);

        imageTable.getFlexCellFormatter().setColSpan(6, 0, 3);
        imageTable.setWidget(6, 0, lblImg3);
        imageTable.getFlexCellFormatter().setColSpan(7, 0, 3);
        imageTable.setWidget(7, 0, lblImgDim3);
        imageTable.setWidget(8, 0, imgUpload3);
        imageTable.setWidget(8, 1, imgInstallButton3);
        imageTable.setWidget(8, 2, imgRestoreButton3);

        imageTable.getFlexCellFormatter().setColSpan(9, 0, 3);
        imageTable.setWidget(9, 0, lblImg4);
        imageTable.getFlexCellFormatter().setColSpan(10, 0, 3);
        imageTable.setWidget(10, 0, lblImgDim4);
        imageTable.setWidget(11, 0, imgUpload4);
        imageTable.setWidget(11, 1, imgInstallButton4);
        imageTable.setWidget(11, 2, imgRestoreButton4);

        imageTable.setWidget(12, 0, systemDomainId);
        imageTable.setWidget(12, 1, restore);
        imageTable.setWidget(12, 2, uiImageEnum);

        // button click listener
        imgInstallButton1.addClickListener(new ClickListener() {
            public void onClick(final Widget sender) {
                customImageFormSubmit(formPanel, imgUpload1, false, "BEGIN");
            }
        });
        imgInstallButton2.addClickListener(new ClickListener() {
            public void onClick(final Widget sender) {
                customImageFormSubmit(formPanel, imgUpload2, false, "BEGIN_TEXT");
            }
        });
        imgInstallButton3.addClickListener(new ClickListener() {
            public void onClick(final Widget sender) {
                customImageFormSubmit(formPanel, imgUpload3, false, "BANNER");
            }
        });
        imgInstallButton4.addClickListener(new ClickListener() {
            public void onClick(final Widget sender) {
                customImageFormSubmit(formPanel, imgUpload4, false, "BANNER_TEXT");
            }
        });
        imgRestoreButton1.addClickListener(new ClickListener() {
            public void onClick(final Widget sender) {
                customImageFormSubmit(formPanel, imgUpload1, true, "BEGIN");
            }
        });
        imgRestoreButton2.addClickListener(new ClickListener() {
            public void onClick(final Widget sender) {
                customImageFormSubmit(formPanel, imgUpload2, true, "BEGIN_TEXT");
            }
        });
        imgRestoreButton3.addClickListener(new ClickListener() {
            public void onClick(final Widget sender) {
                customImageFormSubmit(formPanel, imgUpload3, true, "BANNER");
            }
        });
        imgRestoreButton4.addClickListener(new ClickListener() {
            public void onClick(final Widget sender) {
                customImageFormSubmit(formPanel, imgUpload4, true, "BANNER_TEXT");
            }
        });

        // vertical panel
        vPanel.setStylePrimaryName("location-shib-form");
        vPanel.add(new HTML("<h1>Upload Custom Images</h1>"));
        vPanel.add(new HTML(
                "To upload custom images, highlight the row on the grid then use the entry form below to upload your images."));

        // add table to form
        formPanel.add(imageTable);
        vPanel.add(formPanel);

        // dock form
        //      dockPanel.add(vPanel, DockPanel.SOUTH);
        RootPanel rootPanel = RootPanel.get("gwtRoot");
        rootPanel.add(vPanel);
    }

    protected void customImageFormSubmit(FormPanel formPanel, FileUpload fileUpload, boolean isRestore,
            String uiImageEnumValue) {
        // check location
        if (systemDomainId.getValue() == null || systemDomainId.getValue().trim().length() == 0) {
            Window.alert("Please select your location first from the location grid.");
            return;
        }

        if (systemDomainAccess.getValue().equals("2")) {
            boolean ok = Window.confirm("Access is set to 'All Users'.  Do you wish to proceed?");
            if (!ok)
                return;
        }

        if (!isRestore) {
            // check file
            String fileName = fileUpload.getFilename().toLowerCase();
            if (fileName == null || fileName.trim().length() == 0) {
                Window.alert("Please enter image to upload.");
                return;
            }

            int lastIndex = fileName.lastIndexOf('.');
            if (lastIndex < 0) {
                Window.alert("Invalid image file");
                return;
            }

            if (!(fileName.endsWith("gif") || fileName.endsWith("jpeg") || fileName.endsWith("jpg")
                    || fileName.endsWith("tiff") || fileName.endsWith("bmp") || fileName.endsWith("png"))) {
                Window.alert("Invalid image file");
                return;
            }
        }

        restore.setValue(isRestore ? "true" : "false");
        uiImageEnum.setValue(uiImageEnumValue);

        formPanel.submit();
    }
}