/*******************************************************************************
* Copyright (c) 2009 Composent, Inc. 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:
*   Composent, Inc. - initial API and implementation
******************************************************************************/
package org.eclipse.ecf.internal.console;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;

import org.eclipse.ecf.core.ContainerTypeDescription;
import org.eclipse.ecf.core.IContainer;
import org.eclipse.ecf.core.IContainerFactory;
import org.eclipse.ecf.core.IContainerManager;
import org.eclipse.ecf.core.identity.ID;
import org.eclipse.ecf.core.identity.IDFactory;
import org.eclipse.ecf.core.identity.Namespace;
import org.eclipse.osgi.framework.console.CommandInterpreter;
import org.osgi.framework.BundleContext;
import org.osgi.util.tracker.ServiceTracker;

public class ECFCommandProvider implements
		org.eclipse.osgi.framework.console.CommandProvider {

	public static final String NEW_LINE = System.getProperty("line.separator", "\n"); //$NON-NLS-1$ //$NON-NLS-2$

	private BundleContext context;
	private ServiceTracker containerManagerTracker;
	
	public ECFCommandProvider(BundleContext context) {
		this.context = context;
	}
	
	private IContainerManager getContainerManager() {
		if (containerManagerTracker == null) {
			containerManagerTracker = new ServiceTracker(this.context,IContainerManager.class.getName(),null);
			containerManagerTracker.open();
		}
		return (IContainerManager) containerManagerTracker.getService();
	}
	
	private IContainerFactory getContainerFactory() {
		return getContainerManager().getContainerFactory();
	}
	
	public void dispose() {
		if (containerManagerTracker != null) {
			containerManagerTracker.close();
			containerManagerTracker = null;
		}
		this.context = null;
	}

	private IContainer createContainer(CommandInterpreter interpreter, String containerTypeDescriptionName, String[] args) {
		IContainerFactory containerFactory = getContainerFactory();
		try {
			if (containerTypeDescriptionName == null) return containerFactory.createContainer();
			else if (args == null) return containerFactory.createContainer(containerTypeDescriptionName);
			else return containerFactory.createContainer(containerTypeDescriptionName,args);
		} catch (Exception e) {
			printException(interpreter,"Could not create container with type="+containerTypeDescriptionName,e);
			return null;
		}
	}
	
	private void printException(CommandInterpreter interpreter, String message, Throwable t) {
		interpreter.println("--Exception--");
		if (message != null) interpreter.println(message);
		if (t != null) interpreter.printStackTrace(t);
		interpreter.println("--End Exception--");
	}

	private String[] getArgs(CommandInterpreter interpreter) {
		List result = new ArrayList();
		String arg = null;
		while ((arg = interpreter.nextArgument()) != null) result.add(arg);
		return (String[]) result.toArray(new String[] {});
	}
	
	private String[] getRemainingArgs(String[] args, int startPosition) {
		int targetLength = args.length-startPosition;
		String[] result = new String[targetLength];
		System.arraycopy(args, startPosition, result, 0, targetLength);
		return result;
	}
	
	public void _createcontainer(CommandInterpreter interpreter) {
		String[] args = getArgs(interpreter);
		String factoryName = (args.length==0)?null:args[0];
		String[] targetArgs = (args.length==0)?null:getRemainingArgs(args,1);
		IContainer c = createContainer(interpreter, factoryName, targetArgs);
		if (c != null) {
			interpreter.print("container created. ");
			printID(interpreter, c.getID());
		}
	}
	
	private void printContainer(CommandInterpreter interpreter, IContainer container, boolean verbose) {
		interpreter.println("--Container--");
		printID(interpreter, container.getID());
		if (verbose) {
			interpreter.print("\tclass=");
			interpreter.println(container.getClass().getName());
			ID connectedID = container.getConnectedID();
			if (connectedID != null) {
				interpreter.print("\tConnected to: ");
				printID(interpreter, connectedID);
			} else interpreter.println("\tNot connected.");
			Namespace ns = container.getConnectNamespace();
			if (ns != null) {
				interpreter.print("\tConnect namespace: ");
				interpreter.println(ns.getName());
			} else interpreter.println("\tNo connect namespace.");
			ContainerTypeDescription desc = getContainerManager().getContainerTypeDescription(container.getID());
			if (desc != null) printDescription(interpreter, desc);
		}
		interpreter.println("--End Container--");
	}
	
	private void printDescription(CommandInterpreter interpreter, ContainerTypeDescription desc) {
		interpreter.print("\tFactory name=");
		interpreter.println(desc.getName());
		interpreter.print("\tFactory description=");
		interpreter.println(desc.getDescription());
		String[] arr = desc.getSupportedIntents();
		if (arr != null) {
			interpreter.print("\tSupported intents=");
			interpreter.println(Arrays.asList(arr));
		}
		arr = desc.getSupportedConfigs();
		if (arr != null) {
			interpreter.print("\tSupported configs=");
			interpreter.println(Arrays.asList(arr));
		}
		arr = desc.getSupportedAdapterTypes();
		if (arr != null) {
			interpreter.print("\tSupported adapters=");
			interpreter.println(Arrays.asList(arr));
		}
		interpreter.println("\tHidden="+desc.isHidden());
		interpreter.println("\tServer="+desc.isServer());
	}
	
	public void _listcontainers(CommandInterpreter interpreter) {
		String[] args = getArgs(interpreter);
		boolean verbose = (args.length < 1)?false:new Boolean(args[0]).booleanValue();
		IContainer[] containers = getContainerManager().getAllContainers();
		if (containers == null || containers.length == 0) interpreter.println("No containers found.");
		for(int i=0; i < containers.length; i++) {
			printContainer(interpreter, containers[i], verbose);
		}
	}

	public void _listfactories(CommandInterpreter interpreter) {
		List descs = getContainerManager().getContainerFactory().getDescriptions();
		if (descs == null || descs.size() == 0) interpreter.println("No factories.");
		for(Iterator i=descs.iterator(); i.hasNext(); ) {
			ContainerTypeDescription desc = (ContainerTypeDescription) i.next();
			printDescription(interpreter, desc);
		}
	}

	private void printID(CommandInterpreter interpreter, ID id) {
		interpreter.print("\tID:");
		if (id == null) {
			interpreter.println("null");
			return;
		}
		interpreter.print("ns="+id.getNamespace().getName());
		interpreter.print(";name=");
		interpreter.print(id.getName());
		interpreter.println();
	}

	public void _destroycontainer(CommandInterpreter interpreter) {
		String[] args = getArgs(interpreter);
		if (args == null || args.length != 2) {
			interpreter.println("Incorrect number of arguments for container destroy");
			return;
		}
		ID id = createID(interpreter, args[0],args[1]);
		if (id == null) return;
		IContainer container = getContainerManager().removeContainer(id);
		if (container == null) {
			interpreter.println("Container not found to remove");
			return;
		}
		// Dispose the container instance
		container.dispose();
		interpreter.println("Container destroyed.");
	}
	
	private ID createID(CommandInterpreter interpreter, String namespace, String val) {
		try {
		return IDFactory.getDefault().createID(namespace, val);
		} catch (Exception e) {
			interpreter.printStackTrace(e);
			return null;
		}
	}

	public String getHelp() {
		StringBuffer help = new StringBuffer();
		help.append(NEW_LINE);
		help.append("---");
		help.append("Eclipse Communication Framework (ECF) Commands");
		help.append("---");
		help.append(NEW_LINE);
		help.append("\tlistfactories -- List all container factories.");
		help.append(NEW_LINE);
		help.append("\tlistcontainers [verbose] -- List all existing containers.");
		help.append(NEW_LINE);
		help.append("\tcreatecontainer [<containerFactoryName> [<arg0> <arg1>...]] -- Create new container.");
		help.append(NEW_LINE);
		help.append("\tdestroycontainer <namespace> <id> -- Remove and dispose container specified by namespace/id combination.");
		help.append(NEW_LINE);
		return help.toString();
	}

}
