///////////////////////////////////////////////////////////////////////////// // // Project ProjectForge Community Edition // www.projectforge.org // // Copyright (C) 2001-2014 Kai Reinhard (k.reinhard@micromata.de) // // ProjectForge is dual-licensed. // // This community edition is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License as published // by the Free Software Foundation; version 3 of the License. // // This community edition 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 org.projectforge.plugins.teamcal.integration; import java.io.Serializable; import org.apache.commons.lang.StringUtils; import org.projectforge.common.NumberHelper; /** * Persist the settings of one calendar entry in the filter. * @author M. Lauterbach (m.lauterbach@micromata.de) * @author K. Reinhard (k.reinhard@micromata.de) * */ public class TemplateCalendarProperties implements Serializable, Comparable<TemplateCalendarProperties>, Cloneable { private static final org.apache.log4j.Logger log = org.apache.log4j.Logger.getLogger(TemplateCalendarProperties.class); private static final long serialVersionUID = 6173766812848285792L; private Integer calId; private String colorCode = TeamCalCalendarFilter.DEFAULT_COLOR; private boolean visible = true; private long millisOfLastChange = System.currentTimeMillis(); public void updateMillisOfLastChange() { millisOfLastChange = System.currentTimeMillis(); } /** * Only used for evaluating color of latest modified properties. * @return */ public Long getMillisOfLastChange() { return millisOfLastChange; } public TemplateCalendarProperties setMillisOfLastChange(final Long millisOfLastChange) { this.millisOfLastChange = millisOfLastChange; return this; } public Integer getCalId() { return calId; } public TemplateCalendarProperties setCalId(final Integer calId) { this.calId = calId; return this; } public String getColorCode() { return colorCode; } public TemplateCalendarProperties setColorCode(final String colorCode) { this.colorCode = colorCode; updateMillisOfLastChange(); return this; } public boolean isVisible() { return visible; } /** * Please note: Don't forget to call {@link TemplateEntry#setDirty()} after calling this method. Otherwise the set of visible calendars * may not up-to-date in the template entry. * @param visible * @return */ public TemplateCalendarProperties setVisible(final boolean visible) { this.visible = visible; return this; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((calId == null) ? 0 : calId.hashCode()); return result; } @Override public boolean equals(final Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; final TemplateCalendarProperties other = (TemplateCalendarProperties) obj; if (calId == null) { if (other.calId != null) return false; } else if (!calId.equals(other.calId)) return false; return true; } /** * @see java.lang.Comparable#compareTo(java.lang.Object) */ @Override public int compareTo(final TemplateCalendarProperties o) { if (this == o) { return 0; } if (this.calId == null) { if (o.calId == null) { return 0; } return -1; } if (o.calId == null) { return 1; } return this.calId.compareTo(o.calId); } @Override public TemplateCalendarProperties clone() { try { final TemplateCalendarProperties cloned = (TemplateCalendarProperties) super.clone(); cloned.calId = this.calId; cloned.colorCode = this.colorCode; cloned.millisOfLastChange = this.millisOfLastChange; cloned.visible = this.visible; return cloned; } catch (final CloneNotSupportedException ex) { log.error(ex.getMessage(), ex); return null; } } /** * For avoiding reload of Calendar if no changes are detected. (Was für'n Aufwand für so'n kleines Feature...) * @param filter * @return */ public boolean isModified(final TemplateCalendarProperties other) { if (NumberHelper.isEqual(this.calId, other.calId) == false) { return true; } if (StringUtils.equals(this.colorCode, other.colorCode) == false) { return true; } if (this.millisOfLastChange != other.millisOfLastChange) { return true; } if (this.visible != other.visible) { return true; } return false; } }