/** * DataCleaner (community edition) * Copyright (C) 2014 Neopost - Customer Information Management * * This copyrighted material is made available to anyone wishing to use, modify, * copy, or redistribute it subject to the terms and conditions of the GNU * Lesser General Public License, as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License * for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this distribution; if not, write to: * Free Software Foundation, Inc. * 51 Franklin Street, Fifth Floor * Boston, MA 02110-1301 USA */ package org.datacleaner.widgets; import java.awt.Cursor; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import javax.swing.JLabel; import org.datacleaner.bootstrap.WindowContext; import org.datacleaner.configuration.DataCleanerConfiguration; import org.datacleaner.configuration.RemoteServerConfiguration; import org.datacleaner.configuration.RemoteServerState; import org.datacleaner.configuration.RemoteServerStateListener; import org.datacleaner.descriptors.RemoteDescriptorProvider; import org.datacleaner.panels.DataCloudInformationPanel; import org.datacleaner.panels.RightInformationPanel; import org.datacleaner.user.UserPreferences; import org.datacleaner.util.IconUtils; import org.datacleaner.util.ImageManager; import org.datacleaner.util.WidgetUtils; import org.datacleaner.windows.AbstractWindow; /** * Status Label for DataCloud */ public class DataCloudStatusLabel extends JLabel { private class RemoteServerStateListenerImpl implements RemoteServerStateListener { @Override public void onRemoteServerStateChange(final String remoteServerName, final RemoteServerState state) { if (RemoteDescriptorProvider.DATACLOUD_SERVER_NAME.equals(remoteServerName)) { setIcon(state.getActualState()); _dataCloudInformationPanel.setInformationStatus(state); } } } public static final String PANEL_NAME = "DataCloud"; private final RightInformationPanel _rightPanel; private RemoteServerConfiguration _remoteServerConfiguration; private DataCloudInformationPanel _dataCloudInformationPanel; public DataCloudStatusLabel(final RightInformationPanel rightPanel, final DataCleanerConfiguration configuration, final UserPreferences userPreferences, final WindowContext windowContext, final AbstractWindow owner) { super(PANEL_NAME); _rightPanel = rightPanel; setForeground(WidgetUtils.BG_COLOR_BRIGHTEST); _remoteServerConfiguration = configuration.getEnvironment().getRemoteServerConfiguration(); _dataCloudInformationPanel = new DataCloudInformationPanel(rightPanel, configuration, userPreferences, windowContext, owner); _rightPanel.addTabToPane(PANEL_NAME, _dataCloudInformationPanel); _remoteServerConfiguration.addListener(new RemoteServerStateListenerImpl()); final RemoteServerState actualServerStateOfDataCloud = _remoteServerConfiguration.getActualState(RemoteDescriptorProvider.DATACLOUD_SERVER_NAME); if (actualServerStateOfDataCloud == null) { setIcon(RemoteServerState.State.NOT_CONNECTED); _dataCloudInformationPanel .setInformationStatus(new RemoteServerState(RemoteServerState.State.NOT_CONNECTED, null, null)); } else { setIcon(actualServerStateOfDataCloud.getActualState()); _dataCloudInformationPanel.setInformationStatus(actualServerStateOfDataCloud); } setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); addMouseListener(new MouseAdapter() { @Override public void mouseClicked(final MouseEvent e) { onMouseClick(); } }); } private void setIcon(final RemoteServerState.State state) { switch (state) { case NOT_CONNECTED: setIcon(ImageManager.get().getImageIcon(IconUtils.CLOUD_GREY, IconUtils.ICON_SIZE_SMALL)); break; case NO_CREDIT: setIcon(ImageManager.get().getImageIcon(IconUtils.CLOUD_ORANGE, IconUtils.ICON_SIZE_SMALL)); break; case OK: setIcon(ImageManager.get().getImageIcon(IconUtils.CLOUD_GREEN, IconUtils.ICON_SIZE_SMALL)); break; case ERROR: setIcon(ImageManager.get().getImageIcon(IconUtils.CLOUD_RED, IconUtils.ICON_SIZE_SMALL)); break; default: throw new IllegalArgumentException(); } } private void onMouseClick() { _rightPanel.toggleWindow(PANEL_NAME); } }