/******************************************************************************* * Copyright (c) 2012-2016 Codenvy, S.A. * 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: * Codenvy, S.A. - initial API and implementation *******************************************************************************/ package org.eclipse.che.plugin.docker.ext.client.manage; import com.google.gwt.cell.client.ButtonCell; import com.google.gwt.cell.client.Cell; import com.google.gwt.cell.client.FieldUpdater; import com.google.gwt.cell.client.TextCell; 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.Button; import com.google.gwt.user.client.ui.DockLayoutPanel; import com.google.gwt.user.client.ui.UIObject; import com.google.gwt.user.client.ui.Widget; import com.google.inject.Inject; import org.eclipse.che.ide.ui.cellview.CellTableResources; import org.eclipse.che.plugin.docker.client.dto.AuthConfig; import javax.validation.constraints.NotNull; import java.util.ArrayList; import java.util.Collection; import java.util.List; /** * Implementation of {@link CredentialsPreferencesView} * * @author Sergii Leschenko */ public class CredentialsPreferencesViewImpl implements CredentialsPreferencesView { interface CredentialsPreferencesViewImplUiBinder extends UiBinder<DockLayoutPanel, CredentialsPreferencesViewImpl> { } private final DockLayoutPanel rootElement; private ActionDelegate delegate; @UiField Button addRegistryButton; @UiField Button addAccountButton; @UiField(provided = true) CellTable<AuthConfig> keys; @Inject public CredentialsPreferencesViewImpl(CredentialsPreferencesViewImplUiBinder uiBinder, CellTableResources res) { initCredentialsTable(res); rootElement = uiBinder.createAndBindUi(this); } private void initCredentialsTable(CellTable.Resources res) { keys = new CellTable<>(15, res); Column<AuthConfig, String> serverAddressColumn = new Column<AuthConfig, String>(new TextCell()) { @Override public String getValue(AuthConfig object) { return object.getServeraddress(); } @Override public void render(Cell.Context context, AuthConfig object, SafeHtmlBuilder sb) { sb.appendHtmlConstant("<div id=\"" + UIObject.DEBUG_ID_PREFIX + "preferences-docker-credentials-cellTable-serveraddress-" + context.getIndex() + "\">"); super.render(context, object, sb); } }; serverAddressColumn.setSortable(true); Column<AuthConfig, String> editColumn = new Column<AuthConfig, String>(new ButtonCell()) { @Override public String getValue(AuthConfig object) { return "Edit"; } @Override public void render(Cell.Context context, AuthConfig object, SafeHtmlBuilder sb) { if (object != null) { sb.appendHtmlConstant("<div id=\"" + UIObject.DEBUG_ID_PREFIX + "preferences-docker-credentials-cellTable-edit-" + context.getIndex() + "\">"); super.render(context, object, sb); } } }; // Creates handler on button clicked editColumn.setFieldUpdater(new FieldUpdater<AuthConfig, String>() { @Override public void update(int index, AuthConfig object, String value) { delegate.onEditClicked(object); } }); Column<AuthConfig, String> deleteColumn = new Column<AuthConfig, String>(new ButtonCell()) { @Override public String getValue(AuthConfig object) { return "Delete"; } @Override public void render(Cell.Context context, AuthConfig object, SafeHtmlBuilder sb) { if (object != null) { sb.appendHtmlConstant( "<div id=\"" + UIObject.DEBUG_ID_PREFIX + "preferences-docker-credentials-cellTable-delete-" + context.getIndex() + "\">"); super.render(context, object, sb); } } }; // Creates handler on button clicked deleteColumn.setFieldUpdater(new FieldUpdater<AuthConfig, String>() { @Override public void update(int index, AuthConfig object, String value) { delegate.onDeleteClicked(object); } }); keys.addColumn(serverAddressColumn, "Server Address"); keys.addColumn(editColumn, "");//Do not show label for edit column keys.addColumn(deleteColumn, "");//Do not show label for delete column keys.setColumnWidth(serverAddressColumn, 70, Style.Unit.PCT); keys.setColumnWidth(editColumn, 20, Style.Unit.PX); keys.setColumnWidth(deleteColumn, 20, Style.Unit.PX); // don't show loading indicator keys.setLoadingIndicator(null); } @Override public void setKeys(@NotNull Collection<AuthConfig> keys) { List<AuthConfig> appList = new ArrayList<>(); for (AuthConfig key : keys) { appList.add(key); } this.keys.setRowData(appList); } @Override public void setDelegate(ActionDelegate delegate) { this.delegate = delegate; } @Override public Widget asWidget() { return rootElement; } @UiHandler("addRegistryButton") void onSaveRegistryClicked(ClickEvent event) { delegate.onAddClicked(); } @UiHandler("addAccountButton") void onSaveAccountClicked(ClickEvent event) { delegate.onAddAccountClicked(); } }