/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package org.dlect.model; import com.google.common.base.Objects; import com.google.common.collect.Ordering; import org.dlect.events.EventID; import org.dlect.events.listenable.EventBuilder; import org.dlect.model.helper.XmlListenable; /** * * @author lee */ public class Stream extends XmlListenable<Stream> implements Comparable<Stream> { private String name; public Stream() { } @Override public int compareTo(Stream o) { if (o == null) { return 1; } return Ordering.natural().nullsLast().compare(this.getName(), o.getName()); } public String getName() { return name; } public void setName(String name) { EventBuilder<String> b = event(StreamEventID.NAME).before(getName()); this.name = name; b.after(getName()).fire(); } @Override public int hashCode() { return Objects.hashCode(getName()); } @Override public boolean equals(Object obj) { if (obj == null) { return false; } if (getClass() != obj.getClass()) { return false; } final Stream other = (Stream) obj; return this.getName().equalsIgnoreCase(other.getName()); } @Override public String toString() { return "Stream{" + "name=" + getName() + '}'; } public static enum StreamEventID implements EventID { NAME; @Override public Class<?> getAppliedClass() { return Stream.class; } @Override public String getName() { return name(); } } }