1 20 package org.apache.directory.ldapstudio.aciitemeditor.widgets; 21 22 23 import java.util.ArrayList ; 24 import java.util.Collection ; 25 import java.util.Iterator ; 26 import java.util.List ; 27 28 import org.apache.directory.ldapstudio.aciitemeditor.ACIItemValueWithContext; 29 import org.apache.directory.ldapstudio.aciitemeditor.Activator; 30 import org.apache.directory.ldapstudio.aciitemeditor.dialogs.ItemPermissionDialog; 31 import org.apache.directory.ldapstudio.aciitemeditor.model.UserClassWrapper; 32 import org.apache.directory.shared.ldap.aci.GrantAndDenial; 33 import org.apache.directory.shared.ldap.aci.ItemPermission; 34 import org.apache.directory.shared.ldap.aci.UserClass; 35 import org.eclipse.jface.viewers.ArrayContentProvider; 36 import org.eclipse.jface.viewers.DoubleClickEvent; 37 import org.eclipse.jface.viewers.IDoubleClickListener; 38 import org.eclipse.jface.viewers.ISelectionChangedListener; 39 import org.eclipse.jface.viewers.IStructuredSelection; 40 import org.eclipse.jface.viewers.LabelProvider; 41 import org.eclipse.jface.viewers.SelectionChangedEvent; 42 import org.eclipse.jface.viewers.TableViewer; 43 import org.eclipse.swt.SWT; 44 import org.eclipse.swt.events.SelectionAdapter; 45 import org.eclipse.swt.events.SelectionEvent; 46 import org.eclipse.swt.layout.GridData; 47 import org.eclipse.swt.layout.GridLayout; 48 import org.eclipse.swt.widgets.Button; 49 import org.eclipse.swt.widgets.Composite; 50 import org.eclipse.swt.widgets.Label; 51 import org.eclipse.swt.widgets.Table; 52 53 54 60 public class ACIItemItemPermissionsComposite extends Composite 61 { 62 63 64 private ACIItemValueWithContext context; 65 66 67 private Composite composite = null; 68 69 70 private Label label = null; 71 72 73 private Table table = null; 74 75 76 private TableViewer tableViewer = null; 77 78 79 private Composite buttonComposite = null; 80 81 82 private Button addButton = null; 83 84 85 private Button editButton = null; 86 87 88 private Button deleteButton = null; 89 90 91 private List <ItemPermissionWrapper> itemPermissionWrappers = new ArrayList <ItemPermissionWrapper>(); 92 93 99 private class ItemPermissionWrapper 100 { 101 102 private ItemPermission itemPermission; 103 104 105 110 private ItemPermissionWrapper( ItemPermission itemPermission ) 111 { 112 this.itemPermission = itemPermission; 113 } 114 115 116 121 public String toString() 122 { 123 if ( itemPermission == null ) 124 { 125 return "<UNKNOWN>"; } 127 else 128 { 129 StringBuffer buffer = new StringBuffer (); 130 if ( itemPermission.getPrecedence() > -1 ) 131 { 132 buffer.append( '(' ); 133 buffer.append( itemPermission.getPrecedence() ); 134 buffer.append( ')' ); 135 buffer.append( ' ' ); 136 } 137 for ( Iterator <UserClass> it = ( ( Collection <UserClass> ) itemPermission.getUserClasses() ).iterator(); it 138 .hasNext(); ) 139 { 140 UserClass uc = it.next(); 141 String s = UserClassWrapper.classToDisplayMap.get( uc.getClass() ); 142 buffer.append( s ); 143 144 if ( it.hasNext() ) 145 { 146 buffer.append( ',' ); 147 } 148 } 149 buffer.append( ':' ); 150 buffer.append( ' ' ); 151 for ( Iterator <GrantAndDenial> it = ( ( Collection <GrantAndDenial> ) itemPermission 152 .getGrantsAndDenials() ).iterator(); it.hasNext(); ) 153 { 154 GrantAndDenial gd = it.next(); 155 buffer.append( gd.isGrant() ? '+' : '-' ); 156 buffer.append( gd.getMicroOperation().getName() ); 157 158 if ( it.hasNext() ) 159 { 160 buffer.append( ',' ); 161 } 162 } 163 164 String s = buffer.toString(); 165 s = s.replace( '\r', ' ' ); 166 s = s.replace( '\n', ' ' ); 167 if ( s.length() > 50 ) 168 { 169 String temp = s; 170 s = temp.substring( 0, 25 ); 171 s = s + "..."; s = s + temp.substring( temp.length() - 25, temp.length() ); 173 } 174 return s; 175 } 176 } 177 } 178 179 180 187 public ACIItemItemPermissionsComposite( Composite parent, int style ) 188 { 189 super( parent, style ); 190 191 GridLayout layout = new GridLayout(); 192 layout.horizontalSpacing = 0; 193 layout.verticalSpacing = 0; 194 layout.marginHeight = 0; 195 layout.marginWidth = 0; 196 setLayout( layout ); 197 198 GridData layoutData = new GridData(); 199 layoutData.horizontalAlignment = GridData.FILL; 200 layoutData.grabExcessHorizontalSpace = true; 201 layoutData.verticalAlignment = GridData.CENTER; 202 setLayoutData( layoutData ); 203 204 createComposite(); 205 } 206 207 208 212 private void createComposite() 213 { 214 215 GridData labelGridData = new GridData(); 216 labelGridData.horizontalSpan = 2; 217 labelGridData.verticalAlignment = GridData.CENTER; 218 labelGridData.grabExcessHorizontalSpace = true; 219 labelGridData.horizontalAlignment = GridData.FILL; 220 221 GridLayout gridLayout = new GridLayout(); 222 gridLayout.makeColumnsEqualWidth = false; 223 gridLayout.numColumns = 2; 224 225 GridData gridData = new GridData(); 226 gridData.horizontalAlignment = GridData.FILL; 227 gridData.grabExcessHorizontalSpace = true; 228 gridData.verticalSpan = 1; 229 gridData.verticalAlignment = GridData.BEGINNING; 230 231 composite = new Composite( this, SWT.NONE ); 232 composite.setLayoutData( gridData ); 233 composite.setLayout( gridLayout ); 234 235 label = new Label( composite, SWT.NONE ); 236 label.setText( Messages.getString( "ACIItemItemPermissionsComposite.description" ) ); label.setLayoutData( labelGridData ); 238 239 createTable(); 240 241 createButtonComposite(); 242 } 243 244 245 249 private void createTable() 250 { 251 GridData tableGridData = new GridData(); 252 tableGridData.grabExcessHorizontalSpace = true; 253 tableGridData.verticalAlignment = GridData.FILL; 254 tableGridData.horizontalAlignment = GridData.FILL; 255 257 table = new Table( composite, SWT.BORDER ); 258 table.setHeaderVisible( false ); 259 table.setLayoutData( tableGridData ); 260 table.setLinesVisible( false ); 261 tableViewer = new TableViewer( table ); 262 tableViewer.setContentProvider( new ArrayContentProvider() ); 263 tableViewer.setLabelProvider( new LabelProvider() ); 264 tableViewer.setInput( itemPermissionWrappers ); 265 266 tableViewer.addSelectionChangedListener( new ISelectionChangedListener() 267 { 268 public void selectionChanged( SelectionChangedEvent event ) 269 { 270 itemPermissionSelected(); 271 } 272 } ); 273 274 tableViewer.addDoubleClickListener( new IDoubleClickListener() 275 { 276 public void doubleClick( DoubleClickEvent event ) 277 { 278 editItemPermission(); 279 } 280 } ); 281 } 282 283 284 288 private void createButtonComposite() 289 { 290 GridData deleteButtonGridData = new GridData(); 291 deleteButtonGridData.horizontalAlignment = GridData.FILL; 292 deleteButtonGridData.grabExcessHorizontalSpace = false; 293 deleteButtonGridData.verticalAlignment = GridData.BEGINNING; 294 deleteButtonGridData.widthHint = Activator.getButtonWidth( this ); 295 296 GridData editButtonGridData = new GridData(); 297 editButtonGridData.horizontalAlignment = GridData.FILL; 298 editButtonGridData.grabExcessHorizontalSpace = false; 299 editButtonGridData.verticalAlignment = GridData.BEGINNING; 300 editButtonGridData.widthHint = Activator.getButtonWidth( this ); 301 302 GridData addButtonGridData = new GridData(); 303 addButtonGridData.horizontalAlignment = GridData.FILL; 304 addButtonGridData.grabExcessHorizontalSpace = false; 305 addButtonGridData.verticalAlignment = GridData.BEGINNING; 306 addButtonGridData.widthHint = Activator.getButtonWidth( this ); 307 308 GridLayout gridLayout = new GridLayout(); 309 gridLayout.marginWidth = 0; 310 gridLayout.marginHeight = 0; 311 GridData gridData = new GridData(); 312 gridData.horizontalAlignment = GridData.CENTER; 313 gridData.grabExcessHorizontalSpace = false; 314 gridData.grabExcessVerticalSpace = false; 315 gridData.verticalAlignment = GridData.FILL; 316 317 buttonComposite = new Composite( composite, SWT.NONE ); 318 buttonComposite.setLayoutData( gridData ); 319 buttonComposite.setLayout( gridLayout ); 320 321 addButton = new Button( buttonComposite, SWT.NONE ); 322 addButton.setText( Messages.getString( "ACIItemItemPermissionsComposite.add.button" ) ); addButton.setLayoutData( addButtonGridData ); 324 addButton.addSelectionListener( new SelectionAdapter() 325 { 326 public void widgetSelected( SelectionEvent e ) 327 { 328 addItemPermission(); 329 } 330 } ); 331 332 editButton = new Button( buttonComposite, SWT.NONE ); 333 editButton.setText( Messages.getString( "ACIItemItemPermissionsComposite.edit.button" ) ); editButton.setLayoutData( editButtonGridData ); 335 editButton.addSelectionListener( new SelectionAdapter() 336 { 337 public void widgetSelected( SelectionEvent e ) 338 { 339 editItemPermission(); 340 } 341 } ); 342 editButton.setEnabled( false ); 343 344 deleteButton = new Button( buttonComposite, SWT.NONE ); 345 deleteButton.setText( Messages.getString( "ACIItemItemPermissionsComposite.delete.button" ) ); deleteButton.setLayoutData( deleteButtonGridData ); 347 deleteButton.addSelectionListener( new SelectionAdapter() 348 { 349 public void widgetSelected( SelectionEvent e ) 350 { 351 deleteItemPermission(); 352 } 353 } ); 354 deleteButton.setEnabled( false ); 355 356 } 357 358 359 364 public void setVisible( boolean visible ) 365 { 366 super.setVisible( visible ); 367 ( ( GridData ) getLayoutData() ).heightHint = visible ? -1 : 0; 368 } 369 370 371 376 public void setContext( ACIItemValueWithContext context ) 377 { 378 this.context = context; 379 } 380 381 382 387 public void setItemPermissions( Collection <ItemPermission> itemPermissions ) 388 { 389 itemPermissionWrappers.clear(); 390 391 for ( ItemPermission itemPermission : itemPermissions ) 392 { 393 ItemPermissionWrapper itemPermissionWrapper = new ItemPermissionWrapper( itemPermission ); 394 395 itemPermissionWrappers.add( itemPermissionWrapper ); 396 } 397 398 tableViewer.refresh(); 399 } 400 401 402 407 public Collection <ItemPermission> getItemPermissions() 408 { 409 Collection <ItemPermission> itemPermissions = new ArrayList <ItemPermission>(); 410 411 for ( ItemPermissionWrapper itemPermissionWrapper : itemPermissionWrappers ) 412 { 413 itemPermissions.add( itemPermissionWrapper.itemPermission ); 414 } 415 416 return itemPermissions; 417 } 418 419 420 424 private ItemPermissionWrapper getSelectedItemPermissionWrapper() 425 { 426 ItemPermissionWrapper itemPermissionWrapper = null; 427 428 IStructuredSelection selection = ( IStructuredSelection ) tableViewer.getSelection(); 429 if ( !selection.isEmpty() ) 430 { 431 Object element = selection.getFirstElement(); 432 if ( element instanceof ItemPermissionWrapper ) 433 { 434 itemPermissionWrapper = ( ItemPermissionWrapper ) element; 435 } 436 } 437 438 return itemPermissionWrapper; 439 } 440 441 442 446 private void addItemPermission() 447 { 448 ItemPermissionDialog dialog = new ItemPermissionDialog( getShell(), null, context ); 449 if ( dialog.open() == ItemPermissionDialog.OK && dialog.getItemPermission() != null ) 450 { 451 ItemPermissionWrapper itemPermissionWrapper = new ItemPermissionWrapper( dialog.getItemPermission() ); 452 itemPermissionWrappers.add( itemPermissionWrapper ); 453 454 tableViewer.refresh(); 455 } 456 } 457 458 459 463 private void editItemPermission() 464 { 465 ItemPermissionWrapper oldItemPermissionWrapper = getSelectedItemPermissionWrapper(); 466 if ( oldItemPermissionWrapper != null ) 467 { 468 ItemPermissionDialog dialog = new ItemPermissionDialog( getShell(), 469 oldItemPermissionWrapper.itemPermission, context ); 470 if ( dialog.open() == ItemPermissionDialog.OK ) 471 { 472 oldItemPermissionWrapper.itemPermission = dialog.getItemPermission(); 473 tableViewer.refresh(); 474 } 475 } 476 } 477 478 479 482 private void deleteItemPermission() 483 { 484 ItemPermissionWrapper itemPermissionWrapper = getSelectedItemPermissionWrapper(); 485 if ( itemPermissionWrapper != null ) 486 { 487 itemPermissionWrappers.remove( itemPermissionWrapper ); 488 tableViewer.refresh(); 489 } 490 } 491 492 493 497 private void itemPermissionSelected() 498 { 499 ItemPermissionWrapper itemPermissionWrapper = getSelectedItemPermissionWrapper(); 500 501 if ( itemPermissionWrapper == null ) 502 { 503 editButton.setEnabled( false ); 504 deleteButton.setEnabled( false ); 505 } 506 else 507 { 508 editButton.setEnabled( true ); 509 deleteButton.setEnabled( true ); 510 } 511 } 512 513 } 514 | Popular Tags |