~ubuntu-branches/ubuntu/wily/389-ds-console/wily-proposed

« back to all changes in this revision

Viewing changes to src/com/netscape/admin/dirserv/panel/NewMappingNodePanel.java

  • Committer: Package Import Robot
  • Author(s): Timo Aaltonen
  • Date: 2012-03-15 19:58:37 UTC
  • Revision ID: package-import@ubuntu.com-20120315195837-296zyft51thld8q7
Tags: upstream-1.2.6
ImportĀ upstreamĀ versionĀ 1.2.6

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/** BEGIN COPYRIGHT BLOCK
 
2
 * Copyright (C) 2001 Sun Microsystems, Inc. Used by permission.
 
3
 * Copyright (C) 2005 Red Hat, Inc.
 
4
 * All rights reserved.
 
5
 * 
 
6
 * This program is free software; you can redistribute it and/or modify
 
7
 * it under the terms of the GNU General Public License as published by
 
8
 * the Free Software Foundation version 2 of the License.
 
9
 * 
 
10
 * This program is distributed in the hope that it will be useful,
 
11
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 
12
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
13
 * GNU General Public License for more details.
 
14
 * 
 
15
 * You should have received a copy of the GNU General Public License
 
16
 * along with this program; if not, write to the Free Software
 
17
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 
18
 * END COPYRIGHT BLOCK **/
 
19
 
 
20
package com.netscape.admin.dirserv.panel;
 
21
 
 
22
import java.awt.*;
 
23
import java.awt.event.*;
 
24
import java.util.*;
 
25
import javax.swing.*;
 
26
import javax.swing.border.*;
 
27
import javax.swing.event.*;
 
28
import javax.swing.text.*;
 
29
import com.netscape.management.client.util.*;
 
30
import com.netscape.admin.dirserv.*;
 
31
import com.netscape.admin.dirserv.task.ListDB;
 
32
import com.netscape.admin.dirserv.panel.MappingUtils;
 
33
import com.netscape.management.nmclf.*;
 
34
import netscape.ldap.*;
 
35
import netscape.ldap.util.*;
 
36
 
 
37
 
 
38
/**
 
39
 * Panel for Directory Server resource page
 
40
 *
 
41
 * @author  rmarco
 
42
 * @see     com.netscape.admin.dirserv
 
43
 */
 
44
public class NewMappingNodePanel extends BlankPanel {
 
45
 
 
46
    public NewMappingNodePanel(IDSModel model, LDAPEntry node) {
 
47
        super( model, _section );
 
48
        _helpToken = "configuration-new-mapping-node-dbox-help";
 
49
        setTitle( DSUtil._resource.getString( _section, "new-title" ));
 
50
        _model = model;
 
51
        _entry = node;
 
52
    }
 
53
 
 
54
    public void init() {
 
55
 
 
56
        _myPanel.setLayout( new GridBagLayout() );
 
57
        GridBagConstraints gbc = getGBC();
 
58
 
 
59
        // Mapping Tree info
 
60
        createTypeArea( _myPanel );
 
61
        createValueArea( _myPanel );
 
62
        AbstractDialog dlg = getAbstractDialog();
 
63
        if ( dlg != null ) {
 
64
            dlg.setOKButtonEnabled( false );
 
65
        }
 
66
 
 
67
    }
 
68
 
 
69
    protected void      createValueArea( JPanel grid ) {
 
70
                
 
71
        GridBagConstraints gbc = getGBC();
 
72
        JPanel Mapanel = new GroupPanel( DSUtil._resource.getString( _section, "bck-title" ),
 
73
                                         true);
 
74
        gbc.gridwidth = gbc.REMAINDER;
 
75
        gbc.fill = gbc.HORIZONTAL;
 
76
        grid.add( Mapanel, gbc );
 
77
 
 
78
        GridBagLayout Mabag = new GridBagLayout();
 
79
        GridBagConstraints Magbc = new GridBagConstraints() ;
 
80
        Magbc.gridx      = 0;
 
81
        Magbc.gridy      = 0;
 
82
        Magbc.gridwidth  = Magbc.REMAINDER;
 
83
        Magbc.gridheight = 1;
 
84
        Magbc.weightx    = 0;
 
85
        Magbc.weighty    = 0;
 
86
        Magbc.fill       = Magbc.BOTH;
 
87
        Magbc.anchor     = Magbc.CENTER;
 
88
        Magbc.insets     = new Insets(0, 0, 0, 0);
 
89
        Magbc.ipadx = 0;
 
90
        Magbc.ipady = 0;
 
91
                
 
92
        Mapanel.setLayout(Mabag);
 
93
 
 
94
        /* Backends list label */
 
95
        _bckListLabel = makeJLabel ( _section, "bck-list" );
 
96
        Magbc.fill= Magbc.NONE;
 
97
        Magbc.anchor = Magbc.WEST;              
 
98
        Mapanel.add( _bckListLabel,Magbc );
 
99
 
 
100
        /* Backend List */
 
101
        String BList[] = getBackendList();
 
102
        _bckList = new JList( BList );
 
103
        _bckList.setVisibleRowCount( ROWS );
 
104
        _bckList.setCellRenderer( new ReferralCellRenderer() );
 
105
        //              _bckList.setSelectionMode( _bckList.MULTIPLE_INTERVAL_SELECTION );
 
106
        JScrollPane scrollBck = new JScrollPane();
 
107
        scrollBck.getViewport().setView(_bckList);
 
108
        Magbc.gridy++;
 
109
        Magbc.fill= Magbc.BOTH;         
 
110
        Magbc.weightx    = 1;
 
111
        Magbc.weighty    = 1;
 
112
        Mapanel.add( scrollBck, Magbc );
 
113
 
 
114
        /* Referrals Label */
 
115
        _refListLabel = makeJLabel ( _section, "ref-list" );
 
116
        Magbc.gridy++;
 
117
        Magbc.weightx    = 0;
 
118
        Magbc.weighty    = 0;
 
119
        Magbc.fill= Magbc.NONE;
 
120
        Magbc.anchor = Magbc.WEST;              
 
121
        Magbc.gridy++;
 
122
        Mapanel.add( _refListLabel,Magbc);
 
123
 
 
124
 
 
125
        /* New Referrals Line */                
 
126
        _refNewRefText = makeJTextField(_section, "ref-new");
 
127
        Magbc.gridy++;
 
128
        Magbc.gridwidth  = 1;
 
129
        Magbc.weightx    = 1;
 
130
        Magbc.weighty    = 0;           
 
131
        Magbc.fill= Magbc.BOTH;
 
132
        Magbc.insets     = new Insets(0,
 
133
                                      0, 
 
134
                                      SuiLookAndFeel.COMPONENT_SPACE,
 
135
                                      0);
 
136
        Magbc.anchor = Magbc.CENTER;
 
137
        Mapanel.add( _refNewRefText,Magbc);
 
138
 
 
139
        _bAdd = UIFactory.makeJButton(this, _section, "badd", (ResourceSet)null);
 
140
        _bAdd.setActionCommand(ADD_REF);                
 
141
        _bAdd.setEnabled(false);
 
142
        Magbc.gridwidth  = 1;
 
143
        Magbc.gridx++;
 
144
        Magbc.weightx    = 0;
 
145
        Magbc.weighty    = 0;
 
146
        Magbc.insets     = new Insets(0,
 
147
                                      SuiLookAndFeel.DIFFERENT_COMPONENT_SPACE,
 
148
                                      SuiLookAndFeel.COMPONENT_SPACE,
 
149
                                      0);
 
150
        Magbc.fill= Magbc.NONE;         
 
151
        Magbc.anchor = Magbc.EAST;
 
152
        Mapanel.add( _bAdd,Magbc);
 
153
                
 
154
        /* just to make it nicer */
 
155
        Magbc.gridy++;
 
156
 
 
157
        /* Referrals List */
 
158
        _refData = new DefaultListModel();
 
159
        _refList = new JList( _refData );
 
160
        _refList.setVisibleRowCount(ROWS);
 
161
        _refList.setCellRenderer( new ReferralCellRenderer() );
 
162
        JScrollPane scrollRef = new JScrollPane();
 
163
        scrollRef.getViewport().setView(_refList);
 
164
        Magbc.gridwidth  = 1;
 
165
        Magbc.gridx = 0;
 
166
        Magbc.gridy++;
 
167
        Magbc.insets = new Insets(0, 0, 0, 0);
 
168
        Magbc.fill= Magbc.BOTH;         
 
169
        Magbc.weightx    = 1;
 
170
        Magbc.weighty    = 1;
 
171
        Mapanel.add( scrollRef, Magbc); 
 
172
                        
 
173
        _bDelete = UIFactory.makeJButton(this, _section, "bdelete", (ResourceSet)null);
 
174
        _bDelete.setActionCommand(DELETE_REF);
 
175
        _bDelete.setEnabled(false);
 
176
        Magbc.gridwidth  = 1;
 
177
        Magbc.gridx++;
 
178
        Magbc.weightx    = 0;
 
179
        Magbc.weighty    = 0;
 
180
        Magbc.fill= Magbc.NONE;         
 
181
        Magbc.insets = new Insets(0, SuiLookAndFeel.DIFFERENT_COMPONENT_SPACE, 0, 0);
 
182
        Magbc.anchor = Magbc.NORTHEAST;
 
183
        Mapanel.add( _bDelete,Magbc);
 
184
                
 
185
 
 
186
    }
 
187
 
 
188
    protected void createTypeArea( JPanel grid ) {
 
189
        GridBagConstraints gbc = getGBC();
 
190
        gbc.insets.bottom = _gbc.insets.top;
 
191
        gbc.gridwidth = gbc.REMAINDER;
 
192
                
 
193
        String[] mapList = MappingUtils.getMappingNode( _model.getServerInfo().getLDAPConnection() );
 
194
 
 
195
        JPanel Mapanel = new GroupPanel(
 
196
                                        DSUtil._resource.getString( _section, "new-mapping-title" ));
 
197
        gbc.gridwidth = gbc.REMAINDER;
 
198
        gbc.fill = gbc.HORIZONTAL;
 
199
        grid.add( Mapanel, gbc );
 
200
 
 
201
 
 
202
        _NewNodeLabel = makeJLabel( _section, "new-node-suffix" );
 
203
        gbc.gridwidth = 3;
 
204
        gbc.fill = gbc.NONE;
 
205
        gbc.weightx = 0.0;
 
206
        Mapanel.add( _NewNodeLabel, gbc );
 
207
 
 
208
        _NewNodeText = makeJTextField( _section, "new-node-suffix" );
 
209
        gbc.weightx = 1.0;
 
210
        gbc.gridwidth = gbc.REMAINDER;
 
211
        gbc.fill = gbc.HORIZONTAL;
 
212
        Mapanel.add( _NewNodeText, gbc );               
 
213
 
 
214
        _comboNewNodeMapping = new JComboBox();
 
215
        _comboNewNodeMapping.addItemListener(this);
 
216
        _comboNewNodeMapping.addActionListener(this);
 
217
 
 
218
        if ( mapList != null ) {
 
219
            int j =0;
 
220
            _comboNewNodeMapping.addItem( ROOT_MAPPING_NODE );
 
221
            String suffix = null;
 
222
            if (_entry != null) {
 
223
                suffix = MappingUtils.getMappingNodeSuffix(_entry);
 
224
            }
 
225
            for( int i = 0; i < mapList.length; i++ ) {
 
226
                _comboNewNodeMapping.addItem( mapList[i] );
 
227
                if((suffix != null) &&
 
228
                   DSUtil.equalDNs(mapList[i], suffix)) {
 
229
                    j = i + 1;
 
230
                }
 
231
                                
 
232
            }
 
233
            if ( mapList.length > 0 )
 
234
                _comboNewNodeMapping.setSelectedIndex( j );
 
235
        }
 
236
 
 
237
        _comboNewNodeLabel = makeJLabel( _section, "new-node-subordination" );
 
238
        gbc.gridwidth = 3; // 2
 
239
        gbc.fill = gbc.NONE;
 
240
        gbc.weightx = 0.0;
 
241
        Mapanel.add( _comboNewNodeLabel, gbc );
 
242
        gbc.gridwidth = gbc.REMAINDER;
 
243
        gbc.weightx    = 1.0;
 
244
        gbc.fill = gbc.HORIZONTAL;
 
245
        Mapanel.add( _comboNewNodeMapping, gbc );
 
246
 
 
247
 
 
248
        _comboStatus = new JComboBox();
 
249
        _comboStatus.addItemListener(this);
 
250
        _comboStatus.addActionListener(this);
 
251
 
 
252
        _comboStatus.addItem( BACKEND );
 
253
        _comboStatus.addItem( REFERRAL );
 
254
        _comboStatus.addItem( REFERRAL_UPDATE );
 
255
        _comboStatus.addItem( DISABLE );
 
256
                
 
257
        _comboStatusLabel =  makeJLabel( _section, "new-node-status" );
 
258
        gbc.gridwidth = 3;
 
259
        gbc.fill = gbc.NONE;
 
260
        gbc.weightx = 0.0;
 
261
        Mapanel.add( _comboStatusLabel, gbc );
 
262
        gbc.gridwidth = gbc.REMAINDER;
 
263
        gbc.weightx    = 1.0;
 
264
        gbc.fill = gbc.HORIZONTAL;
 
265
        Mapanel.add( _comboStatus, gbc );
 
266
    }   
 
267
                
 
268
 
 
269
    private String[] getBackendList() {
 
270
        Vector v = new Vector(1);
 
271
  
 
272
        try {                   
 
273
            LDAPConnection ldc = _model.getServerInfo().getLDAPConnection();
 
274
            _model.setWaitCursor( true );
 
275
            LDAPSearchResults res =
 
276
                ldc.search( CONFIG_BASEDN,
 
277
                            ldc.SCOPE_SUB,
 
278
                            "objectclass=nsBackendInstance",
 
279
                            null,
 
280
                            false );
 
281
            while( res.hasMoreElements() ) {
 
282
                LDAPEntry bentry = (LDAPEntry)res.nextElement();
 
283
                String name = bentry.getDN();
 
284
                Debug.println( "NewMappingNodePanel.getBackendList() {");
 
285
                Debug.println( "*** backend : " + name );
 
286
                v.addElement(LDAPDN.explodeDN(bentry.getDN(),true)[0]);
 
287
            }
 
288
        } catch ( LDAPException e ) {
 
289
            Debug.println( "NewMappingNodePanel.getBackendList() " + e );
 
290
        } finally {
 
291
            _model.setWaitCursor( false );
 
292
        }               
 
293
        Debug.println( "*** Nb : " + v.size() + " Dir :" + v.toString());
 
294
        String[] bckList = new String[v.size()];
 
295
        v.toArray(bckList);
 
296
        return bckList;
 
297
    }
 
298
 
 
299
    private boolean isListEmpty(JList list){
 
300
        boolean testlist = (list.getModel().getSize() == 0);
 
301
        return( testlist );
 
302
    }
 
303
        
 
304
    private String[] getReferralsInList() {
 
305
 
 
306
        Vector v = new Vector();
 
307
                
 
308
        for (int i = 0;
 
309
             i < _refList.getModel().getSize();
 
310
             i++) {
 
311
            v.addElement( _refList.getModel().getElementAt( i ));
 
312
        }
 
313
        if( v.size()  == 0 ) {
 
314
            return ( null );
 
315
        } else {
 
316
            String referralList[] = new String[ v.size() ];
 
317
            v.toArray( referralList );
 
318
            return ( referralList );
 
319
        }
 
320
    }
 
321
 
 
322
    private String[] getBackendsInList() {
 
323
        Vector v = new Vector(1);
 
324
        Object OVals[] = _bckList.getSelectedValues();
 
325
 
 
326
        if (( OVals == null ) || (OVals.length == 0)) {
 
327
            return ( null );
 
328
        }
 
329
 
 
330
        String[] bckList = new String[OVals.length];
 
331
        int i=0;
 
332
                
 
333
 
 
334
        for(i =0; i <  OVals.length; i++) {                     
 
335
            v.addElement( OVals[i].toString() );
 
336
            Debug.println( "*** backends : " + OVals[i].toString() );
 
337
        }
 
338
        v.toArray(bckList);
 
339
        return bckList;
 
340
    }
 
341
 
 
342
    /**
 
343
     * Enable/disable OK button
 
344
     *
 
345
     * @param ok true to enable the OK button
 
346
     */
 
347
    private void setOkay( boolean ok ) {
 
348
        AbstractDialog dlg = getAbstractDialog();
 
349
        if ( dlg != null ) {
 
350
            dlg.setOKButtonEnabled( ok );
 
351
        } else {
 
352
        }
 
353
    }
 
354
 
 
355
    private void checkOkay() {     
 
356
        String a = _NewNodeText.getText().trim();           
 
357
        boolean ok = ((a != null) && (a.length() > 0)) ;
 
358
        ok = ok && _isNewMappingNodeValid &&
 
359
            ( !( _bckList.isSelectionEmpty() ) ||
 
360
              !( isListEmpty( _refList ) )); 
 
361
        setOkay( ok );
 
362
    }
 
363
 
 
364
    /**
 
365
     *  handle incoming event
 
366
     *
 
367
     * @param e event
 
368
     */
 
369
    public void actionPerformed(ActionEvent e) {
 
370
        if(e.getActionCommand().equals(ADD_REF)) {
 
371
            _refData.addElement( _refNewRefText.getText());
 
372
            _refNewRefText.setText("");
 
373
            _bAdd.setEnabled( false );
 
374
        } else if (e.getActionCommand().equals(DELETE_REF)) {
 
375
            int[] indices = _refList.getSelectedIndices();
 
376
            for (int i = indices.length - 1; i>= 0;i--) {                                       
 
377
                _refData.removeElementAt(indices[i]);
 
378
            }                                           
 
379
            _bDelete.setEnabled( false );
 
380
        } 
 
381
        checkOkay();
 
382
    }
 
383
 
 
384
 
 
385
    public void resetCallback() {
 
386
        /* No state to preserve */
 
387
        clearDirtyFlag();
 
388
        hideDialog();
 
389
    }
 
390
 
 
391
 
 
392
    public void okCallback() {
 
393
        /* No state to preserve */
 
394
        if(( _NewNodeText.getText() != null ) &&
 
395
           ( _NewNodeText.getText().trim().length() > 0 )) {
 
396
            if( MappingUtils.addMappingNode(
 
397
                                            _model.getServerInfo().getLDAPConnection(),
 
398
                                            _section,
 
399
                                            _NewNodeText.getText(),
 
400
                                            (String) _comboNewNodeMapping.getSelectedItem(),
 
401
                                            (String) _comboStatus.getSelectedItem(),
 
402
                                            getBackendsInList(),
 
403
                                            getReferralsInList())) return;
 
404
                        
 
405
        } else {
 
406
            DSUtil.showErrorDialog( getModel().getFrame(),
 
407
                                    "new-mapping-node","" );
 
408
            return;
 
409
        }
 
410
        hideDialog();
 
411
    }
 
412
 
 
413
    public void changedUpdate(DocumentEvent e) {
 
414
        if( e.getDocument() == _NewNodeText.getDocument() ) {
 
415
            if ( DN.isDN ( _NewNodeText.getText() )) {
 
416
                setChangeState( _NewNodeLabel, CHANGE_STATE_UNMODIFIED );
 
417
                _isNewMappingNodeValid = true;
 
418
            } else {
 
419
                setChangeState( _NewNodeLabel, CHANGE_STATE_ERROR );
 
420
                _isNewMappingNodeValid = false;
 
421
            }
 
422
        }
 
423
        super.changedUpdate( e );
 
424
        checkOkay();
 
425
    }
 
426
 
 
427
    public void removeUpdate(DocumentEvent e) {
 
428
        if( e.getDocument() == _NewNodeText.getDocument() ) {
 
429
            if ( DN.isDN ( _NewNodeText.getText() )) {
 
430
                setChangeState( _NewNodeLabel, CHANGE_STATE_UNMODIFIED );
 
431
                _isNewMappingNodeValid = true;
 
432
            } else {
 
433
                setChangeState( _NewNodeLabel, CHANGE_STATE_ERROR );
 
434
                _isNewMappingNodeValid = false;
 
435
            }
 
436
        }
 
437
        super.removeUpdate( e );
 
438
        checkOkay();
 
439
    }
 
440
 
 
441
    public void insertUpdate(DocumentEvent e) {
 
442
        if( e.getDocument() == _refNewRefText.getDocument() ) {
 
443
            boolean bAdd_status = ( _refNewRefText.getText().trim().length() > 0 );
 
444
            _bAdd.setEnabled( bAdd_status );
 
445
        } else if( e.getDocument() == _NewNodeText.getDocument() ) {
 
446
            if ( DN.isDN ( _NewNodeText.getText() )) {
 
447
                setChangeState( _NewNodeLabel, CHANGE_STATE_UNMODIFIED );
 
448
                _isNewMappingNodeValid = true;
 
449
            } else {
 
450
                setChangeState( _NewNodeLabel, CHANGE_STATE_ERROR );
 
451
                _isNewMappingNodeValid = false;
 
452
            }
 
453
        }
 
454
        super.insertUpdate( e );
 
455
        checkOkay();
 
456
    }
 
457
 
 
458
 
 
459
    class ReferralCellRenderer extends DefaultListCellRenderer {  
 
460
        // This is the only method defined by ListCellRenderer.  We just
 
461
        // reconfigure the Jlabel each time we're called.
 
462
                
 
463
        public Component getListCellRendererComponent(
 
464
                                                      JList list,
 
465
                                                      Object value,            // value to display
 
466
                                                      int index,               // cell index
 
467
                                                      boolean isSelected,      // is the cell selected
 
468
                                                      boolean cellHasFocus)    // the list and the cell have the focus
 
469
        {
 
470
            if ( list == _refList ){
 
471
                if (list.isSelectionEmpty()) {
 
472
                    _bDelete.setEnabled(false);
 
473
                } else {
 
474
                    _bDelete.setEnabled(true);
 
475
                }
 
476
            }
 
477
            checkOkay();
 
478
            return super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
 
479
        }
 
480
    }
 
481
 
 
482
    private JTextField                  _mappingNameText;
 
483
    private JLabel                              _mappingNameLabel;
 
484
    private JTextField                  _NewNodeText;
 
485
    private JLabel                              _NewNodeLabel;
 
486
 
 
487
    private JTextField                  _subordinationText;
 
488
    private JLabel                              _subordinationLabel;
 
489
 
 
490
    private IDSModel                    _model = null;
 
491
    private JComboBox                   _comboNewNodeMapping;
 
492
    private JLabel                              _comboNewNodeLabel;
 
493
    private JComboBox                   _comboStatus;
 
494
    private JLabel                              _comboStatusLabel;
 
495
    private JLabel                              _bckListLabel;
 
496
 
 
497
    private JList                               _bckList;
 
498
    private JButton                             _bAdd;
 
499
    private JButton                             _bDelete;
 
500
    private JLabel                              _refListLabel;
 
501
    private JTextField                  _refNewRefText;
 
502
 
 
503
    private JLabel                              _refNewRefLabel;
 
504
    private JList                               _refList;
 
505
    private DefaultListModel    _refData;
 
506
 
 
507
    private boolean                             _isNewMappingNodeValid = false;
 
508
 
 
509
    private final static String _section = "mappingtree";
 
510
    static final String CONFIG_BASEDN = "cn=plugins, cn=config" ;
 
511
    static final String CONFIG_MAPPING = "cn=mapping tree, cn=config" ;
 
512
    static final String ROOT_MAPPING_NODE = "is root suffix";
 
513
    static final String DISABLE = MappingUtils.DISABLE;
 
514
    static final String BACKEND = MappingUtils.BACKEND;
 
515
    static final String REFERRAL = MappingUtils.REFERRAL;
 
516
    static final String REFERRAL_UPDATE = MappingUtils.REFERRAL_UPDATE;
 
517
    static final String ADD_REF = "addReferral";
 
518
    private final String DELETE_REF = "deleteReferral";
 
519
    private final int ROWS = 4; 
 
520
    private LDAPEntry _entry = null;
 
521
 
 
522
}