/***********************************************************************
 * 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.ejb;

import java.util.List;

import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.jst.javaee.core.JavaEEObject;
import org.eclipse.jst.javaee.ejb.EJBJar;
import org.eclipse.jst.jee.ui.internal.Messages;
import org.eclipse.jst.jee.ui.internal.navigator.AbstractGroupProvider;
import org.eclipse.osgi.util.NLS;
import org.eclipse.swt.graphics.Image;
/**
 * Deployment Descriptor root node. 
 * 
 * @author Dimitar Giormov
 *
 */
public class GroupEJBProvider extends AbstractGroupProvider implements IAdaptable {

	private GroupEjbSession groupEjbSession;
	private GroupEjbMessageDriven groupEjbMessageDriven;
	private GroupEjbEntity groupEjbEntity;
	private String projectName = null;


	public GroupEJBProvider(EJBJar ejbJar) {
		super(ejbJar);

		groupEjbSession = new GroupEjbSession(ejbJar);
		groupEjbMessageDriven = new GroupEjbMessageDriven(ejbJar);
		groupEjbEntity = new GroupEjbEntity(ejbJar);

		children.add(groupEjbSession);
		children.add(groupEjbMessageDriven);
		children.add(groupEjbEntity);
	}

	@Override
	public List getChildren() {
		return children;
	}

	public EJBJar getEjbJar() {
		return (EJBJar) javaee;
	}

	@Override
	public String getText() {
		return NLS.bind(Messages.DEPLOYMENT_DESCRIPTOR, projectName);
	}

	public String getProjectName() {
		return projectName;
	}

	public void setProjectName(String projectName) {
		this.projectName = projectName;
	}

	@Override
	public Image getImage() {
		return null;
	}

	@Override
	public void reinit(JavaEEObject modelObject) {
		super.reinit(modelObject);
		groupEjbSession.reinit(modelObject);
		groupEjbMessageDriven.reinit(modelObject);
		groupEjbEntity.reinit(modelObject);
	}

	public Object getAdapter(Class adapter) {
		if (IProject.class == adapter){
			return ResourcesPlugin.getWorkspace().getRoot().getProject(getProjectName());
		}
		return null;
	}
}
