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.UserClassWrapper; 33 import org.apache.directory.ldapstudio.aciitemeditor.model.UserClassWrapperFactory; 34 import org.apache.directory.ldapstudio.valueeditors.AbstractDialogStringValueEditor; 35 import org.apache.directory.shared.ldap.aci.ProtectedItem; 36 import org.apache.directory.shared.ldap.aci.UserClass; 37 import org.eclipse.jface.viewers.ArrayContentProvider; 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 ACIItemUserClassesComposite 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 UserClassWrapper[] userClassWrappers = UserClassWrapperFactory.createUserClassWrappers(); 100 101 102 108 public ACIItemUserClassesComposite( 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( "ACIItemUserClassesComposite.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 UserClassesLabelProvider() ); 185 tableViewer.setInput( userClassWrappers ); 186 187 tableViewer.addSelectionChangedListener( new ISelectionChangedListener() 188 { 189 public void selectionChanged( SelectionChangedEvent event ) 190 { 191 userClassSelected(); 192 } 193 } ); 194 tableViewer.addCheckStateListener( new ICheckStateListener() 195 { 196 public void checkStateChanged( CheckStateChangedEvent event ) 197 { 198 userClassChecked(); 199 } 200 } ); 201 tableViewer.addDoubleClickListener( new IDoubleClickListener() 202 { 203 public void doubleClick( DoubleClickEvent event ) 204 { 205 if ( editButton.isEnabled() ) 206 { 207 editUserClass(); 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( "ACIItemUserClassesComposite.edit.button" ) ); editButton.setLayoutData( editButtonGridData ); 260 editButton.addSelectionListener( new SelectionAdapter() 261 { 262 public void widgetSelected( SelectionEvent e ) 263 { 264 editUserClass(); 265 } 266 } ); 267 editButton.setEnabled( false ); 268 269 selectAllButton = new Button( buttonComposite, SWT.NONE ); 270 selectAllButton.setText( Messages.getString( "ACIItemUserClassesComposite.selectAll.button" ) ); selectAllButton.setLayoutData( selectAllButtonGridData ); 272 selectAllButton.addSelectionListener( new SelectionAdapter() 273 { 274 public void widgetSelected( SelectionEvent e ) 275 { 276 tableViewer.setCheckedElements( userClassWrappers ); 277 refreshTable(); 278 } 279 } ); 280 281 deselectAllButton = new Button( buttonComposite, SWT.NONE ); 282 deselectAllButton.setText( Messages.getString( "ACIItemUserClassesComposite.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( "ACIItemUserClassesComposite.revert.buton" ) ); 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( userClassWrappers ) ); 302 elements.removeAll( Arrays.asList( tableViewer.getCheckedElements() ) ); 303 tableViewer.setCheckedElements( elements.toArray() ); 304 refreshTable(); 305 } 306 } ); 307 308 } 309 310 316 private class UserClassesLabelProvider extends LabelProvider 317 { 318 319 326 public Image getImage( Object element ) 327 { 328 if ( element instanceof UserClassWrapper ) 329 { 330 UserClassWrapper wrapper = ( UserClassWrapper ) element; 331 if ( tableViewer.getChecked( wrapper ) ) 332 { 333 try 334 { 335 wrapper.getUserClass(); 336 } 337 catch ( ParseException e ) 338 { 339 return Activator.getDefault().getImage( 340 Messages.getString( "ACIItemUserClassesComposite.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 setUserClasses( Collection <UserClass> userClasses ) 367 { 368 for ( UserClassWrapper userClassWrapper : userClassWrappers ) 370 { 371 tableViewer.setChecked( userClassWrapper, false ); 372 } 373 374 for ( UserClass userClass : userClasses ) 375 { 376 for ( UserClassWrapper userClassWrapper : userClassWrappers ) 377 { 378 if ( userClassWrapper.getClazz() == userClass.getClass() ) 379 { 380 userClassWrapper.setUserClass( userClass ); 381 tableViewer.setChecked( userClassWrapper, true ); 382 } 383 } 384 } 385 386 refreshTable(); 387 } 388 389 390 396 public Collection <UserClass> getUserClasses() throws ParseException 397 { 398 Collection <UserClass> userClasses = new ArrayList <UserClass>(); 399 400 for ( UserClassWrapper userClassWrapper : userClassWrappers ) 401 { 402 if ( tableViewer.getChecked( userClassWrapper ) ) 403 { 404 UserClass userClass = userClassWrapper.getUserClass(); 405 userClasses.add( userClass ); 406 } 407 } 408 409 return userClasses; 410 } 411 412 413 418 public void setVisible( boolean visible ) 419 { 420 super.setVisible( visible ); 421 ( ( GridData ) getLayoutData() ).heightHint = visible ? -1 : 0; 422 } 423 424 425 429 private UserClassWrapper getSelectedUserClassWrapper() 430 { 431 UserClassWrapper userClassWrapper = null; 432 433 IStructuredSelection selection = ( IStructuredSelection ) tableViewer.getSelection(); 434 if ( !selection.isEmpty() ) 435 { 436 Object element = selection.getFirstElement(); 437 if ( element instanceof UserClassWrapper ) 438 { 439 userClassWrapper = ( UserClassWrapper ) element; 440 } 441 } 442 443 return userClassWrapper; 444 } 445 446 447 452 private void userClassSelected() 453 { 454 UserClassWrapper userClassWrapper = getSelectedUserClassWrapper(); 455 456 if ( userClassWrapper == null || !userClassWrapper.isEditable() ) 457 { 458 editButton.setEnabled( false ); 459 } 460 else 461 { 462 editButton.setEnabled( true ); 463 } 464 } 465 466 467 471 private void userClassChecked() 472 { 473 refreshTable(); 474 } 475 476 477 480 private void editUserClass() 481 { 482 UserClassWrapper userClassWrapper = getSelectedUserClassWrapper(); 483 484 AbstractDialogStringValueEditor editor = userClassWrapper.getValueEditor(); 485 if ( editor != null ) 486 { 487 MultiValuedDialog dialog = new MultiValuedDialog( getShell(), userClassWrapper.getDisplayName(), 488 userClassWrapper.getValues(), context, editor ); 489 dialog.open(); 490 refreshTable(); 491 } 492 } 493 494 495 498 private void refreshTable() 499 { 500 tableViewer.refresh(); 501 } 502 503 } 504 | Popular Tags |