/*******************************************************************************
* Copyright (c) 2007 Spring IDE Developers
* 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:
* Spring IDE Developers - initial API and implementation
*******************************************************************************/
package org.springframework.ide.eclipse.aop.ui.navigator.model;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.eclipse.jdt.core.IMember;
import org.eclipse.jdt.core.IType;
import org.springframework.ide.eclipse.aop.core.model.IAopReference;
import org.springframework.ide.eclipse.aop.core.util.AopReferenceModelUtils;
import org.springframework.ide.eclipse.aop.ui.navigator.util.AopReferenceModelNavigatorUtils;
/**
* @author Christian Dupuis
* @author Torsten Juergeleit
*/
public class ClassMethodReferenceNode extends AbstractJavaElementReferenceNode
implements IReferenceNode, IRevealableReferenceNode {
private List<IReferenceNode> children;
private List<IReferenceNode> declareParentReferences = new ArrayList<IReferenceNode>();
private List<IAopReference> declaredOnReferences = new ArrayList<IAopReference>();
private Set<String> beans = new HashSet<String>();
public List<IAopReference> getDeclaredOnReferences() {
return declaredOnReferences;
}
public List<IReferenceNode> getDeclareParentReferences() {
return declareParentReferences;
}
@SuppressWarnings("unchecked")
public ClassMethodReferenceNode(IMember member, List<?> children) {
super(member);
this.children = (List<IReferenceNode>) children;
}
public IReferenceNode[] getChildren() {
List<IReferenceNode> nodes = new ArrayList<IReferenceNode>();
// add method children
if (this.children != null && this.children.size() > 0) {
nodes.addAll(this.children);
}
if (getDeclareParentReferences().size() > 0) {
nodes.addAll(getDeclareParentReferences());
}
if (getDeclaredOnReferences().size() > 0) {
nodes.add(new AdvisedDeclareParentAopReferenceNode(
getDeclaredOnReferences()));
}
if (beans.size() > 0) {
nodes.add(new ClassBeanReferenceNode(beans));
}
return nodes.toArray(new IReferenceNode[nodes.size()]);
}
@Override
public String getText() {
if (element instanceof IType) {
return AopReferenceModelNavigatorUtils.JAVA_LABEL_PROVIDER
.getText(element)
+ " - "
+ AopReferenceModelUtils.getPackageLinkName(element);
}
else {
return AopReferenceModelNavigatorUtils.JAVA_LABEL_PROVIDER
.getText(element);
}
}
@Override
public boolean hasChildren() {
return (children != null && children.size() > 0)
|| declareParentReferences.size() > 0
|| declaredOnReferences.size() > 0 || this.beans.size() > 0;
}
public void setBeans(Set<String> beans) {
this.beans = beans;
}
}