You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by se...@apache.org on 2007/04/09 11:49:57 UTC

svn commit: r526693 [4/17] - in /directory/ldapstudio/trunk/ldapstudio-browser-common: ./ META-INF/ resources/ resources/icons/ resources/templates/ src/ src/main/ src/main/java/ src/main/java/org/ src/main/java/org/apache/ src/main/java/org/apache/dir...

Added: directory/ldapstudio/trunk/ldapstudio-browser-common/src/main/java/org/apache/directory/ldapstudio/browser/common/actions/RefreshAction.java
URL: http://svn.apache.org/viewvc/directory/ldapstudio/trunk/ldapstudio-browser-common/src/main/java/org/apache/directory/ldapstudio/browser/common/actions/RefreshAction.java?view=auto&rev=526693
==============================================================================
--- directory/ldapstudio/trunk/ldapstudio-browser-common/src/main/java/org/apache/directory/ldapstudio/browser/common/actions/RefreshAction.java (added)
+++ directory/ldapstudio/trunk/ldapstudio-browser-common/src/main/java/org/apache/directory/ldapstudio/browser/common/actions/RefreshAction.java Mon Apr  9 02:49:48 2007
@@ -0,0 +1,241 @@
+/*
+ *  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.common.actions;
+
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import org.apache.directory.ldapstudio.browser.common.BrowserCommonActivator;
+import org.apache.directory.ldapstudio.browser.common.BrowserCommonConstants;
+import org.apache.directory.ldapstudio.browser.core.jobs.InitializeAttributesJob;
+import org.apache.directory.ldapstudio.browser.core.jobs.InitializeChildrenJob;
+import org.apache.directory.ldapstudio.browser.core.jobs.SearchJob;
+import org.apache.directory.ldapstudio.browser.core.model.IEntry;
+import org.apache.directory.ldapstudio.browser.core.model.ISearch;
+import org.eclipse.jface.resource.ImageDescriptor;
+
+
+/**
+ * This Action refreshes the selected item.
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ * @version $Rev$, $Date$
+ */
+public class RefreshAction extends BrowserAction
+{
+    /**
+     * Creates a new instance of RefreshAction.
+     */
+    public RefreshAction()
+    {
+        super();
+    }
+
+
+    /**
+     * {@inheritDoc}
+     */
+    public String getText()
+    {
+        IEntry[] entries = getEntries();
+        ISearch[] searches = getSearches();
+        IEntry entryInput = getEntryInput();
+        ISearch searchInput = getSearchInput();
+
+        if ( entries.length > 0 && searches.length == 0 && entryInput == null && searchInput == null )
+        {
+            return "Reload Attributes and Children";
+        }
+        else if ( searches.length > 0 && entries.length == 0 && entryInput == null && searchInput == null )
+        {
+            boolean searchAgain = true;
+            for ( int i = 0; i < searches.length; i++ )
+            {
+                if ( searches[i].getSearchResults() == null )
+                {
+                    searchAgain = false;
+                    break;
+                }
+            }
+            if ( searchAgain )
+            {
+                return "Search Again";
+            }
+            else
+            {
+                return searches.length == 1 ? "Perform Search" : "Perform Searches";
+            }
+        }
+        else if ( entryInput != null && searches.length == 0 && entries.length == 0 && searchInput == null )
+        {
+            return "Reload Attributes";
+        }
+        else if ( searchInput != null && searches.length == 0 && entryInput == null )
+        {
+            return searchInput.getSearchResults() == null ? "Perform Search" : "Search Again";
+        }
+        else
+        {
+            return "Refresh";
+        }
+    }
+
+
+    /**
+     * {@inheritDoc}
+     */
+    public ImageDescriptor getImageDescriptor()
+    {
+        return BrowserCommonActivator.getDefault().getImageDescriptor( BrowserCommonConstants.IMG_REFRESH );
+    }
+
+
+    /**
+     * {@inheritDoc}
+     */
+    public String getCommandId()
+    {
+        return "org.eclipse.ui.file.refresh";
+    }
+
+
+    /**
+     * {@inheritDoc}
+     */
+    public void run()
+    {
+        IEntry[] entries = getEntries();
+        ISearch[] searches = getSearches();
+        IEntry entryInput = getEntryInput();
+        ISearch searchInput = getSearchInput();
+        boolean soa = BrowserCommonActivator.getDefault().getPreferenceStore().getBoolean(
+            BrowserCommonConstants.PREFERENCE_ENTRYEDITOR_SHOW_OPERATIONAL_ATTRIBUTES );
+
+        if ( entries.length > 0 )
+        {
+            new InitializeAttributesJob( entries, soa ).execute();
+            new InitializeChildrenJob( entries ).execute();
+        }
+        if ( searches.length > 0 )
+        {
+            new SearchJob( searches ).execute();
+        }
+
+        if ( entryInput != null )
+        {
+            new InitializeAttributesJob( new IEntry[]
+                { entryInput }, soa ).execute();
+        }
+        if ( searchInput != null )
+        {
+            new SearchJob( new ISearch[]
+                { searchInput } ).execute();
+        }
+    }
+
+
+    /**
+     * {@inheritDoc}
+     */
+    public boolean isEnabled()
+    {
+        IEntry[] entries = getEntries();
+        ISearch[] searches = getSearches();
+        IEntry entryInput = getEntryInput();
+        ISearch searchInput = getSearchInput();
+
+        return entries.length > 0 || searches.length > 0 || entryInput != null || searchInput != null;
+    }
+
+
+    /**
+     * Gets the Entries
+     *
+     * @return
+     *      the entries
+     */
+    protected IEntry[] getEntries()
+    {
+        List<IEntry> entriesList = new ArrayList<IEntry>();
+        entriesList.addAll( Arrays.asList( getSelectedEntries() ) );
+        for ( int i = 0; i < getSelectedSearchResults().length; i++ )
+        {
+            entriesList.add( getSelectedSearchResults()[i].getEntry() );
+        }
+        for ( int i = 0; i < getSelectedBookmarks().length; i++ )
+        {
+            entriesList.add( getSelectedBookmarks()[i].getEntry() );
+        }
+        return ( IEntry[] ) entriesList.toArray( new IEntry[entriesList.size()] );
+    }
+
+
+    /**
+     * Gets the Searches.
+     *
+     * @return
+     *      the Searches
+     */
+    protected ISearch[] getSearches()
+    {
+        return getSelectedSearches();
+    }
+
+
+    /**
+     * Gets the Entry Input.
+     *
+     * @return
+     *      the Entry Input
+     */
+    private IEntry getEntryInput()
+    {
+        if ( getInput() != null && getInput() instanceof IEntry )
+        {
+            return ( IEntry ) getInput();
+        }
+        else
+        {
+            return null;
+        }
+    }
+
+
+    /**
+     * Gets the Search Input.
+     *
+     * @return
+     *      the Search Input
+     */
+    private ISearch getSearchInput()
+    {
+        if ( getInput() != null && getInput() instanceof ISearch )
+        {
+            return ( ISearch ) getInput();
+        }
+        else
+        {
+            return null;
+        }
+    }
+}

Added: directory/ldapstudio/trunk/ldapstudio-browser-common/src/main/java/org/apache/directory/ldapstudio/browser/common/actions/RenameAction.java
URL: http://svn.apache.org/viewvc/directory/ldapstudio/trunk/ldapstudio-browser-common/src/main/java/org/apache/directory/ldapstudio/browser/common/actions/RenameAction.java?view=auto&rev=526693
==============================================================================
--- directory/ldapstudio/trunk/ldapstudio-browser-common/src/main/java/org/apache/directory/ldapstudio/browser/common/actions/RenameAction.java (added)
+++ directory/ldapstudio/trunk/ldapstudio-browser-common/src/main/java/org/apache/directory/ldapstudio/browser/common/actions/RenameAction.java Mon Apr  9 02:49:48 2007
@@ -0,0 +1,370 @@
+/*
+ *  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.common.actions;
+
+
+import org.apache.directory.ldapstudio.browser.common.dialogs.RenameEntryDialog;
+import org.apache.directory.ldapstudio.browser.core.BrowserCorePlugin;
+import org.apache.directory.ldapstudio.browser.core.internal.model.RootDSE;
+import org.apache.directory.ldapstudio.browser.core.jobs.RenameEntryJob;
+import org.apache.directory.ldapstudio.browser.core.model.IBookmark;
+import org.apache.directory.ldapstudio.browser.core.model.IConnection;
+import org.apache.directory.ldapstudio.browser.core.model.IEntry;
+import org.apache.directory.ldapstudio.browser.core.model.ISearch;
+import org.apache.directory.ldapstudio.browser.core.model.RDN;
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.dialogs.IInputValidator;
+import org.eclipse.jface.dialogs.InputDialog;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.ui.texteditor.IWorkbenchActionDefinitionIds;
+
+
+/**
+ * This Action renames Connections, Entries, Searches, or Bookmarks.
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ * @version $Rev$, $Date$
+ */
+public class RenameAction extends BrowserAction
+{
+    /**
+     * Creates a new instance of RenameAction.
+     *
+     */
+    public RenameAction()
+    {
+        super();
+    }
+
+
+    /**
+     * {@inheritDoc}
+     */
+    public String getText()
+    {
+
+        IConnection[] connections = getConnections();
+        IEntry[] entries = getEntries();
+        ISearch[] searches = getSearches();
+        IBookmark[] bookmarks = getBookmarks();
+
+        if ( connections.length == 1 && entries.length == 0 && searches.length == 0 && bookmarks.length == 0 )
+        {
+            return "Rename Connection...";
+        }
+        else if ( entries.length == 1 && connections.length == 0 && searches.length == 0 && bookmarks.length == 0 )
+        {
+            return "Rename Entry...";
+        }
+        else if ( searches.length == 1 && connections.length == 0 && entries.length == 0 && bookmarks.length == 0 )
+        {
+            return "Rename Search...";
+        }
+        else if ( bookmarks.length == 1 && connections.length == 0 && entries.length == 0 && searches.length == 0 )
+        {
+            return "Rename Bookmark...";
+        }
+        else
+        {
+            return "Rename";
+        }
+    }
+
+
+    /**
+     * {@inheritDoc}
+     */
+    public ImageDescriptor getImageDescriptor()
+    {
+        return null;
+    }
+
+
+    /**
+     * {@inheritDoc}
+     */
+    public String getCommandId()
+    {
+        return IWorkbenchActionDefinitionIds.RENAME;
+    }
+
+
+    /**
+     * {@inheritDoc}
+     */
+    public void run()
+    {
+        IConnection[] connections = getConnections();
+        IEntry[] entries = getEntries();
+        ISearch[] searches = getSearches();
+        IBookmark[] bookmarks = getBookmarks();
+
+        if ( connections.length == 1 && entries.length == 0 && searches.length == 0 && bookmarks.length == 0 )
+        {
+            renameConnection( connections[0] );
+        }
+        else if ( entries.length == 1 && connections.length == 0 && searches.length == 0 && bookmarks.length == 0 )
+        {
+            renameEntry( entries[0] );
+        }
+        else if ( searches.length == 1 && connections.length == 0 && entries.length == 0 && bookmarks.length == 0 )
+        {
+            renameSearch( searches[0] );
+        }
+        else if ( bookmarks.length == 1 && connections.length == 0 && entries.length == 0 && searches.length == 0 )
+        {
+            renameBookmark( bookmarks[0] );
+        }
+    }
+
+
+    /**
+     * {@inheritDoc}
+     */
+    public boolean isEnabled()
+    {
+        try
+        {
+            IConnection[] connections = getConnections();
+            IEntry[] entries = getEntries();
+            ISearch[] searches = getSearches();
+            IBookmark[] bookmarks = getBookmarks();
+
+            return connections.length + entries.length + searches.length + bookmarks.length == 1;
+
+        }
+        catch ( Exception e )
+        {
+            return false;
+        }
+    }
+
+
+    /**
+     * Gets the Connections
+     * 
+     * @return
+     *      the Connections
+     */
+    protected IConnection[] getConnections()
+    {
+        if ( getSelectedConnections().length == 1 )
+        {
+            return getSelectedConnections();
+        }
+        else
+        {
+            return new IConnection[0];
+        }
+    }
+
+
+    /**
+     * Renames a Connection.
+     *
+     * @param connection
+     *      the Connection to rename
+     */
+    protected void renameConnection( final IConnection connection )
+    {
+        IInputValidator validator = new IInputValidator()
+        {
+            public String isValid( String newName )
+            {
+                if ( connection.getName().equals( newName ) )
+                    return null;
+                else if ( BrowserCorePlugin.getDefault().getConnectionManager().getConnection( newName ) != null )
+                    return "A connection with this name already exists.";
+                else
+                    return null;
+            }
+        };
+
+        InputDialog dialog = new InputDialog( getShell(), "Rename Connection", "New name:", connection.getName(),
+            validator );
+
+        dialog.open();
+        String newName = dialog.getValue();
+        if ( newName != null )
+        {
+            connection.setName( newName );
+        }
+    }
+
+
+    /**
+     * Gets the Entries
+     *
+     * @return
+     *      the Entries
+     */
+    protected IEntry[] getEntries()
+    {
+
+        IEntry entry = null;
+
+        if ( getSelectedEntries().length == 1 )
+        {
+            entry = getSelectedEntries()[0];
+        }
+        else if ( getSelectedSearchResults().length == 1 )
+        {
+            entry = getSelectedSearchResults()[0].getEntry();
+        }
+        else if ( getSelectedValues().length == 1 && getSelectedValues()[0].isRdnPart() )
+        {
+            entry = getSelectedValues()[0].getAttribute().getEntry();
+        }
+
+        if ( entry != null && !( entry instanceof RootDSE ) )
+        {
+            return new IEntry[]
+                { entry };
+        }
+        else
+        {
+            return new IEntry[0];
+        }
+    }
+
+
+    /**
+     * Renames an Entry.
+     *
+     * @param entry
+     *      the Entry to rename
+     */
+    protected void renameEntry( final IEntry entry )
+    {
+        RenameEntryDialog renameDialog = new RenameEntryDialog( getShell(), entry );
+        if ( renameDialog.open() == Dialog.OK )
+        {
+            RDN newRdn = renameDialog.getRdn();
+            boolean deleteOldRdn = renameDialog.isDeleteOldRdn();
+            if ( newRdn != null && !newRdn.equals( entry.getRdn() ) )
+            {
+                new RenameEntryJob( entry, newRdn, deleteOldRdn ).execute();
+            }
+        }
+    }
+
+
+    /**
+     * Get the Searches.
+     *
+     * @return
+     *      the Searches
+     */
+    protected ISearch[] getSearches()
+    {
+        if ( getSelectedSearches().length == 1 )
+        {
+            return getSelectedSearches();
+        }
+        else
+        {
+            return new ISearch[0];
+        }
+    }
+
+
+    /**
+     * Renames a Search.
+     *
+     * @param search
+     *      the Search to rename
+     */
+    protected void renameSearch( final ISearch search )
+    {
+        IInputValidator validator = new IInputValidator()
+        {
+            public String isValid( String newName )
+            {
+                if ( search.getName().equals( newName ) )
+                    return null;
+                else if ( search.getConnection().getSearchManager().getSearch( newName ) != null )
+                    return "A connection with this name already exists.";
+                else
+                    return null;
+            }
+        };
+
+        InputDialog dialog = new InputDialog( getShell(), "Rename Search", "New name:", search.getName(), validator );
+
+        dialog.open();
+        String newName = dialog.getValue();
+        if ( newName != null )
+        {
+            search.setName( newName );
+        }
+    }
+
+
+    /**
+     * Get the Bookmarks
+     *
+     * @return
+     *      the Bookmarks
+     */
+    protected IBookmark[] getBookmarks()
+    {
+        if ( getSelectedBookmarks().length == 1 )
+        {
+            return getSelectedBookmarks();
+        }
+        else
+        {
+            return new IBookmark[0];
+        }
+    }
+
+
+    /**
+     * Renames a Bookmark
+     *
+     * @param bookmark
+     *      the Bookmark to rename
+     */
+    protected void renameBookmark( final IBookmark bookmark )
+    {
+        IInputValidator validator = new IInputValidator()
+        {
+            public String isValid( String newName )
+            {
+                if ( bookmark.getName().equals( newName ) )
+                    return null;
+                else if ( bookmark.getConnection().getBookmarkManager().getBookmark( newName ) != null )
+                    return "A bookmark with this name already exists.";
+                else
+                    return null;
+            }
+        };
+
+        InputDialog dialog = new InputDialog( getShell(), "Rename Bookmark", "New name:", bookmark.getName(), validator );
+
+        dialog.open();
+        String newName = dialog.getValue();
+        if ( newName != null )
+        {
+            bookmark.setName( newName );
+        }
+    }
+}

Added: directory/ldapstudio/trunk/ldapstudio-browser-common/src/main/java/org/apache/directory/ldapstudio/browser/common/actions/SelectAllAction.java
URL: http://svn.apache.org/viewvc/directory/ldapstudio/trunk/ldapstudio-browser-common/src/main/java/org/apache/directory/ldapstudio/browser/common/actions/SelectAllAction.java?view=auto&rev=526693
==============================================================================
--- directory/ldapstudio/trunk/ldapstudio-browser-common/src/main/java/org/apache/directory/ldapstudio/browser/common/actions/SelectAllAction.java (added)
+++ directory/ldapstudio/trunk/ldapstudio-browser-common/src/main/java/org/apache/directory/ldapstudio/browser/common/actions/SelectAllAction.java Mon Apr  9 02:49:48 2007
@@ -0,0 +1,125 @@
+/*
+ *  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.common.actions;
+
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import org.apache.directory.ldapstudio.browser.core.ConnectionManager;
+import org.apache.directory.ldapstudio.browser.core.model.IAttribute;
+import org.apache.directory.ldapstudio.browser.core.model.IEntry;
+
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.ui.texteditor.IWorkbenchActionDefinitionIds;
+
+
+/**
+ * This class implements the Select All Action.
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ * @version $Rev$, $Date$
+ */
+public class SelectAllAction extends BrowserAction
+{
+    private Viewer viewer;
+
+
+    /**
+     * Creates a new instance of SelectAllAction.
+     *
+     * @param viewer
+     *      the attached viewer
+     */
+    public SelectAllAction( Viewer viewer )
+    {
+        this.viewer = viewer;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public String getText()
+    {
+        return "Select All";
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public ImageDescriptor getImageDescriptor()
+    {
+        return null;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public String getCommandId()
+    {
+        return IWorkbenchActionDefinitionIds.SELECT_ALL;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public boolean isEnabled()
+    {
+        return true;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public void run()
+    {
+        if ( getInput() != null && getInput() instanceof IEntry )
+        {
+            List selectionList = new ArrayList();
+            IAttribute[] attributes = ( ( IEntry ) getInput() ).getAttributes();
+            if ( attributes != null )
+            {
+                selectionList.addAll( Arrays.asList( attributes ) );
+                for ( int i = 0; i < attributes.length; i++ )
+                {
+                    selectionList.addAll( Arrays.asList( attributes[i].getValues() ) );
+                }
+            }
+            StructuredSelection selection = new StructuredSelection( selectionList );
+            this.viewer.setSelection( selection );
+        }
+        else if ( getInput() != null && getInput() instanceof ConnectionManager )
+        {
+            StructuredSelection selection = new StructuredSelection( ( ( ConnectionManager ) getInput() )
+                .getConnections() );
+            this.viewer.setSelection( selection );
+        }
+        else if ( getSelectedConnections().length > 0 && viewer.getInput() instanceof ConnectionManager )
+        {
+            StructuredSelection selection = new StructuredSelection( ( ( ConnectionManager ) viewer.getInput() )
+                .getConnections() );
+            this.viewer.setSelection( selection );
+        }
+    }
+}

Added: directory/ldapstudio/trunk/ldapstudio-browser-common/src/main/java/org/apache/directory/ldapstudio/browser/common/actions/SelectionUtils.java
URL: http://svn.apache.org/viewvc/directory/ldapstudio/trunk/ldapstudio-browser-common/src/main/java/org/apache/directory/ldapstudio/browser/common/actions/SelectionUtils.java?view=auto&rev=526693
==============================================================================
--- directory/ldapstudio/trunk/ldapstudio-browser-common/src/main/java/org/apache/directory/ldapstudio/browser/common/actions/SelectionUtils.java (added)
+++ directory/ldapstudio/trunk/ldapstudio-browser-common/src/main/java/org/apache/directory/ldapstudio/browser/common/actions/SelectionUtils.java Mon Apr  9 02:49:48 2007
@@ -0,0 +1,452 @@
+/*
+ *  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.common.actions;
+
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Comparator;
+import java.util.Iterator;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Set;
+
+import org.apache.directory.ldapstudio.browser.common.widgets.browser.BrowserCategory;
+import org.apache.directory.ldapstudio.browser.common.widgets.browser.BrowserEntryPage;
+import org.apache.directory.ldapstudio.browser.common.widgets.browser.BrowserSearchResultPage;
+import org.apache.directory.ldapstudio.browser.core.internal.model.Search;
+import org.apache.directory.ldapstudio.browser.core.model.AttributeHierarchy;
+import org.apache.directory.ldapstudio.browser.core.model.IAttribute;
+import org.apache.directory.ldapstudio.browser.core.model.IBookmark;
+import org.apache.directory.ldapstudio.browser.core.model.IConnection;
+import org.apache.directory.ldapstudio.browser.core.model.IEntry;
+import org.apache.directory.ldapstudio.browser.core.model.ISearch;
+import org.apache.directory.ldapstudio.browser.core.model.ISearchResult;
+import org.apache.directory.ldapstudio.browser.core.model.IValue;
+import org.apache.directory.ldapstudio.browser.core.model.schema.AttributeTypeDescription;
+import org.apache.directory.ldapstudio.browser.core.utils.LdapFilterUtils;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.StructuredSelection;
+
+
+/**
+ * The SelectionUtils are used to extract specific beans from the current
+ * selection (org.eclipse.jface.viewers.ISelection).
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ * @version $Rev$, $Date$
+ */
+public abstract class SelectionUtils
+{
+
+    /**
+     * This method creates a prototype search from the given selection.
+     * 
+     * Dependend on the selected element it determines the best connection,
+     * search base and filter:
+     * <ul>
+     *   <li>ISearch: all parameters are copied to the prototype search (clone)
+     *   <li>IEntry or ISearchResult or IBookmark: DN is used as search base
+     *   <li>IAttribute or IValue: the entry's DN is used as search base, 
+     *       the filter is built using the name-value-pairs (query by example). 
+     * </ul>
+     * 
+     * 
+     * @param selection the current selection
+     * @return a prototype search
+     */
+    public static ISearch getExampleSearch( ISelection selection )
+    {
+
+        ISearch exampleSearch = new Search();
+        String oldName = exampleSearch.getSearchParameter().getName();
+        exampleSearch.getSearchParameter().setName( null );
+        exampleSearch.setScope( ISearch.SCOPE_SUBTREE );
+
+        if ( selection != null && !selection.isEmpty() && selection instanceof StructuredSelection )
+        {
+
+            Object[] objects = ( ( IStructuredSelection ) selection ).toArray();
+            Comparator<Object> comparator = new Comparator<Object>()
+            {
+                public int compare( Object o1, Object o2 )
+                {
+                    if ( ( o1 instanceof IValue ) && !( o2 instanceof IValue ) )
+                    {
+                        return -1;
+                    }
+                    else if ( !( o1 instanceof IValue ) && ( o2 instanceof IValue ) )
+                    {
+                        return 1;
+                    }
+                    else if ( ( o1 instanceof IAttribute ) && !( o2 instanceof IAttribute ) )
+                    {
+                        return -1;
+                    }
+                    else if ( !( o1 instanceof IAttribute ) && ( o2 instanceof IAttribute ) )
+                    {
+                        return 1;
+                    }
+                    else if ( ( o1 instanceof AttributeHierarchy ) && !( o2 instanceof AttributeHierarchy ) )
+                    {
+                        return -1;
+                    }
+                    else if ( !( o1 instanceof AttributeHierarchy ) && ( o2 instanceof AttributeHierarchy ) )
+                    {
+                        return 1;
+                    }
+                    return 0;
+                }
+            };
+            Arrays.sort( objects, comparator );
+            Object obj = objects[0];
+
+            if ( obj instanceof ISearch )
+            {
+                ISearch search = ( ISearch ) obj;
+                exampleSearch = ( ISearch ) search.clone();
+                exampleSearch.setName( null );
+            }
+            else if ( obj instanceof IEntry )
+            {
+                IEntry entry = ( IEntry ) obj;
+                exampleSearch.setConnection( entry.getConnection() );
+                exampleSearch.setSearchBase( entry.getDn() );
+            }
+            else if ( obj instanceof ISearchResult )
+            {
+                ISearchResult searchResult = ( ISearchResult ) obj;
+                exampleSearch.setConnection( searchResult.getEntry().getConnection() );
+                exampleSearch.setSearchBase( searchResult.getEntry().getDn() );
+            }
+            else if ( obj instanceof IBookmark )
+            {
+                IBookmark bookmark = ( IBookmark ) obj;
+                exampleSearch.setConnection( bookmark.getConnection() );
+                exampleSearch.setSearchBase( bookmark.getDn() );
+            }
+
+            else if ( obj instanceof AttributeHierarchy || obj instanceof IAttribute || obj instanceof IValue )
+            {
+
+                IEntry entry = null;
+                Set<String> filterSet = new LinkedHashSet<String>();
+                for ( int i = 0; i < objects.length; i++ )
+                {
+                    Object object = objects[i];
+                    if ( object instanceof AttributeHierarchy )
+                    {
+                        AttributeHierarchy ah = ( AttributeHierarchy ) object;
+                        for ( Iterator it = ah.iterator(); it.hasNext(); )
+                        {
+                            IAttribute attribute = ( IAttribute ) it.next();
+                            entry = attribute.getEntry();
+                            IValue[] values = attribute.getValues();
+                            for ( int v = 0; v < values.length; v++ )
+                            {
+                                filterSet.add( LdapFilterUtils.getFilter( values[v] ) );
+                            }
+                        }
+                    }
+                    else if ( object instanceof IAttribute )
+                    {
+                        IAttribute attribute = ( IAttribute ) object;
+                        entry = attribute.getEntry();
+                        IValue[] values = attribute.getValues();
+                        for ( int v = 0; v < values.length; v++ )
+                        {
+                            filterSet.add( LdapFilterUtils.getFilter( values[v] ) );
+                        }
+                    }
+                    else if ( object instanceof IValue )
+                    {
+                        IValue value = ( IValue ) object;
+                        entry = value.getAttribute().getEntry();
+                        filterSet.add( LdapFilterUtils.getFilter( value ) );
+                    }
+                }
+
+                exampleSearch.setConnection( entry.getConnection() );
+                exampleSearch.setSearchBase( entry.getDn() );
+                StringBuffer filter = new StringBuffer();
+                if ( filterSet.size() > 1 )
+                {
+                    filter.append( "(&" );
+                    for ( Iterator<String> filterIterator = filterSet.iterator(); filterIterator.hasNext(); )
+                    {
+                        filter.append( filterIterator.next() );
+                    }
+                    filter.append( ")" );
+                }
+                else if ( filterSet.size() == 1 )
+                {
+                    filter.append( filterSet.toArray()[0] );
+                }
+                else
+                {
+                    filter.append( ISearch.FILTER_TRUE );
+                }
+                exampleSearch.setFilter( filter.toString() );
+            }
+
+            else if ( obj instanceof IConnection )
+            {
+                IConnection connection = ( IConnection ) obj;
+                exampleSearch.setConnection( connection );
+                if ( connection.getRootDSE().getChildrenCount() > 0 )
+                {
+                    exampleSearch.setSearchBase( connection.getRootDSE().getChildren()[0].getDn() );
+                }
+                else
+                {
+                    exampleSearch.setSearchBase( connection.getRootDSE().getDn() );
+                }
+            }
+            else if ( obj instanceof BrowserCategory )
+            {
+                BrowserCategory cat = ( BrowserCategory ) obj;
+                exampleSearch.setConnection( cat.getParent() );
+                if ( cat.getParent().getRootDSE().getChildrenCount() > 0 )
+                {
+                    exampleSearch.setSearchBase( cat.getParent().getRootDSE().getChildren()[0].getDn() );
+                }
+                else
+                {
+                    exampleSearch.setSearchBase( cat.getParent().getRootDSE().getDn() );
+                }
+            }
+
+        }
+
+        exampleSearch.getSearchParameter().setName( oldName );
+        return exampleSearch;
+    }
+
+
+    /**
+     * Gets the BrowserCategory beans contained in the given selection.
+     *
+     * @param selection the selection
+     * @return an array with BrowserCategory beans, may be empty.
+     */
+    public static BrowserCategory[] getBrowserViewCategories( ISelection selection )
+    {
+        List<Object> list = getTypes( selection, BrowserCategory.class );
+        return list.toArray( new BrowserCategory[list.size()] );
+    }
+
+
+    /**
+     * Gets the IValue beans contained in the given selection.
+     *
+     * @param selection the selection
+     * @return an array with IValue beans, may be empty.
+     */
+    public static IValue[] getValues( ISelection selection )
+    {
+        List<Object> list = getTypes( selection, IValue.class );
+        return list.toArray( new IValue[list.size()] );
+    }
+
+
+    /**
+     * Gets the IAttribute beans contained in the given selection.
+     *
+     * @param selection the selection
+     * @return an array with IAttribute beans, may be empty.
+     */
+    public static IAttribute[] getAttributes( ISelection selection )
+    {
+        List<Object> list = getTypes( selection, IAttribute.class );
+        return list.toArray( new IAttribute[list.size()] );
+    }
+
+
+    /**
+     * Gets the AttributeHierarchy beans contained in the given selection.
+     *
+     * @param selection the selection
+     * @return an array with AttributeHierarchy beans, may be empty.
+     */
+    public static AttributeHierarchy[] getAttributeHierarchie( ISelection selection )
+    {
+        List<Object> list = getTypes( selection, AttributeHierarchy.class );
+        return list.toArray( new AttributeHierarchy[list.size()] );
+    }
+
+
+    /**
+     * Gets the Strings contained in the given selection.
+     *
+     * @param selection the selection
+     * @return an array with Strings, may be empty.
+     */
+    public static String[] getProperties( ISelection selection )
+    {
+        List<Object> list = getTypes( selection, String.class );
+        return list.toArray( new String[list.size()] );
+    }
+
+
+    /**
+     * Gets the AttributeTypeDescription beans contained in the given selection.
+     *
+     * @param selection the selection
+     * @return an array with AttributeTypeDescription beans, may be empty.
+     */
+    public static AttributeTypeDescription[] getAttributeTypeDescription( ISelection selection )
+    {
+        List<Object> list = getTypes( selection, AttributeTypeDescription.class );
+        return list.toArray( new AttributeTypeDescription[list.size()] );
+    }
+
+
+    /**
+     * Gets the IEntry beans contained in the given selection.
+     *
+     * @param selection the selection
+     * @return an array with IEntry beans, may be empty.
+     */
+    public static IEntry[] getEntries( ISelection selection )
+    {
+        List<Object> list = getTypes( selection, IEntry.class );
+        return list.toArray( new IEntry[list.size()] );
+    }
+
+
+    /**
+     * Gets the IBookmark beans contained in the given selection.
+     *
+     * @param selection the selection
+     * @return an array with IBookmark beans, may be empty.
+     */
+    public static IBookmark[] getBookmarks( ISelection selection )
+    {
+        List<Object> list = getTypes( selection, IBookmark.class );
+        return list.toArray( new IBookmark[list.size()] );
+    }
+
+
+    /**
+     * Gets the ISearchResult beans contained in the given selection.
+     *
+     * @param selection the selection
+     * @return an array with ISearchResult beans, may be empty.
+     */
+    public static ISearchResult[] getSearchResults( ISelection selection )
+    {
+        List<Object> list = getTypes( selection, ISearchResult.class );
+        return list.toArray( new ISearchResult[list.size()] );
+    }
+
+
+    /**
+     * Gets all beans of the requested type contained in the given selection.
+     *
+     * @param selection the selection
+     * @param type the requested type
+     * @return a list containg beans of the requesten type
+     */
+    private static List<Object> getTypes( ISelection selection, Class type )
+    {
+        List<Object> list = new ArrayList<Object>();
+        if ( selection instanceof IStructuredSelection )
+        {
+            IStructuredSelection structuredSelection = ( IStructuredSelection ) selection;
+            Iterator it = structuredSelection.iterator();
+            while ( it.hasNext() )
+            {
+                Object o = it.next();
+                if ( type.isInstance( o ) )
+                {
+                    list.add( o );
+                }
+            }
+        }
+        return list;
+    }
+
+
+    /**
+     * Gets the ISearch beans contained in the given selection.
+     *
+     * @param selection the selection
+     * @return an array with ISearch beans, may be empty.
+     */
+    public static ISearch[] getSearches( ISelection selection )
+    {
+        List<Object> list = getTypes( selection, ISearch.class );
+        return list.toArray( new ISearch[list.size()] );
+    }
+
+
+    /**
+     * Gets the IConnection beans contained in the given selection.
+     *
+     * @param selection the selection
+     * @return an array with IConnection beans, may be empty.
+     */
+    public static IConnection[] getConnections( ISelection selection )
+    {
+        List<Object> list = getTypes( selection, IConnection.class );
+        return list.toArray( new IConnection[list.size()] );
+    }
+
+
+    /**
+     * Gets the BrowserEntryPage beans contained in the given selection.
+     *
+     * @param selection the selection
+     * @return an array with BrowserEntryPage beans, may be empty.
+     */
+    public static BrowserEntryPage[] getBrowserEntryPages( ISelection selection )
+    {
+        List<Object> list = getTypes( selection, BrowserEntryPage.class );
+        return list.toArray( new BrowserEntryPage[list.size()] );
+    }
+
+
+    /**
+     * Gets the BrowserSearchResultPage beans contained in the given selection.
+     *
+     * @param selection the selection
+     * @return an array with BrowserSearchResultPage beans, may be empty.
+     */
+    public static BrowserSearchResultPage[] getBrowserSearchResultPages( ISelection selection )
+    {
+        List<Object> list = getTypes( selection, BrowserSearchResultPage.class );
+        return list.toArray( new BrowserSearchResultPage[list.size()] );
+    }
+
+    
+    /**
+     * Gets the objects contained in the given selection.
+     *
+     * @param selection the selection
+     * @return an array with object, may be empty.
+     */
+    public static Object[] getObjects( ISelection selection )
+    {
+        List<Object> list = getTypes( selection, Object.class );
+        return list.toArray( new Object[list.size()] );
+    }
+}

Added: directory/ldapstudio/trunk/ldapstudio-browser-common/src/main/java/org/apache/directory/ldapstudio/browser/common/actions/ShowRawValuesAction.java
URL: http://svn.apache.org/viewvc/directory/ldapstudio/trunk/ldapstudio-browser-common/src/main/java/org/apache/directory/ldapstudio/browser/common/actions/ShowRawValuesAction.java?view=auto&rev=526693
==============================================================================
--- directory/ldapstudio/trunk/ldapstudio-browser-common/src/main/java/org/apache/directory/ldapstudio/browser/common/actions/ShowRawValuesAction.java (added)
+++ directory/ldapstudio/trunk/ldapstudio-browser-common/src/main/java/org/apache/directory/ldapstudio/browser/common/actions/ShowRawValuesAction.java Mon Apr  9 02:49:48 2007
@@ -0,0 +1,77 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *  
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *  
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License. 
+ *  
+ */
+
+package org.apache.directory.ldapstudio.browser.common.actions;
+
+
+import org.apache.directory.ldapstudio.browser.common.BrowserCommonActivator;
+import org.apache.directory.ldapstudio.browser.common.BrowserCommonConstants;
+import org.eclipse.jface.action.Action;
+
+
+/**
+ * This Action toggles the Show Raw Values Preference.
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ * @version $Rev$, $Date$
+ */
+public class ShowRawValuesAction extends Action
+{
+    /**
+     * Creates a new instance of ShowRawValuesAction.
+     */
+    public ShowRawValuesAction()
+    {
+        super( "Show Raw Values", AS_CHECK_BOX );
+        super.setToolTipText( getText() );
+        super.setEnabled( true );
+
+        super.setChecked( BrowserCommonActivator.getDefault().getPreferenceStore().getBoolean(
+            BrowserCommonConstants.PREFERENCE_SHOW_RAW_VALUES ) );
+    }
+
+
+    /**
+     * {@inheritDoc}
+     */
+    public void run()
+    {
+        BrowserCommonActivator.getDefault().getPreferenceStore().setValue( BrowserCommonConstants.PREFERENCE_SHOW_RAW_VALUES,
+            super.isChecked() );
+    }
+
+
+    /**
+     * {@inheritDoc}
+     */
+    public void setChecked( boolean checked )
+    {
+        super.setChecked( checked );
+    }
+
+
+    /**
+     * {@inheritDoc}
+     */
+    public boolean isChecked()
+    {
+        return super.isChecked();
+    }
+}

Added: directory/ldapstudio/trunk/ldapstudio-browser-common/src/main/java/org/apache/directory/ldapstudio/browser/common/actions/UnfilterChildrenAction.java
URL: http://svn.apache.org/viewvc/directory/ldapstudio/trunk/ldapstudio-browser-common/src/main/java/org/apache/directory/ldapstudio/browser/common/actions/UnfilterChildrenAction.java?view=auto&rev=526693
==============================================================================
--- directory/ldapstudio/trunk/ldapstudio-browser-common/src/main/java/org/apache/directory/ldapstudio/browser/common/actions/UnfilterChildrenAction.java (added)
+++ directory/ldapstudio/trunk/ldapstudio-browser-common/src/main/java/org/apache/directory/ldapstudio/browser/common/actions/UnfilterChildrenAction.java Mon Apr  9 02:49:48 2007
@@ -0,0 +1,97 @@
+/*
+ *  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.common.actions;
+
+
+import org.apache.directory.ldapstudio.browser.common.BrowserCommonActivator;
+import org.apache.directory.ldapstudio.browser.common.BrowserCommonConstants;
+import org.apache.directory.ldapstudio.browser.core.jobs.InitializeChildrenJob;
+import org.apache.directory.ldapstudio.browser.core.model.IEntry;
+import org.eclipse.jface.resource.ImageDescriptor;
+
+
+/**
+ * This action removes the children filter from the currently selected entry.
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ * @version $Rev$, $Date$
+ */
+public class UnfilterChildrenAction extends BrowserAction
+{
+    /**
+     * Creates a new instance of UnfilterChildrenAction.
+     */
+    public UnfilterChildrenAction()
+    {
+        super();
+    }
+
+
+    /**
+     * {@inheritDoc}
+     */
+    public void run()
+    {
+        if ( getSelectedEntries().length == 1 )
+        {
+            getSelectedEntries()[0].setChildrenFilter( null );
+            new InitializeChildrenJob( new IEntry[]
+                { getSelectedEntries()[0] } ).execute();
+        }
+    }
+
+
+    /**
+     * {@inheritDoc}
+     */
+    public String getText()
+    {
+        return "Remove Children Filter";
+    }
+
+
+    /**
+     * {@inheritDoc}
+     */
+    public ImageDescriptor getImageDescriptor()
+    {
+        return BrowserCommonActivator.getDefault().getImageDescriptor( BrowserCommonConstants.IMG_UNFILTER_DIT );
+    }
+
+
+    /**
+     * {@inheritDoc}
+     */
+    public String getCommandId()
+    {
+        return null;
+    }
+
+
+    /**
+     * {@inheritDoc}
+     */
+    public boolean isEnabled()
+    {
+        return getSelectedSearches().length + getSelectedSearchResults().length + getSelectedBookmarks().length == 0
+            && getSelectedEntries().length == 1 && getSelectedEntries()[0].getChildrenFilter() != null;
+    }
+}

Added: directory/ldapstudio/trunk/ldapstudio-browser-common/src/main/java/org/apache/directory/ldapstudio/browser/common/actions/UpAction.java
URL: http://svn.apache.org/viewvc/directory/ldapstudio/trunk/ldapstudio-browser-common/src/main/java/org/apache/directory/ldapstudio/browser/common/actions/UpAction.java?view=auto&rev=526693
==============================================================================
--- directory/ldapstudio/trunk/ldapstudio-browser-common/src/main/java/org/apache/directory/ldapstudio/browser/common/actions/UpAction.java (added)
+++ directory/ldapstudio/trunk/ldapstudio-browser-common/src/main/java/org/apache/directory/ldapstudio/browser/common/actions/UpAction.java Mon Apr  9 02:49:48 2007
@@ -0,0 +1,153 @@
+/*
+ *  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.common.actions;
+
+
+import org.apache.directory.ldapstudio.browser.common.BrowserCommonActivator;
+import org.apache.directory.ldapstudio.browser.common.BrowserCommonConstants;
+import org.apache.directory.ldapstudio.browser.common.widgets.browser.BrowserEntryPage;
+import org.apache.directory.ldapstudio.browser.common.widgets.browser.BrowserSearchResultPage;
+import org.apache.directory.ldapstudio.browser.core.model.IBookmark;
+import org.apache.directory.ldapstudio.browser.core.model.IEntry;
+import org.apache.directory.ldapstudio.browser.core.model.ISearch;
+import org.apache.directory.ldapstudio.browser.core.model.ISearchResult;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.TreeViewer;
+
+
+/**
+ * This class implements the Up Action.
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ * @version $Rev$, $Date$
+ */
+public class UpAction extends BrowserAction
+{
+    protected TreeViewer viewer;
+
+
+    /**
+     * Creates a new instance of UpAction.
+     *
+     * @param viewer
+     *      the attached TreeViewer
+     */
+    public UpAction( TreeViewer viewer )
+    {
+        super();
+        this.viewer = viewer;
+    }
+
+
+    /**
+     * {@inheritDoc}
+     */
+    public String getText()
+    {
+        return "Up";
+    }
+
+
+    /**
+     * {@inheritDoc}
+     */
+    public ImageDescriptor getImageDescriptor()
+    {
+        return BrowserCommonActivator.getDefault().getImageDescriptor( BrowserCommonConstants.IMG_PARENT );
+    }
+
+
+    /**
+     * {@inheritDoc}
+     */
+    public String getCommandId()
+    {
+        return "org.apache.directory.ldapstudio.browser.action.openSearchResult";
+    }
+
+
+    /**
+     * {@inheritDoc}
+     */
+    public void run()
+    {
+        IEntry[] entries = getSelectedEntries();
+        ISearch[] searches = getSelectedSearches();
+        ISearchResult[] searchResults = getSelectedSearchResults();
+        IBookmark[] bookmarks = getSelectedBookmarks();
+        BrowserEntryPage[] browserEntryPages = getSelectedBrowserEntryPages();
+        BrowserSearchResultPage[] browserSearchResultPages = getSelectedBrowserSearchResultPages();
+
+        Object selection = null;
+
+        if ( entries.length > 0 )
+        {
+            selection = entries[0];
+        }
+        else if ( searches.length > 0 )
+        {
+            selection = searches[0];
+        }
+        else if ( searchResults.length > 0 )
+        {
+            selection = searchResults[0];
+        }
+        else if ( bookmarks.length > 0 )
+        {
+            selection = bookmarks[0];
+        }
+        else if ( browserEntryPages.length > 0 )
+        {
+            selection = browserEntryPages[0];
+        }
+        else if ( browserSearchResultPages.length > 0 )
+        {
+            selection = browserSearchResultPages[0];
+        }
+
+        if ( selection != null )
+        {
+            ITreeContentProvider contentProvider = ( ITreeContentProvider ) viewer.getContentProvider();
+            Object newSelection = contentProvider.getParent( selection );
+            viewer.reveal( newSelection );
+            viewer.setSelection( new StructuredSelection( newSelection ), true );
+        }
+    }
+
+
+    /**
+     * {@inheritDoc}
+     */
+    public boolean isEnabled()
+    {
+        IEntry[] entries = getSelectedEntries();
+        ISearch[] searches = getSelectedSearches();
+        ISearchResult[] searchResults = getSelectedSearchResults();
+        IBookmark[] bookmarks = getSelectedBookmarks();
+        BrowserEntryPage[] browserEntryPages = getSelectedBrowserEntryPages();
+        BrowserSearchResultPage[] browserSearchResultPages = getSelectedBrowserSearchResultPages();
+
+        return entries.length > 0 || searches.length > 0 || searchResults.length > 0 || bookmarks.length > 0
+            || browserEntryPages.length > 0 || browserSearchResultPages.length > 0;
+    }
+}

Added: directory/ldapstudio/trunk/ldapstudio-browser-common/src/main/java/org/apache/directory/ldapstudio/browser/common/actions/ValueEditorPreferencesAction.java
URL: http://svn.apache.org/viewvc/directory/ldapstudio/trunk/ldapstudio-browser-common/src/main/java/org/apache/directory/ldapstudio/browser/common/actions/ValueEditorPreferencesAction.java?view=auto&rev=526693
==============================================================================
--- directory/ldapstudio/trunk/ldapstudio-browser-common/src/main/java/org/apache/directory/ldapstudio/browser/common/actions/ValueEditorPreferencesAction.java (added)
+++ directory/ldapstudio/trunk/ldapstudio-browser-common/src/main/java/org/apache/directory/ldapstudio/browser/common/actions/ValueEditorPreferencesAction.java Mon Apr  9 02:49:48 2007
@@ -0,0 +1,60 @@
+/*
+ *  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.common.actions;
+
+
+import org.apache.directory.ldapstudio.browser.common.BrowserCommonConstants;
+import org.eclipse.jface.action.Action;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.dialogs.PreferencesUtil;
+
+
+/**
+ * This Action opens the Value Editors Preference Page.
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ * @version $Rev$, $Date$
+ */
+public class ValueEditorPreferencesAction extends Action
+{
+    /**
+     * Creates a new instance of ValueEditorPreferencesAction.
+     */
+    public ValueEditorPreferencesAction()
+    {
+        super.setText( "Preferences..." );
+        super.setToolTipText( "Preferences..." );
+        super.setEnabled( true );
+    }
+
+
+    /**
+     * {@inheritDoc}
+     */
+    public void run()
+    {
+        Shell shell = Display.getCurrent().getActiveShell();
+        String pageId = BrowserCommonConstants.PREFERENCEPAGEID_VALUEEDITORS;
+        PreferencesUtil.createPreferenceDialogOn( shell, pageId, new String[]
+            { pageId }, null ).open();
+    }
+}

Added: directory/ldapstudio/trunk/ldapstudio-browser-common/src/main/java/org/apache/directory/ldapstudio/browser/common/actions/proxy/BrowserActionProxy.java
URL: http://svn.apache.org/viewvc/directory/ldapstudio/trunk/ldapstudio-browser-common/src/main/java/org/apache/directory/ldapstudio/browser/common/actions/proxy/BrowserActionProxy.java?view=auto&rev=526693
==============================================================================
--- directory/ldapstudio/trunk/ldapstudio-browser-common/src/main/java/org/apache/directory/ldapstudio/browser/common/actions/proxy/BrowserActionProxy.java (added)
+++ directory/ldapstudio/trunk/ldapstudio-browser-common/src/main/java/org/apache/directory/ldapstudio/browser/common/actions/proxy/BrowserActionProxy.java Mon Apr  9 02:49:48 2007
@@ -0,0 +1,204 @@
+/*
+ *  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.common.actions.proxy;
+
+
+import org.apache.directory.ldapstudio.browser.common.actions.BrowserAction;
+import org.apache.directory.ldapstudio.browser.common.actions.SelectionUtils;
+import org.apache.directory.ldapstudio.browser.core.events.BookmarkUpdateEvent;
+import org.apache.directory.ldapstudio.browser.core.events.BookmarkUpdateListener;
+import org.apache.directory.ldapstudio.browser.core.events.ConnectionUpdateEvent;
+import org.apache.directory.ldapstudio.browser.core.events.ConnectionUpdateListener;
+import org.apache.directory.ldapstudio.browser.core.events.EntryModificationEvent;
+import org.apache.directory.ldapstudio.browser.core.events.EntryUpdateListener;
+import org.apache.directory.ldapstudio.browser.core.events.EventRegistry;
+import org.apache.directory.ldapstudio.browser.core.events.SearchUpdateEvent;
+import org.apache.directory.ldapstudio.browser.core.events.SearchUpdateListener;
+
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.StructuredSelection;
+
+
+public abstract class BrowserActionProxy extends Action implements ISelectionChangedListener, EntryUpdateListener,
+    SearchUpdateListener, BookmarkUpdateListener, ConnectionUpdateListener
+{
+
+    protected BrowserAction action;
+
+    protected ISelectionProvider selectionProvider;
+
+
+    protected BrowserActionProxy( ISelectionProvider selectionProvider, BrowserAction action, int style )
+    {
+        super( action.getText(), style );
+        this.selectionProvider = selectionProvider;
+        this.action = action;
+
+        super.setImageDescriptor( action.getImageDescriptor() );
+        super.setActionDefinitionId( action.getCommandId() );
+
+        this.selectionProvider.addSelectionChangedListener( this );
+        // PlatformUI.getWorkbench().getActiveWorkbenchWindow().getSelectionService().addSelectionListener(this);
+
+        EventRegistry.addConnectionUpdateListener( this );
+        EventRegistry.addEntryUpdateListener( this );
+        EventRegistry.addSearchUpdateListener( this );
+        EventRegistry.addBookmarkUpdateListener( this );
+
+        this.updateAction();
+
+    }
+
+
+    protected BrowserActionProxy( ISelectionProvider selectionProvider, BrowserAction action )
+    {
+        this( selectionProvider, action, Action.AS_PUSH_BUTTON );
+    }
+
+
+    public void dispose()
+    {
+        EventRegistry.removeConnectionUpdateListener( this );
+        EventRegistry.removeEntryUpdateListener( this );
+        EventRegistry.removeSearchUpdateListener( this );
+        EventRegistry.removeBookmarkUpdateListener( this );
+        this.selectionProvider.removeSelectionChangedListener( this );
+        // PlatformUI.getWorkbench().getActiveWorkbenchWindow().getSelectionService().removeSelectionListener(this);
+
+        this.action.dispose();
+        this.action = null;
+    }
+
+
+    public boolean isDisposed()
+    {
+        return this.action == null;
+    }
+
+
+    public final void entryUpdated( EntryModificationEvent entryModificationEvent )
+    {
+        if ( !this.isDisposed() )
+        {
+            this.action.entryUpdated( entryModificationEvent );
+            this.updateAction();
+        }
+    }
+
+
+    public void searchUpdated( SearchUpdateEvent searchUpdateEvent )
+    {
+        if ( !this.isDisposed() )
+        {
+            this.action.searchUpdated( searchUpdateEvent );
+            this.updateAction();
+        }
+    }
+
+
+    public void bookmarkUpdated( BookmarkUpdateEvent bookmarkUpdateEvent )
+    {
+        if ( !this.isDisposed() )
+        {
+            this.action.bookmarkUpdated( bookmarkUpdateEvent );
+            this.updateAction();
+        }
+    }
+
+
+    public final void connectionUpdated( ConnectionUpdateEvent connectionUpdateEvent )
+    {
+        if ( !this.isDisposed() )
+        {
+            this.action.connectionUpdated( connectionUpdateEvent );
+            this.updateAction();
+        }
+    }
+
+
+    public void inputChanged( Object input )
+    {
+        if ( !this.isDisposed() )
+        {
+            this.action.setInput( input );
+            this.selectionChanged( new SelectionChangedEvent( this.selectionProvider, new StructuredSelection() ) );
+            // this.updateAction();
+        }
+    }
+
+
+    public void selectionChanged( SelectionChangedEvent event )
+    {
+        if ( !this.isDisposed() )
+        {
+            ISelection selection = event.getSelection();
+
+            this.action.setSelectedConnections( SelectionUtils.getConnections( selection ) );
+
+            this.action.setSelectedBrowserViewCategories( SelectionUtils.getBrowserViewCategories( selection ) );
+            this.action.setSelectedEntries( SelectionUtils.getEntries( selection ) );
+            this.action.setSelectedBrowserEntryPages( SelectionUtils.getBrowserEntryPages( selection ) );
+            this.action.setSelectedSearchResults( SelectionUtils.getSearchResults( selection ) );
+            this.action.setSelectedBrowserSearchResultPages( SelectionUtils.getBrowserSearchResultPages( selection ) );
+            this.action.setSelectedBookmarks( SelectionUtils.getBookmarks( selection ) );
+
+            this.action.setSelectedSearches( SelectionUtils.getSearches( selection ) );
+
+            this.action.setSelectedAttributes( SelectionUtils.getAttributes( selection ) );
+            this.action.setSelectedAttributeHierarchies( SelectionUtils.getAttributeHierarchie( selection ) );
+            this.action.setSelectedValues( SelectionUtils.getValues( selection ) );
+            this.updateAction();
+        }
+    }
+
+
+    public void updateAction()
+    {
+        if ( !this.isDisposed() )
+        {
+            this.setText( this.action.getText() );
+            this.setToolTipText( this.action.getText() );
+            this.setEnabled( this.action.isEnabled() );
+            this.setImageDescriptor( this.action.getImageDescriptor() );
+        }
+    }
+
+
+    public void run()
+    {
+        if ( !this.isDisposed() )
+        {
+            this.action.run();
+        }
+    }
+
+
+    public BrowserAction getAction()
+    {
+        return action;
+    }
+
+}

Added: directory/ldapstudio/trunk/ldapstudio-browser-common/src/main/java/org/apache/directory/ldapstudio/browser/common/actions/proxy/BrowserViewActionProxy.java
URL: http://svn.apache.org/viewvc/directory/ldapstudio/trunk/ldapstudio-browser-common/src/main/java/org/apache/directory/ldapstudio/browser/common/actions/proxy/BrowserViewActionProxy.java?view=auto&rev=526693
==============================================================================
--- directory/ldapstudio/trunk/ldapstudio-browser-common/src/main/java/org/apache/directory/ldapstudio/browser/common/actions/proxy/BrowserViewActionProxy.java (added)
+++ directory/ldapstudio/trunk/ldapstudio-browser-common/src/main/java/org/apache/directory/ldapstudio/browser/common/actions/proxy/BrowserViewActionProxy.java Mon Apr  9 02:49:48 2007
@@ -0,0 +1,42 @@
+/*
+ *  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.common.actions.proxy;
+
+
+import org.apache.directory.ldapstudio.browser.common.actions.BrowserAction;
+import org.eclipse.jface.viewers.Viewer;
+
+
+public class BrowserViewActionProxy extends BrowserActionProxy
+{
+
+    public BrowserViewActionProxy( Viewer viewer, BrowserAction action, int style )
+    {
+        super( viewer, action, style );
+    }
+
+
+    public BrowserViewActionProxy( Viewer viewer, BrowserAction action )
+    {
+        super( viewer, action );
+    }
+
+}

Added: directory/ldapstudio/trunk/ldapstudio-browser-common/src/main/java/org/apache/directory/ldapstudio/browser/common/actions/proxy/ConnectionViewActionProxy.java
URL: http://svn.apache.org/viewvc/directory/ldapstudio/trunk/ldapstudio-browser-common/src/main/java/org/apache/directory/ldapstudio/browser/common/actions/proxy/ConnectionViewActionProxy.java?view=auto&rev=526693
==============================================================================
--- directory/ldapstudio/trunk/ldapstudio-browser-common/src/main/java/org/apache/directory/ldapstudio/browser/common/actions/proxy/ConnectionViewActionProxy.java (added)
+++ directory/ldapstudio/trunk/ldapstudio-browser-common/src/main/java/org/apache/directory/ldapstudio/browser/common/actions/proxy/ConnectionViewActionProxy.java Mon Apr  9 02:49:48 2007
@@ -0,0 +1,42 @@
+/*
+ *  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.common.actions.proxy;
+
+
+import org.apache.directory.ldapstudio.browser.common.actions.BrowserAction;
+import org.eclipse.jface.viewers.Viewer;
+
+
+public class ConnectionViewActionProxy extends BrowserActionProxy
+{
+
+    public ConnectionViewActionProxy( Viewer viewer, BrowserAction action, int style )
+    {
+        super( viewer, action, style );
+    }
+
+
+    public ConnectionViewActionProxy( Viewer viewer, BrowserAction action )
+    {
+        super( viewer, action );
+    }
+
+}

Added: directory/ldapstudio/trunk/ldapstudio-browser-common/src/main/java/org/apache/directory/ldapstudio/browser/common/actions/proxy/EntryEditorActionProxy.java
URL: http://svn.apache.org/viewvc/directory/ldapstudio/trunk/ldapstudio-browser-common/src/main/java/org/apache/directory/ldapstudio/browser/common/actions/proxy/EntryEditorActionProxy.java?view=auto&rev=526693
==============================================================================
--- directory/ldapstudio/trunk/ldapstudio-browser-common/src/main/java/org/apache/directory/ldapstudio/browser/common/actions/proxy/EntryEditorActionProxy.java (added)
+++ directory/ldapstudio/trunk/ldapstudio-browser-common/src/main/java/org/apache/directory/ldapstudio/browser/common/actions/proxy/EntryEditorActionProxy.java Mon Apr  9 02:49:48 2007
@@ -0,0 +1,43 @@
+/*
+ *  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.common.actions.proxy;
+
+
+import org.apache.directory.ldapstudio.browser.common.actions.BrowserAction;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.Viewer;
+
+
+public class EntryEditorActionProxy extends BrowserActionProxy implements ISelectionChangedListener
+{
+
+    public EntryEditorActionProxy( Viewer viewer, BrowserAction action, int style )
+    {
+        super( viewer, action, style );
+    }
+
+
+    public EntryEditorActionProxy( Viewer viewer, BrowserAction action )
+    {
+        super( viewer, action );
+    }
+
+}

Added: directory/ldapstudio/trunk/ldapstudio-browser-common/src/main/java/org/apache/directory/ldapstudio/browser/common/dialogs/CredentialsDialog.java
URL: http://svn.apache.org/viewvc/directory/ldapstudio/trunk/ldapstudio-browser-common/src/main/java/org/apache/directory/ldapstudio/browser/common/dialogs/CredentialsDialog.java?view=auto&rev=526693
==============================================================================
--- directory/ldapstudio/trunk/ldapstudio-browser-common/src/main/java/org/apache/directory/ldapstudio/browser/common/dialogs/CredentialsDialog.java (added)
+++ directory/ldapstudio/trunk/ldapstudio-browser-common/src/main/java/org/apache/directory/ldapstudio/browser/common/dialogs/CredentialsDialog.java Mon Apr  9 02:49:48 2007
@@ -0,0 +1,54 @@
+/*
+ *  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.common.dialogs;
+
+
+import org.eclipse.jface.dialogs.IInputValidator;
+import org.eclipse.jface.dialogs.InputDialog;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Shell;
+
+
+public class CredentialsDialog extends InputDialog
+{
+
+    public CredentialsDialog( Shell parentShell, String dialogTitle, String dialogMessage, String initialValue,
+        IInputValidator validator )
+    {
+        super( parentShell, dialogTitle, dialogMessage, initialValue, validator );
+    }
+
+
+    protected void setShellStyle( int newShellStyle )
+    {
+        super.setShellStyle( newShellStyle );
+    }
+
+
+    protected Control createDialogArea( Composite parent )
+    {
+        Composite composite = ( Composite ) super.createDialogArea( parent );
+        super.getText().setEchoChar( '*' );
+        return composite;
+    }
+
+}

Added: directory/ldapstudio/trunk/ldapstudio-browser-common/src/main/java/org/apache/directory/ldapstudio/browser/common/dialogs/FilterDialog.java
URL: http://svn.apache.org/viewvc/directory/ldapstudio/trunk/ldapstudio-browser-common/src/main/java/org/apache/directory/ldapstudio/browser/common/dialogs/FilterDialog.java?view=auto&rev=526693
==============================================================================
--- directory/ldapstudio/trunk/ldapstudio-browser-common/src/main/java/org/apache/directory/ldapstudio/browser/common/dialogs/FilterDialog.java (added)
+++ directory/ldapstudio/trunk/ldapstudio-browser-common/src/main/java/org/apache/directory/ldapstudio/browser/common/dialogs/FilterDialog.java Mon Apr  9 02:49:48 2007
@@ -0,0 +1,150 @@
+/*
+ *  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.common.dialogs;
+
+
+import org.apache.directory.ldapstudio.browser.common.BrowserCommonActivator;
+import org.apache.directory.ldapstudio.browser.common.BrowserCommonConstants;
+import org.apache.directory.ldapstudio.browser.common.filtereditor.FilterSourceViewerConfiguration;
+import org.apache.directory.ldapstudio.browser.core.model.IConnection;
+import org.apache.directory.ldapstudio.browser.core.model.filter.parser.LdapFilterParser;
+
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.jface.text.Document;
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.jface.text.IRegion;
+import org.eclipse.jface.text.Region;
+import org.eclipse.jface.text.source.SourceViewer;
+import org.eclipse.jface.text.source.VerticalRuler;
+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.Shell;
+
+
+public class FilterDialog extends Dialog
+{
+
+    public static final String DIALOG_TITLE = "Filter Editor";
+
+    private String title;
+
+    private IConnection connection;
+
+    private SourceViewer sourceViewer;
+
+    private FilterSourceViewerConfiguration configuration;
+
+    private LdapFilterParser parser;
+
+    private String filter;
+
+
+    public FilterDialog( Shell parentShell, String title, String filter, IConnection connection )
+    {
+        super( parentShell );
+        this.title = title;
+        this.filter = filter;
+        this.connection = connection;
+        this.parser = new LdapFilterParser();
+        setShellStyle( SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL | SWT.RESIZE );
+    }
+
+
+    public String getFilter()
+    {
+        return this.filter;
+    }
+
+
+    protected void configureShell( Shell newShell )
+    {
+        super.configureShell( newShell );
+        newShell.setText( this.title != null ? this.title : DIALOG_TITLE );
+        //newShell.setImage( Activator.getDefault().getImage( BrowserWidgetsConstants.IMG_FILTER_EQUALS ) );
+    }
+
+
+    protected void buttonPressed( int buttonId )
+    {
+        if ( buttonId == IDialogConstants.OK_ID )
+        {
+            // this.filter = sourceViewer.getDocument().get();
+            this.parser.parse( sourceViewer.getDocument().get() );
+            this.filter = this.parser.getModel().toString();
+        }
+        else if ( buttonId == 987654321 )
+        {
+            IRegion region = new Region( 0, sourceViewer.getDocument().getLength() );
+            configuration.getContentFormatter( sourceViewer ).format( sourceViewer.getDocument(), region );
+        }
+
+        // call super implementation
+        super.buttonPressed( buttonId );
+    }
+
+
+    protected Control createButtonBar( Composite parent )
+    {
+        Composite composite = ( Composite ) super.createButtonBar( parent );
+        super.createButton( composite, 987654321, "Format", false );
+        return composite;
+    }
+
+
+    protected Control createDialogArea( Composite parent )
+    {
+        // Composite composite = parent;
+        Composite composite = ( Composite ) super.createDialogArea( parent );
+        GridData gd = new GridData( GridData.FILL_BOTH );
+        gd.widthHint = convertHorizontalDLUsToPixels( IDialogConstants.MINIMUM_MESSAGE_AREA_WIDTH );
+        gd.heightHint = convertHorizontalDLUsToPixels( IDialogConstants.MINIMUM_MESSAGE_AREA_WIDTH );
+        composite.setLayoutData( gd );
+
+        // create and configure source viewer
+        sourceViewer = new SourceViewer( composite, new VerticalRuler( 0 ), SWT.H_SCROLL | SWT.V_SCROLL );
+        sourceViewer.getControl().setLayoutData( new GridData( GridData.FILL_BOTH ) );
+        configuration = new FilterSourceViewerConfiguration( this.sourceViewer, this.parser, this.connection );
+        sourceViewer.configure( configuration );
+
+        // set document
+        IDocument document = new Document( this.filter );
+        sourceViewer.setDocument( document );
+
+        // preformat
+        IRegion region = new Region( 0, sourceViewer.getDocument().getLength() );
+        configuration.getContentFormatter( sourceViewer ).format( sourceViewer.getDocument(), region );
+
+        sourceViewer.getTextWidget().setFocus();
+
+        return composite;
+    }
+
+
+    protected boolean canHandleShellCloseEvent()
+    {
+        // proposal popup is opened, don't close dialog!
+        return super.canHandleShellCloseEvent();
+    }
+
+}

Added: directory/ldapstudio/trunk/ldapstudio-browser-common/src/main/java/org/apache/directory/ldapstudio/browser/common/dialogs/FilterWidgetDialog.java
URL: http://svn.apache.org/viewvc/directory/ldapstudio/trunk/ldapstudio-browser-common/src/main/java/org/apache/directory/ldapstudio/browser/common/dialogs/FilterWidgetDialog.java?view=auto&rev=526693
==============================================================================
--- directory/ldapstudio/trunk/ldapstudio-browser-common/src/main/java/org/apache/directory/ldapstudio/browser/common/dialogs/FilterWidgetDialog.java (added)
+++ directory/ldapstudio/trunk/ldapstudio-browser-common/src/main/java/org/apache/directory/ldapstudio/browser/common/dialogs/FilterWidgetDialog.java Mon Apr  9 02:49:48 2007
@@ -0,0 +1,138 @@
+/*
+ *  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.common.dialogs;
+
+
+import org.apache.directory.ldapstudio.browser.common.widgets.search.FilterWidget;
+import org.apache.directory.ldapstudio.browser.core.model.IConnection;
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.dialogs.IDialogConstants;
+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.Control;
+import org.eclipse.swt.widgets.Shell;
+
+
+/**
+ * This dialog is used to enter a LDAP filter.
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ * @version $Rev$, $Date$
+ */
+public class FilterWidgetDialog extends Dialog
+{
+
+    /** The title */
+    private String title;
+
+    /** The connection, used for attribute completion. */
+    private IConnection connection;
+
+    /** The filter widget. */
+    private FilterWidget filterWidget;
+
+    /** The filter. */
+    private String filter;
+
+
+    /**
+     * Creates a new instance of FilterWidgetDialog.
+     * 
+     * @param parentShell the parent shell
+     * @param title the dialog's title
+     * @param filter the inital filter
+     * @param connection the connection, used for attribute completion
+     */
+    public FilterWidgetDialog( Shell parentShell, String title, String filter, IConnection connection )
+    {
+        super( parentShell );
+        this.title = title;
+        this.filter = filter;
+        this.connection = connection;
+        setShellStyle( SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL | SWT.RESIZE );
+    }
+
+
+    /**
+     * Gets the filter.
+     * 
+     * @return the filter
+     */
+    public String getFilter()
+    {
+        return filter;
+    }
+
+
+    /**
+     * {@inheritDoc}
+     */
+    protected void configureShell( Shell newShell )
+    {
+        super.configureShell( newShell );
+        newShell.setText( title );
+        //newShell.setImage( Activator.getDefault().getImage( BrowserWidgetsConstants.IMG_FILTEREDITOR ) );
+    }
+
+
+    /**
+     * {@inheritDoc}
+     */
+    protected void buttonPressed( int buttonId )
+    {
+        if ( buttonId == IDialogConstants.OK_ID )
+        {
+            filter = filterWidget.getFilter();
+            filterWidget.saveDialogSettings();
+        }
+
+        // call super implementation
+        super.buttonPressed( buttonId );
+    }
+
+
+    /**
+     * {@inheritDoc}
+     */
+    protected Control createDialogArea( Composite parent )
+    {
+        Composite composite = ( Composite ) super.createDialogArea( parent );
+        GridData gd = new GridData( GridData.FILL_BOTH );
+        gd.widthHint = convertHorizontalDLUsToPixels( IDialogConstants.MINIMUM_MESSAGE_AREA_WIDTH );
+        composite.setLayoutData( gd );
+
+        Composite inner = new Composite( composite, SWT.NONE );
+        GridLayout gridLayout = new GridLayout( 2, false );
+        inner.setLayout( gridLayout );
+        gd = new GridData( GridData.FILL_BOTH | GridData.GRAB_HORIZONTAL );
+        gd.widthHint = convertHorizontalDLUsToPixels( IDialogConstants.MINIMUM_MESSAGE_AREA_WIDTH );
+        inner.setLayoutData( gd );
+
+        filterWidget = new FilterWidget( connection, filter != null ? filter : "" );
+        filterWidget.createWidget( inner );
+        filterWidget.setFocus();
+
+        return composite;
+    }
+
+}