package org.cryptocoinpartners.schema; import javax.annotation.Nullable; import javax.persistence.Entity; import javax.persistence.Index; import javax.persistence.Table; import javax.persistence.Transient; import org.cryptocoinpartners.schema.dao.BarJpaDao; import org.cryptocoinpartners.schema.dao.Dao; import org.joda.time.Instant; import org.joda.time.format.DateTimeFormat; import org.joda.time.format.DateTimeFormatter; import com.google.inject.Inject; import com.google.inject.assistedinject.Assisted; import com.google.inject.assistedinject.AssistedInject; @SuppressWarnings("UnusedDeclaration") @Entity @Table(indexes = { @Index(columnList = "time") }) public class Bar extends MarketData { private long timestamp; private Double open; private Double close; private Double high; private Double low; private static final DateTimeFormatter FORMAT = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss"); @Inject protected BarJpaDao barDao; // private static final SimpleDateFormat FORMAT = new SimpleDateFormat("dd.MM.yyyy kk:mm:ss"); private static final String SEPARATOR = ","; @AssistedInject public Bar(@Assisted long timestamp, @Assisted("barOpen") Double open, @Assisted("barClose") Double close, @Assisted("barHigh") Double high, @Assisted("barLow") Double low, @Assisted Market market) { this(new Instant(timestamp), Instant.now(), null, open, close, high, low, market); } @AssistedInject public Bar(@Assisted Bar bar) { super(bar.time, bar.remoteKey, bar.getMarket()); this.open = bar.open; this.close = bar.close; this.high = bar.high; this.low = bar.low; } @AssistedInject public Bar(@Assisted("barTime") Instant time, @Assisted("barRecievedTime") Instant recievedTime, @Nullable @Assisted String remoteKey, @Assisted("barOpen") Double open, @Assisted("barClose") Double close, @Assisted("barHigh") Double high, @Assisted("barLow") Double low, @Assisted Market market) { super(time, remoteKey, market); this.open = open; this.close = close; this.high = high; this.low = low; } public <T> T queryZeroOne(Class<T> resultType, String queryStr, Object... params) { // em = createEntityManager(); return barDao.queryZeroOne(resultType, queryStr, params); } @Override public void persit() { barDao.persist(this); } @Override public EntityBase refresh() { return barDao.refresh(this); } public Double getOpen() { return open; } public Double getClose() { return close; } public Double getHigh() { return high; } public Double getLow() { return low; } protected void setOpen(Double open) { this.open = open; } protected void setHigh(Double high) { this.high = high; } protected void setLow(Double low) { this.low = low; } protected void setClose(Double close) { this.close = close; } // JPA protected Bar() { } @Override public String toString() { return "Bar Start=" + (getTimestamp() != 0 ? (FORMAT.print(getTimestamp())) : "") + SEPARATOR + "Market=" + getMarket() + SEPARATOR + "Open=" + getOpen() + SEPARATOR + "High=" + getHigh() + SEPARATOR + "Low=" + getLow() + SEPARATOR + "Close=" + getClose(); } @Override public void detach() { barDao.persist(this); } @Override public void merge() { barDao.merge(this); // TODO Auto-generated method stub } @Override @Transient public Dao getDao() { return barDao; } @Override public void delete() { // TODO Auto-generated method stub } }