com.codenvy.ide.ext.wso2.client.upload.ImportFileViewImpl.java Source code

Java tutorial

Introduction

Here is the source code for com.codenvy.ide.ext.wso2.client.upload.ImportFileViewImpl.java

Source

/*
 * Copyright 2014 Codenvy, S.A.
 *
 * 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 com.codenvy.ide.ext.wso2.client.upload;

import com.codenvy.ide.ext.wso2.client.LocalizationConstant;
import com.codenvy.ide.ext.wso2.client.WSO2Resources;
import com.codenvy.ide.ui.window.Window;
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.event.dom.client.KeyUpEvent;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.uibinder.client.UiHandler;
import com.google.gwt.user.client.ui.Button;
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.RadioButton;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.Widget;
import com.google.inject.Inject;

import javax.annotation.Nonnull;

import static com.google.gwt.user.client.ui.FormPanel.ENCODING_MULTIPART;
import static com.google.gwt.user.client.ui.FormPanel.METHOD_POST;

/**
 * Provides a graphical representation which allows user to import file to ESB project from different places.
 *
 * @author Valeriy Svydenko
 * @author Andrey Plotnikov
 */
public class ImportFileViewImpl extends Window implements ImportFileView {

    interface ImportFileViewImplUiBinder extends UiBinder<Widget, ImportFileViewImpl> {
    }

    private static final ImportFileViewImplUiBinder UI_BINDER = GWT.create(ImportFileViewImplUiBinder.class);

    @UiField
    FormPanel uploadForm;
    @UiField
    TextBox url;
    @UiField
    RadioButton useUrl;
    @UiField
    RadioButton useLocalPath;
    @UiField
    HTML message;

    @UiField(provided = true)
    final WSO2Resources res;
    @UiField(provided = true)
    final LocalizationConstant locale;

    private final Button btnImport;
    private FileUpload file;
    private ActionDelegate delegate;

    @Inject
    public ImportFileViewImpl(LocalizationConstant locale, WSO2Resources res) {
        this.locale = locale;
        this.res = res;

        this.setTitle(locale.wso2ImportDialogTitle());
        this.setWidget(UI_BINDER.createAndBindUi(this));

        Button btnCancel = createButton(locale.wso2ButtonCancel(), "esb-conf-import-cancel", new ClickHandler() {
            @Override
            public void onClick(ClickEvent event) {
                delegate.onCancelClicked();
            }
        });
        getFooter().add(btnCancel);

        btnImport = createButton(locale.wso2ButtonImport(), "esb-conf-import", new ClickHandler() {
            @Override
            public void onClick(ClickEvent event) {
                delegate.onImportClicked();
            }
        });
        getFooter().add(btnImport);

        bind();
    }

    /** Bind handlers. */
    private void bind() {
        uploadForm.addSubmitCompleteHandler(new FormPanel.SubmitCompleteHandler() {
            @Override
            public void onSubmitComplete(FormPanel.SubmitCompleteEvent event) {
                delegate.onSubmitComplete(event.getResults());
            }
        });
    }

    /** {@inheritDoc} */
    @Nonnull
    @Override
    public String getUrl() {
        return url.getText();
    }

    /** {@inheritDoc} */
    @Override
    public void setUrl(@Nonnull String url) {
        this.url.setText(url);
    }

    /** {@inheritDoc} */
    @Override
    public boolean isUseUrl() {
        return useUrl.getValue();
    }

    /** {@inheritDoc} */
    @Override
    public boolean isUseLocalPath() {
        return useLocalPath.getValue();
    }

    /** {@inheritDoc} */
    @Override
    public void setUseLocalPath(boolean isUseLocalPath) {
        useLocalPath.setValue(isUseLocalPath);
    }

    /** {@inheritDoc} */
    @Override
    public void setUseUrl(boolean isUseUrl) {
        useUrl.setValue(isUseUrl);
    }

    /** {@inheritDoc} */
    @Nonnull
    @Override
    public String getFileName() {
        String fileName = file.getFilename();
        if (fileName.indexOf("\\") > 0) {
            return fileName.substring(fileName.lastIndexOf('\\') + 1, fileName.length());
        } else {
            return fileName;
        }
    }

    /** {@inheritDoc} */
    @Override
    public void setMessage(@Nonnull String message) {
        this.message.setHTML(message);
    }

    /** {@inheritDoc} */
    @Override
    public void setEnabledImportButton(boolean enabled) {
        btnImport.setEnabled(enabled);
    }

    /** {@inheritDoc} */
    @Override
    public void setEnterUrlFieldEnabled(boolean enabled) {
        url.setEnabled(enabled);
    }

    /** {@inheritDoc} */
    @Override
    public void setAction(@Nonnull String url) {
        uploadForm.setAction(url);
    }

    /** {@inheritDoc} */
    @Override
    public void submit() {
        uploadForm.submit();
    }

    /** {@inheritDoc} */
    @Override
    public void close() {
        hide();

        uploadForm.remove(file);
        file = null;

        url.setText("");
    }

    /** {@inheritDoc} */
    @Override
    public void showDialog() {
        uploadForm.setEncoding(ENCODING_MULTIPART);
        uploadForm.setMethod(METHOD_POST);

        file = new FileUpload();
        file.setName("file");
        file.setHeight("26px");
        file.setWidth("100%");
        file.addChangeHandler(new ChangeHandler() {
            @Override
            public void onChange(ChangeEvent changeEvent) {
                if (!file.getFilename().endsWith(".xml")) {
                    delegate.onFileNameChangedWithInvalidFormat();
                } else {
                    delegate.onFileNameChanged();
                }
            }
        });

        uploadForm.setWidget(file);

        show();
    }

    /** {@inheritDoc} */
    @Override
    protected void onClose() {
        hide();
    }

    /** {@inheritDoc} */
    @Override
    public void setDelegate(ActionDelegate actionDelegate) {
        this.delegate = actionDelegate;
    }

    @UiHandler("useUrl")
    public void onUseUrlClicked(@SuppressWarnings("UnusedParameters") ClickEvent event) {
        file.setEnabled(false);
        delegate.onUseUrlChosen();
    }

    @UiHandler("useLocalPath")
    public void onUseLocalPathClicked(@SuppressWarnings("UnusedParameters") ClickEvent event) {
        file.setEnabled(true);
        delegate.onUseLocalPathChosen();
    }

    @UiHandler("url")
    public void onUrlChanged(@SuppressWarnings("UnusedParameters") KeyUpEvent event) {
        delegate.onUrlChanged();
    }

}