Package com.k42b3.zubat

Source Code of com.k42b3.zubat.Zubat

/**
* $Id: Zubat.java 226 2012-04-29 08:39:03Z k42b3.x@gmail.com $
*
* zubat
* An java application to access the API of amun. It is used to debug and
* control a website based on amun. This is the reference implementation
* howto access the api. So feel free to hack and extend.
*
* Copyright (c) 2011 Christoph Kappestein <k42b3.x@gmail.com>
*
* This file is part of zubat. zubat is free software: you can
* redistribute it and/or modify it under the terms of the GNU
* General Public License as published by the Free Software Foundation,
* either version 3 of the License, or at any later version.
*
* zubat is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with zubat. If not, see <http://www.gnu.org/licenses/>.
*/

package com.k42b3.zubat;

import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.Component;
import java.awt.Dimension;
import java.util.ArrayList;
import java.util.logging.Logger;

import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JSplitPane;
import javax.swing.border.EmptyBorder;

import com.k42b3.neodym.Http;
import com.k42b3.neodym.ServiceItem;
import com.k42b3.neodym.Services;
import com.k42b3.neodym.TrafficItem;
import com.k42b3.neodym.TrafficListenerInterface;
import com.k42b3.neodym.oauth.Oauth;
import com.k42b3.neodym.oauth.OauthProvider;

/**
* Zubat
*
* @author     Christoph Kappestein <k42b3.x@gmail.com>
* @license    http://www.gnu.org/licenses/gpl.html GPLv3
* @link       http://code.google.com/p/delta-quadrant
* @version    $Revision: 226 $
*/
public class Zubat extends JFrame
{
  private static final long serialVersionUID = 1L;

  public static String version = "0.0.9 beta";

  private static Http http;
  private static Account account;
  private static Services availableServices;
 
  private MenuPanel menuPanel;
  private TreePanel treePanel;
  private ContainerPanel containerPanel;
  private TrafficPanel trafficPanel;

  private TrafficTableModel trafficTm;

  private Logger logger = Logger.getLogger("com.k42b3.zubat");

  public Zubat()
  {
    this.setTitle("zubat (version: " + Zubat.version + ")");
    this.setLocation(100, 100);
    this.setSize(820, 600);
    this.setMinimumSize(this.getSize());
    this.setLayout(new BorderLayout());
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    try
    {
      trafficTm = new TrafficTableModel();

      // http
      http = new Http(new TrafficListenerInterface(){

        public void handleRequest(TrafficItem item)
        {
          trafficTm.addTraffic(item);
        }

      });

      // do authentication
      this.doAuthentication();

      this.fetchAccount();


      menuPanel = new MenuPanel(this);

      this.add(menuPanel, BorderLayout.NORTH);


      treePanel = new TreePanel(this);
      treePanel.setPreferredSize(new Dimension(150, 100));
      treePanel.setMinimumSize(new Dimension(100, 100));
      treePanel.setBorder(new EmptyBorder(4, 0, 4, 4));

      //this.add(treePanel, BorderLayout.WEST);


      containerPanel = new ContainerPanel();
      containerPanel.setMinimumSize(new Dimension(400, 100));
      containerPanel.setBorder(new EmptyBorder(4, 4, 4, 0));

      //this.add(containerPanel, BorderLayout.CENTER);


      JSplitPane sp = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, treePanel, containerPanel);
      sp.setBorder(BorderFactory.createEmptyBorder());
     
      this.add(sp, BorderLayout.CENTER);


      trafficPanel = new TrafficPanel(trafficTm);

      trafficPanel.setPreferredSize(new Dimension(600, 200));

      trafficPanel.setBorder(new EmptyBorder(6, 0, 0, 0));

      this.add(trafficPanel, BorderLayout.SOUTH);


      if(http.getOauth().isAuthed())
      {
        onReady();
      }
    }
    catch(Exception e)
    {
      Zubat.handleException(e);
    }
  }

  private void fetchAccount() throws Exception
  {
    ServiceItem item = getAvailableServices().getItem("http://ns.amun-project.org/2011/amun/service/my/verifyCredentials");

    if(item != null)
    {
      account = Account.buildAccount(http.requestXml(Http.GET, item.getUri()));
    }
    else
    {
      throw new Exception("Could not discover user informations");
    }
  }

  private void doAuthentication() throws Exception
  {
    // fetch services
    availableServices = new Services(http, Configuration.getInstance().getBaseUrl());
    availableServices.discover();

    // authentication
    String requestUrl = availableServices.getItem("http://oauth.net/core/1.0/endpoint/request").getUri();
    String authorizationUrl = availableServices.getItem("http://oauth.net/core/1.0/endpoint/authorize").getUri();
    String accessUrl = availableServices.getItem("http://oauth.net/core/1.0/endpoint/access").getUri();

    OauthProvider provider = new OauthProvider(requestUrl, authorizationUrl, accessUrl, Configuration.getInstance().getConsumerKey(), Configuration.getInstance().getConsumerSecret());
    Oauth oauth = new Oauth(http, provider);

    if(!Configuration.getInstance().getToken().isEmpty() && !Configuration.getInstance().getTokenSecret().isEmpty())
    {
      oauth.auth(Configuration.getInstance().getToken(), Configuration.getInstance().getTokenSecret());
    }
    else
    {
      throw new Exception("No token set use --auth to obtain a token and token secret");
    }

    http.setOauth(oauth);
  }

  public void onReady() throws Exception
  {
    ServiceItem item = availableServices.getItem("http://ns.amun-project.org/2011/amun/content/page");

    if(item != null)
    {
      loadContainer(item);

      setVisible(true);
    }
    else
    {
      throw new Exception("Could not find page service");
    }
  }

  public Component loadContainer(ServiceItem item)
  {
    try
    {
      // load default fields
      ArrayList<String> types = item.getTypes();
      ArrayList<String> fields = new ArrayList<String>();

      for(int i = 0; i < types.size(); i++)
      {
        if(Configuration.getInstance().getServices().containsKey(types.get(i)))
        {
          ArrayList<String> selectedFields = Configuration.getInstance().getServices().get(types.get(i));

          if(selectedFields.size() > 0)
          {
            fields = selectedFields;
          }
        }
      }


      // load container
      Container instance;
      String className = getClassNameFromType(item.getTypeStartsWith("http://ns.amun-project.org/2011/amun"));

      try
      {
        Class<?> container = Class.forName(className);

        instance = (Container) container.newInstance();
      }
      catch(ClassNotFoundException e)
      {
        instance = new com.k42b3.zubat.basic.Container();
      }

      logger.info("Load class " + className);


      // call onload
      instance.onLoad(item, fields);


      // add component
      containerPanel.add(instance.getComponent(), className);

      CardLayout cl = (CardLayout) containerPanel.getLayout();

      cl.show(containerPanel, className);


      return instance.getComponent();
    }
    catch(Exception e)
    {
      Zubat.handleException(e);

      return null;
    }
  }

  public static Http getHttp()
  {
    return http;
  }

  public static Account getAccount()
  {
    return account;
  }

  public static Services getAvailableServices()
  {
    return availableServices;
  }

  public static void handleException(Exception e)
  {
    e.printStackTrace();

    Logger.getLogger("com.k42b3.zubat").warning(e.getMessage());
  }

  public static String getClassNameFromType(String type) throws Exception
  {
    String baseNs = "http://ns.amun-project.org/2011/amun/";

    if(!type.startsWith(baseNs))
    {
      throw new Exception("Type must be in amun namespace");
    }

    type = type.substring(baseNs.length());


    String[] parts = type.split("/");
    String className = "";

    for(int i = 0; i < parts.length; i++)
    {
      className+= parts[i] + ".";
    }

    if(className.isEmpty())
    {
      throw new Exception("Invalid type");
    }

    className = "com.k42b3.zubat.amun." + className + "Container";

    return className;
  }
}
TOP

Related Classes of com.k42b3.zubat.Zubat

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.