Package org.eclipse.ecf.internal.provider.rss.container

Source Code of org.eclipse.ecf.internal.provider.rss.container.RssServerSOContainer

/**
* Copyright (c) 2006 Parity Communications, Inc.
* 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:
*     Sergey Yakovlev - initial API and implementation
*/
package org.eclipse.ecf.internal.provider.rss.container;

import java.io.IOException;
import java.net.InetAddress;
import java.net.URI;
import java.net.URISyntaxException;
import java.security.PermissionCollection;
import java.util.ArrayList;
import java.util.List;

import org.eclipse.ecf.core.identity.ID;
import org.eclipse.ecf.core.identity.IDFactory;
import org.eclipse.ecf.core.security.IConnectHandlerPolicy;
import org.eclipse.ecf.core.sharedobject.ISharedObjectContainerConfig;
import org.eclipse.ecf.core.sharedobject.ISharedObjectContainerGroupManager;
import org.eclipse.ecf.core.sharedobject.ISharedObjectManager;
import org.eclipse.ecf.core.sharedobject.ReplicaSharedObjectDescription;
import org.eclipse.ecf.core.sharedobject.security.ISharedObjectPolicy;
import org.eclipse.ecf.core.util.Trace;
import org.eclipse.ecf.internal.provider.rss.RssDebugOptions;
import org.eclipse.ecf.internal.provider.rss.RssPlugin;
import org.eclipse.ecf.provider.generic.SOContainerConfig;
import org.eclipse.ecf.provider.generic.ServerSOContainer;

/**
* The RssServerSOContainer implements the basic RSS server functionality.
*
*/
public class RssServerSOContainer extends ServerSOContainer {

  public static final int DEFAULT_KEEPALIVE = 30000;
  public static final int DEFAULT_PORT = 80;

  // Keep alive value
  protected int keepAlive;
  protected RssServerSOContainerGroup group;
  private boolean isSingle = false;

  /**
   * The constructors
   * @param config
   *
   * @throws IOException
   * @throws URISyntaxException
   */
  public RssServerSOContainer(ISharedObjectContainerConfig config) throws URISyntaxException, IOException {
    this(config, null, DEFAULT_KEEPALIVE);
  }

  public RssServerSOContainer(ISharedObjectContainerConfig config, int keepAlive) throws URISyntaxException, IOException {
    this(config, null, keepAlive);
  }

  public RssServerSOContainer(ISharedObjectContainerConfig config, RssServerSOContainerGroup group, int keepAlive) throws URISyntaxException, IOException {
    super(config);
    this.keepAlive = keepAlive;
    final URI actualURI = new URI(getID().getName());
    final int urlPort = actualURI.getPort();
    if (group == null) {
      isSingle = true;
      this.group = new RssServerSOContainerGroup(urlPort);
      this.group.putOnTheAir();
    } else {
      this.group = group;
    }
    this.group.add(String.valueOf(urlPort), this);
  }

  protected void trace(String msg) {
    Trace.trace(RssPlugin.PLUGIN_ID, RssDebugOptions.DEBUG, msg);
  }

  protected void dumpStack(String msg, Throwable e) {
    Trace.catching(RssPlugin.PLUGIN_ID, RssDebugOptions.EXCEPTIONS_CATCHING, this.getClass(), "", e);
  }

  public void dispose() {
    URI aURI = null;
    try {
      aURI = new URI(getID().getName());
      group.remove(String.valueOf(aURI.getPort()));
    } catch (final URISyntaxException e) {
      // Should never happen
    }
    if (isSingle) {
      group.takeOffTheAir();
    }
    group = null;
    super.dispose();
  }

  public static void main(String args[]) throws Exception {
    RssServerSOContainerGroup serverGroups[] = null;
    final List servers = new ArrayList();
    int port = DEFAULT_PORT;
    if (args.length > 0) {
      if (args[0].equals("-p")) {
        port = Integer.parseInt(args[1]);
      }
    }
    // Get server identity
    final String serverName = "//" + InetAddress.getLocalHost().getHostName() + ":" + port;
    serverGroups = new RssServerSOContainerGroup[1];
    // Setup server group
    serverGroups[0] = new RssServerSOContainerGroup(port);
    // Create identity for server
    final ID id = IDFactory.getDefault().createStringID(serverName);
    // Create server config object with identity and default timeout
    final SOContainerConfig config = new SOContainerConfig(id);
    // Make server instance
    System.out.println("Creating ECF server container...");
    final RssServerSOContainer server = new RssServerSOContainer(config, serverGroups[0], DEFAULT_KEEPALIVE);
    // Setup join policy
    ((ISharedObjectContainerGroupManager) server).setConnectPolicy(new IConnectHandlerPolicy() {
      public PermissionCollection checkConnect(Object address, ID fromID, ID targetID, String targetGroup, Object connectData) throws Exception {
        System.out.println("JOIN Addr=" + address + ";From=" + fromID + ";Group=" + targetGroup + ";Data=" + connectData);
        return null;
      }

      public void refresh() {
        System.out.println("joinPolicy.refresh()");
      }
    });
    // Setup add shared object policy
    final ISharedObjectManager manager = server.getSharedObjectManager();
    manager.setRemoteAddPolicy(new ISharedObjectPolicy() {
      public PermissionCollection checkAddSharedObject(ID fromID, ID toID, ID localID, ReplicaSharedObjectDescription newObjectDescription) throws SecurityException {
        System.out.println("ADDSHAREDOBJECT From=" + fromID + ";To=" + toID + ";SharedObjectDesc=" + newObjectDescription);
        return null;
      }

      public void refresh() {
        System.out.println("sharedObjectPolicy.refresh()");
      }
    });

    serverGroups[0].putOnTheAir();
    servers.add(server);
    System.out.println("success!");
    System.out.println("Waiting for JOIN requests at '" + id.getName() + "'...");
    System.out.println("<Ctrl>+C to stop server");
  }
}
TOP

Related Classes of org.eclipse.ecf.internal.provider.rss.container.RssServerSOContainer

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.