/*******************************************************************************
* 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.graphical.editors.editparts;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain;
import org.jboss.tools.smooks.SmooksModelUtils;
import org.jboss.tools.smooks.configuration.editors.IXMLStructuredObject;
import org.jboss.tools.smooks.configuration.editors.utils.SmooksUIUtils;
import org.jboss.tools.smooks.gef.common.RootModel;
import org.jboss.tools.smooks.gef.model.AbstractSmooksGraphicalModel;
import org.jboss.tools.smooks.graphical.editors.model.InputDataContianerModel;
import org.jboss.tools.smooks.model.freemarker.Freemarker;
import org.jboss.tools.smooks.model.javabean12.BeanType;
/**
* @author Dart
*
*/
public class SmooksGraphUtil {
public static String generateFigureIDViaModel(EObject data) {
if (data instanceof BeanType) {
String beanId = ((BeanType) data).getBeanId();
if (beanId == null) {
return null;
}
beanId = beanId.trim();
return "BeanType_" + beanId; //$NON-NLS-1$
}
if (data instanceof Freemarker) {
String id = SmooksModelUtils.getParamValue(((Freemarker)data).getParam(), SmooksModelUtils.KEY_OBJECT_ID);
if (id == null) {
id = "freemarker"; //$NON-NLS-1$
}else{
id = "freemarker_"+id; //$NON-NLS-1$
}
return id;
}
return null;
}
//
// public static FigureType findFigureType(GraphType graph, String figureId) {
// List<FigureType> list = graph.getFigure();
// for (Iterator<?> iterator = list.iterator(); iterator.hasNext();) {
// FigureType figureType = (FigureType) iterator.next();
// if (figureId.equals(figureType.getId())) {
// return figureType;
// }
// }
// return null;
// }
public static String generateFigureID(AbstractSmooksGraphicalModel model) {
Object data = model.getData();
data = AdapterFactoryEditingDomain.unwrap(data);
if( data instanceof EObject){
return generateFigureIDViaModel((EObject)data);
}
if (data instanceof IXMLStructuredObject) {
List<?> children = ((IXMLStructuredObject) data).getChildren();
if (children == null || children.isEmpty()) {
} else {
Object child = children.get(0);
if (child != null && child instanceof IXMLStructuredObject) {
return ((IXMLStructuredObject) child).getID().toString();
}
}
return ((IXMLStructuredObject) data).getID().toString();
}
return null;
}
public static AbstractSmooksGraphicalModel findSmooksGraphModel(RootModel root, Object object) {
if (root != null && object != null) {
for (AbstractSmooksGraphicalModel child : root.getChildren()) {
AbstractSmooksGraphicalModel model = findGraphicalModel(child, object);
if (model != null) {
return model;
}
}
}
return null;
}
private static AbstractSmooksGraphicalModel findGraphicalModel(AbstractSmooksGraphicalModel graph, Object object) {
if (AdapterFactoryEditingDomain.unwrap(graph.getData()) == object) {
return graph;
}
List<?> children = graph.getChildrenWithoutDynamic();
for (Iterator<?> iterator = children.iterator(); iterator.hasNext();) {
Object child = (Object) iterator.next();
if (child instanceof AbstractSmooksGraphicalModel) {
AbstractSmooksGraphicalModel model = findGraphicalModel((AbstractSmooksGraphicalModel) child, object);
if (model != null) {
return model;
}
}
}
return null;
}
public static AbstractSmooksGraphicalModel findInputGraphModel(String selector, IXMLStructuredObject root,
RootModel graphRoot) {
IXMLStructuredObject model = null;
model = SmooksUIUtils.localXMLNodeWithPath(selector, root, "/", false); //$NON-NLS-1$
if (model == null) {
model = SmooksUIUtils.localXMLNodeWithPath(selector, root, " ", false); //$NON-NLS-1$
}
if (model == null)
return null;
IXMLStructuredObject p = model;
List<IXMLStructuredObject> parentList = new ArrayList<IXMLStructuredObject>();
IXMLStructuredObject rootParent = SmooksUIUtils.getRootParent(model);
while (p != null) {
parentList.add(p);
if (p == rootParent) {
break;
}
p = p.getParent();
if (p == null) {
break;
}
}
List<AbstractSmooksGraphicalModel> children = graphRoot.getChildren();
if (model != null) {
AbstractSmooksGraphicalModel parentGraph = null;
for (Iterator<?> iterator = children.iterator(); iterator.hasNext();) {
AbstractSmooksGraphicalModel abstractSmooksGraphicalModel = (AbstractSmooksGraphicalModel) iterator
.next();
if (abstractSmooksGraphicalModel instanceof InputDataContianerModel) {
List<AbstractSmooksGraphicalModel> cs = ((InputDataContianerModel) abstractSmooksGraphicalModel)
.getChildren();
if (cs.isEmpty()) {
continue;
}
AbstractSmooksGraphicalModel childGraph = cs.get(0);
if (childGraph.getData() == parentList.get(parentList.size() - 1)) {
parentGraph = childGraph;
break;
}
}
}
int index = parentList.size() - 2;
if (index < 0) {
return parentGraph;
}
if (parentGraph != null) {
AbstractSmooksGraphicalModel tempParent = parentGraph;
for (int i = index; i >= 0; i--) {
IXMLStructuredObject m = parentList.get(i);
List<AbstractSmooksGraphicalModel> nc = tempParent.getChildren();
boolean find = false;
for (Iterator<?> iterator = nc.iterator(); iterator.hasNext();) {
AbstractSmooksGraphicalModel abstractSmooksGraphicalModel = (AbstractSmooksGraphicalModel) iterator
.next();
if (abstractSmooksGraphicalModel.getData() == m) {
tempParent = abstractSmooksGraphicalModel;
find = true;
break;
}
}
if (!find) {
return null;
}
}
return tempParent;
}
}
return null;
}
}