Package org.locationtech.udig.project.ui.internal

Source Code of org.locationtech.udig.project.ui.internal.ProjectUIPlugin

/* uDig - User Friendly Desktop Internet GIS client
* http://udig.refractions.net
* (C) 2004-2012, Refractions Research Inc.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* (http://www.eclipse.org/legal/epl-v10.html), and the Refractions BSD
* License v1.0 (http://udig.refractions.net/files/bsd3-v10.html).
*/
package org.locationtech.udig.project.ui.internal;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import org.locationtech.udig.core.AbstractUdigUIPlugin;
import org.locationtech.udig.project.ui.feature.FeaturePanelProcessor;

import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.core.runtime.IExtension;
import org.eclipse.core.runtime.IExtensionPoint;
import org.eclipse.core.runtime.IExtensionRegistry;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Path;
import org.eclipse.core.runtime.Platform;
import org.eclipse.core.runtime.Status;
import org.eclipse.emf.common.notify.AdapterFactory;
import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
import org.eclipse.emf.edit.provider.ReflectiveItemProviderAdapterFactory;
import org.eclipse.emf.edit.ui.provider.AdapterFactoryContentProvider;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.IStatusLineManager;
import org.eclipse.jface.action.IToolBarManager;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.ui.IActionBars;
import org.eclipse.ui.views.properties.IPropertySheetPage;
import org.eclipse.ui.views.properties.PropertySheetPage;
import org.osgi.framework.BundleContext;

/**
* The Plugin class for the org.locationtech.udig.project plugin. Provides access to plugin
* resources.
*
* @author Jesse Eichar
* @version $Revision: 1.9 $
*/
public class ProjectUIPlugin extends AbstractUdigUIPlugin {

    /**
     * The default speed for mouse double click in milliseconds.
     */
    public static final int DEFAULT_DOUBLECLICK_SPEED_MILLIS = 1000;

    private static final String ICONS_PATH = "icons/"; //$NON-NLS-1$

    /** The plugin ID */
    public static final String ID = "org.locationtech.udig.project.ui"; //$NON-NLS-1$

    /** Preference store for the last directory open by the file selection dialog */
    public static final String PREF_OPEN_DIALOG_DIRECTORY = "udig.preferences.openDialog.lastDirectory"; //$NON-NLS-1$

    /**
     * The maximum number of resources per service that can be added to a map without asking the
     * user for permission.
     */
    public static final int MAX_RESOURCES_IN_SERVICE = 1;

  private static ProjectUIPlugin INSTANCE;

    List<AdapterFactory> adapterFactories;

    private static final String ADAPTER_FACTORIES_ID = "org.locationtech.udig.project.ui.itemProviderAdapterFactories"; //$NON-NLS-1$

    public static final String MOUSE_SPEED_KEY = "MOUSE_SPEED_KEY";

    private PropertySheetPage propertySheetPage;

    /**
     * creates a plugin instance
     */
    public ProjectUIPlugin() {
        super();
        INSTANCE = this;
    }

    FeatureEditorExtensionProcessor featureEditProcessor = null;
   
    FeaturePanelProcessor featurePanelProcessor = null;
   
    /**
     * @see org.osgi.framework.BundleActivator#start(org.osgi.framework.BundleContext)
     */
    public void start( BundleContext context ) throws Exception {
        super.start(context);
       
        new ActiveMapTracker().startup();
    }

    /**
     * Returns the system created plugin object
     *
     * @return the plugin object
     */
    public static ProjectUIPlugin getDefault() {
        return INSTANCE;
    }

    /**
     * Returns the ToolManager singleton.
     *
     * @return the ToolManager singleton.
     * @deprecated
     */
    // public ToolManager getToolManager() {
    // return UDIGApplicationUI.getToolManager()
    // }
    /**
     * @return Returns the adapterFactories.
     */
    public List<AdapterFactory> getAdapterFactories() {
        if (adapterFactories == null) {
            adapterFactories = new ArrayList<AdapterFactory>();

            IExtensionRegistry registry = Platform.getExtensionRegistry();
            IExtensionPoint extensionPoint = registry.getExtensionPoint(ADAPTER_FACTORIES_ID);
            IExtension[] extensions = extensionPoint.getExtensions();

            for( int i = 0; i < extensions.length; i++ ) {
                IConfigurationElement[] elements = extensions[i].getConfigurationElements();

                for( int j = 0; j < elements.length; j++ ) {
                    try {
                        Object adapterFactory = elements[j].createExecutableExtension("class"); //$NON-NLS-1$
                        if (adapterFactory instanceof AdapterFactory) {
                            adapterFactories.add((AdapterFactory) adapterFactory);
                        }
                    } catch (CoreException e) {
                        e.printStackTrace();
                    }
                }
            }

        }
        return Collections.unmodifiableList(adapterFactories);
    }

    Object mutex = new Object();

    /**
     * This accesses a cached version of the property sheet. <!-- begin-user-doc --> <!--
     * end-user-doc -->
     *
     * @return An IProperty page for the selected object
     */
    public IPropertySheetPage getPropertySheetPage() {
        if (propertySheetPage == null) {
            synchronized (mutex) {

                propertySheetPage = new PropertySheetPage(){

                    public void makeContributions( IMenuManager menuManager,
                            IToolBarManager toolBarManager, IStatusLineManager statusLineManager ) {
                        super.makeContributions(menuManager, toolBarManager, statusLineManager);
                    }

                    public void setActionBars( IActionBars actionBars ) {
                        super.setActionBars(actionBars);
                    }
                };
                propertySheetPage.setPropertySourceProvider(new AdapterFactoryContentProvider(
                        getAdapterFactory()));
            }
        }

        return propertySheetPage;
    }

    private AdapterFactory adapterFactory;

    /**
     * Returns the adapterfactory instance.
     *
     * @return the adapterfactory instance.
     */
    public AdapterFactory getAdapterFactory() {
        if (adapterFactory == null) {
            synchronized (mutex) {
                List<AdapterFactory> factories = new ArrayList<AdapterFactory>();

                factories.addAll(ProjectUIPlugin.getDefault().getAdapterFactories());

                // This one should be added last
                factories.add(new ReflectiveItemProviderAdapterFactory());

                adapterFactory = new ComposedAdapterFactory(factories);
            }
        }
        return adapterFactory;
    }

    /**
     * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
     */

    public void stop( BundleContext context ) throws Exception {
        if (featureEditProcessor != null){
            featureEditProcessor.stopPartListener();
        }
        if (LayerGeneratedGlyphDecorator.getInstance() != null)
            LayerGeneratedGlyphDecorator.getInstance().dispose();
        super.stop(context);
    }

    /**
     * Gets the FeatureEditorProcessor instance.
     *
     * @return
     */
    public FeatureEditorExtensionProcessor getFeatureEditProcessor() {
        if (featureEditProcessor == null) {
            featureEditProcessor = new FeatureEditorExtensionProcessor();
            featureEditProcessor.startPartListener();
        }
        return featureEditProcessor;
    }
   
    /**
     * Gets the FeatureEditorProcessor instance.
     *
     * @return
     */
    public FeaturePanelProcessor getFeaturePanelProcessor() {
        if (featurePanelProcessor == null){
            featurePanelProcessor = new FeaturePanelProcessor();
        }
        return featurePanelProcessor;
    }

    /**
     * Writes an info log in the plugin's log.
     * <p>
     * This should be used for user level messages.
     * </p>
     */
    public static void log( String message2, Throwable e ) {
        String message=message2;
        if (message == null)
            message = Messages.ProjectUIPlugin_error + e;
        getDefault().getLog().log(new Status(IStatus.INFO, ID, IStatus.OK, message, e));
    }
    /**
     * Messages that only engage if getDefault().isDebugging()
     * <p>
     * It is much prefered to do this:<pre><code>
     * private static final String RENDERING = "org.locationtech.udig.project/render/trace";
     * if( ProjectUIPlugin.getDefault().isDebugging() && "true".equalsIgnoreCase( RENDERING ) ){
     *      System.out.println( "your message here" );
     *
     */
    private static void trace( String message, Throwable e ) {
        if (getDefault().isDebugging()) {
            if (message != null){
                System.out.println(message);
            }
            if (e != null){
                e.printStackTrace(System.out);
            }
        }
    }
    /**
     * Messages that only engage if getDefault().isDebugging() and the trace option traceID is true.
     * Available trace options can be found in the Trace class.  (They must also be part of the .options file)
     */
    public static void trace( String traceID, Class caller, String message, Throwable e ) {
        if (isDebugging(traceID)) {
            trace(caller, message, e);
        }
    }

    /**
     * Adds the name of the caller class to the message.
     *
     * @param caller class of the object doing the trace.
     * @param message tracing message, may be null.
     * @param e exception, may be null.
     */
    public static void trace( Class caller, String message, Throwable e ) {
        trace(caller.getSimpleName()+": "+message, e); //$NON-NLS-1$ //$NON-NLS-2$
    }
   
    /**
     * Performs the Platform.getDebugOption true check on the provided trace
     * <p>
     * Note: ProjectUIPlugin.getDefault().isDebugging() must also be on.
     * <ul>
     * <li>Trace.RENDER - trace rendering progress
     * </ul>
     * </p>
     *
     * @param trace currently only RENDER is defined
     */
    public static boolean isDebugging( final String trace ) {
        return getDefault().isDebugging()
                && "true".equalsIgnoreCase(Platform.getDebugOption(trace)); //$NON-NLS-1$   
    }
    /**
     * The delay used to determine double click speed.
     *
     * <p>
     * The delay defaults to 100 milliseconds.
     * </p>
     *
     * @return the milliseconds used for the double-click speed.
     */
    public int getDoubleClickSpeed() {
        IPreferenceStore store = ProjectUIPlugin.getDefault().getPreferenceStore();
        int mouseSpeed = store.getInt(MOUSE_SPEED_KEY);
        if (mouseSpeed == 0) {
            mouseSpeed = DEFAULT_DOUBLECLICK_SPEED_MILLIS;
        }
        return mouseSpeed;
    }

  /* (non-Javadoc)
   * @see org.locationtech.udig.core.AbstractUdigUIPlugin#getIconPath()
   */
  public IPath getIconPath() {
    return new Path(ICONS_PATH);
  }

}
TOP

Related Classes of org.locationtech.udig.project.ui.internal.ProjectUIPlugin

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.