import java.awt.Color;
import java.awt.Container;
import java.awt.Font;
import java.awt.GraphicsEnvironment;
import java.util.Arrays;
import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;

/**
 * <p>A sample app to display Myanmar characters in two different fonts:
 * "Myanmar Text" (installed by default on Windows 10) and
 * "Padauk" (referenced in bug description).</p>
 * <p>See
 * <a href="https://bugs.openjdk.java.net/browse/JDK-6725387">JDK-6725387</a>:
 * Myanmar Unicode 5.1 OpenType fonts don't render correctly</p>
 */
public class MyanmarOpenTypeTest {
    private static final String TEXT = "\u1019\u103c\u1014\u103a\u1019\u102c"
                                     + "\u1021\u1000\u1039\u1001\u101b\u102c";

    private final String[] fontFamilyNames;

    public static void main(String[] args) {
        SwingUtilities.invokeLater(MyanmarOpenTypeTest::createUI);
    }

    private static void createUI() {
        new MyanmarOpenTypeTest();
    }

    private MyanmarOpenTypeTest() {
        final JFrame frame = new JFrame("Myanmar OpenType Test");
        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

        fontFamilyNames = GraphicsEnvironment
                          .getLocalGraphicsEnvironment()
                          .getAvailableFontFamilyNames();

        JPanel main = new JPanel();
        main.setLayout(new BoxLayout(main, BoxLayout.Y_AXIS));
        main.setBorder(BorderFactory.createEmptyBorder(7, 7, 7, 7));
        createTextComponent(main, "Myanmar Text");
        main.add(Box.createVerticalStrut(14));
        createTextComponent(main, "Padauk");

        frame.getContentPane().add(main);

        frame.pack();
        frame.setLocationByPlatform(true);
        frame.setVisible(true);
    }

    private void createTextComponent(final Container container,
                                     final String fontName) {
        JLabel fontLabel = new JLabel(fontName + ":");
        boolean fontInstalled = isFontInstalled(fontName);
        JLabel installedLabel = new JLabel(fontInstalled
                                           ? "Font installed"
                                           : "Font NOT installed");
        installedLabel.setForeground(fontInstalled
                                     ? Color.GREEN.darker() : Color.RED);
        JTextField textField = new JTextField(TEXT);
        textField.setFont(new Font(fontName, Font.PLAIN, 40));
        fontLabel.setLabelFor(textField);

        container.add(fontLabel);
        container.add(textField);
        container.add(installedLabel);
    }

    private boolean isFontInstalled(final String fontName) {
        return Arrays.asList(fontFamilyNames).contains(fontName);
    }
}
