/* * Copyright (c) 2004-2011 Marco Maccaferri and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Marco Maccaferri - initial API and implementation */ package org.eclipsetrader.core.internal.markets; import java.util.Arrays; import java.util.Calendar; import java.util.Date; import java.util.SortedSet; import java.util.TreeSet; import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlElementRef; import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.XmlTransient; import javax.xml.bind.annotation.XmlType; import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; @XmlRootElement(name = "time") @XmlType(name = "org.eclipsetrader.core.markets.MarketTime") public class MarketTime implements Comparable<MarketTime> { @XmlAttribute(name = "description") private String description; @XmlAttribute(name = "close") @XmlJavaTypeAdapter(TimeAdapter.class) private Date closeTime; @XmlAttribute(name = "open") @XmlJavaTypeAdapter(TimeAdapter.class) private Date openTime; @XmlElementRef private SortedSet<MarketTimeExclude> exclude; protected MarketTime() { } public MarketTime(Date openTime, Date closeTime) { this(openTime, closeTime, null); } public MarketTime(Date openTime, Date closeTime, String description) { this.openTime = openTime; this.closeTime = closeTime; this.description = description; } @XmlTransient public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } @XmlTransient public Date getOpenTime() { return openTime; } public void setOpenTime(Date openTime) { this.openTime = openTime; } @XmlTransient public Date getCloseTime() { return closeTime; } public void setCloseTime(Date closeTime) { this.closeTime = closeTime; } @XmlTransient public MarketTimeExclude[] getExclude() { if (exclude == null) { return new MarketTimeExclude[0]; } return exclude.toArray(new MarketTimeExclude[exclude.size()]); } public void setExclude(MarketTimeExclude[] exclude) { this.exclude = exclude != null && exclude.length != 0 ? new TreeSet<MarketTimeExclude>(Arrays.asList(exclude)) : null; } public boolean isExcluded(Date date) { if (exclude != null) { Calendar day = Calendar.getInstance(); day.setTime(date); day.set(Calendar.HOUR_OF_DAY, 0); day.set(Calendar.MINUTE, 0); day.set(Calendar.SECOND, 0); day.set(Calendar.MILLISECOND, 0); date = day.getTime(); for (MarketTimeExclude excludeDay : exclude) { if (date.equals(excludeDay.getFromDate()) || date.equals(excludeDay.getToDate())) { return true; } if (date.after(excludeDay.getFromDate()) && date.before(excludeDay.getToDate())) { return true; } } } return false; } /* (non-Javadoc) * @see java.lang.Comparable#compareTo(java.lang.Object) */ @Override public int compareTo(MarketTime o) { return openTime.compareTo(o.getOpenTime()); } }