/** * Copyright (c) 2013-2016 Angelo ZERR and Genuitec LLC. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Angelo Zerr <angelo.zerr@gmail.com> - initial API and implementation * Piotr Tomiak <piotr@genuitec.com> - refactoring of file management API */ package tern.eclipse.ide.core; import java.io.File; import java.io.IOException; import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.FileLocator; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Platform; import org.eclipse.core.runtime.Plugin; import org.eclipse.core.runtime.Status; import org.osgi.framework.BundleContext; import tern.TernResourcesManager; import tern.eclipse.ide.internal.core.TernFileConfigurationManager; import tern.eclipse.ide.internal.core.TernModuleInstallManager; import tern.eclipse.ide.internal.core.TernNatureAdaptersManager; import tern.eclipse.ide.internal.core.TernProjectLifecycleManager; import tern.eclipse.ide.internal.core.TernRepositoryManager; import tern.eclipse.ide.internal.core.TernServerTypeManager; import tern.eclipse.ide.internal.core.resources.IDEResourcesManager; import tern.eclipse.ide.internal.core.resources.IDETernProject; import tern.eclipse.ide.internal.core.resources.IDETernProjectSynchronizer; import tern.internal.resources.InternalTernResourcesManager; import tern.server.nodejs.process.NodejsProcessManager; import tern.websocket.provider.WebSocket; /** * The activator class controls the plug-in life cycle */ @SuppressWarnings("restriction") public class TernCorePlugin extends Plugin { public static final String PLUGIN_ID = "tern.eclipse.ide.core"; //$NON-NLS-1$ // The shared instance. private static TernCorePlugin plugin; /** * The constructor. */ public TernCorePlugin() { super(); plugin = this; } @Override public void start(BundleContext context) throws Exception { super.start(context); // Force to use Jetty WebSocket implementation. WebSocket.startup(); TernRepositoryManager.getManager().initialize(); IDETernProjectSynchronizer.getInstance().initialize(); TernFileConfigurationManager.getManager().initialize(); TernModuleInstallManager.getManager().initialize(); // set up resource management for IDE InternalTernResourcesManager resMan = InternalTernResourcesManager .getInstance(); resMan.setScriptTagRegionProvider(TernFileConfigurationManager .getManager()); resMan.setTernResourcesManagerDelegate(IDEResourcesManager .getInstance()); } /** * Returns the ternjs repository base directory. * * @return the ternjs repository base directory. * @throws IOException */ public static File getTernRepositoryBaseDir() throws IOException { return FileLocator.getBundleFile(Platform .getBundle(ternjs.Activator.PLUGIN_ID)); } @Override public void stop(BundleContext context) throws Exception { NodejsProcessManager.getInstance().dispose(); TernServerTypeManager.getManager().destroy(); TernNatureAdaptersManager.getManager().destroy(); TernFileConfigurationManager.getManager().destroy(); IDETernProjectSynchronizer.getInstance().dispose(); TernModuleInstallManager.getManager().destroy(); TernRepositoryManager.getManager().dispose(); plugin = null; super.stop(context); } /** * Return true if the given project contains a ".tern-project" file false * otherwise. * * @param project * Eclipse project. * @return true if the given project contains a ".tern-project" file and false * otherwise. */ public static boolean hasTernNature(IProject project) { return IDETernProject.hasTernNature(project); } /** * Returns the tern project of the given eclipse project and throws * exception if the eclipse project has not tern nature. * * @param project * eclipse project. * @return the tern project of the given eclipse projectand throws exception * if the eclipse project has not tern nature. * @throws CoreException */ public static IIDETernProject getTernProject(IProject project, boolean force) throws CoreException { try { return (IIDETernProject) TernResourcesManager.getTernProject( project, force); } catch (IOException e) { throw new CoreException(new Status(IStatus.ERROR, TernCorePlugin.PLUGIN_ID, "The project " + project.getName() + " cannot be converted as tern project.", e)); } } /** * Returns the tern project of the given eclipse project and throws * exception if the eclipse project has not tern nature. * * @param project * eclipse project. * @return the tern project of the given eclipse projectand throws exception * if the eclipse project has not tern nature. * @throws CoreException */ public static IIDETernProject getTernProject(IProject project) throws CoreException { IIDETernProject result = (IIDETernProject) TernResourcesManager .getTernProject(project); if (result == null) { throw new CoreException(new Status(IStatus.ERROR, TernCorePlugin.PLUGIN_ID, "The project " + project.getName() + " is not a tern project.")); } return result; } /** * Returns the shared instance * * @return the shared instance */ public static TernCorePlugin getDefault() { return plugin; } /** * Returns the instance of the tern server type manager. * * @return the instance of the tern server type manager. */ public static ITernServerTypeManager getTernServerTypeManager() { return TernServerTypeManager.getManager(); } public static void addTernProjectLifeCycleListener( ITernProjectLifecycleListener listener) { TernProjectLifecycleManager.getManager() .addTernProjectLifeCycleListener(listener); } public static void removeTernProjectLifeCycleListener( ITernProjectLifecycleListener listener) { TernProjectLifecycleManager.getManager() .removeTernProjectLifeCycleListener(listener); } public static ITernRepositoryManager getTernRepositoryManager() { return TernRepositoryManager.getManager(); } }