Package org.ardverk.dht.ui

Source Code of org.ardverk.dht.ui.PainterPanel$Nop

/*
* Copyright 2009-2012 Roger Kapsi
*
* 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 org.ardverk.dht.ui;

import java.awt.Color;
import java.awt.Component;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JPanel;
import javax.swing.Timer;

import org.ardverk.dht.ArdverkDHT;
import org.ardverk.dht.DHT;
import org.ardverk.dht.KUID;
import org.ardverk.dht.io.MessageListener;
import org.ardverk.dht.message.Message;
import org.ardverk.dht.routing.Contact;
import org.ardverk.dht.ui.Painter.EventType;


public class PainterPanel extends JPanel {
 
  private static final long serialVersionUID = -8406331670508490192L;

  private static final int FREQUENCY = 100;
 
  private final Timer timer = new Timer(FREQUENCY, new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e) {
      repaint();
    }
  });
 
  private final MessageListener listener = new MessageListener() {
    @Override
    public void handleMessageSent(KUID contactId, Message message) {
      PainterPanel.this.handleMessageSent(contactId, message);
    }
   
    @Override
    public void handleMessageReceived(Message message) {
      PainterPanel.this.handleMessageReceived(message);
    }
  };
 
  private final List<Painter> painters = new ArrayList<Painter>();
 
  private final DHT dht;
 
  private volatile int current = 0;
 
  public PainterPanel(DHT dht) {
    this.dht = dht;
   
    Contact localhost = dht.getIdentity();
    KUID localhostId = localhost.getId();
   
    painters.add(new JuicePainter(localhostId));
    painters.add(new SquashPainter(localhostId));
   
    addMouseListener(new MouseAdapter() {
      @Override
      public void mouseClicked(MouseEvent e) {
        if (!painters.isEmpty()) {
          current = (current + 1) % painters.size();
          repaint();
        }
      }
    });
  }
 
  public boolean isRunning() {
    return timer.isRunning();
  }
 
  public void start() {
    if (!isRunning()) {
      timer.start();
      ((ArdverkDHT)dht).getMessageDispatcher().addMessageListener(listener);
    }
  }
 
  public void stop() {
    if (isRunning()) {
      timer.stop();
      ((ArdverkDHT)dht).getMessageDispatcher().removeMessageListener(listener);
    }
  }
 
  @Override
  public void paint(Graphics g) {
    g.setColor(Color.BLACK);
    g.fillRect(0, 0, getWidth(), getHeight());
   
    painter().paint(this, g);
  }
 
  private Painter painter() {
    int current = this.current;
    if (current < painters.size()) {
      return painters.get(current);
    }
    return Nop.INSTANCE;
  }
 
  private void handleMessageSent(KUID contactId, Message message) {
    handleEvent(EventType.MESSAGE_SENT, contactId, message);
  }

  private void handleMessageReceived(Message message) {
    handleEvent(EventType.MESSAGE_RECEIVED,
        message.getContact().getId(), message);
  }
 
  private void handleEvent(EventType type, KUID contactId, Message message) {
    painter().handleEvent(type, contactId, message);
  }
 
  private static class Nop implements Painter {

    private static final Nop INSTANCE = new Nop();
   
    private Nop() {}
   
    @Override
    public void paint(Component c, Graphics g) {
    }

    @Override
    public void handleEvent(EventType type,
        KUID contactId, Message message) {
    }
  }
}
TOP

Related Classes of org.ardverk.dht.ui.PainterPanel$Nop

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.