org.wte4j.examples.showcase.client.generation.GenerateDocumentPresenter.java Source code

Java tutorial

Introduction

Here is the source code for org.wte4j.examples.showcase.client.generation.GenerateDocumentPresenter.java

Source

/**
 * Copyright (C) 2015 Born Informatik AG (www.born.ch)
 *
 * Licensed under the Apache 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.apache.org/licenses/LICENSE-2.0
 *
 * 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.wte4j.examples.showcase.client.generation;

import java.util.ArrayList;
import java.util.List;

import org.wte4j.examples.showcase.client.Application;
import org.wte4j.examples.showcase.shared.OrderDataDto;
import org.wte4j.examples.showcase.shared.service.OrderServiceAsync;
import org.wte4j.ui.client.dialog.DialogType;
import org.wte4j.ui.client.dialog.MessageDialog;

import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.http.client.URL;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.view.client.NoSelectionModel;
import com.google.gwt.view.client.SelectionChangeEvent;
import com.google.gwt.view.client.SelectionChangeEvent.Handler;

public class GenerateDocumentPresenter {

    private OrderServiceAsync orderService = OrderServiceAsync.Util.getInstance();

    private GenerateDocumentDisplay display;

    private NoSelectionModel<OrderDataDto> orderSelectionModel;
    private OrderDataDto selectedOrder;
    private String selectedTemplate;

    public void bind(GenerateDocumentDisplay aDisplay) {
        if (display != null) {
            throw new IllegalStateException("presenter is already bound");
        }
        display = aDisplay;
        bindOrderContainer();
        initOrderContainer();
    }

    private void bindOrderContainer() {
        orderSelectionModel = new NoSelectionModel<OrderDataDto>();
        orderSelectionModel.addSelectionChangeHandler(new Handler() {
            @Override
            public void onSelectionChange(SelectionChangeEvent event) {
                displayTemplatesForSelection();
            }

        });
        display.getOrderContainer().setSelectionModel(orderSelectionModel);

    }

    public void initOrderContainer() {
        orderService.listOrderData(new AsyncCallback<List<OrderDataDto>>() {

            @Override
            public void onSuccess(List<OrderDataDto> list) {
                display.getOrderContainer().setRowData(0, list);

            }

            @Override
            public void onFailure(Throwable caught) {
                showErrorOnFailure(caught);
            }

        });

    }

    public void displayTemplatesForSelection() {
        selectedOrder = orderSelectionModel.getLastSelectedObject();
        orderService.listOrderTemplates(new AsyncCallback<List<String>>() {

            @Override
            public void onSuccess(List<String> templates) {

                List<TemplateItem> templateItems = new ArrayList<TemplateItem>();
                for (String templateName : templates) {
                    templateItems.add(createTemplateItem(templateName));
                }
                display.setTemplateListItems(templateItems);
                display.showTemplateList();

            }

            @Override
            public void onFailure(Throwable caught) {
                showErrorOnFailure(caught);
            }
        });

    }

    TemplateItem createTemplateItem(String templateName) {
        TemplateItem templateItem = new TemplateItem();
        templateItem.setText(templateName);
        templateItem.setClickHandler(new TemplateClickHandler(templateName));
        return templateItem;
    }

    public void createAndDownlaodDocument() {
        orderService.createDocument(selectedOrder, selectedTemplate, new AsyncCallback<String>() {
            @Override
            public void onSuccess(String result) {
                display.hideTemplateList();

                String url = GWT.getModuleBaseURL() + "orderService?file=" + result.toString();
                url = URL.decode(url);
                Window.open(url, "parent", "");
            }

            @Override
            public void onFailure(Throwable caught) {
                display.hideTemplateList();
                showErrorOnFailure(caught);
            }
        });

    }

    private void showErrorOnFailure(Throwable caught) {
        String message = ((caught == null || caught.getMessage() == null || "".equals(caught.getMessage())
                || caught.getMessage().length() < 4))
                        ? Application.MESSAGES.wte4j_message_document_generation_service_unavailable_text()
                        : caught.getMessage();
        MessageDialog messageDialog = new MessageDialog(
                Application.MESSAGES.wte4j_message_document_generation_error_title(), message, DialogType.ERROR);
        messageDialog.show();
    }

    private class TemplateClickHandler implements ClickHandler {

        private String template;

        public TemplateClickHandler(String template) {
            this.template = template;
        }

        @Override
        public void onClick(ClickEvent event) {
            selectedTemplate = template;
            createAndDownlaodDocument();
        }
    }

}