blob: 50d0e12b8fe8c69421449daca550192e5e8a0030 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2004, 2007 Mylyn project committers 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
*******************************************************************************/
package org.eclipse.mylyn.team.ui;
import java.util.Set;
import org.eclipse.mylyn.context.core.AbstractContextListener;
import org.eclipse.mylyn.context.core.ContextCore;
import org.eclipse.mylyn.internal.tasks.core.ITaskListChangeListener;
import org.eclipse.mylyn.internal.tasks.core.TaskContainerDelta;
import org.eclipse.mylyn.internal.tasks.ui.editors.TaskListChangeAdapter;
import org.eclipse.mylyn.internal.tasks.ui.util.TasksUiInternal;
import org.eclipse.mylyn.tasks.core.ITask;
/**
* Manages changes sets along with task context and activation.
*
* @author Mik Kersten
* @since 1.0
*/
@SuppressWarnings("restriction")
public abstract class AbstractContextChangeSetManager extends AbstractContextListener {
protected boolean isEnabled = false;
private boolean isInitialized = false;
public void enable() {
if (!isEnabled) {
isEnabled = true;
TasksUiInternal.getTaskList().addChangeListener(WORKING_SET_LABEL_UPDATE_LISTENER);
if (!isInitialized) {
initContextChangeSets(); // otherwise listener will do it
}
if (ContextCore.getContextManager().isContextActive()) {
contextActivated(ContextCore.getContextManager().getActiveContext());
}
ContextCore.getContextManager().addListener(this);
}
}
public void disable() {
ContextCore.getContextManager().removeListener(this);
TasksUiInternal.getTaskList().removeChangeListener(WORKING_SET_LABEL_UPDATE_LISTENER);
isEnabled = false;
}
protected abstract void initContextChangeSets();
/**
* @since 3.0
*/
protected abstract void updateChangeSetLabel(ITask task);
private final ITaskListChangeListener WORKING_SET_LABEL_UPDATE_LISTENER = new TaskListChangeAdapter() {
@Override
public void containersChanged(Set<TaskContainerDelta> containers) {
for (TaskContainerDelta taskContainerDelta : containers) {
if (taskContainerDelta.getKind() == TaskContainerDelta.Kind.ROOT && !isInitialized) {
initContextChangeSets();
isInitialized = true;
}
if (taskContainerDelta.getElement() instanceof ITask) {
ITask task = (ITask) taskContainerDelta.getElement();
switch (taskContainerDelta.getKind()) {
case CONTENT:
updateChangeSetLabel(task);
break;
}
}
}
}
};
}