/*
* 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.ats.engines;
import org.eclipsetrader.core.instruments.ISecurity;
import org.eclipsetrader.core.trading.IAccount;
import org.eclipsetrader.core.trading.IPosition;
import org.mozilla.javascript.Context;
import org.mozilla.javascript.Function;
import org.mozilla.javascript.ScriptableObject;
public class HasPositionFunction extends ScriptableObject {
private static final long serialVersionUID = 237641674017402922L;
public HasPositionFunction() {
}
public static Object jsConstructor(Context cx, Object[] args, Function ctorObj, boolean inNewExpr) {
Object property = ScriptableObject.getProperty(getTopLevelScope(ctorObj), BaseOrderFunction.PROPERTY_ACCOUNT);
IAccount account = (IAccount) Context.jsToJava(property, IAccount.class);
ISecurity security = null;
if (args.length >= 1) {
security = (ISecurity) Context.jsToJava(args[0], ISecurity.class);
}
else {
property = ScriptableObject.getProperty(getTopLevelScope(ctorObj), BaseOrderFunction.PROPERTY_INSTRUMENT);
if (property != ScriptableObject.NOT_FOUND) {
security = (ISecurity) Context.jsToJava(property, ISecurity.class);
}
}
if (security == null) {
return new Boolean(false);
}
for (IPosition position : account.getPositions()) {
if (position.getSecurity() == security) {
return new Boolean(true);
}
}
return new Boolean(false);
}
/* (non-Javadoc)
* @see org.mozilla.javascript.ScriptableObject#getClassName()
*/
@Override
public String getClassName() {
return "hasPosition";
}
}