/* * 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.views; import java.beans.PropertyChangeSupport; import java.util.Date; import org.eclipsetrader.core.instruments.ISecurity; import org.eclipsetrader.core.repositories.IPropertyConstants; import org.eclipsetrader.core.repositories.IStore; import org.eclipsetrader.core.repositories.IStoreObject; import org.eclipsetrader.core.repositories.IStoreProperties; import org.eclipsetrader.core.repositories.StoreProperties; /** * Default implementation of the <code>IHolding</code> interface. * Clients may subclass. * * @since 1.0 */ public class Holding implements IHolding, IStoreObject { public static final String PROP_QUANTITY = "position"; public static final String PROP_PRICE = "purchasePrice"; private ISecurity security; private Long position; private Double purchasePrice; private Date date; private IStore store; private IStoreProperties storeProperties; private final PropertyChangeSupport changeSupport = new PropertyChangeSupport(this); protected Holding() { } public Holding(ISecurity security) { this(security, null, null, null); } public Holding(ISecurity security, Long position, Double purchasePrice) { this(security, position, purchasePrice, null); } public Holding(ISecurity security, Long position, Double purchasePrice, Date date) { this.security = security; this.position = position; this.purchasePrice = purchasePrice; this.date = date; } public Holding(IStore store, IStoreProperties storeProperties) { setStore(store); setStoreProperties(storeProperties); } /* (non-Javadoc) * @see org.eclipsetrader.core.views.IHolding#getSecurity() */ @Override public ISecurity getSecurity() { return security; } /* (non-Javadoc) * @see org.eclipsetrader.core.views.IHolding#getDate() */ @Override public Date getDate() { return date; } /* (non-Javadoc) * @see org.eclipsetrader.core.views.IHolding#getPosition() */ @Override public Long getPosition() { return position; } public void setPosition(Long position) { changeSupport.firePropertyChange(PROP_QUANTITY, this.position, this.position = position); } /* (non-Javadoc) * @see org.eclipsetrader.core.views.IHolding#getPurchasePrice() */ @Override public Double getPurchasePrice() { return purchasePrice; } public void setPurchasePrice(Double purchasePrice) { changeSupport.firePropertyChange(PROP_PRICE, this.purchasePrice, this.purchasePrice = purchasePrice); } /* (non-Javadoc) * @see org.eclipse.core.runtime.IAdaptable#getAdapter(java.lang.Class) */ @Override @SuppressWarnings({ "unchecked", "rawtypes" }) public Object getAdapter(Class adapter) { if (security != null) { if (security.getIdentifier() != null && adapter.isAssignableFrom(security.getIdentifier().getClass())) { return security; } if (adapter.isAssignableFrom(security.getClass())) { return security; } } if (adapter.isAssignableFrom(changeSupport.getClass())) { return changeSupport; } if (adapter.isAssignableFrom(getClass())) { return this; } return null; } /* (non-Javadoc) * @see org.eclipsetrader.core.repositories.IStoreObject#getStore() */ @Override public IStore getStore() { return store; } /* (non-Javadoc) * @see org.eclipsetrader.core.repositories.IStoreObject#setStore(org.eclipsetrader.core.repositories.IStore) */ @Override public void setStore(IStore store) { this.store = store; } /* (non-Javadoc) * @see org.eclipsetrader.core.repositories.IStoreObject#getStoreProperties() */ @Override public IStoreProperties getStoreProperties() { if (storeProperties == null) { storeProperties = new StoreProperties(); } storeProperties.setProperty(IPropertyConstants.OBJECT_TYPE, IHolding.class.getName()); storeProperties.setProperty(IPropertyConstants.PURCHASE_DATE, date); storeProperties.setProperty(IPropertyConstants.SECURITY, security); storeProperties.setProperty(IPropertyConstants.PURCHASE_DATE, security); storeProperties.setProperty(IPropertyConstants.PURCHASE_QUANTITY, position); storeProperties.setProperty(IPropertyConstants.PURCHASE_PRICE, purchasePrice); return storeProperties; } /* (non-Javadoc) * @see org.eclipsetrader.core.repositories.IStoreObject#setStoreProperties(org.eclipsetrader.core.repositories.IStoreProperties) */ @Override public void setStoreProperties(IStoreProperties storeProperties) { this.storeProperties = storeProperties; date = (Date) storeProperties.getProperty(IPropertyConstants.PURCHASE_DATE); security = (ISecurity) storeProperties.getProperty(IPropertyConstants.SECURITY); position = (Long) storeProperties.getProperty(IPropertyConstants.PURCHASE_QUANTITY); purchasePrice = (Double) storeProperties.getProperty(IPropertyConstants.PURCHASE_PRICE); } }