You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by el...@apache.org on 2015/04/02 18:14:28 UTC
svn commit: r1670931 [4/8] - in /directory/studio/trunk:
features/openldap.feature/ plugins/ plugins/openldap.acl.editor/
plugins/openldap.acl.editor/resources/
plugins/openldap.acl.editor/resources/icons/
plugins/openldap.acl.editor/resources/template...
Added: directory/studio/trunk/plugins/openldap.acl.editor/src/main/java/org/apache/directory/studio/openldap/config/acl/sourceeditor/OpenLdapAclFormattingStrategy.java
URL: http://svn.apache.org/viewvc/directory/studio/trunk/plugins/openldap.acl.editor/src/main/java/org/apache/directory/studio/openldap/config/acl/sourceeditor/OpenLdapAclFormattingStrategy.java?rev=1670931&view=auto
==============================================================================
--- directory/studio/trunk/plugins/openldap.acl.editor/src/main/java/org/apache/directory/studio/openldap/config/acl/sourceeditor/OpenLdapAclFormattingStrategy.java (added)
+++ directory/studio/trunk/plugins/openldap.acl.editor/src/main/java/org/apache/directory/studio/openldap/config/acl/sourceeditor/OpenLdapAclFormattingStrategy.java Thu Apr 2 16:14:26 2015
@@ -0,0 +1,142 @@
+/*
+ * 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.studio.openldap.config.acl.sourceeditor;
+
+
+import org.apache.directory.studio.ldapbrowser.core.BrowserCoreConstants;
+import org.eclipse.jface.text.formatter.IFormattingStrategy;
+import org.eclipse.jface.text.source.ISourceViewer;
+
+
+/**
+ * This class implements the formatting strategy for the OpenLDAP ACL Editor.
+ * <ul>
+ * <li>New line before the "by" keyword
+ * </ul>
+ */
+public class OpenLdapAclFormattingStrategy implements IFormattingStrategy
+{
+ /** The Constant NEWLINE. */
+ public static final String NEWLINE = BrowserCoreConstants.LINE_SEPARATOR;
+
+ /** The source viewer. */
+ private ISourceViewer sourceViewer;
+
+
+ /**
+ * Creates a new instance of OpenLdapAclFormattingStrategy.
+ *
+ * @param sourceViewer the source viewer
+ */
+ public OpenLdapAclFormattingStrategy( ISourceViewer sourceViewer )
+ {
+ this.sourceViewer = sourceViewer;
+ }
+
+
+ /**
+ * {@inheritDoc}
+ */
+ public String format( String content, boolean isLineStart, String indentation, int[] positions )
+ {
+ String oldContent = sourceViewer.getDocument().get();
+ String newContent = internFormat( oldContent );
+ sourceViewer.getDocument().set( newContent );
+
+ return null;
+ }
+
+
+ /**
+ * {@inheritDoc}
+ */
+ public void formatterStarts( String initialIndentation )
+ {
+ }
+
+
+ /**
+ * {@inheritDoc}
+ */
+ public void formatterStops()
+ {
+ }
+
+
+ private String internFormat( String content )
+ {
+ StringBuffer sb = new StringBuffer();
+
+ // Flag to track if we are within a quoted string
+ boolean inQuotedString = false;
+
+ // Flag to track if a new line was started
+ boolean newLineStarted = true;
+
+ // Char index
+ int i = 0;
+
+ int contentLength = content.length();
+ while ( i < contentLength )
+ {
+ char currentChar = content.charAt( i );
+
+ // Tracking quotes
+ if ( currentChar == '"' )
+ {
+ inQuotedString = !inQuotedString;
+ }
+ else if ( newLineStarted && ( ( currentChar == '\n' ) || ( currentChar == '\r' ) ) )
+ {
+ // Compress multiple newlines
+ i++;
+ continue;
+ }
+
+ // Checking if we're not in a quoted text
+ if ( !inQuotedString )
+ {
+ // Getting the next char (if available)
+ char nextChar = 0;
+ if ( ( i + 1 ) < contentLength )
+ {
+ nextChar = content.charAt( i + 1 );
+ }
+
+ // Checking if we have the "by" keyword
+ if ( ( !newLineStarted ) && ( currentChar == 'b' ) && ( nextChar == 'y' ) )
+ {
+ sb.append( NEWLINE );
+ newLineStarted = true;
+ }
+ else
+ {
+ // Tracking new line
+ newLineStarted = ( ( currentChar == '\n' ) || ( currentChar == '\r' ) );
+ }
+ }
+
+ sb.append( currentChar );
+ i++;
+ }
+
+ return sb.toString();
+ }
+}
Added: directory/studio/trunk/plugins/openldap.acl.editor/src/main/java/org/apache/directory/studio/openldap/config/acl/sourceeditor/OpenLdapAclSourceViewerConfiguration.java
URL: http://svn.apache.org/viewvc/directory/studio/trunk/plugins/openldap.acl.editor/src/main/java/org/apache/directory/studio/openldap/config/acl/sourceeditor/OpenLdapAclSourceViewerConfiguration.java?rev=1670931&view=auto
==============================================================================
--- directory/studio/trunk/plugins/openldap.acl.editor/src/main/java/org/apache/directory/studio/openldap/config/acl/sourceeditor/OpenLdapAclSourceViewerConfiguration.java (added)
+++ directory/studio/trunk/plugins/openldap.acl.editor/src/main/java/org/apache/directory/studio/openldap/config/acl/sourceeditor/OpenLdapAclSourceViewerConfiguration.java Thu Apr 2 16:14:26 2015
@@ -0,0 +1,94 @@
+/*
+ * 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.studio.openldap.config.acl.sourceeditor;
+
+
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.jface.text.contentassist.ContentAssistant;
+import org.eclipse.jface.text.contentassist.IContentAssistProcessor;
+import org.eclipse.jface.text.contentassist.IContentAssistant;
+import org.eclipse.jface.text.formatter.ContentFormatter;
+import org.eclipse.jface.text.formatter.IContentFormatter;
+import org.eclipse.jface.text.formatter.IFormattingStrategy;
+import org.eclipse.jface.text.presentation.IPresentationReconciler;
+import org.eclipse.jface.text.presentation.PresentationReconciler;
+import org.eclipse.jface.text.rules.DefaultDamagerRepairer;
+import org.eclipse.jface.text.source.ISourceViewer;
+import org.eclipse.jface.text.source.SourceViewerConfiguration;
+
+import org.apache.directory.studio.openldap.config.acl.OpenLdapAclEditorPlugin;
+
+
+/**
+ * This class enables the features of the editor (Syntax coloring, code completion, etc.)
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ */
+public class OpenLdapAclSourceViewerConfiguration extends SourceViewerConfiguration
+{
+ /**
+ * {@inheritDoc}
+ */
+ public IPresentationReconciler getPresentationReconciler( ISourceViewer sourceViewer )
+ {
+ PresentationReconciler reconciler = new PresentationReconciler();
+ reconciler.setDocumentPartitioning( getConfiguredDocumentPartitioning( sourceViewer ) );
+
+ // Creating the damager/repairer for code
+ DefaultDamagerRepairer dr = new DefaultDamagerRepairer( OpenLdapAclEditorPlugin.getDefault()
+ .getCodeScanner() );
+ reconciler.setDamager( dr, IDocument.DEFAULT_CONTENT_TYPE );
+ reconciler.setRepairer( dr, IDocument.DEFAULT_CONTENT_TYPE );
+
+ return reconciler;
+ }
+
+
+ /**
+ * {@inheritDoc}
+ */
+ public IContentAssistant getContentAssistant( ISourceViewer sourceViewer )
+ {
+ // ContentAssistant assistant = new ContentAssistant();
+ ContentAssistant assistant = new DialogContentAssistant();
+ IContentAssistProcessor aciContentAssistProcessor = new OpenLdapContentAssistProcessor();
+
+ assistant.setContentAssistProcessor( aciContentAssistProcessor, IDocument.DEFAULT_CONTENT_TYPE );
+ assistant.enableAutoActivation( true );
+ assistant.setAutoActivationDelay( 500 );
+ assistant.setProposalPopupOrientation( IContentAssistant.PROPOSAL_STACKED );
+ assistant.setContextInformationPopupOrientation( IContentAssistant.CONTEXT_INFO_ABOVE );
+
+ return assistant;
+ }
+
+
+ /**
+ * {@inheritDoc}
+ */
+ public IContentFormatter getContentFormatter( ISourceViewer sourceViewer )
+ {
+ ContentFormatter formatter = new ContentFormatter();
+ IFormattingStrategy formattingStrategy = new OpenLdapAclFormattingStrategy( sourceViewer );
+ formatter.enablePartitionAwareFormatting( false );
+ formatter.setFormattingStrategy( formattingStrategy, IDocument.DEFAULT_CONTENT_TYPE );
+ return formatter;
+ }
+}
Added: directory/studio/trunk/plugins/openldap.acl.editor/src/main/java/org/apache/directory/studio/openldap/config/acl/sourceeditor/OpenLdapAclTextAttributeProvider.java
URL: http://svn.apache.org/viewvc/directory/studio/trunk/plugins/openldap.acl.editor/src/main/java/org/apache/directory/studio/openldap/config/acl/sourceeditor/OpenLdapAclTextAttributeProvider.java?rev=1670931&view=auto
==============================================================================
--- directory/studio/trunk/plugins/openldap.acl.editor/src/main/java/org/apache/directory/studio/openldap/config/acl/sourceeditor/OpenLdapAclTextAttributeProvider.java (added)
+++ directory/studio/trunk/plugins/openldap.acl.editor/src/main/java/org/apache/directory/studio/openldap/config/acl/sourceeditor/OpenLdapAclTextAttributeProvider.java Thu Apr 2 16:14:26 2015
@@ -0,0 +1,78 @@
+/*
+ * 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.studio.openldap.config.acl.sourceeditor;
+
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.jface.text.TextAttribute;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.RGB;
+import org.eclipse.swt.widgets.Display;
+
+
+/**
+ * This class provides the TextAttributes elements for each kind of attribute
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ */
+public class OpenLdapAclTextAttributeProvider
+{
+ public static final String DEFAULT_ATTRIBUTE = "__pos_acl_default_attribute"; //$NON-NLS-1$
+ public static final String KEYWORD_ATTRIBUTE = "__pos_acl_keyword_attribute"; //$NON-NLS-1$
+ public static final String STRING_ATTRIBUTE = "__pos_acl_string_attribute"; //$NON-NLS-1$
+
+ private Map<String, TextAttribute> attributes = new HashMap<String, TextAttribute>();
+
+
+ /**
+ * Creates a new instance of AciTextAttributeProvider.
+ */
+ public OpenLdapAclTextAttributeProvider()
+ {
+ attributes.put( DEFAULT_ATTRIBUTE, new TextAttribute( new Color( Display.getCurrent(), new RGB( 0, 0, 0 ) ) ) );
+
+ attributes.put( KEYWORD_ATTRIBUTE, new TextAttribute( new Color( Display.getCurrent(), new RGB( 127, 0, 85 ) ),
+ null, SWT.BOLD ) );
+
+ attributes.put( STRING_ATTRIBUTE, new TextAttribute( new Color( Display.getCurrent(), new RGB( 0, 0, 255 ) ) ) );
+ }
+
+
+ /**
+ * Gets the correct TextAttribute for the given type
+ *
+ * @param type
+ * the type of element
+ * @return
+ * the correct TextAttribute for the given type
+ */
+ public TextAttribute getAttribute( String type )
+ {
+ TextAttribute attr = ( TextAttribute ) attributes.get( type );
+ if ( attr == null )
+ {
+ attr = ( TextAttribute ) attributes.get( DEFAULT_ATTRIBUTE );
+ }
+ return attr;
+ }
+}
Added: directory/studio/trunk/plugins/openldap.acl.editor/src/main/java/org/apache/directory/studio/openldap/config/acl/sourceeditor/OpenLdapContentAssistProcessor.java
URL: http://svn.apache.org/viewvc/directory/studio/trunk/plugins/openldap.acl.editor/src/main/java/org/apache/directory/studio/openldap/config/acl/sourceeditor/OpenLdapContentAssistProcessor.java?rev=1670931&view=auto
==============================================================================
--- directory/studio/trunk/plugins/openldap.acl.editor/src/main/java/org/apache/directory/studio/openldap/config/acl/sourceeditor/OpenLdapContentAssistProcessor.java (added)
+++ directory/studio/trunk/plugins/openldap.acl.editor/src/main/java/org/apache/directory/studio/openldap/config/acl/sourceeditor/OpenLdapContentAssistProcessor.java Thu Apr 2 16:14:26 2015
@@ -0,0 +1,148 @@
+/*
+ * 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.studio.openldap.config.acl.sourceeditor;
+
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import org.eclipse.jface.text.IRegion;
+import org.eclipse.jface.text.ITextViewer;
+import org.eclipse.jface.text.contentassist.ICompletionProposal;
+import org.eclipse.jface.text.contentassist.IContextInformation;
+import org.eclipse.jface.text.contentassist.IContextInformationValidator;
+import org.eclipse.jface.text.templates.Template;
+import org.eclipse.jface.text.templates.TemplateCompletionProcessor;
+import org.eclipse.jface.text.templates.TemplateContextType;
+import org.eclipse.swt.graphics.Image;
+
+import org.apache.directory.studio.openldap.config.acl.OpenLdapAclEditorPlugin;
+import org.apache.directory.studio.openldap.config.acl.OpenLdapAclEditorPluginConstants;
+
+
+/**
+ * This class implements the Content Assist Processor for ACI Item
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ */
+public class OpenLdapContentAssistProcessor extends TemplateCompletionProcessor
+{
+ /**
+ * {@inheritDoc}
+ */
+ public ICompletionProposal[] computeCompletionProposals( ITextViewer viewer, int offset )
+ {
+ List<ICompletionProposal> proposalList = new ArrayList<ICompletionProposal>();
+
+ // Add context dependend template proposals
+ ICompletionProposal[] templateProposals = super.computeCompletionProposals( viewer, offset );
+ if ( templateProposals != null )
+ {
+ proposalList.addAll( Arrays.asList( templateProposals ) );
+ }
+
+ return ( ICompletionProposal[] ) proposalList.toArray( new ICompletionProposal[0] );
+ }
+
+
+ /**
+ * {@inheritDoc}
+ */
+ public IContextInformation[] computeContextInformation( ITextViewer viewer, int offset )
+ {
+ return null;
+ }
+
+
+ /**
+ * {@inheritDoc}
+ */
+ public char[] getCompletionProposalAutoActivationCharacters()
+ {
+
+ char[] chars = new char[52];
+ for ( int i = 0; i < 26; i++ )
+ {
+ chars[i] = ( char ) ( 'a' + i );
+ }
+ for ( int i = 0; i < 26; i++ )
+ {
+ chars[i + 26] = ( char ) ( 'A' + i );
+ }
+
+ return chars;
+ }
+
+
+ /**
+ * {@inheritDoc}
+ */
+ public char[] getContextInformationAutoActivationCharacters()
+ {
+ return null;
+ }
+
+
+ /**
+ * {@inheritDoc}
+ */
+ public IContextInformationValidator getContextInformationValidator()
+ {
+ return null;
+ }
+
+
+ /**
+ * {@inheritDoc}
+ */
+ public String getErrorMessage()
+ {
+ return null;
+ }
+
+
+ /**
+ * {@inheritDoc}
+ */
+ protected TemplateContextType getContextType( ITextViewer viewer, IRegion region )
+ {
+ return OpenLdapAclEditorPlugin.getDefault().getTemplateContextTypeRegistry().getContextType(
+ OpenLdapAclEditorPluginConstants.TEMPLATE_ID );
+ }
+
+
+ /**
+ * {@inheritDoc}
+ */
+ protected Image getImage( Template template )
+ {
+ return null;
+ }
+
+
+ /**
+ * {@inheritDoc}
+ */
+ protected Template[] getTemplates( String contextTypeId )
+ {
+ return OpenLdapAclEditorPlugin.getDefault().getTemplateStore().getTemplates( contextTypeId );
+ }
+}
Added: directory/studio/trunk/plugins/openldap.acl.editor/src/main/java/org/apache/directory/studio/openldap/config/acl/sourceeditor/StarRule.java
URL: http://svn.apache.org/viewvc/directory/studio/trunk/plugins/openldap.acl.editor/src/main/java/org/apache/directory/studio/openldap/config/acl/sourceeditor/StarRule.java?rev=1670931&view=auto
==============================================================================
--- directory/studio/trunk/plugins/openldap.acl.editor/src/main/java/org/apache/directory/studio/openldap/config/acl/sourceeditor/StarRule.java (added)
+++ directory/studio/trunk/plugins/openldap.acl.editor/src/main/java/org/apache/directory/studio/openldap/config/acl/sourceeditor/StarRule.java Thu Apr 2 16:14:26 2015
@@ -0,0 +1,73 @@
+/*
+ * 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.studio.openldap.config.acl.sourceeditor;
+
+
+import org.eclipse.jface.text.rules.ICharacterScanner;
+import org.eclipse.jface.text.rules.IToken;
+import org.eclipse.jface.text.rules.Token;
+
+
+/**
+ * Rule to detect a "dn[.type[,modifier]]=" clause.
+ */
+public class StarRule extends AbstractRule
+{
+
+
+ /**
+ * Creates a new instance of StarRule.
+ *
+ * @param token the associated token
+ */
+ public StarRule( IToken token )
+ {
+ super( token );
+ }
+
+
+ /**
+ * {@inheritDoc}
+ */
+ public IToken evaluate( ICharacterScanner scanner, boolean resume )
+ {
+ // Looking for '*'
+ if ( matchChar( scanner, '*' ) )
+ {
+ // Token evaluation complete
+ return token;
+ }
+ else
+ {
+ // Not what was expected
+ return Token.UNDEFINED;
+ }
+ }
+
+
+ /**
+ * {@inheritDoc}
+ */
+ public IToken evaluate( ICharacterScanner scanner )
+ {
+ return this.evaluate( scanner, false );
+ }
+}
Added: directory/studio/trunk/plugins/openldap.acl.editor/src/main/java/org/apache/directory/studio/openldap/config/acl/widgets/AclWhoClauseSsfValuesEnum.java
URL: http://svn.apache.org/viewvc/directory/studio/trunk/plugins/openldap.acl.editor/src/main/java/org/apache/directory/studio/openldap/config/acl/widgets/AclWhoClauseSsfValuesEnum.java?rev=1670931&view=auto
==============================================================================
--- directory/studio/trunk/plugins/openldap.acl.editor/src/main/java/org/apache/directory/studio/openldap/config/acl/widgets/AclWhoClauseSsfValuesEnum.java (added)
+++ directory/studio/trunk/plugins/openldap.acl.editor/src/main/java/org/apache/directory/studio/openldap/config/acl/widgets/AclWhoClauseSsfValuesEnum.java Thu Apr 2 16:14:26 2015
@@ -0,0 +1,33 @@
+/*
+ * 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.studio.openldap.config.acl.widgets;
+
+
+public enum AclWhoClauseSsfValuesEnum
+{
+ ANY,
+ FORTY,
+ FIFTY_SIX,
+ SIXTY_FOUR,
+ ONE_TWENTY_HEIGHT,
+ ONE_SIXTY_FOUR,
+ TWO_FIFTY_SIX,
+ CUSTOM
+}
Added: directory/studio/trunk/plugins/openldap.acl.editor/src/main/java/org/apache/directory/studio/openldap/config/acl/widgets/AttributeTypeContentProposal.java
URL: http://svn.apache.org/viewvc/directory/studio/trunk/plugins/openldap.acl.editor/src/main/java/org/apache/directory/studio/openldap/config/acl/widgets/AttributeTypeContentProposal.java?rev=1670931&view=auto
==============================================================================
--- directory/studio/trunk/plugins/openldap.acl.editor/src/main/java/org/apache/directory/studio/openldap/config/acl/widgets/AttributeTypeContentProposal.java (added)
+++ directory/studio/trunk/plugins/openldap.acl.editor/src/main/java/org/apache/directory/studio/openldap/config/acl/widgets/AttributeTypeContentProposal.java Thu Apr 2 16:14:26 2015
@@ -0,0 +1,29 @@
+/*
+ * 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.studio.openldap.config.acl.widgets;
+
+
+public class AttributeTypeContentProposal extends AttributesWidgetContentProposal
+{
+ public AttributeTypeContentProposal( String content )
+ {
+ super( content );
+ }
+}
Added: directory/studio/trunk/plugins/openldap.acl.editor/src/main/java/org/apache/directory/studio/openldap/config/acl/widgets/AttributesWidget.java
URL: http://svn.apache.org/viewvc/directory/studio/trunk/plugins/openldap.acl.editor/src/main/java/org/apache/directory/studio/openldap/config/acl/widgets/AttributesWidget.java?rev=1670931&view=auto
==============================================================================
--- directory/studio/trunk/plugins/openldap.acl.editor/src/main/java/org/apache/directory/studio/openldap/config/acl/widgets/AttributesWidget.java (added)
+++ directory/studio/trunk/plugins/openldap.acl.editor/src/main/java/org/apache/directory/studio/openldap/config/acl/widgets/AttributesWidget.java Thu Apr 2 16:14:26 2015
@@ -0,0 +1,288 @@
+/*
+ * 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.studio.openldap.config.acl.widgets;
+
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.directory.studio.common.ui.HistoryUtils;
+import org.apache.directory.studio.common.ui.widgets.BaseWidgetUtils;
+import org.apache.directory.studio.ldapbrowser.common.BrowserCommonActivator;
+import org.apache.directory.studio.ldapbrowser.common.BrowserCommonConstants;
+import org.apache.directory.studio.ldapbrowser.common.widgets.BrowserWidget;
+import org.apache.directory.studio.ldapbrowser.core.model.IBrowserConnection;
+import org.eclipse.jface.bindings.keys.KeyStroke;
+import org.eclipse.jface.fieldassist.ComboContentAdapter;
+import org.eclipse.jface.fieldassist.ContentProposalAdapter;
+import org.eclipse.jface.fieldassist.IContentProposal;
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.VerifyEvent;
+import org.eclipse.swt.events.VerifyListener;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+
+import org.apache.directory.studio.openldap.config.acl.OpenLdapAclEditorPlugin;
+import org.apache.directory.studio.openldap.config.acl.OpenLdapAclEditorPluginConstants;
+
+
+public class AttributesWidget extends BrowserWidget
+{
+ /** The initial attributes. */
+ private String[] initialAttributes;
+
+ /** The attributes combo */
+ private Combo attributesCombo;
+
+ /** The proposal provider */
+ private AttributesWidgetContentProposalProvider proposalProvider;
+
+ /** The proposal adapter*/
+ private ContentProposalAdapter proposalAdapter;
+
+ /** The label provider for the proposal adapter */
+ private LabelProvider labelProvider = new LabelProvider()
+ {
+ public String getText( Object element )
+ {
+ if ( element instanceof IContentProposal )
+ {
+ IContentProposal proposal = ( IContentProposal ) element;
+ return proposal.getLabel() == null ? proposal.getContent() : proposal.getLabel();
+ }
+
+ return super.getText( element );
+ };
+
+
+ public Image getImage( Object element )
+ {
+ if ( element instanceof AttributeTypeContentProposal )
+ {
+ return BrowserCommonActivator.getDefault().getImage( BrowserCommonConstants.IMG_ATD );
+ }
+ else if ( element instanceof ObjectClassContentProposal )
+ {
+ return BrowserCommonActivator.getDefault().getImage( BrowserCommonConstants.IMG_OCD );
+ }
+ else if ( element instanceof KeywordContentProposal )
+ {
+ return OpenLdapAclEditorPlugin.getDefault().getImage( OpenLdapAclEditorPluginConstants.IMG_KEYWORD );
+ }
+
+ return super.getImage( element );
+ }
+ };
+
+ /** The verify listener which doesn't allow white spaces*/
+ private VerifyListener verifyListener = new VerifyListener()
+ {
+ public void verifyText( VerifyEvent e )
+ {
+ // Not allowing white spaces
+ if ( Character.isWhitespace( e.character ) )
+ {
+ e.doit = false;
+ }
+ }
+ };
+
+ /** The modify listener */
+ private ModifyListener modifyListener = new ModifyListener()
+ {
+ public void modifyText( ModifyEvent e )
+ {
+ notifyListeners();
+ }
+ };
+
+
+ /**
+ * Creates the widget.
+ *
+ * @param parent the parent
+ */
+ public void createWidget( Composite parent )
+ {
+ // Combo
+ attributesCombo = BaseWidgetUtils.createCombo( parent, new String[0], -1, 1 );
+ GridData gd = new GridData( GridData.FILL_HORIZONTAL );
+ gd.horizontalSpan = 1;
+ gd.widthHint = 200;
+ attributesCombo.setLayoutData( gd );
+ attributesCombo.addVerifyListener( verifyListener );
+
+ // Content assist
+ proposalProvider = new AttributesWidgetContentProposalProvider();
+ proposalAdapter = new ContentProposalAdapter( attributesCombo, new ComboContentAdapter(),
+ proposalProvider, KeyStroke.getInstance( SWT.CTRL, SWT.SPACE ), new char[0] );
+ proposalProvider.setProposalAdapter( proposalAdapter );
+ proposalAdapter.setLabelProvider( labelProvider );
+
+ // History
+ String[] history = HistoryUtils.load( OpenLdapAclEditorPlugin.getDefault().getDialogSettings(),
+ OpenLdapAclEditorPluginConstants.DIALOGSETTING_KEY_ATTRIBUTES_HISTORY );
+ for ( int i = 0; i < history.length; i++ )
+ {
+ history[i] = history[i];
+ }
+ attributesCombo.setItems( history );
+ attributesCombo.setText( arrayToString( initialAttributes ) );
+ attributesCombo.addModifyListener( modifyListener );
+ }
+
+
+ /**
+ * Sets the initial attributes.
+ *
+ * @param initialAttributes the initial attributes
+ */
+ public void setInitialAttributes( String[] initialAttributes )
+ {
+ this.initialAttributes = initialAttributes;
+ attributesCombo.setText( arrayToString( initialAttributes ) );
+ }
+
+
+ /**
+ * @param browserConnection the browser connection to set
+ */
+ public void setBrowserConnection( IBrowserConnection browserConnection )
+ {
+ proposalProvider.setBrowserConnection( browserConnection );
+ }
+
+
+ /**
+ * Sets the enabled state of the widget.
+ *
+ * @param b true to enable the widget, false to disable the widget
+ */
+ public void setEnabled( boolean b )
+ {
+ attributesCombo.setEnabled( b );
+ }
+
+
+ /**
+ * Gets the attributes.
+ *
+ * @return the attributes
+ */
+ public String[] getAttributes()
+ {
+ String s = attributesCombo.getText();
+ return stringToArray( s );
+ }
+
+
+ /**
+ * Saves widget settings.
+ */
+ public void saveWidgetSettings()
+ {
+ HistoryUtils.save( OpenLdapAclEditorPlugin.getDefault().getDialogSettings(),
+ OpenLdapAclEditorPluginConstants.DIALOGSETTING_KEY_ATTRIBUTES_HISTORY,
+ arrayToString( getAttributes() ) );
+ }
+
+
+ /**
+ * Splits the given string into an array. Only the following
+ * characters are kept, all other are used to split the string
+ * and are truncated:
+ * <li>a-z
+ * <li>A-Z
+ * <li>0-9
+ * <li>-
+ * <li>.
+ * <li>;
+ * <li>_
+ * <li>*
+ * <li>+
+ * <li>@
+ * <li>!
+ *
+ * @param s the string to split
+ *
+ * @return the array with the splitted string, or null
+ */
+ public static String[] stringToArray( String s )
+ {
+ if ( s == null )
+ {
+ return null;
+ }
+ else
+ {
+ List<String> attributeList = new ArrayList<String>();
+
+ StringBuffer temp = new StringBuffer();
+ for ( int i = 0; i < s.length(); i++ )
+ {
+ char c = s.charAt( i );
+
+ if ( ( c >= 'a' && c <= 'z' ) || ( c >= 'A' && c <= 'Z' ) || ( c >= '0' && c <= '9' ) || c == '-'
+ || c == '.' || c == ';' || c == '_' || c == '*' || c == '+' || c == '@' || c == '!' )
+ {
+ temp.append( c );
+ }
+ else
+ {
+ if ( temp.length() > 0 )
+ {
+ attributeList.add( temp.toString() );
+ temp = new StringBuffer();
+ }
+ }
+ }
+ if ( temp.length() > 0 )
+ {
+ attributeList.add( temp.toString() );
+ }
+
+ return ( String[] ) attributeList.toArray( new String[attributeList.size()] );
+ }
+ }
+
+
+ public static String arrayToString( String[] array )
+ {
+ if ( array == null || array.length == 0 )
+ {
+ return "";
+ }
+ else
+ {
+ StringBuffer sb = new StringBuffer( array[0] );
+ for ( int i = 1; i < array.length; i++ )
+ {
+ sb.append( "," );
+ sb.append( array[i] );
+ }
+ return sb.toString();
+ }
+ }
+}
Added: directory/studio/trunk/plugins/openldap.acl.editor/src/main/java/org/apache/directory/studio/openldap/config/acl/widgets/AttributesWidgetContentProposal.java
URL: http://svn.apache.org/viewvc/directory/studio/trunk/plugins/openldap.acl.editor/src/main/java/org/apache/directory/studio/openldap/config/acl/widgets/AttributesWidgetContentProposal.java?rev=1670931&view=auto
==============================================================================
--- directory/studio/trunk/plugins/openldap.acl.editor/src/main/java/org/apache/directory/studio/openldap/config/acl/widgets/AttributesWidgetContentProposal.java (added)
+++ directory/studio/trunk/plugins/openldap.acl.editor/src/main/java/org/apache/directory/studio/openldap/config/acl/widgets/AttributesWidgetContentProposal.java Thu Apr 2 16:14:26 2015
@@ -0,0 +1,77 @@
+/*
+ * 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.studio.openldap.config.acl.widgets;
+
+
+import org.eclipse.jface.fieldassist.ContentProposal;
+
+
+/**
+ * An abstract content proposal for the attributes widget.
+ */
+public abstract class AttributesWidgetContentProposal extends ContentProposal
+{
+ /** The start position */
+ private int startPosition = 0;
+
+
+ /**
+ * Creates a new instance of AttributeWidgetContentProposal.
+ *
+ * @param content the String representing the content. Should not be <code>null</code>.
+ */
+ public AttributesWidgetContentProposal( String content )
+ {
+ super( content );
+ }
+
+
+ /**
+ * @return the startPosition
+ */
+ public int getStartPosition()
+ {
+ return startPosition;
+ }
+
+
+ /**
+ * @param startPosition the startPosition to set
+ */
+ public void setStartPosition( int startPosition )
+ {
+ this.startPosition = startPosition;
+ }
+
+
+ /**
+ * {@inheritDoc}
+ */
+ public String getContent()
+ {
+ String content = super.getContent();
+ if ( content != null )
+ {
+ return content.substring( startPosition );
+ }
+
+ return null;
+ }
+}
Added: directory/studio/trunk/plugins/openldap.acl.editor/src/main/java/org/apache/directory/studio/openldap/config/acl/widgets/AttributesWidgetContentProposalProvider.java
URL: http://svn.apache.org/viewvc/directory/studio/trunk/plugins/openldap.acl.editor/src/main/java/org/apache/directory/studio/openldap/config/acl/widgets/AttributesWidgetContentProposalProvider.java?rev=1670931&view=auto
==============================================================================
--- directory/studio/trunk/plugins/openldap.acl.editor/src/main/java/org/apache/directory/studio/openldap/config/acl/widgets/AttributesWidgetContentProposalProvider.java (added)
+++ directory/studio/trunk/plugins/openldap.acl.editor/src/main/java/org/apache/directory/studio/openldap/config/acl/widgets/AttributesWidgetContentProposalProvider.java Thu Apr 2 16:14:26 2015
@@ -0,0 +1,268 @@
+/*
+ * 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.studio.openldap.config.acl.widgets;
+
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+
+import org.apache.directory.studio.ldapbrowser.core.model.IBrowserConnection;
+import org.apache.directory.studio.ldapbrowser.core.model.schema.SchemaUtils;
+import org.eclipse.jface.fieldassist.ContentProposalAdapter;
+import org.eclipse.jface.fieldassist.IContentProposal;
+import org.eclipse.jface.fieldassist.IContentProposalProvider;
+
+
+public class AttributesWidgetContentProposalProvider implements IContentProposalProvider
+{
+ /** The content proposal adapter */
+ private ContentProposalAdapter proposalAdapter;
+
+ /** The browser connection */
+ private IBrowserConnection browserConnection;
+
+ /** The proposals */
+ private List<AttributesWidgetContentProposal> proposals;
+
+
+ public AttributesWidgetContentProposalProvider()
+ {
+ // Initializing the proposals list
+ proposals = new ArrayList<AttributesWidgetContentProposal>();
+
+ // Building the proposals list
+ buildProposals();
+ }
+
+
+ public IContentProposal[] getProposals( String contents, int position )
+ {
+ String value = getCurrentValue( contents, position );
+
+ List<AttributesWidgetContentProposal> matchingProposals = new ArrayList<AttributesWidgetContentProposal>();
+ for ( AttributesWidgetContentProposal proposal : proposals )
+ {
+ if ( proposal.getLabel().toUpperCase().startsWith( value.toUpperCase() ) )
+ {
+ matchingProposals.add( proposal );
+ proposal.setStartPosition( value.length() );
+ }
+ }
+
+ return matchingProposals.toArray( new AttributesWidgetContentProposal[0] );
+ }
+
+
+ /**
+ * {@inheritDoc}
+ */
+ public char[] getAutoActivationCharacters()
+ {
+ return new char[0];
+ }
+
+
+ /**
+ * Gets the current value.
+ *
+ * @param contents the contents
+ * @param position the position
+ * @return the current value
+ */
+ private String getCurrentValue( String contents, int position )
+ {
+ int start = 0;
+
+ for ( int i = position - 1; i >= 0; i-- )
+ {
+ char c = contents.charAt( i );
+ if ( c == ',' || Character.isWhitespace( c ) )
+ {
+ start = i + 1;
+ break;
+ }
+ }
+
+ return contents.substring( start, position );
+ }
+
+
+ /**
+ * Builds the proposals list
+ */
+ private void buildProposals()
+ {
+ // Reseting previous proposals
+ proposals.clear();
+
+ // Adding proposals
+ addKeywordProposals();
+ addConnectionProposals();
+
+ // Sorting the proposals
+ sortProposals();
+
+ // Setting auto-activation characters
+ setAutoActivationChars();
+ }
+
+
+ /**
+ * Sets the auto-activation characters
+ */
+ private void setAutoActivationChars()
+ {
+ if ( proposalAdapter != null )
+ {
+ Set<Character> characterSet = new HashSet<Character>();
+ for ( IContentProposal proposal : proposals )
+ {
+ String string = proposal.getLabel();
+ for ( int k = 0; k < string.length(); k++ )
+ {
+ char ch = string.charAt( k );
+ characterSet.add( Character.toLowerCase( ch ) );
+ characterSet.add( Character.toUpperCase( ch ) );
+ }
+ }
+
+ char[] autoActivationCharacters = new char[characterSet.size() + 1];
+ autoActivationCharacters[0] = ',';
+ int i = 1;
+ for ( Iterator<Character> it = characterSet.iterator(); it.hasNext(); )
+ {
+ Character ch = it.next();
+ autoActivationCharacters[i] = ch.charValue();
+ i++;
+ }
+
+ proposalAdapter.setAutoActivationCharacters( autoActivationCharacters );
+ }
+ }
+
+
+ /**
+ * Adding the keyword proposals
+ */
+ private void addKeywordProposals()
+ {
+ proposals.add( new KeywordContentProposal( "entry" ) );
+ proposals.add( new KeywordContentProposal( "children" ) );
+ }
+
+
+ /**
+ * Adding the connection proposals (attribute types and object classes).
+ */
+ private void addConnectionProposals()
+ {
+ if ( browserConnection != null )
+ {
+ // Attribute types
+ Collection<String> atNames = SchemaUtils.getNames( browserConnection.getSchema().getAttributeTypeDescriptions() );
+ for ( String atName : atNames )
+ {
+ proposals.add( new AttributeTypeContentProposal( atName ) );
+ }
+
+ // Object classes
+ Collection<String> ocNames = SchemaUtils.getNames( browserConnection.getSchema().getObjectClassDescriptions() );
+ for ( String ocName : ocNames )
+ {
+ proposals.add( new ObjectClassContentProposal( "@" + ocName ) );
+ proposals.add( new ObjectClassContentProposal( "!" + ocName ) );
+ }
+ }
+ }
+
+
+ /**
+ * Sorts the proposals.
+ */
+ private void sortProposals()
+ {
+ Comparator<? super AttributesWidgetContentProposal> comparator = new Comparator<AttributesWidgetContentProposal>()
+ {
+ public int compare( AttributesWidgetContentProposal o1, AttributesWidgetContentProposal o2 )
+ {
+ if ( ( o1 instanceof KeywordContentProposal ) && !( o2 instanceof KeywordContentProposal ) )
+ {
+ return -2;
+ }
+ else if ( !( o1 instanceof KeywordContentProposal ) && ( o2 instanceof KeywordContentProposal ) )
+ {
+ return 2;
+ }
+
+ else if ( ( o1 instanceof AttributeTypeContentProposal )
+ && !( o2 instanceof AttributeTypeContentProposal ) )
+ {
+ return -3;
+ }
+ else if ( !( o1 instanceof AttributeTypeContentProposal )
+ && ( o2 instanceof AttributeTypeContentProposal ) )
+ {
+ return 3;
+ }
+
+ else if ( ( o1 instanceof ObjectClassContentProposal )
+ && !( o2 instanceof ObjectClassContentProposal ) )
+ {
+ return -3;
+ }
+ else if ( !( o1 instanceof ObjectClassContentProposal )
+ && ( o2 instanceof ObjectClassContentProposal ) )
+ {
+ return 3;
+ }
+
+ return o1.getLabel().compareToIgnoreCase( o2.getLabel() );
+ }
+ };
+ Collections.sort( proposals, comparator );
+ }
+
+
+ /**
+ * @param browserConnection the browser connection to set
+ */
+ public void setBrowserConnection( IBrowserConnection browserConnection )
+ {
+ this.browserConnection = browserConnection;
+
+ // Re-building proposals
+ buildProposals();
+ }
+
+
+ /**
+ * @param proposalAdapter the proposalAdapter to set
+ */
+ public void setProposalAdapter( ContentProposalAdapter proposalAdapter )
+ {
+ this.proposalAdapter = proposalAdapter;
+ }
+}
Added: directory/studio/trunk/plugins/openldap.acl.editor/src/main/java/org/apache/directory/studio/openldap/config/acl/widgets/KeywordContentProposal.java
URL: http://svn.apache.org/viewvc/directory/studio/trunk/plugins/openldap.acl.editor/src/main/java/org/apache/directory/studio/openldap/config/acl/widgets/KeywordContentProposal.java?rev=1670931&view=auto
==============================================================================
--- directory/studio/trunk/plugins/openldap.acl.editor/src/main/java/org/apache/directory/studio/openldap/config/acl/widgets/KeywordContentProposal.java (added)
+++ directory/studio/trunk/plugins/openldap.acl.editor/src/main/java/org/apache/directory/studio/openldap/config/acl/widgets/KeywordContentProposal.java Thu Apr 2 16:14:26 2015
@@ -0,0 +1,32 @@
+/*
+ * 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.studio.openldap.config.acl.widgets;
+
+
+/**
+ * A content proposal for a keyword.
+ */
+public class KeywordContentProposal extends AttributesWidgetContentProposal
+{
+ public KeywordContentProposal( String content )
+ {
+ super( content );
+ }
+}
Added: directory/studio/trunk/plugins/openldap.acl.editor/src/main/java/org/apache/directory/studio/openldap/config/acl/widgets/ObjectClassContentProposal.java
URL: http://svn.apache.org/viewvc/directory/studio/trunk/plugins/openldap.acl.editor/src/main/java/org/apache/directory/studio/openldap/config/acl/widgets/ObjectClassContentProposal.java?rev=1670931&view=auto
==============================================================================
--- directory/studio/trunk/plugins/openldap.acl.editor/src/main/java/org/apache/directory/studio/openldap/config/acl/widgets/ObjectClassContentProposal.java (added)
+++ directory/studio/trunk/plugins/openldap.acl.editor/src/main/java/org/apache/directory/studio/openldap/config/acl/widgets/ObjectClassContentProposal.java Thu Apr 2 16:14:26 2015
@@ -0,0 +1,32 @@
+/*
+ * 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.studio.openldap.config.acl.widgets;
+
+
+/**
+ * A content proposal for an object class.
+ */
+public class ObjectClassContentProposal extends AttributesWidgetContentProposal
+{
+ public ObjectClassContentProposal( String content )
+ {
+ super( content );
+ }
+}
Added: directory/studio/trunk/plugins/openldap.acl.editor/src/main/java/org/apache/directory/studio/openldap/config/acl/widgets/OpenLdapAclSourceEditorComposite.java
URL: http://svn.apache.org/viewvc/directory/studio/trunk/plugins/openldap.acl.editor/src/main/java/org/apache/directory/studio/openldap/config/acl/widgets/OpenLdapAclSourceEditorComposite.java?rev=1670931&view=auto
==============================================================================
--- directory/studio/trunk/plugins/openldap.acl.editor/src/main/java/org/apache/directory/studio/openldap/config/acl/widgets/OpenLdapAclSourceEditorComposite.java (added)
+++ directory/studio/trunk/plugins/openldap.acl.editor/src/main/java/org/apache/directory/studio/openldap/config/acl/widgets/OpenLdapAclSourceEditorComposite.java Thu Apr 2 16:14:26 2015
@@ -0,0 +1,186 @@
+/*
+ * 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.studio.openldap.config.acl.widgets;
+
+
+import java.text.ParseException;
+
+import org.eclipse.jface.resource.JFaceResources;
+import org.eclipse.jface.text.Document;
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.jface.text.IRegion;
+import org.eclipse.jface.text.Region;
+import org.eclipse.jface.text.source.SourceViewer;
+import org.eclipse.jface.text.source.SourceViewerConfiguration;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Font;
+import org.eclipse.swt.layout.FillLayout;
+import org.eclipse.swt.widgets.Composite;
+
+import org.apache.directory.studio.openldap.config.acl.OpenLdapAclValueWithContext;
+import org.apache.directory.studio.openldap.config.acl.model.AclItem;
+import org.apache.directory.studio.openldap.config.acl.model.OpenLdapAclParser;
+import org.apache.directory.studio.openldap.config.acl.sourceeditor.OpenLdapAclSourceViewerConfiguration;
+
+
+/**
+ * This composite contains the source editor.
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ */
+public class OpenLdapAclSourceEditorComposite extends Composite
+{
+
+ /** The source editor */
+ private SourceViewer sourceEditor;
+
+ /** The source editor configuration. */
+ private SourceViewerConfiguration configuration;
+
+
+ /**
+ * Creates a new instance of ACIItemSourceEditorComposite.
+ *
+ * @param parent
+ * @param style
+ */
+ public OpenLdapAclSourceEditorComposite( Composite parent, int style )
+ {
+ super( parent, style );
+ setLayout( new FillLayout() );
+
+ createSourceEditor();
+ }
+
+
+ /**
+ * Creates and configures the source editor.
+ *
+ */
+ private void createSourceEditor()
+ {
+ // create source editor
+ sourceEditor = new SourceViewer( this, null, null, false, SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL );
+
+ // setup basic configuration
+ configuration = new OpenLdapAclSourceViewerConfiguration();
+ sourceEditor.configure( configuration );
+
+ // set text font
+ Font font = JFaceResources.getFont( JFaceResources.TEXT_FONT );
+ sourceEditor.getTextWidget().setFont( font );
+
+ // setup document
+ IDocument document = new Document();
+ sourceEditor.setDocument( document );
+ }
+
+
+ /**
+ * Sets the input to the source editor.
+ * A syntax check is performed before setting the input, an
+ * invalid syntax causes a ParseException.
+ *
+ * @param input the valid string representation of the ACI item
+ * @throws ParseException it the syntax check fails.
+ */
+ public void setInput( String input ) throws ParseException
+ {
+ OpenLdapAclParser parser = new OpenLdapAclParser();
+ parser.parse( input );
+
+ forceSetInput( input );
+ }
+
+
+ /**
+ * Set the input to the source editor without a syntax check.
+ *
+ * @param input The string representation of the ACI item, may be invalid
+ */
+ public void forceSetInput( String input )
+ {
+ sourceEditor.getDocument().set( input );
+
+ // format
+ IRegion region = new Region( 0, sourceEditor.getDocument().getLength() );
+ configuration.getContentFormatter( sourceEditor ).format( sourceEditor.getDocument(), region );
+ }
+
+
+ /**
+ * Returns the string representation of the ACI item.
+ * A syntax check is performed before returning the input, an
+ * invalid syntax causes a ParseException.
+ *
+ * @return the valid string representation of the ACI item
+ * @throws ParseException it the syntax check fails.
+ */
+ public String getInput() throws ParseException
+ {
+ String input = forceGetInput();
+
+ // strip new lines
+ input = input.replaceAll( "\\n", " " ); //$NON-NLS-1$ //$NON-NLS-2$
+ input = input.replaceAll( "\\r", " " ); //$NON-NLS-1$ //$NON-NLS-2$
+
+ OpenLdapAclParser parser = new OpenLdapAclParser();
+ AclItem aclItem = parser.parse( input );
+
+ String acl = "";
+ if ( aclItem != null )
+ {
+ acl = aclItem.toString();
+ }
+ return acl;
+ }
+
+
+ /**
+ * Returns the string representation of the ACI item without syntax check.
+ * In other words only the text in the source editor is returned.
+ *
+ * @return the string representation of the ACI item, may be invalid
+ */
+ public String forceGetInput()
+ {
+ return sourceEditor.getDocument().get();
+ }
+
+
+ /**
+ * Sets the context.
+ *
+ * @param context the context
+ */
+ public void setContext( OpenLdapAclValueWithContext context )
+ {
+ }
+
+
+ /**
+ * Formats the content.
+ */
+ public void format()
+ {
+ IRegion region = new Region( 0, sourceEditor.getDocument().getLength() );
+ configuration.getContentFormatter( sourceEditor ).format( sourceEditor.getDocument(), region );
+ }
+}
Added: directory/studio/trunk/plugins/openldap.acl.editor/src/main/java/org/apache/directory/studio/openldap/config/acl/widgets/OpenLdapAclTabFolderComposite.java
URL: http://svn.apache.org/viewvc/directory/studio/trunk/plugins/openldap.acl.editor/src/main/java/org/apache/directory/studio/openldap/config/acl/widgets/OpenLdapAclTabFolderComposite.java?rev=1670931&view=auto
==============================================================================
--- directory/studio/trunk/plugins/openldap.acl.editor/src/main/java/org/apache/directory/studio/openldap/config/acl/widgets/OpenLdapAclTabFolderComposite.java (added)
+++ directory/studio/trunk/plugins/openldap.acl.editor/src/main/java/org/apache/directory/studio/openldap/config/acl/widgets/OpenLdapAclTabFolderComposite.java Thu Apr 2 16:14:26 2015
@@ -0,0 +1,318 @@
+/*
+ * 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.studio.openldap.config.acl.widgets;
+
+
+import java.text.ParseException;
+import java.util.Arrays;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.FillLayout;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.TabFolder;
+import org.eclipse.swt.widgets.TabItem;
+
+import org.apache.directory.studio.openldap.config.acl.OpenLdapAclValueWithContext;
+import org.apache.directory.studio.openldap.config.acl.model.AclItem;
+import org.apache.directory.studio.openldap.config.acl.model.AclWhatClause;
+import org.apache.directory.studio.openldap.config.acl.model.AclWhatClauseStar;
+import org.apache.directory.studio.openldap.config.acl.model.AclWhoClause;
+import org.apache.directory.studio.openldap.config.acl.model.AclWhoClauseStar;
+
+
+/**
+ * This composite contains the tabs with visual and source editor.
+ * It also manages the synchronization between these two tabs.
+ *
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ */
+public class OpenLdapAclTabFolderComposite extends Composite
+{
+ /** The index of the visual tab */
+ public static final int VISUAL_TAB_INDEX = 0;
+
+ /** The index of the source tab */
+ public static final int SOURCE_TAB_INDEX = 1;
+
+ /** The tab folder */
+ private TabFolder tabFolder;
+
+ /** The visual tab */
+ private TabItem visualTab;
+
+ /** The inner container of the visual tab */
+ private Composite visualContainer;
+
+ /** The visual editor composite */
+ private OpenLdapAclVisualEditorComposite visualComposite;
+
+ /** Tehe source tab */
+ private TabItem sourceTab;
+
+ /** The inner container of the visual tab */
+ private Composite sourceContainer;
+
+ /** The source editor composite */
+ private OpenLdapAclSourceEditorComposite sourceComposite;
+
+
+ /**
+ * Creates a new instance of TabFolderComposite.
+ *
+ * @param parent
+ * @param style
+ */
+ public OpenLdapAclTabFolderComposite( Composite parent, int style )
+ {
+ super( parent, style );
+ GridLayout layout = new GridLayout();
+ layout.marginWidth = 0;
+ layout.marginHeight = 0;
+ setLayout( layout );
+
+ createTabFolder();
+
+ createVisualTab();
+
+ createSourceTab();
+
+ initListeners();
+ }
+
+
+ /**
+ * Initializes the listeners.
+ *
+ */
+ private void initListeners()
+ {
+ tabFolder.addSelectionListener( new SelectionAdapter()
+ {
+ public void widgetSelected( SelectionEvent e )
+ {
+ tabSelected();
+ }
+ } );
+ }
+
+
+ /**
+ * Creates the source tab and configures the source editor.
+ *
+ */
+ private void createSourceTab()
+ {
+ // create inner container
+ sourceContainer = new Composite( tabFolder, SWT.BORDER );
+ sourceContainer.setLayout( new FillLayout() );
+
+ // create source editor
+ sourceComposite = new OpenLdapAclSourceEditorComposite( sourceContainer, SWT.NONE );
+
+ // create tab
+ sourceTab = new TabItem( tabFolder, SWT.NONE, SOURCE_TAB_INDEX );
+ sourceTab.setText( "Source" );
+ sourceTab.setControl( sourceContainer );
+ }
+
+
+ /**
+ * Creates the visual tab and the GUI editor.
+ *
+ */
+ private void createVisualTab()
+ {
+ // create inner container
+ visualContainer = new Composite( tabFolder, SWT.NONE );
+ visualContainer.setLayout( new GridLayout() );
+ visualContainer.setLayoutData( new GridData( SWT.FILL, SWT.FILL, true, true ) );
+
+ // create the visual ACIItem composite
+ visualComposite = new OpenLdapAclVisualEditorComposite( visualContainer, SWT.NONE );
+ visualComposite.setLayoutData( new GridData( SWT.FILL, SWT.FILL, true, true ) );
+
+ // create tab
+ visualTab = new TabItem( tabFolder, SWT.NONE, VISUAL_TAB_INDEX );
+ visualTab.setText( "Visual Editor" );
+ visualTab.setControl( visualContainer );
+ }
+
+
+ /**
+ * Creates the tab folder and the listeners.
+ *
+ */
+ private void createTabFolder()
+ {
+ tabFolder = new TabFolder( this, SWT.TOP );
+ tabFolder.setLayoutData( new GridData( SWT.FILL, SWT.FILL, true, true ) );
+ }
+
+
+ /**
+ * Called, when a tab is selected. This method manages the synchronization
+ * between visual and source editor.
+ */
+ private void tabSelected()
+ {
+ int index = tabFolder.getSelectionIndex();
+
+ if ( index == SOURCE_TAB_INDEX )
+ {
+ // switched to source tab: serialize visual and set to source
+ // on parse error: print message and return to visual tab
+ // try
+ // {
+ // String input = visualComposite.getInput();
+ // sourceComposite.setInput( input );
+ // }
+ // catch ( ParseException pe )
+ // {
+ // IStatus status = new Status( IStatus.ERROR, ACIITemConstants.PLUGIN_ID, 1, Messages
+ // .getString( "ACIItemTabFolderComposite.error.onVisualEditor" ), pe ); //$NON-NLS-1$
+ // ErrorDialog.openError( getShell(),
+ // Messages.getString( "ACIItemTabFolderComposite.error.title" ), null, status ); //$NON-NLS-1$
+ // tabFolder.setSelection( VISUAL_TAB_INDEX );
+ // }
+ }
+ else if ( index == VISUAL_TAB_INDEX )
+ {
+ // switched to visual tab: parse source and populate to visual
+ // on parse error: print message and return to source tab
+ // try
+ // {
+ // String input = sourceComposite.getInput();
+ // visualComposite.setInput( input );
+ // }
+ // catch ( ParseException pe )
+ // {
+ // IStatus status = new Status( IStatus.ERROR, ACIITemConstants.PLUGIN_ID, 1, Messages
+ // .getString( "ACIItemTabFolderComposite.error.onSourceEditor" ), pe ); //$NON-NLS-1$
+ // ErrorDialog.openError( getShell(),
+ // Messages.getString( "ACIItemTabFolderComposite.error.title" ), null, status ); //$NON-NLS-1$
+ // tabFolder.setSelection( SOURCE_TAB_INDEX );
+ // }
+ }
+ }
+
+
+ /**
+ * Sets the input to both the source editor and to the visual editor.
+ * If the syntax is invalid the source editor is activated.
+ *
+ * @param input The string representation of the ACI item
+ */
+ public void setInput( String input )
+ {
+ // Checking if the input is null or empty
+ if ( ( input == null ) || ( "".equals( input ) ) )
+ {
+ // Creating a default ACL instead
+ AclItem defaultAcl = new AclItem( new AclWhatClause( new AclWhatClauseStar() ),
+ Arrays.asList( new AclWhoClause[]
+ { new AclWhoClauseStar() } ) );
+
+ // Assiging the default ACL as input
+ input = defaultAcl.toString();
+ }
+
+ // Setting the input to the source editor
+ sourceComposite.forceSetInput( input );
+
+ // Setting the input to the visual editor, on parse error switch to source editor
+ try
+ {
+ visualComposite.setInput( input );
+ }
+ catch ( ParseException e )
+ {
+ // IStatus status = new Status( IStatus.ERROR, ACIITemConstants.PLUGIN_ID, 1, Messages
+ // .getString( "ACIItemTabFolderComposite.error.onInput" ), pe ); //$NON-NLS-1$
+ // ErrorDialog.openError( getShell(),
+ // Messages.getString( "ACIItemTabFolderComposite.error.title" ), null, status ); //$NON-NLS-1$
+ //
+ tabFolder.setSelection( SOURCE_TAB_INDEX );
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ }
+
+
+ /**
+ * Returns the string representation of the ACI item.
+ * A syntax check is performed before returning the input, an
+ * invalid syntax causes a ParseException.
+ *
+ * @return the valid string representation of the ACI item
+ * @throws ParseException it the syntax check fails.
+ */
+ public String getInput() throws ParseException
+ {
+ int index = tabFolder.getSelectionIndex();
+ if ( index == VISUAL_TAB_INDEX )
+ {
+ String input = visualComposite.getInput();
+ return input;
+ }
+ else
+ {
+ String input = sourceComposite.getInput();
+ return input;
+ }
+ }
+
+
+ /**
+ * Sets the context.
+ *
+ * @param context the context
+ */
+ public void setContext( OpenLdapAclValueWithContext context )
+ {
+ sourceComposite.setContext( context );
+ visualComposite.setContext( context );
+ }
+
+
+ /**
+ * Formats the content.
+ */
+ public void format()
+ {
+ if ( tabFolder.getSelectionIndex() == SOURCE_TAB_INDEX )
+ {
+ sourceComposite.format();
+ }
+ }
+
+
+ /**
+ * Saves widget settings.
+ */
+ public void saveWidgetSettings()
+ {
+ visualComposite.saveWidgetSettings();
+ }
+}
Added: directory/studio/trunk/plugins/openldap.acl.editor/src/main/java/org/apache/directory/studio/openldap/config/acl/widgets/OpenLdapAclVisualEditorComposite.java
URL: http://svn.apache.org/viewvc/directory/studio/trunk/plugins/openldap.acl.editor/src/main/java/org/apache/directory/studio/openldap/config/acl/widgets/OpenLdapAclVisualEditorComposite.java?rev=1670931&view=auto
==============================================================================
--- directory/studio/trunk/plugins/openldap.acl.editor/src/main/java/org/apache/directory/studio/openldap/config/acl/widgets/OpenLdapAclVisualEditorComposite.java (added)
+++ directory/studio/trunk/plugins/openldap.acl.editor/src/main/java/org/apache/directory/studio/openldap/config/acl/widgets/OpenLdapAclVisualEditorComposite.java Thu Apr 2 16:14:26 2015
@@ -0,0 +1,164 @@
+/*
+ * 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.studio.openldap.config.acl.widgets;
+
+
+import java.text.ParseException;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.ScrolledComposite;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+
+import org.apache.directory.studio.openldap.config.acl.OpenLdapAclValueWithContext;
+import org.apache.directory.studio.openldap.config.acl.model.AclItem;
+import org.apache.directory.studio.openldap.config.acl.model.AclWhatClause;
+import org.apache.directory.studio.openldap.config.acl.model.AclWhatClauseStar;
+import org.apache.directory.studio.openldap.config.acl.model.OpenLdapAclParser;
+
+
+/**
+ * This is the main widget of the OpenLDAP ACL visual editor.
+ * <p>
+ * It extends ScrolledComposite.
+ */
+public class OpenLdapAclVisualEditorComposite extends ScrolledComposite
+{
+ private OpenLdapAclVisualEditorComposite instance;
+
+ /** The ACL */
+ private AclItem acl;
+
+ // UI widgets
+ private OpenLdapAclWhatClauseWidget whatClauseWidget;
+ private OpenLdapAclWhoClausesBuilderWidget whoClausesBuilderWidget;
+
+
+ /**
+ * Creates a new instance of OpenLdapAclVisualEditorComposite.
+ *
+ * @param parent a widget which will be the parent of the new instance (cannot be null)
+ * @param style the style of widget to construct
+ */
+ public OpenLdapAclVisualEditorComposite( Composite parent, int style )
+ {
+ super( parent, style | SWT.H_SCROLL | SWT.V_SCROLL );
+
+ // Creating the composite
+ Composite composite = new Composite( this, SWT.NONE );
+ composite.setLayout( new GridLayout() );
+ composite.setLayoutData( new GridData( SWT.FILL, SWT.FILL, true, true ) );
+
+ // Creating the widgets
+ createWhatClauseWidget( composite );
+ createWhoClausesWidget( composite );
+
+ // Configuring the composite
+ setContent( composite );
+ setExpandHorizontal( true );
+ setExpandVertical( true );
+ setMinSize( composite.computeSize( SWT.DEFAULT, SWT.DEFAULT ) );
+
+ instance = this;
+ }
+
+
+ /**
+ * Creates the "What" clause widget.
+ *
+ * @param parent the parent composite
+ */
+ private void createWhatClauseWidget( Composite parent )
+ {
+ whatClauseWidget = new OpenLdapAclWhatClauseWidget( this );
+ whatClauseWidget.create( parent );
+ }
+
+
+ /**
+ * Creates the "Who" clauses widget.
+ *
+ * @param parent the parent composite
+ */
+ private void createWhoClausesWidget( Composite parent )
+ {
+ whoClausesBuilderWidget = new OpenLdapAclWhoClausesBuilderWidget( this );
+ whoClausesBuilderWidget.create( parent );
+ }
+
+
+ /**
+ * Sets the input. The given ACI Item string is parsed and
+ * populated to the GUI elements.
+ *
+ *
+ * @param input The string representation of the ACI item
+ * @throws ParseException if the syntax is invalid
+ */
+ public void setInput( String input ) throws ParseException
+ {
+ // Reseting the previous input
+ acl = null;
+
+ // Parsing the input string
+ OpenLdapAclParser parser = new OpenLdapAclParser();
+ acl = parser.parse( input );
+
+ // Setting the input ACL to the widgets
+ whatClauseWidget.setInput( acl.getWhatClause() );
+ whoClausesBuilderWidget.setInput( acl.getWhoClauses() );
+ }
+
+
+ /**
+ * Returns the string representation of the ACI item as defined in GUI.
+ *
+ *
+ * @return the string representation of the ACI item
+ * @throws ParseException if the syntax is invalid
+ */
+ public String getInput() throws ParseException
+ {
+ AclItem aclItem = new AclItem( whatClauseWidget.getClause(), whoClausesBuilderWidget.getClauses() );
+ return aclItem.toString();
+ }
+
+
+ /**
+ * Sets the context.
+ *
+ * @param context the context
+ */
+ public void setContext( OpenLdapAclValueWithContext context )
+ {
+ whatClauseWidget.setContext( context );
+ whoClausesBuilderWidget.setContext( context );
+ }
+
+
+ /**
+ * Saves widget settings.
+ */
+ public void saveWidgetSettings()
+ {
+ whatClauseWidget.saveWidgetSettings();
+ }
+}
Added: directory/studio/trunk/plugins/openldap.acl.editor/src/main/java/org/apache/directory/studio/openldap/config/acl/widgets/OpenLdapAclWhatClauseWidget.java
URL: http://svn.apache.org/viewvc/directory/studio/trunk/plugins/openldap.acl.editor/src/main/java/org/apache/directory/studio/openldap/config/acl/widgets/OpenLdapAclWhatClauseWidget.java?rev=1670931&view=auto
==============================================================================
--- directory/studio/trunk/plugins/openldap.acl.editor/src/main/java/org/apache/directory/studio/openldap/config/acl/widgets/OpenLdapAclWhatClauseWidget.java (added)
+++ directory/studio/trunk/plugins/openldap.acl.editor/src/main/java/org/apache/directory/studio/openldap/config/acl/widgets/OpenLdapAclWhatClauseWidget.java Thu Apr 2 16:14:26 2015
@@ -0,0 +1,347 @@
+/*
+ * 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.studio.openldap.config.acl.widgets;
+
+
+import org.apache.directory.studio.common.ui.widgets.BaseWidgetUtils;
+import org.apache.directory.studio.ldapbrowser.common.widgets.BrowserWidget;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Group;
+
+import org.apache.directory.studio.openldap.config.acl.OpenLdapAclValueWithContext;
+import org.apache.directory.studio.openldap.config.acl.model.AclWhatClause;
+import org.apache.directory.studio.openldap.config.acl.model.AclWhatClauseAttributes;
+import org.apache.directory.studio.openldap.config.acl.model.AclWhatClauseDn;
+import org.apache.directory.studio.openldap.config.acl.model.AclWhatClauseFilter;
+import org.apache.directory.studio.openldap.config.acl.widgets.composites.WhatClauseAttributesComposite;
+import org.apache.directory.studio.openldap.config.acl.widgets.composites.WhatClauseDnComposite;
+import org.apache.directory.studio.openldap.config.acl.widgets.composites.WhatClauseFilterComposite;
+
+
+public class OpenLdapAclWhatClauseWidget extends BrowserWidget
+{
+ /** The visual editor composite */
+ private OpenLdapAclVisualEditorComposite visualEditorComposite;
+
+ /** The context */
+ private OpenLdapAclValueWithContext context;
+
+ /** The what clause */
+ private AclWhatClause clause;
+
+ // UI widgets
+ private Composite composite;
+ private Button dnCheckbox;
+ private Composite dnComposite;
+ private Composite dnSubComposite;
+ private Button filterCheckbox;
+ private Composite filterComposite;
+ private Composite filterSubComposite;
+ private Button attributesCheckbox;
+ private Composite attributesComposite;
+ private Composite attributesSubComposite;
+
+ // Listeners
+ private SelectionAdapter dnCheckboxListener = new SelectionAdapter()
+ {
+ public void widgetSelected( org.eclipse.swt.events.SelectionEvent e )
+ {
+ if ( dnCheckbox.getSelection() )
+ {
+ createDnComposite();
+ }
+ else
+ {
+ disposeComposite( dnSubComposite );
+ }
+
+ // Refreshing the layout of the whole composite
+ visualEditorComposite.layout( true, true );
+ }
+ };
+ private SelectionAdapter filterCheckboxListener = new SelectionAdapter()
+ {
+ public void widgetSelected( org.eclipse.swt.events.SelectionEvent e )
+ {
+ if ( filterCheckbox.getSelection() )
+ {
+ createFilterComposite();
+ }
+ else
+ {
+ disposeComposite( filterSubComposite );
+ }
+
+ // Refreshing the layout of the whole composite
+ visualEditorComposite.layout( true, true );
+ }
+ };
+ private SelectionAdapter attributesCheckboxListener = new SelectionAdapter()
+ {
+ public void widgetSelected( org.eclipse.swt.events.SelectionEvent e )
+ {
+ if ( attributesCheckbox.getSelection() )
+ {
+ createAttributesComposite();
+ }
+ else
+ {
+ disposeComposite( attributesSubComposite );
+ }
+
+ // Refreshing the layout of the whole composite
+ visualEditorComposite.layout( true, true );
+ }
+ };
+
+ private WhatClauseAttributesComposite attributesClauseComposite;
+
+ private WhatClauseFilterComposite filterClauseComposite;
+
+ private WhatClauseDnComposite dnClauseComposite;
+
+
+ /**
+ * Creates a new instance of OpenLdapAclWhatClauseWidget.
+ *
+ * @param visualEditorComposite the visual editor composite
+ */
+ public OpenLdapAclWhatClauseWidget( OpenLdapAclVisualEditorComposite visualEditorComposite )
+ {
+ this.visualEditorComposite = visualEditorComposite;
+ }
+
+
+ public void create( Composite parent )
+ {
+ // Creating the widget base composite
+ composite = BaseWidgetUtils.createColumnContainer( parent, 1, 1 );
+
+ // Creating the what group
+ Group whatGroup = BaseWidgetUtils.createGroup( parent, "Acces to \"What\"", 1 );
+ whatGroup.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false ) );
+
+ // DN
+ dnCheckbox = BaseWidgetUtils.createCheckbox( whatGroup, "DN", 1 );
+ dnComposite = BaseWidgetUtils.createColumnContainer( whatGroup, 1, 1 );
+
+ // Filter
+ filterCheckbox = BaseWidgetUtils.createCheckbox( whatGroup, "Filter", 1 );
+ filterComposite = BaseWidgetUtils.createColumnContainer( whatGroup, 1, 1 );
+
+ // Attributes
+ attributesCheckbox = BaseWidgetUtils.createCheckbox( whatGroup, "Attributes", 1 );
+ attributesComposite = BaseWidgetUtils.createColumnContainer( whatGroup, 1, 1 );
+
+ // Adding the listeners to the UI widgets
+ addListeners();
+ }
+
+
+ /**
+ * Creates the DN composite.
+ */
+ private void createDnComposite()
+ {
+ Group dnGroup = BaseWidgetUtils.createGroup( dnComposite, "", 1 );
+ dnGroup.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false ) );
+ dnSubComposite = dnGroup;
+
+ dnClauseComposite = new WhatClauseDnComposite( visualEditorComposite );
+ dnClauseComposite.createComposite( dnGroup );
+
+ if ( clause.getDnClause() != null )
+ {
+ dnClauseComposite.setClause( clause.getDnClause() );
+ }
+
+ if ( context != null )
+ {
+ dnClauseComposite.setConnection( context.getConnection() );
+ }
+ }
+
+
+ /**
+ * Creates the filter composite.
+ */
+ private void createFilterComposite()
+ {
+ Group filterGroup = BaseWidgetUtils.createGroup( filterComposite, "", 1 );
+ filterGroup.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false ) );
+ filterSubComposite = filterGroup;
+
+ filterClauseComposite = new WhatClauseFilterComposite( visualEditorComposite );
+ filterClauseComposite.createComposite( filterGroup );
+
+ if ( clause.getFilterClause() != null )
+ {
+ filterClauseComposite.setClause( clause.getFilterClause() );
+ }
+
+ if ( context != null )
+ {
+ filterClauseComposite.setConnection( context.getConnection() );
+ }
+ }
+
+
+ /**
+ * Creates the attributes composite.
+ */
+ private void createAttributesComposite()
+ {
+ Group attributesGroup = BaseWidgetUtils.createGroup( attributesComposite, "", 1 );
+ attributesGroup.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false ) );
+ attributesSubComposite = attributesGroup;
+
+ attributesClauseComposite = new WhatClauseAttributesComposite( visualEditorComposite );
+ attributesClauseComposite.createComposite( attributesGroup );
+
+ if ( clause.getAttributesClause() != null )
+ {
+ attributesClauseComposite.setClause( clause.getAttributesClause() );
+ }
+
+ if ( context != null )
+ {
+ attributesClauseComposite.setConnection( context.getConnection() );
+ }
+ }
+
+
+ /**
+ * Disposes the given composite.
+ *
+ * @param composite the composite
+ */
+ private void disposeComposite( Composite composite )
+ {
+ if ( ( composite != null ) && ( !composite.isDisposed() ) )
+ {
+ composite.dispose();
+ }
+ }
+
+
+ /**
+ * Adds the listeners to the UI widgets.
+ */
+ private void addListeners()
+ {
+ dnCheckbox.addSelectionListener( dnCheckboxListener );
+ filterCheckbox.addSelectionListener( filterCheckboxListener );
+ attributesCheckbox.addSelectionListener( attributesCheckboxListener );
+ }
+
+
+ /**
+ * Sets the input.
+ *
+ * @param clause the what clause
+ */
+ public void setInput( AclWhatClause clause )
+ {
+ this.clause = clause;
+
+ if ( clause != null )
+ {
+ // DN clause
+ AclWhatClauseDn dnClause = clause.getDnClause();
+ if ( dnClause != null )
+ {
+ dnCheckbox.setSelection( true );
+ createDnComposite();
+ }
+
+ // Filter clause
+ AclWhatClauseFilter filterClause = clause.getFilterClause();
+ if ( filterClause != null )
+ {
+ filterCheckbox.setSelection( true );
+ createFilterComposite();
+ }
+
+ // Attributes clause
+ AclWhatClauseAttributes attributesClause = clause.getAttributesClause();
+ if ( attributesClause != null )
+ {
+ attributesCheckbox.setSelection( true );
+ createAttributesComposite();
+ }
+ }
+ }
+
+
+ /**
+ * Sets the context.
+ *
+ * @param context the context
+ */
+ public void setContext( OpenLdapAclValueWithContext context )
+ {
+ this.context = context;
+
+ if ( attributesClauseComposite != null )
+ {
+ attributesClauseComposite.setConnection( context.getConnection() );
+ }
+ }
+
+
+ /**
+ * Gets the what clause.
+ *
+ * @return the what clause
+ */
+ public AclWhatClause getClause()
+ {
+ return clause;
+ }
+
+
+ /**
+ * Disposes all created SWT widgets.
+ */
+ public void dispose()
+ {
+ // Composite
+ if ( ( composite != null ) && ( !composite.isDisposed() ) )
+ {
+ composite.dispose();
+ }
+ }
+
+
+ /**
+ * Saves widget settings.
+ */
+ public void saveWidgetSettings()
+ {
+ if ( attributesClauseComposite != null )
+ {
+ attributesClauseComposite.saveWidgetSettings();
+ }
+ }
+}