org.eclipse.che.plugin.yaml.ide.preferences.YamlExtensionManagerViewImpl.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.che.plugin.yaml.ide.preferences.YamlExtensionManagerViewImpl.java

Source

/*
 * Copyright (c) 2012-2018 Red Hat, Inc.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *   Red Hat, Inc. - initial API and implementation
 */
package org.eclipse.che.plugin.yaml.ide.preferences;

import com.google.gwt.cell.client.ButtonCell;
import com.google.gwt.cell.client.Cell.Context;
import com.google.gwt.cell.client.EditTextCell;
import com.google.gwt.cell.client.FieldUpdater;
import com.google.gwt.core.client.GWT;
import com.google.gwt.dom.client.Style;
import com.google.gwt.event.dom.client.ClickEvent;
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.uibinder.client.UiHandler;
import com.google.gwt.user.cellview.client.CellTable;
import com.google.gwt.user.cellview.client.Column;
import com.google.gwt.user.client.ui.*;
import com.google.inject.Inject;
import com.google.inject.Singleton;
import java.util.List;
import javax.validation.constraints.NotNull;
import org.eclipse.che.ide.ui.cellview.CellTableResources;
import org.eclipse.che.plugin.yaml.ide.YamlLocalizationConstant;
import org.eclipse.che.plugin.yaml.shared.YamlPreference;

/**
 * The implementation of {@link YamlExtensionManagerView}.
 *
 * @author Joshua Pinkney
 */
@Singleton
public class YamlExtensionManagerViewImpl extends Composite implements YamlExtensionManagerView {
    interface YamlExtensionManagerViewImplUiBinder extends UiBinder<Widget, YamlExtensionManagerViewImpl> {
    }

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

    @UiField
    Button addUrl;

    @UiField(provided = true)
    CellTable<YamlPreference> yamlPreferenceCellTable;

    @UiField
    Label headerUiMsg;

    private ActionDelegate delegate;

    private YamlLocalizationConstant local;

    @Inject
    protected YamlExtensionManagerViewImpl(CellTableResources res, YamlLocalizationConstant local) {
        this.local = local;
        initYamlExtensionTable(res);
        initWidget(uiBinder.createAndBindUi(this));
    }

    /**
     * Creates table which contains list of available preferences
     *
     * @param res Celltable resources
     */
    private void initYamlExtensionTable(final CellTable.Resources res) {

        yamlPreferenceCellTable = new CellTable<YamlPreference>(20, res);
        Column<YamlPreference, String> urlColumn = new Column<YamlPreference, String>(new EditTextCell()) {
            @Override
            public String getValue(YamlPreference object) {
                return object.getUrl();
            }

            @Override
            public void render(Context context, YamlPreference object, SafeHtmlBuilder sb) {
                sb.appendHtmlConstant("<div id=\"" + UIObject.DEBUG_ID_PREFIX + "-preferences-cellTable-url-"
                        + context.getIndex() + "\">");
                super.render(context, object, sb);
            }
        };

        urlColumn.setFieldUpdater(new FieldUpdater<YamlPreference, String>() {
            @Override
            public void update(int index, YamlPreference object, String value) {
                object.setUrl(value);
                delegate.nowDirty();
            }
        });

        Column<YamlPreference, String> globColumn = new Column<YamlPreference, String>(new EditTextCell()) {
            @Override
            public String getValue(YamlPreference object) {
                return object.getGlob();
            }

            @Override
            public void render(Context context, YamlPreference object, SafeHtmlBuilder sb) {
                sb.appendHtmlConstant("<div id=\"" + UIObject.DEBUG_ID_PREFIX + "-preferences-cellTable-glob-"
                        + context.getIndex() + "\">");
                if (object != null) {
                    super.render(context, object, sb);
                }
            }
        };

        globColumn.setFieldUpdater(new FieldUpdater<YamlPreference, String>() {
            @Override
            public void update(int index, YamlPreference object, String value) {
                object.setGlob(value);
                delegate.nowDirty();
            }
        });

        Column<YamlPreference, String> deletePreferenceColumn = new Column<YamlPreference, String>(
                new ButtonCell()) {
            @Override
            public String getValue(YamlPreference object) {
                return "Delete";
            }

            @Override
            public void render(Context context, YamlPreference object, SafeHtmlBuilder sb) {
                sb.appendHtmlConstant("<div id=\"" + UIObject.DEBUG_ID_PREFIX + "-preferences-cellTable-delete-"
                        + context.getIndex() + "\">");
                super.render(context, object, sb);
            }
        };

        // Creates handler on button clicked
        deletePreferenceColumn.setFieldUpdater(new FieldUpdater<YamlPreference, String>() {
            @Override
            public void update(int index, YamlPreference object, String value) {
                delegate.onDeleteClicked(object);
            }
        });

        yamlPreferenceCellTable.addColumn(urlColumn, local.urlColumnHeader());
        yamlPreferenceCellTable.addColumn(globColumn, local.globColumnHeader());
        yamlPreferenceCellTable.addColumn(deletePreferenceColumn, local.deleteColumnHeader());
        yamlPreferenceCellTable.setWidth("100%", true);
        yamlPreferenceCellTable.setColumnWidth(urlColumn, 45, Style.Unit.PCT);
        yamlPreferenceCellTable.setColumnWidth(globColumn, 30, Style.Unit.PCT);
        yamlPreferenceCellTable.setColumnWidth(deletePreferenceColumn, 25, Style.Unit.PCT);

        // don't show loading indicator
        yamlPreferenceCellTable.setLoadingIndicator(null);
    }

    /** {@inheritDoc} */
    @Override
    public void setPairs(@NotNull List<YamlPreference> pairs) {
        this.yamlPreferenceCellTable.setRowData(pairs);
    }

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

    @UiHandler("addUrl")
    public void onAddUrlClicked(ClickEvent event) {
        delegate.onAddUrlClicked();
    }
}