/*
-----------------------------------------------------------------------
--          			CHESS core plugin							 --
--                                                                   --
--                    Copyright (C) 2011-2015                        --
--                 University of Padova, ITALY                       --
--                                                                   --
-- 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-v20.html                         --
-----------------------------------------------------------------------
 */

package org.polarsys.chess.core.util;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintStream;
import java.net.URI;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;

import org.eclipse.core.resources.IContainer;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.FileLocator;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.Path;
import org.eclipse.core.runtime.Plugin;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.ui.console.MessageConsoleStream;
import org.polarsys.chess.core.Activator;
import org.polarsys.chess.core.internal.util.InternalCHESSProjectSupport;
import org.polarsys.chess.core.internal.util.InternalConsoleUtil;

/**
 * This class contains a list of utility methods to deal with the Eclipse project.
 *
 */
public class CHESSProjectSupport {

	/**
	 * The CHESS console name used to output information.
	 */
	public static String CHESS_CONSOLE_NAME = "CHESS notification console";

	/** The Constant isConsoleEnabled. */
	private static final boolean isConsoleEnabled = true;

	/**
	 * The CHESS console.
	 */
	public static final MessageConsoleStream CHESS_CONSOLE = InternalConsoleUtil
			.findCHESSconsole();
	/**
	 * The CHESS console stream.
	 */
	public static final PrintStream CHESS_CONSOLE_STREAM = new PrintStream(
			CHESS_CONSOLE);

	/**
	 * Print a message to the CHESS Console.
	 *
	 * @param message the message
	 */
	public static void printlnToCHESSConsole(final String message) {
		if (isConsoleEnabled)
			CHESS_CONSOLE.println(message);
	}

	/**
	 * Create an Eclipse Project given a name and a location. This method
	 * automatically add the CHESS nature.
	 * 
	 * @param projectName
	 *            The name of the project
	 * @param location
	 *            The location where to create the project
	 * @return the project created (IProject)
	 */
	public static IProject createProject(final String projectName, final URI location) {
		IProject project = InternalCHESSProjectSupport.createBaseProject(
				projectName, location);
		try {
			InternalCHESSProjectSupport.addNature(project);
		} catch (CoreException e) {
			Activator.error("Create project error", e);
		}
		return project;
	}

	/**
	 * Create folders. The typical use is: <code>
	 * myNewFolders = myProject.getFolder("folders/to/create/");
	 * createFolder(myNewFolders);
	 * </code>
	 * 
	 * @param folder
	 *            the IFolder instance to create
	 * @throws CoreException
	 *             Exceptions during the folder creation are not handled by this
	 *             method.
	 */
	public static void createFolder(final IFolder folder) throws CoreException {
		IContainer parent = folder.getParent();
		if (parent instanceof IFolder) {
			createFolder((IFolder) parent);
		}

		if (!folder.exists()) {
			folder.create(true, true, null);
		}
	}

	/**
	 * This method converts a Resource to a IFile. This allows to use IFile
	 * manipulation utilities provided by this library.
	 * 
	 * @param inResource
	 *            the resource to converto to IFile
	 * @return the IFile converted or null in case the resource is not valid.
	 */
	public static/* @Nullable */IFile resourceToFile(final Resource inResource) {
		java.net.URI inputJURI = null;
		if (inResource.getURI().isPlatformResource()) {
			inputJURI = java.net.URI.create(inResource.getURI()
					.toPlatformString(false).toString());
			IPath path = InternalCHESSProjectSupport.toPath(inputJURI);
			IFile inputFile = ResourcesPlugin.getWorkspace().getRoot()
					.getFile(path);
			return inputFile;
		}
		return null;
	}

	/**
	 * Copy an IFile to a folder and rename it. If a copy  exists already then overwrite it.
	 * 
	 * @param inputFile the IFile to copy
	 * @param newLocation a String to specify the location to copy the file
	 * @param outputName the name of the copy
	 * @return the IFile created
	 * @throws Exception when the file cannot be copied or the old copy cannot be overwritten.
	 */
	public static IFile copyFile(final IFile inputFile, final String newLocation,
			final String outputName) throws Exception {
		IFile inputCopy = inputFile.getProject().getFile(
				newLocation + File.separator + outputName);
		try {
			inputCopy.delete(true, null);
		} catch (CoreException e) {
			e.printStackTrace();
			throw new Exception("Unable to make a copy of the model");
		}
		try {
			inputFile.copy(inputCopy.getFullPath(), true, null);
		} catch (CoreException e) {
			e.printStackTrace();
			throw new Exception("Unable to make a copy of the model");
		}
		return inputCopy;
	}

	/**
	 * Replace the content of the 'out' IFile  with the content of the 'in' IFile.
	 * 
	 * @param in the new IFile content
	 * @param out the old IFile content to be replaced
	 * @throws CoreException when the contents of the IFiles cannot be manipulated
	 * @throws IOException when the stream used to transfer the content cannot be closed
	 */
	public static void fileReplace(final IFile in, final IFile out) throws CoreException,
			IOException {
		InputStream ins = in.getContents(true);
		out.setContents(ins, true, true, null);
		ins.close();
	}

	
	/**
	 * Copies the content of a plug-in to a project. Useful to copy predefined source code libraries to a project during the code generation.
	 * 
	 * @param pluginID the ID of the plugin where the files to be copied reside, not used
	 * @param plugin the plugin where the files to be copied reside
	 * @param pluginPath the path to the folder where the file to be copied reside
	 * @param currentProject the project to copy the files
	 * @param projectPath the path of the project where the file will be copied
	 * @param includeBundleFolder whether to copy the root folder where the files reside or not
	 * @throws IOException when the operation cannot be performed
	 */
	public static void bundleToProjectCopy(final String pluginID, final Plugin plugin,
			final String pluginPath,final  IProject currentProject, final String projectPath,
			boolean includeBundleFolder) throws IOException {
		List<String> collectedPaths = new ArrayList<String>();
		InternalCHESSProjectSupport.getBundleContents(plugin, pluginPath,
				collectedPaths);

		IPath workingDir = currentProject.getFolder(projectPath).getLocation();

		for (String collectedPath : collectedPaths) {
			Path path = new Path(collectedPath);
			URL u = FileLocator.find(plugin.getBundle(), path, null);

			if (!includeBundleFolder)
				collectedPath = collectedPath
						.substring(pluginPath.length() + 1);

			try {
				InputStream in = u.openStream();
				File f = new File(workingDir + "/" + collectedPath);

				f.getParentFile().mkdirs();
				FileOutputStream o = new FileOutputStream(f);
				InternalCHESSProjectSupport.fileCopy(in, o);
			} catch (IOException e) {
				Activator.error("Unable to copy the content of the plug-in", e);
				throw e;
			}	
		}
	}

	/**
	 * Deletes a folder.
	 * 
	 * @param folder the IFolder to delete
	 * @throws CoreException when the folder cannot be deleted
	 */
	public static void deleteFolder(final IFolder folder) throws CoreException {
		if (folder.exists()) {
			folder.delete(true, null);
		}
	}

}
