blob: 857cd7d417f79ce99a46f690d5aa73b0f5c48e48 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2005, 2012 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 API and implementation
*******************************************************************************/
package org.eclipse.bpel.ui.editparts.util;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import org.eclipse.bpel.model.CorrelationSet;
import org.eclipse.bpel.model.MessageExchange;
import org.eclipse.bpel.model.PartnerLink;
import org.eclipse.bpel.model.Process;
import org.eclipse.bpel.model.Variable;
import org.eclipse.bpel.ui.adapters.IContainer;
import org.eclipse.bpel.ui.adapters.IOutlineEditPartFactory;
import org.eclipse.bpel.ui.util.BPELUtil;
import org.eclipse.gef.EditPart;
import org.eclipse.gef.EditPartFactory;
public class OutlineTreePartFactory implements EditPartFactory {
public EditPart createEditPart(EditPart context, Object model) {
IOutlineEditPartFactory factory = BPELUtil.adapt(model, IOutlineEditPartFactory.class);
if (factory != null) {
return factory.createOutlineEditPart(context, model);
}
return null;
}
/**
* Gets the model children in an special order and nesting for the Outline view.
* The root element on the tree are Partners, Variables, Correlation Sets and
* the first activity of the process.
*/
public static List getModelChildren(Object model) {
if (model == null) return Collections.EMPTY_LIST;
List result = new ArrayList();
if (model instanceof Process) {
Process process = (Process)model;
Object[] rootItems = {process.getPartnerLinks(), process.getVariables(), process.getCorrelationSets(), process.getMessageExchanges()};
for (int i = 0; i < rootItems.length; i++) {
if (rootItems[i] != null) {
result.add(rootItems[i]);
}
}
IContainer container = BPELUtil.adapt(model, IContainer.class);
List children = container.getChildren(model);
for (Iterator iter = children.iterator(); iter.hasNext();) {
Object element = iter.next();
if (!(element instanceof PartnerLink || element instanceof Variable || element instanceof CorrelationSet || element instanceof MessageExchange)) {
result.add(element);
}
}
return result;
}
IContainer container = BPELUtil.adapt(model, IContainer.class);
if (container == null) return Collections.EMPTY_LIST;
return container.getChildren(model);
}
}