/******************************************************************************* * 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.algo.service; import java.util.Map; import java.util.logging.Level; import java.util.logging.Logger; import com.quantcomponents.algo.ICommissionCalculator; import com.quantcomponents.algo.IOrder; public class ConfigurableLinearCommissionCalculator implements ICommissionCalculator { private static final Logger logger = Logger.getLogger(ConfigurableLinearCommissionCalculator.class.getName()); public static final String FIXED_FACTOR_KEY = "factor.fixed"; public static final String LINEAR_SIZE_FACTOR_KEY = "factor.size"; public static final String LINEAR_VALUE_FACTOR_KEY = "factor.value"; private volatile ICommissionCalculator inner; public void deactivate() { } @Override public double calculateCommission(IOrder order, int amount, double executionPrice) { return inner.calculateCommission(order, amount, executionPrice); } void modify(Map<?,?> properties) { configure(properties); } void activate(Map<?,?> properties) { configure(properties); } private void configure(Map<?,?> properties) { Double fixedFactor = 0.0; Double linearSizeFactor = 0.0; Double linearValueFactor = 0.0; if (properties != null) { fixedFactor = Double.valueOf((String) properties.get(FIXED_FACTOR_KEY)); linearSizeFactor = Double.valueOf((String) properties.get(LINEAR_SIZE_FACTOR_KEY)); linearValueFactor = Double.valueOf((String) properties.get(LINEAR_VALUE_FACTOR_KEY)); } logger.log(Level.INFO, "Updated linear commission calculator configuration: " + fixedFactor + ";" + linearSizeFactor + ";" + linearValueFactor); inner = new LinearCommissionCalculator(fixedFactor, linearSizeFactor, linearValueFactor); } }