Package com.quantcomponents.tradingcalendars

Source Code of com.quantcomponents.tradingcalendars.TradingCalendarFactoryBean

/*******************************************************************************
* Copyright (c) 2013 Luigi Sgro. 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:
*     Luigi Sgro - initial API and implementation
******************************************************************************/

package com.quantcomponents.tradingcalendars;

import java.io.Serializable;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import java.util.TimeZone;

import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementWrapper;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;

import com.quantcomponents.core.calendar.AbstractPeriodicTradingCalendar;
import com.quantcomponents.core.calendar.ITradingCalendar;
import com.quantcomponents.core.calendar.ITradingDay;
import com.quantcomponents.core.model.BareDate;
import com.quantcomponents.core.xml.XmlDateAdapter;

@XmlRootElement(name = "tradingCalendar")
public class TradingCalendarFactoryBean implements Serializable {
 
  public static class WeekTradingDay {
    public WeekTradingDay() {}
    public WeekTradingDay(Integer dayOfTheWeek, TradingDayBean tradingDay) {
      this.dayOfTheWeek = dayOfTheWeek;
      this.tradingDay = tradingDay;
    }
    private Integer dayOfTheWeek;
    private TradingDayBean tradingDay;
    public Integer getDayOfTheWeek() {
      return dayOfTheWeek;
    }
    public void setDayOfTheWeek(Integer dayOfTheWeek) {
      this.dayOfTheWeek = dayOfTheWeek;
    }
    public TradingDayBean getTradingDay() {
      return tradingDay;
    }
    public void setTradingDay(TradingDayBean tradingDay) {
      this.tradingDay = tradingDay;
    }
   
  }
 
  public static class SpecificTradingDay {
    public SpecificTradingDay() {}
    public SpecificTradingDay(String date, TradingDayBean tradingDay) {
      this.date = date;
      this.tradingDay = tradingDay;
    }
    private String date;
    private TradingDayBean tradingDay;
    public String getDate() {
      return date;
    }
    public void setDate(String date) {
      this.date = date;
    }
    public TradingDayBean getTradingDay() {
      return tradingDay;
    }
    public void setTradingDay(TradingDayBean tradingDay) {
      this.tradingDay = tradingDay;
    }
  }
 
  private static final long serialVersionUID = -1876628600287301654L;
  private String name;
  private String description;
  private Date startDate;
  private Date endDate;
  private String timeZoneId;
  private Set<BareDate> closingDays;
  private Set<WeekTradingDay> weekTradingDaysSet;
  private Set<SpecificTradingDay> specialTradingDaysSet;
  private Boolean includeAfterHours;
  private String[] exchanges;
 
  public String getName() {
    return name;
  }

  public void setName(String name) {
    this.name = name;
  }

  public String getDescription() {
    return description;
  }

  public void setDescription(String description) {
    this.description = description;
  }

  public Boolean isIncludeAfterHours() {
    return includeAfterHours;
  }

  public void setIncludeAfterHours(Boolean includeAfterHours) {
    this.includeAfterHours = includeAfterHours;
  }

  public String[] getExchanges() {
    return exchanges;
  }

  @XmlElementWrapper
  @XmlElement(name = "exchange")
  public void setExchanges(String[] exchanges) {
    this.exchanges = exchanges;
  }

  @XmlElement(name = "startDate")
  @XmlJavaTypeAdapter(XmlDateAdapter.class)
  public void setStartDate(Date startDate) {
    this.startDate = startDate;
  }

  @XmlElement(name = "endDate")
  @XmlJavaTypeAdapter(XmlDateAdapter.class)
  public void setEndDate(Date endDate) {
    this.endDate = endDate;
  }

  @XmlElement(name = "timeZone")
  public void setTimeZoneId(String timeZoneId) {
    this.timeZoneId = timeZoneId;
  }

  @XmlElementWrapper
  @XmlElement(name = "closingDay")
  public void setClosingDays(Set<BareDate> closingDays) {
    this.closingDays = closingDays;
  }

  @XmlElementWrapper
  @XmlElement(name = "weekTradingDay")
  public void setWeekTradingDays(Set<WeekTradingDay> weekTradingDaysSet) {
    this.weekTradingDaysSet = weekTradingDaysSet;
  }

  @XmlElementWrapper
  @XmlElement(name = "specialTradingDay")
  public void setSpecialTradingDays(Set<SpecificTradingDay> specialTradingDaysSet) {
    this.specialTradingDaysSet = specialTradingDaysSet;
  }

  public String getTimeZoneId() {
    return timeZoneId;
  }

  public Date getStartDate() {
    return startDate;
  }

  public Date getEndDate() {
    return endDate;
  }

  public TimeZone getTimeZone() {
    return TimeZone.getTimeZone(timeZoneId);
  }

  public Set<BareDate> getClosingDays() {
    return closingDays;
  }

  public Set<WeekTradingDay> getWeekTradingDays() {
    return weekTradingDaysSet;
  }
 
  public Map<Integer, TradingDayBean> getWeekTradingDaysAsMap() {
    Map<Integer, TradingDayBean> map = new HashMap<Integer, TradingDayBean>();
    for (WeekTradingDay wtd : getWeekTradingDays()) {
      map.put(wtd.dayOfTheWeek, wtd.tradingDay);
    }
    return map;
  }
 
  public Set<SpecificTradingDay> getSpecialTradingDays() {
    return specialTradingDaysSet;
  }
 
  public Map<String, TradingDayBean> getSpecialTradingDaysAsMap() {
    Map<String, TradingDayBean> map = new HashMap<String, TradingDayBean>();
    for (SpecificTradingDay std : getSpecialTradingDays()) {
      map.put(std.date, std.tradingDay);
    }
    return map;
  }

  public ITradingCalendar createTradingCalendar() {
    return new AbstractPeriodicTradingCalendar() {
      private final String name = TradingCalendarFactoryBean.this.name;
      private final String description = TradingCalendarFactoryBean.this.description;
      private final Date startDate = TradingCalendarFactoryBean.this.startDate;
      private final Date endDate = TradingCalendarFactoryBean.this.endDate;
      private final TimeZone timeZone = TimeZone.getTimeZone(timeZoneId);
      private final Set<BareDate> closingDays = TradingCalendarFactoryBean.this.closingDays == null ?
          Collections.unmodifiableSet(new HashSet<BareDate>()) :
          Collections.unmodifiableSet(new HashSet<BareDate>(TradingCalendarFactoryBean.this.closingDays));
      private final Map<Integer, TradingDayBean> weekTradingDays = Collections.unmodifiableMap(TradingCalendarFactoryBean.this.getWeekTradingDaysAsMap());
      private final Map<String, TradingDayBean> specialTradingDays = Collections.unmodifiableMap(TradingCalendarFactoryBean.this.getSpecialTradingDaysAsMap());
      @Override
      public String getName() {
        return name;
      }
      @Override
      public String getDescription() {
        return description;
      }
      @Override
      public Date getStartDate() {
        return startDate;
      }
      @Override
      public Date getEndDate() {
        return endDate;
      }
      @Override
      public TimeZone getTimeZone() {
        return timeZone;
      }
      @Override
      protected Set<BareDate> getClosingDays() {
        return closingDays;
      }
      @Override
      protected Map<String, ? extends ITradingDay> getSpecialTradingDays() {
        return specialTradingDays;
      }
      @Override
      protected Map<Integer, ? extends ITradingDay> getWeekTradingDays() {
        return weekTradingDays;
      }
      @Override
      public Boolean isIncludeAfterHours() {
        return includeAfterHours;
      }
      @Override
      public String[] getExchanges() {
        return exchanges;
      }
    };
  }
}
TOP

Related Classes of com.quantcomponents.tradingcalendars.TradingCalendarFactoryBean

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.