001    /*
002     *  Licensed to the Apache Software Foundation (ASF) under one
003     *  or more contributor license agreements.  See the NOTICE file
004     *  distributed with this work for additional information
005     *  regarding copyright ownership.  The ASF licenses this file
006     *  to you under the Apache License, Version 2.0 (the
007     *  "License"); you may not use this file except in compliance
008     *  with the License.  You may obtain a copy of the License at
009     *  
010     *    http://www.apache.org/licenses/LICENSE-2.0
011     *  
012     *  Unless required by applicable law or agreed to in writing,
013     *  software distributed under the License is distributed on an
014     *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
015     *  KIND, either express or implied.  See the License for the
016     *  specific language governing permissions and limitations
017     *  under the License. 
018     *  
019     */
020    package org.apache.directory.server.core.partition.impl.btree.gui;
021    
022    
023    import java.awt.BorderLayout;
024    import java.awt.Color;
025    import java.awt.Dimension;
026    import java.awt.FlowLayout;
027    import java.awt.Font;
028    import java.awt.GridBagConstraints;
029    import java.awt.GridBagLayout;
030    import java.awt.Insets;
031    import java.awt.event.ActionListener;
032    import java.awt.event.WindowAdapter;
033    import java.awt.event.WindowEvent;
034    
035    import javax.swing.BorderFactory;
036    import javax.swing.JButton;
037    import javax.swing.JComboBox;
038    import javax.swing.JDialog;
039    import javax.swing.JFrame;
040    import javax.swing.JLabel;
041    import javax.swing.JPanel;
042    import javax.swing.JScrollPane;
043    import javax.swing.JTextArea;
044    import javax.swing.JTextField;
045    import javax.swing.border.TitledBorder;
046    
047    import org.apache.directory.server.i18n.I18n;
048    
049    
050    /**
051     * A dialog for the filter.
052     *
053     * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
054     * @version $Rev: 902558 $
055     */
056    public class FilterDialog extends JDialog
057    {
058        private static final long serialVersionUID = 3760565295319626294L;
059    
060        public static final String RUN_MODE = "Run";
061        public static final String LOAD_MODE = "Load";
062        public static final String DEBUG_MODE = "Debug";
063        public static final String ANNOTATE_MODE = "Annotate";
064    
065        public static final String UNLIMITED = "Unlimited";
066    
067        public static final String BASE_SCOPE = "Base Object";
068        public static final String SINGLE_SCOPE = "Single Level";
069        public static final String SUBTREE_SCOPE = "Subtree Level";
070    
071        public static final String LOAD_CMD = "Load";
072        public static final String SEARCH_CMD = "Search";
073        public static final String CANCEL_CMD = "Cancel";
074    
075        private JPanel m_northPnl = new JPanel();
076        private JPanel m_centerPnl = new JPanel();
077        private JTextArea m_filterText = new JTextArea();
078        private JLabel m_scopeLbl = new JLabel();
079        private JComboBox m_scopeChoice = new JComboBox();
080        private JLabel m_limitLbl = new JLabel();
081        private JTextField m_limitField = new JTextField();
082        private JPanel m_southPnl = new JPanel();
083        private JButton m_searchBut = new JButton();
084        private JButton m_cancelBut = new JButton();
085        private JScrollPane m_scrollPane = new JScrollPane();
086        private final String m_mode;
087        private JTextField m_baseText = new JTextField();
088        private JPanel m_basePnl = new JPanel();
089        private JLabel jLabel1 = new JLabel();
090    
091    
092        /** Creates new form JDialog */
093        public FilterDialog(String a_mode, JFrame parent, boolean modal)
094        {
095            super( parent, modal );
096            m_mode = a_mode;
097            initGUI();
098        }
099    
100    
101        public void addActionListener( ActionListener l_listener )
102        {
103            m_searchBut.addActionListener( l_listener );
104            m_cancelBut.addActionListener( l_listener );
105        }
106    
107    
108        /**
109         * This method is called from within the constructor to initialize the form
110         */
111        private void initGUI()
112        {
113            m_baseText.setText( "" );
114            addWindowListener( new WindowAdapter()
115            {
116                public void windowClosing( WindowEvent evt )
117                {
118                    closeDialog( evt );
119                }
120            } );
121            pack();
122    
123            getContentPane().setLayout( new java.awt.GridBagLayout() );
124            getContentPane().add(
125                m_northPnl,
126                new java.awt.GridBagConstraints( 0, 0, 1, 1, 0.9, 0.0, java.awt.GridBagConstraints.NORTH,
127                    java.awt.GridBagConstraints.BOTH, new java.awt.Insets( 5, 5, 6, 0 ), 0, 0 ) );
128            getContentPane().add(
129                m_centerPnl,
130                new GridBagConstraints( 0, 1, 1, 1, 0.9, 0.9, GridBagConstraints.CENTER, GridBagConstraints.BOTH,
131                    new Insets( 10, 10, 10, 10 ), 0, 0 ) );
132            getContentPane().add(
133                m_southPnl,
134                new GridBagConstraints( 0, 2, 1, 1, 1.0, 0.0, GridBagConstraints.SOUTH, GridBagConstraints.BOTH,
135                    new Insets( 0, 0, 2, 0 ), 0, 0 ) );
136            m_northPnl.setLayout( new GridBagLayout() );
137            m_northPnl.setBorder( null );
138            m_northPnl.add( m_scopeLbl, new java.awt.GridBagConstraints( 0, 0, 1, 1, 0.2, 0.0,
139                java.awt.GridBagConstraints.CENTER, java.awt.GridBagConstraints.NONE, new java.awt.Insets( 5, 0, 5, 0 ), 0,
140                0 ) );
141            m_northPnl.add( m_scopeChoice, new java.awt.GridBagConstraints( 1, 0, 1, 1, 1.0, 0.0,
142                java.awt.GridBagConstraints.CENTER, java.awt.GridBagConstraints.HORIZONTAL,
143                new java.awt.Insets( 9, 0, 7, 5 ), 0, 0 ) );
144            m_northPnl.add( m_limitLbl, new GridBagConstraints( 2, 0, 1, 1, 0.0, 0.0, GridBagConstraints.CENTER,
145                GridBagConstraints.NONE, new Insets( 5, 10, 5, 5 ), 0, 0 ) );
146            m_northPnl.add( m_limitField, new java.awt.GridBagConstraints( 3, 0, 1, 1, 1.0, 0.0,
147                java.awt.GridBagConstraints.CENTER, java.awt.GridBagConstraints.HORIZONTAL, new java.awt.Insets( 11, 0, 9,
148                    10 ), 0, 0 ) );
149            m_northPnl.add( m_basePnl, new java.awt.GridBagConstraints( 0, 1, 4, 1, 0.0, 0.0,
150                java.awt.GridBagConstraints.CENTER, java.awt.GridBagConstraints.BOTH, new java.awt.Insets( 5, 10, 5, 10 ),
151                0, 0 ) );
152            m_filterText.setText( "" );
153            m_filterText.setBorder( null );
154            m_centerPnl.setLayout( new BorderLayout() );
155            m_centerPnl.setBorder( BorderFactory.createTitledBorder( BorderFactory.createLineBorder( new Color( 153, 153,
156                153 ), 1 ), "Search Filter", TitledBorder.LEADING, TitledBorder.TOP, new Font( "SansSerif", 0, 14 ),
157                new Color( 60, 60, 60 ) ) );
158            m_scrollPane.getViewport().add( m_filterText );
159            m_centerPnl.add( m_scrollPane, BorderLayout.CENTER );
160            m_scopeLbl.setText( "Scope:" );
161            m_scopeLbl.setFont( new java.awt.Font( "Dialog", java.awt.Font.PLAIN, 14 ) );
162            m_scopeChoice.setSize( new java.awt.Dimension( 115, 25 ) );
163            m_scopeChoice.setMaximumSize( new Dimension( 32767, 25 ) );
164            m_scopeChoice.setMinimumSize( new java.awt.Dimension( 115, 25 ) );
165            m_scopeChoice.setPreferredSize( new Dimension( 115, 25 ) );
166            m_scopeChoice.addItem( BASE_SCOPE );
167            m_scopeChoice.addItem( SINGLE_SCOPE );
168            m_scopeChoice.addItem( SUBTREE_SCOPE );
169    
170            m_limitLbl.setText( "Limit:" );
171            m_limitField.setText( "Unlimited" );
172            m_limitField.setHorizontalAlignment( JTextField.CENTER );
173            m_southPnl.setLayout( new FlowLayout( FlowLayout.CENTER, 15, 5 ) );
174            m_southPnl.add( m_searchBut );
175    
176            if ( m_mode != LOAD_MODE )
177            {
178                m_searchBut.setText( SEARCH_CMD );
179                m_searchBut.setActionCommand( SEARCH_CMD );
180                m_southPnl.add( m_cancelBut );
181            }
182            else
183            {
184                m_searchBut.setText( LOAD_CMD );
185                m_searchBut.setActionCommand( LOAD_CMD );
186            }
187    
188            m_cancelBut.setText( CANCEL_CMD );
189            m_cancelBut.setActionCommand( CANCEL_CMD );
190            setBounds( new java.awt.Rectangle( 0, 0, 595, 331 ) );
191            m_basePnl.setLayout( new java.awt.GridBagLayout() );
192            m_basePnl.add( jLabel1,
193                new java.awt.GridBagConstraints( 0, 0, 1, 1, 0.0, 0.0, java.awt.GridBagConstraints.WEST,
194                    java.awt.GridBagConstraints.NONE, new java.awt.Insets( 0, 0, 0, 0 ), 0, 0 ) );
195            m_basePnl.add( m_baseText, new java.awt.GridBagConstraints( 1, 0, 1, 1, 1.0, 0.0,
196                java.awt.GridBagConstraints.EAST, java.awt.GridBagConstraints.HORIZONTAL,
197                new java.awt.Insets( 5, 5, 5, 0 ), 0, 0 ) );
198            jLabel1.setText( "Search Base:" );
199            jLabel1.setFont( new java.awt.Font( "SansSerif", java.awt.Font.PLAIN, 14 ) );
200    
201            if ( m_mode == RUN_MODE )
202            {
203                setTitle( "Search Filter Dialog: Execute mode" );
204            }
205            else if ( m_mode == LOAD_MODE )
206            {
207                setTitle( "Search Filter Dialog: Load mode" );
208            }
209            else if ( m_mode == DEBUG_MODE )
210            {
211                setTitle( "Search Filter Dialog: Debug mode" );
212            }
213            else if ( m_mode == ANNOTATE_MODE )
214            {
215                setTitle( "Search Filter Dialog: Annotate mode" );
216                this.m_scopeChoice.setEnabled( false );
217                this.m_limitField.setEnabled( false );
218                this.m_baseText.setEnabled( false );
219            }
220            else
221            {
222                throw new RuntimeException( I18n.err( I18n.ERR_730 ) );
223            }
224        }
225    
226    
227        /**
228         * Closes the dialog
229         */
230        public void closeDialog( WindowEvent evt )
231        {
232            setVisible( false );
233            dispose();
234        }
235    
236    
237        public String getScope()
238        {
239            int l_selected = m_scopeChoice.getSelectedIndex();
240            return ( String ) m_scopeChoice.getItemAt( l_selected );
241        }
242    
243    
244        /*
245         public int getScope()
246         {
247         int l_selected = m_scopeChoice.getSelectedIndex() ;
248         String l_scope = (String) m_scopeChoice.getItemAt(l_selected) ;
249    
250         if(l_scope == BASE_SCOPE) {
251         return Backend.BASE_SCOPE ;
252         } else if(l_scope == SINGLE_SCOPE) {
253         return Backend.SINGLE_SCOPE ;
254         } else if(l_scope == SUBTREE_SCOPE) {
255         return Backend.SUBTREE_SCOPE ;
256         }
257    
258         throw new RuntimeException("Unexpected scope parameter: " + l_scope) ;
259         }
260         */
261    
262        public String getLimit()
263        {
264            return m_limitField.getText();
265        }
266    
267    
268        /*
269         public String getLimit()
270         {
271         String l_limit = m_limitField.getText() ;
272    
273         if(l_limit.equals(UNLIMITED)) {
274         return -1 ;
275         }
276    
277         return Integer.parseInt(l_limit) ;
278         }
279         */
280    
281        public String getFilter()
282        {
283            return this.m_filterText.getText();
284        }
285    
286    
287        public void setBase( String a_base )
288        {
289            this.m_baseText.setText( a_base );
290        }
291    
292    
293        public void setScope( String a_scope )
294        {
295            this.m_scopeChoice.setSelectedItem( a_scope );
296        }
297    
298    
299        public String getBase()
300        {
301            return this.m_baseText.getText();
302        }
303    }