1 20 package org.apache.directory.ldapstudio.aciitemeditor.widgets; 21 22 23 import java.text.ParseException ; 24 import java.util.ArrayList ; 25 import java.util.Arrays ; 26 import java.util.Collection ; 27 import java.util.List ; 28 29 import org.apache.directory.ldapstudio.aciitemeditor.ACIItemValueWithContext; 30 import org.apache.directory.ldapstudio.aciitemeditor.Activator; 31 import org.apache.directory.ldapstudio.aciitemeditor.dialogs.MultiValuedDialog; 32 import org.apache.directory.ldapstudio.aciitemeditor.model.ProtectedItemWrapper; 33 import org.apache.directory.ldapstudio.aciitemeditor.model.ProtectedItemWrapperFactory; 34 import org.apache.directory.ldapstudio.valueeditors.AbstractDialogStringValueEditor; 35 import org.apache.directory.shared.ldap.aci.ProtectedItem; 36 import org.eclipse.jface.viewers.ArrayContentProvider; 37 import org.eclipse.jface.viewers.CellEditor; 38 import org.eclipse.jface.viewers.CheckStateChangedEvent; 39 import org.eclipse.jface.viewers.CheckboxTableViewer; 40 import org.eclipse.jface.viewers.DoubleClickEvent; 41 import org.eclipse.jface.viewers.ICheckStateListener; 42 import org.eclipse.jface.viewers.IDoubleClickListener; 43 import org.eclipse.jface.viewers.ISelectionChangedListener; 44 import org.eclipse.jface.viewers.IStructuredSelection; 45 import org.eclipse.jface.viewers.LabelProvider; 46 import org.eclipse.jface.viewers.SelectionChangedEvent; 47 import org.eclipse.swt.SWT; 48 import org.eclipse.swt.events.SelectionAdapter; 49 import org.eclipse.swt.events.SelectionEvent; 50 import org.eclipse.swt.graphics.Image; 51 import org.eclipse.swt.layout.GridData; 52 import org.eclipse.swt.layout.GridLayout; 53 import org.eclipse.swt.widgets.Button; 54 import org.eclipse.swt.widgets.Composite; 55 import org.eclipse.swt.widgets.Label; 56 import org.eclipse.swt.widgets.Table; 57 58 59 65 public class ACIItemProtectedItemsComposite extends Composite 66 { 67 68 69 private ACIItemValueWithContext context; 70 71 72 private Composite composite = null; 73 74 75 private Label label = null; 76 77 78 private Table table = null; 79 80 81 private CheckboxTableViewer tableViewer = null; 82 83 84 private Composite buttonComposite = null; 85 86 87 private Button editButton = null; 88 89 90 private Button selectAllButton = null; 91 92 93 private Button deselectAllButton = null; 94 95 96 private Button reverseSelectionButton = null; 97 98 99 private ProtectedItemWrapper[] protectedItemWrappers = ProtectedItemWrapperFactory.createProtectedItemWrappers(); 100 101 102 108 public ACIItemProtectedItemsComposite( Composite parent, int style ) 109 { 110 super( parent, style ); 111 112 GridLayout layout = new GridLayout(); 113 layout.horizontalSpacing = 0; 114 layout.verticalSpacing = 0; 115 layout.marginHeight = 0; 116 layout.marginWidth = 0; 117 setLayout( layout ); 118 119 GridData layoutData = new GridData(); 120 layoutData.horizontalAlignment = GridData.FILL; 121 layoutData.grabExcessHorizontalSpace = true; 122 layoutData.verticalAlignment = GridData.CENTER; 123 setLayoutData( layoutData ); 124 125 createComposite(); 126 } 127 128 129 133 private void createComposite() 134 { 135 136 GridData labelGridData = new GridData(); 137 labelGridData.horizontalSpan = 2; 138 labelGridData.verticalAlignment = GridData.CENTER; 139 labelGridData.grabExcessHorizontalSpace = true; 140 labelGridData.horizontalAlignment = GridData.FILL; 141 142 GridLayout gridLayout = new GridLayout(); 143 gridLayout.makeColumnsEqualWidth = false; 144 gridLayout.numColumns = 2; 145 146 GridData gridData = new GridData(); 147 gridData.horizontalAlignment = GridData.FILL; 148 gridData.grabExcessHorizontalSpace = true; 149 gridData.verticalSpan = 1; 150 gridData.verticalAlignment = GridData.BEGINNING; 151 152 composite = new Composite( this, SWT.NONE ); 153 composite.setLayoutData( gridData ); 154 composite.setLayout( gridLayout ); 155 156 label = new Label( composite, SWT.NONE ); 157 label.setText( Messages.getString( "ACIItemProtectedItemsComposite.description" ) ); label.setLayoutData( labelGridData ); 159 160 createTable(); 161 162 createButtonComposite(); 163 } 164 165 166 170 private void createTable() 171 { 172 GridData tableGridData = new GridData(); 173 tableGridData.grabExcessHorizontalSpace = true; 174 tableGridData.verticalAlignment = GridData.FILL; 175 tableGridData.horizontalAlignment = GridData.FILL; 176 178 table = new Table( composite, SWT.BORDER | SWT.CHECK ); 179 table.setHeaderVisible( false ); 180 table.setLayoutData( tableGridData ); 181 table.setLinesVisible( false ); 182 tableViewer = new CheckboxTableViewer( table ); 183 tableViewer.setContentProvider( new ArrayContentProvider() ); 184 tableViewer.setLabelProvider( new ProtectedItemsLabelProvider() ); 185 tableViewer.setInput( protectedItemWrappers ); 186 187 tableViewer.addSelectionChangedListener( new ISelectionChangedListener() 188 { 189 public void selectionChanged( SelectionChangedEvent event ) 190 { 191 protectedItemSelected(); 192 } 193 } ); 194 tableViewer.addCheckStateListener( new ICheckStateListener() 195 { 196 public void checkStateChanged( CheckStateChangedEvent event ) 197 { 198 protectedItemChecked(); 199 } 200 } ); 201 tableViewer.addDoubleClickListener( new IDoubleClickListener() 202 { 203 public void doubleClick( DoubleClickEvent event ) 204 { 205 if ( editButton.isEnabled() ) 206 { 207 editProtectedItem(); 208 } 209 } 210 } ); 211 } 212 213 214 218 private void createButtonComposite() 219 { 220 GridData reverseSelectionButtonGridData = new GridData(); 221 reverseSelectionButtonGridData.horizontalAlignment = GridData.FILL; 222 reverseSelectionButtonGridData.grabExcessHorizontalSpace = false; 223 reverseSelectionButtonGridData.verticalAlignment = GridData.BEGINNING; 224 reverseSelectionButtonGridData.widthHint = Activator.getButtonWidth( this ); 225 226 GridData deselectAllButtonGridData = new GridData(); 227 deselectAllButtonGridData.horizontalAlignment = GridData.FILL; 228 deselectAllButtonGridData.grabExcessHorizontalSpace = false; 229 deselectAllButtonGridData.verticalAlignment = GridData.BEGINNING; 230 deselectAllButtonGridData.widthHint = Activator.getButtonWidth( this ); 231 232 GridData selectAllButtonGridData = new GridData(); 233 selectAllButtonGridData.horizontalAlignment = GridData.FILL; 234 selectAllButtonGridData.grabExcessHorizontalSpace = false; 235 selectAllButtonGridData.verticalAlignment = GridData.BEGINNING; 236 selectAllButtonGridData.widthHint = Activator.getButtonWidth( this ); 237 238 GridData editButtonGridData = new GridData(); 239 editButtonGridData.horizontalAlignment = GridData.FILL; 240 editButtonGridData.grabExcessHorizontalSpace = false; 241 editButtonGridData.verticalAlignment = GridData.BEGINNING; 242 editButtonGridData.widthHint = Activator.getButtonWidth( this ); 243 244 GridLayout gridLayout = new GridLayout(); 245 gridLayout.marginWidth = 0; 246 gridLayout.marginHeight = 0; 247 GridData gridData = new GridData(); 248 gridData.horizontalAlignment = GridData.CENTER; 249 gridData.grabExcessHorizontalSpace = false; 250 gridData.grabExcessVerticalSpace = false; 251 gridData.verticalAlignment = GridData.FILL; 252 253 buttonComposite = new Composite( composite, SWT.NONE ); 254 buttonComposite.setLayoutData( gridData ); 255 buttonComposite.setLayout( gridLayout ); 256 257 editButton = new Button( buttonComposite, SWT.NONE ); 258 editButton.setText( Messages.getString( "ACIItemProtectedItemsComposite.edit.button" ) ); editButton.setLayoutData( editButtonGridData ); 260 editButton.addSelectionListener( new SelectionAdapter() 261 { 262 public void widgetSelected( SelectionEvent e ) 263 { 264 editProtectedItem(); 265 } 266 } ); 267 editButton.setEnabled( false ); 268 269 selectAllButton = new Button( buttonComposite, SWT.NONE ); 270 selectAllButton.setText( Messages.getString( "ACIItemProtectedItemsComposite.selectAll.button" ) ); selectAllButton.setLayoutData( selectAllButtonGridData ); 272 selectAllButton.addSelectionListener( new SelectionAdapter() 273 { 274 public void widgetSelected( SelectionEvent e ) 275 { 276 tableViewer.setCheckedElements( protectedItemWrappers ); 277 refreshTable(); 278 } 279 } ); 280 281 deselectAllButton = new Button( buttonComposite, SWT.NONE ); 282 deselectAllButton.setText( Messages.getString( "ACIItemProtectedItemsComposite.deselectAll.button" ) ); deselectAllButton.setLayoutData( deselectAllButtonGridData ); 284 deselectAllButton.addSelectionListener( new SelectionAdapter() 285 { 286 public void widgetSelected( SelectionEvent e ) 287 { 288 tableViewer.setCheckedElements( new ProtectedItem[0] ); 289 refreshTable(); 290 } 291 } ); 292 293 reverseSelectionButton = new Button( buttonComposite, SWT.NONE ); 294 reverseSelectionButton.setText( Messages.getString( "ACIItemProtectedItemsComposite.revers.button" ) ); reverseSelectionButton.setLayoutData( reverseSelectionButtonGridData ); 296 reverseSelectionButton.addSelectionListener( new SelectionAdapter() 297 { 298 public void widgetSelected( SelectionEvent e ) 299 { 300 List <Object > elements = new ArrayList <Object >(); 301 elements.addAll( Arrays.asList( protectedItemWrappers ) ); 302 elements.removeAll( Arrays.asList( tableViewer.getCheckedElements() ) ); 303 tableViewer.setCheckedElements( elements.toArray() ); 304 refreshTable(); 305 } 306 } ); 307 308 } 309 310 316 private class ProtectedItemsLabelProvider extends LabelProvider 317 { 318 319 326 public Image getImage( Object element ) 327 { 328 if ( element instanceof ProtectedItemWrapper ) 329 { 330 ProtectedItemWrapper wrapper = ( ProtectedItemWrapper ) element; 331 if ( tableViewer.getChecked( wrapper ) ) 332 { 333 try 334 { 335 wrapper.getProtectedItem(); 336 } 337 catch ( ParseException e ) 338 { 339 return Activator.getDefault().getImage( 340 Messages.getString( "ACIItemProtectedItemsComposite.error.icon" ) ); } 342 } 343 } 344 345 return null; 346 } 347 } 348 349 350 355 public void setContext( ACIItemValueWithContext context ) 356 { 357 this.context = context; 358 } 359 360 361 366 public void setProtectedItems( Collection <ProtectedItem> protectedItems ) 367 { 368 for ( ProtectedItemWrapper protectedItemWrapper : protectedItemWrappers ) 370 { 371 tableViewer.setChecked( protectedItemWrapper, false ); 372 } 373 374 for ( ProtectedItem item : protectedItems ) 375 { 376 for ( ProtectedItemWrapper protectedItemWrapper : protectedItemWrappers ) 377 { 378 379 if ( protectedItemWrapper.getClazz() == item.getClass() ) 380 { 381 protectedItemWrapper.setProtectedItem( item ); 382 tableViewer.setChecked( protectedItemWrapper, true ); 383 } 384 } 385 } 386 387 refreshTable(); 388 } 389 390 391 397 public Collection <ProtectedItem> getProtectedItems() throws ParseException  398 { 399 400 Collection <ProtectedItem> protectedItems = new ArrayList <ProtectedItem>(); 401 402 for ( ProtectedItemWrapper protectedItemWrapper : protectedItemWrappers ) 403 { 404 if ( tableViewer.getChecked( protectedItemWrapper ) ) 405 { 406 ProtectedItem protectedItem = protectedItemWrapper.getProtectedItem(); 407 protectedItems.add( protectedItem ); 408 } 409 } 410 411 return protectedItems; 412 } 413 414 415 420 public void setVisible( boolean visible ) 421 { 422 super.setVisible( visible ); 423 ( ( GridData ) getLayoutData() ).heightHint = visible ? -1 : 0; 424 } 425 426 427 431 private ProtectedItemWrapper getSelectedProtectedItemWrapper() 432 { 433 ProtectedItemWrapper protectedItemWrapper = null; 434 435 IStructuredSelection selection = ( IStructuredSelection ) tableViewer.getSelection(); 436 if ( !selection.isEmpty() ) 437 { 438 Object element = selection.getFirstElement(); 439 if ( element instanceof ProtectedItemWrapper ) 440 { 441 protectedItemWrapper = ( ProtectedItemWrapper ) element; 442 } 443 } 444 445 return protectedItemWrapper; 446 } 447 448 449 454 private void protectedItemSelected() 455 { 456 ProtectedItemWrapper protectedItemWrapper = getSelectedProtectedItemWrapper(); 457 458 if ( protectedItemWrapper == null || !protectedItemWrapper.isEditable() ) 459 { 460 editButton.setEnabled( false ); 461 } 462 else 463 { 464 editButton.setEnabled( true ); 465 } 466 } 467 468 469 472 private void protectedItemChecked() 473 { 474 refreshTable(); 475 } 476 477 478 482 private void editProtectedItem() 483 { 484 ProtectedItemWrapper protectedItemWrapper = getSelectedProtectedItemWrapper(); 485 486 AbstractDialogStringValueEditor valueEditor = protectedItemWrapper.getValueEditor(); 487 if ( valueEditor != null ) 488 { 489 if ( protectedItemWrapper.isMultivalued() ) 490 { 491 MultiValuedDialog dialog = new MultiValuedDialog( getShell(), protectedItemWrapper.getDisplayName(), 492 protectedItemWrapper.getValues(), context, valueEditor ); 493 dialog.open(); 494 refreshTable(); 495 } 496 else 497 { 498 List <String > values = protectedItemWrapper.getValues(); 499 String oldValue = values.isEmpty() ? null : values.get( 0 ); 500 if ( oldValue == null ) 501 { 502 oldValue = ""; } 504 Object oldRawValue = valueEditor.getRawValue( context.getConnection(), oldValue ); 505 506 CellEditor cellEditor = valueEditor.getCellEditor(); 507 cellEditor.setValue( oldRawValue ); 508 cellEditor.activate(); 509 Object newRawValue = cellEditor.getValue(); 510 511 if ( newRawValue != null ) 512 { 513 String newValue = ( String ) valueEditor.getStringOrBinaryValue( newRawValue ); 514 515 values.clear(); 516 values.add( newValue ); 517 tableViewer.refresh(); 518 } 519 } 520 } 521 } 522 523 524 527 private void refreshTable() 528 { 529 tableViewer.refresh(); 530 } 531 532 } 533 | Popular Tags |