/******************************************************************************* * Copyright (c) 2016 Eurotech and/or its affiliates * * 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: * Eurotech *******************************************************************************/ package org.eclipse.kura.web.client.ui.CloudServices; import java.util.logging.Level; import java.util.logging.Logger; import org.eclipse.kura.web.client.messages.Messages; import org.eclipse.kura.web.shared.model.GwtCloudConnectionEntry; import org.gwtbootstrap3.client.ui.Alert; import org.gwtbootstrap3.client.ui.Button; import org.gwtbootstrap3.client.ui.ButtonGroup; import org.gwtbootstrap3.client.ui.Modal; import org.gwtbootstrap3.client.ui.ModalBody; import org.gwtbootstrap3.client.ui.ModalFooter; import org.gwtbootstrap3.client.ui.ModalHeader; import org.gwtbootstrap3.client.ui.Panel; import org.gwtbootstrap3.client.ui.TabListItem; import org.gwtbootstrap3.client.ui.html.Span; 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.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.user.client.Timer; import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.Widget; public class CloudServicesUi extends Composite { private static final Logger logger = Logger.getLogger(CloudServicesUi.class.getSimpleName()); private static final Messages MSG = GWT.create(Messages.class); private static CloudServicesUiUiBinder uiBinder = GWT.create(CloudServicesUiUiBinder.class); private static CloudInstancesUi cloudInstancesBinder; private static CloudServiceConfigurationsUi cloudServiceConfigurationsBinder; private GwtCloudConnectionEntry currentlySelectedEntry; private TabListItem currentlySelectedTab; interface CloudServicesUiUiBinder extends UiBinder<Widget, CloudServicesUi> { } @UiField Panel cloudInstancesPanel; @UiField Panel cloudConfigurationsPanel; @UiField Alert notification; public CloudServicesUi() { logger.log(Level.FINER, "Initializing StatusPanelUi..."); initWidget(uiBinder.createAndBindUi(this)); cloudInstancesBinder = new CloudInstancesUi(this); this.cloudInstancesPanel.add(cloudInstancesBinder); cloudServiceConfigurationsBinder = new CloudServiceConfigurationsUi(this); this.cloudConfigurationsPanel.add(cloudServiceConfigurationsBinder); } public void refresh() { cloudInstancesBinder.loadData(); // setVisibility(); } protected void refreshInternal() { cloudInstancesBinder.refresh(); this.currentlySelectedEntry = cloudInstancesBinder.getSelectedObject(); this.currentlySelectedTab = cloudServiceConfigurationsBinder.getSelectedTab(); setVisibility(); } public void setDirty(boolean dirty) { cloudServiceConfigurationsBinder.setDirty(dirty); } public boolean isDirty() { return cloudServiceConfigurationsBinder.isDirty(); } // // Private methods // private void setVisibility() { if (cloudInstancesBinder.getTableSize() == 0) { cloudInstancesBinder.setVisibility(false); cloudServiceConfigurationsBinder.setVisibility(false); this.cloudConfigurationsPanel.setVisible(false); this.notification.setVisible(true); this.notification.setText(MSG.noConnectionsAvailable()); } else { cloudInstancesBinder.setVisibility(true); cloudServiceConfigurationsBinder.setVisibility(true); this.cloudConfigurationsPanel.setVisible(true); this.notification.setVisible(false); } } protected void onSelectionChange() { GwtCloudConnectionEntry selectedInstanceEntry = cloudInstancesBinder.getSelectedObject(); if (!isDirty()) { if (selectedInstanceEntry != null) { this.currentlySelectedEntry = selectedInstanceEntry; cloudServiceConfigurationsBinder.selectConnection(selectedInstanceEntry); } } else { if (selectedInstanceEntry != this.currentlySelectedEntry) { showDirtyModal(); } } } protected void onTabSelectionChange(TabListItem newTab) { this.currentlySelectedTab = cloudServiceConfigurationsBinder.getSelectedTab(); if (isDirty() && newTab != this.currentlySelectedTab) { showDirtyModal(); } else { this.currentlySelectedTab = newTab; cloudServiceConfigurationsBinder.setSelectedTab(this.currentlySelectedTab); } } private void showDirtyModal() { final Modal modal = new Modal(); ModalHeader header = new ModalHeader(); header.setTitle(MSG.confirm()); modal.add(header); ModalBody body = new ModalBody(); body.add(new Span(MSG.deviceConfigDirty())); modal.add(body); ModalFooter footer = new ModalFooter(); ButtonGroup group = new ButtonGroup(); Button yes = new Button(); yes.setText(MSG.yesButton()); yes.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { modal.hide(); GwtCloudConnectionEntry selectedInstanceEntry = cloudInstancesBinder.getSelectedObject(); if (selectedInstanceEntry != null) { CloudServicesUi.this.currentlySelectedEntry = selectedInstanceEntry; cloudServiceConfigurationsBinder.selectConnection(selectedInstanceEntry); } CloudServiceConfigurationUi dirtyConfig = cloudServiceConfigurationsBinder.getDirtyCloudConfiguration(); if (dirtyConfig != null) { dirtyConfig.resetVisualization(); } setDirty(false); } }); group.add(yes); Button no = new Button(); no.setText(MSG.noButton()); no.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { cloudInstancesBinder.setSelected(CloudServicesUi.this.currentlySelectedEntry); CloudServicesUi.this.currentlySelectedTab.showTab(); modal.hide(); } }); group.add(no); footer.add(group); modal.add(footer); modal.show(); } protected void refresh(int delay) { Timer timer = new Timer() { @Override public void run() { refresh(); } }; timer.schedule(delay); } }