Return-Path: Delivered-To: apmail-directory-commits-archive@www.apache.org Received: (qmail 61410 invoked from network); 5 Nov 2007 17:03:25 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 5 Nov 2007 17:03:25 -0000 Received: (qmail 33580 invoked by uid 500); 5 Nov 2007 17:03:13 -0000 Delivered-To: apmail-directory-commits-archive@directory.apache.org Received: (qmail 33540 invoked by uid 500); 5 Nov 2007 17:03:12 -0000 Mailing-List: contact commits-help@directory.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@directory.apache.org Delivered-To: mailing list commits@directory.apache.org Received: (qmail 33529 invoked by uid 99); 5 Nov 2007 17:03:12 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 05 Nov 2007 09:03:12 -0800 X-ASF-Spam-Status: No, hits=-100.0 required=10.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.3] (HELO eris.apache.org) (140.211.11.3) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 05 Nov 2007 17:03:45 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id B28EA1A9846; Mon, 5 Nov 2007 09:02:53 -0800 (PST) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r592087 [4/16] - in /directory/sandbox/felixk/studio-ldapbrowser-ui: ./ META-INF/ src/ src/main/ src/main/java/ src/main/java/org/ src/main/java/org/apache/ src/main/java/org/apache/directory/ src/main/java/org/apache/directory/studio/ src/... Date: Mon, 05 Nov 2007 17:01:46 -0000 To: commits@directory.apache.org From: felixk@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20071105170253.B28EA1A9846@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Added: directory/sandbox/felixk/studio-ldapbrowser-ui/src/main/java/org/apache/directory/studio/ldapbrowser/ui/dialogs/properties/AttributePropertyPage.java URL: http://svn.apache.org/viewvc/directory/sandbox/felixk/studio-ldapbrowser-ui/src/main/java/org/apache/directory/studio/ldapbrowser/ui/dialogs/properties/AttributePropertyPage.java?rev=592087&view=auto ============================================================================== --- directory/sandbox/felixk/studio-ldapbrowser-ui/src/main/java/org/apache/directory/studio/ldapbrowser/ui/dialogs/properties/AttributePropertyPage.java (added) +++ directory/sandbox/felixk/studio-ldapbrowser-ui/src/main/java/org/apache/directory/studio/ldapbrowser/ui/dialogs/properties/AttributePropertyPage.java Mon Nov 5 09:01:21 2007 @@ -0,0 +1,254 @@ +/* + * 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.ldapbrowser.ui.dialogs.properties; + + +import java.util.Arrays; + +import org.apache.directory.studio.ldapbrowser.common.widgets.BaseWidgetUtils; +import org.apache.directory.studio.ldapbrowser.core.model.IAttribute; +import org.apache.directory.studio.ldapbrowser.core.model.IValue; +import org.apache.directory.studio.ldapbrowser.core.model.schema.AttributeTypeDescription; +import org.apache.directory.studio.ldapbrowser.core.utils.Utils; + +import org.eclipse.core.runtime.IAdaptable; +import org.eclipse.swt.events.SelectionAdapter; +import org.eclipse.swt.events.SelectionEvent; +import org.eclipse.swt.widgets.Button; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Control; +import org.eclipse.swt.widgets.Group; +import org.eclipse.swt.widgets.Text; +import org.eclipse.ui.IWorkbenchPropertyPage; +import org.eclipse.ui.dialogs.PropertyPage; + + +public class AttributePropertyPage extends PropertyPage implements IWorkbenchPropertyPage +{ + + private Text attributeNameText; + + private Text attributeTypeText; + + private Text attributeValuesText; + + private Text attributeSizeText; + + private Text atdOidText; + + private Text atdNamesText; + + private Text atdDescText; + + private Text atdUsageText; + + private Button singleValuedFlag; + + private Button collectiveFlag; + + private Button obsoleteFlag; + + private Button noUserModificationFlag; + + private Text equalityMatchingRuleText; + + private Text substringMatchingRuleText; + + private Text orderingMatchingRuleText; + + private Text syntaxOidText; + + private Text syntaxDescText; + + private Text syntaxLengthText; + + + public AttributePropertyPage() + { + super(); + super.noDefaultAndApplyButton(); + } + + + protected Control createContents( Composite parent ) + { + + Composite composite = BaseWidgetUtils.createColumnContainer( parent, 1, 1 ); + + Composite mainGroup = BaseWidgetUtils.createColumnContainer( composite, 2, 1 ); + + BaseWidgetUtils.createLabel( mainGroup, "Description:", 1 ); + attributeNameText = BaseWidgetUtils.createLabeledText( mainGroup, "", 1 ); + + BaseWidgetUtils.createLabel( mainGroup, "Type:", 1 ); + attributeTypeText = BaseWidgetUtils.createLabeledText( mainGroup, "", 1 ); + + BaseWidgetUtils.createLabel( mainGroup, "Number of Values:", 1 ); + attributeValuesText = BaseWidgetUtils.createLabeledText( mainGroup, "", 1 ); + + BaseWidgetUtils.createLabel( mainGroup, "Attribute Size:", 1 ); + attributeSizeText = BaseWidgetUtils.createLabeledText( mainGroup, "", 1 ); + + Group atdGroup = BaseWidgetUtils.createGroup( composite, "Attribute Type", 1 ); + Composite atdComposite = BaseWidgetUtils.createColumnContainer( atdGroup, 2, 1 ); + + BaseWidgetUtils.createLabel( atdComposite, "Numeric OID:", 1 ); + atdOidText = BaseWidgetUtils.createLabeledText( atdComposite, "", 1 ); + + BaseWidgetUtils.createLabel( atdComposite, "Alternative Names:", 1 ); + atdNamesText = BaseWidgetUtils.createLabeledText( atdComposite, "", 1 ); + + BaseWidgetUtils.createLabel( atdComposite, "Description:", 1 ); + atdDescText = BaseWidgetUtils.createWrappedLabeledText( atdComposite, "", 1 ); + + BaseWidgetUtils.createLabel( atdComposite, "Usage:", 1 ); + atdUsageText = BaseWidgetUtils.createLabeledText( atdComposite, "", 1 ); + + Group flagsGroup = BaseWidgetUtils.createGroup( composite, "Flags", 1 ); + Composite flagsComposite = BaseWidgetUtils.createColumnContainer( flagsGroup, 4, 1 ); + + singleValuedFlag = BaseWidgetUtils.createCheckbox( flagsComposite, "Single valued", 1 ); + singleValuedFlag.addSelectionListener( new SelectionAdapter() + { + public void widgetSelected( SelectionEvent e ) + { + singleValuedFlag.setSelection( !singleValuedFlag.getSelection() ); + } + } ); + + noUserModificationFlag = BaseWidgetUtils.createCheckbox( flagsComposite, "Read only", 1 ); + noUserModificationFlag.addSelectionListener( new SelectionAdapter() + { + public void widgetSelected( SelectionEvent e ) + { + noUserModificationFlag.setSelection( !noUserModificationFlag.getSelection() ); + } + } ); + + collectiveFlag = BaseWidgetUtils.createCheckbox( flagsComposite, "Collective", 1 ); + collectiveFlag.addSelectionListener( new SelectionAdapter() + { + public void widgetSelected( SelectionEvent e ) + { + collectiveFlag.setSelection( !collectiveFlag.getSelection() ); + } + } ); + + obsoleteFlag = BaseWidgetUtils.createCheckbox( flagsComposite, "Obsolete", 1 ); + obsoleteFlag.addSelectionListener( new SelectionAdapter() + { + public void widgetSelected( SelectionEvent e ) + { + obsoleteFlag.setSelection( !obsoleteFlag.getSelection() ); + } + } ); + + Group syntaxGroup = BaseWidgetUtils.createGroup( composite, "Syntax", 1 ); + Composite syntaxComposite = BaseWidgetUtils.createColumnContainer( syntaxGroup, 2, 1 ); + + BaseWidgetUtils.createLabel( syntaxComposite, "Syntax OID:", 1 ); + syntaxOidText = BaseWidgetUtils.createLabeledText( syntaxComposite, "", 1 ); + + BaseWidgetUtils.createLabel( syntaxComposite, "Syntax Description:", 1 ); + syntaxDescText = BaseWidgetUtils.createLabeledText( syntaxComposite, "", 1 ); + + BaseWidgetUtils.createLabel( syntaxComposite, "Syntax Length:", 1 ); + syntaxLengthText = BaseWidgetUtils.createLabeledText( syntaxComposite, "", 1 ); + + Group matchingGroup = BaseWidgetUtils.createGroup( composite, "Matching Rules", 1 ); + Composite matchingComposite = BaseWidgetUtils.createColumnContainer( matchingGroup, 2, 1 ); + + BaseWidgetUtils.createLabel( matchingComposite, "Equality Match:", 1 ); + equalityMatchingRuleText = BaseWidgetUtils.createLabeledText( matchingComposite, "", 1 ); + + BaseWidgetUtils.createLabel( matchingComposite, "Substring Match:", 1 ); + substringMatchingRuleText = BaseWidgetUtils.createLabeledText( matchingComposite, "", 1 ); + + BaseWidgetUtils.createLabel( matchingComposite, "Ordering Match:", 1 ); + orderingMatchingRuleText = BaseWidgetUtils.createLabeledText( matchingComposite, "", 1 ); + + IAttribute attribute = getAttribute( getElement() ); + if ( attribute != null ) + { + + int bytes = 0; + int valCount = 0; + IValue[] allValues = attribute.getValues(); + for ( int valIndex = 0; valIndex < allValues.length; valIndex++ ) + { + if ( !allValues[valIndex].isEmpty() ) + { + valCount++; + bytes += allValues[valIndex].getBinaryValue().length; + } + } + + this.setMessage( "Attribute " + attribute.getDescription() ); + attributeNameText.setText( attribute.getDescription() ); + attributeTypeText.setText( attribute.isString() ? "String" : "Binary" ); + attributeValuesText.setText( "" + valCount ); + attributeSizeText.setText( Utils.formatBytes( bytes ) ); + + if ( attribute.getEntry().getBrowserConnection().getSchema().hasAttributeTypeDescription( + attribute.getDescription() ) ) + { + AttributeTypeDescription atd = attribute.getEntry().getBrowserConnection().getSchema() + .getAttributeTypeDescription( attribute.getDescription() ); + + atdOidText.setText( atd.getNumericOID() ); + String atdNames = Arrays.asList( atd.getNames() ).toString(); + atdNamesText.setText( atdNames.substring( 1, atdNames.length() - 1 ) ); + atdDescText.setText( Utils.getNonNullString( atd.getDesc() ) ); + atdUsageText.setText( Utils.getNonNullString( atd.getUsage() ) ); + + singleValuedFlag.setSelection( atd.isSingleValued() ); + noUserModificationFlag.setSelection( atd.isNoUserModification() ); + collectiveFlag.setSelection( atd.isCollective() ); + obsoleteFlag.setSelection( atd.isObsolete() ); + + syntaxOidText.setText( Utils.getNonNullString( atd.getSyntaxDescriptionNumericOIDTransitive() ) ); + syntaxDescText.setText( Utils.getNonNullString( atd.getSyntaxDescription().getDesc() ) ); + syntaxLengthText.setText( Utils.getNonNullString( atd.getSyntaxDescriptionLengthTransitive() ) ); + + equalityMatchingRuleText.setText( Utils.getNonNullString( atd + .getEqualityMatchingRuleDescriptionOIDTransitive() ) ); + substringMatchingRuleText.setText( Utils.getNonNullString( atd + .getSubstringMatchingRuleDescriptionOIDTransitive() ) ); + orderingMatchingRuleText.setText( Utils.getNonNullString( atd + .getOrderingMatchingRuleDescriptionOIDTransitive() ) ); + } + } + + return parent; + } + + + private static IAttribute getAttribute( Object element ) + { + IAttribute attribute = null; + if ( element instanceof IAdaptable ) + { + attribute = ( IAttribute ) ( ( IAdaptable ) element ).getAdapter( IAttribute.class ); + } + return attribute; + } + +} Propchange: directory/sandbox/felixk/studio-ldapbrowser-ui/src/main/java/org/apache/directory/studio/ldapbrowser/ui/dialogs/properties/AttributePropertyPage.java ------------------------------------------------------------------------------ svn:eol-style = native Added: directory/sandbox/felixk/studio-ldapbrowser-ui/src/main/java/org/apache/directory/studio/ldapbrowser/ui/dialogs/properties/BookmarkPropertyPage.java URL: http://svn.apache.org/viewvc/directory/sandbox/felixk/studio-ldapbrowser-ui/src/main/java/org/apache/directory/studio/ldapbrowser/ui/dialogs/properties/BookmarkPropertyPage.java?rev=592087&view=auto ============================================================================== --- directory/sandbox/felixk/studio-ldapbrowser-ui/src/main/java/org/apache/directory/studio/ldapbrowser/ui/dialogs/properties/BookmarkPropertyPage.java (added) +++ directory/sandbox/felixk/studio-ldapbrowser-ui/src/main/java/org/apache/directory/studio/ldapbrowser/ui/dialogs/properties/BookmarkPropertyPage.java Mon Nov 5 09:01:21 2007 @@ -0,0 +1,158 @@ +/* + * 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.ldapbrowser.ui.dialogs.properties; + + +import org.apache.directory.studio.ldapbrowser.common.widgets.BaseWidgetUtils; +import org.apache.directory.studio.ldapbrowser.common.widgets.WidgetModifyEvent; +import org.apache.directory.studio.ldapbrowser.common.widgets.WidgetModifyListener; +import org.apache.directory.studio.ldapbrowser.common.widgets.search.EntryWidget; +import org.apache.directory.studio.ldapbrowser.core.model.IBookmark; +import org.apache.directory.studio.ldapbrowser.core.utils.Utils; + +import org.eclipse.core.runtime.IAdaptable; +import org.eclipse.swt.events.ModifyEvent; +import org.eclipse.swt.events.ModifyListener; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Control; +import org.eclipse.swt.widgets.Text; +import org.eclipse.ui.IWorkbenchPropertyPage; +import org.eclipse.ui.dialogs.PropertyPage; + + +public class BookmarkPropertyPage extends PropertyPage implements IWorkbenchPropertyPage +{ + + private IBookmark bookmark; + + private Text bookmarkNameText; + + private EntryWidget bookmarkEntryWidget; + + + public BookmarkPropertyPage() + { + super(); + super.noDefaultAndApplyButton(); + } + + + public void dispose() + { + super.dispose(); + } + + + protected Control createContents( Composite parent ) + { + + if ( getElement() instanceof IAdaptable ) + { + this.bookmark = ( IBookmark ) ( ( IAdaptable ) getElement() ).getAdapter( IBookmark.class ); + super.setMessage( "Bookmark " + Utils.shorten( bookmark.getName(), 30 ) ); + } + else + { + this.bookmark = null; + } + + Composite innerComposite = BaseWidgetUtils.createColumnContainer( parent, 3, 1 ); + + BaseWidgetUtils.createLabel( innerComposite, "Bookmark Name:", 1 ); + this.bookmarkNameText = BaseWidgetUtils.createText( innerComposite, this.bookmark != null ? this.bookmark + .getName() : "", 2 ); + this.bookmarkNameText.setFocus(); + this.bookmarkNameText.addModifyListener( new ModifyListener() + { + public void modifyText( ModifyEvent e ) + { + validate(); + } + } ); + + BaseWidgetUtils.createLabel( innerComposite, "Bookmark DN:", 1 ); + this.bookmarkEntryWidget = new EntryWidget(); + this.bookmarkEntryWidget.createWidget( innerComposite ); + if ( this.bookmark != null ) + { + this.bookmarkEntryWidget.setInput( this.bookmark.getBrowserConnection(), this.bookmark.getDn() ); + } + this.bookmarkEntryWidget.addWidgetModifyListener( new WidgetModifyListener() + { + public void widgetModified( WidgetModifyEvent event ) + { + validate(); + } + } ); + + return innerComposite; + } + + + public boolean performOk() + { + if ( this.bookmark != null ) + { + this.bookmark.setName( this.bookmarkNameText.getText() ); + this.bookmark.setDn( this.bookmarkEntryWidget.getDn() ); + this.bookmarkEntryWidget.saveDialogSettings(); + } + + return true; + } + + + private void validate() + { + + setValid( this.bookmarkEntryWidget.getDn() != null && !"".equals( this.bookmarkNameText.getText() ) ); + + if ( this.bookmark != null ) + { + if ( this.bookmarkEntryWidget.getDn() == null ) + { + setValid( false ); + setErrorMessage( "Please enter a DN." ); + } + else if ( "".equals( this.bookmarkNameText.getText() ) ) + { + setValid( false ); + setErrorMessage( "Please enter a name." ); + } + else if ( !bookmark.getName().equals( this.bookmarkNameText.getText() ) + && bookmark.getBrowserConnection().getBookmarkManager().getBookmark( this.bookmarkNameText.getText() ) != null ) + { + setValid( false ); + setErrorMessage( "A bookmark with this name already exists." ); + } + else + { + setValid( true ); + setErrorMessage( null ); + } + } + else + { + setValid( false ); + } + } + +} Propchange: directory/sandbox/felixk/studio-ldapbrowser-ui/src/main/java/org/apache/directory/studio/ldapbrowser/ui/dialogs/properties/BookmarkPropertyPage.java ------------------------------------------------------------------------------ svn:eol-style = native Added: directory/sandbox/felixk/studio-ldapbrowser-ui/src/main/java/org/apache/directory/studio/ldapbrowser/ui/dialogs/properties/EntryPropertyPage.java URL: http://svn.apache.org/viewvc/directory/sandbox/felixk/studio-ldapbrowser-ui/src/main/java/org/apache/directory/studio/ldapbrowser/ui/dialogs/properties/EntryPropertyPage.java?rev=592087&view=auto ============================================================================== --- directory/sandbox/felixk/studio-ldapbrowser-ui/src/main/java/org/apache/directory/studio/ldapbrowser/ui/dialogs/properties/EntryPropertyPage.java (added) +++ directory/sandbox/felixk/studio-ldapbrowser-ui/src/main/java/org/apache/directory/studio/ldapbrowser/ui/dialogs/properties/EntryPropertyPage.java Mon Nov 5 09:01:21 2007 @@ -0,0 +1,305 @@ +/* + * 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.ldapbrowser.ui.dialogs.properties; + + +import org.apache.directory.studio.ldapbrowser.common.jobs.RunnableContextJobAdapter; +import org.apache.directory.studio.ldapbrowser.common.widgets.BaseWidgetUtils; +import org.apache.directory.studio.ldapbrowser.core.events.EntryModificationEvent; +import org.apache.directory.studio.ldapbrowser.core.jobs.InitializeAttributesJob; +import org.apache.directory.studio.ldapbrowser.core.jobs.InitializeChildrenJob; +import org.apache.directory.studio.ldapbrowser.core.model.IAttribute; +import org.apache.directory.studio.ldapbrowser.core.model.IEntry; +import org.apache.directory.studio.ldapbrowser.core.model.IValue; +import org.apache.directory.studio.ldapbrowser.core.utils.Utils; +import org.eclipse.core.runtime.IAdaptable; +import org.eclipse.swt.SWT; +import org.eclipse.swt.events.SelectionEvent; +import org.eclipse.swt.events.SelectionListener; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.widgets.Button; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Control; +import org.eclipse.swt.widgets.Group; +import org.eclipse.swt.widgets.Text; +import org.eclipse.ui.IWorkbenchPropertyPage; +import org.eclipse.ui.dialogs.PropertyPage; + + +public class EntryPropertyPage extends PropertyPage implements IWorkbenchPropertyPage +{ + + private Text dnText; + + private Text urlText; + + private Text ctText; + + private Text cnText; + + private Text mtText; + + private Text mnText; + + private Button reloadCmiButton; + + private Text sizeText; + + private Text childrenText; + + private Text attributesText; + + private Text valuesText; + + private Button includeOperationalAttributesButton; + + private Button reloadEntryButton; + + + public EntryPropertyPage() + { + super(); + super.noDefaultAndApplyButton(); + } + + + protected Control createContents( Composite parent ) + { + + Composite composite = BaseWidgetUtils.createColumnContainer( parent, 1, 1 ); + + Composite mainGroup = BaseWidgetUtils.createColumnContainer( BaseWidgetUtils.createColumnContainer( composite, + 1, 1 ), 2, 1 ); + BaseWidgetUtils.createLabel( mainGroup, "DN:", 1 ); + dnText = BaseWidgetUtils.createWrappedLabeledText( mainGroup, "", 1 ); + BaseWidgetUtils.createLabel( mainGroup, "URL:", 1 ); + urlText = BaseWidgetUtils.createWrappedLabeledText( mainGroup, "", 1 ); + + Group cmiGroup = BaseWidgetUtils.createGroup( BaseWidgetUtils.createColumnContainer( composite, 1, 1 ), + "Create and Modify Information", 1 ); + Composite cmiComposite = BaseWidgetUtils.createColumnContainer( cmiGroup, 3, 1 ); + + BaseWidgetUtils.createLabel( cmiComposite, "Create Timestamp:", 1 ); + ctText = BaseWidgetUtils.createLabeledText( cmiComposite, "", 2 ); + + BaseWidgetUtils.createLabel( cmiComposite, "Creators Name:", 1 ); + cnText = BaseWidgetUtils.createLabeledText( cmiComposite, "", 2 ); + + BaseWidgetUtils.createLabel( cmiComposite, "Modify Timestamp:", 1 ); + mtText = BaseWidgetUtils.createLabeledText( cmiComposite, "", 2 ); + + BaseWidgetUtils.createLabel( cmiComposite, "Modifiers Name:", 1 ); + mnText = BaseWidgetUtils.createLabeledText( cmiComposite, "", 1 ); + + reloadCmiButton = BaseWidgetUtils.createButton( cmiComposite, "", 1 ); + GridData gd = new GridData(); + gd.verticalAlignment = SWT.BOTTOM; + gd.horizontalAlignment = SWT.RIGHT; + reloadCmiButton.setLayoutData( gd ); + reloadCmiButton.addSelectionListener( new SelectionListener() + { + public void widgetSelected( SelectionEvent e ) + { + reloadOperationalAttributes(); + } + + + public void widgetDefaultSelected( SelectionEvent e ) + { + } + } ); + + Group sizingGroup = BaseWidgetUtils.createGroup( BaseWidgetUtils.createColumnContainer( composite, 1, 1 ), + "Sizing Information", 1 ); + Composite sizingComposite = BaseWidgetUtils.createColumnContainer( sizingGroup, 3, 1 ); + + BaseWidgetUtils.createLabel( sizingComposite, "Entry Size:", 1 ); + sizeText = BaseWidgetUtils.createLabeledText( sizingComposite, "", 2 ); + + BaseWidgetUtils.createLabel( sizingComposite, "Number of Children:", 1 ); + childrenText = BaseWidgetUtils.createLabeledText( sizingComposite, "", 2 ); + + BaseWidgetUtils.createLabel( sizingComposite, "Number of Attributes:", 1 ); + attributesText = BaseWidgetUtils.createLabeledText( sizingComposite, "", 2 ); + + BaseWidgetUtils.createLabel( sizingComposite, "Number of Values:", 1 ); + valuesText = BaseWidgetUtils.createLabeledText( sizingComposite, "", 2 ); + + includeOperationalAttributesButton = BaseWidgetUtils.createCheckbox( sizingComposite, + "Include operational attributes", 2 ); + includeOperationalAttributesButton.addSelectionListener( new SelectionListener() + { + public void widgetSelected( SelectionEvent e ) + { + entryUpdated( getEntry( getElement() ) ); + } + + + public void widgetDefaultSelected( SelectionEvent e ) + { + } + } ); + + reloadEntryButton = BaseWidgetUtils.createButton( sizingComposite, "", 1 ); + gd = new GridData(); + gd.verticalAlignment = SWT.BOTTOM; + gd.horizontalAlignment = SWT.RIGHT; + reloadEntryButton.setLayoutData( gd ); + reloadEntryButton.addSelectionListener( new SelectionListener() + { + public void widgetSelected( SelectionEvent e ) + { + reloadEntry(); + } + + + public void widgetDefaultSelected( SelectionEvent e ) + { + } + } ); + + this.entryUpdated( getEntry( getElement() ) ); + + return composite; + } + + + private void reloadOperationalAttributes() + { + IEntry entry = EntryPropertyPage.getEntry( getElement() ); + InitializeAttributesJob job = new InitializeAttributesJob( new IEntry[] + { entry }, true ); + RunnableContextJobAdapter.execute( job ); + + this.entryUpdated( entry ); + } + + + private void reloadEntry() + { + IEntry entry = EntryPropertyPage.getEntry( getElement() ); + InitializeChildrenJob job1 = new InitializeChildrenJob( new IEntry[] + { entry } ); + InitializeAttributesJob job2 = new InitializeAttributesJob( new IEntry[] + { entry }, true ); + RunnableContextJobAdapter.execute( job1 ); + RunnableContextJobAdapter.execute( job2 ); + this.entryUpdated( entry ); + } + + + static IEntry getEntry( Object element ) + { + IEntry entry = null; + if ( element instanceof IAdaptable ) + { + entry = ( IEntry ) ( ( IAdaptable ) element ).getAdapter( IEntry.class ); + } + return entry; + } + + + public boolean isDisposed() + { + return this.dnText.isDisposed(); + } + + + public void entryUpdated( EntryModificationEvent event ) + { + this.entryUpdated( event.getModifiedEntry() ); + } + + + private String getNonNullStringValue( IAttribute att ) + { + String value = null; + if ( att != null ) + { + value = att.getStringValue(); + } + return value != null ? value : "-"; + } + + + private void entryUpdated( IEntry entry ) + { + + if ( !this.dnText.isDisposed() ) + { + + this.setMessage( "Entry " + entry.getDn().getUpName() ); + + this.dnText.setText( entry.getDn().getUpName() ); + this.urlText.setText( entry.getUrl().toString() ); + this.ctText.setText( getNonNullStringValue( entry + .getAttribute( IAttribute.OPERATIONAL_ATTRIBUTE_CREATE_TIMESTAMP ) ) ); + this.cnText.setText( getNonNullStringValue( entry + .getAttribute( IAttribute.OPERATIONAL_ATTRIBUTE_CREATORS_NAME ) ) ); + this.mtText.setText( getNonNullStringValue( entry + .getAttribute( IAttribute.OPERATIONAL_ATTRIBUTE_MODIFY_TIMESTAMP ) ) ); + this.mnText.setText( getNonNullStringValue( entry + .getAttribute( IAttribute.OPERATIONAL_ATTRIBUTE_MODIFIERS_NAME ) ) ); + this.reloadCmiButton.setText( "Refresh" ); + + int attCount = 0; + int valCount = 0; + int bytes = 0; + + IAttribute[] allAttributes = entry.getAttributes(); + if ( allAttributes != null ) + { + for ( int attIndex = 0; attIndex < allAttributes.length; attIndex++ ) + { + if ( !allAttributes[attIndex].isOperationalAttribute() + || this.includeOperationalAttributesButton.getSelection() ) + { + attCount++; + IValue[] allValues = allAttributes[attIndex].getValues(); + for ( int valIndex = 0; valIndex < allValues.length; valIndex++ ) + { + if ( !allValues[valIndex].isEmpty() ) + { + valCount++; + bytes += allValues[valIndex].getBinaryValue().length; + } + } + } + } + } + + this.reloadEntryButton.setText( "Refresh" ); + if ( !entry.isChildrenInitialized() ) + { + this.childrenText.setText( "Not checked" ); + } + else + { + this.childrenText.setText( "" + entry.getChildrenCount() + + ( entry.hasMoreChildren() ? " fetched, may have more" : "" ) ); + } + this.attributesText.setText( "" + attCount ); + this.valuesText.setText( "" + valCount ); + this.sizeText.setText( Utils.formatBytes( bytes ) ); + } + } + +} Propchange: directory/sandbox/felixk/studio-ldapbrowser-ui/src/main/java/org/apache/directory/studio/ldapbrowser/ui/dialogs/properties/EntryPropertyPage.java ------------------------------------------------------------------------------ svn:eol-style = native Added: directory/sandbox/felixk/studio-ldapbrowser-ui/src/main/java/org/apache/directory/studio/ldapbrowser/ui/dialogs/properties/RootDSEPropertyPage.java URL: http://svn.apache.org/viewvc/directory/sandbox/felixk/studio-ldapbrowser-ui/src/main/java/org/apache/directory/studio/ldapbrowser/ui/dialogs/properties/RootDSEPropertyPage.java?rev=592087&view=auto ============================================================================== --- directory/sandbox/felixk/studio-ldapbrowser-ui/src/main/java/org/apache/directory/studio/ldapbrowser/ui/dialogs/properties/RootDSEPropertyPage.java (added) +++ directory/sandbox/felixk/studio-ldapbrowser-ui/src/main/java/org/apache/directory/studio/ldapbrowser/ui/dialogs/properties/RootDSEPropertyPage.java Mon Nov 5 09:01:21 2007 @@ -0,0 +1,573 @@ +/* + * 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.ldapbrowser.ui.dialogs.properties; + + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.MissingResourceException; +import java.util.ResourceBundle; + +import org.apache.directory.studio.connection.core.Connection; +import org.apache.directory.studio.ldapbrowser.common.widgets.BaseWidgetUtils; +import org.apache.directory.studio.ldapbrowser.common.widgets.entryeditor.EntryEditorWidgetTableMetadata; +import org.apache.directory.studio.ldapbrowser.core.BrowserConnectionManager; +import org.apache.directory.studio.ldapbrowser.core.BrowserCorePlugin; +import org.apache.directory.studio.ldapbrowser.core.model.IAttribute; +import org.apache.directory.studio.ldapbrowser.core.model.IBrowserConnection; +import org.apache.directory.studio.ldapbrowser.core.model.IEntry; +import org.apache.directory.studio.ldapbrowser.core.model.IRootDSE; +import org.apache.directory.studio.ldapbrowser.core.model.IValue; +import org.apache.directory.studio.ldapbrowser.core.model.impl.RootDSE; +import org.eclipse.core.runtime.IAdaptable; +import org.eclipse.jface.viewers.ArrayContentProvider; +import org.eclipse.jface.viewers.IStructuredContentProvider; +import org.eclipse.jface.viewers.ITableLabelProvider; +import org.eclipse.jface.viewers.LabelProvider; +import org.eclipse.jface.viewers.ListViewer; +import org.eclipse.jface.viewers.TableViewer; +import org.eclipse.jface.viewers.Viewer; +import org.eclipse.jface.viewers.ViewerSorter; +import org.eclipse.swt.SWT; +import org.eclipse.swt.graphics.Image; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.layout.GridLayout; +import org.eclipse.swt.layout.RowData; +import org.eclipse.swt.layout.RowLayout; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Control; +import org.eclipse.swt.widgets.Label; +import org.eclipse.swt.widgets.TabFolder; +import org.eclipse.swt.widgets.TabItem; +import org.eclipse.swt.widgets.Table; +import org.eclipse.swt.widgets.TableColumn; +import org.eclipse.swt.widgets.Text; +import org.eclipse.ui.IWorkbenchPropertyPage; +import org.eclipse.ui.dialogs.PropertyPage; + + +public class RootDSEPropertyPage extends PropertyPage implements IWorkbenchPropertyPage +{ + + private TabFolder tabFolder; + + private TabItem commonsTab; + + private TabItem controlsTab; + + private TabItem extensionsTab; + + private TabItem featuresTab; + + private TabItem rawTab; + + public static ResourceBundle oidDescriptions = null; + // Load RessourceBundle with OID descriptions + static + { + try + { + oidDescriptions = ResourceBundle + .getBundle( "org.apache.directory.studio.ldapbrowser.ui.dialogs.properties.OIDDescriptions" ); + } + catch ( Exception e ) + { + e.printStackTrace(); + } + } + + + public RootDSEPropertyPage() + { + super(); + super.noDefaultAndApplyButton(); + } + + + static IBrowserConnection getConnection( Object element ) + { + IBrowserConnection browserConnection = null; + if ( element instanceof IAdaptable ) + { + browserConnection = ( IBrowserConnection ) ( ( IAdaptable ) element ).getAdapter( IBrowserConnection.class ); + if(browserConnection == null) + { + Connection connection = ( Connection ) ( ( IAdaptable ) element ).getAdapter( Connection.class ); + browserConnection = BrowserCorePlugin.getDefault().getConnectionManager().getBrowserConnection( connection ); + } + } + return browserConnection; + } + + + protected Control createContents( Composite parent ) + { + + final IBrowserConnection connection = getConnection( getElement() ); + + this.tabFolder = new TabFolder( parent, SWT.TOP ); + RowLayout mainLayout = new RowLayout(); + mainLayout.fill = true; + mainLayout.marginWidth = 0; + mainLayout.marginHeight = 0; + this.tabFolder.setLayout( mainLayout ); + + Composite composite = new Composite( this.tabFolder, SWT.NONE ); + GridLayout gl = new GridLayout( 2, false ); + composite.setLayout( gl ); + BaseWidgetUtils.createLabel( composite, "Directory Type:", 1 ); + Text typeText = BaseWidgetUtils.createLabeledText( composite, "-", 1 ); + if ( connection != null && connection.getRootDSE() != null ) + { + // Try to detect LDAP server from RootDSE + // + IRootDSE rootDSE = connection.getRootDSE(); + String type = detectOpenLDAP( rootDSE ); + if ( type == null ) + { + type = detectSiemensDirX( rootDSE ); + if ( type == null ) + { + type = detectActiveDirectory( rootDSE ); + if ( type == null ) + { + type = detectByVendorName( rootDSE ); + } + } + } + + if ( type != null ) + { + typeText.setText( type ); + } + } + addInfo( connection, composite, "vendorName", "Vendor Name:" ); + addInfo( connection, composite, "vendorVersion", "Vendor Version:" ); + addInfo( connection, composite, "supportedLDAPVersion", "Supported LDAP Versions:" ); + addInfo( connection, composite, "supportedSASLMechanisms", "Supported SASL Mechanisms:" ); + + this.commonsTab = new TabItem( this.tabFolder, SWT.NONE ); + this.commonsTab.setText( "Info" ); + this.commonsTab.setControl( composite ); + + // naming contexts + // alt servers + // schema DN + // ldap version + + Composite controlsComposite = new Composite( this.tabFolder, SWT.NONE ); + controlsComposite.setLayoutData( new RowData( 10, 10 ) ); + GridLayout controlsLayout = new GridLayout(); + controlsComposite.setLayout( controlsLayout ); + ListViewer controlsViewer = new ListViewer( controlsComposite ); + controlsViewer.getList().setLayoutData( new GridData( GridData.FILL_BOTH ) ); + controlsViewer.setContentProvider( new ArrayContentProvider() ); + controlsViewer.setLabelProvider( new LabelProvider() ); + if ( connection != null && connection.getRootDSE() != null ) + { + String[] supportedControls = ( ( RootDSE ) connection.getRootDSE() ).getSupportedControls(); + addDescritionsToOIDs( supportedControls ); + controlsViewer.setInput( supportedControls ); + } + this.controlsTab = new TabItem( this.tabFolder, SWT.NONE ); + this.controlsTab.setText( "Controls" ); + this.controlsTab.setControl( controlsComposite ); + + Composite extensionComposite = new Composite( this.tabFolder, SWT.NONE ); + extensionComposite.setLayoutData( new RowData( 10, 10 ) ); + GridLayout extensionLayout = new GridLayout(); + extensionComposite.setLayout( extensionLayout ); + ListViewer extensionViewer = new ListViewer( extensionComposite ); + extensionViewer.getList().setLayoutData( new GridData( GridData.FILL_BOTH ) ); + extensionViewer.setContentProvider( new ArrayContentProvider() ); + extensionViewer.setLabelProvider( new LabelProvider() ); + if ( connection != null && connection.getRootDSE() != null ) + { + String[] supportedExtensions = ( ( RootDSE ) connection.getRootDSE() ).getSupportedExtensions(); + addDescritionsToOIDs( supportedExtensions ); + extensionViewer.setInput( supportedExtensions ); + } + this.extensionsTab = new TabItem( this.tabFolder, SWT.NONE ); + this.extensionsTab.setText( "Extensions" ); + this.extensionsTab.setControl( extensionComposite ); + + Composite featureComposite = new Composite( this.tabFolder, SWT.NONE ); + featureComposite.setLayoutData( new RowData( 10, 10 ) ); + GridLayout featureLayout = new GridLayout(); + featureComposite.setLayout( featureLayout ); + ListViewer featureViewer = new ListViewer( featureComposite ); + featureViewer.getList().setLayoutData( new GridData( GridData.FILL_BOTH ) ); + featureViewer.setContentProvider( new ArrayContentProvider() ); + featureViewer.setLabelProvider( new LabelProvider() ); + if ( connection != null && connection.getRootDSE() != null ) + { + String[] supportedFeatures = ( ( RootDSE ) connection.getRootDSE() ).getSupportedFeatures(); + addDescritionsToOIDs( supportedFeatures ); + featureViewer.setInput( supportedFeatures ); + } + this.featuresTab = new TabItem( this.tabFolder, SWT.NONE ); + this.featuresTab.setText( "Features" ); + this.featuresTab.setControl( featureComposite ); + + Composite rawComposite = new Composite( this.tabFolder, SWT.NONE ); + rawComposite.setLayoutData( new RowData( 10, 10 ) ); + GridLayout rawLayout = new GridLayout(); + rawComposite.setLayout( rawLayout ); + Table table = new Table( rawComposite, SWT.MULTI | SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL + | SWT.FULL_SELECTION | SWT.HIDE_SELECTION ); + GridData gridData = new GridData( GridData.FILL_BOTH ); + table.setLayoutData( gridData ); + table.setHeaderVisible( true ); + table.setLinesVisible( true ); + TableViewer viewer = new TableViewer( table ); + for ( int i = 0; i < EntryEditorWidgetTableMetadata.COLUM_NAMES.length; i++ ) + { + TableColumn column = new TableColumn( table, SWT.LEFT, i ); + column.setText( EntryEditorWidgetTableMetadata.COLUM_NAMES[i] ); + column.setWidth( 150 ); + column.setResizable( true ); + } + viewer.setColumnProperties( EntryEditorWidgetTableMetadata.COLUM_NAMES ); + viewer.setSorter( new InnerViewerSorter() ); + viewer.setContentProvider( new InnerContentProvider() ); + viewer.setLabelProvider( new InnerLabelProvider() ); + if ( connection != null ) + { + IEntry entry = connection.getRootDSE(); + viewer.setInput( entry ); + } + this.rawTab = new TabItem( this.tabFolder, SWT.NONE ); + this.rawTab.setText( "Raw" ); + this.rawTab.setControl( rawComposite ); + + // setControl(composite); + return this.tabFolder; + } + + + /** Check various LDAP servers via vendorName attribute. + * + * @param rootDSE + */ + private String detectByVendorName( IRootDSE rootDSE ) + { + + String result = null; + + IAttribute vnAttribute = rootDSE.getAttribute( "vendorName" ); + IAttribute vvAttribute = rootDSE.getAttribute( "vendorVersion" ); + + if ( vnAttribute != null && vnAttribute.getStringValues().length > 0 && vvAttribute != null + && vvAttribute.getStringValues().length > 0 ) + { + if ( vnAttribute.getStringValues()[0].indexOf( "Apache Software Foundation" ) > -1 ) + { + result = "Apache Directory Server"; + } + if ( vnAttribute.getStringValues()[0].indexOf( "Novell" ) > -1 + || vvAttribute.getStringValues()[0].indexOf( "eDirectory" ) > -1 ) + { + result = "Novell eDirectory"; + } + if ( vnAttribute.getStringValues()[0].indexOf( "Sun" ) > -1 + || vvAttribute.getStringValues()[0].indexOf( "Sun" ) > -1 ) + { + result = "Sun Directory Server"; + } + if ( vnAttribute.getStringValues()[0].indexOf( "Netscape" ) > -1 + || vvAttribute.getStringValues()[0].indexOf( "Netscape" ) > -1 ) + { + result = "Netscape Directory Server"; + } + if ( vnAttribute.getStringValues()[0].indexOf( "International Business Machines" ) > -1 + && ( ( vvAttribute.getStringValues()[0].indexOf( "6.0" ) > -1 ) || ( vvAttribute.getStringValues()[0] + .indexOf( "5.2" ) > -1 ) ) ) + { + result = "IBM Tivoli Directory Server"; + } + } + + return result; + } + + + /** + * Tries to detect a Microsoft Active Directory. + * + * @param rootDSE + * @return name of directory type, or null if no Active Directory server server was detected + */ + private String detectActiveDirectory( IRootDSE rootDSE ) + { + + String result = null; + + // check active directory + IAttribute rdncAttribute = rootDSE.getAttribute( "rootDomainNamingContext" ); + if ( rdncAttribute != null ) + { + IAttribute ffAttribute = rootDSE.getAttribute( "forestFunctionality" ); + if ( ffAttribute != null ) + { + result = "Microsoft Active Directory 2003"; + } + else + { + result = "Microsoft Active Directory 2000"; + } + } + + return result; + } + + + /** + * Tries to detect a Siemens DirX server. + * + * @param rootDSE + * @return name of directory type, or null if no DirX server server was detected + */ + private String detectSiemensDirX( IRootDSE rootDSE ) + { + + String result = null; + + IAttribute ssseAttribute = rootDSE.getAttribute( "subSchemaSubentry" ); + if ( ssseAttribute != null ) + { + for ( int i = 0; i < ssseAttribute.getStringValues().length; i++ ) + { + if ( "cn=LDAPGlobalSchemaSubentry".equals( ssseAttribute.getStringValues()[i] ) ) + { + result = "Siemens DirX"; + } + } + } + + return result; + } + + + /** + * Tries to detect an OpenLDAP server + * + * @param rootDSE + * @return name (and sometimes version) of directory type, or null if no OpenLDAP server was detected + */ + private String detectOpenLDAP( IRootDSE rootDSE ) + { + + String result = null; + boolean typeDetected = false; + + // check OpenLDAP + IAttribute ocAttribute = rootDSE.getAttribute( "objectClass" ); + if ( ocAttribute != null ) + { + for ( int i = 0; i < ocAttribute.getStringValues().length; i++ ) + { + if ( "OpenLDAProotDSE".equals( ocAttribute.getStringValues()[i] ) ) + { + IAttribute ccAttribute = rootDSE.getAttribute( "configContext" ); + if ( ccAttribute != null ) + { + result = "OpenLDAP 2.3"; + typeDetected = true; + } + if ( !typeDetected ) + { + IAttribute scAttribute = rootDSE.getAttribute( "supportedControl" ); + if ( scAttribute != null ) + { + for ( int sci = 0; sci < scAttribute.getStringValues().length; sci++ ) + { + // if("1.2.840.113556.1.4.319".equals(scAttribute.getStringValues()[sci])) + // { + if ( "2.16.840.1.113730.3.4.18".equals( scAttribute.getStringValues()[sci] ) ) + { + result = "OpenLDAP 2.2"; + typeDetected = true; + } + } + } + + } + if ( !typeDetected ) + { + IAttribute seAttribute = rootDSE.getAttribute( "supportedExtension" ); + if ( seAttribute != null ) + { + for ( int sei = 0; sei < seAttribute.getStringValues().length; sei++ ) + { + if ( "1.3.6.1.4.1.4203.1.11.3".equals( seAttribute.getStringValues()[sei] ) ) + { + result = "OpenLDAP 2.1"; + typeDetected = true; + } + } + } + } + if ( !typeDetected ) + { + IAttribute sfAttribute = rootDSE.getAttribute( "supportedFeatures" ); + if ( sfAttribute != null ) + { + for ( int sfi = 0; sfi < sfAttribute.getStringValues().length; sfi++ ) + { + if ( "1.3.6.1.4.1.4203.1.5.4".equals( sfAttribute.getStringValues()[sfi] ) ) + { + result = "OpenLDAP 2.0"; + typeDetected = true; + } + } + } + } + if ( !typeDetected ) + { + result = "OpenLDAP"; + typeDetected = true; + } + } + } + } + + return result; + } + + + /** + * Add descriptions to OIDs, if known. uses the form "OID (description)". The array content is modified by this method. + * + * @param oids + */ + private void addDescritionsToOIDs( String[] oids ) + { + if ( oidDescriptions != null ) + { + for ( int i = 0; i < oids.length; ++i ) + { + try + { + String description = oidDescriptions.getString( oids[i] ); + oids[i] = oids[i] + " (" + description + ")"; + } + catch ( MissingResourceException ignored ) + { + } + } + } + } + + + private void addInfo( final IBrowserConnection connection, Composite composite, String attributeName, String labelName ) + { + Label label = new Label( composite, SWT.NONE ); + label.setText( labelName ); + Text text = new Text( composite, SWT.NONE ); + text.setEditable( false ); + text.setBackground( composite.getBackground() ); + try + { + String[] versions = connection.getRootDSE().getAttribute( attributeName ).getStringValues(); + String version = Arrays.asList( versions ).toString(); + text.setText( version.substring( 1, version.length() - 1 ) ); + } + catch ( Exception e ) + { + text.setText( "-" ); + } + } + + class InnerContentProvider implements IStructuredContentProvider + { + public Object[] getElements( Object inputElement ) + { + if ( inputElement instanceof IEntry ) + { + IEntry entry = ( IEntry ) inputElement; + if ( !entry.isAttributesInitialized() && entry.isDirectoryEntry() ) + { + return new Object[] + {}; + } + else + { + IAttribute[] attributes = entry.getAttributes(); + List valueList = new ArrayList(); + for ( int i = 0; attributes != null && i < attributes.length; i++ ) + { + IValue[] values = attributes[i].getValues(); + for ( int j = 0; j < values.length; j++ ) + { + valueList.add( values[j] ); + } + } + return valueList.toArray(); + } + } + return new Object[0]; + } + + + public void dispose() + { + } + + + public void inputChanged( Viewer viewer, Object oldInput, Object newInput ) + { + } + } + + class InnerLabelProvider extends LabelProvider implements ITableLabelProvider + { + public String getColumnText( Object obj, int index ) + { + if ( obj != null && obj instanceof IValue ) + { + IValue attributeValue = ( IValue ) obj; + switch ( index ) + { + case EntryEditorWidgetTableMetadata.KEY_COLUMN_INDEX: + return attributeValue.getAttribute().getDescription(); + case EntryEditorWidgetTableMetadata.VALUE_COLUMN_INDEX: + return attributeValue.getStringValue(); + default: + return ""; + } + } + return ""; + } + + + public Image getColumnImage( Object obj, int index ) + { + return super.getImage( obj ); + } + } + + class InnerViewerSorter extends ViewerSorter + { + + } + +} Propchange: directory/sandbox/felixk/studio-ldapbrowser-ui/src/main/java/org/apache/directory/studio/ldapbrowser/ui/dialogs/properties/RootDSEPropertyPage.java ------------------------------------------------------------------------------ svn:eol-style = native Added: directory/sandbox/felixk/studio-ldapbrowser-ui/src/main/java/org/apache/directory/studio/ldapbrowser/ui/dialogs/properties/SchemaAttributesPropertyPage.java URL: http://svn.apache.org/viewvc/directory/sandbox/felixk/studio-ldapbrowser-ui/src/main/java/org/apache/directory/studio/ldapbrowser/ui/dialogs/properties/SchemaAttributesPropertyPage.java?rev=592087&view=auto ============================================================================== --- directory/sandbox/felixk/studio-ldapbrowser-ui/src/main/java/org/apache/directory/studio/ldapbrowser/ui/dialogs/properties/SchemaAttributesPropertyPage.java (added) +++ directory/sandbox/felixk/studio-ldapbrowser-ui/src/main/java/org/apache/directory/studio/ldapbrowser/ui/dialogs/properties/SchemaAttributesPropertyPage.java Mon Nov 5 09:01:21 2007 @@ -0,0 +1,99 @@ +/* + * 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.ldapbrowser.ui.dialogs.properties; + + +import org.apache.directory.studio.ldapbrowser.core.model.IBrowserConnection; +import org.apache.directory.studio.ldapbrowser.core.model.IEntry; + +import org.eclipse.jface.viewers.ArrayContentProvider; +import org.eclipse.jface.viewers.LabelProvider; +import org.eclipse.jface.viewers.TableViewer; +import org.eclipse.jface.viewers.ViewerSorter; +import org.eclipse.swt.SWT; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Control; +import org.eclipse.swt.widgets.Table; +import org.eclipse.swt.widgets.TableColumn; +import org.eclipse.ui.IWorkbenchPropertyPage; +import org.eclipse.ui.dialogs.PropertyPage; + + +public class SchemaAttributesPropertyPage extends PropertyPage implements IWorkbenchPropertyPage +{ + + public SchemaAttributesPropertyPage() + { + super(); + super.noDefaultAndApplyButton(); + } + + + protected Control createContents( Composite parent ) + { + + Table table = new Table( parent, SWT.MULTI | SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION + | SWT.HIDE_SELECTION ); + GridData gridData = new GridData( GridData.FILL_BOTH ); + gridData.grabExcessVerticalSpace = true; + gridData.horizontalSpan = 3; + table.setLayoutData( gridData ); + table.setHeaderVisible( true ); + table.setLinesVisible( true ); + TableViewer viewer = new TableViewer( table ); + TableColumn column = new TableColumn( table, SWT.LEFT, 0 ); + column.setText( "Attribute Type Definition" ); + column.setWidth( 200 ); + column.setResizable( true ); + viewer.setColumnProperties( new String[] + { "Attribute Type Definition" } ); + + viewer.setSorter( new ViewerSorter() ); + viewer.setContentProvider( new ArrayContentProvider() ); + viewer.setLabelProvider( new LabelProvider() ); + + if ( getElement() instanceof IBrowserConnection ) + { + IBrowserConnection connection = ( IBrowserConnection ) getElement(); + if ( connection != null ) + { + Object[] atds = connection.getSchema().getAttributeTypeDescriptions(); + viewer.setInput( atds ); + column.pack(); + } + } + else if ( getElement() instanceof IEntry ) + { + IEntry entry = ( IEntry ) getElement(); + if ( entry != null ) + { + Object[] atds = entry.getSubschema().getAllAttributeNames(); + viewer.setInput( atds ); + column.pack(); + } + } + + // setControl(composite); + return parent; + } + +} Propchange: directory/sandbox/felixk/studio-ldapbrowser-ui/src/main/java/org/apache/directory/studio/ldapbrowser/ui/dialogs/properties/SchemaAttributesPropertyPage.java ------------------------------------------------------------------------------ svn:eol-style = native Added: directory/sandbox/felixk/studio-ldapbrowser-ui/src/main/java/org/apache/directory/studio/ldapbrowser/ui/dialogs/properties/SchemaObjectClassesPropertyPage.java URL: http://svn.apache.org/viewvc/directory/sandbox/felixk/studio-ldapbrowser-ui/src/main/java/org/apache/directory/studio/ldapbrowser/ui/dialogs/properties/SchemaObjectClassesPropertyPage.java?rev=592087&view=auto ============================================================================== --- directory/sandbox/felixk/studio-ldapbrowser-ui/src/main/java/org/apache/directory/studio/ldapbrowser/ui/dialogs/properties/SchemaObjectClassesPropertyPage.java (added) +++ directory/sandbox/felixk/studio-ldapbrowser-ui/src/main/java/org/apache/directory/studio/ldapbrowser/ui/dialogs/properties/SchemaObjectClassesPropertyPage.java Mon Nov 5 09:01:21 2007 @@ -0,0 +1,98 @@ +/* + * 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.ldapbrowser.ui.dialogs.properties; + + +import org.apache.directory.studio.ldapbrowser.core.model.IBrowserConnection; +import org.apache.directory.studio.ldapbrowser.core.model.IEntry; + +import org.eclipse.jface.viewers.ArrayContentProvider; +import org.eclipse.jface.viewers.LabelProvider; +import org.eclipse.jface.viewers.TableViewer; +import org.eclipse.jface.viewers.ViewerSorter; +import org.eclipse.swt.SWT; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Control; +import org.eclipse.swt.widgets.Table; +import org.eclipse.swt.widgets.TableColumn; +import org.eclipse.ui.IWorkbenchPropertyPage; +import org.eclipse.ui.dialogs.PropertyPage; + + +public class SchemaObjectClassesPropertyPage extends PropertyPage implements IWorkbenchPropertyPage +{ + + public SchemaObjectClassesPropertyPage() + { + super(); + super.noDefaultAndApplyButton(); + } + + + protected Control createContents( Composite parent ) + { + + Table table = new Table( parent, SWT.MULTI | SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION + | SWT.HIDE_SELECTION ); + GridData gridData = new GridData( GridData.FILL_BOTH ); + gridData.grabExcessVerticalSpace = true; + gridData.horizontalSpan = 3; + table.setLayoutData( gridData ); + table.setHeaderVisible( true ); + table.setLinesVisible( true ); + TableViewer viewer = new TableViewer( table ); + TableColumn column = new TableColumn( table, SWT.LEFT, 0 ); + column.setText( "Object Class Definition" ); + column.setWidth( 200 ); + column.setResizable( true ); + viewer.setColumnProperties( new String[] + { "Object Class Definition" } ); + + viewer.setSorter( new ViewerSorter() ); + viewer.setContentProvider( new ArrayContentProvider() ); + viewer.setLabelProvider( new LabelProvider() ); + + if ( getElement() instanceof IBrowserConnection ) + { + IBrowserConnection connection = ( IBrowserConnection ) getElement(); + if ( connection != null ) + { + Object[] ocds = connection.getSchema().getObjectClassDescriptions(); + viewer.setInput( ocds ); + column.pack(); + } + } + else if ( getElement() instanceof IEntry ) + { + IEntry entry = ( IEntry ) getElement(); + if ( entry != null ) + { + Object[] ocds = entry.getSubschema().getObjectClassNames(); + viewer.setInput( ocds ); + column.pack(); + } + } + + return parent; + } + +} Propchange: directory/sandbox/felixk/studio-ldapbrowser-ui/src/main/java/org/apache/directory/studio/ldapbrowser/ui/dialogs/properties/SchemaObjectClassesPropertyPage.java ------------------------------------------------------------------------------ svn:eol-style = native Added: directory/sandbox/felixk/studio-ldapbrowser-ui/src/main/java/org/apache/directory/studio/ldapbrowser/ui/dialogs/properties/SchemaPropertyPage.java URL: http://svn.apache.org/viewvc/directory/sandbox/felixk/studio-ldapbrowser-ui/src/main/java/org/apache/directory/studio/ldapbrowser/ui/dialogs/properties/SchemaPropertyPage.java?rev=592087&view=auto ============================================================================== --- directory/sandbox/felixk/studio-ldapbrowser-ui/src/main/java/org/apache/directory/studio/ldapbrowser/ui/dialogs/properties/SchemaPropertyPage.java (added) +++ directory/sandbox/felixk/studio-ldapbrowser-ui/src/main/java/org/apache/directory/studio/ldapbrowser/ui/dialogs/properties/SchemaPropertyPage.java Mon Nov 5 09:01:21 2007 @@ -0,0 +1,217 @@ +/* + * 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.ldapbrowser.ui.dialogs.properties; + + +import java.io.File; +import java.text.DateFormat; +import java.util.Date; + +import org.apache.directory.studio.ldapbrowser.common.jobs.RunnableContextJobAdapter; +import org.apache.directory.studio.ldapbrowser.common.widgets.BaseWidgetUtils; +import org.apache.directory.studio.ldapbrowser.core.BrowserConnectionManager; +import org.apache.directory.studio.ldapbrowser.core.jobs.ReloadSchemasJob; +import org.apache.directory.studio.ldapbrowser.core.model.IBrowserConnection; +import org.apache.directory.studio.ldapbrowser.core.model.schema.Schema; +import org.apache.directory.studio.ldapbrowser.core.utils.Utils; +import org.eclipse.swt.SWT; +import org.eclipse.swt.events.SelectionEvent; +import org.eclipse.swt.events.SelectionListener; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.widgets.Button; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Control; +import org.eclipse.swt.widgets.Group; +import org.eclipse.swt.widgets.Text; +import org.eclipse.ui.IWorkbenchPropertyPage; +import org.eclipse.ui.dialogs.PropertyPage; + + +public class SchemaPropertyPage extends PropertyPage implements IWorkbenchPropertyPage +{ + + private Text dnText; + + private Text ctText; + + private Text mtText; + + private Button reloadSchemaButton; + + private Text cachePathText; + + private Text cacheDateText; + + private Text cacheSizeText; + + + public SchemaPropertyPage() + { + super(); + super.noDefaultAndApplyButton(); + } + + + protected Control createContents( Composite parent ) + { + + Composite composite = BaseWidgetUtils.createColumnContainer( parent, 1, 1 ); + + Group infoGroup = BaseWidgetUtils.createGroup( BaseWidgetUtils.createColumnContainer( composite, 1, 1 ), + "Schema Information", 1 ); + Composite infoComposite = BaseWidgetUtils.createColumnContainer( infoGroup, 2, 1 ); + Composite infoGroupLeft = BaseWidgetUtils.createColumnContainer( infoComposite, 2, 1 ); + + BaseWidgetUtils.createLabel( infoGroupLeft, "Schema DN:", 1 ); + dnText = BaseWidgetUtils.createWrappedLabeledText( infoGroupLeft, "", 1 ); + + BaseWidgetUtils.createLabel( infoGroupLeft, "Create Timestamp:", 1 ); + ctText = BaseWidgetUtils.createWrappedLabeledText( infoGroupLeft, "", 1 ); + + BaseWidgetUtils.createLabel( infoGroupLeft, "Modify Timestamp:", 1 ); + mtText = BaseWidgetUtils.createWrappedLabeledText( infoGroupLeft, "", 1 ); + + reloadSchemaButton = BaseWidgetUtils.createButton( infoComposite, "", 1 ); + GridData gd = new GridData(); + gd.verticalAlignment = SWT.BOTTOM; + reloadSchemaButton.setLayoutData( gd ); + reloadSchemaButton.addSelectionListener( new SelectionListener() + { + public void widgetSelected( SelectionEvent e ) + { + reloadSchema(); + } + + + public void widgetDefaultSelected( SelectionEvent e ) + { + } + } ); + + BaseWidgetUtils.createSpacer( composite, 1 ); + BaseWidgetUtils.createSpacer( composite, 1 ); + + Group cacheGroup = BaseWidgetUtils.createGroup( BaseWidgetUtils.createColumnContainer( composite, 1, 1 ), + "Schema Cache", 1 ); + Composite cacheComposite = BaseWidgetUtils.createColumnContainer( cacheGroup, 2, 1 ); + + BaseWidgetUtils.createLabel( cacheComposite, "Cache Location:", 1 ); + cachePathText = BaseWidgetUtils.createWrappedLabeledText( cacheComposite, "", 1 ); + + BaseWidgetUtils.createLabel( cacheComposite, "Cache Date:", 1 ); + cacheDateText = BaseWidgetUtils.createWrappedLabeledText( cacheComposite, "", 1 ); + + BaseWidgetUtils.createLabel( cacheComposite, "Cache Size:", 1 ); + cacheSizeText = BaseWidgetUtils.createWrappedLabeledText( cacheComposite, "", 1 ); + + IBrowserConnection connection = RootDSEPropertyPage.getConnection( getElement() ); + this.connectionUpdated( connection ); + + return composite; + } + + + private void reloadSchema() + { + final IBrowserConnection browserConnection = RootDSEPropertyPage.getConnection( getElement() ); + ReloadSchemasJob job = new ReloadSchemasJob( browserConnection ); + RunnableContextJobAdapter.execute( job ); + this.connectionUpdated( browserConnection ); + } + + + private void connectionUpdated( IBrowserConnection connection ) + { + + if ( !this.dnText.isDisposed() ) + { + Schema schema = null; + if ( connection != null ) + { + schema = connection.getSchema(); + } + + if ( schema != null && schema.getDn() != null ) + { + dnText.setText( schema.getDn().toString() ); + } + else + { + dnText.setText( "-" ); + } + + if ( schema != null && schema.getCreateTimestamp() != null ) + { + ctText.setText( schema.getCreateTimestamp() ); + } + else + { + ctText.setText( "-" ); + } + + if ( schema != null && schema.getModifyTimestamp() != null ) + { + mtText.setText( schema.getModifyTimestamp() ); + } + else + { + mtText.setText( "-" ); + } + + if ( schema != null ) + { + reloadSchemaButton.setText( "Reload Schema" ); + } + else + { + reloadSchemaButton.setText( "Load Schema" ); + } + + if ( connection != null ) + { + String cacheFileName = BrowserConnectionManager.getSchemaCacheFileName( connection ); + File cacheFile = new File( cacheFileName ); + if ( cacheFile.exists() ) + { + cachePathText.setText( cacheFile.getPath() ); + DateFormat format = DateFormat.getDateTimeInstance( DateFormat.LONG, DateFormat.MEDIUM ); + cacheDateText.setText( format.format( new Date( cacheFile.lastModified() ) ) ); + cacheSizeText.setText( Utils.formatBytes( cacheFile.length() ) ); + } + else + { + cachePathText.setText( "-" ); + cacheDateText.setText( "-" ); + cacheSizeText.setText( "-" ); + } + } + + reloadSchemaButton.setEnabled( true ); + } + } + + + public boolean isDisposed() + { + return this.dnText.isDisposed(); + } + +} Propchange: directory/sandbox/felixk/studio-ldapbrowser-ui/src/main/java/org/apache/directory/studio/ldapbrowser/ui/dialogs/properties/SchemaPropertyPage.java ------------------------------------------------------------------------------ svn:eol-style = native Added: directory/sandbox/felixk/studio-ldapbrowser-ui/src/main/java/org/apache/directory/studio/ldapbrowser/ui/dialogs/properties/SearchPropertyPage.java URL: http://svn.apache.org/viewvc/directory/sandbox/felixk/studio-ldapbrowser-ui/src/main/java/org/apache/directory/studio/ldapbrowser/ui/dialogs/properties/SearchPropertyPage.java?rev=592087&view=auto ============================================================================== --- directory/sandbox/felixk/studio-ldapbrowser-ui/src/main/java/org/apache/directory/studio/ldapbrowser/ui/dialogs/properties/SearchPropertyPage.java (added) +++ directory/sandbox/felixk/studio-ldapbrowser-ui/src/main/java/org/apache/directory/studio/ldapbrowser/ui/dialogs/properties/SearchPropertyPage.java Mon Nov 5 09:01:21 2007 @@ -0,0 +1,135 @@ +/* + * 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.ldapbrowser.ui.dialogs.properties; + + +import org.apache.directory.studio.ldapbrowser.common.widgets.BaseWidgetUtils; +import org.apache.directory.studio.ldapbrowser.common.widgets.WidgetModifyEvent; +import org.apache.directory.studio.ldapbrowser.common.widgets.WidgetModifyListener; +import org.apache.directory.studio.ldapbrowser.common.widgets.search.SearchPageWrapper; +import org.apache.directory.studio.ldapbrowser.core.events.EventRegistry; +import org.apache.directory.studio.ldapbrowser.core.events.SearchUpdateEvent; +import org.apache.directory.studio.ldapbrowser.core.model.ISearch; +import org.apache.directory.studio.ldapbrowser.core.model.impl.Search; +import org.apache.directory.studio.ldapbrowser.core.utils.Utils; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Control; +import org.eclipse.ui.IWorkbenchPropertyPage; +import org.eclipse.ui.dialogs.PropertyPage; + + +/** + * The SearchPropertyPage implements the property page for an {@link ISearch}. + * + * @author Apache Directory Project + * @version $Rev$, $Date$ + */ +public class SearchPropertyPage extends PropertyPage implements IWorkbenchPropertyPage, WidgetModifyListener +{ + + /** The search. */ + private ISearch search; + + /** The search page wrapper. */ + private SearchPageWrapper spw; + + + /** + * Creates a new instance of SearchPropertyPage. + */ + public SearchPropertyPage() + { + super(); + super.noDefaultAndApplyButton(); + } + + + /** + * @see org.eclipse.jface.dialogs.DialogPage#dispose() + */ + public void dispose() + { + spw.removeWidgetModifyListener( this ); + super.dispose(); + } + + + /** + * @see org.eclipse.jface.preference.PreferencePage#createContents(org.eclipse.swt.widgets.Composite) + */ + protected Control createContents( Composite parent ) + { + + // declare search + ISearch search = ( ISearch ) getElement(); + if ( search != null ) + { + this.search = search; + } + else + { + this.search = new Search(); + } + + super.setMessage( "Search " + Utils.shorten( search.getName(), 30 ) ); + + Composite composite = BaseWidgetUtils.createColumnContainer( parent, 3, 1 ); + + spw = new SearchPageWrapper( SearchPageWrapper.CONNECTION_READONLY ); + spw.createContents( composite ); + spw.loadFromSearch( search ); + spw.addWidgetModifyListener( this ); + + widgetModified( new WidgetModifyEvent( this ) ); + + return composite; + } + + + /** + * @see org.eclipse.jface.preference.PreferencePage#performOk() + */ + public boolean performOk() + { + boolean modified = spw.saveToSearch( search ); + if ( modified && search.getBrowserConnection() != null ) + { + // send update event to force saving of new search parameters. + EventRegistry.fireSearchUpdated( new SearchUpdateEvent( search, + SearchUpdateEvent.EventDetail.SEARCH_PARAMETER_UPDATED ), this ); + + return spw.performSearch( search ); + } + + return true; + } + + + /** + * @see org.apache.directory.studio.ldapbrowser.common.widgets.WidgetModifyListener#widgetModified(org.apache.directory.studio.ldapbrowser.common.widgets.WidgetModifyEvent) + */ + public void widgetModified( WidgetModifyEvent event ) + { + setValid( spw.isValid() ); + setErrorMessage( spw.getErrorMessage() ); + } + +} Propchange: directory/sandbox/felixk/studio-ldapbrowser-ui/src/main/java/org/apache/directory/studio/ldapbrowser/ui/dialogs/properties/SearchPropertyPage.java ------------------------------------------------------------------------------ svn:eol-style = native Added: directory/sandbox/felixk/studio-ldapbrowser-ui/src/main/java/org/apache/directory/studio/ldapbrowser/ui/dialogs/properties/SubSchemaPropertyPage.java URL: http://svn.apache.org/viewvc/directory/sandbox/felixk/studio-ldapbrowser-ui/src/main/java/org/apache/directory/studio/ldapbrowser/ui/dialogs/properties/SubSchemaPropertyPage.java?rev=592087&view=auto ============================================================================== --- directory/sandbox/felixk/studio-ldapbrowser-ui/src/main/java/org/apache/directory/studio/ldapbrowser/ui/dialogs/properties/SubSchemaPropertyPage.java (added) +++ directory/sandbox/felixk/studio-ldapbrowser-ui/src/main/java/org/apache/directory/studio/ldapbrowser/ui/dialogs/properties/SubSchemaPropertyPage.java Mon Nov 5 09:01:21 2007 @@ -0,0 +1,114 @@ +/* + * 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.ldapbrowser.ui.dialogs.properties; + + +import org.apache.directory.studio.ldapbrowser.core.model.IEntry; + +import org.eclipse.jface.viewers.ArrayContentProvider; +import org.eclipse.jface.viewers.LabelProvider; +import org.eclipse.jface.viewers.ListViewer; +import org.eclipse.swt.SWT; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.layout.GridLayout; +import org.eclipse.swt.layout.RowData; +import org.eclipse.swt.layout.RowLayout; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Control; +import org.eclipse.swt.widgets.TabFolder; +import org.eclipse.swt.widgets.TabItem; +import org.eclipse.ui.IWorkbenchPropertyPage; +import org.eclipse.ui.dialogs.PropertyPage; + + +public class SubSchemaPropertyPage extends PropertyPage implements IWorkbenchPropertyPage +{ + + private TabFolder tabFolder; + + private TabItem ocTab; + + private TabItem atTab; + + + public SubSchemaPropertyPage() + { + super(); + super.noDefaultAndApplyButton(); + } + + + protected Control createContents( Composite parent ) + { + + this.tabFolder = new TabFolder( parent, SWT.TOP ); + RowLayout mainLayout = new RowLayout(); + mainLayout.fill = true; + mainLayout.marginWidth = 0; + mainLayout.marginHeight = 0; + this.tabFolder.setLayout( mainLayout ); + + Composite ocComposite = new Composite( this.tabFolder, SWT.NONE ); + ocComposite.setLayoutData( new RowData( 10, 10 ) ); + GridLayout ocLayout = new GridLayout(); + ocComposite.setLayout( ocLayout ); + ListViewer ocViewer = new ListViewer( ocComposite ); + ocViewer.getList().setLayoutData( new GridData( GridData.FILL_BOTH ) ); + ocViewer.setContentProvider( new ArrayContentProvider() ); + ocViewer.setLabelProvider( new LabelProvider() ); + if ( EntryPropertyPage.getEntry( getElement() ) != null ) + { + IEntry entry = EntryPropertyPage.getEntry( getElement() ); + if ( entry != null ) + { + Object[] ocds = entry.getSubschema().getObjectClassNames(); + ocViewer.setInput( ocds ); + } + } + this.ocTab = new TabItem( this.tabFolder, SWT.NONE ); + this.ocTab.setText( "Object Classes" ); + this.ocTab.setControl( ocComposite ); + + Composite atComposite = new Composite( this.tabFolder, SWT.NONE ); + atComposite.setLayoutData( new RowData( 10, 10 ) ); + GridLayout atLayout = new GridLayout(); + atComposite.setLayout( atLayout ); + ListViewer atViewer = new ListViewer( atComposite ); + atViewer.getList().setLayoutData( new GridData( GridData.FILL_BOTH ) ); + atViewer.setContentProvider( new ArrayContentProvider() ); + atViewer.setLabelProvider( new LabelProvider() ); + if ( EntryPropertyPage.getEntry( getElement() ) != null ) + { + IEntry entry = EntryPropertyPage.getEntry( getElement() ); + if ( entry != null ) + { + Object[] atds = entry.getSubschema().getAllAttributeNames(); + atViewer.setInput( atds ); + } + } + this.atTab = new TabItem( this.tabFolder, SWT.NONE ); + this.atTab.setText( "Attribute Types" ); + this.atTab.setControl( atComposite ); + + return this.tabFolder; + } + +} Propchange: directory/sandbox/felixk/studio-ldapbrowser-ui/src/main/java/org/apache/directory/studio/ldapbrowser/ui/dialogs/properties/SubSchemaPropertyPage.java ------------------------------------------------------------------------------ svn:eol-style = native Added: directory/sandbox/felixk/studio-ldapbrowser-ui/src/main/java/org/apache/directory/studio/ldapbrowser/ui/dialogs/properties/ValuePropertyPage.java URL: http://svn.apache.org/viewvc/directory/sandbox/felixk/studio-ldapbrowser-ui/src/main/java/org/apache/directory/studio/ldapbrowser/ui/dialogs/properties/ValuePropertyPage.java?rev=592087&view=auto ============================================================================== --- directory/sandbox/felixk/studio-ldapbrowser-ui/src/main/java/org/apache/directory/studio/ldapbrowser/ui/dialogs/properties/ValuePropertyPage.java (added) +++ directory/sandbox/felixk/studio-ldapbrowser-ui/src/main/java/org/apache/directory/studio/ldapbrowser/ui/dialogs/properties/ValuePropertyPage.java Mon Nov 5 09:01:21 2007 @@ -0,0 +1,123 @@ +/* + * 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.ldapbrowser.ui.dialogs.properties; + + +import org.apache.directory.studio.ldapbrowser.common.widgets.BaseWidgetUtils; +import org.apache.directory.studio.ldapbrowser.core.model.IValue; +import org.apache.directory.studio.ldapbrowser.core.utils.Utils; + +import org.eclipse.core.runtime.IAdaptable; +import org.eclipse.jface.dialogs.IDialogConstants; +import org.eclipse.jface.resource.JFaceResources; +import org.eclipse.swt.SWT; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Control; +import org.eclipse.swt.widgets.Text; +import org.eclipse.ui.IWorkbenchPropertyPage; +import org.eclipse.ui.dialogs.PropertyPage; + + +public class ValuePropertyPage extends PropertyPage implements IWorkbenchPropertyPage +{ + + private Text descriptionText; + + private Text valueText; + + private Text typeText; + + private Text sizeText; + + + public ValuePropertyPage() + { + super(); + super.noDefaultAndApplyButton(); + } + + + protected Control createContents( Composite parent ) + { + + IValue value = getValue( getElement() ); + + Composite composite = BaseWidgetUtils.createColumnContainer( parent, 1, 1 ); + Composite mainGroup = BaseWidgetUtils.createColumnContainer( composite, 2, 1 ); + + BaseWidgetUtils.createLabel( mainGroup, "Attribute Description:", 1 ); + descriptionText = BaseWidgetUtils.createLabeledText( mainGroup, "", 1 ); + + BaseWidgetUtils.createLabel( mainGroup, "Value Type:", 1 ); + typeText = BaseWidgetUtils.createLabeledText( mainGroup, "", 1 ); + + BaseWidgetUtils.createLabel( mainGroup, "Value Size:", 1 ); + sizeText = BaseWidgetUtils.createLabeledText( mainGroup, "", 1 ); + + BaseWidgetUtils.createLabel( mainGroup, "Data:", 1 ); + if ( value != null && value.isString() ) + { + valueText = new Text( mainGroup, SWT.MULTI | SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL | SWT.READ_ONLY ); + valueText.setFont( JFaceResources.getFont( JFaceResources.TEXT_FONT ) ); + GridData gd = new GridData( GridData.FILL_BOTH ); + gd.widthHint = convertHorizontalDLUsToPixels( ( int ) ( IDialogConstants.MINIMUM_MESSAGE_AREA_WIDTH / 2 ) ); + gd.heightHint = convertHorizontalDLUsToPixels( IDialogConstants.MINIMUM_MESSAGE_AREA_WIDTH / 4 ); + valueText.setLayoutData( gd ); + valueText.setBackground( parent.getBackground() ); + } + else + { + valueText = BaseWidgetUtils.createLabeledText( mainGroup, "", 1 ); + } + + if ( value != null ) + { + + super.setMessage( "Value " + Utils.shorten( value.toString(), 30 ) ); + + descriptionText.setText( value.getAttribute().getDescription() ); + // valueText.setText(LdifUtils.mustEncode(value.getBinaryValue())?"Binary":value.getStringValue()); + valueText.setText( value.isString() ? value.getStringValue() : "Binary" ); + typeText.setText( value.isString() ? "String" : "Binary" ); + + int bytes = value.getBinaryValue().length; + int chars = value.isString() ? value.getStringValue().length() : 0; + String size = value.isString() ? chars + ( chars > 1 ? " Characters, " : " Character, " ) : ""; + size += Utils.formatBytes( bytes ); + sizeText.setText( size ); + } + + return parent; + } + + + private static IValue getValue( Object element ) + { + IValue value = null; + if ( element instanceof IAdaptable ) + { + value = ( IValue ) ( ( IAdaptable ) element ).getAdapter( IValue.class ); + } + return value; + } + +} Propchange: directory/sandbox/felixk/studio-ldapbrowser-ui/src/main/java/org/apache/directory/studio/ldapbrowser/ui/dialogs/properties/ValuePropertyPage.java ------------------------------------------------------------------------------ svn:eol-style = native