You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by se...@apache.org on 2007/01/08 01:07:37 UTC
svn commit: r493883 [1/2] - in
/directory/sandbox/seelmann/trunk/ldapstudio-aciitemeditor: lib/
src/main/java/org/apache/directory/ldapstudio/aciitemeditor/
src/main/java/org/apache/directory/ldapstudio/aciitemeditor/dialogs/
src/main/java/org/apache/d...
Author: seelmann
Date: Sun Jan 7 16:07:36 2007
New Revision: 493883
URL: http://svn.apache.org/viewvc?view=rev&rev=493883
Log:
Added MultiValuedDialog, added DnValueEditor for name and userGroups, added contextual information, refactored wrappers, replaced ldap-shared with trunks version.
Added:
directory/sandbox/seelmann/trunk/ldapstudio-aciitemeditor/src/main/java/org/apache/directory/ldapstudio/aciitemeditor/ACIItemValueWithContext.java
directory/sandbox/seelmann/trunk/ldapstudio-aciitemeditor/src/main/java/org/apache/directory/ldapstudio/aciitemeditor/dialogs/MultiValuedDialog.java
directory/sandbox/seelmann/trunk/ldapstudio-aciitemeditor/src/main/java/org/apache/directory/ldapstudio/aciitemeditor/model/
directory/sandbox/seelmann/trunk/ldapstudio-aciitemeditor/src/main/java/org/apache/directory/ldapstudio/aciitemeditor/model/Messages.java
directory/sandbox/seelmann/trunk/ldapstudio-aciitemeditor/src/main/java/org/apache/directory/ldapstudio/aciitemeditor/model/ProtectedItemWrapper.java
directory/sandbox/seelmann/trunk/ldapstudio-aciitemeditor/src/main/java/org/apache/directory/ldapstudio/aciitemeditor/model/ProtectedItemWrapperFactory.java
directory/sandbox/seelmann/trunk/ldapstudio-aciitemeditor/src/main/java/org/apache/directory/ldapstudio/aciitemeditor/model/UserClassWrapper.java
directory/sandbox/seelmann/trunk/ldapstudio-aciitemeditor/src/main/java/org/apache/directory/ldapstudio/aciitemeditor/model/UserClassWrapperFactory.java
directory/sandbox/seelmann/trunk/ldapstudio-aciitemeditor/src/main/resources/org/apache/directory/ldapstudio/aciitemeditor/model/
directory/sandbox/seelmann/trunk/ldapstudio-aciitemeditor/src/main/resources/org/apache/directory/ldapstudio/aciitemeditor/model/messages.properties
Modified:
directory/sandbox/seelmann/trunk/ldapstudio-aciitemeditor/lib/shared-ldap-0.9.6-SNAPSHOT.jar
directory/sandbox/seelmann/trunk/ldapstudio-aciitemeditor/src/main/java/org/apache/directory/ldapstudio/aciitemeditor/ACIItemValueEditor.java
directory/sandbox/seelmann/trunk/ldapstudio-aciitemeditor/src/main/java/org/apache/directory/ldapstudio/aciitemeditor/dialogs/ACIItemDialog.java
directory/sandbox/seelmann/trunk/ldapstudio-aciitemeditor/src/main/java/org/apache/directory/ldapstudio/aciitemeditor/dialogs/ItemPermissionDialog.java
directory/sandbox/seelmann/trunk/ldapstudio-aciitemeditor/src/main/java/org/apache/directory/ldapstudio/aciitemeditor/dialogs/UserPermissionDialog.java
directory/sandbox/seelmann/trunk/ldapstudio-aciitemeditor/src/main/java/org/apache/directory/ldapstudio/aciitemeditor/widgets/ACIItemItemPermissionsComposite.java
directory/sandbox/seelmann/trunk/ldapstudio-aciitemeditor/src/main/java/org/apache/directory/ldapstudio/aciitemeditor/widgets/ACIItemProtectedItemsComposite.java
directory/sandbox/seelmann/trunk/ldapstudio-aciitemeditor/src/main/java/org/apache/directory/ldapstudio/aciitemeditor/widgets/ACIItemSourceEditorComposite.java
directory/sandbox/seelmann/trunk/ldapstudio-aciitemeditor/src/main/java/org/apache/directory/ldapstudio/aciitemeditor/widgets/ACIItemTabFolderComposite.java
directory/sandbox/seelmann/trunk/ldapstudio-aciitemeditor/src/main/java/org/apache/directory/ldapstudio/aciitemeditor/widgets/ACIItemUserClassesComposite.java
directory/sandbox/seelmann/trunk/ldapstudio-aciitemeditor/src/main/java/org/apache/directory/ldapstudio/aciitemeditor/widgets/ACIItemUserPermissionsComposite.java
directory/sandbox/seelmann/trunk/ldapstudio-aciitemeditor/src/main/java/org/apache/directory/ldapstudio/aciitemeditor/widgets/ACIItemVisualEditorComposite.java
directory/sandbox/seelmann/trunk/ldapstudio-aciitemeditor/src/main/resources/org/apache/directory/ldapstudio/aciitemeditor/widgets/messages.properties
Modified: directory/sandbox/seelmann/trunk/ldapstudio-aciitemeditor/lib/shared-ldap-0.9.6-SNAPSHOT.jar
URL: http://svn.apache.org/viewvc/directory/sandbox/seelmann/trunk/ldapstudio-aciitemeditor/lib/shared-ldap-0.9.6-SNAPSHOT.jar?view=diff&rev=493883&r1=493882&r2=493883
==============================================================================
Binary files - no diff available.
Modified: directory/sandbox/seelmann/trunk/ldapstudio-aciitemeditor/src/main/java/org/apache/directory/ldapstudio/aciitemeditor/ACIItemValueEditor.java
URL: http://svn.apache.org/viewvc/directory/sandbox/seelmann/trunk/ldapstudio-aciitemeditor/src/main/java/org/apache/directory/ldapstudio/aciitemeditor/ACIItemValueEditor.java?view=diff&rev=493883&r1=493882&r2=493883
==============================================================================
--- directory/sandbox/seelmann/trunk/ldapstudio-aciitemeditor/src/main/java/org/apache/directory/ldapstudio/aciitemeditor/ACIItemValueEditor.java (original)
+++ directory/sandbox/seelmann/trunk/ldapstudio-aciitemeditor/src/main/java/org/apache/directory/ldapstudio/aciitemeditor/ACIItemValueEditor.java Sun Jan 7 16:07:36 2007
@@ -21,20 +21,26 @@
import org.apache.directory.ldapstudio.aciitemeditor.dialogs.ACIItemDialog;
+import org.apache.directory.ldapstudio.browser.core.model.AttributeHierarchy;
+import org.apache.directory.ldapstudio.browser.core.model.IConnection;
+import org.apache.directory.ldapstudio.browser.core.model.IEntry;
+import org.apache.directory.ldapstudio.browser.core.model.IValue;
import org.apache.directory.ldapstudio.browser.ui.valueeditors.AbstractDialogStringValueEditor;
import org.eclipse.swt.widgets.Shell;
/**
- * The IValueEditor implementation of this plugin.
- *
- *
+ * The IValueEditor implementation of this plugin.
+ *
* @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
* @version $Rev$, $Date$
*/
public class ACIItemValueEditor extends AbstractDialogStringValueEditor
{
+ /**
+ * The Constructor.
+ */
public ACIItemValueEditor()
{
super();
@@ -43,13 +49,19 @@
/**
* Opens the ACI item dialog.
+ *
+ * @param shell the shell
+ *
+ * @return true, if open dialog
*/
public boolean openDialog( Shell shell )
{
Object value = getValue();
- if ( value != null && value instanceof String )
+ if ( value != null && value instanceof ACIItemValueWithContext )
{
- ACIItemDialog dialog = new ACIItemDialog( shell, ( String ) value );
+ ACIItemValueWithContext context = (ACIItemValueWithContext)value;
+
+ ACIItemDialog dialog = new ACIItemDialog( shell, context );
if ( dialog.open() == ACIItemDialog.OK && !"".equals( dialog.getACIItemValue() ) ) //$NON-NLS-1$
{
setValue( dialog.getACIItemValue() );
@@ -59,4 +71,110 @@
return false;
}
+
+ /**
+ * Returns a ACIItemValueContext with the connection
+ * and entry of the attribute hierarchy and an empty value if there
+ * are no values in attributeHierarchy.
+ *
+ * Returns a ACIItemValueContext with the connection
+ * and entry of the attribute hierarchy and a value if there is
+ * one value in attributeHierarchy.
+ *
+ * @param attributeHierarchy the attribute hierarchy
+ *
+ * @return the raw value
+ */
+ public Object getRawValue( AttributeHierarchy attributeHierarchy )
+ {
+ if ( attributeHierarchy == null )
+ {
+ return null;
+ }
+ else if ( attributeHierarchy.size() == 1 && attributeHierarchy.getAttribute().getValueSize() == 0 )
+ {
+ IEntry entry = attributeHierarchy.getAttribute().getEntry();
+ IConnection connection = entry.getConnection();
+ return new ACIItemValueWithContext( connection, entry, "" );
+ }
+ else if ( attributeHierarchy.size() == 1 && attributeHierarchy.getAttribute().getValueSize() == 1 )
+ {
+ IEntry entry = attributeHierarchy.getAttribute().getEntry();
+ IConnection connection = entry.getConnection();
+ String value = getDisplayValue( attributeHierarchy );
+ return new ACIItemValueWithContext( connection, entry, value );
+ }
+ else
+ {
+ return null;
+ }
+ }
+
+
+ /**
+ * Returns a ACIItemValueContext with the connection,
+ * entry and string value of the given value.
+ *
+ * @param value the value
+ *
+ * @return the raw value
+ */
+ public Object getRawValue( IValue value )
+ {
+ Object o = super.getRawValue( value );
+ if ( o != null && o instanceof String )
+ {
+ IEntry entry = value.getAttribute().getEntry();
+ IConnection connection = entry.getConnection();
+ String v = (String) o;
+ return new ACIItemValueWithContext( connection, entry, v );
+ }
+
+ return null;
+ }
+
+
+ /**
+ * Returns a ACIItemValueContext with the given
+ * connection, value and null entry.
+ *
+ * @param value the value
+ * @param connection the connection
+ *
+ * @return the raw value
+ */
+ public Object getRawValue( IConnection connection, Object value )
+ {
+ Object o = super.getRawValue( connection, value );
+ if ( o != null && o instanceof String )
+ {
+ String v = (String) o;
+ return new ACIItemValueWithContext( connection, null, v );
+ }
+
+ return null;
+ }
+
+
+ /**
+ * Returns always the string value.
+ *
+ * Reimplementation, because getRawValue() returns a
+ * DnValueEditorRawValueWrapper.
+ *
+ * @param value the value
+ *
+ * @return the display value
+ */
+ public String getDisplayValue( IValue value )
+ {
+ if ( value == null )
+ {
+ return "NULL";
+ }
+
+ String displayValue = value.getStringValue();
+ return displayValue;
+ }
+
}
Added: directory/sandbox/seelmann/trunk/ldapstudio-aciitemeditor/src/main/java/org/apache/directory/ldapstudio/aciitemeditor/ACIItemValueWithContext.java
URL: http://svn.apache.org/viewvc/directory/sandbox/seelmann/trunk/ldapstudio-aciitemeditor/src/main/java/org/apache/directory/ldapstudio/aciitemeditor/ACIItemValueWithContext.java?view=auto&rev=493883
==============================================================================
--- directory/sandbox/seelmann/trunk/ldapstudio-aciitemeditor/src/main/java/org/apache/directory/ldapstudio/aciitemeditor/ACIItemValueWithContext.java (added)
+++ directory/sandbox/seelmann/trunk/ldapstudio-aciitemeditor/src/main/java/org/apache/directory/ldapstudio/aciitemeditor/ACIItemValueWithContext.java Sun Jan 7 16:07:36 2007
@@ -0,0 +1,71 @@
+package org.apache.directory.ldapstudio.aciitemeditor;
+
+
+import org.apache.directory.ldapstudio.browser.core.model.IConnection;
+import org.apache.directory.ldapstudio.browser.core.model.IEntry;
+
+
+/**
+ * The ACIItemValueContext is used to pass contextual
+ * information to the opened ACIItemDialog.
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ * @version $Rev$, $Date$
+ */
+public class ACIItemValueWithContext
+{
+
+ /** The connection, used to browse the directory. */
+ private IConnection connection;
+
+ /** The entry. */
+ private IEntry entry;
+
+ /** The ACI item. */
+ private String aciItemValue;
+
+
+ /**
+ * Creates a new instance of ACIItemValueContext.
+ *
+ * @param aciItemValue the ACI item value
+ * @param connection the connection
+ * @param entry the entry
+ */
+ public ACIItemValueWithContext( IConnection connection, IEntry entry, String aciItemValue )
+ {
+ this.connection = connection;
+ this.entry = entry;
+ this.aciItemValue = aciItemValue;
+ }
+
+
+ /**
+ * Gets the aci item value.
+ *
+ * @return the aciItemValue
+ */
+ public String getACIItemValue()
+ {
+ return aciItemValue;
+ }
+
+
+ /**
+ * @return the connection
+ */
+ public IConnection getConnection()
+ {
+ return connection;
+ }
+
+
+ /**
+ * @return the entry
+ */
+ public IEntry getEntry()
+ {
+ return entry;
+ }
+
+}
\ No newline at end of file
Modified: directory/sandbox/seelmann/trunk/ldapstudio-aciitemeditor/src/main/java/org/apache/directory/ldapstudio/aciitemeditor/dialogs/ACIItemDialog.java
URL: http://svn.apache.org/viewvc/directory/sandbox/seelmann/trunk/ldapstudio-aciitemeditor/src/main/java/org/apache/directory/ldapstudio/aciitemeditor/dialogs/ACIItemDialog.java?view=diff&rev=493883&r1=493882&r2=493883
==============================================================================
--- directory/sandbox/seelmann/trunk/ldapstudio-aciitemeditor/src/main/java/org/apache/directory/ldapstudio/aciitemeditor/dialogs/ACIItemDialog.java (original)
+++ directory/sandbox/seelmann/trunk/ldapstudio-aciitemeditor/src/main/java/org/apache/directory/ldapstudio/aciitemeditor/dialogs/ACIItemDialog.java Sun Jan 7 16:07:36 2007
@@ -23,6 +23,7 @@
import java.text.ParseException;
+import org.apache.directory.ldapstudio.aciitemeditor.ACIItemValueWithContext;
import org.apache.directory.ldapstudio.aciitemeditor.Activator;
import org.apache.directory.ldapstudio.aciitemeditor.widgets.ACIItemTabFolderComposite;
import org.eclipse.core.runtime.IStatus;
@@ -46,9 +47,9 @@
public class ACIItemDialog extends Dialog
{
- /** The initial value, passed by the constructor */
- private String initialValue;
-
+ /** The context containing the initial value, passed by the constructor */
+ private ACIItemValueWithContext context;
+
/** The resulting value returned by getACIItemValue() */
private String returnValue;
@@ -63,11 +64,18 @@
* @param initialValue the initial ACI item to edit, or null to
* create a new ACI item
*/
- public ACIItemDialog( Shell parentShell, String initialValue )
+ public ACIItemDialog( Shell parentShell, ACIItemValueWithContext context )
{
+
super( parentShell );
super.setShellStyle( super.getShellStyle() | SWT.RESIZE );
- this.initialValue = initialValue;
+
+ assert context != null;
+ assert context.getACIItemValue() != null;
+ assert context.getConnection() != null;
+
+ this.context = context;
+
this.returnValue = null;
}
@@ -118,9 +126,10 @@
tabFolderComposite = new ACIItemTabFolderComposite( composite, SWT.NONE );
// set initial value
- if ( initialValue != null )
+ if ( context != null )
{
- tabFolderComposite.setInput( initialValue );
+ tabFolderComposite.setContext( context );
+ tabFolderComposite.setInput( context.getACIItemValue() );
}
applyDialogFont( composite );
Modified: directory/sandbox/seelmann/trunk/ldapstudio-aciitemeditor/src/main/java/org/apache/directory/ldapstudio/aciitemeditor/dialogs/ItemPermissionDialog.java
URL: http://svn.apache.org/viewvc/directory/sandbox/seelmann/trunk/ldapstudio-aciitemeditor/src/main/java/org/apache/directory/ldapstudio/aciitemeditor/dialogs/ItemPermissionDialog.java?view=diff&rev=493883&r1=493882&r2=493883
==============================================================================
--- directory/sandbox/seelmann/trunk/ldapstudio-aciitemeditor/src/main/java/org/apache/directory/ldapstudio/aciitemeditor/dialogs/ItemPermissionDialog.java (original)
+++ directory/sandbox/seelmann/trunk/ldapstudio-aciitemeditor/src/main/java/org/apache/directory/ldapstudio/aciitemeditor/dialogs/ItemPermissionDialog.java Sun Jan 7 16:07:36 2007
@@ -23,6 +23,7 @@
import java.util.Collection;
+import org.apache.directory.ldapstudio.aciitemeditor.ACIItemValueWithContext;
import org.apache.directory.ldapstudio.aciitemeditor.Activator;
import org.apache.directory.ldapstudio.aciitemeditor.widgets.ACIItemGrantsAndDenialsComposite;
import org.apache.directory.ldapstudio.aciitemeditor.widgets.ACIItemUserClassesComposite;
@@ -52,7 +53,10 @@
*/
public class ItemPermissionDialog extends Dialog
{
-
+
+ /** The context */
+ private ACIItemValueWithContext context;
+
/** The initial value, passed by the constructor */
private ItemPermission initialItemPermission;
@@ -79,10 +83,11 @@
* @param initialValue the initial item permission to edit,
* or null to create a new item permission
*/
- public ItemPermissionDialog( Shell parentShell, ItemPermission initialItemPermission )
+ public ItemPermissionDialog( Shell parentShell, ItemPermission initialItemPermission, ACIItemValueWithContext context )
{
super( parentShell );
super.setShellStyle( super.getShellStyle() | SWT.RESIZE );
+ this.context = context;
this.initialItemPermission = initialItemPermission;
this.returnItemPermission = null;
}
@@ -162,6 +167,7 @@
// user classes
userClassesComposite = new ACIItemUserClassesComposite( composite, SWT.NONE );
+ userClassesComposite.setContext( context );
// grants and denial
grantsAndDenialsComposite = new ACIItemGrantsAndDenialsComposite( composite, SWT.NONE );
Added: directory/sandbox/seelmann/trunk/ldapstudio-aciitemeditor/src/main/java/org/apache/directory/ldapstudio/aciitemeditor/dialogs/MultiValuedDialog.java
URL: http://svn.apache.org/viewvc/directory/sandbox/seelmann/trunk/ldapstudio-aciitemeditor/src/main/java/org/apache/directory/ldapstudio/aciitemeditor/dialogs/MultiValuedDialog.java?view=auto&rev=493883
==============================================================================
--- directory/sandbox/seelmann/trunk/ldapstudio-aciitemeditor/src/main/java/org/apache/directory/ldapstudio/aciitemeditor/dialogs/MultiValuedDialog.java (added)
+++ directory/sandbox/seelmann/trunk/ldapstudio-aciitemeditor/src/main/java/org/apache/directory/ldapstudio/aciitemeditor/dialogs/MultiValuedDialog.java Sun Jan 7 16:07:36 2007
@@ -0,0 +1,377 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+
+package org.apache.directory.ldapstudio.aciitemeditor.dialogs;
+
+
+import java.util.List;
+
+import org.apache.directory.ldapstudio.aciitemeditor.ACIItemValueWithContext;
+import org.apache.directory.ldapstudio.aciitemeditor.Activator;
+import org.apache.directory.ldapstudio.aciitemeditor.widgets.Messages;
+import org.apache.directory.ldapstudio.browser.ui.valueeditors.AbstractDialogStringValueEditor;
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.jface.viewers.ArrayContentProvider;
+import org.eclipse.jface.viewers.CellEditor;
+import org.eclipse.jface.viewers.DoubleClickEvent;
+import org.eclipse.jface.viewers.IDoubleClickListener;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Table;
+
+
+/**
+ * Dialog to edit user classes or protected items with multiple values.
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ * @version $Rev$, $Date$
+ */
+public class MultiValuedDialog extends Dialog
+{
+ /** The dialog title */
+ private String displayName;
+
+ /** The value editor */
+ private AbstractDialogStringValueEditor valueEditor;
+
+ /** The values, may be empty. */
+ private List<String> values;
+
+ /** The context */
+ private ACIItemValueWithContext context;
+
+ /** The inner composite for all the content */
+ private Composite composite = null;
+
+ /** The table control for the table viewer */
+ private Table table = null;
+
+ /** The table viewer containing all user classes */
+ private TableViewer tableViewer = null;
+
+ /** The composite containing the buttons */
+ private Composite buttonComposite = null;
+
+ /** The add button */
+ private Button addButton = null;
+
+ /** The edit button */
+ private Button editButton = null;
+
+ /** The delete button */
+ private Button deleteButton = null;
+
+
+ /**
+ * Creates a new instance of MultiValuedDialog.
+ *
+ * @param parentShell the shell
+ * @param displayName the display name of the edited element
+ * @param values a modifyable list of values
+ * @param context the context
+ * @param valueEditor the detail value editor
+ */
+ public MultiValuedDialog( Shell parentShell, String displayName, List<String> values, ACIItemValueWithContext context, AbstractDialogStringValueEditor valueEditor )
+ {
+ super( parentShell );
+ super.setShellStyle( super.getShellStyle() | SWT.RESIZE );
+
+ this.displayName = displayName;
+ this.values = values;
+ this.context = context;
+ this.valueEditor = valueEditor;
+ }
+
+
+ /**
+ * Sets the dialog title.
+ */
+ protected void configureShell( Shell shell )
+ {
+ super.configureShell( shell );
+ shell.setText( "Edit " + displayName + " Values" );
+ }
+
+
+ /**
+ * Creates only a OK button.
+ */
+ protected void createButtonsForButtonBar( Composite parent )
+ {
+ createButton( parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL, false );
+ }
+
+
+
+ /**
+ * {@inheritDoc}
+ */
+ protected Control createDialogArea( Composite parent )
+ {
+ // create composite
+ composite = ( Composite ) super.createDialogArea( parent );
+ GridData gd = new GridData( GridData.FILL_BOTH );
+ gd.widthHint = convertHorizontalDLUsToPixels( IDialogConstants.MINIMUM_MESSAGE_AREA_WIDTH );
+ gd.heightHint = convertHorizontalDLUsToPixels( IDialogConstants.MINIMUM_MESSAGE_AREA_WIDTH / 2 );
+ composite.setLayoutData( gd );
+ GridLayout layout = ( GridLayout ) composite.getLayout();
+ layout.makeColumnsEqualWidth = false;
+ layout.numColumns = 2;
+
+ createTable();
+
+ createButtonComposite();
+
+ applyDialogFont( composite );
+ return composite;
+ }
+
+
+ /**
+ * This method initializes table and table viewer
+ */
+ private void createTable()
+ {
+ GridData tableGridData = new GridData( GridData.FILL_BOTH );
+ tableGridData.grabExcessHorizontalSpace = true;
+ tableGridData.verticalAlignment = GridData.FILL;
+ tableGridData.horizontalAlignment = GridData.FILL;
+ //tableGridData.heightHint = 100;
+
+ table = new Table( composite, SWT.BORDER );
+ table.setHeaderVisible( false );
+ table.setLayoutData( tableGridData );
+ table.setLinesVisible( false );
+ tableViewer = new TableViewer( table );
+ tableViewer.setContentProvider( new ArrayContentProvider() );
+ tableViewer.setLabelProvider( new LabelProvider() );
+ tableViewer.setInput( values );
+
+ tableViewer.addSelectionChangedListener( new ISelectionChangedListener()
+ {
+ public void selectionChanged( SelectionChangedEvent event )
+ {
+ valueSelected();
+ }
+ } );
+
+ tableViewer.addDoubleClickListener( new IDoubleClickListener()
+ {
+ public void doubleClick( DoubleClickEvent event )
+ {
+ editValue();
+ }
+ } );
+ }
+
+
+ /**
+ * This method initializes buttons
+ */
+ private void createButtonComposite()
+ {
+ GridData deleteButtonGridData = new GridData();
+ deleteButtonGridData.horizontalAlignment = GridData.FILL;
+ deleteButtonGridData.grabExcessHorizontalSpace = false;
+ deleteButtonGridData.verticalAlignment = GridData.BEGINNING;
+ deleteButtonGridData.widthHint = Activator.getButtonWidth( composite );
+
+ GridData editButtonGridData = new GridData();
+ editButtonGridData.horizontalAlignment = GridData.FILL;
+ editButtonGridData.grabExcessHorizontalSpace = false;
+ editButtonGridData.verticalAlignment = GridData.BEGINNING;
+ editButtonGridData.widthHint = Activator.getButtonWidth( composite );
+
+ GridData addButtonGridData = new GridData();
+ addButtonGridData.horizontalAlignment = GridData.FILL;
+ addButtonGridData.grabExcessHorizontalSpace = false;
+ addButtonGridData.verticalAlignment = GridData.BEGINNING;
+ addButtonGridData.widthHint = Activator.getButtonWidth( composite );
+
+ GridLayout gridLayout = new GridLayout();
+ gridLayout.marginWidth = 0;
+ gridLayout.marginHeight = 0;
+ GridData gridData = new GridData();
+ gridData.horizontalAlignment = GridData.CENTER;
+ gridData.grabExcessHorizontalSpace = false;
+ gridData.grabExcessVerticalSpace = false;
+ gridData.verticalAlignment = GridData.FILL;
+
+ buttonComposite = new Composite( composite, SWT.NONE );
+ buttonComposite.setLayoutData( gridData );
+ buttonComposite.setLayout( gridLayout );
+
+ addButton = new Button( buttonComposite, SWT.NONE );
+ addButton.setText( Messages.getString( "ACIItemUserPermissionsComposite.add.button" ) ); //$NON-NLS-1$
+ addButton.setLayoutData( addButtonGridData );
+ addButton.addSelectionListener( new SelectionAdapter()
+ {
+ public void widgetSelected( SelectionEvent e )
+ {
+ addValue();
+ }
+ } );
+
+ editButton = new Button( buttonComposite, SWT.NONE );
+ editButton.setText( Messages.getString( "ACIItemUserPermissionsComposite.edit.button" ) ); //$NON-NLS-1$
+ editButton.setLayoutData( editButtonGridData );
+ editButton.addSelectionListener( new SelectionAdapter()
+ {
+ public void widgetSelected( SelectionEvent e )
+ {
+ editValue();
+ }
+ } );
+ editButton.setEnabled( false );
+
+ deleteButton = new Button( buttonComposite, SWT.NONE );
+ deleteButton.setText( Messages.getString( "ACIItemUserPermissionsComposite.delete.button" ) ); //$NON-NLS-1$
+ deleteButton.setLayoutData( deleteButtonGridData );
+ deleteButton.addSelectionListener( new SelectionAdapter()
+ {
+ public void widgetSelected( SelectionEvent e )
+ {
+ deleteValue();
+ }
+ } );
+ deleteButton.setEnabled( false );
+
+ }
+
+
+ /**
+ * Opens the editor and adds the new value to the list.
+ */
+ private void addValue()
+ {
+ Object oldRawValue = valueEditor.getRawValue( context.getConnection(), "" );
+
+ CellEditor cellEditor = valueEditor.getCellEditor();
+ cellEditor.setValue( oldRawValue );
+ cellEditor.activate();
+ Object newRawValue = cellEditor.getValue();
+
+ if(newRawValue != null)
+ {
+ String newValue = (String) valueEditor.getStringOrBinaryValue( newRawValue );
+
+ values.add( newValue );
+ tableViewer.refresh();
+ }
+ }
+
+
+ /**
+ * Opens the editor with the currently selected
+ * value and puts the modified value into the list.
+ */
+ private void editValue()
+ {
+ String oldValue = getSelectedValue();
+ if ( oldValue != null )
+ {
+ Object oldRawValue = valueEditor.getRawValue( context.getConnection(), oldValue );
+
+ CellEditor cellEditor = valueEditor.getCellEditor();
+ cellEditor.setValue( oldRawValue );
+ cellEditor.activate();
+ Object newRawValue = cellEditor.getValue();
+
+ if(newRawValue != null)
+ {
+ String newValue = (String) valueEditor.getStringOrBinaryValue( newRawValue );
+
+ values.remove( oldValue );
+ values.add( newValue );
+ tableViewer.refresh();
+ }
+ }
+ }
+
+
+ /**
+ * Deletes the currently selected value from list.
+ */
+ private void deleteValue()
+ {
+ String value = getSelectedValue();
+ if ( value != null )
+ {
+ values.remove( value );
+ tableViewer.refresh();
+ }
+ }
+
+
+ /**
+ * Called when value is selected in table viewer.
+ * Updates the enabled/disabled state of the buttons.
+ */
+ private void valueSelected()
+ {
+ String value = getSelectedValue();
+
+ if ( value == null )
+ {
+ editButton.setEnabled( false );
+ deleteButton.setEnabled( false );
+ }
+ else
+ {
+ editButton.setEnabled( true );
+ deleteButton.setEnabled( true );
+ }
+ }
+
+
+ /**
+ * @return the value that is selected in the table viewer, or null.
+ */
+ private String getSelectedValue()
+ {
+ String value = null;
+
+ IStructuredSelection selection = ( IStructuredSelection ) tableViewer.getSelection();
+ if ( !selection.isEmpty() )
+ {
+ Object element = selection.getFirstElement();
+ if ( element instanceof String )
+ {
+ value = ( String ) element;
+ }
+ }
+
+ return value;
+ }
+
+}
Modified: directory/sandbox/seelmann/trunk/ldapstudio-aciitemeditor/src/main/java/org/apache/directory/ldapstudio/aciitemeditor/dialogs/UserPermissionDialog.java
URL: http://svn.apache.org/viewvc/directory/sandbox/seelmann/trunk/ldapstudio-aciitemeditor/src/main/java/org/apache/directory/ldapstudio/aciitemeditor/dialogs/UserPermissionDialog.java?view=diff&rev=493883&r1=493882&r2=493883
==============================================================================
--- directory/sandbox/seelmann/trunk/ldapstudio-aciitemeditor/src/main/java/org/apache/directory/ldapstudio/aciitemeditor/dialogs/UserPermissionDialog.java (original)
+++ directory/sandbox/seelmann/trunk/ldapstudio-aciitemeditor/src/main/java/org/apache/directory/ldapstudio/aciitemeditor/dialogs/UserPermissionDialog.java Sun Jan 7 16:07:36 2007
@@ -23,6 +23,7 @@
import java.util.Collection;
+import org.apache.directory.ldapstudio.aciitemeditor.ACIItemValueWithContext;
import org.apache.directory.ldapstudio.aciitemeditor.Activator;
import org.apache.directory.ldapstudio.aciitemeditor.widgets.ACIItemGrantsAndDenialsComposite;
import org.apache.directory.ldapstudio.aciitemeditor.widgets.ACIItemProtectedItemsComposite;
@@ -53,6 +54,9 @@
public class UserPermissionDialog extends Dialog
{
+ /** The context */
+ private ACIItemValueWithContext context;
+
/** The initial value, passed by the constructor */
private UserPermission initialUserPermission;
@@ -79,11 +83,12 @@
* @param initialValue the initial user permission to edit,
* or null to create a new user permission
*/
- public UserPermissionDialog( Shell parentShell, UserPermission initialUserPermission )
+ public UserPermissionDialog( Shell parentShell, UserPermission initialUserPermission, ACIItemValueWithContext context )
{
super( parentShell );
super.setShellStyle( super.getShellStyle() | SWT.RESIZE );
this.initialUserPermission = initialUserPermission;
+ this.context = context;
this.returnUserPermission = null;
}
@@ -162,6 +167,7 @@
// protected items
protectedItemsComposite = new ACIItemProtectedItemsComposite( composite, SWT.NONE );
+ protectedItemsComposite.setContext( context );
// grants and denials
grantsAndDenialsComposite = new ACIItemGrantsAndDenialsComposite( composite, SWT.NONE );
Added: directory/sandbox/seelmann/trunk/ldapstudio-aciitemeditor/src/main/java/org/apache/directory/ldapstudio/aciitemeditor/model/Messages.java
URL: http://svn.apache.org/viewvc/directory/sandbox/seelmann/trunk/ldapstudio-aciitemeditor/src/main/java/org/apache/directory/ldapstudio/aciitemeditor/model/Messages.java?view=auto&rev=493883
==============================================================================
--- directory/sandbox/seelmann/trunk/ldapstudio-aciitemeditor/src/main/java/org/apache/directory/ldapstudio/aciitemeditor/model/Messages.java (added)
+++ directory/sandbox/seelmann/trunk/ldapstudio-aciitemeditor/src/main/java/org/apache/directory/ldapstudio/aciitemeditor/model/Messages.java Sun Jan 7 16:07:36 2007
@@ -0,0 +1,31 @@
+package org.apache.directory.ldapstudio.aciitemeditor.model;
+
+
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
+
+
+public class Messages
+{
+ private static final String BUNDLE_NAME = "org.apache.directory.ldapstudio.aciitemeditor.model.messages"; //$NON-NLS-1$
+
+ private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle.getBundle( BUNDLE_NAME );
+
+
+ private Messages()
+ {
+ }
+
+
+ public static String getString( String key )
+ {
+ try
+ {
+ return RESOURCE_BUNDLE.getString( key );
+ }
+ catch ( MissingResourceException e )
+ {
+ return '!' + key + '!';
+ }
+ }
+}
Added: directory/sandbox/seelmann/trunk/ldapstudio-aciitemeditor/src/main/java/org/apache/directory/ldapstudio/aciitemeditor/model/ProtectedItemWrapper.java
URL: http://svn.apache.org/viewvc/directory/sandbox/seelmann/trunk/ldapstudio-aciitemeditor/src/main/java/org/apache/directory/ldapstudio/aciitemeditor/model/ProtectedItemWrapper.java?view=auto&rev=493883
==============================================================================
--- directory/sandbox/seelmann/trunk/ldapstudio-aciitemeditor/src/main/java/org/apache/directory/ldapstudio/aciitemeditor/model/ProtectedItemWrapper.java (added)
+++ directory/sandbox/seelmann/trunk/ldapstudio-aciitemeditor/src/main/java/org/apache/directory/ldapstudio/aciitemeditor/model/ProtectedItemWrapper.java Sun Jan 7 16:07:36 2007
@@ -0,0 +1,399 @@
+
+package org.apache.directory.ldapstudio.aciitemeditor.model;
+
+import java.text.ParseException;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import javax.naming.NamingException;
+import javax.naming.directory.Attribute;
+
+import org.apache.directory.ldapstudio.browser.ui.valueeditors.AbstractDialogStringValueEditor;
+import org.apache.directory.shared.ldap.aci.ACIItemParser;
+import org.apache.directory.shared.ldap.aci.ItemFirstACIItem;
+import org.apache.directory.shared.ldap.aci.ProtectedItem;
+import org.eclipse.osgi.util.NLS;
+
+
+/**
+ * The ProtectedItemWrapper is used as input for the table viewer.
+ * The protected item values are always stored as raw string value.
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ * @version $Rev$, $Date$
+ */
+public class ProtectedItemWrapper
+{
+ /** This map contains all possible protected item identifiers */
+ public static final Map<Class, String> classToIdentifierMap;
+ static
+ {
+ Map<Class, String> map = new HashMap<Class, String>();
+ map.put( ProtectedItem.Entry.class, "entry" ); //$NON-NLS-1$
+ map.put( ProtectedItem.AllUserAttributeTypes.class, "allUserAttributeTypes" ); //$NON-NLS-1$
+ map.put( ProtectedItem.AttributeType.class, "attributeType" ); //$NON-NLS-1$
+ map.put( ProtectedItem.AllAttributeValues.class, "allAttributeValues" ); //$NON-NLS-1$
+ map.put( ProtectedItem.AllUserAttributeTypesAndValues.class, "allUserAttributeTypesAndValues" ); //$NON-NLS-1$
+ map.put( ProtectedItem.AttributeValue.class, "attributeValue" ); //$NON-NLS-1$
+ map.put( ProtectedItem.SelfValue.class, "selfValue" ); //$NON-NLS-1$
+ map.put( ProtectedItem.RangeOfValues.class, "rangeOfValues" ); //$NON-NLS-1$
+ map.put( ProtectedItem.MaxValueCount.class, "maxValueCount" ); //$NON-NLS-1$
+ map.put( ProtectedItem.MaxImmSub.class, "maxImmSub" ); //$NON-NLS-1$
+ map.put( ProtectedItem.RestrictedBy.class, "restrictedBy" ); //$NON-NLS-1$
+ map.put( ProtectedItem.Classes.class, "classes" ); //$NON-NLS-1$
+ classToIdentifierMap = Collections.unmodifiableMap( map );
+ }
+
+ /** This map contains all protected item display values */
+ public static final Map<Class, String> classToDisplayMap;
+ static
+ {
+ Map<Class, String> map = new HashMap<Class, String>();
+ map.put( ProtectedItem.Entry.class, Messages
+ .getString( "ProtectedItemWrapper.protectedItem.entry.label" ) ); //$NON-NLS-1$
+ map.put( ProtectedItem.AllUserAttributeTypes.class, Messages
+ .getString( "ProtectedItemWrapper.protectedItem.allUserAttributeTypes.label" ) ); //$NON-NLS-1$
+ map.put( ProtectedItem.AttributeType.class, Messages
+ .getString( "ProtectedItemWrapper.protectedItem.attributeType.label" ) ); //$NON-NLS-1$
+ map.put( ProtectedItem.AllAttributeValues.class, Messages
+ .getString( "ProtectedItemWrapper.protectedItem.allAttributeValues.label" ) ); //$NON-NLS-1$
+ map.put( ProtectedItem.AllUserAttributeTypesAndValues.class, Messages
+ .getString( "ProtectedItemWrapper.protectedItem.allUserAttributeTypesAndValues.label" ) ); //$NON-NLS-1$
+ map.put( ProtectedItem.AttributeValue.class, Messages
+ .getString( "ProtectedItemWrapper.protectedItem.attributeValue.label" ) ); //$NON-NLS-1$
+ map.put( ProtectedItem.SelfValue.class, Messages
+ .getString( "ProtectedItemWrapper.protectedItem.selfValue.label" ) ); //$NON-NLS-1$
+ map.put( ProtectedItem.RangeOfValues.class, Messages
+ .getString( "ProtectedItemWrapper.protectedItem.rangeOfValues.label" ) ); //$NON-NLS-1$
+ map.put( ProtectedItem.MaxValueCount.class, Messages
+ .getString( "ProtectedItemWrapper.protectedItem.maxValueCount.label" ) ); //$NON-NLS-1$
+ map.put( ProtectedItem.MaxImmSub.class, Messages
+ .getString( "ProtectedItemWrapper.protectedItem.maxImmSub.label" ) ); //$NON-NLS-1$
+ map.put( ProtectedItem.RestrictedBy.class, Messages
+ .getString( "ProtectedItemWrapper.protectedItem.restrictedBy.label" ) ); //$NON-NLS-1$
+ map.put( ProtectedItem.Classes.class, Messages
+ .getString( "ProtectedItemWrapper.protectedItem.classes.label" ) ); //$NON-NLS-1$
+ classToDisplayMap = Collections.unmodifiableMap( map );
+ }
+
+ /** A dummy ACI to check syntax of the protectedItemValue */
+ private static final String DUMMY = "{ identificationTag \"id1\", precedence 1, authenticationLevel simple, " //$NON-NLS-1$
+ + "itemOrUserFirst itemFirst: { protectedItems { #identifier# #values# }, " //$NON-NLS-1$
+ + "itemPermissions { { userClasses { allUsers }, grantsAndDenials { grantRead } } } } }"; //$NON-NLS-1$
+
+ /** The class of the protected item, never null. */
+ private final Class clazz;
+
+ /** The protected item values, may be empty. */
+ private List<String> values;
+
+ /** The value prefix, prepended to the value. */
+ private String valuePrefix;
+
+ /** The value suffix, appended to the value. */
+ private String valueSuffix;
+
+ /** The value editor, null means no value. */
+ private AbstractDialogStringValueEditor valueEditor;
+
+ /** The multivalued. */
+ private boolean isMultivalued;
+
+
+ /**
+ * Creates a new instance of ProtectedItemWrapper.
+ *
+ * @param clazz the java class of the UserClass
+ * @param valuePrefix the identifier
+ * @param valueSuffix the dislpay name
+ * @param valueEditor the value editor
+ */
+ public ProtectedItemWrapper( Class clazz, boolean isMultivalued, String valuePrefix, String valueSuffix, AbstractDialogStringValueEditor valueEditor )
+ {
+ this.clazz = clazz;
+ this.isMultivalued = isMultivalued;
+ this.valuePrefix = valuePrefix;
+ this.valueSuffix = valueSuffix;
+ this.valueEditor = valueEditor;
+
+ this.values = new ArrayList<String>();
+ }
+
+
+ /**
+ * Creates a new protected item object. Therefore it uses the
+ * dummy ACI, injects the protected item and its value, parses
+ * the ACI and extracts the protected item from the parsed bean.
+ *
+ * @return the parsed protected item
+ *
+ * @throws ParseException if parsing fails
+ */
+ public ProtectedItem getProtectedItem() throws ParseException
+ {
+ String flatValue = getFlatValue();
+ String spec = DUMMY;
+ spec = spec.replaceAll( "#identifier#", getIdentifier() ); //$NON-NLS-1$
+ spec = spec.replaceAll( "#values#", flatValue ); //$NON-NLS-1$
+ ACIItemParser parser = new ACIItemParser( null );
+ ItemFirstACIItem aci = null;
+ try
+ {
+ aci = ( ItemFirstACIItem ) parser.parse( spec );
+ }
+ catch ( ParseException e )
+ {
+
+ String msg = NLS
+ .bind(
+ Messages.getString( "ProtectedItemWrapper.error.message" ), new String[] { getIdentifier(), flatValue } ); //$NON-NLS-1$
+ throw new ParseException( msg, 0 );
+ }
+ ProtectedItem item = ( ProtectedItem ) aci.getProtectedItems().iterator().next();
+ return item;
+ }
+
+
+ /**
+ * Sets the protected item.
+ *
+ * @param item the protected item
+ */
+ public void setProtectedItem( ProtectedItem item )
+ {
+ assert item.getClass() == getClazz();
+
+ // first clear values
+ values.clear();
+
+ // switch on userClass type
+ // no value in ProtectedItem.Entry, ProtectedItem.AllUserAttributeTypes and ProtectedItem.AllUserAttributeTypesAndValues
+ if ( item.getClass() == ProtectedItem.AttributeType.class )
+ {
+ ProtectedItem.AttributeType at = ( ProtectedItem.AttributeType ) item;
+ for ( Iterator it = at.iterator(); it.hasNext(); )
+ {
+ values.add( it.next().toString() );
+ }
+ }
+ else if ( item.getClass() == ProtectedItem.AllAttributeValues.class )
+ {
+ ProtectedItem.AllAttributeValues aav = ( ProtectedItem.AllAttributeValues ) item;
+ for ( Iterator it = aav.iterator(); it.hasNext(); )
+ {
+ values.add( it.next().toString() );
+ }
+ }
+ else if ( item.getClass() == ProtectedItem.AttributeValue.class )
+ {
+ ProtectedItem.AttributeValue av = ( ProtectedItem.AttributeValue ) item;
+ for ( Iterator it = av.iterator(); it.hasNext(); )
+ {
+ Attribute attribute = ( Attribute ) it.next();
+ try
+ {
+ values.add( attribute.getID() + "=" + attribute.get() );
+ }
+ catch ( NamingException e )
+ {
+ }
+ }
+ }
+ else if ( item.getClass() == ProtectedItem.SelfValue.class )
+ {
+ ProtectedItem.SelfValue sv = ( ProtectedItem.SelfValue ) item;
+ for ( Iterator it = sv.iterator(); it.hasNext(); )
+ {
+ values.add( it.next().toString() );
+ }
+ }
+ else if ( item.getClass() == ProtectedItem.RangeOfValues.class )
+ {
+ ProtectedItem.RangeOfValues rov = ( ProtectedItem.RangeOfValues ) item;
+ StringBuffer buffer = new StringBuffer();
+ rov.getFilter().printToBuffer( buffer );
+ values.add( buffer.toString() );
+ }
+ else if ( item.getClass() == ProtectedItem.MaxValueCount.class )
+ {
+ ProtectedItem.MaxValueCount mvc = ( ProtectedItem.MaxValueCount ) item;
+ for ( Iterator it = mvc.iterator(); it.hasNext(); )
+ {
+ ProtectedItem.MaxValueCountItem mvci = ( ProtectedItem.MaxValueCountItem ) it.next();
+ StringBuffer buffer = new StringBuffer();
+ mvci.printToBuffer( buffer );
+ values.add( buffer.toString() );
+ }
+ }
+ else if ( item.getClass() == ProtectedItem.MaxImmSub.class )
+ {
+ ProtectedItem.MaxImmSub mis = ( ProtectedItem.MaxImmSub ) item;
+ values.add( Integer.toString( mis.getValue() ) );
+ }
+ else if ( item.getClass() == ProtectedItem.RestrictedBy.class )
+ {
+ ProtectedItem.RestrictedBy rb = ( ProtectedItem.RestrictedBy ) item;
+ for ( Iterator it = rb.iterator(); it.hasNext(); )
+ {
+ ProtectedItem.RestrictedByItem rbi = ( ProtectedItem.RestrictedByItem ) it.next();
+ StringBuffer buffer = new StringBuffer();
+ rbi.printToBuffer( buffer );
+ values.add( buffer.toString() );
+ }
+ }
+ else if ( item.getClass() == ProtectedItem.Classes.class )
+ {
+ ProtectedItem.Classes classes = ( ProtectedItem.Classes ) item;
+ StringBuffer buffer = new StringBuffer();
+ classes.getClasses().printRefinementToBuffer( buffer );
+ values.add( buffer.toString() );
+ }
+
+ }
+
+
+ /**
+ * Returns a user-friedly string, displayed in the table.
+ *
+ * @return the string
+ */
+ public String toString()
+ {
+ String flatValue = getFlatValue();
+ if ( flatValue.length() > 0 )
+ {
+ flatValue = flatValue.replace( '\r', ' ' );
+ flatValue = flatValue.replace( '\n', ' ' );
+ flatValue = ": " + flatValue; //$NON-NLS-1$
+ if ( flatValue.length() > 40 )
+ {
+ String temp = flatValue;
+ flatValue = temp.substring( 0, 20 );
+ flatValue = flatValue + "..."; //$NON-NLS-1$
+ flatValue = flatValue + temp.substring( temp.length() - 20, temp.length() );
+ }
+ }
+
+ return getDisplayName() + " " + flatValue; //$NON-NLS-1$
+ }
+
+
+ /**
+ * Returns the flat value.
+ *
+ * @return the flat value
+ */
+ private String getFlatValue()
+ {
+ if ( valueEditor == null || values.isEmpty() )
+ {
+ return ""; //$NON-NLS-1$
+ }
+
+ StringBuffer sb = new StringBuffer();
+ if(isMultivalued())
+ {
+ sb.append( "{ " ); //$NON-NLS-1$
+ }
+ for ( Iterator<String> it = values.iterator(); it.hasNext(); )
+ {
+ sb.append( valuePrefix );
+ String value = it.next();
+ sb.append( value );
+ sb.append( valueSuffix );
+ if ( it.hasNext() )
+ {
+ sb.append( ", " ); //$NON-NLS-1$
+ }
+ }
+ if(isMultivalued())
+ {
+ sb.append( " }" ); //$NON-NLS-1$
+ }
+ return sb.toString();
+ }
+
+
+ /**
+ * Returns the list of values, may be modified.
+ *
+ * @return the modifyable list of values.
+ */
+ public List<String> getValues()
+ {
+ return values;
+ }
+
+
+ /**
+ * Gets the display name.
+ *
+ * @return the display name
+ */
+ public String getDisplayName()
+ {
+ return classToDisplayMap.get( clazz );
+ }
+
+
+
+ /**
+ * Gets the identifier.
+ *
+ * @return the identifier
+ */
+ public String getIdentifier()
+ {
+ return classToIdentifierMap.get( clazz );
+ }
+
+
+
+ /**
+ * Returns the class of the user class.
+ *
+ * @return the class of the user class.
+ */
+ public Class getClazz()
+ {
+ return clazz;
+ }
+
+
+ /**
+ * Checks if is editable.
+ *
+ * @return true, if is editable
+ */
+ public boolean isEditable()
+ {
+ return valueEditor != null;
+ }
+
+
+
+ /**
+ * Gets the value editor.
+ *
+ * @return the value editor, may be null.
+ */
+ public AbstractDialogStringValueEditor getValueEditor()
+ {
+ return valueEditor;
+ }
+
+
+ /**
+ * Checks if is multivalued.
+ *
+ * @return true, if is multivalued
+ */
+ public boolean isMultivalued()
+ {
+ return isMultivalued;
+ }
+}
Added: directory/sandbox/seelmann/trunk/ldapstudio-aciitemeditor/src/main/java/org/apache/directory/ldapstudio/aciitemeditor/model/ProtectedItemWrapperFactory.java
URL: http://svn.apache.org/viewvc/directory/sandbox/seelmann/trunk/ldapstudio-aciitemeditor/src/main/java/org/apache/directory/ldapstudio/aciitemeditor/model/ProtectedItemWrapperFactory.java?view=auto&rev=493883
==============================================================================
--- directory/sandbox/seelmann/trunk/ldapstudio-aciitemeditor/src/main/java/org/apache/directory/ldapstudio/aciitemeditor/model/ProtectedItemWrapperFactory.java (added)
+++ directory/sandbox/seelmann/trunk/ldapstudio-aciitemeditor/src/main/java/org/apache/directory/ldapstudio/aciitemeditor/model/ProtectedItemWrapperFactory.java Sun Jan 7 16:07:36 2007
@@ -0,0 +1,139 @@
+
+package org.apache.directory.ldapstudio.aciitemeditor.model;
+
+import org.apache.directory.ldapstudio.browser.ui.valueeditors.internal.TextValueEditor;
+import org.apache.directory.shared.ldap.aci.ProtectedItem;
+
+public class ProtectedItemWrapperFactory
+{
+
+ public static final ProtectedItemWrapper[] createProtectedItemWrappers()
+ {
+ ProtectedItemWrapper[] protectedItemWrappers = new ProtectedItemWrapper[]
+ {
+ // entry
+ new ProtectedItemWrapper
+ (
+ ProtectedItem.Entry.class,
+ false,
+ "", //$NON-NLS-1$
+ "", //$NON-NLS-1$
+ null
+ ),
+
+ // allUserAttributeTypes
+ new ProtectedItemWrapper
+ (
+ ProtectedItem.AllUserAttributeTypes.class,
+ false,
+ "", //$NON-NLS-1$
+ "", //$NON-NLS-1$
+ null
+ ),
+
+ // attributeType { 1.2.3, cn }
+ new ProtectedItemWrapper
+ (
+ ProtectedItem.AttributeType.class,
+ true,
+ "", //$NON-NLS-1$
+ "", //$NON-NLS-1$
+ new TextValueEditor() // TODO: AttributeTypeValueEditor
+ ),
+
+ // allAttributeValues { 1.2.3, cn }
+ new ProtectedItemWrapper
+ (
+ ProtectedItem.AllAttributeValues.class,
+ true,
+ "", //$NON-NLS-1$
+ "", //$NON-NLS-1$
+ new TextValueEditor() // TODO: AttributeTypeValueEditor
+ ),
+
+ // attributeType
+ new ProtectedItemWrapper
+ (
+ ProtectedItem.AllUserAttributeTypesAndValues.class,
+ false,
+ "", //$NON-NLS-1$
+ "", //$NON-NLS-1$
+ null
+ ),
+
+ // attributeValue { ou=people, cn=Ersin }
+ new ProtectedItemWrapper
+ (
+ ProtectedItem.AttributeValue.class,
+ true,
+ "", //$NON-NLS-1$
+ "", //$NON-NLS-1$
+ new TextValueEditor() // TODO: AttributeTypeAndValueValueEditor
+ ),
+
+ // selfValue { 1.2.3, cn }
+ new ProtectedItemWrapper
+ (
+ ProtectedItem.SelfValue.class,
+ true,
+ "", //$NON-NLS-1$
+ "", //$NON-NLS-1$
+ new TextValueEditor() // TODO: AttributeTypeValueEditor
+ ),
+
+ // rangeOfValues (cn=E*)
+ new ProtectedItemWrapper
+ (
+ ProtectedItem.RangeOfValues.class,
+ false,
+ "", //$NON-NLS-1$
+ "", //$NON-NLS-1$
+ new TextValueEditor()
+ ),
+
+ // maxValueCount { { type 10.11.12, maxCount 10 }, { maxCount 20, type 11.12.13 } }
+ new ProtectedItemWrapper
+ (
+ ProtectedItem.MaxValueCount.class,
+ true,
+ "", //$NON-NLS-1$
+ "", //$NON-NLS-1$
+ new TextValueEditor() // TODO: MaxValueCountValueEditor
+ ),
+
+ // maxImmSub 3
+ new ProtectedItemWrapper
+ (
+ ProtectedItem.MaxImmSub.class,
+ false,
+ "", //$NON-NLS-1$
+ "", //$NON-NLS-1$
+ new TextValueEditor() // TODO: IntegerValueEditor
+ ),
+
+ // restrictedBy { { type 10.11.12, valuesIn ou }, { valuesIn cn, type 11.12.13 } }
+ new ProtectedItemWrapper
+ (
+ ProtectedItem.RestrictedBy.class,
+ true,
+ "", //$NON-NLS-1$
+ "", //$NON-NLS-1$
+ new TextValueEditor() // TODO: RestrictedByValueEditor
+ ),
+
+ // classes and : { item: xyz , or:{item:X,item:Y} }
+ new ProtectedItemWrapper
+ (
+ ProtectedItem.Classes.class,
+ false,
+ "", //$NON-NLS-1$
+ "", //$NON-NLS-1$
+ new TextValueEditor() // TODO: RefinementValueEditor
+ ),
+
+ };
+
+ return protectedItemWrappers;
+ }
+
+}
Added: directory/sandbox/seelmann/trunk/ldapstudio-aciitemeditor/src/main/java/org/apache/directory/ldapstudio/aciitemeditor/model/UserClassWrapper.java
URL: http://svn.apache.org/viewvc/directory/sandbox/seelmann/trunk/ldapstudio-aciitemeditor/src/main/java/org/apache/directory/ldapstudio/aciitemeditor/model/UserClassWrapper.java?view=auto&rev=493883
==============================================================================
--- directory/sandbox/seelmann/trunk/ldapstudio-aciitemeditor/src/main/java/org/apache/directory/ldapstudio/aciitemeditor/model/UserClassWrapper.java (added)
+++ directory/sandbox/seelmann/trunk/ldapstudio-aciitemeditor/src/main/java/org/apache/directory/ldapstudio/aciitemeditor/model/UserClassWrapper.java Sun Jan 7 16:07:36 2007
@@ -0,0 +1,301 @@
+package org.apache.directory.ldapstudio.aciitemeditor.model;
+
+
+import java.text.ParseException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import javax.naming.Name;
+
+import org.apache.directory.ldapstudio.browser.ui.valueeditors.AbstractDialogStringValueEditor;
+import org.apache.directory.shared.ldap.aci.ACIItemParser;
+import org.apache.directory.shared.ldap.aci.UserClass;
+import org.apache.directory.shared.ldap.aci.UserFirstACIItem;
+import org.apache.directory.shared.ldap.subtree.SubtreeSpecification;
+import org.eclipse.osgi.util.NLS;
+
+
+/**
+ * The UserClassWrapper is used as input for the table viewer.
+ * The user class values are always stored as raw string values.
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ * @version $Rev$, $Date$
+ */
+public class UserClassWrapper
+{
+
+ /** This map contains all possible user class identifiers */
+ public static final Map<Class, String> classToIdentifierMap;
+ static
+ {
+ Map<Class, String> map = new HashMap<Class, String>();
+ map.put( UserClass.AllUsers.class, "allUsers" ); //$NON-NLS-1$
+ map.put( UserClass.ThisEntry.class, "thisEntry" ); //$NON-NLS-1$
+ map.put( UserClass.Name.class, "name" ); //$NON-NLS-1$
+ map.put( UserClass.UserGroup.class, "userGroup" ); //$NON-NLS-1$
+ map.put( UserClass.Subtree.class, "subtree" ); //$NON-NLS-1$
+ classToIdentifierMap = Collections.unmodifiableMap( map );
+ }
+
+ /** This map contains all user class display values */
+ public static final Map<Class, String> classToDisplayMap;
+ static
+ {
+ Map<Class, String> map = new HashMap<Class, String>();
+ map.put( UserClass.AllUsers.class, Messages.getString( "UserClassWrapper.userClass.allUsers.label" ) ); //$NON-NLS-1$
+ map.put( UserClass.ThisEntry.class, Messages.getString( "UserClassWrapper.userClass.thisEntry.label" ) ); //$NON-NLS-1$
+ map.put( UserClass.Name.class, Messages.getString( "UserClassWrapper.userClass.name.label" ) ); //$NON-NLS-1$
+ map.put( UserClass.UserGroup.class, Messages.getString( "UserClassWrapper.userClass.userGroup.label" ) ); //$NON-NLS-1$
+ map.put( UserClass.Subtree.class, Messages.getString( "UserClassWrapper.userClass.subtree.label" ) ); //$NON-NLS-1$
+ classToDisplayMap = Collections.unmodifiableMap( map );
+ }
+
+ /** A dummy ACI to check syntax of the userClassValue. */
+ private static final String DUMMY = "{ identificationTag \"id1\", precedence 1, authenticationLevel simple, " //$NON-NLS-1$
+ + "itemOrUserFirst userFirst: { userClasses { #identifier# #values# }, " //$NON-NLS-1$
+ + "userPermissions { { protectedItems { entry }, grantsAndDenials { grantRead } } } } }"; //$NON-NLS-1$
+
+ /** The class of the user class, never null. */
+ private final Class clazz;
+
+ /** The user class values, may be empty. */
+ private List<String> values;
+
+ /** The value prefix, prepended to the value. */
+ private String valuePrefix;
+
+ /** The value suffix, appended to the value. */
+ private String valueSuffix;
+
+ /** The value editor, null means no value. */
+ private AbstractDialogStringValueEditor valueEditor;
+
+
+ /**
+ * Creates a new instance of UserClassWrapper.
+ *
+ * @param clazz the java class of the UserClass
+ * @param valuePrefix the identifier
+ * @param valueSuffix the dislpay name
+ * @param valueEditor the value editor
+ */
+ public UserClassWrapper( Class clazz, String valuePrefix, String valueSuffix,
+ AbstractDialogStringValueEditor valueEditor )
+ {
+ this.clazz = clazz;
+ this.valuePrefix = valuePrefix;
+ this.valueSuffix = valueSuffix;
+ this.valueEditor = valueEditor;
+
+ this.values = new ArrayList<String>();
+ }
+
+
+ /**
+ * Creates a new user class object. Therefore it uses the
+ * dummy ACI, injects the user class and its value, parses
+ * the ACI and extracts the user class from the parsed bean.
+ *
+ * @return the parsed user class
+ *
+ * @throws ParseException if parsing fails
+ */
+ public UserClass getUserClass() throws ParseException
+ {
+ String flatValue = getFlatValue();
+ String spec = DUMMY;
+ spec = spec.replaceAll( "#identifier#", getIdentifier() ); //$NON-NLS-1$
+ spec = spec.replaceAll( "#values#", flatValue ); //$NON-NLS-1$
+ ACIItemParser parser = new ACIItemParser( null );
+ UserFirstACIItem aci = null;
+ try
+ {
+ aci = ( UserFirstACIItem ) parser.parse( spec );
+ }
+ catch ( ParseException e )
+ {
+ String msg = NLS.bind(
+ Messages.getString( "UserClassWrapper.error.message" ), new String[] { getIdentifier(), flatValue } ); //$NON-NLS-1$
+ throw new ParseException( msg, 0 );
+ }
+ UserClass userClass = ( UserClass ) aci.getUserClasses().iterator().next();
+ return userClass;
+ }
+
+
+ /**
+ * Sets the user class.
+ *
+ * @param userClass the user class
+ */
+ public void setUserClass( UserClass userClass )
+ {
+ assert userClass.getClass() == getClazz();
+
+ // first clear values
+ values.clear();
+
+ // switch on userClass type
+ // no value in UserClass.AllUsers and UserClass.ThisEntry
+ if ( userClass.getClass() == UserClass.Name.class )
+ {
+ UserClass.Name name = ( UserClass.Name ) userClass;
+ Set<Name> jndiNames = name.getNames();
+ for ( Name jndiName : jndiNames )
+ {
+ values.add( jndiName.toString() );
+ }
+ }
+ else if ( userClass.getClass() == UserClass.UserGroup.class )
+ {
+ UserClass.UserGroup userGrops = ( UserClass.UserGroup ) userClass;
+ Set<Name> jndiNames = userGrops.getNames();
+ for ( Name jndiName : jndiNames )
+ {
+ values.add( jndiName.toString() );
+ }
+ }
+ else if ( userClass.getClass() == UserClass.Subtree.class )
+ {
+ UserClass.Subtree subtree = ( UserClass.Subtree ) userClass;
+ Collection<SubtreeSpecification> subtreeSpecifications = subtree.getSubtreeSpecifications();
+ for ( SubtreeSpecification subtreeSpecification : subtreeSpecifications )
+ {
+ StringBuffer buffer = new StringBuffer();
+ subtreeSpecification.printToBuffer( buffer );
+ String s = buffer.toString();
+ values.add( s );
+ }
+ }
+ }
+
+
+ /**
+ * Returns a user-friedly string, displayed in the table.
+ *
+ * @return the string
+ */
+ public String toString()
+ {
+ String flatValue = getFlatValue();
+ if ( flatValue.length() > 0 )
+ {
+ flatValue = flatValue.replace( '\r', ' ' );
+ flatValue = flatValue.replace( '\n', ' ' );
+ flatValue = ": " + flatValue; //$NON-NLS-1$
+ if ( flatValue.length() > 40 )
+ {
+ String temp = flatValue;
+ flatValue = temp.substring( 0, 20 );
+ flatValue = flatValue + "..."; //$NON-NLS-1$
+ flatValue = flatValue + temp.substring( temp.length() - 20, temp.length() );
+ }
+ }
+
+ return getDisplayName() + " " + flatValue; //$NON-NLS-1$
+ }
+
+
+ /**
+ * Returns the flat value.
+ *
+ * @return the flat value
+ */
+ private String getFlatValue()
+ {
+ if ( valueEditor == null || values.isEmpty() )
+ {
+ return ""; //$NON-NLS-1$
+ }
+
+ StringBuffer sb = new StringBuffer();
+ sb.append( "{ " ); //$NON-NLS-1$
+ for ( Iterator<String> it = values.iterator(); it.hasNext(); )
+ {
+ sb.append( valuePrefix );
+ String value = it.next();
+ sb.append( value );
+ sb.append( valueSuffix );
+ if ( it.hasNext() )
+ {
+ sb.append( ", " ); //$NON-NLS-1$
+ }
+ }
+ sb.append( " }" ); //$NON-NLS-1$
+ return sb.toString();
+ }
+
+
+ /**
+ * Returns the list of values, may be modified.
+ *
+ * @return the modifyable list of values.
+ */
+ public List<String> getValues()
+ {
+ return values;
+ }
+
+
+ /**
+ * Gets the display name.
+ *
+ * @return the display name
+ */
+ public String getDisplayName()
+ {
+ return classToDisplayMap.get( clazz );
+ }
+
+
+ /**
+ * Gets the identifier.
+ *
+ * @return the identifier
+ */
+ public String getIdentifier()
+ {
+ return classToIdentifierMap.get( clazz );
+ }
+
+
+ /**
+ * Returns the class of the user class.
+ *
+ * @return the class of the user class.
+ */
+ public Class getClazz()
+ {
+ return clazz;
+ }
+
+
+ /**
+ * Checks if is editable.
+ *
+ * @return true, if is editable
+ */
+ public boolean isEditable()
+ {
+ return valueEditor != null;
+ }
+
+
+ /**
+ * Gets the value editor.
+ *
+ * @return the value editor, may be null.
+ */
+ public AbstractDialogStringValueEditor getValueEditor()
+ {
+ return valueEditor;
+ }
+
+}
Added: directory/sandbox/seelmann/trunk/ldapstudio-aciitemeditor/src/main/java/org/apache/directory/ldapstudio/aciitemeditor/model/UserClassWrapperFactory.java
URL: http://svn.apache.org/viewvc/directory/sandbox/seelmann/trunk/ldapstudio-aciitemeditor/src/main/java/org/apache/directory/ldapstudio/aciitemeditor/model/UserClassWrapperFactory.java?view=auto&rev=493883
==============================================================================
--- directory/sandbox/seelmann/trunk/ldapstudio-aciitemeditor/src/main/java/org/apache/directory/ldapstudio/aciitemeditor/model/UserClassWrapperFactory.java (added)
+++ directory/sandbox/seelmann/trunk/ldapstudio-aciitemeditor/src/main/java/org/apache/directory/ldapstudio/aciitemeditor/model/UserClassWrapperFactory.java Sun Jan 7 16:07:36 2007
@@ -0,0 +1,66 @@
+
+package org.apache.directory.ldapstudio.aciitemeditor.model;
+
+import org.apache.directory.ldapstudio.browser.ui.valueeditors.internal.DnValueEditor;
+import org.apache.directory.ldapstudio.browser.ui.valueeditors.internal.TextValueEditor;
+import org.apache.directory.shared.ldap.aci.UserClass;
+
+public class UserClassWrapperFactory
+{
+
+
+ public static final UserClassWrapper[] createUserClassWrappers()
+ {
+ UserClassWrapper[] userClassWrappers = new UserClassWrapper[]
+ {
+ // allUsers
+ new UserClassWrapper
+ (
+ UserClass.AllUsers.class,
+ "", //$NON-NLS-1$
+ "", //$NON-NLS-1$
+ null
+ ),
+
+ // thisEntry
+ new UserClassWrapper
+ (
+ UserClass.ThisEntry.class,
+ "", //$NON-NLS-1$
+ "", //$NON-NLS-1$
+ null
+ ),
+
+ // name
+ new UserClassWrapper
+ (
+ UserClass.Name.class,
+ "\"", //$NON-NLS-1$
+ "\"", //$NON-NLS-1$
+ new DnValueEditor()
+ ),
+
+ // userGroup
+ new UserClassWrapper
+ (
+ UserClass.UserGroup.class,
+ "\"", //$NON-NLS-1$
+ "\"", //$NON-NLS-1$
+ new DnValueEditor()
+ ),
+
+ // subtree
+ new UserClassWrapper
+ (
+ UserClass.Subtree.class,
+ "", //$NON-NLS-1$
+ "", //$NON-NLS-1$
+ new TextValueEditor() // TODO: SubtreeSpecificationValueEditor
+ )
+ };
+
+ return userClassWrappers;
+ }
+
+
+}
Modified: directory/sandbox/seelmann/trunk/ldapstudio-aciitemeditor/src/main/java/org/apache/directory/ldapstudio/aciitemeditor/widgets/ACIItemItemPermissionsComposite.java
URL: http://svn.apache.org/viewvc/directory/sandbox/seelmann/trunk/ldapstudio-aciitemeditor/src/main/java/org/apache/directory/ldapstudio/aciitemeditor/widgets/ACIItemItemPermissionsComposite.java?view=diff&rev=493883&r1=493882&r2=493883
==============================================================================
--- directory/sandbox/seelmann/trunk/ldapstudio-aciitemeditor/src/main/java/org/apache/directory/ldapstudio/aciitemeditor/widgets/ACIItemItemPermissionsComposite.java (original)
+++ directory/sandbox/seelmann/trunk/ldapstudio-aciitemeditor/src/main/java/org/apache/directory/ldapstudio/aciitemeditor/widgets/ACIItemItemPermissionsComposite.java Sun Jan 7 16:07:36 2007
@@ -25,9 +25,11 @@
import java.util.Iterator;
import java.util.List;
+import org.apache.directory.ldapstudio.aciitemeditor.ACIItemValueWithContext;
import org.apache.directory.ldapstudio.aciitemeditor.Activator;
import org.apache.directory.ldapstudio.aciitemeditor.dialogs.ItemPermissionDialog;
import org.apache.directory.ldapstudio.aciitemeditor.dialogs.TextDialog;
+import org.apache.directory.ldapstudio.aciitemeditor.model.UserClassWrapper;
import org.apache.directory.shared.ldap.aci.GrantAndDenial;
import org.apache.directory.shared.ldap.aci.ItemPermission;
import org.apache.directory.shared.ldap.aci.UserClass;
@@ -58,6 +60,9 @@
*/
public class ACIItemItemPermissionsComposite extends Composite
{
+
+ /** The context. */
+ private ACIItemValueWithContext context;
/** The inner composite for all the content */
private Composite composite = null;
@@ -77,10 +82,10 @@
/** The add button */
private Button addButton = null;
- /** The select all button */
+ /** The edit button */
private Button editButton = null;
- /** The deselect all button */
+ /** The delete button */
private Button deleteButton = null;
/** The selected item permissions, input of the table viewer */
@@ -132,7 +137,7 @@
.hasNext(); )
{
UserClass uc = it.next();
- String s = ACIItemUserClassesComposite.UserClassWrapper.classToDisplayMap.get( uc.getClass() );
+ String s = UserClassWrapper.classToDisplayMap.get( uc.getClass() );
buffer.append( s );
if ( it.hasNext() )
@@ -363,6 +368,17 @@
/**
+ * Sets the context.
+ *
+ * @param context the context
+ */
+ public void setContext( ACIItemValueWithContext context )
+ {
+ this.context = context;
+ }
+
+
+ /**
* Sets the item permissions.
*
* @param itemPermissions
@@ -428,7 +444,7 @@
*/
private void addItemPermission()
{
- ItemPermissionDialog dialog = new ItemPermissionDialog( getShell(), null );
+ ItemPermissionDialog dialog = new ItemPermissionDialog( getShell(), null, context );
if ( dialog.open() == TextDialog.OK && dialog.getItemPermission() != null )
{
ItemPermissionWrapper itemPermissionWrapper = new ItemPermissionWrapper( dialog.getItemPermission() );
@@ -448,7 +464,7 @@
ItemPermissionWrapper oldItemPermissionWrapper = getSelectedItemPermissionWrapper();
if ( oldItemPermissionWrapper != null )
{
- ItemPermissionDialog dialog = new ItemPermissionDialog( getShell(), oldItemPermissionWrapper.itemPermission );
+ ItemPermissionDialog dialog = new ItemPermissionDialog( getShell(), oldItemPermissionWrapper.itemPermission, context );
if ( dialog.open() == TextDialog.OK )
{
oldItemPermissionWrapper.itemPermission = dialog.getItemPermission();
Modified: directory/sandbox/seelmann/trunk/ldapstudio-aciitemeditor/src/main/java/org/apache/directory/ldapstudio/aciitemeditor/widgets/ACIItemProtectedItemsComposite.java
URL: http://svn.apache.org/viewvc/directory/sandbox/seelmann/trunk/ldapstudio-aciitemeditor/src/main/java/org/apache/directory/ldapstudio/aciitemeditor/widgets/ACIItemProtectedItemsComposite.java?view=diff&rev=493883&r1=493882&r2=493883
==============================================================================
--- directory/sandbox/seelmann/trunk/ldapstudio-aciitemeditor/src/main/java/org/apache/directory/ldapstudio/aciitemeditor/widgets/ACIItemProtectedItemsComposite.java (original)
+++ directory/sandbox/seelmann/trunk/ldapstudio-aciitemeditor/src/main/java/org/apache/directory/ldapstudio/aciitemeditor/widgets/ACIItemProtectedItemsComposite.java Sun Jan 7 16:07:36 2007
@@ -24,16 +24,17 @@
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
-import java.util.HashMap;
import java.util.List;
-import java.util.Map;
+import org.apache.directory.ldapstudio.aciitemeditor.ACIItemValueWithContext;
import org.apache.directory.ldapstudio.aciitemeditor.Activator;
-import org.apache.directory.ldapstudio.aciitemeditor.dialogs.TextDialog;
-import org.apache.directory.shared.ldap.aci.ACIItemParser;
-import org.apache.directory.shared.ldap.aci.ItemFirstACIItem;
+import org.apache.directory.ldapstudio.aciitemeditor.dialogs.MultiValuedDialog;
+import org.apache.directory.ldapstudio.aciitemeditor.model.ProtectedItemWrapper;
+import org.apache.directory.ldapstudio.aciitemeditor.model.ProtectedItemWrapperFactory;
+import org.apache.directory.ldapstudio.browser.ui.valueeditors.AbstractDialogStringValueEditor;
import org.apache.directory.shared.ldap.aci.ProtectedItem;
import org.eclipse.jface.viewers.ArrayContentProvider;
+import org.eclipse.jface.viewers.CellEditor;
import org.eclipse.jface.viewers.CheckStateChangedEvent;
import org.eclipse.jface.viewers.CheckboxTableViewer;
import org.eclipse.jface.viewers.DoubleClickEvent;
@@ -43,7 +44,6 @@
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.SelectionChangedEvent;
-import org.eclipse.osgi.util.NLS;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
@@ -65,6 +65,9 @@
public class ACIItemProtectedItemsComposite extends Composite
{
+ /** The context. */
+ private ACIItemValueWithContext context;
+
/** The inner composite for all the content */
private Composite composite = null;
@@ -93,171 +96,9 @@
private Button reverseSelectionButton = null;
/** The possible protected items, used as input for the table viewer */
- private ProtectedItemWrapper[] protectedItemWrappers = new ProtectedItemWrapper[]
- { new ProtectedItemWrapper( ProtectedItem.Entry.class ), // null
- new ProtectedItemWrapper( ProtectedItem.AllUserAttributeTypes.class ), // null
- new ProtectedItemWrapper( ProtectedItem.AttributeType.class ), // attributeType { 1.2.3, cn }
- new ProtectedItemWrapper( ProtectedItem.AllAttributeValues.class ), // allAttributeValues { 1.2.3, cn }
- new ProtectedItemWrapper( ProtectedItem.AllUserAttributeTypesAndValues.class ), // null
- new ProtectedItemWrapper( ProtectedItem.AttributeValue.class ), // attributeValue { ou=people, cn=Ersin }
- new ProtectedItemWrapper( ProtectedItem.SelfValue.class ), // selfValue { 1.2.3, cn }
- new ProtectedItemWrapper( ProtectedItem.RangeOfValues.class ), // rangeOfValues (cn=ErsinEr)
- new ProtectedItemWrapper( ProtectedItem.MaxValueCount.class ), // maxValueCount { { type 10.11.12, maxCount 10 }, { maxCount 20, type 11.12.13 } }
- new ProtectedItemWrapper( ProtectedItem.MaxImmSub.class ), // maxImmSub 3
- new ProtectedItemWrapper( ProtectedItem.RestrictedBy.class ), // restrictedBy { { type 10.11.12, valuesIn ou }, { valuesIn cn, type 11.12.13 } }
- new ProtectedItemWrapper( ProtectedItem.Classes.class ), // classes and : { item: xyz , or:{item:X,item:Y} }
- };
-
- /**
- * The ProtectedItemWrapper is used as input for the table viewer.
- * The protected item values are always stored as raw string value.
- *
- * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
- * @version $Rev$, $Date$
- */
- static class ProtectedItemWrapper
- {
- /** This map contains all possible protected item identifiers */
- static final Map<Class, String> classToItemMap = new HashMap<Class, String>();
- static
- {
- classToItemMap.put( ProtectedItem.Entry.class, "entry" ); //$NON-NLS-1$
- classToItemMap.put( ProtectedItem.AllUserAttributeTypes.class, "allUserAttributeTypes" ); //$NON-NLS-1$
- classToItemMap.put( ProtectedItem.AttributeType.class, "attributeType" ); //$NON-NLS-1$
- classToItemMap.put( ProtectedItem.AllAttributeValues.class, "allAttributeValues" ); //$NON-NLS-1$
- classToItemMap.put( ProtectedItem.AllUserAttributeTypesAndValues.class, "allUserAttributeTypesAndValues" ); //$NON-NLS-1$
- classToItemMap.put( ProtectedItem.AttributeValue.class, "attributeValue" ); //$NON-NLS-1$
- classToItemMap.put( ProtectedItem.SelfValue.class, "selfValue" ); //$NON-NLS-1$
- classToItemMap.put( ProtectedItem.RangeOfValues.class, "rangeOfValues" ); //$NON-NLS-1$
- classToItemMap.put( ProtectedItem.MaxValueCount.class, "maxValueCount" ); //$NON-NLS-1$
- classToItemMap.put( ProtectedItem.MaxImmSub.class, "maxImmSub" ); //$NON-NLS-1$
- classToItemMap.put( ProtectedItem.RestrictedBy.class, "restrictedBy" ); //$NON-NLS-1$
- classToItemMap.put( ProtectedItem.Classes.class, "classes" ); //$NON-NLS-1$
- }
-
- /** This map contains all protected item display values */
- static final Map<Class, String> classToDisplayMap = new HashMap<Class, String>();
- static
- {
- classToDisplayMap.put( ProtectedItem.Entry.class, Messages
- .getString( "ACIItemProtectedItemsComposite.protectedItem.entry.label" ) ); //$NON-NLS-1$
- classToDisplayMap.put( ProtectedItem.AllUserAttributeTypes.class, Messages
- .getString( "ACIItemProtectedItemsComposite.protectedItem.allUserAttributeTypes.label" ) ); //$NON-NLS-1$
- classToDisplayMap.put( ProtectedItem.AttributeType.class, Messages
- .getString( "ACIItemProtectedItemsComposite.protectedItem.attributeType.label" ) ); //$NON-NLS-1$
- classToDisplayMap.put( ProtectedItem.AllAttributeValues.class, Messages
- .getString( "ACIItemProtectedItemsComposite.protectedItem.allAttributeValues.label" ) ); //$NON-NLS-1$
- classToDisplayMap.put( ProtectedItem.AllUserAttributeTypesAndValues.class, Messages
- .getString( "ACIItemProtectedItemsComposite.protectedItem.allUserAttributeTypesAndValues.label" ) ); //$NON-NLS-1$
- classToDisplayMap.put( ProtectedItem.AttributeValue.class, Messages
- .getString( "ACIItemProtectedItemsComposite.protectedItem.attributeValue.label" ) ); //$NON-NLS-1$
- classToDisplayMap.put( ProtectedItem.SelfValue.class, Messages
- .getString( "ACIItemProtectedItemsComposite.protectedItem.selfValue.label" ) ); //$NON-NLS-1$
- classToDisplayMap.put( ProtectedItem.RangeOfValues.class, Messages
- .getString( "ACIItemProtectedItemsComposite.protectedItem.rangeOfValues.label" ) ); //$NON-NLS-1$
- classToDisplayMap.put( ProtectedItem.MaxValueCount.class, Messages
- .getString( "ACIItemProtectedItemsComposite.protectedItem.maxValueCount.label" ) ); //$NON-NLS-1$
- classToDisplayMap.put( ProtectedItem.MaxImmSub.class, Messages
- .getString( "ACIItemProtectedItemsComposite.protectedItem.maxImmSub.label" ) ); //$NON-NLS-1$
- classToDisplayMap.put( ProtectedItem.RestrictedBy.class, Messages
- .getString( "ACIItemProtectedItemsComposite.protectedItem.restrictedBy.label" ) ); //$NON-NLS-1$
- classToDisplayMap.put( ProtectedItem.Classes.class, Messages
- .getString( "ACIItemProtectedItemsComposite.protectedItem.classes.label" ) ); //$NON-NLS-1$
- }
-
- /** A dummy ACI to check syntax of the protectedItemValue */
- private static final String DUMMY = "{ identificationTag \"id1\", precedence 1, authenticationLevel simple, " //$NON-NLS-1$
- + "itemOrUserFirst itemFirst: { protectedItems { #item# #value# }, " //$NON-NLS-1$
- + "itemPermissions { { userClasses { allUsers }, grantsAndDenials { grantRead } } } } }"; //$NON-NLS-1$
-
- /** The class of the protected item, never null. */
- private final Class protectedItemClass;
-
- /** The protected item as string, may be empty. */
- private String protectedItemValue;
-
-
- /**
- * Creates a new instance of ProtectedItemWrapper.
- *
- * @param protectedItemClass
- */
- private ProtectedItemWrapper( Class protectedItemClass )
- {
- this.protectedItemClass = protectedItemClass;
- this.protectedItemValue = ""; //$NON-NLS-1$
- }
-
-
- /**
- * Creates a new protected item object. Therefore it uses the
- * dummy ACI, injects the protected item and its value, parses
- * the ACI and extracts the protected item from the parsed bean.
- *
- * @return
- * @throws ParseException
- */
- private ProtectedItem getProtectedItem() throws ParseException
- {
- String type = classToItemMap.get( protectedItemClass );
- String spec = DUMMY;
- spec = spec.replaceAll( "#item#", type ); //$NON-NLS-1$
- spec = spec.replaceAll( "#value#", protectedItemValue ); //$NON-NLS-1$
- ACIItemParser parser = Activator.getDefault().getACIItemParser();
- ItemFirstACIItem aci = null;
- try
- {
- aci = ( ItemFirstACIItem ) parser.parse( spec );
- }
- catch ( ParseException e )
- {
-
- String msg = NLS
- .bind(
- Messages.getString( "ACIItemProtectedItemsComposite.error.message" ), new String[] { type, protectedItemValue } ); //$NON-NLS-1$
- throw new ParseException( msg, 0 );
- }
- ProtectedItem item = ( ProtectedItem ) aci.getProtectedItems().iterator().next();
- return item;
- }
-
-
- /**
- * Returns a user-friedly string, displayed in the table.
- */
- public String toString()
- {
- String string = classToDisplayMap.get( protectedItemClass );
- if ( string == null )
- string = "<UNKNOWN>"; //$NON-NLS-1$
- return string + getProtectedItemValue();
- }
-
-
- /**
- * Helper to format the value
- */
- private String getProtectedItemValue()
- {
- String s = protectedItemValue;
- if ( s.length() > 0 )
- {
- s = s.replace( '\r', ' ' );
- s = s.replace( '\n', ' ' );
- s = ": " + s; //$NON-NLS-1$
- if ( s.length() > 40 )
- {
- String temp = s;
- s = temp.substring( 0, 20 );
- s = s + "..."; //$NON-NLS-1$
- s = s + temp.substring( temp.length() - 20, temp.length() );
- }
- }
- return s;
- }
- }
-
-
+ private ProtectedItemWrapper[] protectedItemWrappers = ProtectedItemWrapperFactory.createProtectedItemWrappers();
+
+
/**
* Creates a new instance of ACIItemProtectedItemsComposite.
*
@@ -500,6 +341,17 @@
}
}
+
+ /**
+ * Sets the context.
+ *
+ * @param context the context
+ */
+ public void setContext( ACIItemValueWithContext context )
+ {
+ this.context = context;
+ }
+
/**
* Sets the protected items.
@@ -508,20 +360,20 @@
*/
public void setProtectedItems( Collection<ProtectedItem> protectedItems )
{
+ // reset first
+ for ( ProtectedItemWrapper protectedItemWrapper : protectedItemWrappers )
+ {
+ tableViewer.setChecked( protectedItemWrapper, false );
+ }
+
for ( ProtectedItem item : protectedItems )
{
for ( ProtectedItemWrapper protectedItemWrapper : protectedItemWrappers )
{
- if ( protectedItemWrapper.protectedItemClass == item.getClass() )
+
+ if ( protectedItemWrapper.getClazz() == item.getClass() )
{
- StringBuffer buffer = new StringBuffer();
- item.printToBuffer( buffer );
- String s = buffer.toString();
- if ( s.indexOf( ' ' ) > -1 )
- {
- s = s.substring( s.indexOf( ' ' ), s.length() );
- protectedItemWrapper.protectedItemValue = s;
- }
+ protectedItemWrapper.setProtectedItem( item );
tableViewer.setChecked( protectedItemWrapper, true );
}
}
@@ -598,9 +450,7 @@
{
ProtectedItemWrapper protectedItemWrapper = getSelectedProtectedItemWrapper();
- if ( protectedItemWrapper == null || protectedItemWrapper.protectedItemClass == ProtectedItem.Entry.class
- || protectedItemWrapper.protectedItemClass == ProtectedItem.AllUserAttributeTypes.class
- || protectedItemWrapper.protectedItemClass == ProtectedItem.AllUserAttributeTypesAndValues.class )
+ if ( protectedItemWrapper == null || !protectedItemWrapper.isEditable() )
{
editButton.setEnabled( false );
}
@@ -627,12 +477,40 @@
private void editProtectedItem()
{
ProtectedItemWrapper protectedItemWrapper = getSelectedProtectedItemWrapper();
-
- TextDialog dialog = new TextDialog( getShell(), protectedItemWrapper.protectedItemValue );
- if ( dialog.open() == TextDialog.OK )
+
+ AbstractDialogStringValueEditor valueEditor = protectedItemWrapper.getValueEditor();
+ if(valueEditor != null)
{
- protectedItemWrapper.protectedItemValue = dialog.getText();
- refreshTable();
+ if(protectedItemWrapper.isMultivalued())
+ {
+ MultiValuedDialog dialog = new MultiValuedDialog( getShell(), protectedItemWrapper.getDisplayName(), protectedItemWrapper.getValues(), context, valueEditor );
+ dialog.open();
+ refreshTable();
+ }
+ else
+ {
+ List<String> values = protectedItemWrapper.getValues();
+ String oldValue = values.isEmpty() ? null : values.get( 0 );
+ if ( oldValue == null )
+ {
+ oldValue = "";
+ }
+ Object oldRawValue = valueEditor.getRawValue( context.getConnection(), oldValue );
+
+ CellEditor cellEditor = valueEditor.getCellEditor();
+ cellEditor.setValue( oldRawValue );
+ cellEditor.activate();
+ Object newRawValue = cellEditor.getValue();
+
+ if(newRawValue != null)
+ {
+ String newValue = (String) valueEditor.getStringOrBinaryValue( newRawValue );
+
+ values.clear();
+ values.add( newValue );
+ tableViewer.refresh();
+ }
+ }
}
}
@@ -644,5 +522,6 @@
{
tableViewer.refresh();
}
+
}