    001    //$HeadURL: https://svn.wald.intevation.org/svn/deegree/base/branches/2.4_testing/src/org/deegree/tools/legend/LecGUI.java $
    002    /*----------------------------------------------------------------------------
    003     This file is part of deegree, http://deegree.org/
    004     Copyright (C) 2001-2009 by:
    005       Department of Geography, University of Bonn
    006     and
    007       lat/lon GmbH
    008
    009     This library is free software; you can redistribute it and/or modify it under
    010     the terms of the GNU Lesser General Public License as published by the Free
    011     Software Foundation; either version 2.1 of the License, or (at your option)
    012     any later version.
    013     This library is distributed in the hope that it will be useful, but WITHOUT
    014     ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
    015     FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
    016     details.
    017     You should have received a copy of the GNU Lesser General Public License
    018     along with this library; if not, write to the Free Software Foundation, Inc.,
    019     59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
    020
    021     Contact information:
    022
    023     lat/lon GmbH
    024     Aennchenstr. 19, 53177 Bonn
    025     Germany
    026     http://lat-lon.de/
    027
    028     Department of Geography, University of Bonn
    029     Prof. Dr. Klaus Greve
    030     Postfach 1147, 53001 Bonn
    031     Germany
    032     http://www.geographie.uni-bonn.de/deegree/
    033
    034     e-mail: info@deegree.org
    035    ----------------------------------------------------------------------------*/
    036
    037    package org.deegree.tools.legend;
    038
    039    import java.awt.BorderLayout;
    040    import java.awt.Color;
    041    import java.awt.Dimension;
    042    import java.awt.Font;
    043    import java.awt.GridBagConstraints;
    044    import java.awt.GridBagLayout;
    045    import java.awt.Insets;
    046    import java.awt.event.ActionEvent;
    047    import java.awt.event.ActionListener;
    048    import java.io.File;
    049
    050    import javax.swing.JButton;
    051    import javax.swing.JComboBox;
    052    import javax.swing.JDialog;
    053    import javax.swing.JFileChooser;
    054    import javax.swing.JFrame;
    055    import javax.swing.JLabel;
    056    import javax.swing.JMenu;
    057    import javax.swing.JMenuBar;
    058    import javax.swing.JMenuItem;
    059    import javax.swing.JOptionPane;
    060    import javax.swing.JPanel;
    061    import javax.swing.JScrollPane;
    062    import javax.swing.JSpinner;
    063    import javax.swing.JTextArea;
    064    import javax.swing.JTextField;
    065    import javax.swing.border.TitledBorder;
    066
    067    import org.deegree.framework.log.ILogger;
    068    import org.deegree.framework.log.LoggerFactory;
    069
    070    /**
    071     * This GUI is for creating Legend Element, which are small thumbnails with textlabel and title
    072     * showing the defined styles from a SLD.
    073     *
    074     * @author <a href="mailto:poth@lat-lon.de">Andreas Poth </a>
    075     * @author last edited by: $Author:wanhoff$
    076     *
    077     * @version $Revision: 18195 $, $Date:26.03.2007$
    078     */
    079    public class LecGUI extends JPanel {
    080
    081        private static final long serialVersionUID = -8887936196797987954L;
    082
    083        private static final ILogger LOG = LoggerFactory.getLogger( LecGUI.class );
    084
    085        private static String TITLE = "LEC LegendElementCreator GUI - v1.0.1";
    086
    087        private String lastDir = ".";
    088
    089        private static String DEFAULTFORMAT = "png";
    090
    091        private static String DEFAULTCOLOR = "white";
    092
    093        private static int DEFAULTWIDTH = 40;
    094
    095        private static int DEFAULTHEIGHT = 40;
    096
    097        private static String[] POSSIBLE_OUTPUT_FORMAT = { "bmp", "gif", "jpg", "png", "tif" };
    098
    099        private static String[] POSSIBLE_OUTPUT_COLORS = { "transp.", "black", "blue", "cyan", "dark_gray", "gray",
    100                                                          "green", "light_gray", "magenta", "orange", "pink", "red",
    101                                                          "white", "yellow" };
    102
    103        // GUI Variables declaration //
    104        private JPanel filePanel;
    105
    106        private JTextField sourcesld_tf;
    107
    108        private JTextField targetdir_tf;
    109
    110        protected static final String BTOPENSOURCE = "opensourcefile";
    111
    112        protected static final String BTOPENTARGET = "opentargetdir";
    113
    114        private JPanel optionsPanel;
    115
    116        private JComboBox formatCBox;
    117
    118        private JComboBox colorCBox;
    119
    120        private JSpinner widthspinner;
    121
    122        private JSpinner heightspinner;
    123
    124        private JTextField titletextfield;
    125
    126        private JPanel buttonPanel;
    127
    128        private JButton startbutton;
    129
    130        private JButton infobutton;
    131
    132        private JButton exitbutton;
    133
    134        protected static final String BTSTART = "START";
    135
    136        protected static final String BTINFO = "INFO";
    137
    138        protected static final String BTEXIT = "EXIT";
    139
    140        private JPanel debugPanel;
    141
    142        private JTextArea debugTextArea;
    143
    144        private static final String FILEMENU = "File";
    145
    146        protected static final String OPENSOURCEMENUITEM = "Open Source SLD";
    147
    148        protected static final String OPENTARGETMENUITEM = "Open Target Directory";
    149
    150        protected static final String STARTMENUITEM = "Start";
    151
    152        protected static final String EXITMENUITEM = "Exit";
    153
    154        private static final String HELPMENU = "Help";
    155
    156        protected static final String INFOMENUITEM = "Info";
    157
    158        // Action Handler
    159        LecGUIButtonHandler bel = null;
    160
    161        LecGUIMenuHandler mel = null;
    162
    163        /**
    164         * Creates new form LecGUI
    165         *
    166         */
    167        private LecGUI() {
    168
    169            bel = new LecGUIButtonHandler( this );
    170            mel = new LecGUIMenuHandler( this );
    171            initComponents();
    172        }
    173
    174        /**
    175         * initializes the GUI. Calls several methods, which inits the several gui-elements.
    176         */
    177        private void initComponents() {
    178            setLayout( new BorderLayout() );
    179
    180            JPanel northPanel = new JPanel( new BorderLayout() );
    181
    182            JPanel menuPanel = new JPanel( new BorderLayout() );
    183            JMenuBar menubar = initMenuBar();
    184            menuPanel.add( menubar, BorderLayout.BEFORE_FIRST_LINE );
    185            northPanel.add( menuPanel, BorderLayout.NORTH );
    186
    187            JPanel mainPanel = new JPanel( new BorderLayout() );
    188
    189            filePanel = initFilePanel();
    190            filePanel.setBorder( new javax.swing.border.EmptyBorder( new Insets( 10, 10, 10, 10 ) ) );
    191            mainPanel.add( filePanel, BorderLayout.NORTH );
    192
    193            optionsPanel = initOptionsPanel();
    194            optionsPanel.setBorder( new javax.swing.border.EmptyBorder( new Insets( 10, 10, 10, 10 ) ) );
    195            mainPanel.add( optionsPanel, BorderLayout.WEST );
    196
    197            buttonPanel = initButtonPanel();
    198            buttonPanel.setBorder( new javax.swing.border.EmptyBorder( new Insets( 10, 10, 10, 10 ) ) );
    199            mainPanel.add( buttonPanel, BorderLayout.EAST );
    200
    201            northPanel.add( mainPanel, BorderLayout.CENTER );
    202            add( northPanel, BorderLayout.NORTH );
    203
    204            debugPanel = initDebugPanel();
    205            debugPanel.setBorder( new TitledBorder( null, "Debug", TitledBorder.DEFAULT_JUSTIFICATION,
    206                                                    TitledBorder.DEFAULT_POSITION, new java.awt.Font( "Dialog", 0, 10 ) ) );
    207            add( debugPanel, BorderLayout.CENTER );
    208        }
    209
    210        /**
    211         *
    212         * @return JPanel
    213         */
    214        private JPanel initDebugPanel() {
    215            JPanel panel = new JPanel( new BorderLayout() );
    216
    217            JScrollPane jScrollPane1 = new JScrollPane();
    218            jScrollPane1.setVerticalScrollBarPolicy( JScrollPane.VERTICAL_SCROLLBAR_ALWAYS );
    219            jScrollPane1.setHorizontalScrollBarPolicy( JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS );
    220            this.debugTextArea = new JTextArea();
    221            this.debugTextArea.setFont( new java.awt.Font( "Monospaced", 0, 11 ) );
    222            this.debugTextArea.setEditable( false );
    223            this.debugTextArea.setText( "You can mark this debug-output (per mouse or STRG + A)\n"
    224                                        + "and copy it (STRG + C) to the clipboard.\n" );
    225
    226            panel.setLayout( new java.awt.BorderLayout() );
    227
    228            jScrollPane1.setViewportView( debugTextArea );
    229
    230            panel.add( jScrollPane1, java.awt.BorderLayout.CENTER );
    231            panel.setPreferredSize( new Dimension( 150, 150 ) );
    232
    233            return panel;
    234        }
    235
    236        /**
    237         * inits the filepanel, the panel at the top to choose the files.
    238         *
    239         * @return the JPanel containing the gui-elements to open the file and dir.
    240         */
    241        private JPanel initFilePanel() {
    242            JPanel filePanel = new JPanel();
    243            GridBagLayout gridbag = new GridBagLayout();
    244            GridBagConstraints c = new GridBagConstraints();
    245            filePanel.setLayout( gridbag );
    246            c.fill = GridBagConstraints.HORIZONTAL;
    247            c.insets = new Insets( 2, 2, 2, 2 );
    248
    249            JLabel label1 = new JLabel( "Source SLD-File:" );
    250            label1.setFont( new Font( "Dialog", 0, 12 ) );
    251            c.weightx = 0;
    252            c.gridx = 0;
    253            c.gridy = 0;
    254            gridbag.setConstraints( label1, c );
    255            filePanel.add( label1 );
    256
    257            sourcesld_tf = new JTextField();
    258            sourcesld_tf.setColumns( 25 );
    259            c.weightx = 0.5;
    260            c.gridx = 1;
    261            gridbag.setConstraints( sourcesld_tf, c );
    262            filePanel.add( sourcesld_tf );
    263
    264            JButton open1 = new JButton( "open" );
    265            open1.setFont( new Font( "Dialog", 0, 12 ) );
    266            open1.setActionCommand( BTOPENSOURCE );
    267            open1.addActionListener( bel );
    268            c.weightx = 0;
    269            c.gridx = 3;
    270            gridbag.setConstraints( open1, c );
    271            filePanel.add( open1 );
    272
    273            // 2
    274
    275            JLabel label2 = new JLabel( "Target Directory:" );
    276            label2.setFont( new Font( "Dialog", 0, 12 ) );
    277            c.weightx = 0;
    278            c.gridx = 0;
    279            c.gridy = 1;
    280            gridbag.setConstraints( label2, c );
    281            filePanel.add( label2 );
    282
    283            targetdir_tf = new JTextField();
    284            targetdir_tf.setColumns( 25 );
    285            c.weightx = 0.5;
    286            c.gridx = 1;
    287            gridbag.setConstraints( targetdir_tf, c );
    288            filePanel.add( targetdir_tf );
    289
    290            JButton open2 = new JButton( "open" );
    291            open2.setFont( new Font( "Dialog", 0, 12 ) );
    292            open2.setActionCommand( BTOPENTARGET );
    293            open2.addActionListener( bel );
    294            c.weightx = 0;
    295            c.gridx = 3;
    296            gridbag.setConstraints( open2, c );
    297            filePanel.add( open2 );
    298
    299            return filePanel;
    300        }
    301
    302        /**
    303         * inits the option-panel.
    304         *
    305         * @return the option-panel containing the gui-elements to choose the options
    306         */
    307        private JPanel initOptionsPanel() {
    308            JPanel bp = new JPanel();
    309            GridBagLayout gridbag = new GridBagLayout();
    310            GridBagConstraints c = new GridBagConstraints();
    311            bp.setLayout( gridbag );
    312            c.fill = GridBagConstraints.HORIZONTAL;
    313            c.insets = new Insets( 2, 2, 2, 2 );
    314
    315            // FORMAT
    316
    317            JLabel formatlabel = new JLabel( "output format: " );
    318            formatlabel.setFont( new Font( "Dialog", 0, 12 ) );
    319            c.weightx = 0;
    320            c.gridx = 0;
    321            c.gridy = 0;
    322            gridbag.setConstraints( formatlabel, c );
    323            bp.add( formatlabel );
    324
    325            formatCBox = new JComboBox( POSSIBLE_OUTPUT_FORMAT );
    326            formatCBox.setSelectedItem( DEFAULTFORMAT );
    327            formatCBox.setFont( new Font( "Dialog", 0, 12 ) );
    328            c.weightx = 0;
    329            c.gridx = 1;
    330            c.gridy = 0;
    331            gridbag.setConstraints( formatCBox, c );
    332            bp.add( formatCBox );
    333
    334            // BGCOLOR
    335
    336            JLabel colorlabel = new JLabel( "background color: " );
    337            colorlabel.setFont( new Font( "Dialog", 0, 12 ) );
    338            c.weightx = 0;
    339            c.gridx = 0;
    340            c.gridy = 1;
    341            gridbag.setConstraints( colorlabel, c );
    342            bp.add( colorlabel );
    343
    344            colorCBox = new JComboBox( POSSIBLE_OUTPUT_COLORS );
    345            colorCBox.setSelectedItem( DEFAULTCOLOR );
    346            colorCBox.setFont( new Font( "Dialog", 0, 12 ) );
    347            c.weightx = 0;
    348            c.gridx = 1;
    349            c.gridy = 1;
    350            gridbag.setConstraints( colorCBox, c );
    351            bp.add( colorCBox );
    352
    353            // WIDTH
    354
    355            JLabel widthlabel = new JLabel( "width:" );
    356            widthlabel.setFont( new Font( "Dialog", 0, 12 ) );
    357            c.weightx = 0;
    358            c.gridx = 0;
    359            c.gridy = 2;
    360            gridbag.setConstraints( widthlabel, c );
    361            bp.add( widthlabel );
    362
    363            widthspinner = new JSpinner();
    364            widthspinner.setValue( new Integer( DEFAULTWIDTH ) );
    365            c.weightx = 0;
    366            c.gridx = 1;
    367            c.gridy = 2;
    368            gridbag.setConstraints( widthspinner, c );
    369            bp.add( widthspinner );
    370
    371            // HEIGHT
    372
    373            JLabel heightlabel = new JLabel( "height:" );
    374            heightlabel.setFont( new Font( "Dialog", 0, 12 ) );
    375            c.weightx = 0;
    376            c.gridx = 0;
    377            c.gridy = 3;
    378            gridbag.setConstraints( heightlabel, c );
    379            bp.add( heightlabel );
    380
    381            heightspinner = new JSpinner();
    382            heightspinner.setValue( new Integer( DEFAULTHEIGHT ) );
    383            c.weightx = 0;
    384            c.gridx = 1;
    385            c.gridy = 3;
    386            gridbag.setConstraints( heightspinner, c );
    387            bp.add( heightspinner );
    388
    389            // TITLE
    390
    391            JLabel titlelabel = new JLabel( "title:" );
    392            titlelabel.setFont( new Font( "Dialog", 0, 12 ) );
    393            c.weightx = 0;
    394            c.gridx = 0;
    395            c.gridy = 4;
    396            gridbag.setConstraints( titlelabel, c );
    397            bp.add( titlelabel );
    398
    399            titletextfield = new JTextField();
    400            c.weightx = 0;
    401            c.gridx = 1;
    402            c.gridy = 4;
    403            gridbag.setConstraints( titletextfield, c );
    404            bp.add( titletextfield );
    405
    406            return bp;
    407        }
    408
    409        /**
    410         * inits the button-panel
    411         *
    412         * @return the button-panel containing the start, info and exit buttons.
    413         */
    414        private JPanel initButtonPanel() {
    415            JPanel bp = new JPanel();
    416
    417            startbutton = new JButton( "Start" );
    418            infobutton = new JButton( "Info" );
    419            exitbutton = new JButton( "Exit" );
    420
    421            startbutton.setFont( new Font( "Dialog", 0, 12 ) );
    422            infobutton.setFont( new Font( "Dialog", 0, 12 ) );
    423            exitbutton.setFont( new Font( "Dialog", 0, 12 ) );
    424
    425            startbutton.setActionCommand( BTSTART );
    426            startbutton.addActionListener( bel );
    427            infobutton.setActionCommand( BTINFO );
    428            infobutton.addActionListener( bel );
    429            exitbutton.setActionCommand( BTEXIT );
    430            exitbutton.addActionListener( bel );
    431
    432            bp.add( startbutton );
    433            bp.add( infobutton );
    434            bp.add( exitbutton );
    435
    436            return bp;
    437        }
    438
    439        /**
    440         * creates the menubar. called from the main-method, not the constructor.
    441         *
    442         * @return the menubar.
    443         */
    444        private JMenuBar initMenuBar() {
    445            JMenuBar menuBar = new JMenuBar();
    446
    447            // file menu
    448            JMenu menu = new JMenu( FILEMENU );
    449            appendMenuItem( OPENSOURCEMENUITEM, menu );
    450            appendMenuItem( OPENTARGETMENUITEM, menu );
    451            menu.addSeparator();
    452            appendMenuItem( STARTMENUITEM, menu );
    453            menu.addSeparator();
    454            appendMenuItem( EXITMENUITEM, menu );
    455            menuBar.add( menu );
    456
    457            // info / help menu
    458            menu = new JMenu( HELPMENU );
    459            appendMenuItem( INFOMENUITEM, menu );
    460            menuBar.add( menu );
    461
    462            return menuBar;
    463
    464        }
    465
    466        /**
    467         * help method to init the menu
    468         *
    469         * @param name
    470         *            name of the menu-item
    471         * @param menu
    472         *            the menu
    473         */
    474        private void appendMenuItem( String name, JMenu menu ) {
    475            JMenuItem item = menu.add( name );
    476            item.addActionListener( mel );
    477        }
    478
    479        /**
    480         * returns the content of the open dialog source-textfield
    481         *
    482         * @return content of the source-textfield
    483         */
    484        private String getSourceTextfieldContent() {
    485            return this.sourcesld_tf.getText();
    486        }
    487
    488        /**
    489         * @see #getSourceTextfieldContent()
    490         * @param content
    491         *            the text in the source-textfield
    492         */
    493        private void setSourceTextfieldContent( String content ) {
    494            this.sourcesld_tf.setText( content );
    495        }
    496
    497        /**
    498         * returns the content of the open dialog destination/target-textfield
    499         *
    500         * @return content of the targetdir-textfield
    501         */
    502        private String getDestDirTextfieldContent() {
    503            return this.targetdir_tf.getText();
    504        }
    505
    506        /**
    507         * @see #getDestDirTextfieldContent()
    508         * @param content
    509         *            the text in the targetdir-textfield
    510         */
    511        private void setDestdirTextfieldContent( String content ) {
    512            this.targetdir_tf.setText( content );
    513        }
    514
    515        /**
    516         *
    517         * @return the selected format
    518         */
    519        private String getSelectedFormat() {
    520            return (String) this.formatCBox.getSelectedItem();
    521        }
    522
    523        /**
    524         *
    525         * @return the selected color
    526         */
    527        private String getSelectedColor() {
    528            return (String) this.colorCBox.getSelectedItem();
    529        }
    530
    531        /**
    532         *
    533         * @return the selected width
    534         */
    535        private String getSelectedWidth() {
    536            return this.widthspinner.getValue().toString();
    537        }
    538
    539        /**
    540         *
    541         * @return the selected height
    542         */
    543        private String getSelectedHeight() {
    544            return this.heightspinner.getValue().toString();
    545        }
    546
    547        /**
    548         *
    549         * @return the text in the title textfield
    550         */
    551        private String getSelectedTitle() {
    552            return this.titletextfield.getText();
    553        }
    554
    555        /**
    556         *
    557         * @param debuginformation
    558         */
    559        protected void addDebugInformation( String debuginformation ) {
    560            this.debugTextArea.setText( this.debugTextArea.getText() + "\n" + debuginformation );
    561        }
    562
    563        /**
    564         *
    565         * @param args
    566         */
    567        public static void main( String[] args ) {
    568            // Make sure we have nice window decorations.
    569            JFrame.setDefaultLookAndFeelDecorated( true );
    570            JDialog.setDefaultLookAndFeelDecorated( true );
    571
    572            // Create and set up the window.
    573            JFrame frame = new JFrame( TITLE );
    574            frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
    575
    576            // Create and set up the content pane.
    577            LecGUI lg = new LecGUI();
    578            lg.setOpaque( true );
    579
    580            frame.setContentPane( lg );
    581
    582            // Display the window.
    583            frame.pack();
    584            frame.setVisible( true );
    585        }
    586
    587        /**
    588         * the funcionality of the program. parses the input from the gui-elements and passes them to
    589         * the LegendElementCreator class.
    590         */
    591        protected void doStart() {
    592            if ( getSourceTextfieldContent() == null || getSourceTextfieldContent().length() == 0 ) {
    593                JOptionPane.showMessageDialog( this, "No source SLD-file specified.", "no source, no start",
    594                                               JOptionPane.ERROR_MESSAGE );
    595            } else if ( getDestDirTextfieldContent() == null || getDestDirTextfieldContent().length() == 0 ) {
    596                JOptionPane.showMessageDialog( this, "No target-directory specified.", "no target, no thumbnail",
    597                                               JOptionPane.ERROR_MESSAGE );
    598            } else {
    599                String sldfile = getSourceTextfieldContent();
    600                String directory = getDestDirTextfieldContent();
    601                String format = getSelectedFormat();
    602                Color color = getColorFromString( getSelectedColor() );
    603                int width = Integer.parseInt( getSelectedWidth() );
    604                int height = Integer.parseInt( getSelectedHeight() );
    605                String title = getSelectedTitle();
    606                try {
    607                    LegendElementCreator lec = new LegendElementCreator( sldfile, directory, format, color, width, height,
    608                                                                         title, this );
    609                    if ( lec.getVerboseOutput() != null && lec.getVerboseOutput().length() > 0 ) {
    610                        addDebugInformation( "Finished!" + "\n" + lec.getVerboseOutput() );
    611                        JOptionPane.showMessageDialog(
    612                                                       this,
    613                                                       "Creation of LegendElements successful.\nSee the Debug output for details.",
    614                                                       "Finished! Press <SPACE> to suppress this window.",
    615                                                       JOptionPane.INFORMATION_MESSAGE );
    616                    }
    617                } catch ( Exception e ) {
    618                    JOptionPane.showMessageDialog( this, e.getMessage(), "Error", JOptionPane.ERROR_MESSAGE );
    619                    e.printStackTrace();
    620                    addDebugInformation( e.getMessage() );
    621                }
    622
    623            }
    624        }
    625
    626        /**
    627         * reads out the color from the string and returns the corresponding color.
    628         *
    629         * @param colorstring
    630         *            the color as string
    631         * @return the color
    632         */
    633        private Color getColorFromString( String colorstring ) {
    634            Color color = Color.WHITE;
    635            // BLACK, BLUE, CYAN, DARK_GRAY, GRAY, GREEN, LIGHT_GRAY, MAGENTA, ORANGE, PINK, RED, WHITE,
    636            // YELLOW
    637            LOG.logInfo( "colorstring: " + colorstring );
    638            if ( colorstring.equalsIgnoreCase( "BLACK" ) )
    639                color = Color.BLACK;
    640            else if ( colorstring.equalsIgnoreCase( "BLUE" ) )
    641                color = Color.BLUE;
    642            else if ( colorstring.equalsIgnoreCase( "CYAN" ) )
    643                color = Color.CYAN;
    644            else if ( colorstring.equalsIgnoreCase( "DARK_GRAY" ) )
    645                color = Color.DARK_GRAY;
    646            else if ( colorstring.equalsIgnoreCase( "GRAY" ) )
    647                color = Color.GRAY;
    648            else if ( colorstring.equalsIgnoreCase( "GREEN" ) )
    649                color = Color.GREEN;
    650            else if ( colorstring.equalsIgnoreCase( "LIGHT_GRAY" ) )
    651                color = Color.LIGHT_GRAY;
    652            else if ( colorstring.equalsIgnoreCase( "MAGENTA" ) )
    653                color = Color.MAGENTA;
    654            else if ( colorstring.equalsIgnoreCase( "ORANGE" ) )
    655                color = Color.ORANGE;
    656            else if ( colorstring.equalsIgnoreCase( "PINK" ) )
    657                color = Color.PINK;
    658            else if ( colorstring.equalsIgnoreCase( "RED" ) )
    659                color = Color.RED;
    660            else if ( colorstring.equalsIgnoreCase( "WHITE" ) )
    661                color = Color.WHITE;
    662            else if ( colorstring.equalsIgnoreCase( "YELLOW" ) )
    663                color = Color.YELLOW;
    664            else if ( colorstring.equalsIgnoreCase( "TRANSP." ) )
    665                color = null;
    666            else {
    667                // try {
    668                color = Color.decode( colorstring );
    669            }
    670            return color;
    671        }
    672
    673        /**
    674         * opens the file chooser
    675         */
    676        protected void openFileChooser() {
    677            JFileChooser chooser = new JFileChooser();
    678            chooser.setCurrentDirectory( new File( lastDir ) );
    679            chooser.setFileFilter( new javax.swing.filechooser.FileFilter() {
    680
    681                @Override
    682                public boolean accept( File f ) {
    683                    return f.getName().toLowerCase().endsWith( ".xml" ) || f.isDirectory();
    684                }
    685
    686
    687                @Override
    688                public String getDescription() {
    689                    return "StyledLayerDescriptor (*.xml)";
    690                }
    691            } );
    692
    693            int returnVal = chooser.showOpenDialog( this );
    694
    695            if ( returnVal == JFileChooser.APPROVE_OPTION ) {
    696                LOG.logInfo( chooser.getSelectedFile().getPath() );
    697                setSourceTextfieldContent( chooser.getSelectedFile().getPath() );
    698            }
    699        }
    700
    701        /**
    702         * opens the target-dir file chooser. only dirs are available for selection
    703         */
    704        protected void openDirChooser() {
    705            JFileChooser chooser = new JFileChooser();
    706            chooser.setCurrentDirectory( new File( lastDir ) );
    707            chooser.setFileSelectionMode( JFileChooser.DIRECTORIES_ONLY );
    708
    709            int returnVal = chooser.showOpenDialog( this );
    710
    711            if ( returnVal == JFileChooser.APPROVE_OPTION ) {
    712                setDestdirTextfieldContent( chooser.getSelectedFile().getPath() );
    713            }
    714        }
    715
    716        /**
    717         * shows the Info in a JOptionPane
    718         *
    719         */
    720        protected void showInfo() {
    721            String text = "This application is part of deegree.\n" + "http://www.deegree.org\n\n"
    722                          + "lat/lon GmbH \n" + "e-mail: info@lat-lon.de";
    723            JOptionPane.showMessageDialog( this, text, "Information", JOptionPane.INFORMATION_MESSAGE );
    724        }
    725
    726    }
    727
    728    /**
    729     * class for handling button events.
    730     * <hr>
    731     *
    732     * @author <a href="mailto:schaefer@lat-lon.de>Axel Schaefer</a>
    733     */
    734    class LecGUIButtonHandler implements ActionListener {
    735
    736        private LecGUI lecgui = null;
    737
    738        /**
    739         * constructor
    740         *
    741         * @param lecgui
    742         *            the DeegreeDemoInstallerGUI uses this Button
    743         */
    744        protected LecGUIButtonHandler( LecGUI lecgui ) {
    745            this.lecgui = lecgui;
    746        }
    747
    748        /*
    749         * (non-Javadoc)
    750         *
    751         * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
    752         */
    753        public void actionPerformed( ActionEvent event ) {
    754            String ac = event.getActionCommand();
    755            if ( ac.equals( LecGUI.BTOPENSOURCE ) ) {
    756                this.lecgui.openFileChooser();
    757            } else if ( ac.equals( LecGUI.BTOPENTARGET ) ) {
    758                this.lecgui.openDirChooser();
    759            } else if ( ac.equals( LecGUI.BTEXIT ) ) {
    760                System.exit( 0 );
    761            } else if ( ac.equals( LecGUI.BTINFO ) ) {
    762                this.lecgui.showInfo();
    763            } else if ( ac.equals( LecGUI.BTSTART ) ) {
    764                this.lecgui.doStart();
    765            }
    766        }
    767    }
    768
    769    /**
    770     * class for handling button events.
    771     * <hr>
    772     *
    773     * @author <a href="mailto:schaefer@lat-lon.de>Axel Schaefer</a>
    774     */
    775    class LecGUIMenuHandler implements ActionListener {
    776
    777        private LecGUI lecgui = null;
    778
    779        /**
    780         * constructor
    781         *
    782         * @param lecgui
    783         *            the DeegreeDemoInstallerGUI uses this Button
    784         */
    785        protected LecGUIMenuHandler( LecGUI lecgui ) {
    786            this.lecgui = lecgui;
    787        }
    788
    789        /*
    790         * (non-Javadoc)
    791         *
    792         * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
    793         */
    794        public void actionPerformed( ActionEvent event ) {
    795            String ac = event.getActionCommand();
    796            if ( ac.equals( LecGUI.OPENSOURCEMENUITEM ) ) {
    797                this.lecgui.openFileChooser();
    798            } else if ( ac.equals( LecGUI.OPENTARGETMENUITEM ) ) {
    799                this.lecgui.openDirChooser();
    800            } else if ( ac.equals( LecGUI.EXITMENUITEM ) ) {
    801                System.exit( 0 );
    802            } else if ( ac.equals( LecGUI.INFOMENUITEM ) ) {
    803                this.lecgui.showInfo();
    804            } else if ( ac.equals( LecGUI.STARTMENUITEM ) ) {
    805                this.lecgui.doStart();
    806            }
    807        }
    808    }