You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by pa...@apache.org on 2011/01/18 19:05:25 UTC

svn commit: r1060493 - in /directory/studio/trunk/plugins/apacheds.configuration.v2/src/main/java/org/apache/directory/studio/apacheds/configuration/v2: editor/ jobs/

Author: pamarcelot
Date: Tue Jan 18 18:05:24 2011
New Revision: 1060493

URL: http://svn.apache.org/viewvc?rev=1060493&view=rev
Log:
Added an Error Page which replaces the Loading Page in case of error.
The Tab Folder is now hidden when there's only one Page in the Form Editor.

Added:
    directory/studio/trunk/plugins/apacheds.configuration.v2/src/main/java/org/apache/directory/studio/apacheds/configuration/v2/editor/ErrorPage.java
Modified:
    directory/studio/trunk/plugins/apacheds.configuration.v2/src/main/java/org/apache/directory/studio/apacheds/configuration/v2/editor/LoadingPage.java
    directory/studio/trunk/plugins/apacheds.configuration.v2/src/main/java/org/apache/directory/studio/apacheds/configuration/v2/editor/OverviewPage.java
    directory/studio/trunk/plugins/apacheds.configuration.v2/src/main/java/org/apache/directory/studio/apacheds/configuration/v2/editor/ServerConfigurationEditor.java
    directory/studio/trunk/plugins/apacheds.configuration.v2/src/main/java/org/apache/directory/studio/apacheds/configuration/v2/jobs/LoadConfigurationRunnable.java

Added: directory/studio/trunk/plugins/apacheds.configuration.v2/src/main/java/org/apache/directory/studio/apacheds/configuration/v2/editor/ErrorPage.java
URL: http://svn.apache.org/viewvc/directory/studio/trunk/plugins/apacheds.configuration.v2/src/main/java/org/apache/directory/studio/apacheds/configuration/v2/editor/ErrorPage.java?rev=1060493&view=auto
==============================================================================
--- directory/studio/trunk/plugins/apacheds.configuration.v2/src/main/java/org/apache/directory/studio/apacheds/configuration/v2/editor/ErrorPage.java (added)
+++ directory/studio/trunk/plugins/apacheds.configuration.v2/src/main/java/org/apache/directory/studio/apacheds/configuration/v2/editor/ErrorPage.java Tue Jan 18 18:05:24 2011
@@ -0,0 +1,168 @@
+/*
+ *  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.apacheds.configuration.v2.editor;
+
+
+import java.io.PrintWriter;
+import java.io.StringWriter;
+
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.ui.forms.IManagedForm;
+import org.eclipse.ui.forms.editor.FormEditor;
+import org.eclipse.ui.forms.editor.FormPage;
+import org.eclipse.ui.forms.widgets.FormToolkit;
+import org.eclipse.ui.forms.widgets.ScrolledForm;
+
+
+/**
+ * This class represents the Error Page of the Server Configuration Editor.
+ *
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ */
+public class ErrorPage extends FormPage
+{
+    /** The Page ID*/
+    public static final String ID = ErrorPage.class.getName();
+
+    /** The Page Title */
+    private static final String TITLE = "Error opening the editor";
+
+    private static final String DETAILS_CLOSED = NLS.bind( "{0} >>", "Details" );
+    private static final String DETAILS_OPEN = NLS.bind( "<< {0}", "Details" );
+
+    /** The exception */
+    private Exception exception;
+
+    /** The flag indicating that the details are shown */
+    private boolean detailsShown = false;
+
+    // UI Controls
+    private FormToolkit toolkit;
+    private Composite parent;
+    private Button detailsButton;
+
+    private Text detailsText;
+
+
+    /**
+     * Creates a new instance of ErrorPage.
+     *
+     * @param editor
+     *      the associated editor
+     */
+    public ErrorPage( FormEditor editor, Exception exception )
+    {
+        super( editor, ID, TITLE );
+        this.exception = exception;
+    }
+
+
+    /**
+     * {@inheritDoc}
+     */
+    protected void createFormContent( IManagedForm managedForm )
+    {
+        ScrolledForm form = managedForm.getForm();
+        form.setText( "Error opening the editor" );
+        form.setImage( Display.getCurrent().getSystemImage( SWT.ICON_ERROR ) );
+
+        parent = form.getBody();
+        GridLayout gl = new GridLayout( 2, false );
+        gl.marginHeight = 10;
+        gl.marginWidth = 10;
+        parent.setLayout( gl );
+        parent.setLayoutData( new GridData( SWT.FILL, SWT.FILL, true, true ) );
+
+        toolkit = managedForm.getToolkit();
+        toolkit.decorateFormHeading( form.getForm() );
+
+        // Error Label
+        Label errorLabel = toolkit.createLabel( parent,
+            NLS.bind( "Could not open the editor: {0}", exception.getMessage() ) );
+        errorLabel.setLayoutData( new GridData( SWT.FILL, SWT.NONE, true, false ) );
+
+        // Details Button
+        detailsButton = new Button( parent, SWT.PUSH );
+        detailsButton.setText( DETAILS_CLOSED );
+        detailsButton.setLayoutData( new GridData( SWT.RIGHT, SWT.NONE, false, false ) );
+        detailsButton.addSelectionListener( new SelectionAdapter()
+        {
+            @Override
+            public void widgetSelected( SelectionEvent e )
+            {
+                showOrHideDetailsView();
+            }
+        } );
+    }
+
+
+    /**
+     * Shows or hides the details view.
+     */
+    private void showOrHideDetailsView()
+    {
+        if ( detailsShown )
+        {
+            detailsButton.setText( DETAILS_CLOSED );
+
+            detailsText.dispose();
+        }
+        else
+        {
+            detailsButton.setText( DETAILS_OPEN );
+
+            detailsText = toolkit.createText( parent, getStackTrace( exception ), SWT.H_SCROLL | SWT.V_SCROLL );
+            detailsText.setLayoutData( new GridData( SWT.FILL, SWT.FILL, true, true, 2, 1 ) );
+        }
+
+        parent.layout( true, true );
+
+        detailsShown = !detailsShown;
+    }
+
+
+    /**
+     * Gets the stackTrace of the given exception as a string.
+     *
+     * @param e
+     *      the exception
+     * @return
+     *      the stackTrace of the given exception as a string
+     */
+    private String getStackTrace( Exception e )
+    {
+        StringWriter sw = new StringWriter();
+        PrintWriter pw = new PrintWriter( sw, true );
+        e.printStackTrace( pw );
+        pw.flush();
+        sw.flush();
+        return sw.toString();
+    }
+}

Modified: directory/studio/trunk/plugins/apacheds.configuration.v2/src/main/java/org/apache/directory/studio/apacheds/configuration/v2/editor/LoadingPage.java
URL: http://svn.apache.org/viewvc/directory/studio/trunk/plugins/apacheds.configuration.v2/src/main/java/org/apache/directory/studio/apacheds/configuration/v2/editor/LoadingPage.java?rev=1060493&r1=1060492&r2=1060493&view=diff
==============================================================================
--- directory/studio/trunk/plugins/apacheds.configuration.v2/src/main/java/org/apache/directory/studio/apacheds/configuration/v2/editor/LoadingPage.java (original)
+++ directory/studio/trunk/plugins/apacheds.configuration.v2/src/main/java/org/apache/directory/studio/apacheds/configuration/v2/editor/LoadingPage.java Tue Jan 18 18:05:24 2011
@@ -34,7 +34,7 @@ import org.eclipse.ui.forms.widgets.Scro
 
 
 /**
- * This class represents the General Page of the Server Configuration Editor.
+ * This class represents the Loading Page of the Server Configuration Editor.
  *
  * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
  */

Modified: directory/studio/trunk/plugins/apacheds.configuration.v2/src/main/java/org/apache/directory/studio/apacheds/configuration/v2/editor/OverviewPage.java
URL: http://svn.apache.org/viewvc/directory/studio/trunk/plugins/apacheds.configuration.v2/src/main/java/org/apache/directory/studio/apacheds/configuration/v2/editor/OverviewPage.java?rev=1060493&r1=1060492&r2=1060493&view=diff
==============================================================================
--- directory/studio/trunk/plugins/apacheds.configuration.v2/src/main/java/org/apache/directory/studio/apacheds/configuration/v2/editor/OverviewPage.java (original)
+++ directory/studio/trunk/plugins/apacheds.configuration.v2/src/main/java/org/apache/directory/studio/apacheds/configuration/v2/editor/OverviewPage.java Tue Jan 18 18:05:24 2011
@@ -62,7 +62,7 @@ public class OverviewPage extends Server
     /** The Page Title */
     private static final String TITLE = "Overview";
 
-    // UI Fields
+    // UI Controls
     private Button enableLdapCheckbox;
     private Text ldapPortText;
     private Button enableLdapsCheckbox;

Modified: directory/studio/trunk/plugins/apacheds.configuration.v2/src/main/java/org/apache/directory/studio/apacheds/configuration/v2/editor/ServerConfigurationEditor.java
URL: http://svn.apache.org/viewvc/directory/studio/trunk/plugins/apacheds.configuration.v2/src/main/java/org/apache/directory/studio/apacheds/configuration/v2/editor/ServerConfigurationEditor.java?rev=1060493&r1=1060492&r2=1060493&view=diff
==============================================================================
--- directory/studio/trunk/plugins/apacheds.configuration.v2/src/main/java/org/apache/directory/studio/apacheds/configuration/v2/editor/ServerConfigurationEditor.java (original)
+++ directory/studio/trunk/plugins/apacheds.configuration.v2/src/main/java/org/apache/directory/studio/apacheds/configuration/v2/editor/ServerConfigurationEditor.java Tue Jan 18 18:05:24 2011
@@ -43,6 +43,8 @@ import org.apache.directory.studio.ldapb
 import org.apache.directory.studio.ldapbrowser.core.model.IBrowserConnection;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.jface.operation.IRunnableWithProgress;
+import org.eclipse.swt.custom.CTabFolder;
+import org.eclipse.swt.widgets.Composite;
 import org.eclipse.ui.IEditorInput;
 import org.eclipse.ui.IEditorSite;
 import org.eclipse.ui.IPathEditorInput;
@@ -123,6 +125,31 @@ public class ServerConfigurationEditor e
             // TODO Auto-generated catch block
             e.printStackTrace();
         }
+
+        showOrHideTabFolder();
+    }
+
+
+    /**
+     * Shows or hides the tab folder depending on
+     * the number of pages.
+     */
+    private void showOrHideTabFolder()
+    {
+        Composite container = getContainer();
+        if ( container instanceof CTabFolder )
+        {
+            CTabFolder folder = ( CTabFolder ) container;
+            if ( getPageCount() == 1 )
+            {
+                folder.setTabHeight( 0 );
+            }
+            else
+            {
+                folder.setTabHeight( -1 );
+            }
+            folder.layout( true, true );
+        }
     }
 
 
@@ -445,7 +472,8 @@ public class ServerConfigurationEditor e
 
 
     /**
-     * This method is called by the job responsible for loading the configuration.
+     * This method is called by the job responsible for loading the 
+     * configuration when it has been fully and correctly loaded.
      *
      * @param configBean
      *      the loaded configuration bean
@@ -459,6 +487,23 @@ public class ServerConfigurationEditor e
 
 
     /**
+     * This method is called by the job responsible for loading the
+     * configuration when it failed to load it.
+     *
+     * @param exception
+     *      the exception
+     */
+    public void configurationLoadFailed( Exception exception )
+    {
+        // Overriding the default dirty setting 
+        // (especially in the case of a new configuration file)
+        setDirty( false );
+
+        hideLoadingPageAndDisplayErrorPage( exception );
+    }
+
+
+    /**
      * Hides the loading page and displays the standard configuration pages.
      */
     private void hideLoadingPageAndDisplayConfigPages()
@@ -488,6 +533,37 @@ public class ServerConfigurationEditor e
 
         // Activating the first page
         setActivePage( 0 );
+
+        showOrHideTabFolder();
+    }
+
+
+    /**
+     * Hides the loading page and displays the error page.
+     *
+     * @param exception
+     *      the exception
+     */
+    private void hideLoadingPageAndDisplayErrorPage( Exception exception )
+    {
+        // Removing the loading page
+        removePage( 0 );
+
+        // Adding the error page
+        try
+        {
+            addPage( new ErrorPage( this, exception ) );
+        }
+        catch ( PartInitException e )
+        {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        }
+
+        // Activating the first page
+        setActivePage( 0 );
+
+        showOrHideTabFolder();
     }
 
 

Modified: directory/studio/trunk/plugins/apacheds.configuration.v2/src/main/java/org/apache/directory/studio/apacheds/configuration/v2/jobs/LoadConfigurationRunnable.java
URL: http://svn.apache.org/viewvc/directory/studio/trunk/plugins/apacheds.configuration.v2/src/main/java/org/apache/directory/studio/apacheds/configuration/v2/jobs/LoadConfigurationRunnable.java?rev=1060493&r1=1060492&r2=1060493&view=diff
==============================================================================
--- directory/studio/trunk/plugins/apacheds.configuration.v2/src/main/java/org/apache/directory/studio/apacheds/configuration/v2/jobs/LoadConfigurationRunnable.java (original)
+++ directory/studio/trunk/plugins/apacheds.configuration.v2/src/main/java/org/apache/directory/studio/apacheds/configuration/v2/jobs/LoadConfigurationRunnable.java Tue Jan 18 18:05:24 2011
@@ -133,8 +133,15 @@ public class LoadConfigurationRunnable i
         }
         catch ( Exception e )
         {
-            // Reporting the error to the monitor
-            monitor.reportError( e );
+            // Reporting the error to the editor
+            final Exception exception = e;
+            Display.getDefault().asyncExec( new Runnable()
+            {
+                public void run()
+            {
+                editor.configurationLoadFailed( exception );
+            }
+            } );
         }
     }