blob: 1b084e7f68e841fb526dabeb58dcb54e7f0452d2 [file] [log] [blame]
//------------------------------------------------------------------------------
// Copyright (c) 2005, 2006 IBM Corporation 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:
// IBM Corporation - initial implementation
//------------------------------------------------------------------------------
package org.eclipse.epf.library.edit.command;
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import org.eclipse.emf.common.command.AbstractCommand;
import org.eclipse.epf.library.edit.util.Misc;
import org.eclipse.epf.library.edit.util.SectionList;
import org.eclipse.epf.library.edit.util.TngUtil;
import org.eclipse.epf.uma.ContentElement;
import org.eclipse.epf.uma.MethodElement;
import org.eclipse.epf.uma.MethodPlugin;
import org.eclipse.epf.uma.VariabilityElement;
import org.eclipse.epf.uma.util.UmaUtil;
/**
* This command is used to reorder a section within a section list.
*
* @author Shashidhar Kannoori
* @since 1.0
*/
public class MoveInSectionListCommand extends AbstractCommand implements
IResourceAwareCommand {
private ContentElement contentElement;
private SectionList sectionList;
private List elementsList;
private ContentElement usedContentElement = null;
private Collection modifiedResources;
private static int UP = 1;
private static int Down = 0;
private int direction = -1;
private boolean moved;
/**
* @deprecated
*/
public MoveInSectionListCommand() {
super();
}
public MoveInSectionListCommand(ContentElement contentElement,
List elementsList, SectionList sectionList, int direction) {
this.contentElement = contentElement;
this.sectionList = sectionList;
this.elementsList = elementsList;
this.direction = direction;
modifiedResources = new HashSet();
}
protected boolean prepare() {
return true;
}
/**
* @param label
*/
public MoveInSectionListCommand(String label) {
super(label);
}
/**
* @param label
* @param description
*/
public MoveInSectionListCommand(String label, String description) {
super(label, description);
}
/*
* (non-Javadoc)
*
* @see com.ibm.library.edit.command.IResourceAwareCommand#getModifiedResources()
*/
public Collection getModifiedResources() {
modifiedResources.add(contentElement.eResource());
return modifiedResources;
}
/*
* (non-Javadoc)
*
* @see org.eclipse.emf.common.command.Command#execute()
*/
public void execute() {
MethodPlugin taskPlugin = UmaUtil.getMethodPlugin(contentElement);
MethodPlugin elementPlugin = UmaUtil
.getMethodPlugin((MethodElement) elementsList.get(0));
if (taskPlugin != elementPlugin
&& Misc.isBaseOf(taskPlugin, elementPlugin)) {
for (Iterator iter = TngUtil.getContributors(contentElement); iter
.hasNext();) {
VariabilityElement ve = (VariabilityElement) iter.next();
if (ve instanceof ContentElement
&& UmaUtil.getMethodPlugin(ve) == elementPlugin) {
usedContentElement = (ContentElement) ve;
break;
}
}
}
if (usedContentElement == null) {
usedContentElement = contentElement;
}
redo();
}
/*
* (non-Javadoc)
*
* @see org.eclipse.emf.common.command.Command#redo()
*/
public void redo() {
if (usedContentElement == null)
return;
for (Iterator it = elementsList.iterator(); it.hasNext();) {
Object object = it.next();
int index = sectionList.indexOf(object);
if (direction == UP) {
if (index > 0)
sectionList.move(index - 1, object);
} else if (direction == Down) {
if (index < sectionList.size())
sectionList.move(index + elementsList.size(), object);
}
moved = true;
}
sectionList.apply();
}
public void undo() {
if (moved) {
for (Iterator it = elementsList.iterator(); it.hasNext();) {
Object object = it.next();
int index = sectionList.indexOf(object);
if (direction == UP) {
if (index < sectionList.size())
sectionList.move(index + elementsList.size(), object);
} else if (direction == Down) {
if (index > 0)
sectionList.move(index - 1, object);
}
moved = true;
}
sectionList.apply();
moved = false;
}
}
public Collection getAffectedObjects() {
return Collections.singletonList(usedContentElement);
}
}