1/*
2 * Copyright (c) 2010, 2015, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation.
8 *
9 * This code is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 */
23
24/*
25 * @test
26 * @bug 6978482 7025987
27 * @summary Tests unchecked casts
28 * @author Sergey Malenkov
29 * @modules java.desktop/com.sun.java.swing.plaf.motif
30 *          java.desktop/com.sun.java.swing.plaf.windows
31 *          java.desktop/sun.swing.plaf.synth
32 */
33
34import com.sun.java.swing.plaf.motif.MotifBorders;
35import com.sun.java.swing.plaf.windows.WindowsBorders;
36
37import java.awt.Color;
38import java.awt.Component;
39import java.awt.Font;
40import java.awt.Graphics;
41import java.awt.image.BufferedImage;
42
43import javax.swing.ActionMap;
44import javax.swing.JFileChooser;
45import javax.swing.JLabel;
46import javax.swing.JToggleButton;
47import javax.swing.JToolBar;
48import javax.swing.border.BevelBorder;
49import javax.swing.border.Border;
50import javax.swing.border.CompoundBorder;
51import javax.swing.border.EmptyBorder;
52import javax.swing.border.EtchedBorder;
53import javax.swing.border.LineBorder;
54import javax.swing.border.MatteBorder;
55import javax.swing.border.SoftBevelBorder;
56import javax.swing.border.TitledBorder;
57import javax.swing.plaf.ActionMapUIResource;
58import javax.swing.plaf.BorderUIResource;
59import javax.swing.plaf.synth.SynthLookAndFeel;
60import javax.swing.plaf.basic.BasicBorders;
61import javax.swing.plaf.basic.BasicToolBarUI;
62import javax.swing.plaf.metal.MetalBorders;
63import javax.swing.plaf.metal.MetalComboBoxEditor;
64import javax.swing.plaf.nimbus.NimbusLookAndFeel;
65
66import sun.swing.plaf.synth.SynthFileChooserUI;
67
68public class Test6978482 {
69    private static final JLabel LABEL = new JLabel();
70    private static final JToolBar TOOLBAR = new JToolBar(); // init non-rollover border
71
72    private static final Border[] BORDERS = {
73            new MotifBorders.BevelBorder(true, Color.BLACK, Color.WHITE),
74            new MotifBorders.ButtonBorder(Color.CYAN, Color.MAGENTA, Color.YELLOW, Color.BLACK),
75            new MotifBorders.FocusBorder(Color.BLACK, Color.WHITE),
76            new MotifBorders.FrameBorder(LABEL),
77            new MotifBorders.MenuBarBorder(Color.CYAN, Color.MAGENTA, Color.YELLOW, Color.BLACK),
78            new MotifBorders.MotifPopupMenuBorder(new Font(null, Font.PLAIN, 10), Color.CYAN, Color.MAGENTA, Color.YELLOW, Color.BLACK),
79            new MotifBorders.ToggleButtonBorder(Color.CYAN, Color.MAGENTA, Color.YELLOW, Color.BLACK),
80
81            new WindowsBorders.ProgressBarBorder(Color.BLACK, Color.WHITE),
82            new WindowsBorders.ToolBarBorder(Color.BLACK, Color.WHITE),
83            //- WindowsInternalFrameUI.XPBorder is not accessible: check it visually
84            //? WindowsTableHeaderUI.IconBorder is not accessible: check it visually
85            //- XPStyle.XPEmptyBorder is not accessible: check it visually
86            //- XPStyle.XPFillBorder is not accessible: check it visually
87            //- XPStyle.XPImageBorder is not accessible: check it visually
88
89            new BevelBorder(BevelBorder.RAISED),
90            new CompoundBorder(),
91            new EmptyBorder(1, 2, 3, 4),
92            new EtchedBorder(),
93            new LineBorder(Color.BLACK, 2, true),
94            new MatteBorder(1, 2, 3, 4, Color.BLACK),
95            new SoftBevelBorder(BevelBorder.LOWERED),
96            new TitledBorder("4856008"),
97
98            new BorderUIResource(new EmptyBorder(1, 2, 3, 4)),
99
100            new BasicBorders.ButtonBorder(Color.CYAN, Color.MAGENTA, Color.YELLOW, Color.BLACK),
101            new BasicBorders.FieldBorder(Color.CYAN, Color.MAGENTA, Color.YELLOW, Color.BLACK),
102            new BasicBorders.MarginBorder(),
103            new BasicBorders.MenuBarBorder(Color.BLACK, Color.WHITE),
104            new BasicBorders.RadioButtonBorder(Color.CYAN, Color.MAGENTA, Color.YELLOW, Color.BLACK),
105            //+ BasicBorders.RolloverMarginBorder:
106            new ToolBar().getRolloverMarginBorder(),
107            new BasicBorders.SplitPaneBorder(Color.BLACK, Color.WHITE),
108            //+ BasicBorders.SplitPaneDividerBorder:
109            BasicBorders.getSplitPaneDividerBorder(),
110            new BasicBorders.ToggleButtonBorder(Color.CYAN, Color.MAGENTA, Color.YELLOW, Color.BLACK),
111
112            new MetalBorders.ButtonBorder(),
113            //- MetalBorders.DialogBorder is not accessible: check it visually
114            new MetalBorders.Flush3DBorder(),
115            //- MetalBorders.FrameBorder is not accessible: check it visually
116            new MetalBorders.InternalFrameBorder(),
117            new MetalBorders.MenuBarBorder(),
118            new MetalBorders.MenuItemBorder(),
119            new MetalBorders.OptionDialogBorder(),
120            new MetalBorders.PaletteBorder(),
121            new MetalBorders.PopupMenuBorder(),
122            //- MetalBorders.RolloverMarginBorder is not accessible: check it visually
123            new MetalBorders.ScrollPaneBorder(),
124            new MetalBorders.TableHeaderBorder(),
125            new MetalBorders.ToolBarBorder(),
126            //+ MetalComboBoxEditor.EditorBorder:
127            new MetalEditor().getEditorBorder(),
128
129            //- SynthBorder is not accessible: check it visually
130            //- SynthScrollPaneUI.ViewportBorder is not accessible: check it visually
131
132            //? CSSBorder is not accessible: check it visually
133            //? CommentView.CommentBorder is not accessible: check it visually
134            //- HiddenTagView.EndTagBorder is not accessible: check it visually
135            //- HiddenTagView.StartTagBorder is not accessible: check it visually
136
137            //+ SynthFileChooserUI.UIBorder:
138            new SynthFileChooser().getUIBorder(),
139
140            //+ LoweredBorder:
141            new NimbusLookAndFeel().getDefaults().getBorder("TitledBorder.border"),
142    };
143
144    public static void main(String[] args) {
145        Component c = new Component() {};
146        c.setBackground(Color.WHITE);
147        c.setForeground(Color.BLACK);
148        Graphics g = new BufferedImage(1024, 768, BufferedImage.TYPE_INT_RGB).getGraphics();
149        g.setClip(0, 0, 1024, 768);
150        for (Border border : BORDERS) {
151            System.out.println(border.getClass());
152            border.getBorderInsets(c);
153            border.paintBorder(c, g, 0, 0, 1024, 768);
154        }
155    }
156
157    // This class is used to get the instance of BasicBorders.RolloverMarginBorder
158    private static class ToolBar extends BasicToolBarUI {
159        private Border getRolloverMarginBorder() {
160            JToggleButton button = new JToggleButton();
161            CompoundBorder border = (CompoundBorder) getNonRolloverBorder(button);
162            return border.getInsideBorder();
163        }
164    }
165
166    // This class is used to get the instance of MetalComboBoxEditor.EditorBorder
167    private static class MetalEditor extends MetalComboBoxEditor {
168        private Border getEditorBorder() {
169            return editor.getBorder();
170        }
171    }
172
173    // This class is used to get the instance of SynthFileChooserUI.UIBorder
174    private static class SynthFileChooser extends SynthFileChooserUI {
175        private static final JFileChooser CHOOSER = new JFileChooser();
176        private String name;
177
178        private SynthFileChooser() {
179            super(CHOOSER);
180        }
181
182        private Border getUIBorder() {
183            new SynthLookAndFeel().initialize();
184            CHOOSER.setBorder(null);
185            installDefaults(CHOOSER);
186            return CHOOSER.getBorder();
187        }
188
189        @Override
190        protected ActionMap createActionMap() {
191            return new ActionMapUIResource();
192        }
193
194        @Override
195        public String getFileName() {
196            return this.name;
197        }
198
199        @Override
200        public void setFileName(String name) {
201            this.name = name;
202        }
203    }
204}
205