Package ch.rakudave.jnetmap.device

Source Code of ch.rakudave.jnetmap.device.Host

package ch.rakudave.jnetmap.device;

import java.awt.Point;
import java.util.Date;
import java.util.LinkedList;
import java.util.List;

import ch.rakudave.jnetmap.network.LogicalIF;
import ch.rakudave.jnetmap.network.NetworkIF;
import ch.rakudave.jnetmap.status.Status;

public class Host implements Device {
  private String name = "", vendor = "", modelNr = "";
  private Point location;
  private Status status;
  private Date lastSeen;
  private LinkedList<NetworkIF> interfaces;
  private LinkedList<DeviceListener> listeners;
 
  public Host() {
    interfaces = new LinkedList<NetworkIF>();
    listeners = new LinkedList<DeviceListener>();
    location = new Point();
    status = Status.UNKNOWN;
  }
 
  public Host(Point location) {
    this();
    setLocation(location);
  }

  @Override
  public void addInterface(NetworkIF i) {
    if (i != null) interfaces.add(i);
  }

  @Override
  public void addListener(DeviceListener listener) {
    if (listener != null && !listeners.contains(listener)) listeners.add(listener);
  }

  @Override
  @SuppressWarnings("unchecked")
  public List<NetworkIF> getInterfaces() {
    return (List<NetworkIF>) interfaces.clone();
  }

  @Override
  public Date getLastSeen() {
    return lastSeen;
  }

  @Override
  public Point getLocation() {
    return location;
  }

  @Override
  public String getModelNr() {
    return modelNr;
  }

  @Override
  public String getName() {
    return name;
  }

  @Override
  public Status getStatus() {
    return status;
  }

  @Override
  public String getVendor() {
    return vendor;
  }

  @Override
  public void move(int dx, int dy) {
    location.move(dx, dy);
  }

  @Override
  public void notifyListeners(DeviceEvent e) {
    for (DeviceListener l : listeners) l.itemChanged(e);
  }

  @Override
  public void removeInterface(NetworkIF i) {
    interfaces.remove(i);
  }

  @Override
  public void removeListener(DeviceListener listener) {
    listeners.remove(listener);
  }

  @Override
  public void setLocation(Point p) {
    if (p != null) location.setLocation(p);
  }

  @Override
  public void setModelNr(String modelNr) {
    this.modelNr = modelNr;
  }

  @Override
  public void setName(String name) {
    this.name = name;
  }

  @Override
  public void setVendor(String vendor) {
    this.vendor = vendor;
  }

  @Override
  public void updateStatus() {
    Status newStatus = Status.UNKNOWN;
    for (NetworkIF i : interfaces) {
      i.updateStatus();
      if (newStatus.compareTo(i.getStatus()) > 0 && !(i instanceof LogicalIF)) newStatus = i.getStatus();
    }
    if (!status.equals(newStatus)) {
      status = newStatus;
      notifyListeners(new DeviceEvent(this, DeviceEvent.Type.STATUS_CHANGED));
    }
    if (status == Status.UP) lastSeen = new Date(System.currentTimeMillis());
  }

  @Override
  public int hashCode() {
    final int prime = 31;
    int result = 1;
    result = prime * result  + ((interfaces == null) ? 0 : interfaces.hashCode());
    result = prime * result  + ((lastSeen == null) ? 0 : lastSeen.hashCode());
    result = prime * result  + ((location == null) ? 0 : location.hashCode());
    result = prime * result + ((modelNr == null) ? 0 : modelNr.hashCode());
    result = prime * result + ((name == null) ? 0 : name.hashCode());
    result = prime * result + ((vendor == null) ? 0 : vendor.hashCode());
    return result;
  }

  @Override
  public boolean equals(Object obj) {
    if (obj instanceof Device) {
      return hashCode() == obj.hashCode();
    } else {
      return false;
    }
  }
}
TOP

Related Classes of ch.rakudave.jnetmap.device.Host

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.