/*
It is a application for event distribution to event n-consumers with m-sources.
Copyright (C) 2010 "Imran M Yousuf <imran@smartitengineering.com>"
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation, either version 3 of the License, or any later
version.
This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.smartitengineering.event.hub.api.impl;
import com.smartitengineering.event.hub.api.Channel;
import com.smartitengineering.event.hub.api.Filter;
import java.util.Date;
import org.apache.commons.lang.StringUtils;
/**
*
* @author imyousuf
*/
final class ChannelImpl
implements Channel,
Cloneable {
private String name;
private String description, authToken;
private Date creationDateTime, autoExpiryDateTime, lastModifiedDate;
private Filter filter;
private int position;
public ChannelImpl(String name) {
setName(name);
}
public ChannelImpl(Channel channel) {
setName(channel.getName());
setDescription(channel.getDescription());
setAuthToken(channel.getAuthToken());
setCreationDateTime(channel.getCreationDateTime());
setAutoExpiryDateTime(channel.getAutoExpiryDateTime());
setLastModifiedDate(channel.getLastModifiedDate());
final Filter otherFilter = channel.getFilter();
if (otherFilter != null) {
setFilter(APIFactory.getFilter(otherFilter.getMimeType(), otherFilter.
getFilterScript()));
}
setPosition(channel.getPosition());
}
public void setPosition(int position) {
this.position = position;
}
public void setName(String name) {
if (StringUtils.isBlank(name)) {
throw new IllegalArgumentException();
}
this.name = name.trim().toLowerCase();
}
public void setAuthToken(String authToken) {
this.authToken = authToken;
}
public void setAutoExpiryDateTime(Date autoExpiryDateTime) {
if (autoExpiryDateTime == null) {
this.autoExpiryDateTime = null;
}
else {
this.autoExpiryDateTime = new Date(autoExpiryDateTime.getTime());
}
}
public void setCreationDateTime(Date creationDateTime) {
if (creationDateTime != null) {
this.creationDateTime = new Date(creationDateTime.getTime());
}
else {
this.creationDateTime = null;
}
}
public void setLastModifiedDate(Date lastModifiedDate) {
if (lastModifiedDate == null) {
this.lastModifiedDate = null;
}
else {
this.lastModifiedDate = new Date(lastModifiedDate.getTime());
}
}
public void setDescription(String description) {
this.description = description;
}
public void setFilter(Filter filter) {
this.filter = filter;
}
@Override
public String getName() {
return name;
}
@Override
public String getDescription() {
return description;
}
@Override
public String getAuthToken() {
return authToken;
}
@Override
public Date getCreationDateTime() {
if (creationDateTime == null) {
return null;
}
return new Date(creationDateTime.getTime());
}
@Override
public Date getAutoExpiryDateTime() {
if (autoExpiryDateTime == null) {
return null;
}
return new Date(autoExpiryDateTime.getTime());
}
@Override
public Filter getFilter() {
return filter;
}
@Override
public Date getLastModifiedDate() {
if (lastModifiedDate == null) {
return null;
}
return new Date(lastModifiedDate.getTime());
}
@Override
public int getPosition() {
return position;
}
@Override
public ChannelImpl clone() {
return new ChannelImpl(this);
}
@Override
public boolean equals(Object obj) {
if (obj == null) {
return false;
}
if (!Channel.class.isAssignableFrom(obj.getClass())) {
return false;
}
final Channel other = (Channel) obj;
final String otherName = other.getName();
if (otherName == null || !this.name.equals(otherName)) {
return false;
}
return true;
}
@Override
public int hashCode() {
int hash = 5;
hash = 19 * hash + this.name.hashCode();
return hash;
}
@Override
public String toString() {
return getName();
}
}