You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by pa...@apache.org on 2006/12/18 18:53:22 UTC
svn commit: r488368 [17/23] - in /directory/sandbox/pamarcelot/ldapstudio:
ldapstudio-browser-ui/ ldapstudio-browser-ui/META-INF/
ldapstudio-browser-ui/about_files/ ldapstudio-browser-ui/icons/
ldapstudio-browser-ui/icons/ovr16/ ldapstudio-browser-ui/s...
Added: directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/editors/ldif/text/LdifDamagerRepairer.java
URL: http://svn.apache.org/viewvc/directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/editors/ldif/text/LdifDamagerRepairer.java?view=auto&rev=488368
==============================================================================
--- directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/editors/ldif/text/LdifDamagerRepairer.java (added)
+++ directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/editors/ldif/text/LdifDamagerRepairer.java Mon Dec 18 09:52:58 2006
@@ -0,0 +1,420 @@
+/*
+ * 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.browser.ui.editors.ldif.text;
+
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.directory.ldapstudio.browser.core.model.ldif.LdifEOFPart;
+import org.apache.directory.ldapstudio.browser.core.model.ldif.LdifFile;
+import org.apache.directory.ldapstudio.browser.core.model.ldif.LdifInvalidPart;
+import org.apache.directory.ldapstudio.browser.core.model.ldif.LdifPart;
+import org.apache.directory.ldapstudio.browser.core.model.ldif.container.LdifChangeAddRecord;
+import org.apache.directory.ldapstudio.browser.core.model.ldif.container.LdifChangeDeleteRecord;
+import org.apache.directory.ldapstudio.browser.core.model.ldif.container.LdifChangeModDnRecord;
+import org.apache.directory.ldapstudio.browser.core.model.ldif.container.LdifChangeModifyRecord;
+import org.apache.directory.ldapstudio.browser.core.model.ldif.container.LdifContainer;
+import org.apache.directory.ldapstudio.browser.core.model.ldif.container.LdifModSpec;
+import org.apache.directory.ldapstudio.browser.core.model.ldif.lines.LdifAttrValLine;
+import org.apache.directory.ldapstudio.browser.core.model.ldif.lines.LdifChangeTypeLine;
+import org.apache.directory.ldapstudio.browser.core.model.ldif.lines.LdifCommentLine;
+import org.apache.directory.ldapstudio.browser.core.model.ldif.lines.LdifControlLine;
+import org.apache.directory.ldapstudio.browser.core.model.ldif.lines.LdifDeloldrdnLine;
+import org.apache.directory.ldapstudio.browser.core.model.ldif.lines.LdifDnLine;
+import org.apache.directory.ldapstudio.browser.core.model.ldif.lines.LdifLineBase;
+import org.apache.directory.ldapstudio.browser.core.model.ldif.lines.LdifModSpecSepLine;
+import org.apache.directory.ldapstudio.browser.core.model.ldif.lines.LdifModSpecTypeLine;
+import org.apache.directory.ldapstudio.browser.core.model.ldif.lines.LdifNewrdnLine;
+import org.apache.directory.ldapstudio.browser.core.model.ldif.lines.LdifNewsuperiorLine;
+import org.apache.directory.ldapstudio.browser.core.model.ldif.lines.LdifVersionLine;
+import org.apache.directory.ldapstudio.browser.ui.BrowserUIConstants;
+import org.apache.directory.ldapstudio.browser.ui.BrowserUIPlugin;
+import org.apache.directory.ldapstudio.browser.ui.editors.ldif.ILdifEditor;
+
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.jface.preference.PreferenceConverter;
+import org.eclipse.jface.text.DocumentEvent;
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.jface.text.IRegion;
+import org.eclipse.jface.text.ITypedRegion;
+import org.eclipse.jface.text.Region;
+import org.eclipse.jface.text.TextAttribute;
+import org.eclipse.jface.text.TextPresentation;
+import org.eclipse.jface.text.TextUtilities;
+import org.eclipse.jface.text.presentation.IPresentationDamager;
+import org.eclipse.jface.text.presentation.IPresentationRepairer;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.StyleRange;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.RGB;
+
+
+public class LdifDamagerRepairer implements IPresentationDamager, IPresentationRepairer
+{
+
+ private ILdifEditor editor;
+
+
+ // private IDocument document;
+
+ public LdifDamagerRepairer( ILdifEditor editor )
+ {
+ super();
+ this.editor = editor;
+ // this.document = null;
+ }
+
+
+ public void setDocument( IDocument document )
+ {
+ // this.document = document;
+ }
+
+
+ public IRegion getDamageRegion( ITypedRegion partition, DocumentEvent event, boolean documentPartitioningChanged )
+ {
+ return partition;
+ }
+
+
+ public void createPresentation( TextPresentation presentation, ITypedRegion damage )
+ {
+
+ LdifFile ldifModel = this.editor.getLdifModel();
+ LdifContainer[] allContainers = ldifModel.getContainers();
+ List containerList = new ArrayList();
+ for ( int i = 0; i < allContainers.length; i++ )
+ {
+ LdifContainer container = allContainers[i];
+ Region containerRegion = new Region( container.getOffset(), container.getLength() );
+ if ( TextUtilities.overlaps( containerRegion, damage ) )
+ {
+ containerList.add( container );
+ }
+ }
+ LdifContainer[] containers = ( LdifContainer[] ) containerList
+ .toArray( new LdifContainer[containerList.size()] );
+ this.highlight( containers, presentation, damage );
+
+ // LdifFile ldifModel = this.editor.getLdifModel();
+ // System.out.println(ldifModel.toRawString());
+ // LdifContainer[] allContainers = ldifModel.getContainers();
+ // this.highlight(allContainers, presentation, null);
+
+ }
+
+ private Map textAttributeKeyToValueMap;
+
+
+ private TextAttribute geTextAttribute( String key )
+ {
+ IPreferenceStore store = BrowserUIPlugin.getDefault().getPreferenceStore();
+
+ RGB rgb = PreferenceConverter
+ .getColor( store, key + BrowserUIConstants.PREFERENCE_LDIFEDITOR_SYNTAX_RGB_SUFFIX );
+ int style = store.getInt( key + BrowserUIConstants.PREFERENCE_LDIFEDITOR_SYNTAX_STYLE_SUFFIX );
+
+ if ( textAttributeKeyToValueMap != null )
+ {
+ if ( textAttributeKeyToValueMap.containsKey( key
+ + BrowserUIConstants.PREFERENCE_LDIFEDITOR_SYNTAX_RGB_SUFFIX ) )
+ {
+ rgb = ( RGB ) textAttributeKeyToValueMap.get( key
+ + BrowserUIConstants.PREFERENCE_LDIFEDITOR_SYNTAX_RGB_SUFFIX );
+ }
+ if ( textAttributeKeyToValueMap.containsKey( key
+ + BrowserUIConstants.PREFERENCE_LDIFEDITOR_SYNTAX_STYLE_SUFFIX ) )
+ {
+ style = ( ( Integer ) textAttributeKeyToValueMap.get( key
+ + BrowserUIConstants.PREFERENCE_LDIFEDITOR_SYNTAX_STYLE_SUFFIX ) ).intValue();
+ }
+ }
+
+ Color color = BrowserUIPlugin.getDefault().getColor( rgb );
+ TextAttribute textAttribute = new TextAttribute( color, null, style );
+ return textAttribute;
+ }
+
+
+ /**
+ * Overwrites the style set in preference store
+ *
+ * @param key
+ * the key
+ * BrowserUIConstants.PREFERENCE_LDIFEDITOR_SYNTAX_xxx +
+ * BrowserUIConstants.PREFERENCE_LDIFEDITOR_SYNTAX_RGB_SUFFIX
+ * ore
+ * BrowserUIConstants.PREFERENCE_LDIFEDITOR_SYNTAX_STYLE_SUFFIX
+ * @param newValue
+ * RGB object or Integer object
+ */
+ public void setTextAttribute( String key, RGB rgb, int style )
+ {
+ if ( textAttributeKeyToValueMap == null )
+ {
+ textAttributeKeyToValueMap = new HashMap();
+ }
+ textAttributeKeyToValueMap.put( key + BrowserUIConstants.PREFERENCE_LDIFEDITOR_SYNTAX_RGB_SUFFIX, rgb );
+ textAttributeKeyToValueMap.put( key + BrowserUIConstants.PREFERENCE_LDIFEDITOR_SYNTAX_STYLE_SUFFIX,
+ new Integer( style ) );
+ }
+
+
+ private void highlight( LdifContainer[] containers, TextPresentation presentation, ITypedRegion damage )
+ {
+
+ // TextAttribute DEFAULT_TEXT_ATTRIBUTE = new
+ // TextAttribute(BrowserUIPlugin.getDefault().getColor(new RGB(0, 0,
+ // 0)));
+
+ TextAttribute COMMENT_TEXT_ATTRIBUTE = geTextAttribute( BrowserUIConstants.PREFERENCE_LDIFEDITOR_SYNTAX_COMMENT );
+ TextAttribute KEYWORD_TEXT_ATTRIBUTE = geTextAttribute( BrowserUIConstants.PREFERENCE_LDIFEDITOR_SYNTAX_KEYWORD );
+ TextAttribute DN_TEXT_ATTRIBUTE = geTextAttribute( BrowserUIConstants.PREFERENCE_LDIFEDITOR_SYNTAX_DN );
+ TextAttribute ATTRIBUTE_TEXT_ATTRIBUTE = geTextAttribute( BrowserUIConstants.PREFERENCE_LDIFEDITOR_SYNTAX_ATTRIBUTE );
+ TextAttribute VALUETYPE_TEXT_ATTRIBUTE = geTextAttribute( BrowserUIConstants.PREFERENCE_LDIFEDITOR_SYNTAX_VALUETYPE );
+ TextAttribute VALUE_TEXT_ATTRIBUTE = geTextAttribute( BrowserUIConstants.PREFERENCE_LDIFEDITOR_SYNTAX_VALUE );
+ TextAttribute ADD_TEXT_ATTRIBUTE = geTextAttribute( BrowserUIConstants.PREFERENCE_LDIFEDITOR_SYNTAX_CHANGETYPEADD );
+ TextAttribute MODIFY_TEXT_ATTRIBUTE = geTextAttribute( BrowserUIConstants.PREFERENCE_LDIFEDITOR_SYNTAX_CHANGETYPEMODIFY );
+ TextAttribute DELETE_TEXT_ATTRIBUTE = geTextAttribute( BrowserUIConstants.PREFERENCE_LDIFEDITOR_SYNTAX_CHANGETYPEDELETE );
+ TextAttribute MODDN_TEXT_ATTRIBUTE = geTextAttribute( BrowserUIConstants.PREFERENCE_LDIFEDITOR_SYNTAX_CHANGETYPEMODDN );
+
+ for ( int z = 0; z < containers.length; z++ )
+ {
+
+ LdifContainer container = containers[z];
+
+ LdifPart[] parts = container.getParts();
+
+ for ( int i = 0; i < parts.length; i++ )
+ {
+
+ // int offset = damage.getOffset() + parts[i].getOffset();
+ int offset = parts[i].getOffset();
+
+ if ( parts[i] instanceof LdifLineBase )
+ {
+ LdifLineBase line = ( LdifLineBase ) parts[i];
+
+ // String debug = line.getClass().getName() +
+ // "("+line.getOffset()+","+line.getLength()+"):
+ // "+line.toString();
+ // debug = debug.replaceAll("\n", "\\\\n");
+ // debug = debug.replaceAll("\r", "\\\\r");
+ // System.out.println(debug);
+
+ if ( line instanceof LdifVersionLine )
+ {
+ this.addStyleRange( presentation, offset, line.getLength(), KEYWORD_TEXT_ATTRIBUTE );
+ }
+ else if ( line instanceof LdifCommentLine )
+ {
+ this.addStyleRange( presentation, offset, line.getLength(), COMMENT_TEXT_ATTRIBUTE );
+ }
+ else if ( line instanceof LdifDnLine )
+ {
+ LdifDnLine dnLine = ( LdifDnLine ) line;
+ int dnSpecLength = dnLine.getRawDnSpec().length();
+ int valueTypeLength = dnLine.getRawValueType().length();
+ int dnLength = dnLine.getRawDn().length();
+ this.addStyleRange( presentation, offset, dnSpecLength, DN_TEXT_ATTRIBUTE );
+ this.addStyleRange( presentation, offset + dnSpecLength, valueTypeLength,
+ VALUETYPE_TEXT_ATTRIBUTE );
+ this.addStyleRange( presentation, offset + dnSpecLength + valueTypeLength, dnLength,
+ DN_TEXT_ATTRIBUTE );
+ }
+ else if ( line instanceof LdifAttrValLine )
+ {
+ LdifAttrValLine attrValLine = ( LdifAttrValLine ) line;
+ int attributeNameLength = attrValLine.getRawAttributeDescription().length();
+ int valueTypeLength = attrValLine.getRawValueType().length();
+ int valueLength = attrValLine.getRawValue().length();
+ this.addStyleRange( presentation, offset, attributeNameLength, ATTRIBUTE_TEXT_ATTRIBUTE );
+ this.addStyleRange( presentation, offset + attributeNameLength, valueTypeLength,
+ VALUETYPE_TEXT_ATTRIBUTE );
+ this.addStyleRange( presentation, offset + attributeNameLength + valueTypeLength, valueLength,
+ VALUE_TEXT_ATTRIBUTE );
+ }
+ else if ( line instanceof LdifChangeTypeLine )
+ {
+ LdifChangeTypeLine changeTypeLine = ( LdifChangeTypeLine ) line;
+ int changeTypeSpecLength = changeTypeLine.getRawChangeTypeSpec().length();
+ int valueTypeLength = changeTypeLine.getRawValueType().length();
+ int changeTypeLength = changeTypeLine.getRawChangeType().length();
+ this.addStyleRange( presentation, offset, changeTypeSpecLength, KEYWORD_TEXT_ATTRIBUTE );
+ this.addStyleRange( presentation, offset + changeTypeSpecLength, valueTypeLength,
+ VALUETYPE_TEXT_ATTRIBUTE );
+
+ if ( container instanceof LdifChangeAddRecord )
+ {
+ this.addStyleRange( presentation, offset + changeTypeSpecLength + valueTypeLength,
+ changeTypeLength, ADD_TEXT_ATTRIBUTE );
+ }
+ else if ( container instanceof LdifChangeModifyRecord )
+ {
+ this.addStyleRange( presentation, offset + changeTypeSpecLength + valueTypeLength,
+ changeTypeLength, MODIFY_TEXT_ATTRIBUTE );
+ }
+ else if ( container instanceof LdifChangeModDnRecord )
+ {
+ this.addStyleRange( presentation, offset + changeTypeSpecLength + valueTypeLength,
+ changeTypeLength, MODDN_TEXT_ATTRIBUTE );
+ }
+ else if ( container instanceof LdifChangeDeleteRecord )
+ {
+ this.addStyleRange( presentation, offset + changeTypeSpecLength + valueTypeLength,
+ changeTypeLength, DELETE_TEXT_ATTRIBUTE );
+ }
+ }
+ else if ( line instanceof LdifNewrdnLine )
+ {
+ LdifNewrdnLine newrdnLine = ( LdifNewrdnLine ) line;
+ int newrdnSpecLength = newrdnLine.getRawNewrdnSpec().length();
+ int valueTypeLength = newrdnLine.getRawValueType().length();
+ int newrdnLength = newrdnLine.getRawNewrdn().length();
+ this.addStyleRange( presentation, offset, newrdnSpecLength, KEYWORD_TEXT_ATTRIBUTE );
+ this.addStyleRange( presentation, offset + newrdnSpecLength, valueTypeLength,
+ VALUETYPE_TEXT_ATTRIBUTE );
+ this.addStyleRange( presentation, offset + newrdnSpecLength + valueTypeLength, newrdnLength,
+ VALUE_TEXT_ATTRIBUTE );
+ }
+ else if ( line instanceof LdifDeloldrdnLine )
+ {
+ LdifDeloldrdnLine deleteoldrdnLine = ( LdifDeloldrdnLine ) line;
+ int deleteoldrdnSpecLength = deleteoldrdnLine.getRawDeleteOldrdnSpec().length();
+ int valueTypeLength = deleteoldrdnLine.getRawValueType().length();
+ int deleteoldrdnLength = deleteoldrdnLine.getRawDeleteOldrdn().length();
+ this.addStyleRange( presentation, offset, deleteoldrdnSpecLength, KEYWORD_TEXT_ATTRIBUTE );
+ this.addStyleRange( presentation, offset + deleteoldrdnSpecLength, valueTypeLength,
+ VALUETYPE_TEXT_ATTRIBUTE );
+ this.addStyleRange( presentation, offset + deleteoldrdnSpecLength + valueTypeLength,
+ deleteoldrdnLength, VALUE_TEXT_ATTRIBUTE );
+ }
+ else if ( line instanceof LdifNewsuperiorLine )
+ {
+ LdifNewsuperiorLine newsuperiorLine = ( LdifNewsuperiorLine ) line;
+ int newsuperiorSpecLength = newsuperiorLine.getRawNewSuperiorSpec().length();
+ int valueTypeLength = newsuperiorLine.getRawValueType().length();
+ int newsuperiorLength = newsuperiorLine.getRawNewSuperiorDn().length();
+ this.addStyleRange( presentation, offset, newsuperiorSpecLength, KEYWORD_TEXT_ATTRIBUTE );
+ this.addStyleRange( presentation, offset + newsuperiorSpecLength, valueTypeLength,
+ VALUETYPE_TEXT_ATTRIBUTE );
+ this.addStyleRange( presentation, offset + newsuperiorSpecLength + valueTypeLength,
+ newsuperiorLength, VALUE_TEXT_ATTRIBUTE );
+ }
+ // else if(line instanceof LdifDeloldrdnLine) {
+ // this.addStyleRange(presentation, offset,
+ // line.getLength(), MODTYPE_TEXT_ATTRIBUTE);
+ // }
+ // else if(line instanceof LdifNewsuperiorLine) {
+ // this.addStyleRange(presentation, offset,
+ // line.getLength(), MODTYPE_TEXT_ATTRIBUTE);
+ // }
+ else if ( line instanceof LdifModSpecTypeLine )
+ {
+ LdifModSpecTypeLine modSpecTypeLine = ( LdifModSpecTypeLine ) line;
+ int modTypeLength = modSpecTypeLine.getRawModType().length();
+ int valueTypeLength = modSpecTypeLine.getRawValueType().length();
+ int attributeDescriptionLength = modSpecTypeLine.getRawAttributeDescription().length();
+ this.addStyleRange( presentation, offset, modTypeLength, KEYWORD_TEXT_ATTRIBUTE );
+ this.addStyleRange( presentation, offset + modTypeLength, valueTypeLength,
+ VALUETYPE_TEXT_ATTRIBUTE );
+ this.addStyleRange( presentation, offset + modTypeLength + valueTypeLength,
+ attributeDescriptionLength, ATTRIBUTE_TEXT_ATTRIBUTE );
+ }
+ else if ( line instanceof LdifModSpecSepLine )
+ {
+ this.addStyleRange( presentation, offset, line.getLength(), VALUETYPE_TEXT_ATTRIBUTE );
+ }
+ else if ( line instanceof LdifControlLine )
+ {
+ LdifControlLine controlLine = ( LdifControlLine ) line;
+ int controlSpecLength = controlLine.getRawControlSpec().length();
+ int controlTypeLength = controlLine.getRawControlType().length();
+ int oidLength = controlLine.getRawOid().length();
+ int critLength = controlLine.getRawCriticality().length();
+ int valueTypeLength = controlLine.getRawControlValueType().length();
+ int valueLength = controlLine.getRawControlValue().length();
+ this.addStyleRange( presentation, offset, controlSpecLength, KEYWORD_TEXT_ATTRIBUTE );
+ this.addStyleRange( presentation, offset + controlSpecLength, controlTypeLength,
+ VALUETYPE_TEXT_ATTRIBUTE );
+ this.addStyleRange( presentation, offset + controlSpecLength + controlTypeLength, oidLength,
+ ATTRIBUTE_TEXT_ATTRIBUTE );
+ this.addStyleRange( presentation, offset + controlSpecLength + controlTypeLength + oidLength,
+ critLength, KEYWORD_TEXT_ATTRIBUTE );
+ this.addStyleRange( presentation, offset + controlSpecLength + controlTypeLength + oidLength
+ + critLength, valueTypeLength, VALUETYPE_TEXT_ATTRIBUTE );
+ this.addStyleRange( presentation, offset + controlSpecLength + controlTypeLength + oidLength
+ + critLength + valueTypeLength, valueLength, VALUE_TEXT_ATTRIBUTE );
+ }
+ else
+ {
+ // this.addStyleRange(presentation, offset,
+ // line.getLength(), DEFAULT_TEXT_ATTRIBUTE);
+ }
+ }
+ else if ( parts[i] instanceof LdifModSpec )
+ {
+ LdifModSpec modSpec = ( LdifModSpec ) parts[i];
+ this.highlight( new LdifContainer[]
+ { modSpec }, presentation, damage );
+
+ }
+ else if ( parts[i] instanceof LdifInvalidPart )
+ {
+ // LdifUnknownPart unknownPart =
+ // (LdifUnknownPart)parts[i];
+ // this.addStyleRange(presentation, offset,
+ // unknownPart.getLength(), UNKNOWN_TEXT_ATTRIBUTE);
+ // this.addStyleRange(presentation, offset,
+ // parts[i].getLength(), DEFAULT_TEXT_ATTRIBUTE);
+ }
+ else if ( parts[i] instanceof LdifEOFPart )
+ {
+ // ignore
+ }
+ else
+ {
+ // TODO
+ System.out.println( "LdifDamagerRepairer: Unspecified Token: " + parts[i].getClass() );
+ }
+
+ }
+ }
+
+ }
+
+
+ private void addStyleRange( TextPresentation presentation, int offset, int length, TextAttribute textAttribute )
+ {
+ if ( offset >= 0 && length > 0 )
+ {
+ StyleRange range = new StyleRange( offset, length, textAttribute.getForeground(), textAttribute
+ .getBackground(), textAttribute.getStyle() & ( SWT.BOLD | SWT.ITALIC ) );
+ range.underline = ( textAttribute.getStyle() & TextAttribute.UNDERLINE ) != 0;
+ range.strikeout = ( textAttribute.getStyle() & TextAttribute.STRIKETHROUGH ) != 0;
+ presentation.addStyleRange( range );
+ }
+ }
+
+}
Added: directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/editors/ldif/text/LdifDoubleClickStrategy.java
URL: http://svn.apache.org/viewvc/directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/editors/ldif/text/LdifDoubleClickStrategy.java?view=auto&rev=488368
==============================================================================
--- directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/editors/ldif/text/LdifDoubleClickStrategy.java (added)
+++ directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/editors/ldif/text/LdifDoubleClickStrategy.java Mon Dec 18 09:52:58 2006
@@ -0,0 +1,157 @@
+/*
+ * 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.browser.ui.editors.ldif.text;
+
+
+import org.apache.directory.ldapstudio.browser.core.model.ldif.LdifEOFPart;
+import org.apache.directory.ldapstudio.browser.core.model.ldif.LdifFile;
+import org.apache.directory.ldapstudio.browser.core.model.ldif.LdifInvalidPart;
+import org.apache.directory.ldapstudio.browser.core.model.ldif.LdifPart;
+import org.apache.directory.ldapstudio.browser.core.model.ldif.container.LdifContainer;
+import org.apache.directory.ldapstudio.browser.core.model.ldif.lines.LdifLineBase;
+import org.apache.directory.ldapstudio.browser.core.model.ldif.lines.LdifSepLine;
+import org.apache.directory.ldapstudio.browser.core.model.ldif.lines.LdifValueLineBase;
+import org.apache.directory.ldapstudio.browser.core.model.ldif.parser.LdifParser;
+import org.apache.directory.ldapstudio.browser.ui.BrowserUIConstants;
+import org.apache.directory.ldapstudio.browser.ui.BrowserUIPlugin;
+
+import org.eclipse.jface.text.BadLocationException;
+import org.eclipse.jface.text.DefaultTextDoubleClickStrategy;
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.jface.text.ITextDoubleClickStrategy;
+import org.eclipse.jface.text.ITextViewer;
+import org.eclipse.jface.text.ITypedRegion;
+
+
+public class LdifDoubleClickStrategy implements ITextDoubleClickStrategy
+{
+
+ private static final int OFFSET = 0;
+
+ private static final int LENGTH = 1;
+
+ /**
+ * Default double click strategy
+ */
+ private DefaultTextDoubleClickStrategy delegateDoubleClickStrategy;
+
+
+ public LdifDoubleClickStrategy()
+ {
+ this.delegateDoubleClickStrategy = new DefaultTextDoubleClickStrategy();
+ }
+
+
+ public void doubleClicked( ITextViewer viewer )
+ {
+
+ if ( !BrowserUIPlugin.getDefault().getPreferenceStore().getBoolean(
+ BrowserUIConstants.PREFERENCE_LDIFEDITOR_DOUBLECLICK_USELDIFDOUBLECLICK ) )
+ {
+ delegateDoubleClickStrategy.doubleClicked( viewer );
+ }
+ else
+ {
+
+ int cursorPos = viewer.getSelectedRange().x;
+ if ( cursorPos < 0 )
+ {
+ return;
+ }
+
+ try
+ {
+ LdifParser parser = new LdifParser();
+ IDocument document = viewer.getDocument();
+ ITypedRegion partition = document.getPartition( cursorPos );
+
+ // now use position relative to partition
+ int offset = partition.getOffset();
+ int relativePos = cursorPos - offset;
+
+ // parse partition
+ String s = document.get( partition.getOffset(), partition.getLength() );
+ LdifFile model = parser.parse( s );
+ LdifContainer container = LdifFile.getContainer( model, relativePos );
+ if ( container != null )
+ {
+ LdifPart part = LdifFile.getContainerContent( container, relativePos );
+
+ if ( part != null && !( part instanceof LdifSepLine ) && !( part instanceof LdifInvalidPart )
+ && !( part instanceof LdifEOFPart ) )
+ {
+
+ // calculate selected range
+ int[] range = null;
+ if ( part instanceof LdifValueLineBase )
+ {
+ LdifValueLineBase line = ( LdifValueLineBase ) part;
+ range = getRange( relativePos, part.getOffset(), new String[]
+ { line.getRawLineStart(), line.getRawValueType(), line.getRawValue() } );
+ }
+ else if ( part instanceof LdifLineBase )
+ {
+ LdifLineBase line = ( LdifLineBase ) part;
+ range = new int[]
+ { part.getOffset(), part.getLength() - line.getRawNewLine().length() };
+ }
+
+ // set range on viewer, add global offset
+ int start = range != null ? range[OFFSET] : part.getOffset();
+ start += offset;
+ int length = range != null ? range[LENGTH] : part.getLength();
+ viewer.setSelectedRange( start, length );
+ }
+ else
+ {
+ // use default double click strategy
+ delegateDoubleClickStrategy.doubleClicked( viewer );
+ }
+ }
+
+ }
+ catch ( BadLocationException e )
+ {
+ e.printStackTrace();
+ }
+ }
+ }
+
+
+ private int[] getRange( int pos, int offset, String[] parts )
+ {
+
+ for ( int i = 0; i < parts.length; i++ )
+ {
+ if ( parts[i] != null )
+ {
+ if ( pos < offset + parts[i].length() )
+ {
+ return new int[]
+ { offset, parts[i].length() };
+ }
+ offset += parts[i].length();
+ }
+ }
+ return null;
+ }
+
+}
Added: directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/editors/ldif/text/LdifExternalAnnotationModel.java
URL: http://svn.apache.org/viewvc/directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/editors/ldif/text/LdifExternalAnnotationModel.java?view=auto&rev=488368
==============================================================================
--- directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/editors/ldif/text/LdifExternalAnnotationModel.java (added)
+++ directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/editors/ldif/text/LdifExternalAnnotationModel.java Mon Dec 18 09:52:58 2006
@@ -0,0 +1,30 @@
+/*
+ * 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.browser.ui.editors.ldif.text;
+
+
+import org.eclipse.jface.text.source.projection.ProjectionAnnotationModel;
+
+
+public class LdifExternalAnnotationModel extends ProjectionAnnotationModel
+{
+
+}
Added: directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/editors/ldif/text/LdifPartitionScanner.java
URL: http://svn.apache.org/viewvc/directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/editors/ldif/text/LdifPartitionScanner.java?view=auto&rev=488368
==============================================================================
--- directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/editors/ldif/text/LdifPartitionScanner.java (added)
+++ directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/editors/ldif/text/LdifPartitionScanner.java Mon Dec 18 09:52:58 2006
@@ -0,0 +1,57 @@
+/*
+ * 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.browser.ui.editors.ldif.text;
+
+
+import org.eclipse.jface.text.rules.IPredicateRule;
+import org.eclipse.jface.text.rules.IToken;
+import org.eclipse.jface.text.rules.RuleBasedPartitionScanner;
+import org.eclipse.jface.text.rules.Token;
+
+
+public class LdifPartitionScanner extends RuleBasedPartitionScanner
+{
+
+ public final static String LDIF_RECORD = "__ldif_record";
+
+
+ public LdifPartitionScanner()
+ {
+ IToken record = new Token( LDIF_RECORD );
+
+ IPredicateRule[] rules = new IPredicateRule[1];
+ rules[0] = new LdifRecordRule( record );
+
+ setPredicateRules( rules );
+ }
+
+
+ public int read()
+ {
+ return super.read();
+ // try {
+ // return super.read();
+ // } finally {
+ // fColumn = UNDEFINED;
+ // }
+ }
+
+}
Added: directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/editors/ldif/text/LdifRecordRule.java
URL: http://svn.apache.org/viewvc/directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/editors/ldif/text/LdifRecordRule.java?view=auto&rev=488368
==============================================================================
--- directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/editors/ldif/text/LdifRecordRule.java (added)
+++ directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/editors/ldif/text/LdifRecordRule.java Mon Dec 18 09:52:58 2006
@@ -0,0 +1,222 @@
+/*
+ * 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.browser.ui.editors.ldif.text;
+
+
+import org.eclipse.jface.text.rules.ICharacterScanner;
+import org.eclipse.jface.text.rules.IPredicateRule;
+import org.eclipse.jface.text.rules.IToken;
+import org.eclipse.jface.text.rules.Token;
+
+
+/**
+ * Rule to detect LDIF records. A LDIF record must start with "dn:" at column 0
+ * and end with new line at column 0.
+ *
+ *
+ */
+public class LdifRecordRule implements IPredicateRule
+{
+
+ private static char[] DN_SEQUENCE = new char[]
+ { 'd', 'n', ':' };
+
+ private IToken recordToken;
+
+
+ public LdifRecordRule( IToken recordToken )
+ {
+ this.recordToken = recordToken;
+ }
+
+
+ public IToken getSuccessToken()
+ {
+ return this.recordToken;
+ }
+
+
+ /**
+ * Checks for new line "\n", "\r" or "\r\n".
+ *
+ * @param scanner
+ * @return
+ */
+ private int matchNewline( ICharacterScanner scanner )
+ {
+
+ int c = scanner.read();
+
+ if ( c == '\r' )
+ {
+ c = scanner.read();
+ if ( c == '\n' )
+ {
+ return 2;
+ }
+ else
+ {
+ scanner.unread();
+ return 1;
+ }
+ }
+ else if ( c == '\n' )
+ {
+ c = scanner.read();
+ if ( c == '\r' )
+ {
+ return 2;
+ }
+ else
+ {
+ scanner.unread();
+ return 1;
+ }
+ }
+ else
+ {
+ scanner.unread();
+ return 0;
+ }
+ }
+
+
+ /**
+ * Checks for "dn:".
+ *
+ * @param scanner
+ * @return
+ */
+ private int matchDnAndColon( ICharacterScanner scanner )
+ {
+
+ for ( int i = 0; i < DN_SEQUENCE.length; i++ )
+ {
+
+ int c = scanner.read();
+
+ if ( c != DN_SEQUENCE[i] )
+ {
+ while ( i >= 0 )
+ {
+ scanner.unread();
+ i--;
+ }
+ return 0;
+ }
+
+ }
+
+ return DN_SEQUENCE.length;
+ }
+
+
+ private boolean matchEOF( ICharacterScanner scanner )
+ {
+ int c = scanner.read();
+ if ( c == ICharacterScanner.EOF )
+ {
+ return true;
+ }
+ else
+ {
+ scanner.unread();
+ return false;
+ }
+ }
+
+
+ public IToken evaluate( ICharacterScanner scanner, boolean resume )
+ {
+
+ if ( scanner.getColumn() != 0 )
+ {
+ return Token.UNDEFINED;
+ }
+
+ int c;
+
+ do
+ {
+ c = scanner.read();
+
+ if ( c == '\r' || c == '\n' )
+ {
+
+ // check end of record
+ scanner.unread();
+
+ if ( this.matchNewline( scanner ) > 0 )
+ {
+
+ int nlCount = this.matchNewline( scanner );
+ if ( nlCount > 0 )
+ {
+ int dnCount = this.matchDnAndColon( scanner );
+ if ( dnCount > 0 )
+ {
+ while ( dnCount > 0 )
+ {
+ scanner.unread();
+ dnCount--;
+ }
+ return this.recordToken;
+ }
+ else if ( this.matchEOF( scanner ) )
+ {
+ return this.recordToken;
+ }
+ else
+ {
+ while ( nlCount > 0 )
+ {
+ scanner.unread();
+ nlCount--;
+ }
+ }
+ }
+ else if ( this.matchEOF( scanner ) )
+ {
+ return this.recordToken;
+ }
+ }
+ else if ( this.matchEOF( scanner ) )
+ {
+ return this.recordToken;
+ }
+
+ }
+ else if ( c == ICharacterScanner.EOF )
+ {
+ return this.recordToken;
+ }
+ }
+ while ( true );
+
+ }
+
+
+ public IToken evaluate( ICharacterScanner scanner )
+ {
+ return this.evaluate( scanner, false );
+ }
+
+}
Added: directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/editors/ldif/text/LdifTextHover.java
URL: http://svn.apache.org/viewvc/directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/editors/ldif/text/LdifTextHover.java?view=auto&rev=488368
==============================================================================
--- directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/editors/ldif/text/LdifTextHover.java (added)
+++ directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/editors/ldif/text/LdifTextHover.java Mon Dec 18 09:52:58 2006
@@ -0,0 +1,87 @@
+/*
+ * 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.browser.ui.editors.ldif.text;
+
+
+import org.apache.directory.ldapstudio.browser.core.model.ldif.LdifFile;
+import org.apache.directory.ldapstudio.browser.core.model.ldif.LdifPart;
+import org.apache.directory.ldapstudio.browser.core.model.ldif.container.LdifContainer;
+import org.apache.directory.ldapstudio.browser.core.model.ldif.lines.LdifValueLineBase;
+import org.apache.directory.ldapstudio.browser.ui.editors.ldif.ILdifEditor;
+
+import org.eclipse.jface.text.IRegion;
+import org.eclipse.jface.text.ITextHover;
+import org.eclipse.jface.text.ITextViewer;
+import org.eclipse.jface.text.Region;
+
+
+public class LdifTextHover implements ITextHover
+{
+
+ private ILdifEditor editor;
+
+
+ public LdifTextHover( ILdifEditor editor )
+ {
+ this.editor = editor;
+ }
+
+
+ public String getHoverInfo( ITextViewer textViewer, IRegion hoverRegion )
+ {
+
+ if ( this.editor != null )
+ {
+
+ LdifContainer container = LdifFile.getContainer( this.editor.getLdifModel(), hoverRegion.getOffset() );
+ if ( container != null )
+ {
+ LdifPart part = LdifFile.getContainerContent( container, hoverRegion.getOffset() );
+ if ( part != null )
+ {
+ if ( part instanceof LdifValueLineBase )
+ {
+ LdifValueLineBase line = ( LdifValueLineBase ) part;
+ if ( line.isValueTypeBase64() )
+ {
+ return line.getValueAsString();
+ }
+ }
+ }
+ }
+ }
+
+ return null;
+ }
+
+
+ public IRegion getHoverRegion( ITextViewer textViewer, int offset )
+ {
+
+ if ( this.editor != null )
+ {
+ return new Region( offset, 0 );
+ }
+
+ return null;
+ }
+
+}
Added: directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/editors/ldif/text/LdifValueRule.java
URL: http://svn.apache.org/viewvc/directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/editors/ldif/text/LdifValueRule.java?view=auto&rev=488368
==============================================================================
--- directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/editors/ldif/text/LdifValueRule.java (added)
+++ directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/editors/ldif/text/LdifValueRule.java Mon Dec 18 09:52:58 2006
@@ -0,0 +1,121 @@
+/*
+ * 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.browser.ui.editors.ldif.text;
+
+
+import org.eclipse.jface.text.rules.ICharacterScanner;
+import org.eclipse.jface.text.rules.IRule;
+import org.eclipse.jface.text.rules.IToken;
+import org.eclipse.jface.text.rules.Token;
+
+
+public class LdifValueRule implements IRule
+{
+
+ private IToken token;
+
+
+ public LdifValueRule( IToken token )
+ {
+ this.token = token;
+ }
+
+
+ public IToken evaluate( ICharacterScanner scanner )
+ {
+
+ if ( matchContent( scanner ) )
+ {
+ return this.token;
+ }
+ else
+ {
+ return Token.UNDEFINED;
+ }
+
+ }
+
+
+ protected boolean matchContent( ICharacterScanner scanner )
+ {
+
+ int count = 0;
+
+ int c = scanner.read();
+ while ( c != ICharacterScanner.EOF )
+ {
+
+ // check for folding
+ if ( c == '\n' || c == '\r' )
+ {
+ StringBuffer temp = new StringBuffer( 3 );
+ if ( c == '\r' )
+ {
+ c = scanner.read();
+ if ( c == '\n' )
+ {
+ temp.append( c );
+ }
+ else
+ {
+ scanner.unread();
+ }
+ }
+ else if ( c == '\n' )
+ {
+ c = scanner.read();
+ if ( c == '\r' )
+ {
+ temp.append( c );
+ }
+ else
+ {
+ scanner.unread();
+ }
+ }
+
+ c = scanner.read();
+ if ( c == ' ' && c != ICharacterScanner.EOF )
+ {
+ // space after newline, continue
+ temp.append( c );
+ count += temp.length();
+ c = scanner.read();
+ }
+ else
+ {
+ for ( int i = 0; i < temp.length(); i++ )
+ scanner.unread();
+ break;
+ }
+ }
+ else
+ {
+ count++;
+ c = scanner.read();
+ }
+ }
+ scanner.unread();
+
+ return count > 0;
+ }
+
+}
Added: directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/editors/schemabrowser/AttributeTypeDescriptionDetailsPage.java
URL: http://svn.apache.org/viewvc/directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/editors/schemabrowser/AttributeTypeDescriptionDetailsPage.java?view=auto&rev=488368
==============================================================================
--- directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/editors/schemabrowser/AttributeTypeDescriptionDetailsPage.java (added)
+++ directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/editors/schemabrowser/AttributeTypeDescriptionDetailsPage.java Mon Dec 18 09:52:58 2006
@@ -0,0 +1,731 @@
+/*
+ * 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.browser.ui.editors.schemabrowser;
+
+
+import org.apache.directory.ldapstudio.browser.core.model.schema.AttributeTypeDescription;
+import org.apache.directory.ldapstudio.browser.core.model.schema.LdapSyntaxDescription;
+import org.apache.directory.ldapstudio.browser.core.model.schema.MatchingRuleDescription;
+import org.apache.directory.ldapstudio.browser.core.model.schema.ObjectClassDescription;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.ui.forms.events.ExpansionAdapter;
+import org.eclipse.ui.forms.events.ExpansionEvent;
+import org.eclipse.ui.forms.events.HyperlinkAdapter;
+import org.eclipse.ui.forms.events.HyperlinkEvent;
+import org.eclipse.ui.forms.widgets.FormToolkit;
+import org.eclipse.ui.forms.widgets.Hyperlink;
+import org.eclipse.ui.forms.widgets.ScrolledForm;
+import org.eclipse.ui.forms.widgets.Section;
+
+
+public class AttributeTypeDescriptionDetailsPage extends SchemaDetailsPage
+{
+
+ private Section mainSection;
+
+ private Text numericOidText;
+
+ private Text nameText;
+
+ private Text descText;
+
+ private Text usageText;
+
+ private Section flagSection;
+
+ private Label singleValuedText;
+
+ private Label isObsoleteText;
+
+ private Label collectiveText;
+
+ private Label noUserModificationText;
+
+ private Section syntaxSection;
+
+ private Text syntaxText;
+
+ private Text lengthText;
+
+ private Hyperlink syntaxLink;
+
+ private Section matchSection;
+
+ private Hyperlink equalityLink;
+
+ private Hyperlink substringLink;
+
+ private Hyperlink orderingLink;
+
+ private Section otherMatchSection;
+
+ private Hyperlink[] otherMatchLinks;
+
+ private Section mustSection;
+
+ private Hyperlink[] usedAsMustLinks;
+
+ private Section maySection;
+
+ private Hyperlink[] usedAsMayLinks;
+
+ private Section superSection;
+
+ private Hyperlink superLink;
+
+ private Section subSection;
+
+ private Hyperlink[] subAttributeTypeLinks;
+
+
+ public AttributeTypeDescriptionDetailsPage( SchemaBrowser schemaBrowser, FormToolkit toolkit )
+ {
+ super( schemaBrowser, toolkit );
+ }
+
+
+ public void createContents( final ScrolledForm detailForm )
+ {
+
+ this.detailForm = detailForm;
+ detailForm.getBody().setLayout( new GridLayout() );
+
+ mainSection = toolkit.createSection( detailForm.getBody(), SWT.NONE );
+ mainSection.setText( "Details" );
+ mainSection.marginWidth = 0;
+ mainSection.marginHeight = 0;
+ mainSection.setLayoutData( new GridData( GridData.FILL_HORIZONTAL ) );
+ toolkit.createCompositeSeparator( mainSection );
+
+ flagSection = toolkit.createSection( detailForm.getBody(), SWT.NONE );
+ flagSection.setText( "Flags" );
+ flagSection.marginWidth = 0;
+ flagSection.marginHeight = 0;
+ flagSection.setLayoutData( new GridData( GridData.FILL_HORIZONTAL ) );
+ toolkit.createCompositeSeparator( flagSection );
+
+ Composite flagClient = toolkit.createComposite( flagSection, SWT.WRAP );
+ GridLayout flagLayout = new GridLayout();
+ flagLayout.numColumns = 4;
+ flagLayout.marginWidth = 0;
+ flagLayout.marginHeight = 0;
+ flagClient.setLayout( flagLayout );
+ flagSection.setClient( flagClient );
+
+ singleValuedText = toolkit.createLabel( flagClient, "Single valued", SWT.CHECK );
+ singleValuedText.setLayoutData( new GridData( GridData.FILL_HORIZONTAL ) );
+ singleValuedText.setEnabled( false );
+
+ noUserModificationText = toolkit.createLabel( flagClient, "Read only", SWT.CHECK );
+ noUserModificationText.setLayoutData( new GridData( GridData.FILL_HORIZONTAL ) );
+ noUserModificationText.setEnabled( false );
+
+ collectiveText = toolkit.createLabel( flagClient, "Collective", SWT.CHECK );
+ collectiveText.setLayoutData( new GridData( GridData.FILL_HORIZONTAL ) );
+ collectiveText.setEnabled( false );
+
+ isObsoleteText = toolkit.createLabel( flagClient, "Obsolete", SWT.CHECK );
+ isObsoleteText.setLayoutData( new GridData( GridData.FILL_HORIZONTAL ) );
+ isObsoleteText.setEnabled( false );
+
+ syntaxSection = toolkit.createSection( detailForm.getBody(), SWT.NONE );
+ syntaxSection.setText( "Syntax" );
+ syntaxSection.marginWidth = 0;
+ syntaxSection.marginHeight = 0;
+ syntaxSection.setLayoutData( new GridData( GridData.FILL_HORIZONTAL ) );
+ toolkit.createCompositeSeparator( syntaxSection );
+
+ Composite syntaxClient = toolkit.createComposite( syntaxSection, SWT.WRAP );
+ GridLayout syntaxLayout = new GridLayout();
+ syntaxLayout.numColumns = 2;
+ syntaxLayout.marginWidth = 0;
+ syntaxLayout.marginHeight = 0;
+ syntaxClient.setLayout( syntaxLayout );
+ syntaxSection.setClient( syntaxClient );
+
+ toolkit.createLabel( syntaxClient, "Syntax OID:", SWT.NONE );
+ syntaxLink = toolkit.createHyperlink( syntaxClient, "", SWT.WRAP );
+ syntaxLink.setLayoutData( new GridData( GridData.FILL_HORIZONTAL ) );
+ syntaxLink.addHyperlinkListener( new HyperlinkAdapter()
+ {
+ public void linkActivated( HyperlinkEvent e )
+ {
+ SchemaBrowser.select( e.getHref() );
+ }
+ } );
+
+ toolkit.createLabel( syntaxClient, "Syntax Description:", SWT.NONE );
+ syntaxText = toolkit.createText( syntaxClient, "", SWT.NONE );
+ syntaxText.setLayoutData( new GridData( GridData.FILL_HORIZONTAL ) );
+ syntaxText.setEditable( false );
+
+ toolkit.createLabel( syntaxClient, "Length:", SWT.NONE );
+ lengthText = toolkit.createText( syntaxClient, "", SWT.NONE );
+ lengthText.setLayoutData( new GridData( GridData.FILL_HORIZONTAL ) );
+ lengthText.setEditable( false );
+
+ matchSection = toolkit.createSection( detailForm.getBody(), SWT.NONE );
+ matchSection.setText( "Matching Rules" );
+ matchSection.marginWidth = 0;
+ matchSection.marginHeight = 0;
+ matchSection.setLayoutData( new GridData( GridData.FILL_HORIZONTAL ) );
+ toolkit.createCompositeSeparator( matchSection );
+
+ Composite matchClient = toolkit.createComposite( matchSection, SWT.WRAP );
+ GridLayout matchLayout = new GridLayout();
+ matchLayout.numColumns = 2;
+ matchLayout.marginWidth = 0;
+ matchLayout.marginHeight = 0;
+ matchClient.setLayout( matchLayout );
+ matchSection.setClient( matchClient );
+
+ toolkit.createLabel( matchClient, "Equality match:", SWT.NONE );
+ equalityLink = toolkit.createHyperlink( matchClient, "", SWT.WRAP );
+ equalityLink.setLayoutData( new GridData( GridData.FILL_HORIZONTAL ) );
+ equalityLink.addHyperlinkListener( new HyperlinkAdapter()
+ {
+ public void linkActivated( HyperlinkEvent e )
+ {
+ SchemaBrowser.select( e.getHref() );
+ }
+ } );
+
+ toolkit.createLabel( matchClient, "Substring match:", SWT.NONE );
+ substringLink = toolkit.createHyperlink( matchClient, "", SWT.WRAP );
+ substringLink.setLayoutData( new GridData( GridData.FILL_HORIZONTAL ) );
+ substringLink.addHyperlinkListener( new HyperlinkAdapter()
+ {
+ public void linkActivated( HyperlinkEvent e )
+ {
+ SchemaBrowser.select( e.getHref() );
+ }
+ } );
+
+ toolkit.createLabel( matchClient, "Ordering match:", SWT.NONE );
+ orderingLink = toolkit.createHyperlink( matchClient, "", SWT.WRAP );
+ orderingLink.setLayoutData( new GridData( GridData.FILL_HORIZONTAL ) );
+ orderingLink.addHyperlinkListener( new HyperlinkAdapter()
+ {
+ public void linkActivated( HyperlinkEvent e )
+ {
+ SchemaBrowser.select( e.getHref() );
+ }
+ } );
+
+ otherMatchSection = toolkit.createSection( detailForm.getBody(), Section.TWISTIE );
+ otherMatchSection.setText( "Other Matching Rules" );
+ otherMatchSection.marginWidth = 0;
+ otherMatchSection.marginHeight = 0;
+ otherMatchSection.setLayoutData( new GridData( GridData.FILL_HORIZONTAL ) );
+ toolkit.createCompositeSeparator( otherMatchSection );
+ otherMatchSection.addExpansionListener( new ExpansionAdapter()
+ {
+ public void expansionStateChanged( ExpansionEvent e )
+ {
+ detailForm.reflow( true );
+ }
+ } );
+
+ mustSection = toolkit.createSection( detailForm.getBody(), Section.TWISTIE );
+ mustSection.setText( "Used as MUST" );
+ mustSection.marginWidth = 0;
+ mustSection.marginHeight = 0;
+ mustSection.setLayoutData( new GridData( GridData.FILL_HORIZONTAL ) );
+ toolkit.createCompositeSeparator( mustSection );
+ mustSection.addExpansionListener( new ExpansionAdapter()
+ {
+ public void expansionStateChanged( ExpansionEvent e )
+ {
+ detailForm.reflow( true );
+ }
+ } );
+
+ maySection = toolkit.createSection( detailForm.getBody(), Section.TWISTIE );
+ maySection.setText( "Used as MAY" );
+ maySection.marginWidth = 0;
+ maySection.marginHeight = 0;
+ maySection.setLayoutData( new GridData( GridData.FILL_HORIZONTAL ) );
+ toolkit.createCompositeSeparator( maySection );
+ maySection.addExpansionListener( new ExpansionAdapter()
+ {
+ public void expansionStateChanged( ExpansionEvent e )
+ {
+ detailForm.reflow( true );
+ }
+ } );
+
+ superSection = toolkit.createSection( detailForm.getBody(), Section.TWISTIE );
+ superSection.setText( "Supertypes" );
+ superSection.marginWidth = 0;
+ superSection.marginHeight = 0;
+ superSection.setLayoutData( new GridData( GridData.FILL_HORIZONTAL ) );
+ toolkit.createCompositeSeparator( superSection );
+ superSection.addExpansionListener( new ExpansionAdapter()
+ {
+ public void expansionStateChanged( ExpansionEvent e )
+ {
+ detailForm.reflow( true );
+ }
+ } );
+
+ subSection = toolkit.createSection( detailForm.getBody(), Section.TWISTIE );
+ subSection.setText( "Subtypes" );
+ subSection.marginWidth = 0;
+ subSection.marginHeight = 0;
+ subSection.setLayoutData( new GridData( GridData.FILL_HORIZONTAL ) );
+ toolkit.createCompositeSeparator( subSection );
+ subSection.addExpansionListener( new ExpansionAdapter()
+ {
+ public void expansionStateChanged( ExpansionEvent e )
+ {
+ detailForm.reflow( true );
+ }
+ } );
+
+ super.createRawSection();
+ }
+
+
+ public void attributeTypeDescriptionSelected( AttributeTypeDescription atd )
+ {
+ this.createMainContent( atd );
+
+ singleValuedText.setEnabled( atd != null && atd.isSingleValued() );
+ isObsoleteText.setEnabled( atd != null && atd.isObsolete() );
+ collectiveText.setEnabled( atd != null && atd.isCollective() );
+ noUserModificationText.setEnabled( atd != null && atd.isNoUserModification() );
+ flagSection.layout();
+
+ String lsdOid = null;
+ LdapSyntaxDescription lsd = null;
+ String lsdLength = null;
+ if ( atd != null )
+ {
+ lsdOid = atd.getSyntaxDescriptionNumericOIDTransitive();
+ if ( lsdOid != null && atd.getSchema().hasLdapSyntaxDescription( lsdOid ) )
+ {
+ lsd = atd.getSchema().getLdapSyntaxDescription( lsdOid );
+ }
+ lsdLength = atd.getSyntaxDescriptionLengthTransitive();
+ }
+ syntaxLink.setText( getNonNullString( lsd != null ? lsd.getNumericOID() : lsdOid ) );
+ syntaxLink.setHref( lsd );
+ syntaxLink.setUnderlined( lsd != null );
+ syntaxLink.setEnabled( lsd != null );
+ syntaxText.setText( getNonNullString( lsd != null ? lsd.getDesc() : null ) );
+ lengthText.setText( getNonNullString( lsdLength ) );
+ syntaxSection.layout();
+
+ String emrOid = null;
+ MatchingRuleDescription emr = null;
+ if ( atd != null )
+ {
+ emrOid = atd.getEqualityMatchingRuleDescriptionOIDTransitive();
+ if ( emrOid != null && atd.getSchema().hasMatchingRuleDescription( emrOid ) )
+ {
+ emr = atd.getSchema().getMatchingRuleDescription( emrOid );
+ }
+ }
+ equalityLink.setText( getNonNullString( emr != null ? emr.toString() : emrOid ) );
+ equalityLink.setHref( emr );
+ equalityLink.setUnderlined( emr != null );
+ equalityLink.setEnabled( emr != null );
+
+ String smrOid = null;
+ MatchingRuleDescription smr = null;
+ if ( atd != null )
+ {
+ smrOid = atd.getSubstringMatchingRuleDescriptionOIDTransitive();
+ if ( smrOid != null && atd.getSchema().hasMatchingRuleDescription( smrOid ) )
+ {
+ smr = atd.getSchema().getMatchingRuleDescription( smrOid );
+ }
+ }
+ substringLink.setText( getNonNullString( smr != null ? smr.toString() : smrOid ) );
+ substringLink.setHref( smr );
+ substringLink.setUnderlined( smr != null );
+ substringLink.setEnabled( smr != null );
+
+ String omrOid = null;
+ MatchingRuleDescription omr = null;
+ if ( atd != null )
+ {
+ omrOid = atd.getOrderingMatchingRuleDescriptionOIDTransitive();
+ if ( omrOid != null && atd.getSchema().hasMatchingRuleDescription( omrOid ) )
+ {
+ omr = atd.getSchema().getMatchingRuleDescription( omrOid );
+ }
+ }
+ orderingLink.setText( getNonNullString( omr != null ? omr.toString() : omrOid ) );
+ orderingLink.setHref( omr );
+ orderingLink.setUnderlined( omr != null );
+ orderingLink.setEnabled( omr != null );
+ matchSection.layout();
+
+ this.createOtherMatchContent( atd );
+ this.createMustContent( atd );
+ this.createMayContent( atd );
+ this.createSuperContent( atd );
+ this.createSubContent( atd );
+
+ super.createRawContents( atd );
+
+ detailForm.reflow( true );
+ }
+
+
+ private void createMainContent( AttributeTypeDescription atd )
+ {
+
+ if ( mainSection.getClient() != null )
+ {
+ mainSection.getClient().dispose();
+ }
+
+ Composite mainClient = toolkit.createComposite( mainSection, SWT.WRAP );
+ GridLayout mainLayout = new GridLayout( 2, false );
+ mainClient.setLayout( mainLayout );
+ mainSection.setClient( mainClient );
+
+ if ( atd != null )
+ {
+
+ toolkit.createLabel( mainClient, "Numeric OID:", SWT.NONE );
+ numericOidText = toolkit.createText( mainClient, getNonNullString( atd.getNumericOID() ), SWT.NONE );
+ numericOidText.setLayoutData( new GridData( GridData.FILL_HORIZONTAL ) );
+ numericOidText.setEditable( false );
+
+ toolkit.createLabel( mainClient, "Attribute names:", SWT.NONE );
+ nameText = toolkit.createText( mainClient, getNonNullString( atd.toString() ), SWT.NONE );
+ nameText.setLayoutData( new GridData( GridData.FILL_HORIZONTAL ) );
+ nameText.setEditable( false );
+
+ toolkit.createLabel( mainClient, "Descripton:", SWT.WRAP );
+ descText = toolkit.createText( mainClient, getNonNullString( atd.getDesc() ), SWT.WRAP | SWT.MULTI );
+ GridData gd = new GridData( GridData.FILL_HORIZONTAL );
+ gd.widthHint = detailForm.getForm().getSize().x - 100 - 60;
+ descText.setLayoutData( gd );
+ descText.setEditable( false );
+
+ toolkit.createLabel( mainClient, "Usage:", SWT.NONE );
+ usageText = toolkit.createText( mainClient, getNonNullString( atd.getUsage() ), SWT.NONE );
+ usageText.setLayoutData( new GridData( GridData.GRAB_HORIZONTAL ) );
+ usageText.setEditable( false );
+
+ }
+
+ mainSection.layout();
+ }
+
+
+ private void createOtherMatchContent( AttributeTypeDescription atd )
+ {
+
+ if ( otherMatchSection.getClient() != null )
+ {
+ otherMatchSection.getClient().dispose();
+ }
+
+ Composite otherMatchClient = toolkit.createComposite( otherMatchSection, SWT.WRAP );
+ otherMatchClient.setLayout( new GridLayout() );
+ otherMatchSection.setClient( otherMatchClient );
+
+ if ( atd != null )
+ {
+ String[] names = atd.getOtherMatchingRuleDescriptionNames();
+ if ( names != null && names.length > 0 )
+ {
+ otherMatchSection.setText( "Other Matching Rules (" + names.length + ")" );
+ otherMatchLinks = new Hyperlink[names.length];
+ for ( int i = 0; i < names.length; i++ )
+ {
+ if ( atd.getSchema().hasMatchingRuleDescription( names[i] ) )
+ {
+ MatchingRuleDescription mrd = atd.getSchema().getMatchingRuleDescription( names[i] );
+ otherMatchLinks[i] = toolkit.createHyperlink( otherMatchClient, mrd.toString(), SWT.WRAP );
+ otherMatchLinks[i].setHref( mrd );
+ otherMatchLinks[i].setLayoutData( new GridData( GridData.FILL_HORIZONTAL ) );
+ otherMatchLinks[i].setUnderlined( true );
+ otherMatchLinks[i].setEnabled( true );
+ otherMatchLinks[i].addHyperlinkListener( new HyperlinkAdapter()
+ {
+ public void linkActivated( HyperlinkEvent e )
+ {
+ SchemaBrowser.select( e.getHref() );
+ }
+ } );
+ }
+ else
+ {
+ otherMatchLinks[i] = toolkit.createHyperlink( otherMatchClient, names[i], SWT.WRAP );
+ otherMatchLinks[i].setHref( null );
+ otherMatchLinks[i].setUnderlined( false );
+ otherMatchLinks[i].setEnabled( false );
+ }
+ }
+ }
+ else
+ {
+ otherMatchSection.setText( "Other Matching Rules (0)" );
+ otherMatchLinks = new Hyperlink[0];
+ Text otherText = toolkit.createText( otherMatchClient, getNonNullString( null ), SWT.NONE );
+ otherText.setLayoutData( new GridData( GridData.FILL_HORIZONTAL ) );
+ otherText.setEditable( false );
+ }
+ }
+ else
+ {
+ otherMatchSection.setText( "Other Matching Rules" );
+ }
+
+ otherMatchSection.layout();
+
+ }
+
+
+ private void createSuperContent( AttributeTypeDescription atd )
+ {
+
+ if ( superSection.getClient() != null )
+ {
+ superSection.getClient().dispose();
+ }
+
+ Composite superClient = toolkit.createComposite( superSection, SWT.WRAP );
+ superClient.setLayout( new GridLayout() );
+ superSection.setClient( superClient );
+
+ if ( atd != null )
+ {
+ String superName = atd.getSuperiorAttributeTypeDescriptionName();
+ if ( superName != null )
+ {
+ superSection.setText( "Supertype (" + "1" + ")" );
+ if ( atd.getSchema().hasAttributeTypeDescription( superName ) )
+ {
+ AttributeTypeDescription supAtd = atd.getSchema().getAttributeTypeDescription( superName );
+ superLink = toolkit.createHyperlink( superClient, supAtd.toString(), SWT.WRAP );
+ superLink.setHref( supAtd );
+ superLink.setLayoutData( new GridData( GridData.FILL_HORIZONTAL ) );
+ superLink.setUnderlined( true );
+ superLink.setEnabled( true );
+ superLink.addHyperlinkListener( new HyperlinkAdapter()
+ {
+ public void linkActivated( HyperlinkEvent e )
+ {
+ SchemaBrowser.select( e.getHref() );
+ }
+ } );
+ }
+ else
+ {
+ superLink = toolkit.createHyperlink( superClient, superName, SWT.WRAP );
+ superLink.setHref( null );
+ superLink.setUnderlined( false );
+ superLink.setEnabled( false );
+ }
+ }
+ else
+ {
+ superSection.setText( "Supertype (0)" );
+ superLink = null;
+ Text supText = toolkit.createText( superClient, getNonNullString( null ), SWT.NONE );
+ supText.setLayoutData( new GridData( GridData.FILL_HORIZONTAL ) );
+ supText.setEditable( false );
+ }
+ }
+ else
+ {
+ superSection.setText( "Supertype" );
+ }
+
+ superSection.layout();
+
+ }
+
+
+ private void createSubContent( AttributeTypeDescription atd )
+ {
+
+ if ( subSection.getClient() != null )
+ {
+ subSection.getClient().dispose();
+ }
+
+ Composite subClient = toolkit.createComposite( subSection, SWT.WRAP );
+ subClient.setLayout( new GridLayout() );
+ subSection.setClient( subClient );
+
+ if ( atd != null )
+ {
+ AttributeTypeDescription[] subATDs = atd.getDerivedAttributeTypeDescriptions();
+ if ( subATDs != null && subATDs.length > 0 )
+ {
+ subSection.setText( "Subtypes (" + subATDs.length + ")" );
+ subAttributeTypeLinks = new Hyperlink[subATDs.length];
+ for ( int i = 0; i < subATDs.length; i++ )
+ {
+ subAttributeTypeLinks[i] = toolkit.createHyperlink( subClient, subATDs[i].toString(), SWT.WRAP );
+ subAttributeTypeLinks[i].setHref( subATDs[i] );
+ subAttributeTypeLinks[i].setLayoutData( new GridData( GridData.FILL_HORIZONTAL ) );
+ subAttributeTypeLinks[i].setUnderlined( true );
+ subAttributeTypeLinks[i].setEnabled( true );
+ subAttributeTypeLinks[i].addHyperlinkListener( new HyperlinkAdapter()
+ {
+ public void linkActivated( HyperlinkEvent e )
+ {
+ SchemaBrowser.select( e.getHref() );
+ }
+ } );
+ }
+ }
+ else
+ {
+ subSection.setText( "Subtypes (0)" );
+ subAttributeTypeLinks = new Hyperlink[0];
+ Text subText = toolkit.createText( subClient, getNonNullString( null ), SWT.NONE );
+ subText.setLayoutData( new GridData( GridData.FILL_HORIZONTAL ) );
+ subText.setEditable( false );
+ }
+ }
+ else
+ {
+ subSection.setText( "Subtypes" );
+ }
+
+ subSection.layout();
+
+ }
+
+
+ private void createMustContent( AttributeTypeDescription atd )
+ {
+
+ if ( mustSection.getClient() != null )
+ {
+ mustSection.getClient().dispose();
+ }
+
+ Composite mustClient = toolkit.createComposite( mustSection, SWT.WRAP );
+ mustClient.setLayout( new GridLayout() );
+ mustSection.setClient( mustClient );
+
+ if ( atd != null )
+ {
+ ObjectClassDescription[] usedAsMusts = atd.getUsedAsMust();
+ if ( usedAsMusts != null && usedAsMusts.length > 0 )
+ {
+ mustSection.setText( "Used as MUST (" + usedAsMusts.length + ")" );
+ usedAsMustLinks = new Hyperlink[usedAsMusts.length];
+ for ( int i = 0; i < usedAsMusts.length; i++ )
+ {
+ usedAsMustLinks[i] = toolkit.createHyperlink( mustClient, usedAsMusts[i].toString(), SWT.WRAP );
+ usedAsMustLinks[i].setHref( usedAsMusts[i] );
+ usedAsMustLinks[i].setLayoutData( new GridData( GridData.FILL_HORIZONTAL ) );
+ usedAsMustLinks[i].setUnderlined( true );
+ usedAsMustLinks[i].setEnabled( true );
+ usedAsMustLinks[i].addHyperlinkListener( new HyperlinkAdapter()
+ {
+ public void linkActivated( HyperlinkEvent e )
+ {
+ SchemaBrowser.select( e.getHref() );
+ }
+ } );
+ }
+ }
+ else
+ {
+ mustSection.setText( "Used as MUST (0)" );
+ usedAsMustLinks = new Hyperlink[0];
+ Text mustText = toolkit.createText( mustClient, getNonNullString( null ), SWT.NONE );
+ mustText.setLayoutData( new GridData( GridData.FILL_HORIZONTAL ) );
+ mustText.setEditable( false );
+ }
+ }
+ else
+ {
+ mustSection.setText( "Used as MUST" );
+ }
+
+ mustSection.layout();
+
+ }
+
+
+ private void createMayContent( AttributeTypeDescription atd )
+ {
+
+ if ( maySection.getClient() != null )
+ {
+ maySection.getClient().dispose();
+ }
+
+ Composite mayClient = toolkit.createComposite( maySection, SWT.WRAP );
+ mayClient.setLayout( new GridLayout() );
+ maySection.setClient( mayClient );
+
+ if ( atd != null )
+ {
+ ObjectClassDescription[] usedAsMays = atd.getUsedAsMay();
+ if ( usedAsMays != null && usedAsMays.length > 0 )
+ {
+ maySection.setText( "Used as MAY (" + usedAsMays.length + ")" );
+ usedAsMayLinks = new Hyperlink[usedAsMays.length];
+ for ( int i = 0; i < usedAsMays.length; i++ )
+ {
+ usedAsMayLinks[i] = toolkit.createHyperlink( mayClient, usedAsMays[i].toString(), SWT.WRAP );
+ usedAsMayLinks[i].setHref( usedAsMays[i] );
+ usedAsMayLinks[i].setLayoutData( new GridData( GridData.FILL_HORIZONTAL ) );
+ usedAsMayLinks[i].setUnderlined( true );
+ usedAsMayLinks[i].setEnabled( true );
+ usedAsMayLinks[i].addHyperlinkListener( new HyperlinkAdapter()
+ {
+ public void linkActivated( HyperlinkEvent e )
+ {
+ SchemaBrowser.select( e.getHref() );
+ }
+ } );
+ }
+ }
+ else
+ {
+ maySection.setText( "Used as MAY (0)" );
+ usedAsMayLinks = new Hyperlink[0];
+ Text mayText = toolkit.createText( mayClient, getNonNullString( null ), SWT.NONE );
+ mayText.setLayoutData( new GridData( GridData.FILL_HORIZONTAL ) );
+ mayText.setEditable( false );
+ }
+ }
+ else
+ {
+ maySection.setText( "Used as MAY" );
+ }
+
+ maySection.layout();
+ }
+
+}
Added: directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/editors/schemabrowser/AttributeTypeDescriptionPage.java
URL: http://svn.apache.org/viewvc/directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/editors/schemabrowser/AttributeTypeDescriptionPage.java?view=auto&rev=488368
==============================================================================
--- directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/editors/schemabrowser/AttributeTypeDescriptionPage.java (added)
+++ directory/sandbox/pamarcelot/ldapstudio/ldapstudio-browser-ui/src/org/apache/directory/ldapstudio/browser/ui/editors/schemabrowser/AttributeTypeDescriptionPage.java Mon Dec 18 09:52:58 2006
@@ -0,0 +1,239 @@
+/*
+ * 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.browser.ui.editors.schemabrowser;
+
+
+import org.apache.directory.ldapstudio.browser.core.events.EventRegistry;
+import org.apache.directory.ldapstudio.browser.core.model.schema.AttributeTypeDescription;
+import org.apache.directory.ldapstudio.browser.core.model.schema.Schema;
+
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.IStructuredContentProvider;
+import org.eclipse.jface.viewers.ITableLabelProvider;
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerFilter;
+import org.eclipse.jface.viewers.ViewerSorter;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.ui.forms.widgets.FormToolkit;
+import org.eclipse.ui.forms.widgets.Section;
+
+
+public class AttributeTypeDescriptionPage extends SchemaPage implements ISelectionChangedListener
+{
+
+ private Section section;
+
+ private Text filterText;
+
+ private TableViewer viewer;
+
+
+ public AttributeTypeDescriptionPage( SchemaBrowser schemaBrowser )
+ {
+ super( schemaBrowser );
+ }
+
+
+ protected void refresh()
+ {
+ if ( this.schemaBrowser.isShowDefaultSchema() )
+ {
+ this.form.setText( "Attribute Types of default schema" );
+ this.viewer.setInput( Schema.DEFAULT_SCHEMA );
+ }
+ else if ( this.selectedConnection != null )
+ {
+ this.form.setText( "Attribute Types of connection '" + this.selectedConnection.getName() + "'" );
+ this.viewer.setInput( this.selectedConnection.getSchema() );
+ }
+ else
+ {
+ this.form.setText( "Attribute Types" );
+ this.viewer.setInput( null );
+ }
+ this.viewer.refresh();
+ }
+
+
+ protected void createMaster( Composite parent )
+ {
+
+ section = toolkit.createSection( parent, Section.DESCRIPTION );
+ section.marginWidth = 10;
+ section.marginHeight = 12;
+ section.setText( "Attribute Types" );
+ section.setDescription( "Please select a attribute type. Enter a filter to restrict the list." );
+ toolkit.createCompositeSeparator( section );
+
+ Composite client = toolkit.createComposite( section, SWT.WRAP );
+ GridLayout layout = new GridLayout( 2, false );
+ layout.marginWidth = 5;
+ layout.marginHeight = 5;
+ client.setLayout( layout );
+ section.setClient( client );
+
+ toolkit.createLabel( client, "Filter:" );
+ this.filterText = toolkit.createText( client, "", SWT.NONE );
+ this.filterText.setLayoutData( new GridData( GridData.FILL_HORIZONTAL ) );
+ this.filterText.setData( FormToolkit.KEY_DRAW_BORDER, FormToolkit.TREE_BORDER );
+ this.filterText.addModifyListener( new ModifyListener()
+ {
+ public void modifyText( ModifyEvent e )
+ {
+ viewer.refresh();
+ }
+ } );
+
+ Table t = toolkit.createTable( client, SWT.NONE );
+ GridData gd = new GridData( GridData.FILL_BOTH );
+ gd.horizontalSpan = 2;
+ gd.heightHint = 20;
+ gd.widthHint = 100;
+ t.setLayoutData( gd );
+ toolkit.paintBordersFor( client );
+
+ viewer = new TableViewer( t );
+ viewer.setContentProvider( new ATDContentProvider() );
+ viewer.setLabelProvider( new ATDLabelProvider() );
+ viewer.setSorter( new ATDViewerSorter() );
+ viewer.addFilter( new ATDViewerFilter() );
+ }
+
+
+ protected void createDetail( Composite body )
+ {
+ this.detailsPage = new AttributeTypeDescriptionDetailsPage( this.schemaBrowser, this.toolkit );
+ this.detailsPage.createContents( this.detailForm );
+ this.viewer.addSelectionChangedListener( this );
+ }
+
+
+ public void selectionChanged( SelectionChangedEvent event )
+ {
+ ISelection selection = event.getSelection();
+ if ( selection.isEmpty() )
+ {
+ EventRegistry.fireAttributeTypeDescriptionSelected( null, this );
+ }
+ else
+ {
+ Object obj = ( ( StructuredSelection ) selection ).getFirstElement();
+ if ( obj instanceof AttributeTypeDescription )
+ {
+ AttributeTypeDescription atd = ( AttributeTypeDescription ) obj;
+ EventRegistry.fireAttributeTypeDescriptionSelected( atd, this );
+ }
+ }
+ }
+
+
+ public void select( Object obj )
+ {
+ this.viewer.setSelection( new StructuredSelection( obj ), true );
+ if ( this.viewer.getSelection().isEmpty() )
+ {
+ this.filterText.setText( "" );
+ this.viewer.setSelection( new StructuredSelection( obj ), true );
+ }
+ }
+
+ class ATDContentProvider implements IStructuredContentProvider
+ {
+ public Object[] getElements( Object inputElement )
+ {
+ if ( inputElement instanceof Schema )
+ {
+ Schema schema = ( Schema ) inputElement;
+ if ( schema != null )
+ {
+ return schema.getAttributeTypeDescriptions();
+ }
+ }
+ return new Object[0];
+ }
+
+
+ public void dispose()
+ {
+ }
+
+
+ public void inputChanged( Viewer viewer, Object oldInput, Object newInput )
+ {
+ }
+ }
+
+ class ATDLabelProvider extends LabelProvider implements ITableLabelProvider
+ {
+ public String getColumnText( Object obj, int index )
+ {
+ return obj.toString();
+ }
+
+
+ public Image getColumnImage( Object obj, int index )
+ {
+ return null;
+ }
+ }
+
+ class ATDViewerSorter extends ViewerSorter
+ {
+ public int compare( Viewer viewer, Object e1, Object e2 )
+ {
+ return e1.toString().compareTo( e2.toString() );
+ }
+ }
+
+ class ATDViewerFilter extends ViewerFilter
+ {
+ public boolean select( Viewer viewer, Object parentElement, Object element )
+ {
+ if ( element instanceof AttributeTypeDescription )
+ {
+ AttributeTypeDescription atd = ( AttributeTypeDescription ) element;
+ boolean matched = false;
+
+ if ( !matched )
+ matched = atd.toString().toLowerCase().indexOf( filterText.getText().toLowerCase() ) != -1;
+ if ( !matched )
+ matched = atd.getNumericOID().toLowerCase().indexOf( filterText.getText().toLowerCase() ) != -1;
+
+ return matched;
+ }
+ return false;
+ }
+ }
+
+}