blob: b307387cd71f6b0decb0685815f4e06d27557e99 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2010, 2015 THALES GLOBAL SERVICES 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:
* Obeo - initial API and implementation
*******************************************************************************/
package org.eclipse.sirius.tree.business.internal.helper;
import java.util.Collection;
import java.util.Iterator;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.sirius.business.api.dialect.DialectManager;
import org.eclipse.sirius.business.api.helper.task.AbstractCommandTask;
import org.eclipse.sirius.common.tools.api.interpreter.IInterpreter;
import org.eclipse.sirius.ecore.extender.business.api.accessor.ModelAccessor;
import org.eclipse.sirius.tree.DTree;
import org.eclipse.sirius.tree.DTreeElement;
import org.eclipse.sirius.tree.DTreeItem;
import org.eclipse.sirius.tree.business.internal.refresh.DTreeElementSynchronizerSpec;
import org.eclipse.sirius.tree.tools.internal.Messages;
import org.eclipse.sirius.viewpoint.SiriusPlugin;
/**
* Task for refresh tree item elements.
*
* @author nlepine
*/
public class RefreshTreeElementTask extends AbstractCommandTask {
private EObject uniqueRefreshable;
private Collection<DTreeElement> refreshablesList;
/** The monitor for the execution of this task */
private final IProgressMonitor monitor;
/**
* Default constructor.
*
* @param objectToRefresh
* the object to refresh
*/
public RefreshTreeElementTask(final EObject objectToRefresh) {
this(objectToRefresh, new NullProgressMonitor());
}
/**
* Constructor with monitor.
*
* @param objectToRefresh
* the object to refresh
* @param monitor
* The monitor for the execution of this task
*/
public RefreshTreeElementTask(final EObject objectToRefresh, final IProgressMonitor monitor) {
this.uniqueRefreshable = objectToRefresh;
this.monitor = monitor;
}
/**
* Default constructor.
*
* @param objectsToRefresh
* the object to refresh
*/
public RefreshTreeElementTask(Collection<DTreeElement> objectsToRefresh) {
this(objectsToRefresh, new NullProgressMonitor());
}
/**
* Constructor with monitor.
*
* @param objectsToRefresh
* the object to refresh
* @param monitor
* The monitor for the execution of this task
*/
public RefreshTreeElementTask(Collection<DTreeElement> objectsToRefresh, IProgressMonitor monitor) {
this.refreshablesList = objectsToRefresh;
this.monitor = monitor;
}
@Override
public void execute() {
if (uniqueRefreshable instanceof DTree) {
DialectManager.INSTANCE.refresh((DTree) uniqueRefreshable, monitor);
}
if (uniqueRefreshable instanceof DTreeElement) {
refreshTreeElement((DTreeItem) uniqueRefreshable);
}
if (refreshablesList != null) {
final Iterator<DTreeElement> it = refreshablesList.iterator();
while (it.hasNext()) {
final Object obj = it.next();
if (obj instanceof DTree) {
DialectManager.INSTANCE.refresh((DTree) obj, monitor);
} else if (obj instanceof DTreeElement) {
refreshTreeElement((DTreeItem) obj);
}
}
}
}
private void refreshTreeElement(DTreeItem treeElement) {
DTree tree = TreeHelper.getTree(treeElement);
IInterpreter interpreter = SiriusPlugin.getDefault().getInterpreterRegistry().getInterpreter(tree.getTarget());
ModelAccessor accessor = SiriusPlugin.getDefault().getModelAccessorRegistry().getModelAccessor(tree);
DTreeElementSynchronizerSpec synchronizer = new DTreeElementSynchronizerSpec(interpreter, accessor);
synchronizer.refreshItemAndChildren(treeElement);
}
@Override
public String getLabel() {
return Messages.RefreshTreeElementTask_label;
}
}