/*
* 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.project.Project;
import com.eviware.soapui.model.support.WorkspaceListenerAdapter;
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.model.workspace.Workspace;
import com.eviware.soapui.settings.UISettings;
import javax.swing.event.TreeModelEvent;
import java.util.ArrayList;
import java.util.List;
/**
* SoapUITreeNode for Workspace implementations
*
* @author Ole.Matzura
*/
public class WorkspaceTreeNode extends AbstractModelItemTreeNode<Workspace> {
private InternalWorkspaceListener workspaceListener = new InternalWorkspaceListener();
private List<ProjectTreeNode> projectNodes = new ArrayList<ProjectTreeNode>();
private ReorderPropertyChangeListener propertyChangeListener = new ReorderPropertyChangeListener();
public WorkspaceTreeNode(Workspace workspace, SoapUITreeModel treeModel) {
super(workspace, null, treeModel);
workspace.addWorkspaceListener(workspaceListener);
for (int c = 0; c < workspace.getProjectCount(); c++) {
Project project = workspace.getProjectAt(c);
project.addPropertyChangeListener(Project.NAME_PROPERTY, propertyChangeListener);
projectNodes.add(new ProjectTreeNode(project, this));
}
initOrdering(projectNodes, UISettings.ORDER_PROJECTS);
getTreeModel().mapModelItems(projectNodes);
}
public void release() {
super.release();
getWorkspace().removeWorkspaceListener(workspaceListener);
for (ProjectTreeNode treeNode : projectNodes) {
treeNode.getModelItem().removePropertyChangeListener(Project.NAME_PROPERTY, propertyChangeListener);
treeNode.release();
}
}
public Workspace getWorkspace() {
return (Workspace) getModelItem();
}
private class InternalWorkspaceListener extends WorkspaceListenerAdapter {
public void projectAdded(Project project) {
ProjectTreeNode projectTreeNode = new ProjectTreeNode(project, WorkspaceTreeNode.this);
projectNodes.add(projectTreeNode);
project.addPropertyChangeListener(Project.NAME_PROPERTY, propertyChangeListener);
reorder(false);
getTreeModel().notifyNodeInserted(projectTreeNode);
}
public void projectRemoved(Project project) {
SoapUITreeNode treeNode = getTreeModel().getTreeNode(project);
if (projectNodes.contains(treeNode)) {
getTreeModel().notifyNodeRemoved(treeNode);
projectNodes.remove(treeNode);
project.removePropertyChangeListener(propertyChangeListener);
} else {
throw new RuntimeException("Removing unkown project");
}
}
public void projectChanged(Project project) {
getTreeModel().notifyStructureChanged(
new TreeModelEvent(WorkspaceTreeNode.this, new Object[]{getTreeModel().getPath(
WorkspaceTreeNode.this)}));
}
}
}