/*
* SoapUI, Copyright (C) 2004-2016 SmartBear Software
*
* Licensed under the EUPL, Version 1.1 or - as soon as they will be approved by the European Commission - subsequent
* versions of the EUPL (the "Licence");
* You may not use this work except in compliance with the Licence.
* You may obtain a copy of the Licence at:
*
* http://ec.europa.eu/idabc/eupl
*
* Unless required by applicable law or agreed to in writing, software distributed under the Licence is
* distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
* express or implied. See the Licence for the specific language governing permissions and limitations
* under the Licence.
*/
package com.eviware.soapui.model.tree.nodes;
import com.eviware.soapui.model.iface.Operation;
import com.eviware.soapui.model.iface.Request;
import com.eviware.soapui.model.tree.AbstractModelItemTreeNode;
import com.eviware.soapui.model.tree.SoapUITreeModel;
import com.eviware.soapui.model.tree.SoapUITreeNode;
import com.eviware.soapui.settings.UISettings;
import java.util.ArrayList;
import java.util.List;
/**
* SoapUITreeNode for Operation implementations
*
* @author Ole.Matzura
*/
public class OperationTreeNode extends AbstractModelItemTreeNode<Operation> {
private List<RequestTreeNode> requestNodes = new ArrayList<RequestTreeNode>();
private ReorderPropertyChangeListener propertyChangeListener = new ReorderPropertyChangeListener();
public OperationTreeNode(Operation operation, SoapUITreeModel treeModel) {
super(operation, operation.getInterface(), treeModel);
for (int c = 0; c < operation.getRequestCount(); c++) {
Request request = operation.getRequestAt(c);
request.addPropertyChangeListener(Request.NAME_PROPERTY, propertyChangeListener);
requestNodes.add(new RequestTreeNode(request, getTreeModel()));
}
initOrdering(requestNodes, UISettings.ORDER_REQUESTS);
treeModel.mapModelItems(requestNodes);
}
public void release() {
super.release();
for (RequestTreeNode treeNode : requestNodes) {
treeNode.getModelItem().removePropertyChangeListener(Request.NAME_PROPERTY, propertyChangeListener);
treeNode.release();
}
}
public Operation getOperation() {
return (Operation) getModelItem();
}
public void requestAdded(Request request) {
RequestTreeNode requestTreeNode = new RequestTreeNode(request, getTreeModel());
requestNodes.add(requestTreeNode);
reorder(false);
request.addPropertyChangeListener(Request.NAME_PROPERTY, propertyChangeListener);
getTreeModel().notifyNodeInserted(requestTreeNode);
}
public void requestRemoved(Request request) {
SoapUITreeNode requestTreeNode = getTreeModel().getTreeNode(request);
if (requestNodes.contains(requestTreeNode)) {
getTreeModel().notifyNodeRemoved(requestTreeNode);
requestNodes.remove(requestTreeNode);
request.removePropertyChangeListener(propertyChangeListener);
} else {
throw new RuntimeException("Removing unknown request");
}
}
}