/**
* 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.panels;
import java.awt.Color;
import javax.swing.Box;
import javax.swing.JButton;
import javax.swing.JPanel;
import org.datacleaner.bootstrap.WindowContext;
import org.datacleaner.configuration.DataCleanerConfiguration;
import org.datacleaner.configuration.RemoteServerState;
import org.datacleaner.user.UserPreferences;
import org.datacleaner.util.IconUtils;
import org.datacleaner.util.ImageManager;
import org.datacleaner.util.WidgetFactory;
import org.datacleaner.util.WidgetUtils;
import org.datacleaner.widgets.DCHtmlBox;
import org.datacleaner.widgets.DCLabel;
import org.datacleaner.widgets.DataCloudStatusLabel;
import org.datacleaner.windows.AbstractWindow;
import org.datacleaner.windows.DataCloudLogInWindow;
import org.jdesktop.swingx.VerticalLayout;
/**
* Panel that shows information DataCloud status
*/
public class DataCloudInformationPanel extends JPanel {
private static final long serialVersionUID = 1L;
private final Color _background = WidgetUtils.BG_COLOR_BRIGHTEST;
private final Color _foreground = WidgetUtils.BG_COLOR_DARKEST;
private final DCLabel text;
private final JButton optionButton;
public DataCloudInformationPanel(final RightInformationPanel rightPanel,
final DataCleanerConfiguration configuration, final UserPreferences userPreferences,
final WindowContext windowContext, final AbstractWindow owner) {
super();
optionButton = WidgetFactory.createDefaultButton("Sign in to DataCloud", IconUtils.MENU_OPTIONS);
optionButton.addActionListener(e -> {
rightPanel.toggleWindow(DataCloudStatusLabel.PANEL_NAME);
WidgetUtils.invokeSwingAction(() -> {
if (DataCloudLogInWindow.isRelevantToShow(userPreferences, configuration, false)) {
final DataCloudLogInWindow dataCloudLogInWindow =
new DataCloudLogInWindow(configuration, userPreferences, windowContext, owner);
dataCloudLogInWindow.open();
}
});
});
setLayout(new VerticalLayout(10));
final DCLabel header = DCLabel.darkMultiLine("DataCloud status");
header.setFont(WidgetUtils.FONT_HEADER1);
header.setIcon(ImageManager.get().getImageIcon("images/menu/datacloud.png"));
add(header);
text = DCLabel.darkMultiLine("");
add(text);
add(Box.createVerticalBox());
add(optionButton);
add(Box.createVerticalBox());
final DCHtmlBox htmlBoxDataCloud =
new DCHtmlBox("More information on <a href=\"http://datacleaner.org\">datacleaner.org</a>");
add(htmlBoxDataCloud);
}
public void setInformationStatus(final RemoteServerState remoteServerState) {
optionButton.setVisible(false);
text.setText("");
String panelContent = "";
if (remoteServerState.getActualState() == RemoteServerState.State.OK
|| remoteServerState.getActualState() == RemoteServerState.State.NO_CREDIT) {
panelContent = addLine(panelContent, "Connected as " + remoteServerState.getRealName());
panelContent = addLine(panelContent, "(email: " + remoteServerState.getEmail() + ")");
if (remoteServerState.getCredit() > 0) {
panelContent = addLine(panelContent,
"Your credit balance: " + String.format("%,d", remoteServerState.getCredit()));
} else {
panelContent = addLine(panelContent,
"Your credit: <font color=\"red\">" + String.format("%,d", remoteServerState.getCredit())
+ " </font>");
}
if (!remoteServerState.isEmailConfirmed()) {
panelContent = addLine(panelContent, "Email is not confirmed.");
}
}
if (remoteServerState.getActualState() == RemoteServerState.State.NOT_CONNECTED) {
panelContent = addLine(panelContent, "Datacloud is not configured.");
panelContent = addLine(panelContent, "You can set your credentials here.");
optionButton.setVisible(true);
}
if (remoteServerState.getActualState() == RemoteServerState.State.ERROR) {
panelContent = addLine(panelContent, "Cannot connect as " + remoteServerState.getEmail());
panelContent =
addLine(panelContent, "<font color=\"red\">" + remoteServerState.getErrorMessage() + " </font>");
}
text.setText(panelContent);
}
@Override
public Color getBackground() {
return _background;
}
@Override
public Color getForeground() {
return _foreground;
}
private String addLine(final String text, final String newLine) {
return text + "<p>" + newLine + "</p>";
}
}