All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.datacleaner.panels.NewsChannelPanel Maven / Gradle / Ivy

There is a newer version: 6.0.0
Show newest version
/**
 * 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.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Point;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JComponent;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.ScrollPaneConstants;
import javax.swing.SwingUtilities;

import org.datacleaner.api.ShortNews;
import org.datacleaner.descriptors.RemoteDescriptorProvider;
import org.datacleaner.util.IconUtils;
import org.datacleaner.util.ImageManager;
import org.datacleaner.util.WidgetUtils;
import org.datacleaner.widgets.DCHtmlBox;
import org.datacleaner.widgets.DCLabel;
import org.jdesktop.swingx.VerticalLayout;

/**
 * Panel that shows News form DataCloud
 */
public class NewsChannelPanel extends JPanel {

    private class NewsDCHtmlBox extends DCHtmlBox {
        private final ShortNews.Item _item;
        private final String divStyles =
                "padding: 5px; border-bottom: 1px #DCDCDC solid; margin-right: 15px; background-color: ";
        private final String titleStyles = "font-weight: bold;";
        private final String dateStyles = "font-size: 80%; color: grey;";
        private final String msgStyles = "font-size: 90%;";
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
        private long _lastCheckTime;

        public NewsDCHtmlBox(final long lastCheck, final ShortNews.Item item) {
            super(null);
            _item = item;
            _lastCheckTime = lastCheck;
            setContentText();
        }

        private void setLastCheck(final Long lastCheck) {
            _lastCheckTime = lastCheck;
            setContentText();
        }

        private void setContentText() {
            setText("
" + "" + _item .getTitle() + "" + " (" + formatter .format(_item.getDateCreated()) + ")" + "
" + _item .getMessage() + "" + " More." + "
"); } private String getBgColor() { String backgroundItemColor = "#FFFFFF;"; final java.util.Date itemDate = _item.getDateCreated(); if (itemDate.getTime() > _lastCheckTime) { backgroundItemColor = "#F5F5F5;"; } return backgroundItemColor; } } private static final long serialVersionUID = 1L; private final Color _background = WidgetUtils.BG_COLOR_BRIGHTEST; private final Color _foreground = WidgetUtils.BG_COLOR_DARKEST; private final JScrollPane scroll; private final List _newsitems; private final long _lastCheck; private List _newsBoxes = new ArrayList<>(); public NewsChannelPanel(final List newsitems, final long lastCheck) { super(); _newsitems = newsitems; _lastCheck = lastCheck; final JComponent content = createContentPanel(); scroll = new JScrollPane(content); scroll.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED); scroll.getVerticalScrollBar().setUnitIncrement(20); this.setLayout(new BorderLayout()); this.add(scroll); } private JComponent createContentPanel() { final JPanel p = new JPanel() { // this trick effectively makes the panel with fixed width, but flexible height. public Dimension getPreferredSize() { final Dimension s = super.getPreferredSize(); s.width = WIDTH - scroll.getVerticalScrollBar().getWidth() - 50; return s; } }; p.setLayout(new VerticalLayout(5)); p.setBackground(WidgetUtils.BG_COLOR_BRIGHTEST); final DCLabel header = DCLabel.darkMultiLine("News Channel"); header.setFont(WidgetUtils.FONT_HEADER1); header.setIcon(ImageManager.get().getImageIcon(IconUtils.NEWS_CHANNEL_TITLE_ICON)); p.add(header); if (_newsitems == null) { p.add(createWarningLabel("DataCleaner has a problem to connect to the server.")); } else { if (_newsitems.size() == 0) { p.add(createWarningLabel("You have not received any News.")); } else { for (int i = 0; i < _newsitems.size(); i++) { final NewsDCHtmlBox newsDCHtmlBox = new NewsDCHtmlBox(_lastCheck, _newsitems.get(i)); _newsBoxes.add(newsDCHtmlBox); p.add(newsDCHtmlBox); } } } return p; } public void refresh(final long lastCheck) { for (final NewsDCHtmlBox box : _newsBoxes) { box.setLastCheck(lastCheck); } this.repaint(); } public void scrollToTop() { SwingUtilities.invokeLater(() -> scroll.getViewport().setViewPosition(new Point(0, 0))); } @Override public Color getBackground() { return _background; } @Override public Color getForeground() { return _foreground; } private DCLabel createWarningLabel(final String warningText) { final DCLabel label = DCLabel.darkMultiLine(warningText); label.setFont(WidgetUtils.FONT_HEADER2); return label; } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy