/******************************************************************************* | |
* 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 2.0 | |
* which accompanies this distribution, and is available at | |
* https://www.eclipse.org/legal/epl-2.0/ | |
* | |
* SPDX-License-Identifier: EPL-2.0 | |
* | |
* Contributors: | |
* IBM Corporation - initial API and implementation | |
*******************************************************************************/ | |
package org.eclipse.bpel.ui.details.tree; | |
import java.util.ArrayList; | |
import java.util.HashSet; | |
import java.util.Iterator; | |
import java.util.List; | |
import java.util.Set; | |
import org.eclipse.bpel.model.messageproperties.Property; | |
import org.eclipse.bpel.model.messageproperties.PropertyAlias; | |
import org.eclipse.bpel.ui.util.BPELUtil; | |
import org.eclipse.emf.ecore.EObject; | |
import org.eclipse.wst.wsdl.Input; | |
import org.eclipse.wst.wsdl.Message; | |
import org.eclipse.wst.wsdl.Output; | |
import org.eclipse.wst.wsdl.Part; | |
/** | |
* Tree node to represent a message-type model object. | |
*/ | |
public class MessageTypeTreeNode extends TreeNode { | |
boolean isPropertyTree; | |
boolean displayParticles; | |
public MessageTypeTreeNode(Input msg, boolean isCondensed, boolean isProperty) { | |
this(msg, isCondensed, isProperty,true); | |
} | |
public MessageTypeTreeNode(Output msg, boolean isCondensed, boolean isProperty) { | |
this(msg, isCondensed, isProperty,true); | |
} | |
public MessageTypeTreeNode(Message messageType, boolean isCondensed, boolean isPropertyTree) { | |
this(messageType, isCondensed, isPropertyTree, true); | |
} | |
public MessageTypeTreeNode (Message messageType, boolean isCondensed, | |
boolean isPropertyTree, boolean displayParticles) { | |
this((EObject) messageType,isCondensed,isPropertyTree,displayParticles); | |
} | |
private MessageTypeTreeNode(EObject obj, boolean isCondensed, | |
boolean isPropertyTree, boolean displayParticles ) | |
{ | |
super(obj, isCondensed); | |
this.isPropertyTree = isPropertyTree; | |
this.displayParticles = displayParticles; | |
} | |
/* ITreeNode */ | |
@Override | |
public Object[] getChildren() { | |
Message msg = getMessage(); | |
if (msg == null) { | |
return EMPTY_ARRAY; | |
} | |
if (isPropertyTree) { | |
// Find propertyAliases that refer to this message. | |
List<PropertyAlias> aliases = BPELUtil.getPropertyAliasesForMessageType(msg); | |
List<Property> properties = getPropertiesFromPropertyAliases(aliases); | |
List<PropertyTreeNode> list = new ArrayList<PropertyTreeNode>(); | |
for (Iterator<Property> it = properties.iterator(); it.hasNext(); ) { | |
list.add(new PropertyTreeNode(it.next(), isCondensed)); | |
} | |
return list.toArray(); | |
} | |
if (msg.getParts() == null) { | |
return EMPTY_ARRAY; | |
} | |
List<PartTreeNode> list = new ArrayList<PartTreeNode>(); | |
for (Iterator<Part> it = msg.getParts().values().iterator(); it.hasNext(); ) { | |
list.add(new PartTreeNode(it.next(), isCondensed, displayParticles)); | |
} | |
return list.toArray(); | |
} | |
@Override | |
public boolean hasChildren() { | |
if (isPropertyTree) { | |
// TODO: we need some sort of property map maintained by the same | |
// builder that will keep track of the namespaceURI's of WSDL files | |
return getChildren().length > 0; | |
} | |
Message msg = getMessage(); | |
if (msg == null) { | |
return false; | |
} | |
return (msg.getParts() != null && !msg.getParts().isEmpty()); | |
} | |
/* other methods */ | |
protected List<Property> getPropertiesFromPropertyAliases(List<PropertyAlias> aliases) { | |
List<Property> properties = new ArrayList<Property>(); | |
Set<Property> propertySet = new HashSet<Property>(); | |
for (Iterator<PropertyAlias> it = aliases.iterator(); it.hasNext(); ) { | |
PropertyAlias alias = it.next(); | |
Property property = (Property)alias.getPropertyName(); | |
if (!propertySet.contains(property)) { | |
properties.add(property); | |
propertySet.add(property); | |
} | |
} | |
return properties; | |
} | |
Message getMessage () { | |
if (modelObject instanceof Message) { | |
return (Message) modelObject; | |
} | |
if (modelObject instanceof Input) { | |
return ((Input)modelObject).getEMessage(); | |
} | |
if (modelObject instanceof Output) { | |
return ((Output)modelObject).getEMessage(); | |
} | |
return null; | |
} | |
} |