blob: a420bfb1b1b325a90432ab55e64dfbfef73ee5ff [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2004, 2014 Tasktop Technologies and others.
* 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:
* Tasktop Technologies - initial API and implementation
*******************************************************************************/
package org.eclipse.mylyn.internal.team.ui;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.mylyn.commons.core.StatusHandler;
import org.eclipse.mylyn.internal.team.ui.templates.CommitTemplateManager;
import org.eclipse.mylyn.team.ui.AbstractActiveChangeSetProvider;
import org.eclipse.mylyn.team.ui.AbstractContextChangeSetManager;
import org.eclipse.team.internal.core.subscribers.ActiveChangeSetManager;
import org.eclipse.ui.IStartup;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.plugin.AbstractUIPlugin;
import org.osgi.framework.BundleContext;
/**
* The activator class controls the plug-in life cycle
*/
// TODO 3.9 change the name of this class to avoid the word "focused"
public class FocusedTeamUiPlugin extends AbstractUIPlugin {
public static final String ID_PLUGIN = "org.eclipse.mylyn.team.ui"; //$NON-NLS-1$
private static FocusedTeamUiPlugin INSTANCE;
private final Set<AbstractContextChangeSetManager> changeSetManagers = new HashSet<AbstractContextChangeSetManager>();
private final Map<ActiveChangeSetManager, AbstractActiveChangeSetProvider> activeChangeSetProviders = new HashMap<ActiveChangeSetManager, AbstractActiveChangeSetProvider>();
private CommitTemplateManager commitTemplateManager;
public static final String CHANGE_SET_MANAGE = "org.eclipse.mylyn.team.changesets.manage"; //$NON-NLS-1$
public static final String COMMIT_TEMPLATE = "org.eclipse.mylyn.team.commit.template"; //$NON-NLS-1$
public static final String DEFAULT_COMMIT_TEMPLATE = "${task.key}: ${task.description}\n\nTask-Url: ${task.url}"; //$NON-NLS-1$
public static class FocusedTeamUiStartup implements IStartup {
public void earlyStartup() {
// ignore
}
}
public FocusedTeamUiPlugin() {
INSTANCE = this;
}
@Override
public void start(BundleContext context) throws Exception {
super.start(context);
initPreferenceDefaults();
commitTemplateManager = new CommitTemplateManager();
PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() {
public void run() {
try {
FocusedTeamExtensionPointReader extensionPointReader = new FocusedTeamExtensionPointReader();
extensionPointReader.readExtensions();
if (getPreferenceStore().getBoolean(CHANGE_SET_MANAGE)) {
for (AbstractContextChangeSetManager changeSetManager : changeSetManagers) {
changeSetManager.enable();
}
}
} catch (Exception e) {
StatusHandler.log(new Status(IStatus.ERROR, FocusedTeamUiPlugin.ID_PLUGIN,
"Mylyn Team start failed", e)); //$NON-NLS-1$
}
}
});
}
@Override
public void stop(BundleContext context) throws Exception {
INSTANCE = null;
super.stop(context);
for (AbstractContextChangeSetManager changeSetManager : changeSetManagers) {
changeSetManager.disable();
}
}
private void initPreferenceDefaults() {
getPreferenceStore().setDefault(CHANGE_SET_MANAGE, true);
getPreferenceStore().setDefault(COMMIT_TEMPLATE, DEFAULT_COMMIT_TEMPLATE);
}
public static FocusedTeamUiPlugin getDefault() {
return INSTANCE;
}
public void addContextChangeSetManager(AbstractContextChangeSetManager changeSetManager) {
changeSetManagers.add(changeSetManager);
}
public boolean removeContextChangeSetManager(AbstractContextChangeSetManager changeSetManager) {
return changeSetManagers.remove(changeSetManager);
}
public void addActiveChangeSetProvider(AbstractActiveChangeSetProvider provider) {
ActiveChangeSetManager manager = provider.getActiveChangeSetManager();
if (manager != null) {
activeChangeSetProviders.put(manager, provider);
}
}
public Collection<AbstractActiveChangeSetProvider> getActiveChangeSetProviders() {
return activeChangeSetProviders.values();
}
public AbstractActiveChangeSetProvider getActiveChangeSetProvider(ActiveChangeSetManager manager) {
return activeChangeSetProviders.get(manager);
}
public Set<AbstractContextChangeSetManager> getContextChangeSetManagers() {
return Collections.unmodifiableSet(changeSetManagers);
}
public CommitTemplateManager getCommitTemplateManager() {
return commitTemplateManager;
}
}