| /*********************************************************************** |
| * Copyright (c) 2008 by SAP AG, Walldorf. |
| * 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: |
| * SAP AG - initial API and implementation |
| ***********************************************************************/ |
| package org.eclipse.jst.jee.ui.internal.navigator; |
| |
| import java.util.ArrayList; |
| import java.util.List; |
| |
| import org.eclipse.core.resources.IProject; |
| import org.eclipse.core.runtime.CoreException; |
| import org.eclipse.core.runtime.IAdaptable; |
| import org.eclipse.jst.j2ee.model.IModelProvider; |
| import org.eclipse.jst.j2ee.project.facet.IJ2EEFacetConstants; |
| import org.eclipse.jst.javaee.ejb.EJBJar; |
| import org.eclipse.jst.javaee.ejb.EntityBean; |
| import org.eclipse.jst.javaee.ejb.MessageDrivenBean; |
| import org.eclipse.jst.javaee.ejb.SessionBean; |
| import org.eclipse.jst.jee.ui.internal.navigator.JndiRefNode.KINDS; |
| import org.eclipse.jst.jee.ui.internal.navigator.ejb.ActivationConfigProperties; |
| import org.eclipse.jst.jee.ui.internal.navigator.ejb.BeanInterfaceNode; |
| import org.eclipse.jst.jee.ui.internal.navigator.ejb.BeanNode; |
| import org.eclipse.jst.jee.ui.internal.navigator.ejb.GroupEJBProvider; |
| import org.eclipse.jst.jee.ui.plugin.JEEUIPlugin; |
| import org.eclipse.wst.common.project.facet.core.IFacetedProject; |
| import org.eclipse.wst.common.project.facet.core.IProjectFacetVersion; |
| import org.eclipse.wst.common.project.facet.core.ProjectFacetsManager; |
| |
| /** |
| * Ejb 3.0 Content provider is Deployment Descriptor content provider, |
| * used for constructing of the descriptor tree in project explorer. |
| * |
| * @author Dimitar Giormov |
| */ |
| public class Ejb3ContentProvider extends JEE5ContentProvider { |
| |
| |
| public Object[] getChildren(Object aParentElement) { |
| List<Object> children = new ArrayList<Object>(); |
| IProject project = null; |
| |
| if (aParentElement instanceof AbstractGroupProvider) { |
| List lst = ((AbstractGroupProvider) aParentElement).getChildren(); |
| children.addAll(lst); |
| } else if (aParentElement instanceof AbstractDDNode) { |
| List lst = ((AbstractDDNode) aParentElement).getChildren(); |
| children.addAll(lst); |
| } else if (aParentElement instanceof SessionBean) { |
| SessionBean sb = ((SessionBean)aParentElement); |
| addSessionBeanSubNodes(sb, children); |
| |
| } else if (aParentElement instanceof EntityBean) { |
| EntityBean eb = ((EntityBean)aParentElement); |
| |
| addEntityBeanSubNodes(eb, children); |
| |
| } else if (aParentElement instanceof MessageDrivenBean) { |
| Object msgBean = new BeanNode((MessageDrivenBean) aParentElement); |
| addActivationConfigProperties((MessageDrivenBean) aParentElement, children); |
| children.add(msgBean); |
| } else |
| if (aParentElement instanceof IAdaptable) { |
| project = (IProject) ((IAdaptable) aParentElement) |
| .getAdapter(IPROJECT_CLASS); |
| if (project != null) { |
| if (isEjbModuleProject(project)) { |
| GroupEJBProvider root = (GroupEJBProvider) getCachedContentProvider(project); |
| children.add(root); |
| } |
| } |
| } |
| return children.toArray(); |
| } |
| |
| private void addActivationConfigProperties(MessageDrivenBean parentElement, |
| List<Object> children) { |
| if (parentElement.getActivationConfig() != null && parentElement.getActivationConfig().getActivationConfigProperties() != null && !parentElement.getActivationConfig().getActivationConfigProperties().isEmpty()){ |
| children.add(new ActivationConfigProperties(parentElement.getActivationConfig().getActivationConfigProperties())); |
| } |
| } |
| |
| private void addEntityBeanSubNodes(EntityBean eb, List<Object> children) { |
| if (eb.getLocal() != null) { |
| children.add(new BeanInterfaceNode(eb, (String)eb.getLocal(), BeanInterfaceNode.KINDS.LOCAL)); |
| } |
| if (eb.getLocalHome() != null) { |
| children.add(new BeanInterfaceNode(eb, (String)eb.getLocalHome(), BeanInterfaceNode.KINDS.LOCAL_HOME)); |
| } |
| |
| if (eb.getRemote() != null) { |
| children.add(new BeanInterfaceNode(eb, (String)eb.getRemote(), BeanInterfaceNode.KINDS.REMOTE)); |
| } |
| if (eb.getHome() != null) { |
| children.add(new BeanInterfaceNode(eb, (String)eb.getHome(), BeanInterfaceNode.KINDS.REMOTE_HOME)); |
| } |
| |
| |
| children.add(new BeanNode((EntityBean) eb)); |
| |
| } |
| |
| private void addSessionBeanSubNodes(SessionBean sb, List children) { |
| addClassRelatedInfo(sb, children); |
| addSessionJNDIRefInfo(sb, children); |
| } |
| |
| private void addSessionJNDIRefInfo(SessionBean sb, List children) { |
| if (sb.getEjbLocalRefs() != null && !sb.getEjbLocalRefs().isEmpty()){ |
| children.add(new JndiRefNode(sb.getEjbLocalRefs(), KINDS.EJBLOCALREF)); |
| } |
| |
| if (sb.getEjbRefs() != null && !sb.getEjbRefs().isEmpty()){ |
| children.add(new JndiRefNode(sb.getEjbRefs(), KINDS.EJBREF)); |
| } |
| |
| if (sb.getResourceEnvRefs() != null && !sb.getResourceEnvRefs().isEmpty()){ |
| children.add(new JndiRefNode(sb.getResourceEnvRefs(), KINDS.RESENVENTY)); |
| } |
| if (sb.getEnvEntries() != null && !sb.getEnvEntries().isEmpty()){ |
| children.add(new JndiRefNode(sb.getEnvEntries(), KINDS.ENVENTRY)); |
| } |
| |
| if (sb.getResourceRefs() != null && !sb.getResourceRefs().isEmpty()){ |
| children.add(new JndiRefNode(sb.getResourceRefs(), KINDS.RESREF)); |
| } |
| |
| if (sb.getServiceRefs() != null && !sb.getServiceRefs().isEmpty()){ |
| children.add(new JndiRefNode(sb.getServiceRefs(), KINDS.SERVICEREF)); |
| } |
| } |
| |
| private void addSessionJNDIRefInfo(EntityBean eb, List children) { |
| if (eb.getEjbLocalRefs() != null && !eb.getEjbLocalRefs().isEmpty()){ |
| children.add(new JndiRefNode(eb.getEjbLocalRefs(), KINDS.EJBLOCALREF)); |
| } |
| |
| if (eb.getEjbRefs() != null && !eb.getEjbRefs().isEmpty()){ |
| children.add(new JndiRefNode(eb.getEjbRefs(), KINDS.EJBREF)); |
| } |
| |
| if (eb.getResourceEnvRefs() != null && !eb.getResourceEnvRefs().isEmpty()){ |
| children.add(new JndiRefNode(eb.getResourceEnvRefs(), KINDS.RESENVENTY)); |
| } |
| if (eb.getEnvEntries() != null && !eb.getEnvEntries().isEmpty()){ |
| children.add(new JndiRefNode(eb.getEnvEntries(), KINDS.ENVENTRY)); |
| } |
| |
| if (eb.getResourceRefs() != null && !eb.getResourceRefs().isEmpty()){ |
| children.add(new JndiRefNode(eb.getResourceRefs(), KINDS.RESREF)); |
| } |
| |
| if (eb.getServiceRefs() != null && !eb.getServiceRefs().isEmpty()){ |
| children.add(new JndiRefNode(eb.getServiceRefs(), KINDS.SERVICEREF)); |
| } |
| } |
| |
| private void addClassRelatedInfo(SessionBean sb, List children) { |
| if (sb.getLocal() != null) { |
| children.add(new BeanInterfaceNode(sb, (String)sb.getLocal(), BeanInterfaceNode.KINDS.LOCAL)); |
| } |
| |
| if (sb.getLocalHome() != null) { |
| children.add(new BeanInterfaceNode(sb, (String)sb.getLocalHome(), BeanInterfaceNode.KINDS.LOCAL_HOME)); |
| } |
| |
| if (sb.getRemote() != null) { |
| children.add(new BeanInterfaceNode(sb, (String)sb.getRemote(), BeanInterfaceNode.KINDS.REMOTE)); |
| } |
| |
| if (sb.getHome() != null) { |
| children.add(new BeanInterfaceNode(sb, (String)sb.getHome(), BeanInterfaceNode.KINDS.REMOTE_HOME)); |
| } |
| |
| if (sb.getEjbClass() != null) { |
| children.add(new BeanNode((SessionBean) sb)); |
| } |
| |
| List r = sb.getBusinessLocals(); |
| for (Object locals : r) { |
| children.add(new BeanInterfaceNode(sb, (String)locals, BeanInterfaceNode.KINDS.BUSSINESS_LOCAL)); |
| } |
| |
| r = sb.getBusinessRemotes(); |
| for (Object locals : r) { |
| children.add(new BeanInterfaceNode(sb, (String)locals, BeanInterfaceNode.KINDS.BUSSINESS_REMOTE)); |
| } |
| } |
| |
| private boolean isEjbModuleProject(IProject project) { |
| try { |
| IFacetedProject facetedProject = ProjectFacetsManager.create(project); |
| IProjectFacetVersion installedVersion = facetedProject.getInstalledVersion(ProjectFacetsManager.getProjectFacet(IJ2EEFacetConstants.EJB).getVersion(IJ2EEFacetConstants.EJB_30.getVersionString()).getProjectFacet()); |
| return installedVersion != null; |
| } catch (CoreException e) { |
| JEEUIPlugin.logError("Can not acces project", e); //$NON-NLS-1$ |
| } |
| return false; |
| } |
| |
| public boolean hasChildren(Object element) { |
| if (element instanceof AbstractGroupProvider) { |
| return ((AbstractGroupProvider) element).hasChildren(); |
| } else if (element instanceof AbstractDDNode) { |
| return ((AbstractDDNode) element).hasChildren(); |
| } else if (element instanceof SessionBean) { |
| return true; |
| } else if (element instanceof EntityBean) { |
| return true; |
| }else if (element instanceof MessageDrivenBean) { |
| return true; |
| } else |
| return false; |
| } |
| |
| public Object getParent(Object element) { |
| return null; |
| } |
| |
| public Object[] getElements(Object inputElement) { |
| return getChildren(inputElement); |
| } |
| |
| @Override |
| protected AbstractGroupProvider getNewContentProviderInstance(IProject project) { |
| IModelProvider cachedModelProvider = getCachedModelProvider(project); |
| GroupEJBProvider root = new GroupEJBProvider((EJBJar) cachedModelProvider.getModelObject()); |
| root.setProjectName(project.getName()); |
| return root; |
| } |
| |
| } |