Package ch.rakudave.jnetmap.model.device

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

package ch.rakudave.jnetmap.model.device;

import java.util.Date;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;

import ch.rakudave.jnetmap.model.Connection;
import ch.rakudave.jnetmap.model.IF.LogicalIF;
import ch.rakudave.jnetmap.model.IF.NetworkIF;
import ch.rakudave.jnetmap.net.status.Status;
import ch.rakudave.jnetmap.util.logging.Logger;

import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamOmitField;

/**
* @author rakudave
*/
@XStreamAlias("Device")
public class Host implements Device {
  private String name = "", vendor = "", model = "", location = "", otherID = "", description = "";
  private Status status;
  @XStreamOmitField
  private Date lastStatusChange;
  private Type type;
  private LinkedList<NetworkIF> interfaces;
  private LinkedList<DeviceListener> listeners;
  private Map<String, String> metadata;
 
  public Host() {
    this(Type.Workstation);
  }
 
  public Host(Type t) {
    type = t;
    interfaces = new LinkedList<NetworkIF>();
    listeners = new LinkedList<DeviceListener>();
    initMetadata();
    status = Status.UNKNOWN;
  }

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

  @Override
  public void addDeviceListener(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 lastStatusChange;
  }

  public String getLocation() {
    return location;
  }

  @Override
  public String getModel() {
    return model;
  }

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

  @Override
  public String getOtherID() {
    return otherID;
  }

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

  @Override
  public String getVendor() {
    return vendor;
  }
 
  @Override
  public void notifyListeners(DeviceEvent e) {
    for (DeviceListener l : listeners) {
      try {
        l.deviceChanged(e);
      } catch (Exception ex) {
        Logger.error("Unable to notify DeviceListener", ex);
      }
    }
  }

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

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

  public void setLocation(String location) {
    if (this.location.equals(location)) return;
    this.location = location;
    notifyListeners(new DeviceEvent(this, DeviceEvent.Type.PROPERTY_CHANGED, location));
  }

  @Override
  public void setModel(String modelNr) {
    if (model.equals(modelNr)) return;
    model = modelNr;
    notifyListeners(new DeviceEvent(this, DeviceEvent.Type.PROPERTY_CHANGED, modelNr));
  }

  @Override
  public void setName(String name) {
    if (this.name.equals(name)) return;
    this.name = name;
    notifyListeners(new DeviceEvent(this, DeviceEvent.Type.PROPERTY_CHANGED, name));
  }

  @Override
  public void setOtherID(String other) {
    if (otherID.equals(other)) return;
    if (other != null) otherID = other;
    notifyListeners(new DeviceEvent(this, DeviceEvent.Type.PROPERTY_CHANGED, other));
  }

  @Override
  public void setType(Type type) {
    if (this.type.equals(type)) return;
    this.type = type;
    notifyListeners(new DeviceEvent(this, DeviceEvent.Type.PROPERTY_CHANGED, type));
  }

  @Override
  public void setVendor(String vendor) {
    if (this.vendor.equals(vendor)) return;
    this.vendor = vendor;
    notifyListeners(new DeviceEvent(this, DeviceEvent.Type.PROPERTY_CHANGED, 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;
      lastStatusChange = new Date(System.currentTimeMillis());
      notifyListeners(new DeviceEvent(this, DeviceEvent.Type.STATUS_CHANGED, null));
    }
  }
 
  @Override
  public String toString() {
    return name;
  }

  @Override
  public NetworkIF getInterfaceFor(Connection c) {
    if (c == null) return null;
    for (NetworkIF nif : getInterfaces()) {
      if (c == nif.getConnection()) return nif;
    }
    Logger.debug("getInterfaceFor: nothing found");
    return null;
  }

  @Override
  public String getDesctription() {
    return description;
  }

  @Override
  public void setDescription(String description) {
    if (description != null) this.description = description;
  }

  @Override
  public void setMetadata(String id, String data) {
    initMetadata();
    if (metadata.put(id, data) != null) {
      notifyListeners(new DeviceEvent(this, DeviceEvent.Type.PROPERTY_CHANGED, id+"="+data));     
    }
  }

  @Override
  public String getMetadata(String id) {
    initMetadata();
    return metadata.get(id);
  }

  @Override
  public void removeMetadata(String id) {
    initMetadata();
    metadata.remove(id);
  }
 
  private void initMetadata() {
    if (metadata == null) metadata = new HashMap<String, String>();
  }
}
TOP

Related Classes of ch.rakudave.jnetmap.model.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.