/*******************************************************************************
 * Copyright (c) 2003, 2004 IBM Corporation and others.
 * 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:
 *     IBM Corporation - initial API and implementation
 *******************************************************************************/
package org.eclipse.jst.ws.internal.consumption.ui.widgets.test;

import java.io.IOException;

import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.jdt.core.IClasspathEntry;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.JavaCore;
import org.eclipse.jdt.core.JavaModelException;
import org.eclipse.jem.util.emf.workbench.ProjectUtilities;
import org.eclipse.jst.j2ee.applicationclient.internal.creation.IApplicationClientNatureConstants;
import org.eclipse.jst.j2ee.commonarchivecore.internal.helpers.ArchiveManifest;
import org.eclipse.jst.j2ee.internal.earcreation.AddUtilityJARMapCommand;
import org.eclipse.jst.j2ee.internal.earcreation.EARNatureRuntime;
import org.eclipse.jst.j2ee.internal.project.IEJBNatureConstants;
import org.eclipse.jst.j2ee.internal.project.IWebNatureConstants;
import org.eclipse.jst.j2ee.internal.project.J2EENature;
import org.eclipse.jst.j2ee.internal.project.J2EEProjectUtilities;
import org.eclipse.jst.ws.internal.common.J2EEUtils;
import org.eclipse.jst.ws.internal.common.ResourceUtils;
import org.eclipse.wst.command.internal.provisional.env.core.SimpleCommand;
import org.eclipse.wst.command.internal.provisional.env.core.common.Environment;
import org.eclipse.wst.command.internal.provisional.env.core.common.SimpleStatus;
import org.eclipse.wst.command.internal.provisional.env.core.common.Status;
import org.eclipse.wst.server.core.IServer;

public class AddModuleDependenciesCommand extends SimpleCommand
{
  private String sampleProject;
  private String sampleEAR;
  private String sampleP;
  private String sampleC;
  private String clientC;
  private String clientP;
  private String clientProject;
  private String sampleServerTypeID;
  private IServer sampleExistingServer;
  private String clientJ2EEVersion;

  public AddModuleDependenciesCommand()
  {
    super("org.eclipse.jst.ws.internal.consumption.command.common.AddModuleDependenciesTask", "org.eclipse.jst.ws.internal.consumption.command.common.AddModuleDependenciesTask");
  }

  /**
   * Execute WebServerDefaultingTask Set the default server name and id given a
   * deployable.
   */
  public Status execute(Environment env)
  {
    try
    {
      
	  if(sampleProject != null){
	    int index = sampleProject.indexOf("/");
		sampleP = sampleProject.substring(0,index);
		sampleC = sampleProject.substring(index + 1);
	  }
	  IProject sampleIProject = (IProject)ProjectUtilities.getProject(sampleP);
              
      if (sampleIProject == null)
      {
        CreateSampleProjectCommand createSample = new CreateSampleProjectCommand();
        createSample.setSampleProject(sampleProject);
        createSample.setSampleProjectEAR(sampleEAR);
        if (sampleEAR!=null && sampleEAR.length()>0)
          createSample.setNeedEAR(true);    
        createSample.setExistingServer(sampleExistingServer);
        createSample.setServerFactoryId(sampleServerTypeID);
        createSample.setJ2eeVersion(clientJ2EEVersion);
        Status status = createSample.execute(env);
      }
      IResource res = ResourceUtils.findResource(sampleEAR);
      IProject sampleIEAR = null;
      if (res instanceof IProject)
        sampleIEAR = (IProject)res;
      if (sampleIProject == null)
        return new SimpleStatus("", "", Status.ERROR);
      
	  if(clientProject != null){
	    int index = clientProject.indexOf("/");
		clientP = clientProject.substring(0,index);
		clientC = clientProject.substring(index + 1);
	  }
	  IProject clientIProject = (IProject)ProjectUtilities.getProject(clientP);
	       
      
      if (clientIProject != null && !ResourceUtils.isWebProject(clientIProject))
      {
        String uri = clientIProject.getName() + ".jar";
        if (ResourceUtils.isTrueJavaProject(clientIProject))
          addJavaProjectAsUtilityJar(clientIProject, sampleIEAR, uri);
        addJAROrModuleDependency(sampleIProject, uri);
        addBuildPath(sampleIProject, clientIProject);
      }
    }
    catch (IOException ioe)
    {
    }
    catch (CoreException ce)
    {
    }
    return new SimpleStatus("");
  }

  private void addJavaProjectAsUtilityJar(IProject javaProject, IProject earProject, String uri)
  {
    AddUtilityJARMapCommand cmd = new AddUtilityJARMapCommand(earProject, uri, javaProject);
    cmd.execute();
  }

  private void addJAROrModuleDependency(IProject project, String uri) throws IOException, CoreException
  {
    J2EENature nature = null;
    if (ResourceUtils.isWebProject(project))
      nature = getWebNature(project);
    else if (ResourceUtils.isAppClientProject(project))
      nature = getAppClientNature(project);
    else if (ResourceUtils.isEJBProject(project))
      nature = getEJBNature(project);
    if (nature != null)
    {
      ArchiveManifest manifest = J2EEProjectUtilities.readManifest(project);
      manifest.mergeClassPath(new String[]{uri});
      J2EEProjectUtilities.writeManifest(project, manifest);
    }
  }

  private void addBuildPath(IProject referencingProject, IProject referencedProject) throws JavaModelException
  {
    IJavaProject javaProject = JavaCore.create(referencingProject);
    if (javaProject != null)
    {
      IClasspathEntry[] oldCp = javaProject.getRawClasspath();
      IClasspathEntry[] newCp = new IClasspathEntry[oldCp.length];
      for (int i = 0; i < oldCp.length; i++)
        newCp[i] = oldCp[i];
      newCp[newCp.length - 1] = JavaCore.newProjectEntry(referencedProject.getFullPath());
      javaProject.setRawClasspath(newCp, new NullProgressMonitor());
    }
  }

  private J2EENature getWebNature(IProject project)
  {
    try
    {
      return (J2EENature)project.getNature(IWebNatureConstants.J2EE_NATURE_ID);
    }
    catch (CoreException ce)
    {
    }
    return null;
  }

  private J2EENature getAppClientNature(IProject project)
  {
    for (int i = 0; i < IApplicationClientNatureConstants.APPCLIENT_NATURE_IDS.length; i++)
    {
      try
      {
        return (J2EENature)project.getNature(IApplicationClientNatureConstants.APPCLIENT_NATURE_IDS[i]);
      }
      catch (CoreException ce)
      {
      }
    }
    return null;
  }

  private J2EENature getEJBNature(IProject project)
  {
    try
    {
      // ksc return
      // (J2EENature)project.getNature(IEJBNatureConstants.EJB_20_NATURE_ID);
      return (J2EENature)project.getNature(IEJBNatureConstants.NATURE_ID);
    }
    catch (CoreException ce)
    {
    }
    try
    {
      return (J2EENature)project.getNature(IEJBNatureConstants.NATURE_ID);
    }
    catch (CoreException ce)
    {
    }
    return null;
  }

  private IProject getEARProject(IProject sampleProject)
  {
    EARNatureRuntime[] natures = J2EEUtils.getEARProjects(sampleProject);
    if (natures != null && natures.length > 0)
      return natures[0].getProject();
    else
      return null;
  }

  /**
   * @param proxyProject
   *          The proxyProject to set.
   */
  public void setSampleProject(String sampleProject)
  {
    this.sampleProject = sampleProject;
  }

  public String getSampleProject()
  {
    return sampleProject;
  }

  public void setSampleProjectEAR(String sampleEAR)
  {
    this.sampleEAR = sampleEAR;
  }

  public void setClientProject(String clientProject)
  {
    this.clientProject = clientProject;
  }

  public void setSampleServerTypeID(String sampleServerTypeID)
  {
    this.sampleServerTypeID = sampleServerTypeID;
  }

  public void setSampleExistingServer(IServer sampleExistingServer)
  {
    this.sampleExistingServer = sampleExistingServer;
  }
  
  public void setClientJ2EEVersion(String clientJ2EEVersion)
  {
    this.clientJ2EEVersion = clientJ2EEVersion;
  }
}
