/*******************************************************************************
* Copyright (c) 2008 Red Hat, Inc.
* Distributed under license by Red Hat, Inc. All rights reserved.
* This program is 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:
* Red Hat, Inc. - initial API and implementation
******************************************************************************/
package org.jboss.tools.smooks.edimap.models;
import org.eclipse.emf.common.command.Command;
import org.eclipse.emf.edit.command.SetCommand;
import org.eclipse.emf.edit.domain.EditingDomain;
import org.eclipse.emf.edit.domain.IEditingDomainProvider;
import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.jboss.tools.smooks.gef.model.AbstractSmooksGraphicalModel;
import org.jboss.tools.smooks.gef.tree.model.TreeNodeConnection;
import org.jboss.tools.smooks.gef.tree.model.TreeNodeModel;
import org.jboss.tools.smooks.model.medi.MEdiPackage;
import org.jboss.tools.smooks.model.medi.Segment;
/**
* @author Dart (dpeng@redhat.com)
*
*/
public class EDIMappingNodeGraphModel extends TreeNodeModel {
IEditingDomainProvider domainProvider = null;
public EDIMappingNodeGraphModel(Object data, ITreeContentProvider contentProvider, ILabelProvider labelProvider,
IEditingDomainProvider domainProvider) {
super(data, contentProvider, labelProvider);
this.domainProvider = domainProvider;
}
/*
* (non-Javadoc)
*
* @see
* org.jboss.tools.smooks.gef.tree.model.TreeNodeModel#createChildModel(
* java.lang.Object, org.eclipse.jface.viewers.ITreeContentProvider,
* org.eclipse.jface.viewers.ILabelProvider)
*/
@Override
protected TreeNodeModel createChildModel(Object model, ITreeContentProvider contentProvider,
ILabelProvider labelProvider) {
return new EDIMappingNodeGraphModel(model, contentProvider, labelProvider, domainProvider);
}
/*
* (non-Javadoc)
*
* @see
* org.jboss.tools.smooks.gef.tree.model.TreeNodeModel#canLinkWithSource
* (java.lang.Object)
*/
@Override
public boolean canLinkWithSource(Object model) {
return false;
}
/*
* (non-Javadoc)
*
* @see
* org.jboss.tools.smooks.gef.tree.model.TreeNodeModel#addSourceConnection
* (org.jboss.tools.smooks.gef.tree.model.TreeNodeConnection)
*/
@Override
public void addSourceConnection(TreeNodeConnection connection) {
super.addSourceConnection(connection);
if (getData() instanceof Segment) {
AbstractSmooksGraphicalModel targetNode = connection.getTargetNode();
if (targetNode != null && targetNode.getData() instanceof EDIDataContainerModel) {
if (domainProvider != null) {
String segCode = ((EDIDataContainerModel) targetNode.getData()).getSegCode();
String sc = ((Segment) getData()).getSegcode();
if (sc != null && sc.equals(segCode)) {
return;
}
EditingDomain domain = domainProvider.getEditingDomain();
if (domain != null) {
Command command = SetCommand.create(domain, getData(), MEdiPackage.Literals.SEGMENT__SEGCODE,
segCode);
domain.getCommandStack().execute(command);
}
}
}
}
}
/*
* (non-Javadoc)
*
* @see
* org.jboss.tools.smooks.gef.tree.model.TreeNodeModel#removeSourceConnection
* (org.jboss.tools.smooks.gef.tree.model.TreeNodeConnection)
*/
@Override
public void removeSourceConnection(TreeNodeConnection connection) {
super.removeSourceConnection(connection);
if (getData() instanceof Segment) {
String sc = ((Segment) getData()).getSegcode();
if (sc == null) {
return;
}
if (domainProvider != null) {
EditingDomain domain = domainProvider.getEditingDomain();
if (domain != null) {
Command command = SetCommand.create(domain, getData(), MEdiPackage.Literals.SEGMENT__SEGCODE, null);
domain.getCommandStack().execute(command);
}
}
}
}
/*
* (non-Javadoc)
*
* @see
* org.jboss.tools.smooks.gef.tree.model.TreeNodeModel#removeTargetConnection
* (org.jboss.tools.smooks.gef.tree.model.TreeNodeConnection)
*/
@Override
public void removeTargetConnection(TreeNodeConnection connection) {
// TODO Auto-generated method stub
super.removeTargetConnection(connection);
}
/*
* (non-Javadoc)
*
* @see
* org.jboss.tools.smooks.gef.tree.model.TreeNodeModel#addTargetConnection
* (org.jboss.tools.smooks.gef.tree.model.TreeNodeConnection)
*/
@Override
public void addTargetConnection(TreeNodeConnection connection, AbstractSmooksGraphicalModel sourceNode) {
super.addTargetConnection(connection, sourceNode);
}
/*
* (non-Javadoc)
*
* @see org.jboss.tools.smooks.gef.tree.model.TreeNodeModel#isLinkable()
*/
@Override
public boolean isLinkable(Class<?> type) {
Object nodeModel = getData();
if (!(nodeModel instanceof Segment)) {
return false;
}else{
if(!this.getSourceConnections().isEmpty()){
return false;
}
}
return super.isLinkable(type);
}
/*
* (non-Javadoc)
*
* @see
* org.jboss.tools.smooks.gef.tree.model.TreeNodeModel#canLinkWithTarget
* (java.lang.Object)
*/
@Override
public boolean canLinkWithTarget(Object model) {
Object nodeModel = getData();
if (!(nodeModel instanceof Segment)) {
return false;
}
if (model instanceof EDIDataContainerGraphModel) {
return true;
}
return false;
}
}