edu.stanford.junction.addon.JunctionServiceFactory.java Source code

Java tutorial

Introduction

Here is the source code for edu.stanford.junction.addon.JunctionServiceFactory.java

Source

/*
 * Copyright (C) 2010 Stanford University
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package edu.stanford.junction.addon;

import java.lang.reflect.Method;
import java.net.URI;
import java.net.URL;
import java.util.Map;

import org.json.JSONObject;

import edu.stanford.junction.JunctionMaker;
import edu.stanford.junction.api.activity.JunctionService;
import edu.stanford.junction.api.messaging.MessageHandler;
import edu.stanford.junction.api.messaging.MessageHeader;

/**
 * TODO: This class is temporarily broken. It requires switchboard information,
 * and so is XMPP specific for now.
 * 
 * Line 71 has been commented out, resulting in nothing working here.
 *
 */
public class JunctionServiceFactory extends JunctionService {

    @Override
    public void onMessageReceived(MessageHeader header, JSONObject message) {
        // TODO: verify you got an activity request
        // somehow get the Activity object
        // that means the request needs
        // * a host
        // * an activity descriptor

        try {

            URI activityURI = new URI(message.getString("activity"));

            // TODO: support a factory mapping from serviceName => class
            String className = message.getString("serviceName");

            Class c = null;
            try {
                c = Class.forName(className);
            } catch (Exception e) {
                System.out.println("Could not find class for service " + className + ".");
            }

            JunctionService service = null;
            Method method = null;
            try {
                method = c.getMethod("newInstance");
            } catch (Exception e) {
                System.out.println("No newInstance method found for " + c + ".");
            }
            service = (JunctionService) method.invoke(null);

            String queryPart = activityURI.getQuery();
            System.out.println("query part is " + queryPart);
            String localRole = "Unknown";
            int i;
            if ((i = queryPart.indexOf("role=")) >= 0) {
                localRole = queryPart.substring(i + 14);
                if ((i = localRole.indexOf("&")) > 0) {
                    localRole = localRole.substring(0, i);
                }
            }

            System.out.println("Setting service role to " + localRole);
            service.setRole(localRole);

            System.out.println("service actorID is " + service.getActorID());
            //JunctionMaker.getInstance().newJunction(activityURI,service);               
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Override
    public String getServiceName() {
        return "ServiceFactory";
    }

    public static void main(String[] argv) {
        String switchboard = "prpl.stanford.edu";

        JunctionService waiter = new JunctionServiceFactory();
        waiter.register(switchboard);
        while (true) {
            try {
                Thread.sleep(500000);
            } catch (Exception e) {
            }
        }
    }
}