Package org.eclipse.ecf.internal.console

Source Code of org.eclipse.ecf.internal.console.ECFCommandProvider

/*******************************************************************************
* 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();
  }

}
TOP

Related Classes of org.eclipse.ecf.internal.console.ECFCommandProvider

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.