Package org.eclipse.ecf.tests.remoteservice

Source Code of org.eclipse.ecf.tests.remoteservice.AbstractConcatHostApplication

/*******************************************************************************
* Copyright (c) 2009 EclipseSource 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:
*   EclipseSource - initial API and implementation
******************************************************************************/
package org.eclipse.ecf.tests.remoteservice;

import java.util.Dictionary;

import org.eclipse.ecf.core.ContainerCreateException;
import org.eclipse.ecf.core.ContainerFactory;
import org.eclipse.ecf.core.IContainer;
import org.eclipse.ecf.core.IContainerManager;
import org.eclipse.ecf.core.identity.ID;
import org.eclipse.ecf.remoteservice.IRemoteServiceContainer;
import org.eclipse.ecf.remoteservice.IRemoteServiceRegistration;
import org.eclipse.ecf.remoteservice.RemoteServiceContainer;
import org.eclipse.equinox.app.IApplication;
import org.eclipse.equinox.app.IApplicationContext;

public abstract class AbstractConcatHostApplication implements IApplication {

  protected IRemoteServiceContainer rsContainer;
  protected boolean done = false;

  /**
   * This is the only method that must be overridden in order to define the
   * container type used for running a concat server as an application.
   *
   * @return String that will be used to create a container instance (e.g.
   *         "ecf.generic.server" or "ecf.r_osgi.peer")
   */
  protected abstract String getContainerType();

  public Object start(IApplicationContext context) throws Exception {
    // First, create container of appropriate type
    IContainer container = createContainer();
    // Then, from container create remote service container
    rsContainer = createRemoteServiceContainer(container);
    // Now register remote service
    registerRemoteService(getRemoteServiceClass(), createRemoteService(),
        createRemoteServiceProperties());

    printStarted();
    // And wait until we're explicitly stopped.
    synchronized (this) {
      while (!done)
        wait();
    }
    return new Integer(0);
  }


  public void stop() {
    rsContainer.getContainer().disconnect();
    rsContainer.getContainer().dispose();
    ((IContainerManager) ContainerFactory.getDefault())
        .removeAllContainers();
    done = true;
    notifyAll();
  }

  protected void printStarted() {
    System.out.println("STARTED: Test Concat Server\n\tcontainerType="+getContainerType()+"\n\tID="+rsContainer.getContainer().getID());
  }
 
  protected Class getRemoteServiceClass() {
    return IConcatService.class;
  }

  protected Object createRemoteService() {
    return new IConcatService() {
      public String concat(String string1, String string2) {
        final String result = string1.concat(string2);
        System.out.println("SERVICE.concat(" + string1 + "," + string2
            + ") returning " + result);
        return string1.concat(string2);
      }
    };
  }

  protected Dictionary createRemoteServiceProperties() {
    return null;
  }

  protected IContainer createContainer() throws ContainerCreateException {
    return Activator.getDefault().getContainerManager()
        .getContainerFactory().createContainer(getContainerType());
  }

  protected IContainer createContainer(String containerID) throws ContainerCreateException {
    return Activator.getDefault().getContainerManager()
    .getContainerFactory().createContainer(getContainerType(),containerID);
  }
 
  protected IContainer createContainer(String containerType, String containerId) throws ContainerCreateException {
    return Activator.getDefault().getContainerManager()
    .getContainerFactory().createContainer(containerType,containerId);
  }
 
  protected IContainer createContainer(ID containerID) throws ContainerCreateException {
    return Activator.getDefault().getContainerManager()
        .getContainerFactory().createContainer(getContainerType(),containerID);
  }

  protected IRemoteServiceContainer createRemoteServiceContainer(
      IContainer container) {
    return new RemoteServiceContainer(container);
  }

  protected IRemoteServiceRegistration registerRemoteService(Class clazz,
      Object service, Dictionary properties) {
    return rsContainer.getContainerAdapter().registerRemoteService(
        new String[] { clazz.getName() },
        service, properties);
  }

}
TOP

Related Classes of org.eclipse.ecf.tests.remoteservice.AbstractConcatHostApplication

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.