com.anritsu.mcreleaseportal.client.UploadFile.java Source code

Java tutorial

Introduction

Here is the source code for com.anritsu.mcreleaseportal.client.UploadFile.java

Source

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package com.anritsu.mcreleaseportal.client;

import com.anritsu.mcreleaseportal.shared.MCPackage;
import com.anritsu.mcreleaseportal.shared.MCPackageAvailabilities;
import com.anritsu.mcreleaseportal.shared.MCPackageDependency;
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ChangeEvent;
import com.google.gwt.event.dom.client.ChangeHandler;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.cellview.client.TextColumn;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.FileUpload;
import com.google.gwt.user.client.ui.FormPanel;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Widget;
import com.google.gwt.view.client.ListDataProvider;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.gwtbootstrap3.client.shared.event.ModalHideEvent;
import org.gwtbootstrap3.client.shared.event.ModalHideHandler;
import org.gwtbootstrap3.client.ui.Button;
import org.gwtbootstrap3.client.ui.Container;
import org.gwtbootstrap3.client.ui.Heading;
import org.gwtbootstrap3.client.ui.Image;
import org.gwtbootstrap3.client.ui.Modal;
import org.gwtbootstrap3.client.ui.ModalBody;
import org.gwtbootstrap3.client.ui.Panel;
import org.gwtbootstrap3.client.ui.PanelBody;
import org.gwtbootstrap3.client.ui.constants.IconType;
import org.gwtbootstrap3.client.ui.gwt.CellTable;
import org.gwtbootstrap3.client.ui.html.Paragraph;
import org.gwtbootstrap3.extras.notify.client.constants.NotifyType;
import org.gwtbootstrap3.extras.notify.client.ui.Notify;
import org.gwtbootstrap3.extras.notify.client.ui.NotifySettings;

/**
 *
 * @author ro100051
 */
public class UploadFile extends Composite {

    @UiField
    FormPanel fileUploadFormPanel;

    @UiField
    FileUpload fileUpload;

    @UiField
    Button submitFileUpload;

    @UiField
    Button selectFile;

    @UiField
    Button serviceDescription;

    @UiField
    HorizontalPanel hPanel;

    @UiField
    Image loadingGif;

    @UiField
    Modal serviceDescriptionModal;

    @UiField
    ModalBody confirmMCPackageInfoUpdateBody;

    @UiField
    Modal confirmMCPackageInfoUpdate;

    @UiField
    Container containerFileUpload;

    @UiField
    Paragraph submitStatus;

    @UiField
    Panel mcPackageInfoPanel;

    @UiField
    Panel mcPackageDependencyInfo;

    @UiField
    Heading mcPackageInfoPanelheaderHeading;

    @UiField
    PanelBody mcPackageInfoPanelBody;

    @UiField
    PanelBody mcPackageDependenciesInfoPanelBody;

    @UiField
    Button updateMCPackageInfo;

    @UiField
    Button closeOverwriteConfirmation;

    @UiField
    HTML serviceDescriptionHtml;

    private static UploadFileUiBinder uiBinder = GWT.create(UploadFileUiBinder.class);

    interface UploadFileUiBinder extends UiBinder<Widget, UploadFile> {
    }

    public UploadFile() {
        initWidget(uiBinder.createAndBindUi(this));
        getService().enableChangesXMLUpload(enableChangesXMLUploadCallback);
        serviceDescription.setIcon(IconType.INFO_CIRCLE);
        serviceDescription.addClickHandler(new ClickHandler() {
            @Override
            public void onClick(ClickEvent event) {
                getService().getSchemaLink(getSchemaLinkCallback);
                serviceDescriptionModal.show();
            }
        });

        confirmMCPackageInfoUpdate.addHideHandler(new ModalHideHandler() {
            public void onHide(ModalHideEvent evt) {
                loadingGif.setVisible(false);
                hPanel.setVisible(true);
                mcPackageInfoPanel.setVisible(true);
                mcPackageDependencyInfo.setVisible(true);
            }
        });

        selectFile.addClickHandler(new ClickHandler() {
            @Override
            public void onClick(ClickEvent event) {
                mcPackageInfoPanel.setVisible(false);
                mcPackageDependencyInfo.setVisible(false);
                submitFileUpload.setEnabled(false);
                fileUpload.click();
            }
        });

        fileUpload.addChangeHandler(new ChangeHandler() {
            @Override
            public void onChange(ChangeEvent event) {
                if (fileUpload.getFilename().contains("xml")) {
                    fileUploadFormPanel.setEncoding(FormPanel.ENCODING_MULTIPART);
                    fileUploadFormPanel.setMethod(FormPanel.METHOD_POST);
                    fileUploadFormPanel.setAction(GWT.getModuleBaseURL() + "fileupload");
                    fileUploadFormPanel.submit();
                    hPanel.setVisible(false);
                    loadingGif.setVisible(true);
                } else {
                    Notify.notify("", "Wrong file type selected!", IconType.THUMBS_DOWN, NotifyType.INFO);
                }
            }
        });

        fileUploadFormPanel.addSubmitCompleteHandler(new FormPanel.SubmitCompleteHandler() {
            @Override
            public void onSubmitComplete(FormPanel.SubmitCompleteEvent event) {
                fileUploadFormPanel.reset();

                hPanel.setVisible(true);
                loadingGif.setVisible(false);
                getService().validateChangesXML(validateChangesXMLAsyncCallback);

            }
        });

        submitFileUpload.addClickHandler(new ClickHandler() {
            @Override
            public void onClick(ClickEvent event) {
                hPanel.setVisible(false);
                loadingGif.setVisible(true);
                mcPackageInfoPanel.setVisible(false);
                mcPackageDependencyInfo.setVisible(false);
                getService().isMCPackagePresentInDB(isMCPackagePresentInDBCallback);

            }
        });

        updateMCPackageInfo.addClickHandler(new ClickHandler() {
            @Override
            public void onClick(ClickEvent event) {
                updateMCPackageInfo.setText("Inserting data to DB...");
                closeOverwriteConfirmation.setVisible(false);
                updateMCPackageInfo.setEnabled(false);

                getService().addMCPackageToDB(addMCPackageToDBCallback);
            }
        });
    }

    private AsyncCallback<String> getSchemaLinkCallback = new AsyncCallback<String>() {
        @Override
        public void onFailure(Throwable caught) {
            throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
        }

        @Override
        public void onSuccess(String result) {
            SafeHtmlBuilder sHtmlBuilder = new SafeHtmlBuilder();
            sHtmlBuilder.appendHtmlConstant("<p>Schema Location: </p><a href='" + result + "'>");
            sHtmlBuilder.appendEscaped(result);
            sHtmlBuilder.appendHtmlConstant("</a><br/>");
            serviceDescriptionHtml.setHTML(sHtmlBuilder.toSafeHtml());
        }
    };

    private String getAvailabilities(MCPackage mcPackage) {
        StringBuilder availabilities = new StringBuilder("<br><Strong>Availabilities: </Strong><br />");
        for (MCPackageAvailabilities mcpa : mcPackage.getAvailabilities()) {
            StringBuilder customers = new StringBuilder();
            for (String customer : mcpa.getCustomers()) {
                customers.append(customer).append(" ");
            }
            availabilities.append("<Strong>").append(mcpa.getAvailability())
                    .append("</Strong> for MasterClaw <Strong>").append(mcpa.getMcVersion())
                    .append("</Strong> for ").append(customers).append("<br/>");
        }
        return availabilities.toString();
    }

    private AsyncCallback<String> validateChangesXMLAsyncCallback = new AsyncCallback<String>() {
        @Override
        public void onFailure(Throwable caught) {
            throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
        }

        @Override
        public void onSuccess(String result) {
            NotifySettings settings = NotifySettings.newSettings();
            settings.setType(NotifyType.INFO);
            settings.setDelay(0);
            if (!result.equals("")) {
                Notify.notify("Wrong XML file format!", result, IconType.THUMBS_DOWN, settings);
            } else {
                Notify.notify("XML file succesfully validated aginst the schema!", result, IconType.THUMBS_O_UP,
                        NotifyType.INFO);
                getService().getMCPackageInfo(getMCPackageInfoAsyncCallback);
            }
        }
    };

    private AsyncCallback<MCPackage> isMCPackagePresentInDBCallback = new AsyncCallback<MCPackage>() {
        @Override
        public void onFailure(Throwable caught) {
            throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
        }

        @Override
        public void onSuccess(MCPackage result) {
            if (result.getPackageName() == null) {
                // Probably there were some errors while connecting to DB
                hPanel.setVisible(true);
                loadingGif.setVisible(false);
                mcPackageInfoPanel.setVisible(true);
                mcPackageDependencyInfo.setVisible(true);
                updateMCPackageInfo.setEnabled(true);
                submitFileUpload.setEnabled(true);
                Notify.notify("DB connectivity problems!",
                        "Please try again. If upload still fails contact the administrator!",
                        IconType.THUMBS_O_DOWN, NotifyType.INFO);
                return;
            }

            // Modal ask for confirmation
            if (result.getPackageName().equals("None")) {
                getService().addMCPackageToDB(addMCPackageToDBCallback);
            } else {
                confirmMCPackageInfoUpdateBody.clear();
                HTML html = new HTML("Package " + result.getPackageName() + "-" + result.getPackageVersion()
                        + " is already present in DB. Overwrite?");
                confirmMCPackageInfoUpdateBody.add(html);
                closeOverwriteConfirmation.setVisible(true);
                confirmMCPackageInfoUpdate.show();
            }
        }
    };

    private AsyncCallback<String> addMCPackageToDBCallback = new AsyncCallback<String>() {
        @Override
        public void onFailure(Throwable caught) {
            Notify.notify("", "Error while connecting to server!\n" + caught.getMessage(), IconType.OBJECT_GROUP,
                    NotifyType.INFO);
            loadingGif.setVisible(false);
            submitFileUpload.setEnabled(true);

        }

        @Override
        public void onSuccess(String result) {
            Notify.notify("", result, IconType.THUMBS_O_UP, NotifyType.INFO);
            hPanel.setVisible(true);
            loadingGif.setVisible(false);
            mcPackageInfoPanel.setVisible(true);
            mcPackageDependencyInfo.setVisible(true);
            mcPackageInfoPanelheaderHeading.setText(result);
            confirmMCPackageInfoUpdate.hide();
            updateMCPackageInfo.setText("Overwrite");
            updateMCPackageInfo.setEnabled(true);
            submitFileUpload.setEnabled(false);
        }
    };

    private AsyncCallback<MCPackage> getMCPackageInfoAsyncCallback = new AsyncCallback<MCPackage>() {
        @Override
        public void onFailure(Throwable caught) {
            Notify.notify("", "Error while connecting to server!\n" + caught.getMessage(), IconType.OBJECT_GROUP,
                    NotifyType.INFO);
        }

        @Override
        public void onSuccess(MCPackage result) {

            mcPackageDependenciesInfoPanelBody.clear();
            mcPackageInfoPanelheaderHeading.clear();
            mcPackageInfoPanelBody.clear();

            if (result != null) {
                //Notify.notify("", result.getPackageName() + "-" + result.getPackageVersion() + " will be updated in DB!", IconType.OBJECT_GROUP, NotifyType.INFO);
                submitFileUpload.setEnabled(true);
                mcPackageInfoPanel.setVisible(true);
                mcPackageInfoPanelheaderHeading
                        .setText(result.getPackageName() + "-" + result.getPackageVersion() + " details:");

                Paragraph p = new Paragraph("<Strong>Date: </Strong>" + result.getDate()
                        + "<br/><Strong>Author: </Strong>" + result.getAuthor() + "<br/><Strong>Email: </Strong>"
                        + result.getAuthorEmail() + "<br/><Strong>Status: </Strong>" + result.getStatus()
                        + "<br/><Strong>Tier: </Strong>" + result.getTier() + getAvailabilities(result));

                mcPackageInfoPanelBody.add(p);
                mcPackageDependencyInfo.setVisible(true);
                ArrayList<CellTable> dependencyTables = getDependencyTables(result);
                for (CellTable ct : dependencyTables) {
                    mcPackageInfoPanelBody.add(ct);
                    mcPackageDependenciesInfoPanelBody.add(ct);
                }

            } else {
                Notify.notify("", "Error occured while parsing changes.xml!", IconType.OBJECT_GROUP,
                        NotifyType.INFO);
            }
        }
    };

    private AsyncCallback<String> enableChangesXMLUploadCallback = new AsyncCallback<String>() {
        @Override
        public void onFailure(Throwable caught) {
            Window.alert("Failed to retrive enableChangesXMLUpload parameter!");
        }

        @Override
        public void onSuccess(String result) {
            if (result.equalsIgnoreCase("true")) {
                submitFileUpload.setVisible(true);
            }
        }
    };

    private ArrayList<CellTable> getDependencyTables(MCPackage m) {
        ArrayList<CellTable> dependencyTables = new ArrayList<>();
        Set<String> baselines = new HashSet<String>();
        for (MCPackageDependency p : m.getDependencies()) {
            baselines.add(p.getBaseline());
        }
        for (String s : baselines) {

            CellTable<MCPackageDependency> mcPackageDependencies = new CellTable<MCPackageDependency>();

            TextColumn<MCPackageDependency> packageBaselineColumn = new TextColumn<MCPackageDependency>() {
                @Override
                public String getValue(MCPackageDependency object) {
                    return object.getBaseline();
                }
            };

            TextColumn<MCPackageDependency> packageNameColumn = new TextColumn<MCPackageDependency>() {
                @Override
                public String getValue(MCPackageDependency object) {
                    return object.getPackageName();
                }
            };

            TextColumn<MCPackageDependency> packageVersionColumn = new TextColumn<MCPackageDependency>() {
                @Override
                public String getValue(MCPackageDependency object) {
                    return object.getPackageVersion();
                }
            };

            mcPackageDependencies.addColumn(packageBaselineColumn, "Baseline");
            mcPackageDependencies.addColumn(packageNameColumn, "Package name");
            mcPackageDependencies.addColumn(packageVersionColumn, "Package version");

            ListDataProvider<MCPackageDependency> dataProvider = new ListDataProvider<MCPackageDependency>();
            dataProvider.addDataDisplay(mcPackageDependencies);

            List<MCPackageDependency> list = dataProvider.getList();
            for (MCPackageDependency mcpd : m.getDependencies()) {
                if (mcpd.getBaseline().equals(s)) {
                    list.add(mcpd);
                }
            }
            dependencyTables.add(mcPackageDependencies);
        }
        return dependencyTables;

    }

    public static GWTServiceAsync getService() {
        // Create the client proxy. Note that although you are creating the
        // service interface proper, you cast the result to the asynchronous
        // version of the interface. The cast is always safe because the
        // generated proxy implements the asynchronous interface automatically.

        return GWT.create(GWTService.class);
    }

}