/********************************************************************************
 * Copyright (c) 2011-2017 Red Hat Inc. and/or its affiliates and others
 *
 * This program and the accompanying materials are made available under the
 * terms of the Eclipse Public License 1.0 which is available at
 * http://www.eclipse.org/legal/epl-v10.html.
 *
 * SPDX-License-Identifier: EPL-1.0
 ********************************************************************************/
package org.eclipse.ceylon.test.eclipse.plugin;

import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.jface.resource.ImageRegistry;
import org.eclipse.ui.plugin.AbstractUIPlugin;
import org.osgi.framework.BundleContext;

import org.eclipse.ceylon.test.eclipse.plugin.launch.CeylonTestLaunchesListener;
import org.eclipse.ceylon.test.eclipse.plugin.model.TestRunContainer;

public class CeylonTestPlugin extends AbstractUIPlugin {

    public static final String PLUGIN_ID = "org.eclipse.ceylon.test.eclipse.plugin";
    
    public static final String CEYLON_TEST_MODULE_NAME = "ceylon.test";
    public static final String CEYLON_TEST_MODULE_DEFAULT_VERSION = "1.0.0";
    
    public static final String LAUNCH_CONFIG_TYPE = PLUGIN_ID + ".ceylonTestLaunchConfigurationType";
    public static final String LAUNCH_CONFIG_TYPE_JS = PLUGIN_ID + ".ceylonTestJsLaunchConfigurationType";
    public static final String LAUNCH_CONFIG_ENTRIES_KEY = PLUGIN_ID + ".entries";
    public static final String LAUNCH_CONFIG_PORT = PLUGIN_ID + ".port";
    
    public static final String PREF_SHOW_COMPLETE_DESCRIPTION = PLUGIN_ID + ".showCompleteDescription";
    public static final String PREF_SHOW_FAILURES_ONLY = PLUGIN_ID + ".showFailuresOnly";
    public static final String PREF_SHOW_TESTS_IN_HIERARCHY = PLUGIN_ID + ".showTestsInHierarchy";
    public static final String PREF_SHOW_TESTS_ELAPSED_TIME = PLUGIN_ID + ".showTestsElapsedTime";
    public static final String PREF_SCROLL_LOCK = PLUGIN_ID + ".scrollLock";
    public static final String PREF_STACK_TRACE_FILTER = PLUGIN_ID + ".stackTraceFilter";

    private static CeylonTestPlugin plugin;
    
    private TestRunContainer model;

    @Override
    public void start(BundleContext context) throws Exception {
        super.start(context);
        plugin = this;
        model = new TestRunContainer();
        CeylonTestLaunchesListener.install();
    }

    @Override
    public void stop(BundleContext context) throws Exception {
        CeylonTestLaunchesListener.uninstall();
        model = null;
        plugin = null;
        super.stop(context);
    }
    
    @Override
    protected void initializeImageRegistry(ImageRegistry imageRegistry) {
        CeylonTestImageRegistry.init(imageRegistry);
    }

    public static CeylonTestPlugin getDefault() {
        return plugin;
    }

    public TestRunContainer getModel() {
        return model;
    }

    public static void logInfo(String msg) {
        plugin.getLog().log(new Status(IStatus.INFO, PLUGIN_ID, msg));
    }

    public static void logInfo(String msg, Throwable e) {
        plugin.getLog().log(new Status(IStatus.INFO, PLUGIN_ID, msg, e));
    }

    public static void logError(String msg, Throwable e) {
        plugin.getLog().log(new Status(IStatus.ERROR, PLUGIN_ID, msg, e));
    }

}