/**
 * Distributable under LGPL license.
 * See terms of license at gnu.org.
 *
 * Copyright (C)
 * <a href="http://www.inab.org">Spanish National Institute of Bioinformatics (INB)</a>
 * <a href="http://www.bsc.es">Barcelona Supercomputing Center (BSC)</a>
 * <a href="http://inb.bsc.es">Computational Node 6</a>
 */

package org.inb.biomoby.client.gui.swing;

import java.awt.Color;
import org.inb.biomoby.client.gui.swing.border.*;
import java.awt.Graphics;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.StringReader;
import javax.swing.JLabel;
import javax.swing.UIManager;
import javax.swing.border.Border;

/**
 * @author Dmitry Repchevsky
 */

public class RoundedMultilineLabel extends JLabel
{
    private final static int BORDER_WIDTH = 4;

    private RoundedBorder border;

    public RoundedMultilineLabel()
    {
        this("");
    }
    
    public RoundedMultilineLabel(String text)
    {
        super(text);
        super.setBorder(border = new RoundedBorder(BORDER_WIDTH, Color.DARK_GRAY));
    }
    
    @Override
    public void setText(String text)
    {
        super.setText(getMultilineText(text));
    }

    /**
     * Prevent border changing...
     */
    @Override public void setBorder(Border border) {}

    @Override
    public void paintComponent(Graphics g)
    {
        g.setColor(getBackground());
        g.fillRoundRect(0, 0, this.getWidth() - 1, this.getHeight() - 1, border.ancle, border.ancle);
        
        super.paintComponent(g);
    }

    private String getMultilineText(String s)
    {
        if (s != null && s.length() > 0)
        {
            Color background = this.getBackground();
            if (background == null)
            {
                background = UIManager.getLookAndFeel().getDefaults().getColor("Label.background");

                if (background == null)
                {
                    background = Color.WHITE;
                }
            }

            Color foreground = this.getForeground();
            if (foreground == null)
            {
                foreground = UIManager.getLookAndFeel().getDefaults().getColor("Label.foreground");

                if (foreground == null)
                {
                    foreground = Color.BLACK;
                }
            }

            StringBuilder sb = new StringBuilder();
            sb.append("<html>");
            sb.append("<font style='font-weight: normal;");
            sb.append("background-color: rgb(");
            sb.append(background.getRed()).append(",").append(background.getGreen()).append(",").append(background.getBlue()).append(");");
            sb.append("color: rgb(");
            sb.append(foreground.getRed()).append(",").append(foreground.getGreen()).append(",").append(foreground.getBlue()).append(");");
            sb.append("'>");

            BufferedReader reader = new BufferedReader(new StringReader(s));

            try
            {
                String line;
                while((line = reader.readLine()) != null)
                {
                    sb.append(line);
                    sb.append("<br/>");
                }
            }
            catch(IOException ex) {}

            sb.append("</font>");
            sb.append("</html>");

            return sb.toString();
        }

        return s;
    }
}
