blob: 63519caf1c91e520c0830f761d6b17ecfe9068ad [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2004, 2006 Sybase, Inc. 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:
* Sybase, Inc. - initial API and implementation
*******************************************************************************/
package org.eclipse.jst.jsf.facesconfig.ui.pageflow.command;
import org.eclipse.jst.jsf.facesconfig.ui.pageflow.util.PageflowValidation;
/**
* Change the end of a link.
*
* @author hmeng
*
*/
public class ReconnectConnectionCommand extends ConnectionCommand {
/**
* Default constructor
*/
public ReconnectConnectionCommand() {
super();
}
public boolean canExecute() {
// if user didn't set PFLink object beforehand, this command can't be
// executed.
if (link == null || link.eContainer() == null) {
return false;
}
// Reconnect both source and target
if (oldSource != null && source != null && oldTarget != null
&& target != null) {
if (!PageflowValidation.getInstance().isValidLinkForCreation(
source, target)) {
return false;
}
}
// Reconnect source
if (oldSource != null && source != null) {
if (!PageflowValidation.getInstance().isValidLinkForCreation(
source, oldTarget)) {
return false;
}
}
// Reconnect target
if (oldTarget != null && target != null) {
if (!PageflowValidation.getInstance().isValidLinkForCreation(
oldSource, target)) {
return false;
}
}
return true;
}
public void doExecute() {
String outcome = null, action = null, largeIcon = null, smallIcon = null;
boolean isRedirect = false;
outcome = link.getOutcome();
action = link.getFromaction();
isRedirect = link.isRedirect();
largeIcon = link.getLargeicon();
smallIcon = link.getSmallicon();
// It is a reconnect source command
if (oldSource != null && source != null) {
link.setSource(source);
}
// It is a reconnect target command
if (oldTarget != null && target != null) {
link.setTarget(target);
}
link.setOutcome(outcome);
link.setFromaction(action);
link.setLargeicon(largeIcon);
link.setSmallicon(smallIcon);
link.setRedirect(isRedirect);
}
public void undo() {
if (canExecute()) {
// It was a reconnect source command
if (oldSource != null && source != null) {
// The link source must be replaced by the oldSource
if (link.getSource() != null) {
link.getSource().getOutlinks().remove(link);
}
source.getOutlinks().remove(link);
link.setSource(oldSource);
}
// It was a reconnect target command
if (oldTarget != null && target != null) {
// The link target must be replaced by the oldTarget
if (link.getTarget() != null) {
link.getTarget().getInlinks().remove(link);
}
target.getInlinks().remove(link);
link.setTarget(oldTarget);
}
}
}
}