package org.marketcetera.client; import org.marketcetera.util.misc.ClassVersion; import org.marketcetera.util.log.I18NMessage0P; import org.marketcetera.util.log.I18NBoundMessage1P; import org.marketcetera.trade.*; import org.marketcetera.client.instruments.InstrumentValidationHandler; /* $License$ */ /** * Carries out validations for various order types. * * @author anshul@marketcetera.com * @version $Id: Validations.java 16154 2012-07-14 16:34:05Z colin $ * @since 1.0.0 */ @ClassVersion("$Id: Validations.java 16154 2012-07-14 16:34:05Z colin $") //$NON-NLS-1$ public final class Validations { /** * Validates a new order. Following validations are performed. * <ul> * <li>order is not null</li> * <li>has a non-null orderID</li> * <li>has a non-null orderType</li> * <li>has a non-null orderQuantity</li> * <li>has a non-null Side value</li> * <li>has a non-null & valid Instrument</li> * </ul> * * @param inOrderSingle The order that needs to be validated. * * @throws OrderValidationException if any of the validations fail. */ public static void validate(OrderSingle inOrderSingle) throws OrderValidationException { if(inOrderSingle == null) { throw new OrderValidationException( Messages.NO_ORDER_SUPPLIED); } //Validate order's fields. validate(inOrderSingle.getOrderID() == null, Messages.VALIDATION_ORDERID); validate(inOrderSingle.getOrderType() == null, Messages.VALIDATION_ORDER_TYPE); validate(inOrderSingle.getQuantity() == null, Messages.VALIDATION_ORDER_QUANTITY); validate(inOrderSingle.getSide() == null, Messages.VALIDATION_ORDER_SIDE); validateInstrument(inOrderSingle.getInstrument()); } /** * Validates a new order. Following validations are performed. * <ul> * <li>order is not null</li> * </ul> * * @param inFIXOrder The order that needs to be validated. * @throws OrderValidationException if any of the validations fail. */ public static void validate(FIXOrder inFIXOrder) throws OrderValidationException { if(inFIXOrder == null) { throw new OrderValidationException( Messages.NO_ORDER_SUPPLIED); } } /** * Validates a new order. Following validations are performed. * <ul> * <li>order is not null</li> * <li>has a non-null orderID</li> * <li>has a non-null original orderID</li> * <li>has a non-null orderType</li> * <li>has a non-null orderQuantity</li> * <li>has a non-null Side value</li> * <li>has a non-null & valid Instrument</li> * </ul> * * @param inOrderReplace The order that needs to be validated. * * @throws OrderValidationException if any of the validations fail. */ public static void validate(OrderReplace inOrderReplace) throws OrderValidationException { if(inOrderReplace == null) { throw new OrderValidationException( Messages.NO_ORDER_SUPPLIED); } //Validate order's fields. validate(inOrderReplace.getOrderID() == null, Messages.VALIDATION_ORDERID); validate(inOrderReplace.getOriginalOrderID() == null, Messages.VALIDATION_ORIG_ORDERID); validate(inOrderReplace.getOrderType() == null, Messages.VALIDATION_ORDER_TYPE); validate(inOrderReplace.getQuantity() == null, Messages.VALIDATION_ORDER_QUANTITY); validate(inOrderReplace.getSide() == null, Messages.VALIDATION_ORDER_SIDE); validateInstrument(inOrderReplace.getInstrument()); } /** * Validates a new order. Following validations are performed. * <ul> * <li>order is not null</li> * <li>has a non-null orderID</li> * <li>has a non-null original orderID</li> * <li>has a non-null orderQuantity</li> * <li>has a non-null Side value</li> * <li>has a non-null & valid Instrument</li> * </ul> * * @param inOrderCancel The order that needs to be validated. * * @throws OrderValidationException if any of the validations fail. */ public static void validate(OrderCancel inOrderCancel) throws OrderValidationException { if(inOrderCancel == null) { throw new OrderValidationException( Messages.NO_ORDER_SUPPLIED); } //Validate order's fields. validate(inOrderCancel.getOrderID() == null, Messages.VALIDATION_ORDERID); validate(inOrderCancel.getOriginalOrderID() == null, Messages.VALIDATION_ORIG_ORDERID); validate(inOrderCancel.getQuantity() == null, Messages.VALIDATION_ORDER_QUANTITY); validate(inOrderCancel.getSide() == null, Messages.VALIDATION_ORDER_SIDE); validateInstrument(inOrderCancel.getInstrument()); } /** * Validates a suggestion. Following validations are performed. * <ul> * <li>suggestion is not null</li> * <li>has a non-null identifier</li> * <li>has a non-null score</li> * <li>has a non-null order</li> * </ul> * * @param inSuggestion The suggestion that needs to be validated. * * @throws OrderValidationException if any of the validations fail. * */ public static void validate(OrderSingleSuggestion inSuggestion) throws OrderValidationException { if(inSuggestion == null) { throw new OrderValidationException( Messages.NO_SUGGEST_SUPPLIED); } validate(inSuggestion.getIdentifier() == null, Messages.VALIDATION_SUGGEST_IDENTIFIER); validate(inSuggestion.getScore() == null, Messages.VALIDATION_SUGGEST_SCORE); validate(inSuggestion.getOrder() == null, Messages.VALIDATION_SUGGEST_ORDER); } /** * Validates an instrument. * <p> * Verifies that the instrument is non-null and performs instrument * specific validation using {@link InstrumentValidationHandler}. * * @param inInstrument the instrument * * @throws OrderValidationException if the instrument fails validation. */ public static void validateInstrument(Instrument inInstrument) throws OrderValidationException { validate(inInstrument == null, Messages.VALIDATION_ORDER_INSTRUMENT); try { InstrumentValidationHandler.SELECTOR.forInstrument(inInstrument). validate(inInstrument); } catch (IllegalArgumentException e) { throw new OrderValidationException(e, new I18NBoundMessage1P( Messages.VALIDATION_UNKNOWN_INSTRUMENT, inInstrument)); } } private static void validate(boolean inValidationFailed, I18NMessage0P inMessage) throws OrderValidationException { if(inValidationFailed) { throw new OrderValidationException(inMessage); } } private Validations() { //Utility class. Has no instances } }