package org.cryptocoinpartners.schema;
import java.util.List;
import javax.persistence.Cacheable;
import javax.persistence.Entity;
import javax.persistence.NoResultException;
import javax.persistence.Transient;
import org.cryptocoinpartners.schema.dao.CurrencyJpaDao;
import org.cryptocoinpartners.schema.dao.Dao;
import org.cryptocoinpartners.util.EM;
import com.google.inject.Inject;
import com.google.inject.assistedinject.Assisted;
import com.google.inject.assistedinject.AssistedInject;
// import org.cryptocoinpartners.util.EM;
/**
* @author Tim Olson
*/
@Entity
@Cacheable
public class Currency extends Asset {
/**
*
*/
private static final long serialVersionUID = 5360515183621144962L;
@Inject
protected static CurrencyJpaDao currencyDao;
@Inject
protected transient static CurrencyFactory currencyFactory;
public boolean isFiat() {
return fiat;
}
public static Currency forSymbol(String symbol) {
return EM.queryOne(Currency.class, "select c from Currency c where symbol=?1", symbol);
}
public static List<String> allSymbols() {
return EM.queryList(String.class, "select symbol from Currency");
}
// JPA
protected Currency() {
}
protected void setFiat(boolean fiat) {
this.fiat = fiat;
}
// used by Currencies
static Currency forSymbolOrCreate(String symbol, boolean isFiat, double basis) {
try {
Currency currency = forSymbol(symbol);
currency.setRevision(currency.getRevision() + 1);
currencyDao.persistEntities(currency);
return currency;
} catch (NoResultException e) {
//
final Currency currency = new Currency(isFiat, symbol, basis);
//Injector.root().injectMembers(currency);
// final Currency currency = currencyFactory.create(isFiat, symbol, basis);
currency.setRevision(currency.getRevision() + 1);
currencyDao.persistEntities(currency);
return currency;
}
}
// used by Currencies
static Currency forSymbolOrCreate(String symbol, boolean isFiat, double basis, double multiplier) {
try {
return forSymbol(symbol);
} catch (NoResultException e) {
final Currency currency = new Currency(isFiat, symbol, basis, multiplier);
currency.setRevision(currency.getRevision() + 1);
currencyDao.persistEntities(currency);
return currency;
}
}
@AssistedInject
private Currency(@Assisted boolean fiat, @Assisted String symbol, @Assisted double basis) {
super(symbol, basis);
this.fiat = fiat;
}
@AssistedInject
private Currency(@Assisted boolean fiat, @Assisted String symbol, @Assisted("basis") double basis, @Assisted("multiplier") double multiplier) {
super(symbol, basis);
this.fiat = fiat;
this.multiplier = multiplier;
}
private boolean fiat;
private double multiplier;
@Override
public EntityBase refresh() {
return currencyDao.refresh(this);
}
@Override
public void persit() {
this.setRevision(this.getRevision() + 1);
currencyDao.persistEntities(this);
// TODO Auto-generated method stub
}
@Override
public void detach() {
// TODO Auto-generated method stub
}
@Override
public void merge() {
// TODO Auto-generated method stub
}
@Override
@Transient
public Dao getDao() {
return currencyDao;
}
@Override
public void delete() {
// TODO Auto-generated method stub
}
}