Você está na página 1de 181

Informe Revisión del Código Aplicativo

El presente informe se realiza para la revisión del código de la aplicación cliente


proporcionada por Datatec, así mismo se menciona que para la revisión de código no se
ejecutó en ningún momento la aplicación por falta de conectividad.
ESTRUCTURA DE APLICACION

Obs: las librerías JRE System Library son propias del JRE 1.8.0_221

Aplicativofix
1 Carpeta Conf.:

 cfix.properties : Archivos para declaraciones de variables las cuales son


usados como parámetros para la conexión con la aplicación cliente, cada una de
estas configuraciones se usa para conectarse a diferentes tipo servidores de
acuerdo al País (Perú).

targetcompid=_DFX Parámetro con valor constante


port=5022 Puerto de comunicación
sendercompid=_CFX Parámetro con valor constante
server=200.60.161.15 Ip del servido con el cual se
requiere comunicarse
user=BCRFIX Parámetro que recepciona el usuario
con el cual se va autentificar
language=1 Valor 1 define el lenguaje de la
aplicación por defecto el valor es 1
session=PE Valor PE define el país en que se
está ejecutando el programa valor
por defecto PE

OBS. Archivo externo donde se definen los parámetros para la configuración


de la aplicación cliente

No se encuentra código malicioso

 cfix.properties.ec: Archivos para declaraciones de variables las cuales son


usados como parámetros para la conexión con la aplicación cliente, cada una de
estas configuraciones se usa para conectarse a diferentes tipo servidores de
acuerdo al País (Ecuador).

targetcompid=_DFX Parámetro con valor constante


port=5021 Puerto de comunicación
sendercompid=_CFX Parámetro con valor constante
server= 192.168.112.117 Ip del servido con el cual se
requiere comunicarse
user= ANALUISA Parámetro que recepciona el usuario
con el cual se va autentificar
language=1 Valor 1 define el lenguaje de la
aplicación por defecto el valor es 1
session=EC Valor PE define el país en que se
está ejecutando el programa valor
por defecto PE
branch=VLPQUIOA código de sucursal más código de
ciudad y agencia
password=datatec2 Clave asociada al usuario con el que
se va a autentificar

OBS. Archivo externo donde se definen los parámetros para la configuración


de la aplicación cliente

No se encuentra código malicioso

 cfix.properties.in: Archivos para declaraciones de variables las cuales son


usados como parámetros para la conexión con la aplicación cliente, cada una de
estas configuraciones se usa para conectarse a diferentes tipo servidores de
acuerdo al País (India).
targetcompid=_DFX Parámetro con valor constante
port=10651 Puerto de comunicación
sendercompid=_CFX Parámetro con valor constante
server= 192.168.112.118 Ip del servido con el cual se
requiere comunicarse
user= DIGANT Parámetro que recepciona el usuario
con el cual se va autentificar
language=2 Valor 1 define el lenguaje de la
aplicación por defecto el valor es 1
session=IN Valor PE define el país en que se
está ejecutando el programa valor
por defecto PE
branch= ICAXMUMA código de sucursal más código de
ciudad y agencia
password=datatec1 Clave asociada al usuario con el que
se va a autentificar

OBS. Archivo externo donde se definen los parámetros para la configuración


de la aplicación cliente

No se encuentra código malicioso

 cfix.properties.mx: Archivos para declaraciones de variables las cuales


son usados como parámetros para la conexión con la aplicación cliente, cada una
de estas configuraciones se usa para conectarse a diferentes tipo servidores de
acuerdo al País (México).

targetcompid=_DFX Parámetro con valor constante


port=5011 Puerto de comunicación
sendercompid=_CFX Parámetro con valor constante
server= localhost Ip del servido con el cual se
requiere comunicarse
user= ABEL Parámetro que recepciona el usuario
con el cual se va autentificar
language=2 Valor 1 define el lenguaje de la
aplicación por defecto el valor es 1
session=PE Valor PE define el país en que se
está ejecutando el programa valor
por defecto PE
branch= CNTLLIMA código de sucursal más código de
ciudad y agencia
password=datatec1 Clave asociada al usuario con el que
se va a autentificar

OBS. Archivo externo donde se definen los parámetros para la configuración


de la aplicación cliente

No se encuentra código malicioso


 cfix.properties.pe: Archivos para declaraciones de variables las cuales
son usados como parámetros para la conexión con la aplicación cliente, cada una
de estas configuraciones se usa para conectarse a diferentes tipo servidores de
acuerdo al País (Peru).

targetcompid=_DFX Parámetro con valor constante


port=5013 Puerto de comunicación
sendercompid=_CFX Parámetro con valor constante
server= 192.168.112.117 Ip del servido con el cual se
requiere comunicarse
user= ADELA Parámetro que recepciona el usuario
con el cual se va autentificar
language=2 Valor 1 define el lenguaje de la
aplicación por defecto el valor es 1
session=PE Valor PE define el país en que se
está ejecutando el programa valor
por defecto PE
branch= CNTLLIMA código de sucursal más código de
ciudad y agencia
password=datatec1 Clave asociada al usuario con el que
se va a autentificar

OBS. Archivo externo donde se definen los parámetros para la configuración


de la aplicación cliente

No se encuentra código malicioso

 log4j.properties: API totalmente configurable, ya que se realiza mediante un


archivo en formato XML o en formato Java Properties (clave=valor). Api para
el manejo de errores en java

log4j.rootLogger=warn, stdout, file


log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out Parámetro de salida del
log4j
log4j.appender.stdout.layout=org.apache.log4j.PatternLayo
ut
log4j.appender.stdout.layout.ConversionPattern=%d{ISO860
1} %5p %c{1}:%L - %m%n

log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=logs/cjfix.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{ISO8601}
%5p %c{1}:%L - %m%n
log4j.appender.file.MaxBackupIndex=5 Índice máximo de backup
para archivos
log4j.appender.file.Append=true Activado el valor para
agregar en el archivo log4j
log4j.appender.file.ImmediateFlush=true
log4j.appender.file.MaxFileSize=1024KB Máxima capacidad de
memoria para el archive a
generarse
log4j.logger.net.sf.hibernate=info

log4j.logger.org.hibernate=info
log4j.logger.org.hibernate.type=info

log4j.logger.org.hibernate.ps.PreparedStatementCache=info

log4j.logger.com.datatec=debug Parámetro de activación


de depuración de errores
en el aplicativo

No se encuentra código malicioso

 market.properties: Archivos para declaraciones de variables las cuales son


usados como parámetros para definir el tipo de mercado define la ventana
que se utilizará para mostrar el mercado.

fixed_income=26,56 Variable fixed_income se le define


valor por defecto 26,56
spot=51,54 Variable spot se le define valor por
defecto 51,54
interbank=52,53 Variable interbank se le define
valor por defecto 52,53
deposit_certificates=58 Variable deposit_certificates se le
define valor por defecto 58
ec_vi=21,22,24,27 Variable ec_vi se le define valor por
defecto 21,22,24,27
ec_fi=15,20,23,30 Variable ec_fi se le define valor por
defecto 15,20,23,30
ec_auctions=19,25,28 Variable ec_auctions se le define
valor por defecto 19,25,28

OBS. Archivo externo donde se definen los parámetros para la configuración


de la ventana de Mercado (Market).

No se encuentra código malicioso


2 Com.Datatec.:
 DatatecFields.java: Clase java DatatecFields donde se ha refactorizado las
variables para crear los métodos get y set (obtener y establecer), para ser
invocados desde la aplicación.

public final static DateFormat Variable DATATEC_TIME_FORMAT, se define como


DATATEC_DATE_FORMAT = new
variable final estática se usara para almacenar
SimpleDateFormat("yyyyMMdd");
fechas con el formato de año, mes y día
public final static DateFormat Variable DATATEC_TIME_FORMAT, se define como
DATATEC_TIME_FORMAT = new
variable final estática se usara para almacenar
SimpleDateFormat("HHmmss");
fechas con el formato de Hora, minutos y
segundos
private String branch; Variable para almacenar tipo de mercado
private String userName; Variable para almacenar el nombre del usuario
private String password; Variable para almacenar el password anexado
con el usuario que se va autentificar
private String userCode; Variable para almacenar el código del usuario
private String primaryUserCode; Variable para almacenar código de usuario
primario
private String institutionCode; Variable para almacenar el código de
institución
public String getInstitutionCode() {
return institutionCode;
Método get y set de la variable InstitutionCode
}

public void setInstitutionCode(String institutionCode) {


this.institutionCode = institutionCode;
}
public String getCityCode() {
Método get y set de la variable CityCode
return cityCode;
}

public void setCityCode(String cityCode) {

this.cityCode = cityCode;
}
public String getBranch() {
return branch;
Método get y set de la variable Branch
}

public void setBranch(String branch) {


this.branch = branch;
}
public String getUserName() { Método get y set de la variable UserName
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
Método get y set de la variable Password
}

public void setPassword(String password) {


this.password = password;
}
public String getUserCode() { Método get y set de la variable UserCode
return userCode;
}
public void setUserCode(String userCode) {
this.userCode = userCode;
}
public String getPrimaryUserCode() { Método get y set de la variable
return primaryUserCode;
PrimaryUserCode
}

public void setPrimaryUserCode(String


primaryUserCode) {
this.primaryUserCode = primaryUserCode;
}
public String getMarketGroup() { Método get y set de la variable MarketGroup
return marketGroup;
}
public void setMarketGroup(String marketGroup)
{
this.marketGroup = marketGroup;
}

No se encuentra código malicioso

 Instrument.java: Clase java DatatecFields donde se ha refactorizado las


variables para crear los métodos get y set (obtener y establecer), para ser
invocados desde la aplicación.

private String uniqueCode; Variable uniqueCode, se define para almacenar


el código único.
private String currency; Variable currency, se define para almacenar el
valor de la moneda.
private Message; Variable message, se define para almacenar los
mensajes.
public String getUniqueCode() { Método get y set de la variable UniqueCode
return uniqueCode;
}

public void setUniqueCode(String code) {


this.uniqueCode = code;
}
public String getCurrency() { Método get y set de la variable Currency
return currency;
}
public void setCurrency(String currency) {
this.currency = currency;
}
public void setMessage(Message message) { Método get y set de la variable Message
this.message = message;
}

public Message getMessage() {


return message;
}

No se encuentra código malicioso


 Market.java: Clase java Market donde se ha refactorizado las variables para
crear los métodos get y set (obtener y establecer), métodos y clases
especiales de tipo enum

public enum Access { Define clases especiales de tipo enum,


FORBIDDEN, // 0 Archivo de tipos de mercado, El tipo de
VIEW_ONLY, // 1 mercado define la ventana que se utilizará
OPERATE; // 2 para mostrar el mercado
}

// Market types file


// The market type defines the window
to be used
// to display the market
public enum Type {
SPOT,
INTERBANK,
REPOS,
DEPOSIT_CERTIFICATES,
FIXED_INCOME,
MX_FIXED_INCOME,
EC_VI,
EC_FI,
EC_AUCTIONS,
UNDEFINED;
}
private static Logger log = Se declara una variable estatica log que
Logger.getLogger(Market.class.getName());
almacena el nombre del registro el cual
produjo un suceso
public static Map<String, Type> marketTypes; Metodo que define un mapa con campos de
tipo cadena y tipo de mercado, permite cargar
static {
log.info("Loading market types"); los valores del archivos de configuración del
Properties defaultProperties = new mercado, caso contrario ante cualquier error
Properties(); producirá un registro en el archivo log
marketTypes = new HashMap<String,
Market.Type>();
try {
File f = new
File(Market.class.getProtectionDomain()

.getCodeSource().getLocation().getPath());
String runningPath =
f.getParent();
log.debug("Running in: " +
runningPath);
File propFile = new
File("conf/market.properties");
log.debug("Reading file from:
" + propFile.getAbsoluteFile());
FileInputStream fis = new
FileInputStream(

propFile.getAbsoluteFile());

defaultProperties.load(fis);
fis.close();

for (Type t : Type.values())


{
String propName =
t.name().toLowerCase();
String fileProp =
defaultProperties.getProperty(propName);
if (fileProp != null)
{
StringTokenizer
tk = new StringTokenizer(fileProp, ",");
while
(tk.hasMoreTokens()) {
String
next = tk.nextToken();

marketTypes.put(next, t);
}
}
}
log.info("Market types
loaded");
} catch (Exception e) {

log.error("Error", e);
}
}

private String code; Se declara variables privada para


private String group;
refactoricarlos y obtener los métodos get y set
private String currency;
private String counterpartyCurrency; (obtener y asignar ) valores
private String spotPriceCurrency;
private int minimunAmount;
private int maximunAmount;
private Access;
private String fullName;
private String shortName;
private Map<String, Order> bids;
private Map<String, Order> offers;
private Map<String, StatisticData> statistics;
private Map<String, TransactionOrderData>
transactionOrders;
private Type type;
private Message message;
public String getCode() { Metodos get y set que son generados de las
return code;
varables privadas declaradas anteriormente
}

public void setCode(String code) {


this.code = code;
}
public String getGroup() {
return group;
}
public void setGroup(String group) {
this.group = group;
}
public String getCurrency() {
return currency;
}
public void setCurrency(String currency) {
this.currency = currency;
}
public String getCounterpartyCurrency() {
return counterpartyCurrency;
}
public void setCounterpartyCurrency(String
counterpartyCurrency) {
this.counterpartyCurrency =
counterpartyCurrency;
}
public String getSpotPriceCurrency() {
return spotPriceCurrency;
}
public void setSpotPriceCurrency(String
spotPriceCurrency) {
this.spotPriceCurrency =
spotPriceCurrency;
}
public int getMinimunAmount() {
return minimunAmount;
}
public void setMinimunAmount(int minimunAmount)
{
this.minimunAmount = minimunAmount;
}
public int getMaximunAmount() {
return maximunAmount;
}
public void setMaximunAmount(int maximunAmount)
{
this.maximunAmount = maximunAmount;
}
public Access getAccess() {
return access;
}
public void setAccess(Access access) {
this.access = access;
}
public String getFullName() {
return fullName;
}
public void setFullName(String fullName) {
this.fullName = fullName;
}
public String getShortName() {
return shortName;
}
public void setShortName(String shortName) {
this.shortName = shortName;
}
public Market() { Constructor que define la interfaz de tipo
bids = new HashMap<String, Order>();
HashMap
offers = new HashMap<String, Order>();
statistics = new HashMap<String,
StatisticData>();
transactionOrders = new HashMap<String,
TransactionOrderData>();
}
public boolean equals(Object o) { Metodo que permite comparar el valor de un
campo de objeto y de acuerdo a dicho valor
if (this == o) {
return true; devolver un valor lógico.
}
if (o instanceof Market) {
Market other = (Market) o;
if (code == null &&
other.code == null) {
return true;
}
if (code != null &&
other.code == null) {
return false;
}
return
code.equals(other.code);
}
return false;
}
public int hashCode() { Método que devuelve un valor entero que
int hc = 17;
representa un código
ifhc = hc * code.hashCode();
}
return hc;
}
public List<Order> getBidsList() { Método que permite obtener los datos de una
lista de oferta para ordenarlos y retornarlo
ArrayList<Order> list = new
ArrayList<Order>(bids.values());
Collections.sort(list);
return list;
}
public List<Order> getOffersList() { Método que permite obtener los datos de una
lista de ofertas para ordenarlos y retornarlo
ArrayList<Order> list = new
ArrayList<Order>(offers.values());
Collections.sort(list);
return list;
}
public List<StatisticData> getStatisticData() { Método que permite obtener los datos de una
lista de estadisticas para ordenarlos y
ArrayList<StatisticData> list = new
ArrayList<StatisticData>( retornarlo
statistics.values());
Collections.sort(list);
return list;
}
public List<TransactionOrderData> Método que permite obtener los datos de una
getTransactionOrderData() {
lista de las transacciones de las órdenes para
ArrayList<TransactionOrderData> ordenarlos y retornarlo
list = new ArrayList<TransactionOrderData>(

transactionOrders.values());
// TODO sort list
// Collections.sort(list);
return list;
}
public void updateStatisticsData(StatisticData Metodo que recibe una estructura de tipo
data) {
dato e inserta en la estructura el valor de la
statistics.put(data.getKey(), llave y el dato
data);
}
public StatisticData Metodo que recibe una estructura de tipo
removeStatisticsData(StatisticData data) {
dato y remueve en la estructura el valor de la
return llave y el dato
statistics.remove(data.getKey());
}
public void updateOrder(Order order) { Metodo que recibe una estructura de tipo
orden y permite poner una llave y una orden
if (order.getSide() ==
Order.Side.OFFER) {
offers.put(order.getKey(),
order);
} else if (order.getSide() ==
Order.Side.BID) {
bids.put(order.getKey(),
order);
}
}
public Order removeOrder(Order order) { Metodo que recibe una estructura de tipo
orden y permite remover por medio de una
if (order.getSide() ==
Order.Side.OFFER) { llave
return
offers.remove(order.getKey());
} else if (order.getSide() ==
Order.Side.BID) {
return
bids.remove(order.getKey());
}
return null;
}

No se encuentra código malicioso

 TransactionOrderData.java: Clase java DatatecFields donde se ha


refactorizado las variables para crear los métodos get y set (obtener y
establecer), para ser invocados desde la aplicación.
private Message; Variable message, se define para almacenar
mensaje
private String code; Variable code, se define para almacenar el valor
de un codigo
private Market; Variable market, se define para almacenar el valor
del mercado
private String date; Variable date, se define para almacenar el valor
de fecha
private String operationTime; Variable operationTime, se define para almacenar
el tiempo de operacion
private String buyerInstitutionName; Variable buyerInstitutionName, se define para
almacenar el nombre de la institucion que compra
private String buyerInstitutionCity; Variable buyerInstitutionCity,se define para
almacenar la ciudad de institución donde se compra
private String buyerInstitutionUser; Variable buyerInstitutionCity ,se define para
almacenar el usuario de la institución donde se
compra
private String sellerInstitutionName; Variable sellerInstitutionName,se define para
almacenar el usuario de la institución que compra
private String sellerInstitutionCity; Variable sellerInstitutionCity,se define para
almacenar la ciudad de la institución que realiza la
venta
private String sellerInstitutionUser; Variable sellerInstitutionUser, se define para
almacenar el usuario de la institución que realiza la
venta
private String acc; Variable acc, se define para almacenar un dato de
transacción
private String type; Variable type, se define para almacenar un tipo de
transacción
private String shareName; Variable shareName, se define para almacenar el
nombre del recurso compartido
private double price; Variable shareName, se define para almacenar el
valor de precio
private int tradedNumber; Variable tradedNumber, se define para almacenar
el valor del número negociados
private int valueDate; Variable valueDate, se define para almacenar el
valor de fecha
private String issuerCode; Variable issuerCode, se define para almacenar el
código de edición
private String titleCode; Variable titleCode, se define para almacenar el
valor del código del titulo
private String currency1c; Variable currency1c, se define para almacenar el
valor del tipo de moneda
private double nominalValue; Variable nominalValue, se define para almacenar
el valor nominal
private double interestRate; Variable interestRate, se define para almacenar el
rango de interés
private int days; Variable interestRate, se define para almacenar el
valor de días
private double yield; Variable interestRate, se define para almacenar el
valor del rendimiento
private double yieldRate; Variable interestRate, se define para almacenar el
valor del rango de rendimiento
private boolean coupon; Variable interestRate, se define para almacenar el
valor del cupón
public void setMessage(Message message) { Método get y set de la variable Message
this.message = message;
}
public Message getMessage() {
return message;
}
public Market getMarket() { Método get y set de la variable Market
return market;
}
public void setMarket(Market market) {
this.market = market;
}
public String getDate() { Método get y set de la variable Date
return date;
}
public void setDate(String date) {
this.date = date;
}
public String getOperationTime() { Método get y set de la variable OperationTime
return operationTime;
}
public void setOperationTime(String time) {
this.operationTime = time;
}
public String getBuyerInstitutionName() { Método get y set de la variable
return buyerInstitutionName;
BuyerInstitutionName
}
public void setBuyerInstitutionName(String
buyerInstitutionName) {
this.buyerInstitutionName =
buyerInstitutionName;
}
public String getBuyerInstitutionCity() { Método get y set de la variable
return buyerInstitutionCity;
BuyerInstitutionCity
}
public void setBuyerInstitutionCity(String
buyerInstitutionCity) {
this.buyerInstitutionCity =
buyerInstitutionCity;
}
public String getBuyerInstitutionUser() { Método get y set de la variable
return buyerInstitutionUser;
BuyerInstitutionUser
}
public void setBuyerInstitutionUser(String
buyerInstitutionUser) {
this.buyerInstitutionUser =
buyerInstitutionUser;
}
public String getSellerInstitutionName() { Método get y set de la variable
return sellerInstitutionName;
SellerInstitutionName
}
public void setSellerInstitutionName(String
sellerInstitutionName) {
this.sellerInstitutionName =
sellerInstitutionName;
}
public String getSellerInstitutionCity() { Método get y set de la variable
return sellerInstitutionCity;
SellerInstitutionCity
}
public void setSellerInstitutionCity(String
sellerInstitutionCity) {
this.sellerInstitutionCity =
sellerInstitutionCity;
}
public String getSellerInstitutionUser() { Método get y set de la variable
return sellerInstitutionUser;
SellerInstitutionUser
}
public void setSellerInstitutionUser(String
sellerInstitutionUser) {
this.sellerInstitutionUser =
sellerInstitutionUser;
}
public String getAcc() { Método get y set de la variable Acc
return acc;
}
public void setAcc(String acc) {
this.acc = acc;
}
public String getType() { Método get y set de la variable Type
return type;
}
public void setType(String type) {
this.type = type;
}
public String getShareName() { Método get y set de la variable ShareName
return shareName;
}
public void setShareName(String shareName) {
this.shareName = shareName;
}

public double getPrice() { Método get y set de la variable Price


return price;
}
public void setPrice(double price) {
this.price = price;
}
public int getTradedNumber() { Método get y set de la variable TradedNumber
return tradedNumber;
}
public void setTradedNumber(int number) {
this.tradedNumber = number;
}
public int getValueDate() { Método get y set de la variable ValueDate
return valueDate;
}
public void setValueDate(int valueDate) {
this.valueDate = valueDate;
}
public String getCode() { Método get y set de la variable Code
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getIssuerCode() { Método get y set de la variable IssuerCode
return issuerCode;
}
public void setIssuerCode(String issuerCode) {
this.issuerCode = issuerCode;
}
public String getTitleCode() { Método get y set de la variable TitleCode
return titleCode;
}
public void setTitleCode(String titleCode) {
this.titleCode = titleCode;
}
public String getCurrency1c() { Método get y set de la variable Currency1c
return currency1c;
}
public void setCurrency1c(String currency1c) {
this.currency1c = currency1c;
}
public double getNominalValue() { Método get y set de la variable NominalValue
return nominalValue;
}
public void setNominalValue(double
nominalValue) {
this.nominalValue = nominalValue;
}
public double getInterestRate() { Método get y set de la variable InterestRate
return interestRate;
}
public void setInterestRate(double
interestRate) {
this.interestRate = interestRate;
}
public int getDays() { Método get y set de la variable Days
return days;
}
public void setDays(int days) {
this.days = days;
}
public double getYield() { Método get y set de la variable Yield
return yield;
}
public void setYield(double yield) {
this.yield = yield;
}

public double getYieldRate() { Método get y set de la variable YieldRate


return yieldRate;
}
public void setYieldRate(double yieldRate) {
this.yieldRate = yieldRate;
}
public boolean isCoupon() { Método get y set de la variable Coupon
return coupon;
}
public void setCoupon(boolean coupon) {
this.coupon = coupon;
}
No se encuentra código malicioso

 MarketNameComparator.java: Clase java MarketNameComparator donde


se declara una variable final estática y se crea un método público para
comparar los nombres del mercado.
public final static MarketNameComparator instance Declara una variable final estatica
= new MarketNameComparator();
MarketNameComparator con instancia al
contructor al mercado(market)
public int compare(Market arg0, Market arg1) { Metodo recibe dos argumentos para que los
return
compare los cuales tienen el valor del
arg0.getFullName().compareTo(arg1.getFullName());
} nombre de dos mercados devolviendo el
valor de -1 o 0 si es igual

No se encuentra código malicioso

 Tenor.java: Clase java Tenor donde se ha refactorizado las variables para


crear los métodos get y set (obtener y establecer ), se crea un método la
fecha de inicio y fecha final
private final static String HALF_EMPTY_KEY = "00000000"; Se declara la variable final estática
HALF_EMPTY_KEY, con el valor constante de
“00000000”
private final static DateFormat KEY_FORMAT = new Se declara la variable final estática
SimpleDateFormat("yyyymmdd"); KEY_FORMAT, con el formato (año, mes y día)
private String text; Se declara variable tipo cadena para
almacenar una cadena
private Date startDate; Se declara una variable startDate para
almacena la fecha de inicio
private Date endDate; Se declara una variable startDate para
almacena la fecha fin
private Date valueDate; Se declara una variable valuetDate para
almacena el valor de la fecha
private int valueDays; Se declara una variable valueDays para
almacenar el valor del día
private boolean standard; Se declara una variable stantard para
almacenar un valor lógico
private String key; Se declara una variable Key para
almacenar un valor de llave
public String getText() { Método get y set de la variable Text
return text;
}
public void setText(String text) {
this.text = text;
}
public Date getStartDate() { Método get y set de la variable StartDate
return startDate;
}
public void setStartDate(Date startDate) {
this.startDate = startDate;
key = null;
}
public Date getEndDate() { Método get y set de la variable EndDate
return endDate;
}
public void setEndDate(Date endDate) {
this.endDate = endDate;
key = null;
}
public Date getValueDate() { Método get y set de la variable ValueDate
return valueDate;
}
public void setValueDate(Date valueDate) {
this.valueDate = valueDate;
}
public int getValueDays() { Método get y set de la variable ValueDays
return valueDays;
}
public void setValueDays(int valueDays) {
this.valueDays = valueDays;
}
public boolean isStandard() { Método get y set de la variable isStandard
return standard;
}
public void setStandard(boolean standard) {
this.standard = standard;
}
public String getKey() { Método que recibe una cadena y lo
if (key == null) {
almacena en la variable key, si la variable
StringBuilder tmpKey = new StringBuilder();
if (startDate == null) { está vacía permite validar la fecha de inicio
tmpKey.append(HALF_EMPTY_KEY); y fecha de fin y les asigna valores
} else { formateados para almacenarlo en un
tmpKey.append(KEY_FORMAT.format(startDate));
arreglo de caracteres y retornarlo como
}
tmpKey.append("-"); parámetro de salida
if (endDate == null) {
tmpKey.append(HALF_EMPTY_KEY);
} else {

tmpKey.append(KEY_FORMAT.format(endDate));
}
key = tmpKey.toString();
}
return key;
}

No se encuentra código malicioso

 TagMap.java: Clase java TagMap donde se crea el método put, recibe una
estructura de tipo Tag.
public class TagMap extends TreeMap<Integer, Se define un método que recibe como
Tag> {
parámetro getnumber y una estructura de
public void put(Tag tag) {
put(tag.getNumber(), tag); tipo Tag con campos :
}  number
}  fieldName
 required
 valueFormat

No se encuentra código malicioso

 StatisticData.java: Clase java StatisticData donde se crea los métodos get y


set de las variables declaradas en la clase, así mismo se crea un enumerado
que almacena valores constantes y métodos para realizar operaciones.
public enum RegisterFlag { Se crea un enumerado o enum llamado
DIRECT_DOLLAR('D'), RegisterFlag, con variables constants y
REGISTERED('R'), se implementa el metodo get y set de la
HIT('P'), variable RegisterFlag
GIVEN('G'),
TAKEN('T');
private char code;

private RegisterFlag(char code) {


this.code = code;
}
public char getCode() {
return code;
}
}
public enum Origin { Se crea un enumerado o enum llamado
ELECTRONIC('E'), Origin, con variables constants y se
HYBRID('H'), implementa el metodo get y set de la
VOICE('V'); variable Origin
private char code;
private Origin (char code) {
this.code = code;
}
public char getCode() {
return code;
}
}
private Date dateTime; Variable declara para almacenar datos en
formato fecha y hora
private String orderCode; Variable para declarar el código de orden
private Market; Variable para declarar el mercado
private Order.Side side; Variable para almacenar el valor del lado
private int valueDate; Variable para almacenar el valor de la fecha
private Date deliveryDate; Variable para almacenar la fecha de entrega
private int days; Variable para almacenar días
private Order.Compensation compensation; Variable para almacenar la fecha de
compensación
private String bondIdentifier; Variable para almacenar bond identificador
private double price; Variable para almacenar el precio
private int tradedNumber; Variable para almacenar el número de
comercio
private String titleCode; Variable para almacenar el código de titulo
private String emitter; Variable para almacenar el emisor
private String countryCode; Variable para almacenar el código de la
ciudad
private String emitterCode; Variable para almacenar el código del
emisor
private Order.IssueType issueType; Variable para almacenar el tipo de
problema
private String currency; Variable para almacenar el código del
emisor
private double interestRate; Variable para almacenar la moneda
private Date emissionDate; Variable para almacenar la fecha de
emision
private Date maturityDate; Variable para almacenar la fecha de
vencimiento
private double spotPrice; Variable para almacenar el precio al
contado
private double finalPrice; Variable para almacenar el precio final
private double yieldRate; Variable para almacenar tasa de
rendimiento
private double effectiveMontlhyYieldRate; Variable para almacenar tasa de
rendimiento efectiva del mes
private String orderCode1; Variable para almacenar el código de orden
private String titleName; Variable para almacenar el nombre del
titulo
private String titleIdentifier; Variable para almacenar el título del
identificador
private String titleAlternateIdentifier; Variable para almacenar el identificador de
título alternativo
private String emitterName; Variable para almacenar el nombre del
emisor
private String emitterShortName; Variable para almacenar el nombre corto
del emisor
private long operationTicks; Variable para almacenar tick de operacion
private RegisterFlag; Variable para almacenar un flag de registros
private Date registerHour; Variable para almacenar un registro de
horas
private Origin; Variable para almacenar origen
private Message; Variable para almacenar mensajes
public int compareTo(StatisticData arg0) { Método que recibe un argumento que es
representado por el día y lo valida
int c = this.days - arg0.days;
if (c == 0) {
c =
this.dateTime.compareTo(arg0.dateTime);
}
return c;
}
public Date getDateTime() { Método que recibe el get y set de la fecha y
hora
return dateTime;
}

public void setDateTime(Date dateTime) {

this.dateTime = dateTime;
}
public String getOrderCode() { Método que recibe el get y set del código de
orden
return orderCode;
}

public void setOrderCode(String orderCode) {

this.orderCode = orderCode;
}
public Market getMarket() { Método que recibe el get y set del mercado
return market;
}

public void setMarket(Market market) {

this.market = market;
}
public Order.Side getSide() { Método que recibe el get y set del side
return side;
}

public void setSide(Order.Side side) {

this.side = side;
}
public int getValueDate() { Método que recibe el get y set del valor de
la fecha
return valueDate;
}

public void setValueDate(int valueDate) {

this.valueDate = valueDate;
}
public Date getDeliveryDate() { Método que recibe el get y set de la fecha
de entrega
return deliveryDate;
}

public void setDeliveryDate(Date


deliveryDate) {

this.deliveryDate = deliveryDate;
}
public int getDays() { Método que recibe el get y set de los días
return days;
}

public void setDays(int days) {

this.days = days;
}
public Order.Compensation getCompensation() { Método que recibe el get y set de
compensación
return compensation;
}

public void
setCompensation(Order.Compensation compensation) {

this.compensation = compensation;
}
public String getBondIdentifier() { Método que recibe el get y set del
identificador de bond
return bondIdentifier;
}

public void setBondIdentifier(String


bondIdentifier) {

this.bondIdentifier = bondIdentifier;
}
public double getPrice() { Método que recibe el get y set del precio
return price;
}

public void setPrice(double price) {

this.price = price;
}

public int getTradedNumber() { Método que recibe el get y set del mercado
return tradedNumber;
}

public void setTradedNumber(int


tradedNumber) {

this.tradedNumber = tradedNumber;
}
public String getTitleCode() { Método que recibe el get y set del título del
codigo
return titleCode;
}

public void setTitleCode(String titleCode) {

this.titleCode = titleCode;
}

public String getEmitter() { Método que recibe el get y set del emisor
return emitter;
}

public void setEmitter(String emitter) {

this.emitter = emitter;
}
public String getCountryCode() { Método que recibe el get y set del código
del país
return countryCode;
}

public void setCountryCode(String


countryCode) {

this.countryCode = countryCode;
}
public String getEmitterCode() { Método que recibe el get y set del código
del país
return emitterCode;
}

public void setEmitterCode(String


emitterCode) {

this.emitterCode = emitterCode;
}
public Order.IssueType getIssueType() { Método que recibe el get y set del
Tipo de problema
return issueType;
}

public void setIssueType(Order.IssueType


issueType) {

this.issueType = issueType;
}
public String getCurrency() { Método que recibe el get y set de la
moneda
return currency;
}

public void setCurrency(String currency) {

this.currency = currency;
}
public double getInterestRate() { Método que recibe el get y set del ratio de
interés
return interestRate;
}

public void setInterestRate(double


interestRate) {

this.interestRate = interestRate;
}
public Date getEmissionDate() { Método que recibe el get y set del fecha de
emisión
return emissionDate;
}

public void setEmissionDate(Date


emissionDate) {

this.emissionDate = emissionDate;
}
public Date getMaturityDate() { Método que recibe el get y set del fecha de
vencimiento
return maturityDate;
}

public void setMaturityDate(Date


maturityDate) {

this.maturityDate = maturityDate;
}
public double getSpotPrice() { Método que recibe el get y set del precio al
contado
return spotPrice;
}

public void setSpotPrice(double spotPrice) {

this.spotPrice = spotPrice;
}
public double getFinalPrice() { Método que recibe el get y set del precio
final
return finalPrice;
}

public void setFinalPrice(double finalPrice)


{

this.finalPrice = finalPrice;
}
public double getYieldRate() { Método que recibe el get y set de la tasa de
rendimiento
return yieldRate;
}

public void setYieldRate(double yieldRate) {

this.yieldRate = yieldRate;
}
public double getEffectiveMontlhyYieldRate() Método que recibe el get y set de la tasa de
{
rendimiento del mes efectivo
return effectiveMontlhyYieldRate;
}

public void
setEffectiveMontlhyYieldRate(double
effectiveMontlhyYieldRate) {

this.effectiveMontlhyYieldRate =
effectiveMontlhyYieldRate;
}
public String getOrderCode1() { Método que recibe el get y set del código de
orden
return orderCode1;
}

public void setOrderCode1(String orderCode1)


{

this.orderCode1 = orderCode1;
}

public String getTitleName() { Método que recibe el get y set nombre del
titulo
return titleName;
}

public void setTitleName(String titleName) {

this.titleName = titleName;
}
public String getTitleIdentifier() { Método que recibe el get y set del
identificador de titulo
return titleIdentifier;
}

public void setTitleIdentifier(String


titleIdentifier) {

this.titleIdentifier =
titleIdentifier;
}
public String getTitleAlternateIdentifier() Método que recibe el get y set del
{
identificador del título alterno
return titleAlternateIdentifier;
}

public void
setTitleAlternateIdentifier(String
titleAlternateIdentifier) {

this.titleAlternateIdentifier =
titleAlternateIdentifier;
}
public String getEmitterName() { Método que recibe el get y set del código
del emisor
return emitterName;
}

public void setEmitterName(String


emitterName) {

this.emitterName = emitterName;
}
Método que recibe el get y set del nombre
public String getEmitterShortName() {
corto del emisor
return emitterShortName;
}
public void setEmitterShortName(String
emitterShortName) {

this.emitterShortName =
emitterShortName;
}
public long getOperationTicks() { Método que recibe el get y set del
operación ticks
return operationTicks;
}

public void setOperationTicks(long


operationTicks) {

this.operationTicks = operationTicks;
}
public RegisterFlag getRegisterFlag() { Método que recibe el get y set del flag del
registro
return registerFlag;
}

public void setRegisterFlag(RegisterFlag


registerFlag) {

this.registerFlag = registerFlag;
}
public Date getRegisterHour() { Método que recibe el get y set del registro
de horas
return registerHour;
}

public void setRegisterHour(Date


registerHour) {

this.registerHour = registerHour;
}
public Origin getOrigin() { Método que recibe el get y set del origen
return origin;
}

public void setOrigin(Origin origin) {

this.origin = origin;
}
public void setMessage(Message message) { Método que recibe el get y set del mensaje
this.message = message;

@Override
public Message getMessage() {

return message;
}
public int compareTo(StatisticData arg0) { Método que recibe un argumento y valida
el número de días.
int c = this.days - arg0.days;
if (c == 0) {
c =
this.dateTime.compareTo(arg0.dateTime);
}
return c;
}
public int hashCode() { Metodo que realiza cálculos de operación y
que permite obtener un resultado de tipo
final int prime = 31;
int result = 1; entero
result = prime * result
+ ((orderCode == null) ?
0 : orderCode.hashCode());
result = prime * result
+ ((dateTime == null) ?
0 : dateTime.hashCode());
result = prime * result + ((market ==
null) ? 0 : market.hashCode());
result = prime * result + ((side ==
null) ? 0 : side.hashCode());
result = prime * result +
tradedNumber;
result = (int) (prime * result +
price);
return result;
}
public boolean equals(Object obj) { Método que devuelve un valor lógico el cual
valida el objeto obtenido como argumento
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
if (!(obj instanceof StatisticData))
{
return false;
}
StatisticData other = (StatisticData)
obj;
if (orderCode == null) {
if (other.orderCode != null) {
return false;
}
} else if
(!orderCode.equals(other.orderCode)) {
return false;
}
if (dateTime == null) {
if (other.dateTime != null) {
return false;
}
} else if
(!dateTime.equals(other.dateTime)) {
return false;
}
if (market == null) {
if (other.market != null) {
return false;
}
} else if
(!market.equals(other.market)) {
return false;
}
if (side != other.side) {
return false;
}
if (tradedNumber !=
other.tradedNumber) {
return false;
}
if (price != other.price) {
return false;
}
return true;
}
public String getKey() { Método que permite formatear los valor de
fechas y horas
return market.getCode()
+
DatatecFields.DATATEC_DATE_FORMAT.format(dateTime)
+
DatatecFields.DATATEC_TIME_FORMAT.format(dateTime)
+ orderCode +
orderCode1;
}

No se encuentra código malicioso

 Order.java.: Clase java Order donde se crea los método get y set de las
variables declaradas en la clase, así mismo se crea un enumerado que
almacena valores constantes y métodos para realizar operaciones.
protected double price; Variable para almacenar el valor del
precio
protected double amount; Variable para almacenar el valor del
monto
protected double totalAmount; Variable para almacenar el valor del
total del monto
protected Side side; Variable para almacenar el valor del
lado
protected String code; Variable para almacenar el valor del
código
protected Market market; Variable para almacenar el valor del
mercado
protected String institutionCode; Variable para almacenar el valor del
código de institución
private int goodFor; Variable para almacenar el valor del
goodfor
private Date maturityDate; Variable para almacenar el valor de la
fecha de madurez
private int days; Variable para almacenar el valor de
días
private Message message; Variable para almacenar el valor de
mensajes
private int valueDateCDBCR; Variable para almacenar el valor de las
fechas CDBCR
private double yieldCDBCR; Variable para almacenar el valor del
rendimiento de CDBCR
private double pricePercentageFI; Variable para almacenar el valor del
precio del porcentaje FI
public static final NumberFormat RATE_FORMAT = new Variable para almacenar el valor del
DecimalFormat("0.000"); RATE_FORMAT
public enum Side { Se declara un tipo enum para
BID('D'),
almacenar datos de tipo
OFFER('O');
BID,OFFTER,code,side
private char code;

private Side(char code) {

this.code = code;
}

public char getCode() {

return code;
}
public enum Compensation { Se declara un tipo enum para
almacenar datos de tipo PHYSICAL,
PHYSICAL('F'),
NON_DELIVERY('N'), NON_DELIVERY, REFERENCE,
REFERENCE('R'), INDICATIVE, WITHDRAL
INDICATIVE('I'),
DEFERRED_WITHDRAL('D');

private char code;

private Compensation(char code) {

this.code = code;
}

public char getCode() {

return code;
}
}
public enum IssueType { Se declara un tipo enum para
almacenar datos.
WITHOUT_INTERESTS_OR_SINGLE_INTEREST_PAYMENT(1),

SEVERAL_PAYMENTS_OF_INTEREST_OR_CAPITAL(2),
WITHOUT_INTERESTS_OR_MATURITY_DATE(3);

private int code;


private IssueType(int code) {

this.code = code;
}

public int getCode() {

return code;
}
}
public Order(Market, Side, String code, double Método order que declara variables
rate,
para obtener campos
double amount, double totalAmount)
{

this.market = market;
this.side = side;
this.code = code;
this.price = rate;
this.amount = amount;
this.totalAmount = totalAmount;
}
public int compareTo(Order o) { Método que recibe un objeto de tipo
int c = 0;
order y permite comparar los valor de
if (side == Side.BID && o.side == Side.BID) {
if (price != o.price) { BID y OFFER
c = price > o.price ? -1 : 1;
}
}
if (side == Side.OFFER && o.side == Side.OFFER)
{
if (price != o.price) {
c = price < o.price ? -1 : 1;
}
}
return c;
}
public double getPrice() { Método get y set que se genera para
el precio
return price;
}

public void setPrice(double price) {

this.price = price;
}

public double getAmount() { Método get y set que se genera para


el monto
return amount;
}

public void setAmount(double amount) {

this.amount = amount;
}
public Side getSide() { Método get y set que se genera para
el lado
return side;
}
public void setSide(Side side) {

this.side = side;
}

public String getCode() { Método get y set que se genera para


el codigo
return code;
}

public void setCode(String code) {

this.code = code;
}

public Market getMarket() { Método get que se genera para el


comercio
return market;
}
Método get y set que se genera para
public double getTotalAmount() {
el monto total
return totalAmount;
}
public void setTotalAmount(double totalAmount) {

this.totalAmount = totalAmount;
}

public int getGoodFor() { Método get y set que se genera para


el goodfor
return goodFor;
}
public void setGoodFor(int goodFor) {

this.goodFor = goodFor;
}
public Message getMessage() { Método get y set que se genera para
los mensajes
return message;
}

public void setMessage(Message message) {

this.message = message;
}
public String getKey() { Método get y set que se genera para
los obtener los valores del mercado y
return getMarket().getCode() + code;
} del código
public String getInstitutionCode() { Método get y set que se genera para
los obtener los valores del código de la
return institutionCode;
} instutcion

public void setInstitutionCode(String


institutionCode) {

this.institutionCode = institutionCode;
}
public Date getMaturityDate() { Método get y set que se genera para
los obtener los valores de la fecha de
return maturityDate;
} madurez

public void setMaturityDate(Date maturityDate) {

this.maturityDate = maturityDate;
}
public int getDays() { Método get y set que se genera para
los obtener los valores del dia
return days;
}

public void setDays(int days) {

this.days = days;
}
public int getValueDateCDBCR() { Método get y set que se genera para
los obtener los valores de fecha
return valueDateCDBCR;
} CDBCR

public void setValueDateCDBCR(int


valueDateCDBCR) {

this.valueDateCDBCR = valueDateCDBCR;
}
public double getYieldCDBCR() { Método get y set que se genera para
los obtener los valores de rendimiento
return yieldCDBCR;
} CDBCR

public void setYieldCDBCR(double yieldCDBCR) {

this.yieldCDBCR = yieldCDBCR;
}

public double getPricePercentageFI() { Método get y set que se genera para


los obtener los valores del porcentaje
return pricePercentageFI;
} del precio

public void setPricePercentageFI(double


pricePercentageFI) {

this.pricePercentageFI =
pricePercentageFI;
}

No se encuentra código malicioso

3 com.datatec.fix
 ClientSession.java: Clase java ClientSession donde se define variable
privadas, variables estáticas finales con valores constantes , métodos de
conexión, recibir datos atraves de la comunicación con el cliente.
protected static Logger log = Se declara variables log de tipo
Logger.getLogger(ClientSession.class
registro
.getName());
private final static int READ_BUFFER_LEN = 1024 * 2; Declaración de variables estáticas
public final static int TIMEOUT = 60;
finales con valores constantes
public final static int TIMEOUT_MILLIS = TIMEOUT * 1000;
private final static int TIMEOUT_DELTA = TIMEOUT_MILLIS /
10;
private String server; Se delcaran variables privadas para
private int port;
el manejo de datos los valores de las
private OutputStream output;
private InputStream input; transaciones y comunicación con el
private Socket connection; aplicativo cliente
private ReceptionThread;
private String language;
private boolean connected;
private boolean loggedIn;
private long seqNum;
protected long messageId;
protected Map<String, Market> markets; Se declaran interfaz tipo map , listas
protected List<MessageListener> listeners;
y entidades de tipo DatatecFields
protected DatatecFields;
public void run() { Metodo que permite realizar una
comunicación con el aplicativo
StringBuffer strTag = new
StringBuffer(); cliente, recibe datos de la
Message msg = new Message(null); transacción y los valida con los
byte[] tmp; valores almacenados en los tag y de
Date timeLastMessage = new Date();
las variables estáticas finales.
try {
while (connected) {
if
(connection.isClosed()) {

log.debug("connection closed 1");


}
if
(!connection.isConnected()) {

log.debug("connection closed 2");


}
int len =
input.available();
if (len > 0) {
timeLastMessage =
new Date();

log.debug("Available to read: " + len);


tmp = new byte[len
> READ_BUFFER_LEN ? len
:
READ_BUFFER_LEN];
int readed =
input.read(tmp);
if (readed > 0) {

log.debug("Readed: " + readed);

log.trace("Received bytes:\n" + new String(tmp));


for (int i =
0; i < tmp.length && i < readed; i++) {
if
(tmp[i] == Tag.DELIMITER) {

log.trace("Received tag: "

+ strTag.toString());

Tag = Tag.fromString(strTag.toString());

msg.addTag(tag);

if (tag.getNumber() == Tag.CHECK_SUM) {

receiveMessage(msg);

msg = new Message(null);

strTag = new StringBuffer();


}
else {

strTag.append(new String(tmp, i, 1));


}
}
}
} else {
long timeout = new
Date().getTime()
-
timeLastMessage.getTime();
if ((timeout >
TIMEOUT_MILLIS + TIMEOUT_DELTA)) {

log.debug("Timeout detected " + timeout);


connected =
false;
}
}
sleep(250);
}
if (!connected) {
log.info("Stopping
receiving thread");
output.close();
input.close();
connection.close();
log.info("Receiving
thread stopped");

// Notifiy listeners
for (MessageListener ml :
listeners) {

ml.processConnectionClosed();
}

}
} catch (Exception e) {
log.error(e);
}
}
private void receiveMessage(Message msg) { Metodo que permite recibir una
estructura de tipo mensaje, procesa
String msgType =
msg.getTag(Tag.MSG_TYPE).getValue().toString(); los mensaje de protocolo fijo,
int receivedLen = mensaje del proceso de logeo, los
Integer.parseInt(msg.getTag(Tag.BODY_LENGTH) mensaje de información financiera
.getValue().toString());
y notificaciones.
int receivedCheckSum =
Integer.parseInt(msg.getTag(Tag.CHECK_SUM)
.getValue().toString());
int receivedSeqNumber =
Integer.parseInt(msg.getTag(Tag.MSG_SEQ_NUM)
.getValue().toString());

msg.assemble();
if (seqNum <= receivedSeqNumber) {
seqNum = receivedSeqNumber + 1;
}

int calculatedLen = ((Integer)


msg.getTag(Tag.BODY_LENGTH).getValue())
.intValue();
int calculatedCheckSum = ((Integer)
msg.getTag(Tag.CHECK_SUM)
.getValue()).intValue();

log.info("Message received: type=[" +


msgType + "] - seqNum=["
+ receivedSeqNumber + "]");
log.info("Message length: calculated=[" +
calculatedLen
+ "] - received=[" +
receivedLen + "] - "
+ (calculatedLen == receivedLen
? "OK" : "FAIL"));
log.info("Message checksum: calculated=[" +
calculatedCheckSum
+ "] - received=[" +
receivedCheckSum + "] - "
+ (calculatedCheckSum ==
receivedCheckSum ? "OK" : "FAIL"));

log.debug("Message:\n" + msg.toString());

try {
// Process message

// FIX protocol messages


if
(Message.MSG_TYPE_FIX_SESSION_LOGON.equals(msgType)) {
sendDatatecLoginMessage();
} else if
(Message.MSG_TYPE_FIX_HEARTBEAT.equals(msgType)
||
Message.MSG_TYPE_FIX_TEST_REQUEST.equals(msgType)) {
replyWithSameType(msgType);
}

// Datatec logon process messages


else if
(Message.MSG_TYPE_LOGON_DENIED.equals(msgType)) {
receiveLogonDenied(msg);
} else if
(Message.MSG_TYPE_LOGON_ACCEPTED.equals(msgType)) {
receiveLogonAccepted(msg);
}

// Datatec financial information


messages
else if
(Message.MSG_TYPE_ALLOWED_MARKET.equals(msgType)) {
receiveMarketData(msg);
} else if
(Message.MSG_TYPE_MX_RF_INSTRUMENT.equals(msgType)
||
Message.MSG_TYPE_EC_VI_INSTRUMENT.equals(msgType)) {
receiveInstrumentData(msg);
} else if
(Message.MSG_TYPE_CURRENT_ORDER.equals(msgType)) {
receiveCurrentOrderData(msg);
} else if
(Message.MSG_TYPE_PRICES_AMOUNTS_TRADED.equals(msgType))
{

receivePricesAmountsTradedData(msg);
}else if
(Message.MSG_TYPE_TRANSACTION_ORDER.equals(msgType)) {

receiveTransactionOrderData(msg);
}

// Notifiy listeners for


additional/specific message handling
for (MessageListener ml : listeners) {
ml.processReceivedMessage(msg);
}

} catch (Exception e) {
log.error("Error - ", e);
}
}
protected Market receiveMarketData(Message msg) { Metodo que permite obtener los
datos del mercado, copia de
Market mkt = new Market();
Tag = msg.getTag(27000); pedidos y estadísticas a un nuevo
mkt.setCode(tag != null ? mercado
tag.getValue().toString() : null);
mkt.setGroup(msg.getTag(27010).getValue().toString
());

mkt.setFullName(msg.getTag(27860).getValue().toStr
ing());

mkt.setShortName(msg.getTag(27870).getValue().toSt
ring());
int access =
Integer.parseInt(msg.getTag(27890).getValue().toString())
;
if (access == 0) {

mkt.setAccess(Market.Access.FORBIDDEN);
} else if (access == 1) {

mkt.setAccess(Market.Access.VIEW_ONLY);
} else if (access == 2) {
mkt.setAccess(Market.Access.OPERATE);
}

if (Market.marketTypes.get(mkt.getCode()) !=
null) {

mkt.setType(Market.marketTypes.get(mkt.getCode()))
;
} else {
mkt.setType(Market.Type.UNDEFINED);
}

mkt.setMessage(msg);

// Data for this market already received


// copy orders and statistics to new market
if (markets.containsKey(mkt.getCode())) {
Market existing =
markets.get(mkt.getCode());

mkt.setStatistics(existing.getStatistics());
mkt.setBids(existing.getBids());
mkt.setOffers(existing.getOffers());
}

markets.put(mkt.getCode(), mkt);

for (MessageListener ml : listeners) {


ml.processMarketDataReceived(markets,
mkt);
}

return mkt;
}

private void receiveLogonAccepted(Message msg) throws Metodo que recibe como


Exception {
parámetro la estructura de
datatecFields.setBranch(msg.getTag(19500).getValue
().toString()); mensaje, recibe los campos
datatecFields.setUserName(msg.getTag(19510).getVal usuario, código de usuario primario
ue().toString());
datatecFields.setPrimaryUserCode(msg.getTag(19560) y código del usuario que se ha
.getValue().toString());
logeado.
datatecFields.setUserCode(msg.getTag(19570).getValue().to
String());
datatecFields.setInstitutionCode(msg.getTag(19590).getVal
ue()
.toString());
datatecFields.setCityCode(msg.getTag(19600).getValue().to
String());
loggedIn = true;
sendDatatecRequestForLogMessage();
for (MessageListener ml : listeners) {
ml.processLogonAccepted(datatecFields.getBranch(),
datatecFields.getUserName(),
datatecFields.getPrimaryUserCode(),
datatecFields.getUserCode());
}
}
private void receiveLogonDenied(Message msg) throws Método que recibe los datos del
Exception {
usuario, la razón y registra en el log
log.info("Logon rejected flag=[" + del detalle de información del
msg.getTag(19540).getValue() porque no se logeo
+ "], detail=[" +
msg.getTag(19550).getValue() + "]");

close();

String branch = msg.getTag(19500).getValue().toString();


String user = msg.getTag(19510).getValue().toString();
String flag = msg.getTag(19540).getValue().toString();
String reason = msg.getTag(19550).getValue().toString();
for (MessageListener ml : listeners) {
ml.processLogonDenied(branch, user, flag,
reason);
}
}
private void replyWithSameType(String msgType) Método que permite recibir como
throws Exception {
parámetro un tipo de mensaje y los
Message example = new Message(msgType); inserta en el tag para ser enviado
example.addTag(Tag.SENDER_COMP_ID, como mensajes
Message.SENDER_COMP_ID);
example.addTag(Tag.TARGET_COMP_ID,
Message.TARGET_COMP_ID);
sendMessage(example);
}
public ClientSession(String server, int port) { Metodo que obtiene el puerto, el
servidor así mismo declara arreglos
this.server = server;
this.port = port; e interfaz de tipo LinkedHashMap
receptionThread = new ReceptionThread();
listeners = new
ArrayList<MessageListener>();
datatecFields = new DatatecFields();
markets = new LinkedHashMap<String,
Market>();

}
public void open() throws Exception { Método que permite abrir una
comunicación con el cliente y deja
log.info("Starting FIX session at " + server
+ ":" + port); en espera de la recepción de datos
connection = new Socket(server, port);
input = new
BufferedInputStream(connection.getInputStream());
output = new
DataOutputStream(connection.getOutputStream());
seqNum = 0;
messageId = 0;
connected = connection.isConnected();
log.info("Starting receiving thread");
receptionThread.start();

}
public void close() throws Exception { Método que permite cerrar el canal
de comunicación con el cliente
sendDatatecLogoffMessage();
markets = new LinkedHashMap<String,
Market>();
connected = false;
seqNum = 0;
}
protected void sendMessage(Message message) throws Método que envía un mensaje con
Exception {
el formato declarado en tiempo,
Date now = new Date(); realiza un registro log y envía
mensaje de notificaciones
message.addTag(Tag.MSG_SEQ_NUM, seqNum);

message.addTag(Tag.SENDING_TIME,
Message.SENDING_TIME_FORMAT.format(now));

String msg = message.assemble();


log.debug("Sending message type=["
+
message.getTag(Tag.MSG_TYPE).getValue() + "] - seqNum=["
+ seqNum + "]:\n" + msg);

// Notifiy listeners
for (MessageListener ml : listeners) {
ml.processSentMessage(message);
}

output.write(msg.getBytes());
output.flush();
seqNum++;
}
public void startFixSession() throws Exception { Metodo que permite agregar a los
Message example = new
tag valores definidos en las
Message(Message.MSG_TYPE_FIX_SESSION_LOGON);
example.addTag(Tag.SENDER_COMP_ID, constantes finales declaras para ser
Message.SENDER_COMP_ID); enviados como una estructura de
example.addTag(Tag.TARGET_COMP_ID, mensaje.
Message.TARGET_COMP_ID);
example.addTag(Tag.ENCRYPT_METHOD, 0);
example.addTag(Tag.HEART_BT_INT,
ClientSession.TIMEOUT);
sendMessage(example);
}

No se encuentra código malicioso

 MessageContainer.java: Clase java MessageContainer donde se ha


refactorizado las variables para crear los métodos set (establecer), para ser
invocados desde la aplicación.
public interface MessageContainer { Se define el método set para asignar a la
variable mensajes
public void setMessage(Message
message);

public Message getMessage();

No se encuentra código malicioso

 TagMap.java: Clase java TagMap donde se ha refactorizado las variables


para crear los métodos set (establecer), para ser invocados desde la
aplicación.
public class TagMap extends TreeMap<Integer, Se define el método que define un objeto
Tag> {
de tipo tag
// LinkedHashMap<Integer, Tag> {

public void put(Tag tag) {

put(tag.getNumber(), tag);
}
}

No se encuentra código malicioso

 transactionOrderMessage.java: Clase java transactionOrderMessage donde


se ha refactorizado las variables final, enum y métodos.
public final static NumberFormat AMOUNT_FORMAT = new DecimalFormat( Se definen variables de
"#########"); tipo final con asignación
de valor constantes
public final static int OPERATION_FLAG = 20000;
public final static int TRADE_UNIQUE_CODE = 20005;
public final static int PRIMARY_USER_CODE = 19560;
public final static int PERSITENT_MESSAGE_FLAG = 20020;
public final static int DONT_STORE_RECEIVER_LOG_FLAG = 20030;
public final static int STORE_SENDER_LOG_FLAG = 20040;
public final static int PROCESSED_MARK = 20050;
public final static int DATASERVER_CODE = 20060;
public final static int SENDER_NUMBER = 20070;
public final static int DATASERVER_NUMBER = 20080;
public final static int LOG_FLAG = 20090;
public final static int USER = 19570;
public final static int TIME = 20110;
public final static int DATE = 20120;
public final static int MILLISECOND = 20130;
public final static int BRANCH = 19580;
public final static int INSTITUTION_CODE = 19590;
public final static int CITY = 19600;
public final static int AGENCY = 19610;
public final static int SPECIAL_INSTITUTION_FLAG = 20170;
public final static int INSTITUTION_FUNCTION = 20180;
public final static int MESSAGE_CLASS = 20200;
public final static int FLAG = 20210;
public final static int ORDER_PU_CODE = 20230;
public final static int ORDER_CODE = 20240;
public final static int ORDER_USER = 20250;
public final static int ODER_MCOD = 20260;
public final static int ORDER_BRANCH_CODE = 20270;
public final static int ORDER_INSTITUTION_CODE = 20280;
public final static int ORDER_CITY_3C = 20290;
public final static int ORDER_AGENCY = 20300;
public final static int ORDER_BRANCH_4C_CODE = 20310;
public final static int ORDER_CITY = 20320;
public final static int ORDER_BANK_BRANCH = 20330;
public final static int ORDER_BANK_INSTITUTION = 20340;
public final static int ORDER_BANK_3C_CITY_CODE = 20350;
public final static int ORDER_BANK_AGENCY_CODE = 20360;
public final static int ORDER_BANK_BRANCH_4C_CODE = 20370;
public final static int ORDER_BANK_CITY = 20380;
public final static int BANK_USER = 20390;
public final static int ORDER_ETC_CLIENT_FLAG = 20400;
public final static int ORDER_BROKER_FLAG = 20410;
public final static int ETC_USER_SHORT_NAME = 20420;
public final static int ORDER_QUOTE_FLAG = 20430;
public final static int MARKET = 20440;
public final static int SUB_MARKET = 20450;
public final static int BID_OR_OFFER = 20460;
public final static int PROCESSING_VIA = 20470;
public final static int OPERATION_TIME = 20480;
public final static int OPERATION_TICKS = 20490;
public final static int TIME_TO_FLASH = 20500;
public final static int ORDER_DATE = 20510;
public final static int ROUND_DATE = 20515;
public final static int ORDER_TIME = 20520;
public final static int ORDER_TOTAL_FLAG = 20530;
public final static int VALUE_DATE = 20540;
public final static int DELIVERY_DATE = 20550;
public final static int DAYS = 20560;
public final static int XDAYS = 20570;
public final static int XDAYS_MATURITY_DATE = 20580;
public final static int LEVEL = 20590;
public final static int RFQ_TEXT_TERM = 20600;
public final static int TERM_TEXT = 20610;
public final static int PHYSICALL_OR_COMPENSATION_FLAG = 20620;
public final static int STANDARD_OR_FREE_TERM_FLAG = 20630;
public final static int BOND_IDENTIFIER = 20635;
public final static int ORDERS_GROUP_IDENTIFIER = 20640;
public final static int ORDERS_GROUP_IDENTIFIER_A = 20650;
public final static int ORDERS_GROUP_IDENTIFIER_B = 20660;
public final static int WITHDRAW_ORDER_IN_PARTIAL_TRANSACTION_FLAG = 20670;
public final static int PRICE = 20680;
public final static int FORWARD_POINTS = 20690;
public final static int NUMBER = 20700;
public final static int MIN_NUMBER = 20710;
public final static int TRADED_NUMBER = 20720;
public final static int TOTAL_NUMBER = 20730;
public final static int BASIC_FRACTION = 20740;
public final static int MINIMUM_FLAG = 20750;
public final static int ADJUDICATION_FLAG = 20760;
public final static int TITLE_GROUP_ALTERNATE_CODE = 20770;
public final static int AUTOMATIC_OPERATION_FLAG = 20780;
public final static int ADJUST_PRICE_FLAG = 20790;
public final static int ENTERED_WITH_CALCULATION_FLAG = 20800;
public final static int ORDER_TYPE_FLAG = 20810;
public final static int ROUND_FLAG = 20820;
public final static int OVERRIDE_INDICATIVE = 20830;
public final static int PENDING_ORDER_FLAG = 20840;
public final static int OPTIONALITY_FLAG = 20850;
public final static int LINKED_BY_AMOUNT_FLAG = 20860;
public final static int CASH_OR_CHEQUE_FLAG = 20870;
public final static int ORDER_CLASS_FLAG = 20880;
public final static int ORDER_SUB_CLASS_FLAG = 20890;
public final static int LINK_DAYS = 20900;
public final static int LINK_XDAYS = 20910;
public final static int LINK_TYPE_MX_RF_DATA = 20920;
public final static int LINK_LEVEL = 20930;
public final static int LINK_MATURITY_DATE = 20940;
public final static int LINK_TERM_TEXT = 20950;
public final static int LINK_SUB_MARKET = 20960;
public final static int LINK_BID_OR_OFFER = 20970;
public final static int EXPIRATION_FLAG = 20980;
public final static int EXPIRATION_TIME = 20990;
public final static int REPLIER_OPERATION_TIME = 21000;
public final static int LINKED_TO_SPOT_PRICE_FLAG = 21010;
public final static int MINIMUM_SPOT_PRICE = 21020;
public final static int MAXIMUM_SPOT_PRICE = 21030;
public final static int LINK_ORDER_CODE = 21040;
public final static int ISIN_1 = 21050;
public final static int ORDER_BROKER_BRANCH_CODE = 21060;
public final static int ORDER_BROKER_INSTITUTION_CODE = 21070;
public final static int ORDER_BROKER_CITY_3C_CODE = 21080;
public final static int ORDER_BROKER_AGENCY_CODE = 21090;
public final static int ORDER_BROKER_BRANCH_4C_CODE = 21100;
public final static int ORDER_BROKER_CITY_ = 21110;
public final static int ORDER_VIA_BROKER_FLAG = 21120;
public final static int LINK_TO_OTHER_MARKET_FLAG = 21130;
public final static int CATEGORY_CODE = 21140;
public final static int ORDER_FLAG_BIT_0 = 21150;
public final static int ORDER_FLAG_BIT_1 = 21151;
public final static int ORDER_FLAG_BIT_2 = 21152;
public final static int ORDER_FLAG_BIT_3 = 21153;
public final static int ORDER_FLAG_BIT_4 = 21154;
public final static int ORDER_FLAG_BIT_5 = 21155;
public final static int ORDER_FLAG_BIT_6 = 21156;
public final static int ORDER_FLAG_BIT_7 = 21157;
public final static int SECONDS_TO_INTERRUPT = 21170;
public final static int VALIDITY_TIME = 21190;
public final static int ORDER_2_FLAG_BIT_0 = 21200;
public final static int ORDER_2_FLAG_BIT_1 = 21201;
public final static int ORDER_2_FLAG_BIT_2 = 21202;
public final static int ORDER_2_FLAG_BIT_3 = 21203;
public final static int ORDER_2_FLAG_BIT_4 = 21204;
public final static int ORDER_2_FLAG_BIT_5 = 21205;
public final static int ORDER_2_FLAG_BIT_6 = 21206;
public final static int ORDER_2_FLAG_BIT_7 = 21207;
public final static int ORDER_3_FLAG_BIT_0 = 21210;
public final static int ORDER_3_FLAG_BIT_1 = 21211;
public final static int ORDER_3_FLAG_BIT_2 = 21212;
public final static int ORDER_3_FLAG_BIT_3 = 21213;
public final static int ORDER_3_FLAG_BIT_4 = 21214;
public final static int ORDER_3_FLAG_BIT_5 = 21215;
public final static int ORDER_3_FLAG_BIT_6 = 21216;
public final static int ORDER_3_FLAG_BIT_7 = 21217;
public final static int SPECIFIC_ORDER_FLAG = 21220;
public final static int ORIGINAL_ORDER_CODE = 21230;
public final static int BROKERAGE_FLAG = 21240;
public final static int ORDER_COMMISSION = 21250;
public final static int COMMISSION_FLAG = 21260;
public final static int OWNER_PUBLIC_ENTITY = 21270;
public final static int PUBLIC_ENTITY_CODE = 21280;
public final static int PUBLIC_ENTITY_3C = 21290;
public final static int REGION = 21300;
public final static int PREFERENCE_FLAG = 21310;
public final static int CROSS_FLAG = 21320;
public final static int PUBLIC_ENTITY_NOTICE = 21330;
public final static int PUBLIC_ENTITY_NOTICE_CODE = 21340;
public final static int PUBLIC_ENTITY_3C_NOTICE = 21350;
public final static int RATE_NAME = 21360;
public final static int OPTION = 21370;
public final static int OPTION_DATE = 21380;
public final static int COMMENT_1 = 21390;
public final static int COMMENT_2 = 21395;
public final static int TITLE_CODE = 21400;
public final static int ISSUER = 21420;
public final static int COUNTRY_CODE = 21430;
public final static int ISSUER_CODE = 21440;
public final static int REFERENCE = 21450;
public final static int EMISSION = 21460;
public final static int SET = 21470;
public final static int COLLOCATION = 21480;
public final static int FI_CASH_FLOW_TABLE = 21490;
public final static int FI_BACK_OFFICE_CODE = 21500;
public final static int COUNTERPARTY_IDENTIFICATION_TYPE = 21510;
public final static int COUNTERPARTY_IDENTIFICATION = 21520;
public final static int COUNTERPARTY_TYPE_FLAG = 21530;
public final static int MATURITY_FLAG = 21540;
public final static int INTEREST_FLAG = 21550;
public final static int ISSUE_TYPE = 21560;
public final static int CURRENCY = 21570;
public final static int CURRENCY_1C = 21580;
public final static int NOMINAL_VALUE = 21590;
public final static int MAXIMUM_LOT = 21600;
public final static int NUMERATOR_BASE_DAYS = 21610;
public final static int DENOMINATOR_BASE_DAYS = 21620;
public final static int CAPITAL_PERIOD = 21630;
public final static int INTEREST_PERIOD = 21640;
public final static int INTEREST_PERIOD_FLAG = 21650;
public final static int CAPITAL_PERIOD_FLAG = 21660;
public final static int DEMATERIALIZED_FLAG = 21670;
public final static int INTEREST_TYPE = 21680;
public final static int INTEREST_RATE = 21690;
public final static int INTEREST_RATE_TYPE_FLAG = 21700;
public final static int REFERENTIAL_RATE = 21710;
public final static int FORMULA_CODE = 21720;
public final static int POINTS_PERCENTAGE_FLAG = 21730;
public final static int RATES_FLAG = 21740;
public final static int POINTS_IN_FORMULA = 21750;
public final static int PERCENTAGE_IN_FORMULA = 21760;
public final static int INITIAL_REFERENTIAL_RATE_FLAG = 21770;
public final static int END_REFERENTIAL_RATE_END_FLAG = 21780;
public final static int INITIAL_REFERENTIAL_RATE_DAYS_OR_MONTHS = 21790;
public final static int END_REFERENTIAL_RATE_DAYS_OR_MONTHS = 21800;
public final static int FI_READJUSTMENT_FORMULA = 21810;
public final static int READJUSTMENT_FLAG = 21820;
public final static int WEIGHTED_FLAG = 21830;
public final static int READJUSTMENT_PERIOD = 21840;
public final static int READJUSTMENT_PERIOD_FLAG = 21850;
public final static int PERIODIC_READJUSTMENT_FLAG = 21860;
public final static int TITLE_REFERENCE = 21870;
public final static int RFQ_MNEMONIC = 21880;
public final static int MNEMONIC = 21890;
public final static int ISIN_CODE = 21900;
public final static int SERIES_1 = 21910;
public final static int EMISSION_DATE = 21920;
public final static int MATURITY_DATE = 21930;
public final static int TOTAL_TERM = 21940;
public final static int PERIODIC_FLAG = 21950;
public final static int READJUSTABILITY_DAYS = 21960;
public final static int BALANCE = 21970;
public final static int CURRENT_INTEREST_COUPON_START = 21980;
public final static int CURRENT_INTEREST_COUPON_END = 21990;
public final static int CURRENT_CAPITAL_COUPON_START = 22000;
public final static int CURRENT_CAPITAL_COUPON_END = 22010;
public final static int INTEREST_1 = 22020;
public final static int INTEREST_2 = 22030;
public final static int READJUSTMENT_DATE = 22040;
public final static int READJUSTMENT_START_DATE = 22050;
public final static int READJUSTMENT_END_DATE = 22060;
public final static int NUMBER_OF_TITLES = 22070;
public final static int EMITTED_AMOUNT = 22080;
public final static int OVERLAPPED_COUPONS = 22090;
public final static int FI_SERIES = 22100;
public final static int FI_CLASS = 22110;
public final static int GROUP_CODE = 22120;
public final static int RESTRICTIONS = 22130;
public final static int CONSENSUS = 22140;
public final static int ERROR = 22150;
public final static int SORTING_RESTRICTION = 22160;
public final static int RE_ESTABLISH_FACTS_FLAG = 22170;
public final static int SUPER_GROUP_CODE = 22180;
public final static int SECURED = 22190;
public final static int LISTED = 22200;
public final static int JUMBO_FLAG = 22210;
public final static int LINE = 22220;
public final static int LIQUIDATION = 22230;
public final static int OPERATION_TYPE = 22240;
public final static int CAMA_DE_MONTO = 22250;
public final static int PEAK_LINE = 22260;
public final static int TOTAL_NUMBER_OF_PERIODS_OF_CAPITAL_GRACE = 22270;
public final static int OPERATION_ORDER = 22280;
public final static int RFQ_TOTAL = 22290;
public final static int EMISSION_ENVIRONMENT_CODE = 22300;
public final static int TITLE_SUB_TYPE = 22310;
public final static int ENTERED_INDEX_FLAG = 22320;
public final static int PROVISIONAL_FLAG = 22330;
public final static int EMISSION_FLAG = 22340;
public final static int MECHANISM_FLAG = 22350;
public final static int TITLE_CLASS = 22360;
public final static int REAL_MATURITY_DATE = 22370;
public final static int REAL_DAYS = 22380;
public final static int REAL_TOTAL_TERM = 22390;
public final static int COUPON = 22400;
public final static int COMMITMENT_LETTER = 22410;
public final static int YIELD = 22420;
public final static int YIELD_RATE = 22430;
public final static int TOTAL_NEGOTIATION_VALUE = 22440;
public final static int TERM = 22445;
public final static int DISCOUNT = 22450;
public final static int ELAPSED_DAYS = 22460;
public final static int DAYS_LEFT = 22470;
public final static int LAST_PERIOD_DAYS = 22480;
public final static int EARNED_INTERESTS = 22490;
public final static int VALUE_TO_NEGOTIATE = 22500;
public final static int AMOUNT_IN_USD = 22505;
public final static int EFFECTIVE_VALUE = 22510;
public final static int TOTAL_VALUE = 22520;
public final static int AUCTION_MIN_AMOUNT = 22530;
public final static int DECREE = 22540;
public final static int COUPON_DAYS_ACCORDING_TO_BASE = 22550;
public final static int COUPON_REAL_DAYS = 22560;
public final static int OMIT_INTEREST_PERIOD_CLOSING = 22570;
public final static int INTEREST_PERIOD_CLOSING_TYPE_FLAG = 22580;
public final static int CATALOG_CODE = 22590;
public final static int OTHER_CURRENCY = 22600;
public final static int SPOT_PRICE_CURRENCY = 22610;
public final static int SHARE_CODE = 22620;
public final static int SUSPENSION_FLAG = 22630;
public final static int ORDER_TO_MARKET_FLAG = 22640;
public final static int PRICE_SCALE = 22650;
public final static int PRICE_DIVIDER = 22660;
public final static int RIGHTS_FLAG = 22670;
public final static int COMBINATED_ORDERS_FLAG = 22680;
public final static int REPLIER_PASS_FLAG = 22690;
public final static int FI_INSTRUMENT_IDENTIFIER = 22700;
public final static int FI_EMISSION_IDENTIFIER = 22710;
public final static int INTEREST_PERIOD_CLOSING_DAYS = 22720;
public final static int TERM_CLOSING_DAYS = 22730;
public final static int USD_RATE = 22740;
public final static int LOCAL_CURRENCY_RATE = 22750;
public final static int LIBOR_RATE = 22760;
public final static int SPREAD_RATE = 22770;
public final static int USD_1_BILLS = 22780;
public final static int USD_5_BILLS = 22790;
public final static int USD_10_BILLS = 22800;
public final static int USD_20_BILLS = 22810;
public final static int USD_50_BILLS = 22820;
public final static int USD_100_BILLS = 22830;
public final static int USD_2_BILLS_PY = 22840;
public final static int BILLS_STATUS = 22850;
public final static int BILLS_SERIES = 22860;
public final static int BILLS_DELIVERY_FLAG = 22870;
public final static int ROUND_NUMBER = 22880;
public final static int ROUND_DIRECTOR_INSTITUTION_CODE = 22890;
public final static int ROUND_CLOSING_TIME = 22900;
public final static int ROUND_CLASS = 22910;
public final static int RATE_FLAG = 22920;
public final static int ADJUDICATION_FLAG_OTHER = 22930;
public final static int TRANSFER_ACCOUNT = 22940;
public final static int DIRECTOR_CONFIRMATION_FLAG = 22950;
public final static int CUSTODY_OR_WITHDRAWAL_FLAG = 22960;
public final static int LAST_OPERATION_ORIGIN = 22970;
public final static int ORDER_ORIGIN = 22980;
public final static int PRICE_2 = 22990;
public final static int CLOSED_PERCENTAGE = 23000;
public final static int TERM_FLAG = 23010;
public final static int PI_BUYER_CURRENCY_1_CREDIT = 23020;
public final static int QUALIFICATION = 23030;
public final static int PI_BUYER_CURRENCY_2_DEBIT = 23040;
public final static int RISK_QUALIFIER_INSTITUTION = 23050;
public final static int RFQ_ROUND_NUMBER = 23060;
public final static int REAL_MARKET_ROUND = 23070;
public final static int ASSIGNED_YIELD = 23080;
public final static int REQUESTED_NUMBER = 23090;
public final static int ASSIGNED_NUMBER = 23100;
public final static int ASSIGNED_PRICE = 23110;
public final static int ASSIGNED_EFFECTIVE_AMOUNT = 23120;
public final static int B_OR_O_ASSIGNATION_FLAG = 23130;
public final static int ACCEPTANCE_ORDER_CODE = 23140;
public final static int LIQUIDATION_NUMBER = 23150;
public final static int EXPIRATION_HOUR = 23160;
public final static int CHECK_MATCH_FLAG = 23170;
public final static int PI_SELLER_CURRENCY_1_DEBIT = 23180;
public final static int PI_SELLER_CURRENCY_2_CREDIT = 23190;
public final static int RFQ_REPLIER_BID_PRICE = 23200;
public final static int RFQ_INITIATOR_OFFER_PRICE = 23210;
public final static int RFQ_INITIATOR_BID_PRICE = 23220;
public final static int RFQ_REPLIER_OFFER_PRICE = 23230;
public final static int FI_ACTUAL_VALUE_DIVIDED_BY_10 = 23240;
public final static int FI_RISK_QUALIFICATION_DATE = 23250;
public final static int FRACTION_TEXT = 23260;
public final static int FI_QUALIFICATION = 23265;
public final static int SPOT_PRICE = 23270;
public final static int FINAL_PRICE = 23280;
public final static int VAT = 23290;
public final static int LOCAL_CURRENCY_RATE_OTHER = 23300;
public final static int FW_POINTS = 23310;
public final static int PRICE_MARK = 23320;
public final static int TRANSACTION_MCOD = 23330;
public final static int TRANSACTION_FLAG_BIT_0_1 = 23341;
public final static int TRANSACTION_FLAG_BIT_2 = 23342;
public final static int TRANSACTION_FLAG_BIT_3 = 23343;
public final static int TRANSACTION_FLAG_BIT_4 = 23344;
public final static int TRANSACTION_FLAG_BIT_5 = 23345;
public final static int TRANSACTION_FLAG_BIT_6_7_8 = 23346;
public final static int TRANSACTION_FLAG_BIT_9_10_11 = 23347;
public final static int TRANSACTION_FLAG_BIT_12 = 23348;
public final static int TRANSACTION_FLAG_BIT_13 = 23349;
public final static int TRANSACTION_FLAG_BIT_14 = 23350;
public final static int TRANSACTION_FLAG_BIT_15 = 23351;
public final static int TRANSACTION_FLAG_BIT_16 = 23352;
public final static int TRANSACTION_FLAG_BIT_17 = 23353;
public final static int TRANSACTION_FLAG_BIT_18 = 23354;
public final static int TRANSACTION_FLAG_BIT_19 = 23355;
public final static int TRANSACTION_FLAG_BIT_20 = 23356;
public final static int TRANSACTION_FLAG_BIT_21 = 23357;
public final static int TRANSACTION_FLAG_BIT_22 = 23358;
public final static int TRANSACTION_FLAG_BIT_23 = 23359;
public final static int ADD_INTEREST = 23370;
public final static int PAYMENT_WAY_FLAG = 23380;
public final static int ORDER_1_CODE = 23390;
public final static int ORDER_1_USER = 23400;
public final static int ORDER_1_MCOD = 23410;
public final static int ORDER_1_BRANCH = 23420;
public final static int ORDER_1_INSTITUTION = 23430;
public final static int ORDER_1_CITY_3C = 23440;
public final static int ORDER_1_AGENCY = 23450;
public final static int ORDER_1_BRANCH_4C = 23460;
public final static int ORDER_1_CITY = 23470;
public final static int ORDER_1_BANK = 23480;
public final static int ORDER_1_BANK_INSTITUTION = 23490;
public final static int ORDER_1_BANK_CITY_3C = 23500;
public final static int ORDER_1_BANK_AGENCY = 23510;
public final static int ORDER_1_BANK_BRANCH_4C = 23520;
public final static int ORDER_1_BANK_CITY = 23530;
public final static int ORDER_1_BANK_USER = 23540;
public final static int ORDER_1_ETC_CLIENT_FLAG = 23550;
public final static int ORDER_1_TOTAL = 23560;
public final static int ACCEPTANCE_FLAG = 23570;
public final static int ACCEPTANCE_TIME = 23580;
public final static int BUYERS_BROKER_BRANCH_CODE = 23590;
public final static int BUYERS_BROKER__INSTITUTION_CODE = 23600;
public final static int BUYERS_BROKER_CITY_3C_CODE = 23610;
public final static int BUYERS_BROKER_AGENCY = 23620;
public final static int BUYERS_BROKER_BRANCH_4C_CODE = 23630;
public final static int BUYERS_BROKER_CITY_1C_CODE = 23640;
public final static int BUYERS_BROKER_USER_BRANCH = 23650;
public final static int SELLERS_BROKER_BRANCH_CODE = 23660;
public final static int SELLERS_BROKER_INSTITUTON = 23670;
public final static int SELLERS_BROKER_CITY_3C_CODE = 23680;
public final static int SELLERS_BROKER_AGENCY = 23690;
public final static int SELLERS_BROKER_BRANCH_4C_CODE = 23700;
public final static int SELLERS_BROKER_USER_BRANCH = 23710;
public final static int SELLERS_BROKER = 23720;
public final static int BUYER_BROKERAGE_FLAG = 23730;
public final static int SELLER_BROKERAGE_FLAG = 23735;
public final static int SELLER_VIA_BROKER_FLAG = 23745;
public final static int BUYER_VIA_BROKER_FLAG = 23740;
public final static int ORDER_1_PRIMARYUSER_CODE = 23750;
public final static int REGISTER_WITH_OTHERS_FLAG = 23760;
public final static int ON_OR_OFF_SCREEN_FLAG = 23770;
public final static int ADDITIONAL_FIELDS_CHANGE_FLAG = 23780;
public final static int PENDING_ACCEPTANCE_FLAG = 23790;
public final static int ORIGIN_FLAG = 23800;
public final static int ORDER_1_COMISSION = 23810;
public final static int ORDER_1_COMISSION_FLAG = 23820;
public final static int TRANSACTION_1_MCOD = 23830;
public final static int ORDER_1_QUOTE_FLAT = 23840;
public final static int AGRESSOR_PUBLIC_ENTITY = 23850;
public final static int AGRESSOR_PUBLIC_ENTITY_4C_CODE = 23860;
public final static int AGRESSOR_PUBLIC_ENTITY_3C_CODE = 23870;
public final static int ORIGIN_TEXT = 23880;
public final static int ACCEPTANCE_TICKS = 23890;
public final static int LINK_IDENTIFIER = 23900;
public final static int ORDER_1_BROKER_FLAG = 23910;
public final static int PRICE_ACCEPTED_FLAG = 23920;
public final static int ORDER_FLAG_1_BIT_0 = 23930;
public final static int ORDER_FLAG_1_BIT_1 = 23931;
public final static int ORDER_FLAG_1_BIT_2 = 23932;
public final static int ORDER_FLAG_1_BIT_3 = 23933;
public final static int ORDER_FLAG_1_BIT_4 = 23934;
public final static int ORDER_FLAG_1_BIT_5 = 23935;
public final static int ORDER_FLAG_1_BIT_6 = 23936;
public final static int ORDER_FLAG_1_BIT_7 = 23937;
public final static int AFFECTS_LAST_DONE_FLAG = 23940;
public final static int FLASH_LAST_DONE_FLAG = 23950;
public final static int TRANSACTION_TYPE = 23960;
public final static int REQUESTING_USER = 23970;
public final static int ORIGINAL_TIME = 23980;
public final static int WITHDRAW_TO_MODIFY_FLAG = 23990;
public final static int ORIGINAL_TIME_FLAG = 24000;
public final static int WORKBENCH_BUY_OR_SALE = 24010;
public final static int BACKUP_FLAG = 24020;
public final static int ORIGINAL_TICKS = 24030;
public final static int ORIGINAL_DATE = 24040;
public final static int ORIGINAL_BID_OR_OFFER_FLAG = 24050;
public final static int COMPLETED_FLAG = 24100;
public final static int MASTER_MARKET = 24110;
public final static int CONVERSION_FACTOR = 24120;
public final static int BUY_OR_SALE_FLAG = 24130;
public final static int SELLER_COMMISSION = 24140;
public final static int BUYER_COMMISSION = 24150;
public final static int COUNTERPARTY_CURRENCY = 24160;
public final static int SELLER_EXCHANGE_NUMERAL = 24170;
public final static int BUYER_EXCHANGE_NUMERAL = 24180;
public final static int SELLER_PAYMENT = 24190;
public final static int BUYER_PAYMENT = 24200;
public final static int COMPLETED_DATA_FLAG = 24210;
public final static int COMMENT = 24220;
public final static int COUNTERPARTY_LIGHT = 24230;
public final static int FINAL_NUMBER = 24240;
public final static int COMPLETED_BUYER_FLAG = 24250;
public final static int COMPLETED_SELLER_FLAG = 24260;
public final static int THIRD_PARTY_FLAG = 24270;
public final static int PENDING_TRANSACTION_FLAG = 24280;
public final static int OUR_USER_FLAG = 24290;
public final static int BUYER_IDENTIFICATION_TYPE = 24300;
public final static int BUYER_IDENTIFICATION = 24310;
public final static int BUYER_ENTITY_TYPE = 24320;
public final static int SELLER_IDENTIFICATION_TYPE = 24330;
public final static int SELLER_IDENTIFICATION_NUMBER = 24340;
public final static int SELLER_ENTITY_TYPE = 24350;
public final static int REFERENTIAL_RATE_NAME = 24360;
public final static int OPTION_DESCRIPTION = 24370;
public final static int PREMIUM = 24380;
public final static int EXERCISE_CONDITION = 24390;
public final static int INTEREST_RATE_IN_PESOS = 24400;
public final static int INTEREST_RATE_IN_USD = 24410;
public final static int SELLER_OPERATION_TYPE = 24420;
public final static int BUYER_OPERATION_TYPE = 24430;
public final static int BUYER_COMMISSION_AMOUNT = 24440;
public final static int SELLER_COMMISSION_AMOUNT = 24450;
public final static int BUYER_SPECIAL_TRUST_FLAG = 24460;
public final static int BUYER_SPECIAL_TRUST_CODE = 24470;
public final static int SELLER_SPECIAL_TRUST_FLAG = 24480;
public final static int SELLER_SPECIAL_TRUST_CODE = 24490;
public final static int BUYER_ORIGIN_FLAG = 24500;
public final static int SELLER_ORIGIN_FLAG = 24510;
public final static int REAL_PRICE_PICTURE = 24520;
public final static int USER_NAME = 24640;
public final static int USER_FULL_NAME = 24650;
public final static int USER_BV1_CODE = 24660;
public final static int USER_BV2_CODE = 24670;
public final static int USER_GUIBOS_CODE = 24680;
public final static int USER_IDENTIFICATION_CODE = 24690;
public final static int USER_IDENTIFICATION_NUMBER = 24700;
public final static int BRANCH_4C_IDENTIFICATION = 24710;
public final static int BRANCH_7C_IDENTIFICATION = 24720;
public final static int BRANCH_FULL_NAME = 24730;
public final static int BRANCH_IRS_CODE = 24740;
public final static int BRANCH_BV1_CODE = 24750;
public final static int BRANCH_BV2_CODE = 24760;
public final static int BRANCH_REUTERS_CODE = 24770;
public final static int BRANCH_GUIBOS_CODE = 24780;
public final static int BRANCH_BIC_CODE = 24790;
public final static int INSTITUTION_3C_CODE = 24800;
public final static int INSTITUTION_4C_CODE = 24810;
public final static int INSTITUTION_SHORT_NAME = 24820;
public final static int INSTITUTION_FULL_NAME = 24830;
public final static int INSTITUTION_CLASS = 24840;
public final static int INSTITUTION_TYPE = 24850;
public final static int INSTITUTION_ALTERNATE_CODE = 24860;
public final static int INSTITUTION_SUPERVISOR_TYPE = 24870;
public final static int INSTITUTION_SUPERVISOR_CODE = 24880;
public final static int SENDER_CITY_NAME = 24900;
public final static int ORDER_USER_NAME = 24910;
public final static int ORDER_USER_FULL_NAME = 24920;
public final static int ORDER_USER_BV1_CODE = 24930;
public final static int ORDER_USER_BV2_CODE = 24940;
public final static int ORDER_USER_GUIBOS_CODE = 24950;
public final static int ORDER_USER_IDENTIFICATION_CODE = 24960;
public final static int ORDER_USER_IDENTIFICATION_NUMBER = 24970;
public final static int ORDER_BRANCH_4C_IDENTIFIER = 24980;
public final static int ORDER_BRANCH_7C_IDENTIFIER = 24990;
public final static int ORDER_BRANCH_NAME = 25000;
public final static int ORDER_BRANCH_IRS_CODE = 25010;
public final static int ORDER_BRANCH_BV1_CODE = 25020;
public final static int ORDER_BRANCH_BV2_CODE = 25030;
public final static int ORDER_BRANCH_REUTERS_CODE = 25040;
public final static int ORDER_BRANCH_GUIBOS_CODE = 25050;
public final static int ORDER_BRANCH_BIC_CODE = 25060;
public final static int ORDER_INSTITUTION_CODE_3C = 25070;
public final static int ORDER_INSTITUTION_CODE_4C = 25080;
public final static int ORDER_INSTITUTION_SHORT_NAME = 25090;
public final static int ORDER_INSTITUTION_FULL_NAME = 25100;
public final static int ORDER_INSTITUTION_CLASS = 25110;
public final static int ORDER_INSTITUTION_TYPE = 25120;
public final static int ORDER_INSTITUTION_ALTERNATE_CODE = 25130;
public final static int ORDER_INSTITUTION_SUPERVISOR_TYPE = 25140;
public final static int ORDER_INSTITUTION_SUPERVISOR_CODE = 25150;
public final static int ORDER_CITY_NAME = 25170;
public final static int ORDER_USER_B_NAME = 25180;
public final static int ORDER_USER_B_FULL_NAME = 25190;
public final static int ORDER_USER_B_BV1_CODE = 25200;
public final static int ORDER_USER_B_BV2_CODE = 25210;
public final static int ORDER_USER_B_GUIBOS_CODE = 25220;
public final static int ORDER_USER_B_IDENTIFICATION_CODE = 25230;
public final static int ORDER_USER_B_IDENTIFICATION_NUMBER = 25240;
public final static int ORDER_BRANCH_B_4C_IDENTIFIER = 25250;
public final static int ORDER_BRANCH_B_7C_IDENTIFIER = 25260;
public final static int ORDER_BRANCH_B_NAME = 25270;
public final static int ORDER_BRANCH_B_IRS_CODE = 25280;
public final static int ORDER_BRANCH_B_BV1_CODE = 25290;
public final static int ORDER_BRANCH_B_BV2_CODE = 25300;
public final static int ORDER_BRANCH_B_REUTERS_CODE = 25310;
public final static int ORDER_BRANCH_B_GUIBOS_CODE = 25320;
public final static int ORDER_BRANCH_B_BIC_CODE = 25330;
public final static int ORDER_INSTITUTION_B_CODE_3C = 25340;
public final static int ORDER_INSTITUTION_B_CODE_4C = 25350;
public final static int ORDER_INSTITUTION_B_SHORT_NAME = 25360;
public final static int ORDER_INSTITUTION_B_FULL_NAME = 25370;
public final static int ORDER_INSTITUTION_B_CLASS = 25380;
public final static int ORDER_INSTITUTION_B_TYPE = 25390;
public final static int ORDER_INSTITUTION_B_ALTERNATE_CODE = 25400;
public final static int ORDER_INSTITUTION_B_SUPERVISOR_TYPE = 25410;
public final static int ORDER_INSTITUTION_B_SUPERVISOR_CODE = 25420;
public final static int ORDER_CITY_B_NAME = 25440;
public final static int ORDER_BROKER_BRANCH_4C_IDENTIFIER = 25450;
public final static int ORDER_BROKER_BRANCH_7C_IDENTIFIER = 25460;
public final static int ORDER_BROKER_BRANCH_NAME = 25470;
public final static int ORDER_BROKER_BRANCH_IRS_CODE = 25480;
public final static int ORDER_BROKER_BRANCH_BV1_CODE = 25490;
public final static int ORDER_BROKER_BRANCH_BV2_CODE = 25500;
public final static int ORDER_BROKER_BRANCH_REUTERS_CODE = 25510;
public final static int ORDER_BROKER_BRANCH_GUIBOS_CODE = 25520;
public final static int ORDER_BROKER_BRANCH_BIC_CODE = 25530;
public final static int ORDER_BROKER_INSTITUTION_CODE_3C = 25540;
public final static int ORDER_BROKER_INSTITUTION_CODE_4C = 25550;
public final static int ORDER_BROKER_INSTITUTION_SHORT_NAME = 25560;
public final static int ORDER_BROKER_INSTITUTION_FULL_NAME = 25570;
public final static int ORDER_BROKER_INSTITUTION_CLASS = 25580;
public final static int ORDER_BROKER_INSTITUTION_TYPE = 25590;
public final static int ORDER_BROKER_INSTITUTION_ALTERNATE_CODE = 25600;
public final static int ORDER_BROKER_INSTITUTION_SUPERVISOR_TYPE = 25610;
public final static int ORDER_BROKER_INSTITUTION_SUPERVISOR_CODE = 25620;
public final static int ORDER_BROKER_CITY_NAME = 25640;
public final static int TITLE_NAME = 25650;
public final static int TITLE_UNIQUE_TV_CODE = 25660;
public final static int TITLE_IDENTIFIER = 25670;
public final static int TITLE_ALTERNATE_IDENTIFIER = 25680;
public final static int TITLE_INSTRUMENT_TYPE = 25690;
public final static int TITLE_ALTERNATE_ALPHANUMERIC_CODE = 25700;
public final static int TITLE_ALTERNATE_NUMERIC_CODE = 25710;
public final static int TITLE_BACK_OFFICE_CODE_MX = 25720;
public final static int TITLE_MIX_FLAG = 25730;
public final static int ISSUER_FULL_NAME = 25740;
public final static int ISSUER_SHORT_NAME = 25750;
public final static int ISSUER_MIX_FLAG = 25760;
public final static int ISSUER_INSTRUMENT_TYEP = 25770;
public final static int ISSUER_CLASSIFICATION = 25780;
public final static int ISSUER_CLASSIFICATION_DATE = 25790;
public final static int ISSUER_CLASSIFICATION_INSTITUTION = 25800;
public final static int RATE_REFERENTIAL_RATE = 25810;
public final static int SUPER_GROUP_NAME = 25820;
public final static int SUPER_GROUP_CLASS_REPO_FLAG = 25830;
public final static int SUPER_GROUP_MIN_LINE = 25840;
public final static int SUPER_GROUP_MAX_LINE = 25850;
public final static int SUPER_GROUP_TOTAL_LINES = 25860;
public final static int GROUP_NAME = 25870;
public final static int GROUP_ROW_BACKGROUND_COLOR = 25880;
public final static int GROUP_ROW_FOREGROUND_COLOR = 25890;
public final static int GROUP_NUMBER = 25900;
public final static int GROUP_MATCH_FACTOR = 25910;
public final static int GROUP_ALTERNATE_CODE = 25920;
public final static int GROUP_ORDERS_SORT = 25930;
public final static int GROUP_CLASS_FORWARD = 25940;
public final static int GROUP_SAME_DAY_MAX_AMOUNT = 25950;
public final static int GROUP_SAME_TERM_MAX_AMOUNT = 25960;
public final static int GROUP_SAME_DAY_MIN_AMOUNT = 25970;
public final static int GROUP_SAME_TERM_MIN_AMOUNT = 25980;
public final static int GROUP_USES_MAX_AND_MIN_AMOUNT_FLAG = 25990;
public final static int GROUP_REESTABLISH_CLOSING_TIME = 26000;
public final static int GROUP_DONT_USE_CREDIT_LINES = 26010;
public final static int ORDER_1_USER_NAME = 26040;
public final static int ORDER_1_USER_FULL_NAME = 26050;
public final static int ORDER_1_USER_BV1_CODE = 26070;
public final static int ORDER_1_USER_BV2_CODE = 26080;
public final static int ORDER_1_USER_GUIBOS_CODE = 26090;
public final static int ORDER_1_USER_IDENTIFICATION_CODE = 26100;
public final static int ORDER_1_USER_IDENTIFICATION_NUMBER = 26110;
public final static int ORDER_1_BRANCH_4C_IDENTIFIER = 26120;
public final static int ORDER_1_BRANCH_7C_IDENTIFIER = 26130;
public final static int ORDER_1_BRANCH_NAME = 26140;
public final static int ORDER_1_BRANCH_IRS_CODE = 26150;
public final static int ORDER_1_BRANCH_BV1_CODE = 26160;
public final static int ORDER_1_BRANCH_BV2_CODE = 26170;
public final static int ORDER_1_BRANCH_REUTERS_CODE = 26180;
public final static int ORDER_1_BRANCH_GUIBOS_CODE = 26190;
public final static int ORDER_1_BRANCH_BIC_CODE = 26200;
public final static int ORDER_1_INSTITUTION_CODE_3C = 26210;
public final static int ORDER_1_INSTITUTION_CODE_4C = 26220;
public final static int ORDER_1_INSTITUTION_SHORT_NAME = 26230;
public final static int ORDER_1_INSTITUTION_FULL_NAME = 26240;
public final static int ORDER_1_INSTITUTION_CLASS = 26250;
public final static int ORDER_1_INSTITUTION_TYPE = 26260;
public final static int ORDER_1_INSTITUTION_ALTERNATE_CODE = 26270;
public final static int ORDER_1_INSTITUTION_SUPERVISOR_TYPE = 26280;
public final static int ORDER_1_INSTITUTION_SUPERVISOR_CODE = 26290;
public final static int ORDER_1_CITY_NAME = 26310;
public final static int ORDER_1_USER_B_NAME = 26320;
public final static int ORDER_1_USER_B_FULL_NAME = 26330;
public final static int ORDER_1_USER_B_BV1_CODE = 26340;
public final static int ORDER_1_USER_B_BV2_CODE = 26350;
public final static int ORDER_1_USER_B_GUIBOS_CODE = 26360;
public final static int ORDER_1_USER_B_IDENTIFICATION_CODE = 26370;
public final static int ORDER_1_USER_B_IDENTIFICATION_NUMBER = 26380;
public final static int ORDER_1_BRANCH_B_4C_IDENTIFIER = 26390;
public final static int ORDER_1_BRANCH_B_7C_IDENTIFIER = 26400;
public final static int ORDER_1_BRANCH_B_NAME = 26410;
public final static int ORDER_1_BRANCH_B_IRS_CODE = 26420;
public final static int ORDER_1_BRANCH_B_BV1_CODE = 26430;
public final static int ORDER_1_BRANCH_B_BV2_CODE = 26440;
public final static int ORDER_1_BRANCH_B_REUTERS_CODE = 26450;
public final static int ORDER_1_BRANCH_B_GUIBOS_CODE = 26460;
public final static int ORDER_1_BRANCH_B_BIC_CODE = 26470;
public final static int ORDER_1_INSTITUTION_B_CODE_3C = 26480;
public final static int ORDER_1_INSTITUTION_B_CODE_4C = 26490;
public final static int ORDER_1_INSTITUTION_B_SHORT_NAME = 26500;
public final static int ORDER_1_INSTITUTION_B_FULL_NAME = 26510;
public final static int ORDER_1_INSTITUTION_B_CLASS = 26520;
public final static int ORDER_1_INSTITUTION_B_TYPE = 26530;
public final static int ORDER_1_INSTITUTION_B_ALTERNATE_CODE = 26540;
public final static int ORDER_1_INSTITUTION_B_SUPERVISOR_TYPE = 26550;
public final static int ORDER_1_INSTITUTION_B_SUPERVISOR_CODE = 26560;
public final static int ORDER_1_CITY_B_NAME = 26580;
public final static int ORDER_1_BROKER_BRANCH_4C_IDENTIFIER = 26590;
public final static int ORDER_1_BROKER_BRANCH_7C_IDENTIFIER = 26600;
public final static int ORDER_1_BROKER_BRANCH_NAME = 26610;
public final static int ORDER_1_BROKER_BRANCH_IRS_CODE = 26620;
public final static int ORDER_1_BROKER_BRANCH_BV1_CODE = 26630;
public final static int ORDER_1_BROKER_BRANCH_BV2_CODE = 26640;
public final static int ORDER_1_BROKER_BRANCH_REUTERS_CODE = 26650;
public final static int ORDER_1_BROKER_BRANCH_GUIBOS_CODE = 26660;
public final static int ORDER_1_BROKER_BRANCH_BIC_CODE = 26670;
public final static int ORDER_1_BROKER_INSTITUTION_CODE_3C = 26680;
public final static int ORDER_1_BROKER_INSTITUTION_CODE_4C = 26690;
public final static int ORDER_1_BROKER_INSTITUTION_SHORT_NAME = 26700;
public final static int ORDER_1_BROKER_INSTITUTION_FULL_NAME = 26710;
public final static int ORDER_1_BROKER_INSTITUTION_CLASS = 26720;
public final static int ORDER_1_BROKER_INSTITUTION_TYPE = 26730;
public final static int ORDER_1_BROKER_INSTITUTION_ALTERNATE_CODE = 26740;
public final static int ORDER_1_BROKER_INSTITUTION_SUPERVISOR_TYPE = 26750;
public final static int ORDER_1_BROKER_INSTITUTION_SUPERVISOR_CODE = 26760;
public final static int ORDER_1_BROKER_CITY_NAME = 26780;
public final static int SHARE_NOMINAL_VALUE_BVG = 24541;
public final static int SHARE_PRICE_DIVIDER_BVG = 24542;
public final static int SHARE_NAME_BVG = 24543;
public final static int SHARE_SHORT_NAME_BVG = 24544;
public enum Class { Se declara un enum
ENTER(1),
para almacenar datos
MODIFY_NO_WITHDRAW(2),
WITHDRAW(3), de variables
ACCEPTANCE(4);

private int code;


private Class(int code) {

this.code = code;
}

public int getCode() {

return code;
}
}
public TransactionOrderMessage() { Metodo que hereda la
clase de orden de
super(MSG_TYPE_TRANSACTION_ORDER);
addTag(Tag.SENDER_COMP_ID, SENDER_COMP_ID); transacción de
addTag(Tag.TARGET_COMP_ID, TARGET_COMP_ID); mensajes y agrega tag
}
public void setDatatecFields(DatatecFields datatecFields) { Metodo que recibe
como parámetro un
addTag(new Tag(PRIMARY_USER_CODE,
datatecFields.getPrimaryUserCode())); campo de tipo
addTag(new Tag(USER, datatecFields.getUserCode())); datatecfield y agrega
addTag(new Tag(BRANCH, datatecFields.getBranch())); los campos usuario,
addTag(new Tag(INSTITUTION_CODE,
branch, código de
datatecFields.getInstitutionCode()));
addTag(new Tag(CITY, datatecFields.getCityCode())); institución y ciudad
}
public void setClass(Class msgClass) { Metodo que recibe
como parámetro un
addTag(new Tag(MESSAGE_CLASS, msgClass.getCode()));
} campo de tipo msgclass
y agrega el campo
mensaje

No se encuentra código malicioso

 PricesAmountsTradedMessage.java: Clase java


PricesAmountsTradedMessagedonde se variables finales con valores
constantes y un método para el precio del comercio.
public final static int OPERATION_FLAG = 20000; Se definen variables de tipo final con
public final static int MARKET = 20440; asignación de valor constantes
public final static int SUB_MARKET = 20450;
public final static int DATE = 20120;
public final static int TIME = 20110;
public final static int OPERATION_TICKS = 29500;
public final static int ORDER_CODE = 20240;
public final static int ORDER_CODE_1 = 23390;
public final static int REGISTERED_FLAG = 29505;
public final static int REGISTER_HOUR = 29510;
public final static int CURRENCY = 21570;
public final static int FREE_TERM_FLAG = 20630;
public final static int JUMBO_FLAG = 22210;
public final static int RMD_FLAG = 29515;
public final static int PHYSICAL_COMPENSATION_FLAG = 20620;
public final static int TITLE_CODE = 21400;
public final static int EMITTER = 21420;
public final static int COUNTRY_CODE = 21430;
public final static int EMITTER_CODE = 21440;
public final static int REFERENCE = 21450;
public final static int EMISSION_NUMBER = 21460;
public final static int SET_NUMBER = 21470;
public final static int COLOCATION_NUMBER = 21480;
public final static int ISIN_CODE = 21900;
public final static int CATALOG_CODE = 22590;
public final static int FI_MNEMOTECHNIC = 21890;
public final static int BOND_IDENTIFIER = 20635;
public final static int FI_QUALIFICATION = 23265;
public final static int ISSUE_TYPE = 21560;
public final static int INTEREST_RATE = 21690;
public final static int INTEREST_RATE_TYPE = 21700;
public final static int FI_OPTION = 21370;
public final static int FI_OPTION_DATE = 21380;
public final static int EMISSION_DATE = 21920;
public final static int MATURITY_DATE = 21930;
public final static int TERM_TEXT = 20610;
public final static int XDAYS = 20570;
public final static int DAYS = 20560;
public final static int MATURITY_DATE_XDAYS = 20580;
public final static int BID_OFFER = 20460;
public final static int ORIGIN_FLAG = 29520;
public final static int BROKER_HOME_CODE = 29525;
public final static int VALUE_DATE = 20540;
public final static int DELIVERY_DATE = 20550;
public final static int BROKER_ORDER_FLAG = 20410;
public final static int BROKER_ORDER_FLAG_1 = 23910;
public final static int ORDER_VIA_INTERMEDIARY_FLAG =
21120;
public final static int ORDER_VIA_INTERMEDIARY_FLAG_1 =
21125;
public final static int TRADED_NUMBER = 20720;
public final static int PRICE = 20680;
public final static int PRICE_SCALE = 22650;
public final static int YIELD = 22420;
public final static int YIELD_RATE = 22430;
public final static int OVER_RATE = 29530;
public final static int EFFECTIVE_MONTHLY_YIELD_RATE =
22445;
public final static int SPOT_PRICE = 23270;
public final static int FINAL_PRICE = 23280;
public final static int COLOR = 29040;
public final static int USR_ORDER_NAME = 24910;
public final static int USR_ORDER_NAME_FULL = 24920;
public final static int USR_ORDER_CODE_BV_1 = 24930;
public final static int USR_ORDER_CODE_BV_2 = 24940;
public final static int USR_ORDER_CODE_GUIBOS = 24950;
public final static int USR_ORDER_CODE_IDENTIFICATION =
24960;
public final static int USR_ORDER_NUMERO_IDENTIFICATION =
24970;
public final static int BRANCH_ORDER_IDENTIFIER_4C = 24980;
public final static int BRANCH_ORDER_IDENTIFIER_7C = 24990;
public final static int BRANCH_ORDER_NAME = 25000;
public final static int BRANCH_ORDER_CODE_RUC = 25010;
public final static int BRANCH_ORDER_CODE_BV_1 = 25020;
public final static int BRANCH_ORDER_CODE_BV_2 = 25030;
public final static int BRANCH_ORDER_CODE_REUTER = 25040;
public final static int BRANCH_ORDER_CODE_GUIBOS = 25050;
public final static int BRANCH_ORDER_CODE_BIC = 25060;
public final static int INS_ORDER_CODE_3C = 25070;
public final static int INS_ORDER_CODE_4C = 25080;
public final static int INS_ORDER_NAME_SHORT = 25090;
public final static int INS_ORDER_NAME = 25100;
public final static int INS_ORDER_CLASS = 25110;
public final static int INS_ORDER_TYPE_ENTITY = 25120;
public final static int INS_ORDER_CODE_ALTERNATE = 25130;
public final static int INS_ORDER_TYPE_SUPER_FINANCIERA =
25140;
public final static int INS_ORDER_CODE_SUPER_FINANCIERA =
25150;
public final static int CITY_ORDER_NAME = 25170;
public final static int USR_B_ORDER_NAME = 25180;
public final static int USR_B_ORDER_NAME_FULL = 25190;
public final static int USR_B_ORDER_CODE_BV_1 = 25200;
public final static int USR_B_ORDER_CODE_BV_2 = 25210;
public final static int USR_B_ORDER_CODE_GUIBOS = 25220;
public final static int USR_B_ORDER_CODE_IDENTIFICATION =
25230;
public final static int USR_B_ORDER_NUMERO_IDENTIFICATION
= 25240;
public final static int BRANCH_B_ORDER_IDENTIFIER_4C =
25250;
public final static int BRANCH_B_ORDER_IDENTIFIER_7C =
25260;
public final static int BRANCH_B_ORDER_NAME = 25270;
public final static int BRANCH_B_ORDER_CODE_RUC = 25280;
public final static int BRANCH_B_ORDER_CODE_BV_1 = 25290;
public final static int BRANCH_B_ORDER_CODE_BV_2 = 25300;
public final static int BRANCH_B_ORDER_CODE_REUTER =
25310;
public final static int BRANCH_B_ORDER_CODE_GUIBOS =
25320;
public final static int BRANCH_B_ORDER_CODE_BIC = 25330;
public final static int INS_B_ORDER_CODE_3C = 25340;
public final static int INS_B_ORDER_CODE_4C = 25350;
public final static int INS_B_ORDER_NAME_SHORT = 25360;
public final static int INS_B_ORDER_NAME = 25370;
public final static int INS_B_ORDER_CLASS = 25380;
public final static int INS_B_ORDER_TYPE_ENTITY = 25390;
public final static int INS_B_ORDER_CODE_ALTERNATE = 25400;
public final static int INS_B_ORDER_TYPE_SUPER_FINANCIERA =
25410;
public final static int INS_B_ORDER_CODE_SUPER_FINANCIERA
= 25420;
public final static int CITY_B_ORDER_NAME = 25440;
public final static int USR_ORDER_1_NAME = 26040;
public final static int USR_ORDER_1_NAME_FULL = 26050;
public final static int USR_ORDER_1_CODE_BV_1 = 26070;
public final static int USR_ORDER_1_CODE_BV_2 = 26080;
public final static int USR_ORDER_1_CODE_GUIBOS = 26090;
public final static int USR_ORDER_1_CODE_IDENTIFICATION =
26100;
public final static int USR_ORDER_1_NUMERO_IDENTIFICATION
= 26110;
public final static int BRANCH_ORDER_1_IDENTIFIER_4C =
26120;
public final static int BRANCH_ORDER_1_IDENTIFIER_7C =
26130;
public final static int BRANCH_ORDER_1_NAME = 26140;
public final static int BRANCH_ORDER_1_CODE_RUC = 26150;
public final static int BRANCH_ORDER_1_CODE_BV_1 = 26160;
public final static int BRANCH_ORDER_1_CODE_BV_2 = 26170;
public final static int BRANCH_ORDER_1_CODE_REUTER =
26180;
public final static int BRANCH_ORDER_1_CODE_GUIBOS =
26190;
public final static int BRANCH_ORDER_1_CODE_BIC = 26200;
public final static int INS_ORDER_1_CODE_3C = 26210;
public final static int INS_ORDER_1_CODE_4C = 26220;
public final static int INS_ORDER_1_NAME_SHORT = 26230;
public final static int INS_ORDER_1_NAME = 26240;
public final static int INS_ORDER_1_CLASS = 26250;
public final static int INS_ORDER_1_TYPE_ENTITY = 26260;
public final static int INS_ORDER_1_CODE_ALTERNATE = 26270;
public final static int INS_ORDER_1_TYPE_SUPER_FINANCIERA =
26280;
public final static int INS_ORDER_1_CODE_SUPER_FINANCIERA
= 26290;
public final static int CITY_ORDER_1_NAME = 26310;
public final static int USR_B_ORDER_1_NAME = 26320;
public final static int USR_B_ORDER_1_NAME_FULL = 26330;
public final static int USR_B_ORDER_1_CODE_BV_1 = 26340;
public final static int USR_B_ORDER_1_CODE_BV_2 = 26350;
public final static int USR_B_ORDER_1_CODE_GUIBOS = 26360;
public final static int USR_B_ORDER_1_CODE_IDENTIFICATION =
26370;
public final static int
USR_B_ORDER_1_NUMERO_IDENTIFICATION = 26380;
public final static int BRANCH_B_ORDER_1_IDENTIFIER_4C =
26390;
public final static int BRANCH_B_ORDER_1_IDENTIFIER_7C =
26400;
public final static int BRANCH_B_ORDER_1_NAME = 26410;
public final static int BRANCH_B_ORDER_1_CODE_RUC = 26420;
public final static int BRANCH_B_ORDER_1_CODE_BV_1 =
26430;
public final static int BRANCH_B_ORDER_1_CODE_BV_2 =
26440;
public final static int BRANCH_B_ORDER_1_CODE_REUTER =
26450;
public final static int BRANCH_B_ORDER_1_CODE_GUIBOS =
26460;
public final static int BRANCH_B_ORDER_1_CODE_BIC = 26470;
public final static int INS_B_ORDER_1_CODE_3C = 26480;
public final static int INS_B_ORDER_1_CODE_4C = 26490;
public final static int INS_B_ORDER_1_NAME_SHORT = 26500;
public final static int INS_B_ORDER_1_NAME = 26510;
public final static int INS_B_ORDER_1_CLASS = 26520;
public final static int INS_B_ORDER_1_TYPE_ENTITY = 26530;
public final static int INS_B_ORDER_1_CODE_ALTERNATE =
26540;
public final static int
INS_B_ORDER_1_TYPE_SUPER_FINANCIERA = 26550;
public final static int
INS_B_ORDER_1_CODE_SUPER_FINANCIERA = 26560;
public final static int CITY_B_ORDER_1_NAME = 26580;
public final static int TITLE_NAME = 25650;
public final static int TITLE_CODE_UNIQUE_TV = 25660;
public final static int TITLE_IDENTIFIER = 25670;
public final static int TITLE_IDENTIFIER_ALTERNATE = 25680;
public final static int TITLE_TYPE_INSTRUMENT = 25690;
public final static int TITLE_CODE_ALTERNATE = 25700;
public final static int TITLE_CODE_ALTERNATE_NUMERIC =
25710;
public final static int TITLE_CODE_BACK_OFFICE_MX = 25720;
public final static int TITLE_FLAG_MIX = 25730;
public final static int EMIT_NAME = 25740;
public final static int EMIT_NAME_SHORT = 25750;
public final static int EMIT_FLAG_MIX = 25760;
public final static int EMIT_TYPE_INSTRUMENT = 25770;
public final static int EMIT_QUALIFICATION = 25780;
public final static int EMIT_DATE_QUALIFICATION_RISK = 25790;
public final static int EMIT_INSTITUTION_CALIFICADORA_RISK =
25800;
public PricesAmountsTradedMessage() { Método que hereda el mensaje del precio
super(Message.MSG_TYPE_PRICES_AMOUNTS_TRADED);
de los montos de comecio
}

No se encuentra código malicioso

 MessageListener.java: Clase java MessageListener definen métodos,


variables, objetos.
public void processReceivedMessage(Message Metodo que recibe como parametro una
message);
estructura de tipo de mensaje
public void processSentMessage(Message message); Metodo que envia como parametro una
estructura de tipo de mensaje
public void processConnectionClosed(); Metodo que cierra una conexión
public void processLogonDenied(String branch, Metodo que recepciona los parametros
String user, String flag, String reason);
cuando se produce un login denegado
public void processLogonAccepted(String branch, Metodo que recepciona los parametros
String user, String puCode,String userCode);
cuando se produce un login aceptado
public void processMarketDataReceived(Map<String, Metodo que procesa los datos recibidos por
Market> markets,Market market);
el mercado
public void processInstrumentDataReceived( Metodo que procesa los datos recibidos de
SortedMap<String, Instrument> instruments,
los instrumentos.
Instrument instrument);
public void Metodo que procesa los datos recibidos de
processCurrentOrderDataReceived(Instrument
las órdenes de datos actuales recibiendo
instrument,Order order)
como parámetros los instrumentos y
órdenes.
public void processCurrentOrderDataReceived(Market Metodo que procesa los datos recibidos de
market, Order order);
las órdenes de datos actuales recibiendo
como parámetros el mercado y órdenes.
public void Metodo que procesa los datos recibidos de
processPricesAmountsTradedDataReceived(Market
los precios de montos del comercio.
market,StatisticData statistics);
public void Metodo que procesa los datos recibidos de
processTransactionOrderDataReceived(Market market,
las órdenes de datos de las transacciones.
TransactionOrderData toData)

No se encuentra código malicioso

 CurrentOrderMessage.java: Clase java CurrentOrderMessage se variables


finales con valores constantes y un método para heredar un tipo de
mensaje de orden.
public final static int OPERATION_FLAG = 20000; Se definen variables de tipo final con
public final static int ORDER_PU_CODE = 20230;
asignación de valor constantes
public final static int ORDER_CODE = 20240;
public final static int ORDER_BRANCH_CODE = 20270;
public final static int ORDER_INSTITUTION_CODE =
20280;
public final static int ORDER_3C_CITY = 20290;
public final static int ORDER_AGENCY = 20300;
public final static int ORDER_BRANCH_4C_CODE =
20310;
public final static int ORDER_CITY = 20320;
public final static int ORDER_BANK_BRANCH = 20330;
public final static int ORDER_BANK_INSTITUTION =
20340;
public final static int ORDER_BANK_3C_CITY_CODE =
20350;
public final static int ORDER_BANK_AGENCY_CODE =
20360;
public final static int ORDER_BANK_BRANCH_4C_CODE
= 20370;
public final static int ORDER_BANK_CITY = 20380;
public final static int BANK_USER = 20390;
public final static int ORDER_ETC_CLIENT_FLAG =
20400;
public final static int ORDER_BROKER_FLAG = 20410;
public final static int ETC_USER_SHORT_NAME =
20420;
public final static int ORDER_QUOTE_FLAG = 20430;
public final static int MARKET = 20440;
public final static int SUB_MARKET = 20450;
public final static int BID_OR_OFFER = 20460;
public final static int PROCESSING_VIA = 20470;
public final static int OPERATION_TIME = 20480;
public final static int OPERATION_TICKS = 20490;
public final static int TIME_TO_FLASH = 20500;
public final static int ORDER_DATE = 20510;
public final static int ROUND_DATE = 20515;
public final static int ORDER_TIME = 20520;
public final static int ORDER_TOTAL_FLAG = 20530;
public final static int VALUE_DATE = 20540;
public final static int DELIVERY_DATE = 20550;
public final static int DAYS = 20560;
public final static int XDAYS = 20570;
public final static int XDAYS_MATURITY_DATE =
20580;
public final static int LEVEL = 20590;
public final static int RFQ_TEXT_TERM = 20600;
public final static int TERM_TEXT = 20610;
public final static int
PHYSICALL_COMPENSATION_FLAG = 20620;
public final static int STANDARD_OR_FREE_TERM_FLAG
= 20630;
public final static int ORDERS_GROUP_IDENTIFIER =
20640;
public final static int ORDERS_GROUP_IDENTIFIER_A
= 20650;
public final static int ORDERS_GROUP_IDENTIFIER_B
= 20660;
public final static int
WITHDRAW_ORDER_IN_PARTIAL_TRANSACTION_FLAG = 20670;
public final static int PRICE = 20680;
public final static int FORWARD_POINTS = 20690;
public final static int NUMBER = 20700;
public final static int MIN_NUMBER = 20710;
public final static int TRADED_NUMBER = 20720;
public final static int TOTAL_NUMBER = 20730;
public final static int BASIC_FRACTION = 20740;
public final static int MINIMUM_FLAG = 20750;
public final static int ADJUDICATION_TYPE_FLAG =
20760;
public final static int TITLE_GROUP_ALTERNATE_CODE
= 20770;
public final static int AUTOMATIC_OPERATION_FLAG =
20780;
public final static int ADJUST_PRICE_FLAG = 20790;
public final static int
ENTERED_WITH_CALCULATION_FLAG = 20800;
public final static int ORDER_TYPE_FLAG = 20810;
public final static int ROUND_FLAG = 20820;
public final static int OVERRIDE_INDICATIVE =
20830;
public final static int PENDING_ORDER_FLAG =
20840;
public final static int OPTIONALITY_FLAG = 20850;
public final static int LINKED_BY_AMOUNT_FLAG =
20860;
public final static int CASH_CHEQUE_FLAG = 20870;
public final static int ORDER_CLASS_FLAG = 20880;
public final static int ORDER_SUB_CLASS_FLAG =
20890;
public final static int LINK_DAYS = 20900;
public final static int LINK_XDAYS = 20910;
public final static int LINK_TYPE_MX_RF_DATA =
20920;
public final static int LINK_LEVEL = 20930;
public final static int LINK_MATURITY_DATE =
20940;
public final static int LINK_TERM_TEXT = 20950;
public final static int LINK_SUB_MARKET = 20960;
public final static int LINK_BID_OR_OFFER = 20970;
public final static int EXPIRATION_FLAG = 20980;
public final static int EXPIRATION_TIME = 20990;
public final static int REPLIER_OPERATION_TIME =
21000;
public final static int LINKED_TO_SPOT_PRICE_FLAG
= 21010;
public final static int MINIMUM_SPOT_PRICE =
21020;
public final static int MAXIMUM_SPOT_PRICE =
21030;
public final static int LINK_ORDER_CODE = 21040;
public final static int ISIN_1 = 21050;
public final static int ORDER_BROKER_BRANCH_CODE =
21060;
public final static int
ORDER_BROKER_INSTITUTION_CODE = 21070;
public final static int ORDER_BROKER_CITY_3C_CODE
= 21080;
public final static int ORDER_BROKER_AGENCY_CODE =
21090;
public final static int
ORDER_BROKER_BRANCH_4C_CODE = 21100;
public final static int ORDER_BROKER_CITY_ =
21110;
public final static int ORDER_VIA_BROKER_FLAG =
21120;
public final static int LINK_TO_OTHER_MARKET_FLAG
= 21130;
public final static int CATEGORY_CODE = 21140;
public final static int ORDER_FLAG_BIT_0 = 21150;
public final static int ORDER_FLAG_BIT_1 = 21151;
public final static int ORDER_FLAG_BIT_2 = 21152;
public final static int ORDER_FLAG_BIT_3 = 21153;
public final static int ORDER_FLAG_BIT_4 = 21154;
public final static int ORDER_FLAG_BIT_5 = 21155;
public final static int ORDER_FLAG_BIT_6 = 21156;
public final static int ORDER_FLAG_BIT_7 = 21157;
public final static int SECONDS_TO_INTERRUPT =
21170;
public final static int VALIDITY_TIME = 21190;
public final static int ORDER_2_FLAG_BIT_0 =
21200;
public final static int ORDER_2_FLAG_BIT_1 =
21201;
public final static int ORDER_2_FLAG_BIT_2 =
21202;
public final static int ORDER_2_FLAG_BIT_3 =
21203;
public final static int ORDER_2_FLAG_BIT_4 =
21204;
public final static int ORDER_2_FLAG_BIT_5 =
21205;
public final static int ORDER_2_FLAG_BIT_6 =
21206;
public final static int ORDER_2_FLAG_BIT_7 =
21207;
public final static int ORDER_3_FLAG_BIT_0 =
21210;
public final static int ORDER_3_FLAG_BIT_1 =
21211;
public final static int ORDER_3_FLAG_BIT_2 =
21212;
public final static int ORDER_3_FLAG_BIT_3 =
21213;
public final static int ORDER_3_FLAG_BIT_4 =
21214;
public final static int ORDER_3_FLAG_BIT_5 =
21215;
public final static int ORDER_3_FLAG_BIT_6 =
21216;
public final static int ORDER_3_FLAG_BIT_7 =
21217;
public final static int SPECIFIC_ORDER_FLAG =
21220;
public final static int ORIGINAL_ORDER_CODE =
21230;
public final static int BROKERAGE_FLAG = 21240;
public final static int ORDER_COMMISSION = 21250;
public final static int COMMISSION_FLAG = 21260;
public final static int OWNER_PUBLIC_ENTITY =
21270;
public final static int PUBLIC_ENTITY_CODE =
21280;
public final static int PUBLIC_ENTITY_3C = 21290;
public final static int REGION = 21300;
public final static int PREFERENCE_FLAG = 21310;
public final static int CROSS_FLAG = 21320;
public final static int PUBLIC_ENTITY_NOTICE =
21330;
public final static int PUBLIC_ENTITY_NOTICE_CODE
= 21340;
public final static int PUBLIC_ENTITY_3C_NOTICE =
21350;
public final static int RATE_NAME = 21360;
public final static int OPTION = 21370;
public final static int OPTION_DATE = 21380;
public final static int COMMENT_1 = 21390;
public final static int COMMENT_2 = 21395;
public final static int TITLE_CODE = 21400;
public final static int ISSUER = 21420;
public final static int COUNTRY_CODE = 21430;
public final static int ISSUER_CODE = 21440;
public final static int REFERENCE = 21450;
public final static int EMISSION = 21460;
public final static int SET = 21470;
public final static int COLLOCATION = 21480;
public final static int FI_CASH_FLOW_TABLE =
21490;
public final static int FI_BACK_OFFICE_CODE =
21500;
public final static int
COUNTERPARTY_IDENTIFICATION_TYPE = 21510;
public final static int
COUNTERPARTY_IDENTIFICATION = 21520;
public final static int COUNTERPARTY_TYPE_FLAG =
21530;
public final static int MATURITY_FLAG = 21540;
public final static int INTEREST_FLAG = 21550;
public final static int PAPER_TYPE = 21560;
public final static int CURRENCY = 21570;
public final static int CURRENCY_1C = 21580;
public final static int NOMINAL_VALUE = 21590;
public final static int MAXIMUM_LOT = 21600;
public final static int NUMERATOR_BASE_DAYS =
21610;
public final static int DENOMINATOR_BASE_DAYS =
21620;
public final static int CAPITAL_PERIOD = 21630;
public final static int INTEREST_PERIOD = 21640;
public final static int INTEREST_PERIOD_FLAG =
21650;
public final static int CAPITAL_PERIOD_FLAG =
21660;
public final static int DEMATERIALIZED_FLAG =
21670;
public final static int INTEREST_TYPE = 21680;
public final static int INTEREST_RATE = 21690;
public final static int INTEREST_RATE_TYPE_FLAG =
21700;
public final static int REFERENTIAL_RATE = 21710;
public final static int FORMULA_CODE = 21720;
public final static int POINTS_PERCENTAGE_FLAG =
21730;
public final static int RATES_FLAG = 21740;
public final static int POINTS_IN_FORMULA = 21750;
public final static int PERCENTAGE_IN_FORMULA =
21760;
public final static int
INITIAL_REFERENTIAL_RATE_FLAG = 21770;
public final static int
END_REFERENTIAL_RATE_END_FLAG = 21780;
public final static int
INITIAL_REFERENTIAL_RATE_DAYS_MONTHS = 21790;
public final static int
END_REFERENTIAL_RATE_DAYS_MONTHS = 21800;
public final static int FI_READJUSTMENT_FORMULA =
21810;
public final static int READJUSTMENT_FLAG = 21820;
public final static int WEIGHTED_FLAG = 21830;
public final static int READJUSTMENT_PERIOD =
21840;
public final static int READJUSTMENT_PERIOD_FLAG =
21850;
public final static int PERIODIC_READJUSTMENT_FLAG
= 21860;
public final static int TITLE_REFERENCE = 21870;
public final static int RFQ_MNEMONIC = 21880;
public final static int MNEMONIC = 21890;
public final static int ISIN_CODE = 21900;
public final static int SERIES_1 = 21910;
public final static int EMISSION_DATE = 21920;
public final static int MATURITY_DATE = 21930;
public final static int TOTAL_TERM = 21940;
public final static int PERIODIC_FLAG = 21950;
public final static int READJUSTABILITY_DAYS =
21960;
public final static int BALANCE = 21970;
public final static int
CURRENT_INTEREST_COUPON_START = 21980;
public final static int
CURRENT_INTEREST_COUPON_END = 21990;
public final static int
CURRENT_CAPITAL_COUPON_START = 22000;
public final static int CURRENT_CAPITAL_COUPON_END
= 22010;
public final static int INTEREST_1 = 22020;
public final static int INTEREST_2 = 22030;
public final static int READJUSTMENT_DATE = 22040;
public final static int READJUSTMENT_START_DATE =
22050;
public final static int READJUSTMENT_END_DATE =
22060;
public final static int NUMBER_OF_TITLES = 22070;
public final static int EMITTED_AMOUNT = 22080;
public final static int OVERLAPPED_COUPONS =
22090;
public final static int FI_SERIES = 22100;
public final static int FI_CLASS = 22110;
public final static int GROUP_CODE = 22120;
public final static int RESTRICTIONS = 22130;
public final static int CONSENSUS = 22140;
public final static int ERROR = 22150;
public final static int SORTING_RESTRICTION =
22160;
public final static int RE_ESTABLISH_FACTS_FLAG =
22170;
public final static int SUPER_GROUP_CODE = 22180;
public final static int SECURED = 22190;
public final static int LISTED = 22200;
public final static int JUMBO_FLAG = 22210;
public final static int LINE = 22220;
public final static int LIQUIDATION = 22230;
public final static int OPERATION_TYPE = 22240;
public final static int CAMA_DE_MONTO = 22250;
public final static int PEAK_LINE = 22260;
public final static int
TOTAL_NUMBER_OF_PERIODS_OF_CAPITAL_GRACE = 22270;
public final static int OPERATION_ORDER = 22280;
public final static int RFQ_TOTAL = 22290;
public final static int EMISSION_ENVIRONMENT_CODE
= 22300;
public final static int TITLE_SUB_TYPE = 22310;
public final static int ENTERED_INDEX_FLAG =
22320;
public final static int PROVISIONAL_FLAG = 22330;
public final static int EMISSION_FLAG = 22340;
public final static int MECHANISM_FLAG = 22350;
public final static int TITLE_CLASS = 22360;
public final static int REAL_MATURITY_DATE =
22370;
public final static int REAL_DAYS = 22380;
public final static int REAL_TOTAL_TERM = 22390;
public final static int COUPON = 22400;
public final static int COMMITMENT_LETTER = 22410;
public final static int YIELD = 22420;
public final static int YIELD_RATE = 22430;
public final static int TOTAL_NEGOTIATION_VALUE =
22440;
public final static int TERM = 22445;
public final static int DISCOUNT = 22450;
public final static int ELAPSED_DAYS = 22460;
public final static int DAYS_LEFT = 22470;
public final static int LAST_PERIOD_DAYS = 22480;
public final static int EARNED_INTERESTS = 22490;
public final static int VALUE_TO_NEGOTIATE =
22500;
public final static int AMOUNT_IN_USD = 22505;
public final static int EFFECTIVE_VALUE = 22510;
public final static int TOTAL_VALUE = 22520;
public final static int AUCTION_MIN_AMOUNT =
22530;
public final static int DECREE = 22540;
public final static int
COUPON_DAYS_ACCORDING_TO_BASE = 22550;
public final static int COUPON_REAL_DAYS = 22560;
public final static int
OMIT_INTEREST_PERIOD_CLOSING = 22570;
public final static int
INTEREST_PERIOD_CLOSING_TYPE_FLAG = 22580;
public final static int CATALOG_CODE = 22590;
public final static int OTHER_CURRENCY = 22600;
public final static int SPOT_PRICE_CURRENCY =
22610;
public final static int STOCK_CODE = 22620;
public final static int SUSPENSION_FLAG = 22630;
public final static int ORDER_TO_MARKET_FLAG =
22640;
public final static int PRICE_SCALE = 22650;
public final static int PRICE_DIVIDER = 22660;
public final static int RIGHTS_FLAG = 22670;
public final static int COMBINATED_ORDERS_FLAG =
22680;
public final static int REPLIER_PASS_FLAG = 22690;
public final static int FI_INSTRUMENT_IDENTIFIER =
22700;
public final static int FI_EMISSION_IDENTIFIER =
22710;
public final static int
INTEREST_PERIOD_CLOSING_DAYS = 22720;
public final static int TERM_CLOSING_DAYS = 22730;
public final static int USD_RATE = 22740;
public final static int LOCAL_TML = 22750;
public final static int LIBOR_RATE = 22760;
public final static int SPREAD_RATE = 22770;
public final static int USD_BILLS_1 = 22780;
public final static int USD_BILLS_5 = 22790;
public final static int USD_BILLS_10 = 22800;
public final static int USD_BILLS_20 = 22810;
public final static int USD_BILLS_50 = 22820;
public final static int USD_BILLS_100 = 22830;
public final static int USD_BILLS_PY_2 = 22840;
public final static int BILLS_STATUS = 22850;
public final static int BILLS_SERIES = 22860;
public final static int BILLS_DELIVERY_FLAG =
22870;
public final static int ROUND_NUMBER = 22880;
public final static int
ROUND_DIRECTOR_INSTITUTION_CODE = 22890;
public final static int ROUND_CLOSING_TIME =
22900;
public final static int ROUND_CLASS = 22910;
public final static int RATE_FLAG = 22920;
public final static int ADJUDICATION_FLAG = 22930;
public final static int TRANSFER_ACCOUNT = 22940;
public final static int DIRECTOR_CONFIRMATION_FLAG
= 22950;
public final static int CUSTODY_OR_WITHDRAWAL_FLAG
= 22960;
public final static int LAST_OPERATION_ORIGIN =
22970;
public final static int ORDER_ORIGIN = 22980;
public final static int PRICE_2 = 22990;
public final static int CLOSED_PERCENTAGE = 23000;
public final static int TERM_FLAG = 23010;
public final static int PI_BUYER_CURRENCY_1_CREDIT
= 23020;
public final static int QUALIFICATION = 23030;
public final static int PI_BUYER_CURRENCY_2_DEBIT
= 23040;
public final static int RISK_QUALIFIER_INSTITUTION
= 23050;
public final static int RFQ_ROUND_NUMBER = 23060;
public final static int REAL_MARKET_ROUND = 23070;
public final static int ASSIGNED_YIELD = 23080;
public final static int REQUESTED_NUMBER = 23090;
public final static int ASSIGNED_NUMBER = 23100;
public final static int ASSIGNED_PRICE = 23110;
public final static int ASSIGNED_EFFECTIVE_AMOUNT
= 23120;
public final static int B_O_ASSIGNATION_FLAG =
23130;
public final static int ACCEPTANCE_ORDER_CODE =
23140;
public final static int LIQUIDATION_NUMBER =
23150;
public final static int EXPIRATION_HOUR = 23160;
public final static int CHECK_MATCH_FLAG = 23170;
public final static int PI_SELLER_CURRENCY_1_DEBIT
= 23180;
public final static int
PI_SELLER_CURRENCY_2_CREDIT = 23190;
public final static int RFQ_REPLIER_BID_PRICE =
23200;
public final static int RFQ_INITIATOR_OFFER_PRICE
= 23210;
public final static int RFQ_INITIATOR_BID_PRICE =
23220;
public final static int RFQ_REPLIER_OFFER_PRICE =
23230;
public final static int
FI_ACTUAL_VALUE_DIVIDED_BY_10 = 23240;
public final static int FI_RISK_QUALIFICATION_DATE
= 23250;
public final static int FRACTION_TEXT = 23260;
public final static int ORDER_USER_NAME = 24910;
public final static int ORDER_USER_FULL_NAME =
24920;
public final static int ORDER_USER_BV1_CODE =
24930;
public final static int ORDER_USER_BV2_CODE =
24940;
public final static int ORDER_USER_GUIBOS_CODE =
24950;
public final static int
ORDER_USER_IDENTIFICATION_CODE = 24960;
public final static int
ORDER_USER_IDENTIFICATION_NUMBER = 24970;
public final static int ORDER_BRANCH_4C_IDENTIFIER
= 24980;
public final static int ORDER_BRANCH_7C_IDENTIFIER
= 24990;
public final static int ORDER_BRANCH_NAME = 25000;
public final static int ORDER_BRANCH_IRS_CODE =
25010;
public final static int ORDER_BRANCH_BV1_CODE =
25020;
public final static int ORDER_BRANCH_BV2_CODE =
25030;
public final static int ORDER_BRANCH_REUTERS_CODE
= 25040;
public final static int ORDER_BRANCH_GUIBOS_CODE =
25050;
public final static int ORDER_BRANCH_BIC_CODE =
25060;
public final static int ORDER_INSTITUTION_CODE_3C
= 25070;
public final static int ORDER_INSTITUTION_CODE_4C
= 25080;
public final static int
ORDER_INSTITUTION_SHORT_NAME = 25090;
public final static int
ORDER_INSTITUTION_FULL_NAME = 25100;
public final static int ORDER_INSTITUTION_CLASS =
25110;
public final static int ORDER_INSTITUTION_TYPE =
25120;
public final static int
ORDER_INSTITUTION_ALTERNATE_CODE = 25130;
public final static int
ORDER_INSTITUTION_SUPERVISOR_TYPE = 25140;
public final static int
ORDER_INSTITUTION_SUPERVISOR_CODE = 25150;
public final static int ORDER_CITY_NAME = 25170;
public final static int ORDER_USER_B_NAME = 25180;
public final static int ORDER_USER_B_FULL_NAME =
25190;
public final static int ORDER_USER_B_BV1_CODE =
25200;
public final static int ORDER_USER_B_BV2_CODE =
25210;
public final static int ORDER_USER_B_GUIBOS_CODE =
25220;
public final static int
ORDER_USER_B_IDENTIFICATION_CODE = 25230;
public final static int
ORDER_USER_B_IDENTIFICATION_NUMBER = 25240;
public final static int
ORDER_BRANCH_B_4C_IDENTIFIER = 25250;
public final static int
ORDER_BRANCH_B_7C_IDENTIFIER = 25260;
public final static int ORDER_BRANCH_B_NAME =
25270;
public final static int ORDER_BRANCH_B_IRS_CODE =
25280;
public final static int ORDER_BRANCH_B_BV1_CODE =
25290;
public final static int ORDER_BRANCH_B_BV2_CODE =
25300;
public final static int
ORDER_BRANCH_B_REUTERS_CODE = 25310;
public final static int ORDER_BRANCH_B_GUIBOS_CODE
= 25320;
public final static int ORDER_BRANCH_B_BIC_CODE =
25330;
public final static int
ORDER_INSTITUTION_B_CODE_3C = 25340;
public final static int
ORDER_INSTITUTION_B_CODE_4C = 25350;
public final static int
ORDER_INSTITUTION_B_SHORT_NAME = 25360;
public final static int
ORDER_INSTITUTION_B_FULL_NAME = 25370;
public final static int ORDER_INSTITUTION_B_CLASS
= 25380;
public final static int ORDER_INSTITUTION_B_TYPE =
25390;
public final static int
ORDER_INSTITUTION_B_ALTERNATE_CODE = 25400;
public final static int
ORDER_INSTITUTION_B_SUPERVISOR_TYPE = 25410;
public final static int
ORDER_INSTITUTION_B_SUPERVISOR_CODE = 25420;
public final static int ORDER_CITY_B_NAME = 25440;
public final static int
ORDER_BROKER_BRANCH_4C_IDENTIFIER = 25450;
public final static int
ORDER_BROKER_BRANCH_7C_IDENTIFIER = 25460;
public final static int ORDER_BROKER_BRANCH_NAME =
25470;
public final static int
ORDER_BROKER_BRANCH_IRS_CODE = 25480;
public final static int
ORDER_BROKER_BRANCH_BV1_CODE = 25490;
public final static int
ORDER_BROKER_BRANCH_BV2_CODE = 25500;
public final static int
ORDER_BROKER_BRANCH_REUTERS_CODE = 25510;
public final static int
ORDER_BROKER_BRANCH_GUIBOS_CODE = 25520;
public final static int
ORDER_BROKER_BRANCH_BIC_CODE = 25530;
public final static int
ORDER_BROKER_INSTITUTION_CODE_3C = 25540;
public final static int
ORDER_BROKER_INSTITUTION_CODE_4C = 25550;
public final static int
ORDER_BROKER_INSTITUTION_SHORT_NAME = 25560;
public final static int
ORDER_BROKER_INSTITUTION_FULL_NAME = 25570;
public final static int
ORDER_BROKER_INSTITUTION_CLASS = 25580;
public final static int
ORDER_BROKER_INSTITUTION_TYPE = 25590;
public final static int
ORDER_BROKER_INSTITUTION_ALTERNATE_CODE = 25600;
public final static int
ORDER_BROKER_INSTITUTION_SUPERVISOR_TYPE = 25610;
public final static int
ORDER_BROKER_INSTITUTION_SUPERVISOR_CODE = 25620;
public final static int ORDER_BROKER_CITY_NAME =
25640;
public final static int TITLE_NAME = 25650;
public final static int TITLE_UNIQUE_TV_CODE =
25660;
public final static int TITLE_IDENTIFIER = 25670;
public final static int TITLE_ALTERNATE_IDENTIFIER
= 25680;
public final static int TITLE_INSTRUMENT_TYPE =
25690;
public final static int
TITLE_ALTERNATE_ALPHANUMERIC_CODE = 25700;
public final static int
TITLE_ALTERNATE_NUMERIC_CODE = 25710;
public final static int TITLE_BACK_OFFICE_CODE_MX
= 25720;
public final static int TITLE_MIX_FLAG = 25730;
public final static int ISSUER_FULL_NAME = 25740;
public final static int ISSUER_SHORT_NAME = 25750;
public final static int ISSUER_MIX_FLAG = 25760;
public final static int ISSUER_INSTRUMENT_TYEP =
25770;
public final static int ISSUER_CLASSIFICATION =
25780;
public final static int ISSUER_CLASSIFICATION_DATE
= 25790;
public final static int
ISSUER_CLASSIFICATION_INSTITUTION = 25800;
public final static int RATE_REFERENTIAL_RATE =
25810;
public final static int SUPER_GROUP_NAME = 25820;
public final static int
SUPER_GROUP_CLASS_REPO_FLAG = 25830;
public final static int SUPER_GROUP_MIN_LINE =
25840;
public final static int SUPER_GROUP_MAX_LINE =
25850;
public final static int SUPER_GROUP_TOTAL_LINES =
25860;
public final static int GROUP_NAME = 25870;
public final static int GROUP_ROW_BACKGROUND_COLOR
= 25880;
public final static int GROUP_ROW_FOREGROUND_COLOR
= 25890;
public final static int GROUP_NUMBER = 25900;
public final static int GROUP_MATCH_FACTOR =
25910;
public final static int GROUP_ALTERNATE_CODE =
25920;
public final static int GROUP_ORDERS_SORT = 25930;
public final static int GROUP_CLASS_FORWARD =
25940;
public final static int GROUP_SAME_DAY_MAX_AMOUNT
= 25950;
public final static int GROUP_SAME_TERM_MAX_AMOUNT
= 25960;
public final static int GROUP_SAME_DAY_MIN_AMOUNT
= 25970;
public final static int GROUP_SAME_TERM_MIN_AMOUNT
= 25980;
public final static int
GROUP_USES_MAX_AND_MIN_AMOUNT_FLAG = 25990;
public final static int
GROUP_REESTABLISH_CLOSING_TIME = 26000;
public final static int
GROUP_DONT_USE_CREDIT_LINES = 26010;
public final static int ORDER_INSITUTION_NAME =
29010;
public final static int ACTUAL_PRICE = 29020;
public final static int CREDIT_BUTTON = 29030;
public final static int COLOR = 29040;
public final static int CURRENT_ORDER_BRANCH =
29050;
public final static int BROKER_USER_NAME = 29060;
public final static int BROKER_CITY = 29070;
public final static int AMOUNT_CURRENCY = 29080;
public final static int MINIMUN_OR_TOTAL_FLAG =
29090;
public final static int CREDIT_LINES_FLAG = 29091;
public final static int CURRENT_ORDER_USER =
29100;
public final static int CURRENT_ORDER_CITY =
29110;
public final static int OVERRIDES_OR_FEED_FLAG =
29120;
public final static int BROKER_NAME_COLOR = 29130;
public final static int WINDOW_CODE = 29140;
public final static int OURS = 29150;
public final static int ORDER_OWN_DRIP_MARK =
29160;
public final static int LOCAL_CURRENCY_RATE =
29170;
public final static int DIFERENTIAL = 29180;
public final static int PRICE_PLUS_SPOT_PRICE =
29190;
public final static int REAL_PRICE_PICTURE =
29200;
public final static int REAL_PRICE_SCALE = 29210;
public final static int TITLE_REFERENCE_A = 28040;
public final static int TITLE_REFERENCE_B = 28050;
public final static int TITLE_REFERENCE_C = 28060;
public final static int REGISTRY_TYPE_FLAG =
29280;
public final static int ATTACHMENTS_FLAG = 29290;
public final static int CREDIT_FLAG = 29295;
public final static int ATTACHMENTS_NUMBER =
29300;
public final static int FLASH_FLAG = 29310;
public final static int MATCHING_TEXT = 28350;
public final static int LOCAL_RESTRICTION = 29330;
public final static int FATHER_REGISTRY_FLAG =
29340;
public final static int AVAILABLE_AMOUNT = 29400;
public final static int PRICE_MULTIPLIED_BY_AMOUNT
= 29410;
public final static int ACCUMULATED_AMOUNT =
29420;
public final static int
PRICE_PER_ACCUMULATED_AMOUNT = 29430;
public final static int WEIGHTED_AMOUNT = 29440;
public final static int AMOUNT_PICTURE_STRING =
24530;
public final static int AMOUNT_SCALE = 24540;
public CurrentOrderMessage() { Método CurrentOrderMessage que hereda
super(Message.MSG_TYPE_CURRENT_ORDER);
una clase que maneja el mensaje del tipo de
}
orden actual

No se encuentra código malicioso

 DefaultClientSession.java : Clase que define variables finales estáticas con


valores contantes, métodos para recibir datos de transacción de Ordenes y
de Instruments
private final static DateFormat DATATEC_DATE_TIME_FORMAT = new se declara la variable
SimpleDateFormat ("yyyyMMdd-HHmmss");
DateFormat, se le da un
formato de tipo año, mes, día
incluyendo hora minutos y
segundos
protected void receiveCurrentOrderData(Message msg) { Método que recibe órdenes
de datos actuales y los asigna
log.debug("Current Order received"); a los tag de la estructura de
mensaje, campos de
// Default & spot fields
Tag market = interbank, campos BCR,
msg.getTag(CurrentOrderMessage.MARKET); campos FI, así mismo realiza
Tag bidOffer = el proceso para un mercado
msg.getTag(CurrentOrderMessage.BID_OR_OFFER);
aun no recibido, pedidos en
Tag price =
msg.getTag(CurrentOrderMessage.PRICE); mismo y creación del
Tag amount = mercado.
msg.getTag(CurrentOrderMessage.NUMBER);
Tag totalAmount =
msg.getTag(CurrentOrderMessage.TOTAL_NUMBER);
Tag code =
msg.getTag(CurrentOrderMessage.ORDER_CODE);
Tag operationFlag =
msg.getTag(CurrentOrderMessage.OPERATION_FLAG);
Tag institutionCode =
msg.getTag(CurrentOrderMessage.ORDER_INSTITUTION_CODE_4C);
Double zero_var = 0.00;

try{
// Interbank fields
Tag matDate =
msg.getTag(CurrentOrderMessage.MATURITY_DATE);
Tag days =
msg.getTag(CurrentOrderMessage.DAYS);

// CD BCR fields
Tag valueDateCDBCR =
msg.getTag(CurrentOrderMessage.VALUE_DATE);
Tag yieldCDBCR =
msg.getTag(CurrentOrderMessage.TERM);

// FI fields
Tag pricePercentageFI = msg

.getTag(CurrentOrderMessage.ASSIGNED_EFFECTIVE_AMOUNT);

log.debug("Market=" +
market.getValue().toString());
log.debug("Bid/Offer=" +
bidOffer.getValue());
log.debug("Code=" +
code.getValue().toString());
log.debug("Operation flag=" +
operationFlag.getValue().toString());

Market mkt =
markets.get(market.getStringValue());
// Market not yet received
// but orders on the same yes...
// create the market
if (mkt == null) {
mkt = new Market();
markets.put(mkt.getCode(), mkt);
}

Order.Side side = null;


if
(bidOffer.getValue().toString().charAt(0) == 'O') {
side = Order.Side.OFFER;
} else if
(bidOffer.getValue().toString().charAt(0) == 'D') {
side = Order.Side.BID;
}

Order = new Order(mkt, side,


code.getStringValue(),
price.getDoubleValue(), amount
!= null ? amount.getDoubleValue() : zero_var,
totalAmount != null ?
totalAmount.getDoubleValue()
: amount != null
? amount.getDoubleValue() : zero_var);

if (matDate != null) {
try {

order.setMaturityDate(DatatecFields.DATATEC_DATE_FORMAT

.parse(matDate.getStringValue()));
} catch (Exception e) {
log.error("Error", e);
}
}

if (institutionCode != null) {

order.setInstitutionCode(institutionCode.getStringValue(
));
}
if (days != null) {

order.setDays(days.getIntegerValue());
}
if (valueDateCDBCR != null) {

order.setValueDateCDBCR(valueDateCDBCR.getIntegerValue()
);
}
if (yieldCDBCR != null) {

order.setYieldCDBCR(yieldCDBCR.getDoubleValue());
}
if (pricePercentageFI != null) {

order.setPricePercentageFI(pricePercentageFI.getDoubleVa
lue());
}

switch
(operationFlag.getValue().toString().charAt(0)) {
case 'I':
case 'M':
mkt.updateOrder(order);
break;
case 'B':
mkt.removeOrder(order);
break;
}

order.setMessage(msg);

for (MessageListener ml : listeners) {

ml.processCurrentOrderDataReceived(mkt, order);
}
}catch (Exception e) {
log.error("Error", e);
}

}
protected void receivePricesAmountsTradedData(Message msg) { Metodos que permite
recibir precios de los montos
Tag operationFlag = msg
de datos negociados, así
.getTag(PricesAmountsTradedMessage.OPERATION_FLAG); como agregar los valores a los
tag correspondente a cada
Tag time =
campo y realizar la validación
msg.getTag(PricesAmountsTradedMessage.TIME);
Tag date = de contenido de cada campo
msg.getTag(PricesAmountsTradedMessage.DATE); asignado.
Tag orderCode =
msg.getTag(PricesAmountsTradedMessage.ORDER_CODE);
Tag market =
msg.getTag(PricesAmountsTradedMessage.MARKET);
Tag bidOffer =
msg.getTag(PricesAmountsTradedMessage.BID_OFFER);
Tag valueDate =
msg.getTag(PricesAmountsTradedMessage.VALUE_DATE);
Tag deliveryDate =
msg.getTag(PricesAmountsTradedMessage.DELIVERY_DATE);
Tag days =
msg.getTag(PricesAmountsTradedMessage.DAYS);
Tag physicalCompensationFlag = msg

.getTag(PricesAmountsTradedMessage.PHYSICAL_COMPENSATION
_FLAG);
Tag bondIdentifier = msg

.getTag(PricesAmountsTradedMessage.BOND_IDENTIFIER);
Tag price =
msg.getTag(PricesAmountsTradedMessage.PRICE);
Tag tradedNumber =
msg.getTag(PricesAmountsTradedMessage.TRADED_NUMBER);
Tag titleCode =
msg.getTag(PricesAmountsTradedMessage.TITLE_CODE);
Tag emitter =
msg.getTag(PricesAmountsTradedMessage.EMITTER);
Tag countryCode =
msg.getTag(PricesAmountsTradedMessage.COUNTRY_CODE);
Tag emitterCode =
msg.getTag(PricesAmountsTradedMessage.EMITTER_CODE);
Tag issueType =
msg.getTag(PricesAmountsTradedMessage.ISSUE_TYPE);
Tag currency =
msg.getTag(PricesAmountsTradedMessage.CURRENCY);
Tag interestRate =
msg.getTag(PricesAmountsTradedMessage.INTEREST_RATE);
Tag emissionDate =
msg.getTag(PricesAmountsTradedMessage.EMISSION_DATE);
Tag maturityDate =
msg.getTag(PricesAmountsTradedMessage.MATURITY_DATE);
Tag spotPrice =
msg.getTag(PricesAmountsTradedMessage.SPOT_PRICE);
Tag finalPrice =
msg.getTag(PricesAmountsTradedMessage.FINAL_PRICE);
Tag yieldRate =
msg.getTag(PricesAmountsTradedMessage.YIELD_RATE);
Tag effectiveMonthlyYieldRate = msg

.getTag(PricesAmountsTradedMessage.EFFECTIVE_MONTHLY_YIE
LD_RATE);
Tag orderCode1 =
msg.getTag(PricesAmountsTradedMessage.ORDER_CODE_1);
Tag titleName =
msg.getTag(PricesAmountsTradedMessage.TITLE_NAME);
Tag titleIdentifier = msg

.getTag(PricesAmountsTradedMessage.TITLE_IDENTIFIER);
Tag titleIdentifierAlternate = msg

.getTag(PricesAmountsTradedMessage.TITLE_IDENTIFIER_ALTE
RNATE);
Tag emitName =
msg.getTag(PricesAmountsTradedMessage.EMIT_NAME);
Tag emitNameShort = msg

.getTag(PricesAmountsTradedMessage.EMIT_NAME_SHORT);
Tag operationTicks = msg

.getTag(PricesAmountsTradedMessage.OPERATION_TICKS);
Tag registeredFlag = msg

.getTag(PricesAmountsTradedMessage.REGISTERED_FLAG);
Tag registerHour =
msg.getTag(PricesAmountsTradedMessage.REGISTER_HOUR);
Tag originFlag =
msg.getTag(PricesAmountsTradedMessage.ORIGIN_FLAG);

StatisticData data = new StatisticData();

try {
if (bidOffer != null) {
if
(bidOffer.getStringValue().charAt(0) == Order.Side.BID
.getCode()) {
data.setSide(Order.Side.BID);
} else {

data.setSide(Order.Side.OFFER);
}
}
if (bondIdentifier != null) {

data.setBondIdentifier(bondIdentifier.getStringValue());
}
if (countryCode != null) {

data.setCountryCode(countryCode.getStringValue());
}
if (currency != null) {

data.setCurrency(currency.getStringValue());
}
if (time != null && date != null) {

data.setDateTime(DATATEC_DATE_TIME_FORMAT.parse(date
.getStringValue() + "-"
+ time.getStringValue()));
}
if (days != null) {

data.setDays(days.getIntegerValue());
}
if (deliveryDate != null) {

data.setDeliveryDate(DatatecFields.DATATEC_DATE_FORMAT

.parse(deliveryDate.getStringValue()));
}
if (effectiveMonthlyYieldRate != null) {

data.setEffectiveMontlhyYieldRate(effectiveMonthlyYieldR
ate
.getDoubleValue());
}
if (emissionDate != null) {

data.setEmissionDate(DatatecFields.DATATEC_DATE_FORMAT

.parse(emissionDate.getStringValue()));
}
if (emitName != null) {

data.setEmitterName(emitName.getStringValue());
}
if (emitNameShort != null) {

data.setEmitterShortName(emitNameShort.getStringValue())
;
}
if (emitter != null) {

data.setEmitter(emitter.getStringValue());
}
if (emitterCode != null) {

data.setEmitterCode(emitterCode.getStringValue());
}
if (finalPrice != null) {

data.setFinalPrice(finalPrice.getDoubleValue());
}
if (issueType != null) {
switch
(issueType.getStringValue().charAt(0)) {
case '1':

data.setIssueType(Order.IssueType.WITHOUT_INTERESTS_OR_S
INGLE_INTEREST_PAYMENT);
break;
case '2':

data.setIssueType(Order.IssueType.SEVERAL_PAYMENTS_OF_IN
TEREST_OR_CAPITAL);
break;
case '3':

data.setIssueType(Order.IssueType.WITHOUT_INTERESTS_OR_M
ATURITY_DATE);
break;
}
}
if (interestRate != null) {

data.setInterestRate(interestRate.getDoubleValue());
}
if (maturityDate != null) {

data.setMaturityDate(DatatecFields.DATATEC_DATE_FORMAT

.parse(maturityDate.getStringValue()));
}
if (operationTicks != null) {

data.setOperationTicks(operationTicks.getLongValue());
}
if (orderCode != null) {

data.setOrderCode(orderCode.getStringValue());
}
if (orderCode1 != null) {

data.setOrderCode1(orderCode1.getStringValue());
}
if (originFlag != null) {
switch
(originFlag.getStringValue().charAt(0)) {
case 'H':

data.setOrigin(StatisticData.Origin.HYBRID);
break;
case 'V':

data.setOrigin(StatisticData.Origin.VOICE);
break;
case 'E':

data.setOrigin(StatisticData.Origin.ELECTRONIC);
break;
}
}
if (physicalCompensationFlag != null) {
switch
(physicalCompensationFlag.getStringValue().charAt(0)) {
case 'F':
data.setCompensation(Order.Compensation.PHYSICAL);
break;
case 'N':

data.setCompensation(Order.Compensation.NON_DELIVERY);
break;
case 'R':

data.setCompensation(Order.Compensation.REFERENCE);
break;
case 'I':

data.setCompensation(Order.Compensation.INDICATIVE);
break;
case 'D':

data.setCompensation(Order.Compensation.DEFERRED_WITHDRA
L);
break;
}
}

if (price != null) {

data.setPrice(price.getDoubleValue());
}
if (registerHour != null) {

data.setRegisterHour(DatatecFields.DATATEC_TIME_FORMAT

.parse(registerHour.getStringValue()));
}
if (registeredFlag != null) {
switch
(registeredFlag.getStringValue().charAt(0)) {
case 'D':

data.setRegisterFlag(StatisticData.RegisterFlag.DIRECT_D
OLLAR);
break;
case 'R':

data.setRegisterFlag(StatisticData.RegisterFlag.REGISTER
ED);
break;
case 'P':

data.setRegisterFlag(StatisticData.RegisterFlag.HIT);
break;
case 'G':

data.setRegisterFlag(StatisticData.RegisterFlag.GIVEN);
break;
case 'T':

data.setRegisterFlag(StatisticData.RegisterFlag.TAKEN);
break;
}
}
if (spotPrice != null) {

data.setSpotPrice(spotPrice.getDoubleValue());
}
if (titleCode != null) {

data.setTitleCode(titleCode.getStringValue());
}
if (titleIdentifier != null) {

data.setTitleIdentifier(titleIdentifier.getStringValue()
);
}
if (titleIdentifierAlternate != null) {

data.setTitleAlternateIdentifier(titleIdentifierAlternat
e
.getStringValue());
}
if (titleName != null) {

data.setTitleName(titleName.getStringValue());
}
if (tradedNumber != null) {

data.setTradedNumber(tradedNumber.getIntegerValue());
}
if (valueDate != null) {

data.setValueDate(valueDate.getIntegerValue());
}
if (yieldRate != null) {

data.setYieldRate(yieldRate.getDoubleValue());
}

data.setMessage(msg);

if (market != null) {

data.setMarket(markets.get(market.getStringValue()));
switch
(operationFlag.getValue().toString().charAt(0)) {
case 'I':
case 'M':

markets.get(market.getStringValue()).updateStatisticsDat
a(
data);
break;
case 'B':

markets.get(market.getStringValue()).removeStatisticsDat
a(
data);
break;
}
for (MessageListener ml : listeners)
{

ml.processPricesAmountsTradedDataReceived(

markets.get(market.getStringValue()), data);
}
}

} catch (Exception e) {
log.error("Error", e);
}
}

No se encuentra código malicioso

 Message.java: Clase java Message se define variables estáticas finales,


métodos y clase Properties como singleton.
public final static String MSG_TYPE_FIX_SESSION_LOGON = "A";
public final static String MSG_TYPE_FIX_HEARTBEAT = "0";
Se definen variables de tipo final
public final static String MSG_TYPE_FIX_TEST_REQUEST = "1"; con asignación de valor
public final static String MSG_TYPE_EC_VI_INSTRUMENT = "M610";
public final static String MSG_TYPE_LOGON = "M611";
constantes
public final static String MSG_TYPE_LOGON_DENIED = "M612";
public final static String MSG_TYPE_LOGON_ACCEPTED = "M613";
public final static String MSG_TYPE_LOG_REQUEST = "M614";
public final static String MSG_TYPE_CONNECTION_STATUS = "M615";
public final static String MSG_TYPE_PASSWORD_CHANGE_REQUEST = "M616";
public final static String MSG_TYPE_LOGOFF = "M617";
public final static String MSG_TYPE_ALLOWED_MARKET = "M618";
public final static String MSG_TYPE_MX_RF_INSTRUMENT = "M619";
public final static String MSG_TYPE_TRANSACTION_ORDER = "M621";
public final static String MSG_TYPE_CURRENT_ORDER = "M622";
public final static String MSG_TYPE_PRICES_AMOUNTS_TRADED = "M623";

public static String SENDER_COMP_ID = "_CFX";


public static String TARGET_COMP_ID = "_DFX";
public final static DateFormat SENDING_TIME_FORMAT = new
SimpleDateFormat("yyyyMMdd-HH:mm:ss.SSS");
public final static NumberFormat CHECKSUM_FORMAT = new
DecimalFormat("000");
private static Logger log = Logger.getLogger(Message.class.getName());
Variable que permite almacenar
un log de mensaje
static { Define un registro de mensajes,
Properties defaultProperties = new Properties();
así mismo se delcara una clase de
try {
File f = new File(Market.class.getProtectionDomain() propiedad, en esta clase se carga
.getCodeSource().getLocation().getPath()); el archivo de configuración que
String runningPath = f.getParent(); contiene los parámetros de
log.debug("Running in: " + runningPath);
conexión, así mismo obtiene los
File propFile = new File("conf/cfix.properties");
log.debug("Reading file from: " + valores de las variables
propFile.getAbsoluteFile()); sendercompid y targetcompid,
FileInputStream fis = new FileInputStream( así mismo genera un impresión
propFile.getAbsoluteFile());
de error por la consola en caso
defaultProperties.load(fis);
SENDER_COMP_ID = hubiera un error en esta clase
defaultProperties.getProperty("sendercompid");
TARGET_COMP_ID =
defaultProperties.getProperty("targetcompid");
fis.close();
} catch (Exception e) {
log.error("Error", e);
}
}
private final static Tag beginString = new Se define una variable privada
Tag(Tag.BEGIN_STRING,
estatica final que devuelve una
"BeginString", "FIX.4.4", true);
estructura de tipo tag
private Tag bodyLength; Se define la estructura de los
private Tag checkSum;
campos de tipo tag
private Tag msgType;
private Tag msgSeqNumber;
private Tag senderCompId;
private Tag sendingTime;
private Tag targetCompId;
public Tag removeTag(int number) { Método que permite remover un
return tags.remove(number);
campo de la estructura de tipo
}
tag para ello se recibe como un
argumento un numero de tipo
entero
public void addTag(int number, Object value) { Método que permite agregar un
if (value != null) {
campo de la estructura de tipo
addTag(new Tag(number, value));
} tag para ello se recibe como un
} argumento un numero de tipo
entero y un objeto
public void addTag(Tag tag) { Método para agregar a la
estructura tag
switch (tag.getNumber()) {
case Tag.BEGIN_STRING:
// beginString = tag;
return;
case Tag.BODY_LENGTH:
bodyLength = tag;
return;
case Tag.CHECK_SUM:
checkSum = tag;
return;
case Tag.MSG_TYPE:
msgType = tag;
return;
case Tag.MSG_SEQ_NUM:
msgSeqNumber = tag;
return;
case Tag.SENDER_COMP_ID:
senderCompId = tag;
return;
case Tag.SENDING_TIME:
//sendingTime = tag;
sendingTime.setValue(tag.getValue());
return;
case Tag.TARGET_COMP_ID:
targetCompId = tag;
return;
}
if (tags.containsKey(tag.getNumber())) {
Tag t = tags.get(tag.getNumber());
if (t.getValueFormat() != null) {
try {
if (tag.getValue()
instanceof String) {
Object o =
t.getValueFormat().parseObject(

tag.getValue().toString());
t.setValue(o);
} else {

t.setValue(tag.getValue());
}
return;
} catch (ParseException e) {
log.error(e);
tags.put(tag);
}
} else {

(tags.get(tag.getNumber())).setValue(tag.getValue());
}
} else {
tags.put(tag);
}
}
public String assemble() { Método que permite armar una
cadena de mensaje deacuerdo a
String message = beginString.toString();
los parámetros que requiere la
StringBuilder str = new StringBuilder(); estructura.
str.append(msgType.toString());
str.append(msgSeqNumber.toString());
str.append(senderCompId.toString());
str.append(sendingTime.toString());
str.append(targetCompId.toString());

for (Tag t : tags.values()) {


str.append(t);
}

bodyLength.setValue(str.length());

message += bodyLength.toString() + str;

int sum = 0;
byte[] bytes = message.getBytes();

for (int i = 0; i < bytes.length; i++) {


sum += bytes[i];
}
sum = sum % 256;
checkSum.setValue(sum);

message = message + checkSum.toString();


return message;
}
public String toString() { Método que permite armar una
cadena con valores de tags y los
StringBuilder str = new StringBuilder();
str.append(beginString); parámetros del método cadena
str.append(bodyLength); para retornar un mensaje de
str.append(msgType.toString()); cadena consolidada
str.append(msgSeqNumber.toString());
str.append(senderCompId.toString());
str.append(sendingTime.toString());
str.append(targetCompId.toString());
for (Tag t : tags.values()) {
str.append(t);
}
str.append(checkSum);
return str.toString();
}
public Tag getTag(int tagNumber) { Obtiene los valores de la
estructura tag cargada esta es
switch (tagNumber) {
case Tag.BEGIN_STRING: filtrado por el tagnumber
return beginString; recibido como parámetro para
case Tag.BODY_LENGTH: devolver un campo de la
return bodyLength;
estructura según sea el caso a
case Tag.CHECK_SUM:
return checkSum; devolver como dato
case Tag.MSG_SEQ_NUM:
return msgSeqNumber;
case Tag.MSG_TYPE:
return msgType;
case Tag.SENDER_COMP_ID:
return senderCompId;
case Tag.SENDING_TIME:
return sendingTime;
case Tag.TARGET_COMP_ID:
return targetCompId;
default:
return tags.get(tagNumber);
}

No se encuentra código malicioso

 Tag.java: Clase java Tag se define variables estáticas finales, métodos get y
set, así como métodos para cálculos.
private static Logger log = Crea una variable estatica para almacenar
Logger.getLogger(Tag.class.getName());
datos de registros
public final static int BEGIN_STRING = 8; Declara varaiabes estáticas finales en la cual
public final static int BODY_LENGTH = 9;
se le asignan variabkes con valores
public final static int CHECK_SUM = 10;
public final static int MSG_TYPE = 35; constantes
public final static int MSG_SEQ_NUM = 34;
public final static int SENDER_COMP_ID = 49;
public final static int SENDING_TIME = 52;
public final static int TARGET_COMP_ID = 56;
public final static int ENCRYPT_METHOD = 98;
public final static int HEART_BT_INT = 108;
public final static int MESSAGE_ID = 19100;
public final static char DELIMITER = 1;
private int number; Se declaran las Variables privadas para
private Object value;
generales los métodos get y set
private Format valueFormat;
private String comment;
private String fieldName;
private boolean required;
private String asString;
public static Tag fromString(String keyValuePair) Metodo estatico que devuelve una
{
estructura de tipo tag, recibiendo como
int idx = keyValuePair.indexOf('='); argumento un key para el valor de pago
if (idx < 0) {
throw new IllegalArgumentException(
"Key/Value pair must be separated by '=' [" +
keyValuePair
+ "]");
}
String numberParam = keyValuePair.substring(0,
idx);
try {
int number = new Integer(numberParam);
Object value = keyValuePair.substring(idx + 1,
keyValuePair.length());
return new Tag(number, value);
} catch (Exception e) {
throw new
IllegalArgumentException(
"The left side
must be a number [" + numberParam + "]");
}
}
public Tag(int number, Object value) { Constructor Tag que permite recibir
this(number, null, value, false, null);
parámetro y objetos que forman parte de la
}
estructura tag.
public Tag(int number, String fieldName, Object
value, boolean required) {
this(number, fieldName, value, required,
null);
}
public Tag(int number, String fieldName, Object
value, boolean required,
Format valueFormat) {

this.number = number;
this.fieldName = fieldName;
this.required = required;
this.valueFormat = valueFormat;
setValue(value);
}
public String getComment() { Método get y set declarados para la
variable Comment
return comment;
}
public void setComment(String comment) {

this.comment = comment;
}
public Object getValue() { Método get y set declarados para la
variable value
return value;
}
public void setComment(String comment) {

this.comment = comment;
}
public void setFieldName(String fieldName) { Método get y set declarados para la
variable FieldName
this.fieldName = fieldName;
}
public void setFieldName(String fieldName) {

this.fieldName = fieldName;
}
public void setRequired(boolean required) { Método get y set declarados para la
variable Required
this.required = required;
}
public boolean isRequired() {

return required;
}
public String toString() { Método get y set declarados para la
variable toString
return asString;
}
public Format getValueFormat() { Método get y set declarados para la
variable ValueFormat
return valueFormat;
}
protected Object clone() throws Método que permite copiar los valores de
CloneNotSupportedException {
una estructura tag y los almacena en un
Tag newTag = new Tag(number, objeto
fieldName, value, required, valueFormat);
return newTag;
}
Método get declarados para la variable
public Integer getIntegerValue() {
IntegerValue
if (value != null) {
try {
Integer i = new
Integer(value.toString());
return i;
} catch (Exception e) {
log.error("Error", e);
}
}
return null;
}
public String getStringValue() { Método get declarados para la variable
StringValue
if (value != null) {
return value.toString();
}
return null;
}
public Long getLongValue(){ Método get declarados para la variable
if (value != null) {
StringValue
try {
Long i = new
Long(value.toString());
return i;
} catch (Exception e) {
log.error("Error", e);
}
}
return null;
}
public Double getDoubleValue() { Método get declarados para la variable
DoubleValue
if (value != null) {
try {
Double i = new
Double(value.toString());
return i;
} catch (Exception e) {
log.error("Error", e);
}
}
return null;
}
public String getFieldName() { Método get declarados para la variable
FieldName
return fieldName;
}
public int getLength() { Método get declarados para la variable
Length
return asString.length();
}

public int getNumber() { Método get declarados para la variable


Length
return number;
}
public boolean isRequired() { Método get declarados para la variable
isRequired
return required;
}
public void setComment(String comment) { Método set declarados para la variable
Comment
this.comment = comment;
}
public void setValue(Object value) { Método set declarados para la variable
Value
this.value = value;
if (valueFormat != null && !(value
instanceof String)) {
asString = number
+ "="
+ (valueFormat !=
null && value != null ? valueFormat

.format(value) : value) + DELIMITER;


} else {
asString = number + "=" + value
+ DELIMITER;
}
}
public void setFieldName(String fieldName) { Método set declarados para la variable
FieldName
this.fieldName = fieldName;
}
public void setRequired(boolean required) { Método set declarados para la variable
Required
this.required = required;
}
public String toString() { Método set declarados para la variable
toString
return asString;
}
public Format getValueFormat() { Método get declarados para la variable
ValueFormat
return valueFormat;
}
protected Object clone() throws Método declarados para clonar la
CloneNotSupportedException {
estructura del método tag
Tag newTag = new Tag(number,
fieldName, value, required, valueFormat);
return newTag;
}

No se encuentra código malicioso

4. com.datatec.fix.ec

 ECVI_Instrument.java: Clase java ECVI_Instrument se define variables


privadas para generarles los métodos get y set.
private boolean active; Se declara variables de tipo cadena y lógico
private String type;
Que almacena un flag, un tipo y un nombre
private String name;
public boolean isActive() { Se declara el método get y set para la
return active;
variable lógica active
}
public void setActive(boolean active) {
this.active = active;
}
public String getType() { Se declara el método get y set para la
return type;
variable de cadena tipo
}
public void setType(String type) {
this.type = type;
}
public String getName() { Se declara el método get y set para la
return name;
variable de cadena nombre
}
public void setName(String name) {
this.name = name;
}
No se encuentra código malicioso

 ECVI_InstrumentMessage.java: Clase java ECVI_InstrumentMessage se


define variables privadas para generarles los métodos get y set.
public final static int OPERATION_FLAG = 20000;
public final static int SHARE_CODE = 22620;
Se definen variables de tipo final con
public final static int PRICE_PICTURE_STRING = 24520; asignación de valor constantes
public final static int AMOUNT_PICTURE_STRING = 24530;
public final static int SHARE_SHORT_NAME = 26800;
public final static int SHARE_FULL_NAME = 26802;
public final static int SHARE_NOMINAL_VALUE = 21590;
public final static int ORDER_UNITS = 26804;
public final static int LIQUIDITY_FLAG = 26806;
public final static int MAXIMUM_LOT = 21600;
public final static int DEAL_AT_TERM_FLAG = 26808;
public final static int CODE_BVG = 26810;
public final static int CODE_BVQ = 26812;
public final static int LOWER_RANK = 26814;
public final static int MIDDLE_RANK = 26816;
public final static int UPPER_RANK = 26818;
public final static int SUSPENDED_FLAG = 22630;
public final static int SUSPENSION_PRICE = 26820;
public final static int SUSPENSION_HOUR = 26822;
public final static int SUSPENSION_MARKET = 26824;
public final static int SUSPENSION_ROUND = 26826;
public final static int LAST_TRADE_DATE = 26832;
public final static int LAST_TRADE_HOUR = 26834;
public final static int LAST_TRADE_PRICE = 26836;
public final static int LAST_TRADE_NUMBER = 26838;
public final static int LAST_TRADE_TENDENCY = 26840;
public final static int LAST_TRADE_DATE_TIME = 26842;
public final static int PREVIOUS_DAY_BVG_PRICE = 26844;
public final static int PREVIOUS_DAY_PRICE_VARIATION = 26846;
public final static int PREVIOUS_MONTH_PRICE = 26848;
public final static int PREVIOUS_MONTH_PRICE_VARIATION = 26850;
public final static int LAST_PRICE_FOR_RANKS = 26852;
public final static int BEST_BID_PRICE = 26854;
public final static int BEST_OFFER_PRICE = 26856;
public final static int BEST_BID_VOLUME = 26858;
public final static int BEST_OFFER_VOLUME = 26860;
public final static int ACTIVE_FLAG = 26862;
public final static int EMITTER = 21420;
public final static int COUNTRY_CODE = 21430;
public final static int EMITTER_CODE = 21440;
public final static int REGISTERED_FLAG = 26864;
public final static int CURRENCY = 21570;
public final static int PRICE_SCALE = 22650;
public final static int REPORTO_FLAG = 26868;
public final static int MARKS_PRICE_FLAG = 26870;
public final static int INSTRUMENT_TYPE = 26872;
public final static int MAXIMUM_MARKET_COLLOCATION_DATE =
26874;
public final static int EMITTER_NAME = 25740;
public final static int EMITTER_SHORT_NAME = 25750;
public final static int EMITTER_MIX_FLAG = 25760;
public final static int EMISSION_INSTRUMENT_TYPE = 25770;
public final static int EMITTER_CLASSIFICATION = 25780;
public final static int EMITTER_RISK_QUALIFICATION_DATE =
25790;
public final static int EMITTER_RISK_QUALIFICATION_INSTITUTION
= 25800;
public ECVI_InstrumentMessage(String msgType) { Método que permite recibir una cadena de
super(MSG_TYPE_EC_VI_INSTRUMENT);
mensaje
}

No se encuentra código malicioso


 ECClientSession : Clase que recibe las transacciones de los datos de
Instrument, así como los parámetros de comunicación con el formulario
cliente.
private SortedMap<String, Instrument> Clase que define una interfaz que permite
viInstruments;
que los elementos dentro del conjunto de
la colección estén ordenados totalmente
public ECClientSession(String server, int port) { hace referencia a un constructor de la
super(server, port); clase padre enviando como parámetro
viInstruments = new TreeMap<String, el nombre del servidor y el puerto de
Instrument>();
}
comunicación, se define un interfaz
treemap para tener una implementación
en árbol y así tener un mapa ordenado
protected void receiveInstrumentData(Message msg) { Método que recibe los datos de las
transacciones del tipo instrument
ECVI_Instrument instrument = new ECVI_Instrument(); asignando a etiquetas tag para luego
Tag activeTag =
asignarlos a la entidad instrumentos.
msg.getTag(ECVI_InstrumentMessage.ACTIVE_FLAG);
if (activeTag != null &&
activeTag.getStringValue().charAt(0) == 'S') {
instrument.setActive(true);
}

Tag tag =
msg.getTag(ECVI_InstrumentMessage.SHARE_CODE);
instrument.setUniqueCode(tag != null ?
tag
.getStringValue() : null);
tag =
msg.getTag(ECVI_InstrumentMessage.CURRENCY);
instrument.setCurrency(tag != null ?
tag
.getStringValue() : null);
tag =
msg.getTag(ECVI_InstrumentMessage.SHARE_SHORT_NAME);
instrument.setName(tag != null ? tag
.getStringValue() : null);
tag =
msg.getTag(ECVI_InstrumentMessage.INSTRUMENT_TYPE);
instrument.setType(tag != null ? tag
.getStringValue() : null);
instrument.setMessage(msg);

Tag operationFlag =
msg.getTag(ECVI_InstrumentMessage.OPERATION_FLAG);
switch
(operationFlag.getValue().toString().charAt(0)) {
case 'I':
case 'M':

viInstruments.put(instrument.getUniqueCode(),
instrument);
break;
case 'B':
viInstruments.remove(instrument.getUniqueCode
());
break;
}

for (MessageListener ml : listeners) {

ml.processInstrumentDataReceived(viInstrument
s, instrument);
}

protected void receiveTransactionOrderData(Message Metodo que recibe los datos de las


msg) { órdenes de transacciones así como los
valores que se procesan en el mercado
Tag marketTag =
msg.getTag(TransactionOrderMessage.MARKET);
como el precio, el interés, rendimiento,
etc.
if (marketTag == null) { Asignando a entidades y validándolo de
return; acuerdo al flag del valor de la operación.
}

Market market =
markets.get(marketTag.getStringValue());
if (market == null) {
return;
}

TransactionOrderData ecTOD = new


TransactionOrderData();
ecTOD.setMarket(market);

ecTOD.setCode(msg.getTag(TransactionOrderMess
age.TRADE_UNIQUE_CODE)
.getStringValue());

Tag shareCode =
msg.getTag(TransactionOrderMessage.SHARE_CODE
);
ecTOD.setAcc(shareCode != null ?
shareCode.getStringValue() : null);

ecTOD.setType(msg.getTag(TransactionOrderMess
age.TITLE_IDENTIFIER)
.getStringValue());

Tag price =
msg.getTag(TransactionOrderMessage.PRICE);
ecTOD.setPrice(price != null ?
price.getDoubleValue() : 0);

ecTOD.setTradedNumber(msg.getTag(TransactionO
rderMessage.TRADED_NUMBER)
.getIntegerValue());

Tag shareShortName = msg


.getTag(TransactionOrderMessage.SHARE_SHORT_N
AME_BVG);
ecTOD.setShareName(shareShortName !=
null ? shareShortName
.getStringValue() : null);

ecTOD.setDate(msg.getTag(TransactionOrderMess
age.DATE).getStringValue());
ecTOD.setOperationTime(msg.getTag(

TransactionOrderMessage.OPERATION_TIME).getSt
ringValue());

Tag valueDate =
msg.getTag(TransactionOrderMessage.VALUE_DATE);
ecTOD.setValueDate(valueDate != null ?
valueDate.getIntegerValue() : 0);

Tag bidOffer =
msg.getTag(TransactionOrderMessage.BID_OR_OFFER);

Tag issuerCode =
msg.getTag(TransactionOrderMessage.ISSUER_CODE);
ecTOD.setIssuerCode(issuerCode != null
? issuerCode.getStringValue()
: "");

Tag titleCode =
msg.getTag(TransactionOrderMessage.TITLE_CODE);
ecTOD.setTitleCode(titleCode != null ?
titleCode.getStringValue() : "");

Tag currency1c =
msg.getTag(TransactionOrderMessage.CURRENCY_1C);
ecTOD.setCurrency1c(currency1c != null
? currency1c.getStringValue()
: "");

Tag nominalValue =
msg.getTag(TransactionOrderMessage.NOMINAL_VALUE);
ecTOD.setNominalValue(nominalValue !=
null ? nominalValue
.getDoubleValue() : 0);

Tag interestRate =
msg.getTag(TransactionOrderMessage.INTEREST_RATE);
ecTOD.setInterestRate(interestRate !=
null ? interestRate
.getDoubleValue() : 0);

Tag days =
msg.getTag(TransactionOrderMessage.DAYS);
ecTOD.setDays(days != null ?
days.getIntegerValue() : 0);

Tag yield =
msg.getTag(TransactionOrderMessage.YIELD);
ecTOD.setYield(yield != null ?
yield.getDoubleValue() : 0);

Tag yieldRate =
msg.getTag(TransactionOrderMessage.YIELD_RATE);
ecTOD.setYieldRate(yieldRate != null ?
yieldRate.getDoubleValue() : 0);

Tag coupon =
msg.getTag(TransactionOrderMessage.COUPON);
if (coupon != null &&
coupon.getStringValue().charAt(0) == 'S') {
ecTOD.setCoupon(true);
}

if (bidOffer.getStringValue().charAt(0)
== 'O') {

ecTOD.setBuyerInstitutionCity(msg.getTag(

TransactionOrderMessage.ORDER_1_CITY_3C).getS
tringValue());

ecTOD.setBuyerInstitutionName(msg.getTag(

TransactionOrderMessage.ORDER_1_INSTITUTION_S
HORT_NAME)
.getStringValue());

ecTOD.setBuyerInstitutionUser(msg.getTag(

TransactionOrderMessage.ORDER_1_USER_NAME).ge
tStringValue());

ecTOD.setSellerInstitutionCity(msg.getTag(

TransactionOrderMessage.ORDER_CITY_3C).getStr
ingValue());

ecTOD.setSellerInstitutionName(msg.getTag(

TransactionOrderMessage.ORDER_INSTITUTION_SHO
RT_NAME)
.getStringValue());

ecTOD.setSellerInstitutionUser(msg.getTag(

TransactionOrderMessage.ORDER_USER_NAME).getS
tringValue());
} else {

ecTOD.setSellerInstitutionCity(msg.getTag(

TransactionOrderMessage.ORDER_1_CITY_3C).getS
tringValue());

ecTOD.setSellerInstitutionName(msg.getTag(
TransactionOrderMessage.ORDER_1_INSTITUTION_S
HORT_NAME)
.getStringValue());

ecTOD.setSellerInstitutionUser(msg.getTag(

TransactionOrderMessage.ORDER_1_USER_NAME).ge
tStringValue());

ecTOD.setBuyerInstitutionCity(msg.getTag(

TransactionOrderMessage.ORDER_CITY_3C).getStr
ingValue());

ecTOD.setBuyerInstitutionName(msg.getTag(

TransactionOrderMessage.ORDER_INSTITUTION_SHO
RT_NAME)
.getStringValue());

ecTOD.setBuyerInstitutionUser(msg.getTag(

TransactionOrderMessage.ORDER_USER_NAME).getS
tringValue());

ecTOD.setMessage(msg);

Tag operationFlag =
msg.getTag(TransactionOrderMessage.OPERATION_FLAG);

switch
(operationFlag.getStringValue().charAt(0)) {
case 'I':
case 'M':

market.getTransactionOrders().put(ecTOD.getCo
de(), ecTOD);
break;
case 'B':

market.getTransactionOrders().remove(ecTOD.ge
tCode());
}

for (MessageListener ml : listeners) {

ml.processTransactionOrderDataReceived(market
, ecTOD);
}
}

No se encuentra código malicioso


5. com.datatec.fix.gui

 ClientFrame.java: Clase java ClientFrame define atributos, propiedades que


se les asignaran a los objetos que se mostrara en la interfaz gráfica de
usuario (Formulario).
private ClientSession session; Define los objetos de tipo privado los
private JTextArea txaReceivedMessages;
cuales formaran parte de la interfaz
private DatatecFields;
private JLabel lblBranch; gráfica de usuario (Formulario)
private JLabel lblUser;
private JLabel lblPUCode;
private JLabel lblUserCode;
private JLabel lblLastStatus;
private JMenu mnuReceivedData;
private JMenu mnuMarkets;
private Map<String, MarketFrame> marketFrames;
private InstrumentsFrame frmInstruments;
private String runningPath;
private MessageTableModel modelMessages;
private JTable tblMessages;
private JScrollPane scrollPane;
private JMenuItem mnuInstruments;
private String marketGroup;
private final static String version = "2012-07-20"; Se define variables de tipo privada
private static Logger log =
las cuales almacenaran valores
Logger.getLogger(ClientFrame.class.getName());
private final static String SESSION_MX = "MX"; constantes
private final static String SESSION_EC = "EC";
public ClientFrame() { Define una interfaz Map la cual está
marketFrames = new HashMap<String, MarketFrame>();
basada en una tabla Hash, invoca al
createGUI();
} método createGUI
private void createGUI() { Crea la interfaz de usuario
(formulario), en este método se
setDefaultCloseOperation(DO_NOTHING_ON_CLOSE); define los componentes, atributos,
addWindowListener(new WindowAdapter() { propiedades que se contruiran para
mostrarse en el formulario.
public void windowClosing(WindowEvent
e) {

closeFrame();
}
});
setTitle("Datatec - FIX Client example - " +
version);

JMenuBar menuBar = new JMenuBar();

JMenuItem menuConnect = new


JMenuItem("Connect");
menuConnect.addActionListener(new
ActionListener() {

public void
actionPerformed(ActionEvent arg0) {

connect();
}
});

JMenuItem menuDisconnect = new


JMenuItem("Disconnect");
menuDisconnect.addActionListener(new
ActionListener() {

public void
actionPerformed(ActionEvent arg0) {

disconnect();
}
});

JMenu menuOptions = new JMenu("Options");


menuOptions.add(menuConnect);
menuOptions.add(menuDisconnect);

menuBar.add(menuOptions);

mnuReceivedData = new JMenu("Received


data");

mnuMarkets = new JMenu("Markets");


mnuReceivedData.add(mnuMarkets);

mnuInstruments = new
JMenuItem("Instruments");
mnuInstruments.addActionListener(new
ActionListener() {

public void
actionPerformed(ActionEvent arg0) {

showInstruments();
}

});
mnuReceivedData.add(mnuInstruments);

menuBar.add(mnuReceivedData);

setJMenuBar(menuBar);

txaReceivedMessages = new JTextArea();


txaReceivedMessages.setEditable(false);

modelMessages = new
MessageTableModel(MessageTableModel.Column.TIME,

MessageTableModel.Column.SEND_RECEIVE,

MessageTableModel.Column.SEQ_NUM,
MessageTableModel.Column.TYPE,
MessageTableModel.Column.DETAIL);
tblMessages = new
PrintableColorTable(modelMessages);
setColumnWidth(tblMessages.getColumnModel().getCol
umn(0), 80);

setColumnWidth(tblMessages.getColumnModel().getCol
umn(1), 30);

setColumnWidth(tblMessages.getColumnModel().getCol
umn(2), 40);

setColumnWidth(tblMessages.getColumnModel().getCol
umn(3), 40);
tblMessages.addMouseListener(new
MouseAdapter() {
public void mouseClicked(MouseEvent e)
{

if (e.getClickCount() == 2) {

showMessageForLine(tblMessages);
}
}
});

tblMessages.setAutoCreateRowSorter(true);

scrollPane = new JScrollPane(tblMessages);


scrollPane

.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_S
CROLLBAR_ALWAYS);
scrollPane

.setHorizontalScrollBarPolicy(JScrollPane.HORIZONT
AL_SCROLLBAR_ALWAYS);

setLayout(new BorderLayout());

JScrollPane txtScroll = new


JScrollPane(txaReceivedMessages);

JTabbedPane pane = new JTabbedPane();


pane.add("Log view", txtScroll);
pane.add("Table view", scrollPane);

add(pane, BorderLayout.CENTER);

lblBranch = new JLabel();


lblPUCode = new JLabel();
lblUser = new JLabel();
lblUserCode = new JLabel();
lblLastStatus = new JLabel();

JPanel tmp = new JPanel(new


GridBagLayout());
GridBagConstraints gbc = new
GridBagConstraints();
gbc.weightx = 1;
gbc.weighty = 1;
gbc.gridheight = 1;
gbc.gridwidth = 1;
gbc.gridx = 0;
gbc.gridy = 0;
gbc.insets = new Insets(1, 2, 2, 4);

gbc.anchor = GridBagConstraints.LINE_END;
tmp.add(new JLabel("Branch : "), gbc);
gbc.anchor = GridBagConstraints.LINE_START;
gbc.gridx++;
gbc.gridwidth = 2;
tmp.add(lblBranch, gbc);

gbc.anchor = GridBagConstraints.LINE_END;
gbc.gridwidth = 1;
tmp.add(new JLabel("User name : "), gbc);
gbc.anchor = GridBagConstraints.LINE_START;
gbc.gridwidth = 2;
gbc.gridx++;
tmp.add(lblUser, gbc);

gbc.gridx = 0;
gbc.gridy++;

gbc.anchor = GridBagConstraints.LINE_END;
gbc.gridwidth = 1;
tmp.add(new JLabel("PU code : "), gbc);
gbc.anchor = GridBagConstraints.LINE_START;
gbc.gridx++;
gbc.gridwidth = 2;
tmp.add(lblPUCode, gbc);

gbc.anchor = GridBagConstraints.LINE_END;
gbc.gridwidth = 1;
tmp.add(new JLabel("User code : "), gbc);
gbc.anchor = GridBagConstraints.LINE_START;
gbc.gridwidth = 2;
gbc.gridx++;
tmp.add(lblUserCode, gbc);

gbc.gridx = 0;
gbc.gridy++;

gbc.anchor = GridBagConstraints.LINE_END;
gbc.gridwidth = 1;
tmp.add(new JLabel("Details : "), gbc);
gbc.anchor = GridBagConstraints.LINE_START;
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.gridwidth =
GridBagConstraints.REMAINDER;
gbc.gridx = GridBagConstraints.RELATIVE;
tmp.add(lblLastStatus, gbc);

add(tmp, BorderLayout.SOUTH);

setSize(600, 300);

GraphicsEnvironment env =
GraphicsEnvironment
.getLocalGraphicsEnvironment();
Rectangle bounds =
env.getMaximumWindowBounds();
int py = (bounds.height -
this.getSize().height) / 2;
int px = (bounds.width -
this.getSize().width) / 2;
setLocation(px, py);
}
private void disconnect() { Metodo que permite la desconexión
if (session != null &&
de cliente datatec y cerrar el medio
session.isConnected()) {
try { de comunicación caso contrario
session.close(); enviara un mensaje de error por la
} catch (Exception e) { consola.
log.error("Error - ", e);
}
}
}
private void saveUserPreferences(Properties Metodo que permite almacenar los
userPreferences)
parámetros de configuración que se
throws Exception {
encuentran en los archivos de
// Method 1 configuración , así mismo valida si se
// URL url = encuentra creado el archivo o no
getClass().getResource("/cfix.properties");
caso contrario crea un archivo de
// log.info("Archivo de configuración: " +
url); configuración nuevo
// File f = new File(url.toURI());
// if (!f.exists()) {
// f.createNewFile();
// }
// OutputStream os = new
FileOutputStream(f);
// userPreferences.store(os,
// "#Datatec FIX client
example\n#Configuration file");

// Method 2
// File propFile = new File(runningPath +
"conf/cfix.properties");
// relative path
File propFile = new
File("conf/cfix.properties");
if (!propFile.exists()) {
propFile.createNewFile();
}
log.debug("Saving file to: " + propFile);
OutputStream os = new
FileOutputStream(propFile.getAbsoluteFile());
userPreferences.store(os,
"#Datatec FIX client
example\n#Configuration file");
}
private Properties loadUserPreferences() { Metodo que permite cargar los
valores de los parámetros
Properties defaultProperties = new
Properties(); almacenados en el archivo de
try { configuración para mostrarlo en el
formulario de configuración.
// Method 1
// InputStream is =
//
getClass().getResourceAsStream("/cfix.properties");
// defaultProperties.load(is);
// is.close();

// Method 2
File f = new
File(ClientFrame.class.getProtectionDomain()

.getCodeSource().getLocation().getPath());
runningPath = f.getParent();
log.debug("Running in: " +
runningPath);
// relative path
File propFile = new
File("conf/cfix.properties");

log.debug("Reading file from: " +


propFile.getAbsoluteFile());
FileInputStream fis = new
FileInputStream(

propFile.getAbsoluteFile());
defaultProperties.load(fis);
return defaultProperties;
} catch (Exception e) {

log.error("Error", e);
}

return null;
}

private void connect() { Metodo que permite realizar la


comunicación entre el formulario
Properties userPreferences =
loadUserPreferences(); cliente con datatec enviando los
ConnectionSettingsDialog csd = new parámetros cargados en el
ConnectionSettingsDialog( formulario de comicacion abriendo
userPreferences);
una comunicación con el puerto y el
Point p = getLocation(); servidor definido
Dimension d1 = getSize();
Dimension d2 = csd.getSize();

p.x = p.x + (d1.width - d2.width) / 2;


p.y = p.y + (d1.height - d2.height) / 2;

csd.setLocation(p);

csd.setVisible(true);
if (csd.getOption() ==
AbstractDialog.Option.OK) {

int port = csd.getPort();


marketGroup =
userPreferences.getProperty("session");
if (port > 0) {
try {

if
(SESSION_MX.equals(marketGroup)) {

session = new
MXClientSession(csd.getServer(), port);

mnuInstruments.setText("Instruments & Orders");


frmInstruments =
new MXInstrumentsFrame();

} else if
(SESSION_EC.equals(marketGroup)) {

session = new
ECClientSession(csd.getServer(), port);
frmInstruments =
new ECInstrumentsFrame();

} else {

session = new
DefaultClientSession(csd.getServer(),

port);

mnuInstruments.setEnabled(false);
}

session.getDatatecFields().setMarketGroup(

userPreferences.getProperty("session"));

userPreferences.setProperty("server",
csd.getServer());

userPreferences.setProperty("port", "" +
csd.getPort());

userPreferences.setProperty("user",
csd.getUser());

userPreferences.setProperty("branch",
csd.getBranch());

userPreferences.setProperty("language",
csd.getLanguage());

userPreferences.setProperty("password",
csd.getPassword());

saveUserPreferences(userPreferences);

session.addMessageListener(this);
datatecFields =
session.getDatatecFields();
session.open();

datatecFields.setBranch(csd.getBranch());

datatecFields.setUserName(csd.getUser());

datatecFields.setPassword(csd.getPassword());

session.setLanguage(csd.getLanguage());

if
(session.isConnected()) {

session.startFixSession();
if
(SESSION_MX.equals(marketGroup)) {

((MXInstrumentsFrame) frmInstruments)

.setFixSession(session);
}
}

} catch (Exception e) {
log.error("Error - ", e);
}
} else {

JOptionPane.showMessageDialog(this, "Invalid port


number",
"Error",
JOptionPane.ERROR_MESSAGE);
}
}
}
private void closeFrame() { Método que permite cerrar y liberar
la comunicación entre el cliente y
disconnect();
dispose(); datatec.
System.exit(0);
}
public void processReceivedMessage(Message Método que procesa un mensaje
message) {
recibido y los agrega a la estructura
String msgType = de mensajes
message.getTag(Tag.MSG_TYPE).getValue().toString();

txaReceivedMessages.append(MessageTableModel.MESSA
GE_TIME
.format(new Date())
+ "\tReceived message
msgType=["
+ msgType
+ "]\n" + message.toString() +
"\n");
txaReceivedMessages.setCaretPosition(txaReceivedMe
ssages.getDocument()
.getLength());

modelMessages.addReceivedMessage(message);
Rectangle r =
tblMessages.getCellRect(tblMessages.getRowCount() - 1,
tblMessages.getColumnCount(),
true);
r.height += 20;
tblMessages.scrollRectToVisible(r);

public void processSentMessage(Message message) { Método que procesa un mensaje


enviado y los agrega a la estructura
String msgType =
message.getTag(Tag.MSG_TYPE).getValue().toString(); de mensajes

txaReceivedMessages.append(MessageTableModel.MESSA
GE_TIME
.format(new Date())
+ "\tSent message msgType=["
+ msgType
+ "]\n" + message.toString() +
"\n");

txaReceivedMessages.setCaretPosition(txaReceivedMe
ssages.getDocument()
.getLength());

modelMessages.addSentMessage(message);
Rectangle r =
tblMessages.getCellRect(modelMessages.getRowCount() - 1,
modelMessages.getColumnCount(),
true);
r.height += 20;
tblMessages.scrollRectToVisible(r);
}
public void processCurrentOrderDataReceived(Instrument Metodo que procesa los datos de
instrument,
ordenes actuales
Order order) {

if (instrument != null) {
if (marketGroup.equals(SESSION_MX)) {
((MXInstrumentsFrame)
frmInstruments)

.refresh((MXInstrument) instrument);
}
}
}
public void processInstrumentDataReceived( Método que recibe una interfaz
SortedMap<String, Instrument>
SortedMap de tipo instrumento y
instruments, Instrument instrument) {
una estructura instrumento para
frmInstruments.setInstruments(new asignarlo al formulario instrument
ArrayList<Instrument>(instruments
.values()));

}
public void processMarketDataReceived(Map<String, Market> Metodo que recibe y procesa los
markets,
datos del mercado, así mismo
Market market) {
mostrar el menú de la opción
// Market frames mercado (Market)
if (market.getType() !=
Market.Type.UNDEFINED
&&
!marketFrames.containsKey(market.getCode())) {
MarketFrame mktFrame = new
MarketFrame(market);
marketFrames.put(market.getCode(),
mktFrame);
}

mnuMarkets.removeAll();

List<Market> sortedMarkets = new


ArrayList<Market>(markets.values());
Collections.sort(sortedMarkets,
MarketNameComparator.instance);

for (final Market m : sortedMarkets) {

// Market menus
JMenuItem tmp = new
JMenuItem(m.getFullName());
if (m.getAccess() ==
Market.Access.FORBIDDEN) {
tmp.setEnabled(false);
}
tmp.addActionListener(new
ActionListener() {

public void
actionPerformed(ActionEvent arg0) {

showMarket(m.getCode());
}
});
mnuMarkets.add(tmp);
}
}
private void showMarket(String mktCode) { Método que permite mostrar los
valores referente al código del
Market mkt =
session.getMarkets().get(mktCode); mercado
if (mkt != null) {

DatatecFrame marketFrame =
marketFrames.get(mktCode);

if (marketFrame != null) {
if (!marketFrame.isVisible()) {
Point p =
this.getLocation();
int pX = p.x + 30;
if (pX +
marketFrame.getSize().width >= 1024) {
pX = (1024 -
marketFrame.getSize().width) / 2;
}

marketFrame.setLocation(pX, p.y + 30);


}
marketFrame.setVisible(true);

} else {

StringBuffer str = new


StringBuffer();
str.append("Code : " +
mkt.getCode());
str.append("\nGroup : " +
mkt.getGroup());
str.append("\nFull name : " +
mkt.getFullName());
str.append("\nShort name : " +
mkt.getShortName());
str.append("\nAccess : " +
mkt.getAccess().name());

JOptionPane.showMessageDialog(this,
"No market window
available for\n" + str.toString(),
mkt.getFullName(),
JOptionPane.WARNING_MESSAGE);
}
}
}
public void processLogonAccepted(String branch, String Método que pemite asignar valores
user, String puCode,
a los objetos cuando el logeo es
String userCode) {
aceptado
lblBranch.setText(branch);
lblUser.setText(user);
lblPUCode.setText(puCode);
lblUserCode.setText(userCode);
String detail = "Logon accepted";
lblLastStatus.setText(detail);

}
public void processLogonDenied(String branch, String Método que pemite asignar valores
user, String flag,
a los objetos cuando el logeo es
String reason) {
denegado
lblBranch.setText(branch);
lblUser.setText(user);
lblPUCode.setText("");
lblUserCode.setText("");
String detail = flag + " - " + reason;
lblLastStatus.setText(detail);

}
private static void createAndShowGUI() { Método que permite cargar la
interfaz gráfica de usuario
ClientFrame mainWindow = new ClientFrame();
mainWindow.setVisible(true);
}
public static void main(String[] args) { Define el método principal de la
clase y define la carga de la interfaz
Locale en = new Locale("en");
Locale.setDefault(en); grafica de usuario
JComponent.setDefaultLocale(en);

javax.swing.SwingUtilities.invokeLater(new
Runnable() {

public void run() {

createAndShowGUI();
}
});
}
public void processConnectionClosed() { Cierra todo tipo de conexión
aperturada
lblLastStatus.setText("Connection closed");
// instruments.clear();
frmInstruments.setInstruments(null);
}
public void processCurrentOrderDataReceived(Market Permite actualizar los valores
market, Order order) {
contenidos en el formulario
MarketFrame mktFrame =
marketFrames.get(market.getCode());

if (mktFrame != null) {
mktFrame.refresh(order);
}

}
public void processPricesAmountsTradedDataReceived(Market Método que permite procesar el
market,StatisticData statistics) {
precio del monto negociado y
MarketFrame mktFrame =
marketFrames.get(market.getCode()); refresca los datos de la entidad
if (mktFrame != null) { statistics
StatisticsFrame stFrame =
mktFrame.getStatisticsFrame();
stFrame.refresh(statistics);
}
}
private void setColumnWidth(TableColumn column, int Método que define los parámetros
width) {
con los que se configura las
column.setWidth(width); columnas de una Tabla
column.setPreferredWidth(width);
column.setMaxWidth(width);
column.setMinWidth(width);
}
public void processTransactionOrderDataReceived(Market Metodo que procesa las
market,TransactionOrderData toData) {
transacciones de las ordenes de
MarketFrame mktFrame =
marketFrames.get(market.getCode()); datos recibidas
if (mktFrame != null) {
mktFrame.refresh(market.getTransactionOrderData());
}
}

No se encuentra código malicioso

 ConnectionSettingsDialog: Clase que permite mostrar una interfaz gráfica


(Formulario) para realizar la comunicación con datatec.

private JTextField txtServer; Se define los objetos que se


private JTextField txtPort;
mostraran en el formulario de
private JTextField txtUser;
private JTextField txtBranch; conexión
private JTextField txtLanguage;
private JPasswordField txtPassword;
private JTextField txtSession;
public ConnectionSettingsDialog(Properties props) Metodo que permite crear el panel
{
de conexión asignado atributos de
super("Connection settings", true); configuración a los objetos del
panel así como también cargar de
txtServer = new JTextField(10); valores predeterminados para
txtPort = new JTextField(10);
realizar el proceso de comunicación
txtUser = new JTextField(10);
txtBranch = new JTextField(10); con datatec.
txtLanguage = new JTextField(10);
txtPassword = new JPasswordField(10);
txtSession = new JTextField(10);
txtSession.setEditable(false);

if (props != null) {

txtServer.setText(props.getProperty("server"));

txtPort.setText(props.getProperty("port"));

txtUser.setText(props.getProperty("user"));

txtBranch.setText(props.getProperty("branch"));

txtPassword.setText(props.getProperty("password"))
;

txtLanguage.setText(props.getProperty("language"))
;

txtSession.setText(props.getProperty("session"));
} else {
txtServer.setText("localhost");
txtPort.setText("5011");
txtUser.setText("BKMONEX1");
txtBranch.setText("MOXMMEXA");
txtLanguage.setText("2");
txtPassword.setText("datatec2");
}
JPanel tmp = new JPanel(new
GridBagLayout());
GridBagConstraints gbc = new
GridBagConstraints();
gbc.weightx = 1;
gbc.weighty = 1;
gbc.gridheight = 1;
gbc.gridwidth = 1;
gbc.gridx = 0;
gbc.gridy = 0;
gbc.insets = new Insets(1, 2, 2, 4);

gbc.anchor = GridBagConstraints.LINE_END;
tmp.add(new JLabel("DFIX server : "), gbc);
gbc.anchor = GridBagConstraints.LINE_START;
gbc.gridx = GridBagConstraints.RELATIVE;
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.gridwidth = 3;
tmp.add(txtServer, gbc);
gbc.fill = GridBagConstraints.NONE;
gbc.gridwidth = 1;

gbc.gridy++;
gbc.gridx = 0;
gbc.anchor = GridBagConstraints.LINE_END;
tmp.add(new JLabel("Port : "), gbc);
gbc.anchor = GridBagConstraints.LINE_START;
gbc.gridx = GridBagConstraints.RELATIVE;
gbc.gridwidth = 3;
gbc.fill = GridBagConstraints.HORIZONTAL;
tmp.add(txtPort, gbc);
gbc.fill = GridBagConstraints.NONE;
gbc.gridwidth = 1;

gbc.gridy++;
gbc.gridx = 0;
gbc.anchor = GridBagConstraints.LINE_END;
tmp.add(new JLabel("Branch : "), gbc);
gbc.anchor = GridBagConstraints.LINE_START;
gbc.gridx = GridBagConstraints.RELATIVE;
gbc.gridwidth = 3;
gbc.fill = GridBagConstraints.HORIZONTAL;
tmp.add(txtBranch, gbc);
gbc.fill = GridBagConstraints.NONE;
gbc.gridwidth = 1;

gbc.gridy++;
gbc.gridx = 0;
gbc.anchor = GridBagConstraints.LINE_END;
tmp.add(new JLabel("User : "), gbc);
gbc.anchor = GridBagConstraints.LINE_START;
gbc.gridx = GridBagConstraints.RELATIVE;
gbc.gridwidth = 3;
gbc.fill = GridBagConstraints.HORIZONTAL;
tmp.add(txtUser, gbc);
gbc.fill = GridBagConstraints.NONE;
gbc.gridwidth = 1;

gbc.gridy++;
gbc.gridx = 0;
gbc.anchor = GridBagConstraints.LINE_END;
tmp.add(new JLabel("Password : "), gbc);
gbc.anchor = GridBagConstraints.LINE_START;
gbc.gridx = GridBagConstraints.RELATIVE;
gbc.gridwidth = 3;
gbc.fill = GridBagConstraints.HORIZONTAL;
tmp.add(txtPassword, gbc);
gbc.fill = GridBagConstraints.NONE;
gbc.gridwidth = 1;

gbc.gridy++;
gbc.gridx = 0;
gbc.anchor = GridBagConstraints.LINE_END;
tmp.add(new JLabel("Language (EN=2, ES=1) :
"), gbc);
gbc.anchor = GridBagConstraints.LINE_START;
gbc.gridx = GridBagConstraints.RELATIVE;
gbc.gridwidth = 3;
gbc.fill = GridBagConstraints.HORIZONTAL;
tmp.add(txtLanguage, gbc);
gbc.fill = GridBagConstraints.NONE;
gbc.gridwidth = 1;

gbc.gridy++;
gbc.gridx = 0;
gbc.anchor = GridBagConstraints.LINE_END;
tmp.add(new JLabel("Session (Mkt. grp.) :
"), gbc);
gbc.anchor = GridBagConstraints.LINE_START;
gbc.gridx = GridBagConstraints.RELATIVE;
gbc.gridwidth = 3;
gbc.fill = GridBagConstraints.HORIZONTAL;
tmp.add(txtSession, gbc);
gbc.fill = GridBagConstraints.NONE;
gbc.gridwidth = 1;

add(tmp, BorderLayout.CENTER);
pack();
setResizable(false);
center();
}
public String getServer() { Metodos get y set que se definen a
las variables que intervendrán en el
return txtServer.getText();
} proceso de comunicación con el
cliente.
public int getPort() {

try {
return
Integer.parseInt(txtPort.getText());
} catch (Exception e) {
return 0;
}
}

public String getBranch() {

return txtBranch.getText();
}
public String getUser() {

return txtUser.getText();
}

public String getPassword() {

return new
String(txtPassword.getPassword());
}

public String getLanguage() {

return txtLanguage.getText();
}

No se encuentra código malicioso

 InstrumentDetailFrame: define métodos,atributos,eventos, propiedades de


formulario detalle de instrument, así como el de los objetos que
implementaran en el formulario
public InstrumentDetailFrame(Instrument instrument) { Metodo que permite definir las
propiedades, atributos, acciones
this.instrument = instrument;
y eventos que tendrar algunos
setTitle("Instrument - " + objetos que se mostraran en el
this.instrument.getUniqueCode()); formulario detalle de Instrument
GridBagConstraints gbc = new
GridBagConstraints();
gbc.weightx = 1;
gbc.weighty = 1;
gbc.gridheight = 1;
gbc.gridwidth = 1;
gbc.gridx = 0;
gbc.gridy = 0;
gbc.insets = new Insets(1, 2, 2, 4);

JPanel pnlTmp = new JPanel(new


GridBagLayout());
createGUI(pnlTmp, gbc);
add(pnlTmp, BorderLayout.CENTER);

JButton btnMessage = createMinButton(

"/toolbarButtonGraphics/general/SendMail16.gif",
"Message for this instrument",
23);
btnMessage.addActionListener(new
ActionListener() {

@Override
public void actionPerformed(ActionEvent
arg0) {
showInstrumentMessage();
}
});

JButton btnClose = new JButton("Ok");


btnClose.addActionListener(new ActionListener()
{

@Override
public void actionPerformed(ActionEvent
arg0) {

dispose();
}
});

JPanel pnlButtons = new JPanel(new


FlowLayout(FlowLayout.RIGHT));

pnlButtons.setBorder(BorderFactory.createMatteBorder(
1, 0, 0, 0,
Color.LIGHT_GRAY));

pnlButtons.add(btnMessage);
pnlButtons.add(btnClose);

pnlButtons.getInputMap(JComponent.WHEN_IN_FOCUSED_WIN
DOW).put(

KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0),
"escPressed");
pnlButtons.getActionMap().put("escPressed",
new AbstractAction("escPressed") {
public void
actionPerformed(ActionEvent actionEvent) {

dispose();
}
});

add(pnlButtons, BorderLayout.SOUTH);

pack();
}
protected void showInstrumentMessage() { Metodo que permite mostrar el
showMessage(instrument);
mensaje de la entidad
}
instrumento
protected abstract void createGUI(JPanel panel, Metodo que permite crear una
GridBagConstraints gbc);
interfaz gráfica de usuario
protected JTextField createTxtField(String text, int cols)
{ retornando el valor de un objeto
JTextField tmp = new JTextField(cols); JTextField
tmp.setEditable(false);
if (text != null) {
tmp.setText(text);
}
return tmp;
}
No se encuentra código malicioso

 InstrumentsFrame: Clase que contiene método que se extiende a un


JFrame (Objeto de tipo formulario)
public abstract class InstrumentsFrame extends JFrame { Metodo que asigna una lista de
tipo Instruments
public abstract void setInstruments(List<Instrument>
instruments);

No se encuentra código malicioso

 MarketFrame: Clase que permite construir el formulario market, se definen


variables estáticas, objetos, eventos, acciones y métodos.
private Market; Se declaran variables privadas de
private SimpleTableModel modelBids;
tipo estructuras (Market,
private SimpleTableModel modelOffers;
private SimpleTableModel modelTransactionOrders; modelBids, modelOffers,
private StatisticsFrame statisticsFrame; modelTransactionOrders,
statisticsFrame)
public MarketFrame(Market market) { Se construye el formulario market,
setMarket(market);
recibiendo el model de la entidad
setLayout(new BorderLayout());
JPanel pnlTop = new JPanel(new GridLayout(2, 1)); market, así mismo se definen
JToolBar toolBar = new JToolBar(); acciones, métodos, eventos,
JButton btnMessage = createMinButton( métodos, propiedades, atributos de
"/toolbarButtonGraphics/general/SendMail24.gif",
los objetos que intervienen en la
"Message for this market");
btnMessage.addActionListener(new ActionListener() { construcción de la interfaz gráfica
@Override de usuario.
public void actionPerformed(ActionEvent arg0) {
showMarketMessage();
}
});
JButton btnMarketDetails = createMinButton(
"/toolbarButtonGraphics/general/About24.gif",
"Details of this market");
btnMarketDetails.addActionListener(new ActionListener()
{

@Override
public void actionPerformed(ActionEvent arg0) {
showMarketInfo();
}
});

JButton btnPricesAmounts = createMinButton(

"/toolbarButtonGraphics/general/History24.gif",
"Prices & Amounts traded");
btnPricesAmounts.addActionListener(new
ActionListener() {

@Override
public void actionPerformed(ActionEvent arg0) {
showPricesAmountsTraded();
}
});
toolBar.add(btnMessage);
toolBar.add(btnMarketDetails);
toolBar.add(btnPricesAmounts);
toolBar.setFloatable(false);
if (market.getType() == Market.Type.EC_AUCTIONS
|| market.getType() == Market.Type.EC_FI
|| market.getType() == Market.Type.EC_VI) {
modelTransactionOrders = new TransactionOrderTableModel(
getColumns(market));
final JTable tblTO = new
PrintableColorTable(modelTransactionOrders);
tblTO.addMouseListener(new
MouseAdapter() {
public void mouseClicked(MouseEvent e) {

if (e.getClickCount() == 2) {
showMessageForLine(tblTO);
}
}
});
JScrollPane scrollPane = new JScrollPane(tblTO);
scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTIC
AL_SCROLLBAR_ALWAYS);
btnPricesAmounts.setEnabled(false);
add(toolBar, BorderLayout.NORTH);
add(scrollPane, BorderLayout.CENTER);
setSize(900, 250);
} else {
pnlTop.add(toolBar);
createBidOfferLayout(market, pnlTop);
}
}

No se encuentra código malicioso

 MessageFrame: Metodo que permitiré la construcción de un cuadro de


mensaje definiendo los objetos, atributos y propiedades con las que serán
definidos, así como los eventos que deberán ejecutarse.

private JTextArea txtArea; Declaracion de objetos, entidades


private JTextField txtToFind; que se usaran en la interfaz gráfica
private Message message; del cuadro de mensajes
private String strMessage;
private Highlighter highlighter;
private Highlighter.HighlightPainter highlightPainter;
public MessageFrame(Message message) { Metodo que construye un cuadro de
mensaje asignándole los atributos,
this.message = message;
setTitle("Message type " eventos, acciones y opciones que
+ contienda el cuadro de mensaje.
message.getTag(Tag.MSG_TYPE).getStringValue() + " seq "
+
message.getTag(Tag.MSG_SEQ_NUM).getStringValue());

JToolBar toolBar = new JToolBar();


toolBar.setFloatable(false);
JButton btnCopy = createMinButton(

"/toolbarButtonGraphics/general/Copy24.gif",
"Copy message to clipboard");
btnCopy.addActionListener(new
ActionListener() {

@Override
public void
actionPerformed(ActionEvent arg0) {

doCopy();
}
});

JButton btnSave = createMinButton(

"/toolbarButtonGraphics/general/Save24.gif",
"Save message to file");
btnSave.addActionListener(new
ActionListener() {

@Override
public void
actionPerformed(ActionEvent arg0) {

doSave();
}
});

JButton btnFind = createMinButton(

"/toolbarButtonGraphics/general/Find24.gif", "Find
in message");
btnFind.addActionListener(new
ActionListener() {

@Override
public void
actionPerformed(ActionEvent arg0) {

doFind();
}
});

txtToFind = new JTextField("=");

JButton btnViewTabs = createMinButton(


"/toolbarButtonGraphics/table/ColumnInsertAfter24.
gif",
"Show TAB instead of \"=\"");
btnViewTabs.addActionListener(new
ActionListener() {

@Override
public void
actionPerformed(ActionEvent arg0) {

doViewTabs();
}
});

JButton btnViewOriginal = createMinButton(

"/toolbarButtonGraphics/general/Refresh24.gif",
"View original");
btnViewOriginal.addActionListener(new
ActionListener() {

@Override
public void
actionPerformed(ActionEvent arg0) {

doViewOriginal();
}
});

toolBar.add(btnSave);
toolBar.add(btnViewTabs);
toolBar.add(btnViewOriginal);
toolBar.add(btnCopy);
toolBar.add(txtToFind);
toolBar.add(btnFind);
add(toolBar, BorderLayout.NORTH);

strMessage = message.toString();
strMessage = strMessage.replaceAll("" +
Tag.DELIMITER, "\n");
txtArea = new JTextArea();
txtArea.setText(strMessage);

highlighter = txtArea.getHighlighter();
highlightPainter = new
DefaultHighlighter.DefaultHighlightPainter(
txtArea.getSelectionColor());

JScrollPane scroll = new


JScrollPane(txtArea);

scroll.setVerticalScrollBarPolicy(JScrollPane.VERT
ICAL_SCROLLBAR_ALWAYS);
add(scroll, BorderLayout.CENTER);
setSize(300, 400);

txtArea.setSelectionStart(0);
txtArea.setSelectionEnd(0);
scroll.getInputMap(JComponent.WHEN_IN_FOCUSED_WIND
OW).put(

KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0),
"escPressed");
scroll.getActionMap().put("escPressed",
new
AbstractAction("escPressed") {
public void
actionPerformed(ActionEvent actionEvent) {

dispose();
}
});

private void doCopy() { Metodo que permite realizar la


txtArea.setSelectionStart(0);
copia del contenido de un objeto
txtArea.setSelectionEnd(txtArea.getText().length() textarea
);
txtArea.copy();
txtArea.setSelectionEnd(0);
}
private void doSave() { Metodo que generar un archivo de
texto con el contenido de una
JFileChooser jfc = new JFileChooser();
String fileName = "seq-" cadena de texto y lo almacena en
+ una ruta especifica
message.getTag(Tag.MSG_SEQ_NUM).getStringValue() + "-"
+
message.getTag(Tag.MSG_TYPE).getStringValue() + ".txt";
jfc.setSelectedFile(new File(fileName));
int sel = jfc.showSaveDialog(this);
if (sel == JFileChooser.APPROVE_OPTION) {
File file = jfc.getSelectedFile();
log.info("Saving to:" + file);

try {
if (!file.exists()) {
file.createNewFile();
}
FileWriter fstream = new
FileWriter(file);
BufferedWriter out = new
BufferedWriter(fstream);
out.write(strMessage);
// Close the output stream
out.close();
} catch (Exception e) {
log.error("Error", e);
}

}
}
private void doFind() { Metodo que permite realizar de
highlighter.removeAllHighlights();
contenido en un objeto textArea, si
String search = txtToFind.getText().trim().toLowerCase();
if (!"".equals(search)) { lo ubica muestra el índice e ilumina
int start = txtArea.getSelectionEnd();
su ubicación, caso contrario realiza
int idx = strMessage.toLowerCase().indexOf(search,
start); un registro log de error.
if (idx >= 0) {
txtArea.setSelectionStart(idx);
txtArea.setSelectionEnd(idx + search.length());
try {
highlighter.addHighlight(txtArea.getSelectionStart
(),
txtArea.getSelectionEnd(), highlightPainter);
} catch (BadLocationException e) {
log.error("Error", e);
}
} else {
txtArea.setSelectionStart(0);
txtArea.setSelectionEnd(0);
}
}
}

No se encuentra código malicioso

 MessageTableModel : Metodo que define clases especiales enum,métodos


y métodos get y set
public enum Column implements DatatecTableColumn { Metodo que define una clase
especial enum que contiene
TIME("Time"),
SEND_RECEIVE("S/R"), campo con valores constantes y
TYPE("Type"), métodos get para los campos
DETAIL("Message"), título y tipo
SEQ_NUM("Seq");

private String title;

private Column(String title) {

this.title = title;
}

@Override
public String getTitle() {

return title;
}

@Override
public Class<?> getType() {
if(this == SEQ_NUM){
return Integer.class;
}
return String.class;
}
}
private List<String> sendReceiveList; Se declara lista privada de tipo
private List<String> timeStamps;
cadena
public MessageTableModel(Column... columns) { Metodo que define el modelo
super(columns);
de mensaje de la tabla, se
sendReceiveList = new ArrayList<String>();
objectList = new ArrayList<Message>(); declara arreglos de lista de tipo
timeStamps = new ArrayList<String>(); cadena y de estructura mensaje
}
public void addReceivedMessage(Message m) { Método que recibe mensaje y
los añade en un objeto de lista ,
((List<Message>) objectList).add(m);
sendReceiveList.add("R"); así mismo agrega la fecha con
timeStamps.add(MESSAGE_TIME.format(new una estructura formateada
Date()));
fireTableDataChanged();
}
public void addSentMessage(Message m) { Método que envia mensaje y los
añade en un objeto de lista, así
((List<Message>) objectList).add(m);
sendReceiveList.add("S"); mismo agrega la fecha con una
timeStamps.add(MESSAGE_TIME.format(new estructura formateada.
Date()));
fireTableDataChanged();
}
public Object getValueAt(int rowIndex, int columnIndex) { Método que obtiene un valor
de una celda especificándole la
if (rowIndex >= objectList.size() ||
columnIndex > titles.length) { fila y la columna, así mismo
return null; retorna el valor de la columna
} de acuerdo a la columna
seleccionada, caso contrario
Column column = (Column)
columns.get(columnIndex); devuelve un valor nulo.
if (column == Column.SEND_RECEIVE) {
return sendReceiveList.get(rowIndex);
}
switch (column) {
case TIME:
return timeStamps.get(rowIndex);
case TYPE:
return ((Message)
objectList.get(rowIndex)).getTag(Tag.MSG_TYPE)
.getStringValue();
case DETAIL:
return ((Message)
objectList.get(rowIndex));
case SEQ_NUM:
return ((Message)
objectList.get(rowIndex)).getTag(Tag.MSG_SEQ_NUM)
.getIntegerValue();
}

return null;
}

No se encuentra código malicioso


 StatisticsFrame : Metodo en la cual se define el modelo así como algunos
valores asignados a los objetos que se presentaran en el formulario de
estadísticas
public StatisticsFrame(Market market) { Define el modelo que se le va a
setLayout(new BorderLayout());
asignar al JTable así como algunos
jLblMarketName = new JLabel(""); atributos,eventos de los objetos
jLblMarketName.setHorizontalAlignment(JLabel.CENTER); contenidos en el formulario de
add(jLblMarketName, BorderLayout.NORTH); estadísticas
setTitle("Prices / Amounts traded");
setMarket(market);
modelStatistics = new
StatisticsTableModel(getColumns(market));

final JTable tblStatistics = new


PrintableColorTable(modelStatistics);
tblStatistics.addMouseListener(new
MouseAdapter() {
public void mouseClicked(MouseEvent e)
{

if (e.getClickCount() == 2) {

showMessageForLine(tblStatistics);
}
}
});

JScrollPane scrollPaneStatistics = new


JScrollPane(tblStatistics);
scrollPaneStatistics

.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCR
OLLBAR_ALWAYS);

add(scrollPaneStatistics,
BorderLayout.CENTER);

int width = 70 *
modelStatistics.getColumnCount();
if (width > 1024) {
width = 1000;
}

setSize(width, 400);
}
private StatisticsTableModel.Column[] getColumns(Market Metodo que define el modelo de
market) {
las columnas que serán asignados
StatisticsTableModel.Column columns[] = null; al JTable de Statistics de acuerdo
switch (market.getType()) { al tipo de mercado.
case SPOT:

columns = new
StatisticsTableModel.Column[] {

StatisticsTableModel.Column.TIME,

StatisticsTableModel.Column.PRICE,
StatisticsTableModel.Column.TRADED_NUMBER,

StatisticsTableModel.Column.REGISTERED_FLAG };

break;
case INTERBANK:
columns = new
StatisticsTableModel.Column[] {

StatisticsTableModel.Column.DAYS,

StatisticsTableModel.Column.TIME,

StatisticsTableModel.Column.PRICE,

StatisticsTableModel.Column.TRADED_NUMBER,

StatisticsTableModel.Column.REGISTERED_FLAG };
break;
case DEPOSIT_CERTIFICATES:
columns = new
StatisticsTableModel.Column[] {

StatisticsTableModel.Column.TIME,

StatisticsTableModel.Column.MATURITY_DATE,

StatisticsTableModel.Column.BOND_IDENTIFIER,

StatisticsTableModel.Column.DAYS,

StatisticsTableModel.Column.VALUE_DATE,

StatisticsTableModel.Column.EFFECTIVE_MONTHLY_YIELD_
RATE,

StatisticsTableModel.Column.TRADED_NUMBER,

StatisticsTableModel.Column.REGISTERED_FLAG };
break;
case FIXED_INCOME:
columns = new
StatisticsTableModel.Column[] {

StatisticsTableModel.Column.TIME,

StatisticsTableModel.Column.TITLE_CODE,

StatisticsTableModel.Column.EMITTER_CODE,

StatisticsTableModel.Column.CURRENCY,

StatisticsTableModel.Column.EMISSION_DATE,

StatisticsTableModel.Column.MATURITY_DATE,

StatisticsTableModel.Column.VALUE_DATE,

StatisticsTableModel.Column.DAYS,
StatisticsTableModel.Column.YIELD_RATE,

StatisticsTableModel.Column.PRICE,

StatisticsTableModel.Column.TRADED_NUMBER,

StatisticsTableModel.Column.REGISTERED_FLAG };
break;
default:
columns =
StatisticsTableModel.Column.values();
}

return columns;
}
public void refresh(StatisticData statistics) { Metodo que recibe una entidad
modelStatistics
de tipo statistics y lo asigna a un
.setObjectList(statistics.getMarket().getStatisticDa
ta()); objeto de tipo list
}
public void setMarket(Market market) { Metodo que asigna el valor de
nombre completo del mercado
if (market != null) {

jLblMarketName.setText(market.getFullName());
}
}

No se encuentra código malicioso

6. com.datatec.fix.gui.ec:

 TransactionOrderTableModel: Clase que permite definir una clase especial


enum y métodos
public enum Column implements DatatecTableColumn { Define una clase especial de tipo enum
DATE("Date"),
las cuales define las columnas de un
TIME("Time"),
BUYER_INSTITUTION("Buyer Instit."), modelo de tabla JTable, así mismo
BUYER_CITY("City"), valida los valores que contendrá cada
BUYER_USER("Buyer User"), una de los valores que contendrá las
SELLER_INSTITUTION("Seller Instit."),
celdas del JTable ubicado en la fila y
SELLER_CITY("City"),
SELLER_USER("Seller User"), columna cuyos valores son recibidos
ACC("Acc"), como parámetros
TYPE("Type"),
SHARE_NAME("Share name"),
PRICE("Price"),
NUMBER("Number"),
TOTAL("Total"),
VD("VD"),
AVL("Avl"),
CURRENCY_1C("Currency"),
NOMINAL_VALUE("Nominal value"),
COUPON("C"),
INTEREST_PCT("%Int"),
DAYS("Days"),
YIELD_RATE("%TEA"),
YIELD("%Yield"),
CLS("Cls");

private Column(String title) {

this.title = title;
}

private String title;

@Override
public String getTitle() {

return title;
}

@Override
public Class<?> getType() {
if(this == COUPON){
return Boolean.class;
}
return String.class;
}
}

public Object getValueAt(int rowIndex, int Método que permite obtener un valor
columnIndex) {
de un JTable de acuerdo a una fila y
if (rowIndex >= objectList.size() || columna indicada, y retorna el valor
columnIndex > titles.length) { del campo que se ha indicado caso
return null; contrario devolverá un valor nulo
}

TransactionOrderData tmp =
(TransactionOrderData) objectList
.get(rowIndex);
Column column = (Column)
columns.get(columnIndex);

switch (column) {
case DATE:
return tmp.getDate();
case TIME:
return tmp.getOperationTime();
case BUYER_INSTITUTION:
return
tmp.getBuyerInstitutionName();
case BUYER_CITY:
return
tmp.getBuyerInstitutionCity();
case BUYER_USER:
return
tmp.getBuyerInstitutionUser();
case SELLER_INSTITUTION:
return
tmp.getSellerInstitutionName();
case SELLER_CITY:
return
tmp.getSellerInstitutionCity();
case SELLER_USER:
return
tmp.getSellerInstitutionUser();
case ACC:
return tmp.getAcc();
case TYPE:
return tmp.getType();
case SHARE_NAME:
return tmp.getShareName();
case PRICE:
return tmp.getPrice();
case NUMBER:
return tmp.getTradedNumber();
case TOTAL:
return "";
case VD:
return tmp.getValueDate();
case AVL:
return tmp.getIssuerCode();
case CLS:
return tmp.getTitleCode();
case CURRENCY_1C:
return tmp.getCurrency1c();
case NOMINAL_VALUE:
return tmp.getNominalValue();
case INTEREST_PCT:
return tmp.getInterestRate();
case DAYS:
return tmp.getDays();
case YIELD:
return tmp.getYield();
case YIELD_RATE:
return tmp.getYieldRate();
case COUPON:
return tmp.isCoupon();

return null;
}

No se encuentra código malicioso

• InstrumentsTableModel: Clase que permite definir una clase especial enum y


métodos.
public enum Column implements DatatecTableColumn { Clase especial enum que define
COD("Code"),
campos con valores constantes, así
ACTIVE("Active"),
TYPE("Type"), mismo se define los métodos set para
NAME("Name"), las variables título y tipo
STATUS("Status"),
CURRENCY("Currency");

private Column(String title) {

this.title = title;
}

private String title;

@Override
public String getTitle() {

return title;
}

@Override
public Class<?> getType() {
if(this == ACTIVE){
return Boolean.class;
}
return String.class;
}

}
public Object getValueAt(int rowIndex, int Método que permite obtener el valor
columnIndex) {
de una celda especificándole la fila y
if (rowIndex >= objectList.size() || columna, así mismo retorna un valor
columnIndex > titles.length) { de tipo objeto según el valor de la
return null; columna indicada caso contrario
}
devuelve el valor nulo
ECVI_Instrument tmp = (ECVI_Instrument)
objectList.get(rowIndex);
Column column = (Column)
columns.get(columnIndex);

switch (column) {
case COD:
return tmp.getUniqueCode();
case ACTIVE:
return tmp.isActive();
case TYPE:
return tmp.getType();
case NAME:
return tmp.getName();
case STATUS:
return null;
case CURRENCY:
return tmp.getCurrency();
}

return null;
}

No se encuentra código malicioso

• ECInstrumentsFrame: Clase que permite definir variables de tipo registro log ,


objetos , acciones y métodos
private static Logger log =
Logger.getLogger(ECInstrumentsFrame.class.getName());
private JTable tblInstruments; Metodo que define el modelo que
private InstrumentsTableModel tblModel; public
contendra el JTable Instrumemts, así
ECInstrumentsFrame() {
mismo define propiedades , acciones y
tblModel = new formatos que se aplicaran al JTable
InstrumentsTableModel(InstrumentsTableModel.Column.CO
D,

InstrumentsTableModel.Column.ACTIVE,

InstrumentsTableModel.Column.TYPE,

InstrumentsTableModel.Column.NAME,

InstrumentsTableModel.Column.STATUS,

InstrumentsTableModel.Column.CURRENCY);
tblInstruments = new
PrintableColorTable(tblModel);

TableColumn column =
tblInstruments.getColumnModel().getColumn(3);
int width = 250;
column.setWidth(width);
column.setPreferredWidth(width);
column.setMaxWidth(width);
column.setMinWidth(width);

tblInstruments.addMouseListener(new
MouseAdapter() {
@Override
public void
mouseClicked(MouseEvent e) {

if (e.getClickCount() == 2)
{
log.debug("double
click [r,c]: "
+
tblInstruments.getSelectedRow() + ","
+
tblInstruments.getSelectedColumn());

showInstrumentDetailFrame((ECVI_Instrument)
tblModel

.getObjectList().get(

tblInstruments.getSelectedRow()));
}
}

});

setLayout(new BorderLayout());
setSize(550, 450);
setTitle("EC - Variable Income
Instruments");
JScrollPane scroll = new
JScrollPane(tblInstruments);

scroll.setHorizontalScrollBarPolicy(JScrollPane
.HORIZONTAL_SCROLLBAR_NEVER);

scroll.setVerticalScrollBarPolicy(JScrollPane.V
ERTICAL_SCROLLBAR_ALWAYS);

add(scroll, BorderLayout.CENTER);
}
private void Metodo que permite definir el estado
showInstrumentDetailFrame(ECVI_Instrument instrument)
de visibilidad del formulario
{

ECInstrumentDetailFrame detailFrame =
new ECInstrumentDetailFrame(
instrument);
detailFrame.setVisible(true);

}
public void setInstruments(List<Instrument> Metodo que asigna el modelo al JTable
instruments) {

tblModel.setObjectList(instruments);

No se encuentra código malicioso

 ECInstrumentDetailFrame : Método que define atributos, propiedades a


los objetos que se mostrara en el formulario.
public ECInstrumentDetailFrame(ECVI_Instrument Metodo que invoca a un
instrument) {
constructor de la clase padre
super(instrument);
setSize(700, 350); (instrument) y asigna el tamaño
} (alto y ancho)
protected void createGUI(JPanel panel, GridBagConstraints Define parámetros y atributos a los
gbc) {
objetos del formulario, posición de
Message msgInstrument = objetos, nombres de los objetos,
instrument.getMessage(); tamaño los cuales intervendrán
como componentes de la interfaz
gbc.gridx = 0;
gráfica de usuario.
gbc.gridy = 0;
gbc.gridwidth = 1;
gbc.anchor = GridBagConstraints.LINE_END;
panel.add(new JLabel("Short name : "), gbc);
gbc.gridx = GridBagConstraints.RELATIVE;
gbc.anchor = GridBagConstraints.LINE_START;
gbc.gridwidth = 2;
panel.add(
createTxtField(

msgInstrument.getTag(
ECVI_InstrumentMessage.SHARE_FULL_NAME)

.getStringValue(), 10), gbc);


gbc.gridwidth = 1;
gbc.anchor = GridBagConstraints.LINE_END;
panel.add(new JLabel("Name : "), gbc);
gbc.anchor = GridBagConstraints.LINE_START;
gbc.gridwidth = 4;
panel.add(
createTxtField(

msgInstrument.getTag(

ECVI_InstrumentMessage.SHARE_SHORT_NAME)

.getStringValue(), 20), gbc);


gbc.gridwidth = 1;

gbc.gridx = 0;
gbc.gridy++;
gbc.anchor = GridBagConstraints.LINE_END;
panel.add(new JLabel("Nominal value : "),
gbc);
gbc.gridx = GridBagConstraints.RELATIVE;
gbc.anchor = GridBagConstraints.LINE_START;
panel.add(
createTxtField(

msgInstrument.getTag(

ECVI_InstrumentMessage.SHARE_NOMINAL_VALUE)

.getStringValue(), 5), gbc);


gbc.anchor = GridBagConstraints.LINE_END;
gbc.gridx = 3;
panel.add(new JLabel("Code in BVG : "),
gbc);
gbc.gridx = GridBagConstraints.RELATIVE;
gbc.anchor = GridBagConstraints.LINE_START;
panel.add(
createTxtField(

msgInstrument.getTag(ECVI_InstrumentMessage.CODE_B
VG)

.getStringValue(), 5), gbc);

gbc.gridx = 0;
gbc.gridy++;
gbc.anchor = GridBagConstraints.LINE_END;
panel.add(new JLabel("Order unit : "), gbc);
gbc.gridx = GridBagConstraints.RELATIVE;
gbc.anchor = GridBagConstraints.LINE_START;
Tag orderUnits =
msgInstrument.getTag(ECVI_InstrumentMessage.ORDER_UNITS);
panel.add(
createTxtField(
orderUnits != null
? orderUnits.getStringValue() : "", 5), gbc);
gbc.anchor = GridBagConstraints.LINE_END;
gbc.gridx = 3;
panel.add(new JLabel("Emitter : "), gbc);
gbc.gridx = GridBagConstraints.RELATIVE;
gbc.anchor = GridBagConstraints.LINE_START;
panel.add(
createTxtField(

msgInstrument.getTag(

ECVI_InstrumentMessage.EMITTER_CODE)

.getStringValue(), 5), gbc);

gbc.gridx = 0;
gbc.gridy++;
gbc.anchor = GridBagConstraints.LINE_END;
panel.add(new JLabel("Maximum lot : "),
gbc);
gbc.gridx = GridBagConstraints.RELATIVE;
gbc.anchor = GridBagConstraints.LINE_START;
gbc.gridwidth = 2;
Tag maxLot =
msgInstrument.getTag(ECVI_InstrumentMessage.MAXIMUM_LOT);
panel.add(
createTxtField(maxLot != null ?
maxLot.getStringValue() : "",
10), gbc);
gbc.gridwidth = 1;
gbc.anchor = GridBagConstraints.LINE_END;
gbc.gridx = 3;
panel.add(new JLabel("Emitter name : "),
gbc);
gbc.gridx = GridBagConstraints.RELATIVE;
gbc.anchor = GridBagConstraints.LINE_START;
gbc.gridwidth = 4;
panel.add(
createTxtField(

msgInstrument.getTag(

ECVI_InstrumentMessage.EMITTER_NAME)

.getStringValue(), 20), gbc);


gbc.gridwidth = 1;

gbc.gridx = 0;
gbc.gridy++;
gbc.anchor = GridBagConstraints.LINE_END;
panel.add(new JLabel("Currency : "), gbc);
gbc.gridx = GridBagConstraints.RELATIVE;
gbc.anchor = GridBagConstraints.LINE_START;
panel.add(
createTxtField(
msgInstrument.getTag(ECVI_InstrumentMessage.CURREN
CY)

.getStringValue(), 5), gbc);


gbc.anchor = GridBagConstraints.LINE_END;
gbc.gridx = 3;
panel.add(new JLabel("Type : "), gbc);
gbc.gridx = GridBagConstraints.RELATIVE;
gbc.anchor = GridBagConstraints.LINE_START;
panel.add(
createTxtField(

msgInstrument.getTag(

ECVI_InstrumentMessage.INSTRUMENT_TYPE)

.getStringValue(), 5), gbc);

gbc.gridx = 0;
gbc.gridy++;
gbc.anchor = GridBagConstraints.LINE_START;
gbc.gridwidth = 7;
gbc.fill = GridBagConstraints.HORIZONTAL;
JSeparator separator = new
JSeparator(SwingConstants.HORIZONTAL);
separator.setOpaque(false);
panel.add(separator, gbc);
gbc.fill = GridBagConstraints.NONE;
gbc.gridwidth = 1;
JLabel lbl = new JLabel(" BVG Data ");
Font f = lbl.getFont().deriveFont(Font.BOLD
+ Font.ITALIC);
lbl.setFont(f);
lbl.setOpaque(true);
gbc.anchor = GridBagConstraints.LINE_END;
panel.add(lbl, gbc);
panel.setComponentZOrder(lbl, 0);
panel.setComponentZOrder(separator, 1);

gbc.gridx = 0;
gbc.gridy++;
gbc.anchor = GridBagConstraints.LINE_START;
panel.add(new JLabel("Ranks : "), gbc);
gbc.gridx = GridBagConstraints.RELATIVE;
gbc.anchor = GridBagConstraints.LINE_END;
panel.add(new JLabel("Superior : "), gbc);
gbc.gridx = GridBagConstraints.RELATIVE;
gbc.anchor = GridBagConstraints.LINE_START;
Tag upperRank =
msgInstrument.getTag(ECVI_InstrumentMessage.UPPER_RANK);
panel.add(
createTxtField(upperRank !=
null ? upperRank.getStringValue()
: "0", 5), gbc);
gbc.anchor = GridBagConstraints.LINE_END;
panel.add(new JLabel("Middle : "), gbc);
gbc.gridx = GridBagConstraints.RELATIVE;
gbc.anchor = GridBagConstraints.LINE_START;
Tag middleRank = msgInstrument
.getTag(ECVI_InstrumentMessage.MIDDLE_RANK);
panel.add(
createTxtField(middleRank !=
null ? middleRank.getStringValue()
: "0", 5), gbc);
gbc.anchor = GridBagConstraints.LINE_END;
panel.add(new JLabel("Lower : "), gbc);
gbc.gridx = GridBagConstraints.RELATIVE;
gbc.anchor = GridBagConstraints.LINE_START;
Tag lowerRank =
msgInstrument.getTag(ECVI_InstrumentMessage.LOWER_RANK);
panel.add(
createTxtField(lowerRank !=
null ? lowerRank.getStringValue()
: "0", 5), gbc);

gbc.gridx = 1;
gbc.gridy++;
gbc.anchor = GridBagConstraints.LINE_END;
panel.add(new JLabel("Suspended : "), gbc);
gbc.gridx = GridBagConstraints.RELATIVE;
gbc.anchor = GridBagConstraints.LINE_START;
Tag suspended = msgInstrument

.getTag(ECVI_InstrumentMessage.SUSPENDED_FLAG);
panel.add(
createTxtField(suspended !=
null ? suspended.getStringValue()
: "0", 5), gbc);
gbc.anchor = GridBagConstraints.LINE_END;
panel.add(new JLabel("Hour : "), gbc);
gbc.gridx = GridBagConstraints.RELATIVE;
gbc.anchor = GridBagConstraints.LINE_START;
Tag suspensionHour = msgInstrument

.getTag(ECVI_InstrumentMessage.SUSPENSION_HOUR);
panel.add(
createTxtField(
suspensionHour !=
null ? suspensionHour

.getStringValue() : "0", 5), gbc);


gbc.anchor = GridBagConstraints.LINE_END;
panel.add(new JLabel("Price : "), gbc);
gbc.gridx = GridBagConstraints.RELATIVE;
gbc.anchor = GridBagConstraints.LINE_START;
Tag suspensionPrice = msgInstrument

.getTag(ECVI_InstrumentMessage.SUSPENSION_PRICE);
panel.add(
createTxtField(
suspensionPrice !=
null ? suspensionPrice

.getStringValue() : "0", 5), gbc);

gbc.gridx = 1;
gbc.gridy++;
gbc.anchor = GridBagConstraints.LINE_END;
panel.add(new JLabel("Last trade : "), gbc);
gbc.gridx = GridBagConstraints.RELATIVE;
gbc.anchor = GridBagConstraints.LINE_START;
Tag lastTradeDate = msgInstrument

.getTag(ECVI_InstrumentMessage.LAST_TRADE_DATE);
Tag lastTradeTime = msgInstrument

.getTag(ECVI_InstrumentMessage.LAST_TRADE_HOUR);
String lastTradeDateTime = "";
if (lastTradeDate != null) {
lastTradeDateTime =
lastTradeDate.getStringValue() + " ";
}
if (lastTradeTime != null) {
lastTradeDateTime +=
lastTradeTime.getStringValue();
}

panel.add(

createTxtField(lastTradeDateTime != null ?
lastTradeDateTime
: "", 10), gbc);
gbc.anchor = GridBagConstraints.LINE_END;
panel.add(new JLabel("Price : "), gbc);
gbc.gridx = GridBagConstraints.RELATIVE;
gbc.anchor = GridBagConstraints.LINE_START;
Tag lastTradePrice = msgInstrument

.getTag(ECVI_InstrumentMessage.LAST_TRADE_PRICE);
panel.add(
createTxtField(
lastTradePrice !=
null ? lastTradePrice

.getStringValue() : "0", 5), gbc);

gbc.anchor = GridBagConstraints.LINE_END;
panel.add(new JLabel("Amount : "), gbc);
gbc.gridx = GridBagConstraints.RELATIVE;
gbc.anchor = GridBagConstraints.LINE_START;
Tag lastTradeAmount = msgInstrument

.getTag(ECVI_InstrumentMessage.LAST_TRADE_NUMBER);
panel.add(
createTxtField(
lastTradeAmount !=
null ? lastTradeAmount

.getStringValue() : "0", 5), gbc);

gbc.gridx = 1;
gbc.gridy++;
gbc.anchor = GridBagConstraints.LINE_END;
panel.add(new JLabel("Tendency : "), gbc);
gbc.gridx = GridBagConstraints.RELATIVE;
gbc.anchor = GridBagConstraints.LINE_START;
Tag tendency = msgInstrument

.getTag(ECVI_InstrumentMessage.LAST_TRADE_TENDENCY
);
panel.add(
createTxtField(tendency != null
? tendency.getStringValue()
: "", 5), gbc);
gbc.anchor = GridBagConstraints.LINE_END;
panel.add(new JLabel("Prev. day price : "),
gbc);
gbc.gridx = GridBagConstraints.RELATIVE;
gbc.anchor = GridBagConstraints.LINE_START;
Tag lastDayPrice = msgInstrument

.getTag(ECVI_InstrumentMessage.PREVIOUS_DAY_BVG_PR
ICE);
panel.add(
createTxtField(
lastDayPrice !=
null ? lastDayPrice.getStringValue()
:
"0", 5), gbc);
gbc.anchor = GridBagConstraints.LINE_END;
panel.add(new JLabel("Prev. day. var. : "),
gbc);
gbc.gridx = GridBagConstraints.RELATIVE;
gbc.anchor = GridBagConstraints.LINE_START;
Tag previousDayPriceVar = msgInstrument

.getTag(ECVI_InstrumentMessage.PREVIOUS_DAY_PRICE_
VARIATION);
panel.add(
createTxtField(

previousDayPriceVar != null ? previousDayPriceVar

.getStringValue() : "0", 5), gbc);

gbc.gridx = 0;
gbc.gridy++;
gbc.gridwidth = 2;
gbc.anchor = GridBagConstraints.LINE_END;
panel.add(new JLabel("Last price for ranks :
"), gbc);
gbc.gridwidth = 1;
gbc.gridx = GridBagConstraints.RELATIVE;
gbc.anchor = GridBagConstraints.LINE_START;
Tag ranksLastPrice = msgInstrument

.getTag(ECVI_InstrumentMessage.LAST_PRICE_FOR_RANK
S);
panel.add(
createTxtField(
ranksLastPrice !=
null ? ranksLastPrice

.getStringValue() : "", 5), gbc);


gbc.anchor = GridBagConstraints.LINE_END;
panel.add(new JLabel("Prev. month price :
"), gbc);
gbc.gridx = GridBagConstraints.RELATIVE;
gbc.anchor = GridBagConstraints.LINE_START;
Tag prevMonthPrice = msgInstrument

.getTag(ECVI_InstrumentMessage.PREVIOUS_MONTH_PRIC
E);
panel.add(
createTxtField(
prevMonthPrice !=
null ? prevMonthPrice.getStringValue()
:
"0", 5), gbc);
gbc.anchor = GridBagConstraints.LINE_END;
panel.add(new JLabel("Prev. month var. : "),
gbc);
gbc.gridx = GridBagConstraints.RELATIVE;
gbc.anchor = GridBagConstraints.LINE_START;
Tag prevMonthVar = msgInstrument

.getTag(ECVI_InstrumentMessage.PREVIOUS_MONTH_PRIC
E_VARIATION);
panel.add(
createTxtField(
prevMonthVar !=
null ? prevMonthVar.getStringValue()
:
"0", 5), gbc);

gbc.gridx = 0;
gbc.gridy++;
gbc.gridwidth = 2;
gbc.anchor = GridBagConstraints.LINE_END;
panel.add(new JLabel("Max. mkt. collocation
date : "), gbc);
gbc.gridwidth = 1;
gbc.gridx = GridBagConstraints.RELATIVE;
gbc.anchor = GridBagConstraints.LINE_START;
Tag maxCollocationDate = msgInstrument

.getTag(ECVI_InstrumentMessage.MAXIMUM_MARKET_COLL
OCATION_DATE);
panel.add(
createTxtField(
maxCollocationDate
!= null ? maxCollocationDate

.getStringValue() : "", 7), gbc);


}

No se encuentra código malicioso


7. com.datatec.fix.gui.mx:

 InstrumentsTableModel : Clase que permite definir enum,métodos y


variables estáticas de tipo finales
public enum Column implements DatatecTableColumn { Define las columnas que contendrá el
JTable de Instrumentos , así mismo se
// Instrument columns
LINE("Ln.", Integer.class), define el nombre y el tipo de de datos
MARKET("Mkt. Code", String.class), que contendrá.
AGREEMENT("Agreement", String.class),
SUPER_GROUP("Super G.", String.class),
GROUP_NUMBER("Group N.", String.class),
COMPARING_TEXT("Matching text",
String.class),
TERM_TEXT("Term", String.class),
TV_IDENTIFIER("Identifier",
String.class),
BUY_ORDERS("Buy", List.class),
SELL_ORDERS("Sell", List.class);

private Column(String title, Class<?>


type) {

this.title = title;
this.type = type;
}

private String title;

private Class<?> type;

@Override
public String getTitle() {

return title;
}

@Override
public Class<?> getType() {

return type;
}

}
public InstrumentsTableModel() { Método que hereda las columnas que
contendrá el JTable de Instrumentos
super(Column.LINE, Column.TERM_TEXT,
Column.TV_IDENTIFIER,
Column.BUY_ORDERS,
Column.SELL_ORDERS);
}
public Object getValueAt(int rowIndex, int Metodo que obtene el valor de una
columnIndex) {
celda tomando como valor la fila y la
if (rowIndex >= objectList.size() || columna la cual se ha seleccionado. Se
columnIndex > titles.length) { obtine los valores de la celda para
return null; realizar operaciones de cálculos y
} validaciones, se muestra datos de la
JTable Instrument.
Object tmp = objectList.get(rowIndex);
Column column = (Column)
columns.get(columnIndex);

// Instrument data
MXInstrument i = (MXInstrument) tmp;
switch (column) {
case LINE:
return i.getLine();
case TERM_TEXT:
return i.getTermText();
case TV_IDENTIFIER:
return i.getTvIdentifier();
case GROUP_NUMBER:
return
MXInstrument.GROUP_NUMBER_FOR_KEY_FORMAT.format(i
.getGroupNumber());
case MARKET:
return i.getMarket().getCode();
case SUPER_GROUP:
return i.getSuperGroupCode();
case COMPARING_TEXT:
return i.getComparingText();
case BUY_ORDERS:
return i.getBidsList();
case SELL_ORDERS:
return i.getOffersList();
}

return null;
}

No se encuentra código malicioso

 MXInstrumentsFrame: Clase que permite definir enum,métodos y


variables estáticas de tipo finales
private final static int BIDS_COLUMN = 3; Se definen variables
private final static int OFFERS_COLUMN = 4;
estáticas finales que
almacenan valores
constantes
private static Logger log = Logger Declara variable estatica de
.getLogger(MXInstrumentsFrame.class.getName());
tipo log el cual almacena los
sucesos del JTable
Intrumentos
private JTable tblInstruments; Se definen objetos que se
private SimpleTableModel instrumentsOrdersModel;
incluirán en el formulario
private JScrollPane scrollPane;
private JPopupMenu instrumentRightClickMenu; Instrumentos
private ClientSession fixSession;
public void setFixSession(ClientSession fixSession) { Método que asigna el objeto
this.fixSession = fixSession;
de tipo fixSession
}
public MXInstrumentsFrame() { Metodos que define la
construcción del formulario,
tblInstruments = new PrintableColorTable();
instrumentsOrdersModel = new eventos, atributos,
InstrumentsTableModel(); propiedades y objetos que
tblInstruments.setModel(instrumentsOrdersModel); contendrá el Formulario.
instrumentRightClickMenu = new JPopupMenu();

JMenuItem miNewBid = new JMenuItem("New Bid");


miNewBid.addActionListener(new ActionListener() {

@Override
public void actionPerformed(ActionEvent
arg0) {

newOrder(Order.Side.BID);

}
});
JMenuItem miNewOffer = new JMenuItem("New Offer");
miNewOffer.addActionListener(new ActionListener()
{

@Override
public void actionPerformed(ActionEvent
arg0) {

newOrder(Order.Side.OFFER);

}
});
JMenuItem miNewBidOffer = new JMenuItem("New Bid &
Offer");
miNewBidOffer.addActionListener(new
ActionListener() {

@Override
public void actionPerformed(ActionEvent
arg0) {

newOrder(null);

}
});
JMenuItem miInstrumentDetail = new
JMenuItem("Instrument details");
miInstrumentDetail.addActionListener(new
ActionListener() {

@Override
public void actionPerformed(ActionEvent
arg0) {

instrumentDetails();

}
});
instrumentRightClickMenu.add(miInstrumentDetail);
miInstrumentDetail.setEnabled(false);
instrumentRightClickMenu.add(new
JPopupMenu.Separator());
instrumentRightClickMenu.add(miNewOffer);
instrumentRightClickMenu.add(miNewBid);
instrumentRightClickMenu.add(miNewBidOffer);
miNewBidOffer.setEnabled(false);

DefaultTableCellRenderer topAlignedCellRenderer =
new DefaultTableCellRenderer();

topAlignedCellRenderer.setVerticalAlignment(SwingConstant
s.TOP);

TableColumn column =
tblInstruments.getColumnModel().getColumn(0);
column.setWidth(30);
column.setPreferredWidth(30);
column.setMaxWidth(30);
column.setMinWidth(30);
column.setCellRenderer(topAlignedCellRenderer);

column =
tblInstruments.getColumnModel().getColumn(1);
int width2 = 100;
column.setWidth(width2);
column.setPreferredWidth(width2);
column.setMaxWidth(width2);
column.setMinWidth(width2);
column.setCellRenderer(topAlignedCellRenderer);

column =
tblInstruments.getColumnModel().getColumn(2);
column.setWidth(width2);
column.setPreferredWidth(width2);
column.setMaxWidth(width2);
column.setMinWidth(width2);
column.setCellRenderer(topAlignedCellRenderer);

OrdersTableModel bidsModel = new OrdersTableModel(


OrdersTableModel.Column.AMOUNT,
OrdersTableModel.Column.RATE,

OrdersTableModel.Column.REGISTRY_TYPE);
NestedTableCellRenderer ntcrBids = new
OrdersJTable(bidsModel);
ntcrBids.setColumAlignment(1,
SwingConstants.RIGHT);
ntcrBids.setColumAlignment(2,
SwingConstants.CENTER);
ntcrBids.setColumnWidth(2, 20);
column =
tblInstruments.getColumnModel().getColumn(BIDS_COLUMN);

column.setCellRenderer(ntcrBids);

OrdersTableModel offersModel = new


OrdersTableModel(
OrdersTableModel.Column.REGISTRY_TYPE,
OrdersTableModel.Column.RATE,
OrdersTableModel.Column.AMOUNT);
NestedTableCellRenderer ntcrOffers = new
OrdersJTable(offersModel);
ntcrOffers.setColumAlignment(0,
SwingConstants.CENTER);
ntcrOffers.setColumAlignment(1,
SwingConstants.RIGHT);
ntcrOffers.setColumnWidth(0, 20);
column =
tblInstruments.getColumnModel().getColumn(OFFERS_COLUMN);
column.setCellRenderer(ntcrOffers);
scrollPane = new JScrollPane(tblInstruments);

setLayout(new BorderLayout());
add(scrollPane, BorderLayout.CENTER);

tblInstruments.addMouseListener(new MouseAdapter()
{

@Override
public void mouseClicked(MouseEvent e) {

// System.out.println("" + e.getX() +
"," + e.getY());

TableColumnModel tcm =
tblInstruments.getColumnModel();
int column =
tcm.getColumnIndexAtX(e.getX());
int row =
tblInstruments.rowAtPoint(new Point(e.getX(), e
.getY()));

if (column == BIDS_COLUMN || column ==


OFFERS_COLUMN) {
NestedTableCellRenderer tmp =
(NestedTableCellRenderer) tblInstruments

.getCellRenderer(row, column);

MouseEvent forwaredEvent =
(MouseEvent) SwingUtilities

.convertMouseEvent(tblInstruments, e,

tmp.getTable());

tmp.getTable().dispatchEvent(forwaredEvent);
// return;

if (e.getButton() !=
MouseEvent.BUTTON1) {

// right click over an


instrument
tblInstruments.setRowSelectionInterval(row, row);

instrumentRightClickMenu.show(tblInstruments, e.getX(),
e.getY());

if (e.getClickCount() == 2) {
int selectedRow =
tblInstruments.getSelectedRow();
int selectedColumn =
tblInstruments.getSelectedColumn();
log.debug("double click [r,c]:
" + selectedRow + ","
+ selectedColumn);

if (selectedColumn ==
instrumentsOrdersModel

.getColumnIndex(InstrumentsTableModel.Column.LINE)) {

MXInstrument i =
(MXInstrument) instrumentsOrdersModel

.getObjectList().get(selectedRow);

log.debug("Instrument: "
+ i);

modifyOrder(e.getX(),
e.getY());
}
}
});

setTitle("Instruments & Orders");


setSize(650, 500);
}
protected void modifyOrder(int x, int y) { Metodo que permite
ordenar el JTable
Point p = new Point(x, y);
int row = tblInstruments.rowAtPoint(p); Instrumento y actualizar el
int column = tblInstruments.columnAtPoint(p); JTable
int accumHeigth = 0;
for (int i = 0; i < row; i++) {
accumHeigth +=
tblInstruments.getRowHeight(i);
}
int orderIdx = (y - accumHeigth) / 16;
System.out.println("" + row + "," + column + " -
orderIdx " + orderIdx
+ " - y = " + y);

MXInstrument instrument = (MXInstrument)


instrumentsOrdersModel
.getObjectList().get(row);
MXOrder order = null;

if (column == BIDS_COLUMN &&


instrument.getBidsList().size() > 0) {
order =
instrument.getBidsList().get(orderIdx);
} else if (column == OFFERS_COLUMN
&& instrument.getOffersList().size() >
0) {
order =
instrument.getOffersList().get(orderIdx);
}

if (order != null) {
OrderFrame of = new OrderFrame(order);
of.setFixSession(fixSession);
of.setVisible(true);
}
}
protected void newOrder(MXOrder.Side side) { Metodo que permite
cambiar o asignar el orden
MXInstrument instrument = (MXInstrument)
instrumentsOrdersModel
de las columas.

.getObjectList().get(tblInstruments.getSelectedRow());

OrderFrame ofNewOrder = new


OrderFrame(instrument);
ofNewOrder.setFixSession(fixSession);
ofNewOrder.setSide(side);
ofNewOrder.setVisible(true);
}
public void refresh(MXInstrument instrument) { Metodo que pemite
actualizar el modelo del
int idx =
instrumentsOrdersModel.getObjectList().indexOf(instrument); JTable
if (idx >= 0) {
int nBids = instrument.getBidsList().size();
int nOffers =
instrument.getOffersList().size();
int size =
NestedTableCellRenderer.FIXED_ROW_HEIGHT;
if (nBids > 0 || nOffers > 0) {
size = size * (nBids > nOffers ? nBids
: nOffers);
}
tblInstruments.setRowHeight(idx, size);
scrollPane.revalidate();
this.repaint();
}
}

No se encuentra código malicioso


 OrderFrame: Clase que construye el formulario de Orden declara variables
finales, objetos que contendrá, acciones, atributos de los objetos
conteniedos en el formulario.
private static Logger log = Se declara variable log que almacena los
Logger.getLogger(OrderFrame.class.getName());
sucesos al invocar a la clase getname
public final static NumberFormat AMOUNT_FORMAT = Declara la variable final estatica que
new DecimalFormat("#########");
almacena el monto con un format
determinado
private JButton btnOffer; Declaran los objetos que formaran parte del
private JButton btnBid;
diseño del formulario como son botones
private JButton btnBidOffer;
private JButton btnOk; JTextField,etc.
private JButton btnCancel;
private JButton btnWithdraw;
private JTextField txtValueTitle;
private JTextField txtGroupName;
private JTextField txtTerm;
private JTextField txtLiquidation;
private JTextField txtAgreement;
private JTextField txtOfferRate;
private JTextField txtBidRate;
private JTextField txtAmount;
private JTextField txtDrop;
private JTextField txtGoodFor;
private JCheckBox chkTypeOrder;
private JCheckBox chkDripFeed;
private JLabel lblDrop;
private MXInstrument instrument;
private MXOrder.Side side;
private MXOrder order;
private Color buttonsDefaultColor;
private ClientSession fixSession;
public ClientSession getFixSession() { Método que obtiene y retorna un objeto de
return fixSession;
tipo ClientSession
}
public void setFixSession(ClientSession Metodo que define que algunos objetos
fixSession) {
serán editables y visibles según se le asigne
this.fixSession = fixSession; en la propiedad de cada objeto

if (order != null
&& !order

.getMessage()

.getTag(CurrentOrderMessage.ORDER_PU_CODE)

.getStringValue()

.equals(fixSession.getDatatecFields()

.getPrimaryUserCode())) {

setTitle("Details");
txtAmount.setEditable(false);
txtBidRate.setEditable(false);

txtOfferRate.setEditable(false);
txtDrop.setEditable(false);
chkDripFeed.setEnabled(false);
txtGoodFor.setEditable(false);
btnOk.setVisible(false);
btnWithdraw.setVisible(false);
}
}
private OrderFrame() { Metodo donde se asigna formato, acción,
propiedades, atributos de los elementos
instrument = new MXInstrument();
que participa en el formulario, así mismo se
btnOffer = new JButton("Offer invoca a dos métodos uno de cancelado y
(sale)"); otro que permite llamar a un método de
btnOffer.addActionListener(new
ejecución de conexión entre datatec y el
ActionListener() {
cliente.
@Override
public void
actionPerformed(ActionEvent arg0) {

setSide(Order.Side.OFFER);

}
});
btnBid = new JButton("Bid
(purchase)");
btnBid.addActionListener(new
ActionListener() {

@Override
public void
actionPerformed(ActionEvent arg0) {

setSide(Order.Side.BID);

}
});
btnBidOffer = new JButton("Both");
btnBidOffer.addActionListener(new
ActionListener() {

@Override
public void
actionPerformed(ActionEvent arg0) {

setSide(null);

}
});
btnBidOffer.setEnabled(false);

btnOk = new JButton("Accept");


btnOk.addActionListener(new
ActionListener() {

@Override
public void
actionPerformed(ActionEvent e) {

doOk();

}
});

btnCancel = new JButton("Cancel");


btnCancel.addActionListener(new
ActionListener() {

@Override
public void
actionPerformed(ActionEvent arg0) {

doCancel();

}
});

btnWithdraw = new
JButton("Withdraw");
btnWithdraw.addActionListener(new
ActionListener() {

@Override
public void
actionPerformed(ActionEvent arg0) {

doWithdraw();

}
});

buttonsDefaultColor =
btnOk.getBackground();

txtValueTitle = new JTextField(10);


txtValueTitle.setEditable(false);
txtGroupName = new JTextField(20);
txtGroupName.setEditable(false);
txtTerm = new JTextField(10);
txtTerm.setEditable(false);
txtLiquidation = new JTextField(10);
txtLiquidation.setEditable(false);
txtAgreement = new JTextField(10);
txtAgreement.setEditable(false);

txtOfferRate = new JTextField(5);

txtOfferRate.setHorizontalAlignment(JTextFi
eld.RIGHT);
txtBidRate = new JTextField(5);

txtBidRate.setHorizontalAlignment(JTextFiel
d.RIGHT);
txtAmount = new JTextField(5);

txtAmount.setHorizontalAlignment(JTextField
.RIGHT);
txtDrop = new JTextField(5);

txtDrop.setHorizontalAlignment(JTextField.R
IGHT);
txtGoodFor = new JTextField(5);
txtGoodFor.setHorizontalAlignment(JTextFiel
d.RIGHT);

chkDripFeed = new JCheckBox("Drip


feed");
chkDripFeed.addChangeListener(new
ChangeListener() {

@Override
public void
stateChanged(ChangeEvent arg0) {

doChkDripFeedChanged();

}
});

chkTypeOrder = new JCheckBox("Type


order");
chkTypeOrder.setEnabled(false);

lblDrop = new JLabel("Drop : ");

GridBagConstraints gbc = new


GridBagConstraints();
gbc.weightx = 1;
gbc.weighty = 1;
gbc.gridheight = 1;
gbc.gridwidth = 1;
gbc.gridx = 0;
gbc.gridy = 0;
gbc.insets = new Insets(1, 2, 2, 4);

JPanel pnlTmp = new JPanel(new


GridBagLayout());

gbc.gridx = 0;
gbc.gridy = 0;

gbc.anchor =
GridBagConstraints.LINE_START;

gbc.fill =
GridBagConstraints.HORIZONTAL;
pnlTmp.add(btnOffer, gbc);
gbc.fill = GridBagConstraints.NONE;
gbc.gridx =
GridBagConstraints.RELATIVE;
gbc.anchor =
GridBagConstraints.LINE_END;
pnlTmp.add(new JLabel("Instrument :
"), gbc);
gbc.anchor =
GridBagConstraints.LINE_START;
gbc.gridwidth = 2;
gbc.fill =
GridBagConstraints.HORIZONTAL;
pnlTmp.add(txtValueTitle, gbc);
gbc.fill = GridBagConstraints.NONE;
gbc.gridwidth = 1;

gbc.gridx = 0;
gbc.gridy++;

gbc.anchor =
GridBagConstraints.LINE_START;
gbc.fill =
GridBagConstraints.HORIZONTAL;
pnlTmp.add(btnBid, gbc);
gbc.fill = GridBagConstraints.NONE;
gbc.gridx =
GridBagConstraints.RELATIVE;
gbc.anchor =
GridBagConstraints.LINE_END;

pnlTmp.add(new JLabel("Group : "),


gbc);
gbc.anchor =
GridBagConstraints.LINE_START;
gbc.gridwidth = 4;
pnlTmp.add(txtGroupName, gbc);
gbc.gridwidth = 1;

gbc.gridx = 0;
gbc.gridy++;

gbc.anchor =
GridBagConstraints.LINE_START;
gbc.fill =
GridBagConstraints.HORIZONTAL;
pnlTmp.add(btnBidOffer, gbc);
gbc.fill = GridBagConstraints.NONE;
gbc.gridx =
GridBagConstraints.RELATIVE;
gbc.anchor =
GridBagConstraints.LINE_END;
pnlTmp.add(new JLabel("Term : "),
gbc);
gbc.anchor =
GridBagConstraints.LINE_START;
gbc.gridwidth = 2;
gbc.fill =
GridBagConstraints.HORIZONTAL;
pnlTmp.add(txtTerm, gbc);
gbc.fill = GridBagConstraints.NONE;
gbc.gridwidth = 1;

gbc.gridy++;
gbc.gridx = 1;

gbc.anchor =
GridBagConstraints.LINE_END;
pnlTmp.add(new JLabel("Liquidation :
"), gbc);
gbc.gridx =
GridBagConstraints.RELATIVE;
gbc.anchor =
GridBagConstraints.LINE_START;
gbc.gridwidth = 2;
gbc.fill =
GridBagConstraints.HORIZONTAL;
pnlTmp.add(txtLiquidation, gbc);
gbc.fill = GridBagConstraints.NONE;
gbc.gridwidth = 1;

gbc.gridy++;
gbc.gridx = 1;

gbc.anchor =
GridBagConstraints.LINE_END;
pnlTmp.add(new JLabel("Agreement :
"), gbc);
gbc.gridx =
GridBagConstraints.RELATIVE;
gbc.anchor =
GridBagConstraints.LINE_START;
gbc.gridwidth = 2;
gbc.fill =
GridBagConstraints.HORIZONTAL;
pnlTmp.add(txtAgreement, gbc);
gbc.fill = GridBagConstraints.NONE;
gbc.gridwidth = 1;

gbc.gridy++;
gbc.gridx = 0;

gbc.gridwidth = 2;
gbc.anchor =
GridBagConstraints.LINE_START;
pnlTmp.add(chkTypeOrder, gbc);
gbc.gridwidth = 1;
gbc.gridx =
GridBagConstraints.RELATIVE;
gbc.anchor =
GridBagConstraints.CENTER;
pnlTmp.add(new JLabel("Sale"), gbc);
pnlTmp.add(new JLabel("Purchase"),
gbc);
Dimension d = new Dimension(60, 10);
pnlTmp.add(new Box.Filler(d, d, d),
gbc);
gbc.gridwidth = 1;

gbc.gridy++;
gbc.gridx = 1;
gbc.anchor =
GridBagConstraints.LINE_END;
pnlTmp.add(new JLabel("Rate : "),
gbc);
gbc.gridx =
GridBagConstraints.RELATIVE;
gbc.anchor =
GridBagConstraints.LINE_START;
gbc.fill =
GridBagConstraints.HORIZONTAL;
pnlTmp.add(txtOfferRate, gbc);
pnlTmp.add(txtBidRate, gbc);
gbc.fill = GridBagConstraints.NONE;
gbc.gridy++;
gbc.gridx = 0;

gbc.anchor =
GridBagConstraints.LINE_START;
pnlTmp.add(chkDripFeed, gbc);
gbc.gridx =
GridBagConstraints.RELATIVE;
gbc.anchor =
GridBagConstraints.LINE_END;
pnlTmp.add(new JLabel("Amount : "),
gbc);
gbc.anchor =
GridBagConstraints.LINE_START;
gbc.fill =
GridBagConstraints.HORIZONTAL;
pnlTmp.add(txtAmount, gbc);
gbc.fill = GridBagConstraints.NONE;
gbc.anchor =
GridBagConstraints.LINE_END;
pnlTmp.add(lblDrop, gbc);
gbc.anchor =
GridBagConstraints.LINE_START;
gbc.fill =
GridBagConstraints.HORIZONTAL;
pnlTmp.add(txtDrop, gbc);
gbc.fill = GridBagConstraints.NONE;

gbc.gridy++;
gbc.gridx = 1;
gbc.anchor =
GridBagConstraints.LINE_END;
pnlTmp.add(new JLabel("Good for :
"), gbc);
gbc.gridx =
GridBagConstraints.RELATIVE;
gbc.anchor =
GridBagConstraints.LINE_START;
gbc.fill =
GridBagConstraints.HORIZONTAL;
pnlTmp.add(txtGoodFor, gbc);

setLayout(new BorderLayout());
add(pnlTmp, BorderLayout.CENTER);

JPanel pnlButtons = new JPanel(new


FlowLayout(FlowLayout.RIGHT));

pnlButtons.setBorder(BorderFactory.createMa
tteBorder(1, 0, 0, 0,
Color.LIGHT_GRAY));
pnlButtons.add(btnOk);
pnlButtons.add(btnWithdraw);
pnlButtons.add(btnCancel);

add(pnlButtons, BorderLayout.SOUTH);

pack();
setResizable(false);
doChkDripFeedChanged();
setSide(null);

pnlTmp.getInputMap(JComponent.WHEN_IN_FOCUS
ED_WINDOW).put(

KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE,
0), "escPressed");

pnlTmp.getActionMap().put("escPressed",
new
AbstractAction("escPressed") {
public void
actionPerformed(ActionEvent actionEvent) {

doCancel();
}
});

pnlTmp.getInputMap(JComponent.WHEN_IN_FOCUS
ED_WINDOW).put(

KeyStroke.getKeyStroke(KeyEvent.VK_ENTER,
0), "enterPressed");

pnlTmp.getActionMap().put("enterPressed",
new
AbstractAction("enterPressed") {
public void
actionPerformed(ActionEvent actionEvent) {

doOk();
}
});
}
protected void doWithdraw() { Método que genera un mensaje para él
envió de órdenes de transacción
try {

fixSession.sendTransactionOrderMessage(orde
r,

TransactionOrderMessage.Class.WITHDRAW);
dispose();
} catch (Exception e) {

JOptionPane.showMessageDialog(this,
"Error while
sending FIX message:\n" + e, "Error",

JOptionPane.ERROR_MESSAGE);
log.error("Error", e);
}

}
protected void doChkDripFeedChanged() { Método que asigna a los objetos el estado
visible o no
txtDrop.setVisible(chkDripFeed.isSelected()
);

lblDrop.setVisible(chkDripFeed.isSelected()
);
}
public OrderFrame(MXInstrument instrument) { Método que recibe un objeto de tipo
instrument y asigna el valor a cada campo
this();
this.instrument = instrument; dependiendo de los objetos que los
requiera
txtValueTitle.setText(instrument.getTvIdent
ifier());

txtGroupName.setText(instrument.getGroupNam
e());

txtTerm.setText(instrument.getTermText());

txtLiquidation.setText(instrument.getLiquid
ation());
txtAgreement.setText("" +
instrument.getAgreement());

btnWithdraw.setVisible(false);
}
public OrderFrame(MXOrder order) { Metodo que permite validar el contenido
de algunos campos como el precio, el
this(order.getInstrument());
this.order = order; monto para luego asignarlo a sus
respectivas cajas de texto previamente
setSide(order.getSide()); validado
if (order.getSide() ==
Order.Side.BID) {
txtBidRate.setText("" +
order.getPrice());
} else if (order.getSide() ==
Order.Side.OFFER) {
txtOfferRate.setText("" +
order.getPrice());
}

if (order.getTotalAmount() != 0
&&
order.getTotalAmount() > order.getAmount()) {

chkDripFeed.setSelected(true);

txtAmount.setText(AMOUNT_FORMAT.format(orde
r.getTotalAmount()));

txtDrop.setText(AMOUNT_FORMAT.format(order.
getAmount()));
} else {

chkDripFeed.setSelected(false);
txtAmount.setText(AMOUNT_FORMAT.format(orde
r.getAmount()));
}

if (order.getGoodFor() != 0) {

txtGoodFor.setText(AMOUNT_FORMAT.format(ord
er.getGoodFor()));
}

btnWithdraw.setVisible(true);

}
public void setSide(MXOrder.Side side) { Método que permite dar un formato de
presentación a los objetos que se
this.side = side;
String title = order == null ? encuentran contenidos en el formulario
"Enter" : "Modify";

if (side == null) {
txtBidRate.setEnabled(true);
txtOfferRate.setEnabled(true);

btnBidOffer.setBackground(Color.GREEN);

btnOffer.setBackground(buttonsDefaultColor)
;

btnBid.setBackground(buttonsDefaultColor);

title += " purchase & sale";

} else if (side == Order.Side.BID) {


txtBidRate.setEnabled(true);

txtOfferRate.setEnabled(false);

btnBidOffer.setBackground(buttonsDefaultCol
or);

btnOffer.setBackground(buttonsDefaultColor)
;

btnBid.setBackground(Color.ORANGE);

title += " purchase";

} else if (side == Order.Side.OFFER)


{
txtBidRate.setEnabled(false);
txtOfferRate.setEnabled(true);

btnBidOffer.setBackground(buttonsDefaultCol
or);

btnOffer.setBackground(Color.BLUE);
btnBid.setBackground(buttonsDefaultColor);

title += " sale";


}

setTitle(title);
}

private Double txtFieldToDouble(JTextField Metodo que recibe como parámetro un


txtField) {
valor de un JTextField y permite la
String s = txtField.getText().trim(); validación de valores decimales
try {
if ("".equals(s)) {
return 0d;
}
return new Double(s);
} catch (Exception e) {
return null;
}
}
private Integer txtFieldToInteger(JTextField Metodo que recibe como parámetro un
txtField) {
valor de un JTextField y permite la
Double d = validación de valores enteros
txtFieldToDouble(txtField);
if (d != null) {
return d.intValue();
}
return null;
}
protected void doOk() { Método que permite obtener los valores
que son cargados en las cajas de textos para
Double offerRate =
txtFieldToDouble(txtOfferRate); luego validarlos y realizar él envió de la
Double bidRate = transacción, si se detecta un error en la
txtFieldToDouble(txtBidRate); transacción se escribirá en la variable log
Integer amount =
devuelta en la consola del aplicativo
txtFieldToInteger(txtAmount);
Integer goodFor =
txtFieldToInteger(txtGoodFor);
Integer drop =
txtFieldToInteger(txtDrop);

String errorMessage = "";

if (side == null) {
if (offerRate == null ||
offerRate == 0) {
errorMessage += "-
Invalid Offer rate\n";
}
if (bidRate == null || bidRate
== 0) {
errorMessage += "-
Invalid Bid rate\n";
}
}
if (side == Order.Side.OFFER &&
(offerRate == null || offerRate == 0)) {
errorMessage += "- Invalid
Offer rate\n";
}
if (side == Order.Side.BID &&
(bidRate == null || bidRate == 0)) {
errorMessage += "- Invalid Bid
rate\n";
}
if (amount == null) {
errorMessage += "- Invalid
amount\n";
} else if (amount <
MXOrder.MIN_AMOUNT) {
errorMessage += "- Amount must
be >= " + MXOrder.MIN_AMOUNT;
}
if (chkDripFeed.isSelected() &&
amount != null
&& (drop == null ||
drop == 0 || drop > amount)) {
errorMessage += "- Invalid
drop\n";
}
if (goodFor != null && goodFor == 0)
{
goodFor = null;
}

if (!"".equals(errorMessage)) {

JOptionPane.showMessageDialog(this, "Check
the following errors:\n"
+ errorMessage,
"Error", JOptionPane.ERROR_MESSAGE);
return;
}

order = new MXOrder();

if (!chkDripFeed.isSelected()) {
order.setAmount(amount);
} else {
order.setAmount(drop);
order.setTotalAmount(amount);
}

order.setInstrument(instrument);
order.setSide(side);

if (goodFor != null) {
order.setGoodFor(goodFor);
}

if (side == Order.Side.BID) {
order.setPrice(bidRate);
} else if (side == Order.Side.OFFER)
{
order.setPrice(offerRate);
}

try {
fixSession.sendTransactionOrderMessage(order,

TransactionOrderMessage.Class.ENTER);
dispose();
} catch (Exception e) {

JOptionPane.showMessageDialog(this,
"Error while
sending FIX message:\n" + e, "Error",

JOptionPane.ERROR_MESSAGE);
log.error("Error", e);
}
protected void doCancel() { Metodos que permite cancelar una acción u
dispose();
operación
}

No se encuentra código malicioso

 OrderJTable : Clase que construye el formulario de Ordenes declara el


comportamiento y eventos
public FirstRowColorTable(SimpleTableModel model) define el color que se mostrara en la
{
primera fila de la tabla heredando el
super(model);
} modelo que se mostrara en el JTable
public Component Método que determina el comportamiento
prepareRenderer(TableCellRenderer renderer, int
que tendrá en JTable ante determinadas
row,int col) {
Component c = super.prepareRenderer(renderer, acciones que se produzca en el Objeto
row, col);

if (row == 0 && !isCellSelected(row, col)) {


Order = (Order) ((SimpleTableModel) getModel())
.getObjectList().get(0);
if (order.getSide() == Order.Side.BID) {
c.setForeground(Color.RED);
} else {
c.setForeground(Color.BLUE);
}
} else {

c.setForeground(Color.BLACK);
}

return c;
}
}

public OrdersJTable(OrdersTableModel model) { Metodo que define la acción que se


super(model);
ejecutara ante diversas acciones que se
setTable(new FirstRowColorTable(model));
table.addMouseListener(new MouseAdapter() { realizaran en el JTable, por ejemplo un click
@Override con el mouse.
public void mouseClicked(MouseEvent e) {

//
System.out.println("Inner table");
//
System.out.println("" + e.getX() + ", " +
e.getY());
}
});
}

No se encuentra código malicioso

 OrdersTableModel : Clase que permite definir clases especiales enum,


métodos get.
public enum Column implements DatatecTableColumn Clase especial enum que define las
{
columnas del modelo que contendrá el
RATE,
AMOUNT, JTable Ordenes, así como el método get
CODE, para obtener los títulos y obtener el monto
KEY, usando una clase tipo
REGISTRY_TYPE;

@Override
public String getTitle() {

return null;
}

@Override
public Class<?> getType() {

if (this == AMOUNT) {
return Double.class;
}
return String.class;
}

}
public OrdersTableModel(Column... columns) { Metodo que hereda el objeto columns
super(columns);
}

public Object getValueAt(int rowIndex, int Metodo que permite el valor de una celda
columnIndex) {
especificando la fila y columna el cual serán
if (rowIndex < getRowCount() && columnIndex <
getColumnCount()) { pasado como argumento con el fin de
MXOrder order = (MXOrder) formatear y validar el datos asignado al
objectList.get(rowIndex); Jtable
Column = (Column) columns.get(columnIndex);
switch (column) {
case AMOUNT:
return order.getAmount();
case RATE:
return
Order.RATE_FORMAT.format(order.getPrice());
case CODE:
return order.getCode();
case KEY:
return order.getKey();
case REGISTRY_TYPE:
return
order.getRegistryTypeFlag();
}
}
return null;
}

No se encuentra código malicioso

8. com.datatec.fix.mx:

 MXClientSession: Clase que permite definir variables de tipo SortMap,


métodos de recepción de datos de instrumentos, métodos de recepción de
datos actuales y él envió de mensajes de las ordenes de transacción.
private SortedMap<String, Instrument> instruments; Se define una interfaz de tipo Map
que define una estructura
instruments de tipo cadena
public MXClientSession(String server, int port) { Constructor que recibe el nombre o
super(server, port);
ip del servidor, el puerto y permite
instruments = new TreeMap<String, Instrument>();
} invocar a una clase principal
enviándole el servidor y el puerto,
así mismo se define una interfaz de
tipo TreeMap
protected void receiveInstrumentData(Message msg) { Metodo que recibe los datos de
String strMkt =
Instrument, asigna los valores de las
msg.getTag(MXFixedIncomeInstrumentMessage.MARKET)
.getValue().toString(); variables privadas finales a los
Market mkt = markets.get(strMkt); campos definidos en la entidad
Instrument, finalmente muestra un
MXInstrument inst = new MXInstrument();
mensaje de los datos procesados.
inst.setMarket(mkt);
inst.setUniqueCode(msg

.getTag(MXFixedIncomeInstrumentMessage.UNIQUE_CODE
).getValue()
.toString());

inst.setGroupCode(msg.getTag(MXFixedIncomeInstrume
ntMessage.GROUP_CODE)
.getValue().toString());

if
(msg.getTag(MXFixedIncomeInstrumentMessage.GROUP_NUMBER)
!= null) {
String grpNumber = msg
.getTag(MXFixedIncomeInstrumentMessage.GROUP_NUMBE
R)
.getValue().toString();

inst.setGroupNumber(Integer.parseInt(grpNumber));
}

inst.setSuperGroupCode(msg

.getTag(MXFixedIncomeInstrumentMessage.SUPER_GROUP
_CODE)
.getValue().toString());
inst.setMatchingText(msg

.getTag(MXFixedIncomeInstrumentMessage.MATCHING_TE
XT)
.getValue().toString());

if
(msg.getTag(MXFixedIncomeInstrumentMessage.MIN_LINE) !=
null) {
String strMinLine = msg

.getTag(MXFixedIncomeInstrumentMessage.MIN_LINE).g
etValue()
.toString();

inst.setMinimumLine(Integer.parseInt(strMinLine));
}

inst.setTermText(msg.getTag(MXFixedIncomeInstrumen
tMessage.TERM_TEXT)
.getValue().toString());

inst.setTvIdentifier(msg.getTag(MXFixedIncomeInstr
umentMessage.TV)
.getValue().toString());

inst.setGroupName(msg.getTag(MXFixedIncomeInstrume
ntMessage.GROUP_NAME)
.getValue().toString());
try {
inst.setLiquidation(msg

.getTag(MXFixedIncomeInstrumentMessage.LIQUIDATION
)
.getValue().toString());
} catch (Exception e) {
// TODO: handle exception
log.error(e);
}
// FIXME
if
(msg.getTag(MXFixedIncomeInstrumentMessage.AGREEMENT) !=
null) {
Integer agreement = new Integer(msg

.getTag(MXFixedIncomeInstrumentMessage.AGREEMENT)
.getValue().toString());

inst.setAgreement(MXInstrument.Agreement.values()[
agreement]);
} else {

inst.setAgreement(MXInstrument.Agreement.FIRM_ORDE
R);
}

try {
inst.setValueDate(msg.getTag(

MXFixedIncomeInstrumentMessage.VALUE_DATE)
.getIntegerValue());
} catch (Exception e) {
log.error(e);
}

inst.setxDays(msg.getTag(MXFixedIncomeInstrumentMe
ssage.XDAYS)
.getIntegerValue());

inst.setCurrency(msg.getTag(MXFixedIncomeInstrumen
tMessage.CURRENCY)
.getValue().toString());

inst.setTitleReference(msg

.getTag(MXFixedIncomeInstrumentMessage.TITLE_REFER
ENCE)
.getValue().toString());

char flag =
msg.getTag(MXFixedIncomeInstrumentMessage.OPERATION_FLAG)

.getValue().toString().charAt(0);
switch (flag) {
case 'I':
case 'M':
instruments.put(inst.getKey(), inst);
break;
case 'B':
instruments.remove(inst.getKey());
break;
}

// reasign lines
if (instruments != null &&
instruments.size() != 0) {
int lastMinLine = 0;
int line = 1;
for (Instrument instrument :
instruments.values()) {
MXInstrument mxInstrument =
(MXInstrument) instrument;
if (lastMinLine !=
mxInstrument.getMinimumLine()) {
lastMinLine =
mxInstrument.getMinimumLine();
line = lastMinLine;
}
mxInstrument.setLine(line);
line++;

if (mxInstrument.getLine() ==
1) {

}
}

for (MessageListener ml : listeners) {

ml.processInstrumentDataReceived(instruments,
inst);
}

}
protected void receiveCurrentOrderData(Message msg) { Metodo que recibe los datos de la
orden de dato actual, asigna los
log.debug("Current Order received");
valores de las variables privadas
Tag market = finales a los campos del tag market,
msg.getTag(CurrentOrderMessage.MARKET); genera un registro log de los valores
Tag superGroupCode =
de los tag asignados, así mismo
msg.getTag(CurrentOrderMessage.SUPER_GROUP_CODE);
Tag groupNumber = registra los valores de los tag
msg.getTag(CurrentOrderMessage.GROUP_NUMBER); perteneciente instrument
Tag comparingText = igualmente generándole un registro
msg.getTag(CurrentOrderMessage.MATCHING_TEXT);
log y realizando la acción de
Tag bidOffer =
msg.getTag(CurrentOrderMessage.BID_OR_OFFER); eliminar o actualizar según el valor
del flag de operación.
log.debug("Market=" +
market.getValue().toString());
log.debug("Super Group code=" +
superGroupCode.getValue().toString());
log.debug("Group number=" +
groupNumber.getValue().toString());
log.debug("Comparing text=" +
comparingText.getValue().toString());

String key = market.getValue().toString()


+
superGroupCode.getValue().toString()
+
MXInstrument.GROUP_NUMBER_FOR_KEY_FORMAT.format(new
Double(

groupNumber.getValue().toString()))
+
comparingText.getValue().toString();

log.debug("Instrument key=" + key);


MXInstrument instrument = (MXInstrument)
instruments.get(key);
log.debug("Instrument:"
+ (instrument != null ?
instrument.getKey() : "invalid"));

MXOrder order = null;

if (instrument != null) {

Tag price =
msg.getTag(CurrentOrderMessage.PRICE);
Tag amount =
msg.getTag(CurrentOrderMessage.NUMBER);
Tag totalAmount =
msg.getTag(CurrentOrderMessage.TOTAL_NUMBER);
Tag code =
msg.getTag(CurrentOrderMessage.ORDER_CODE);
Tag operationFlag =
msg.getTag(CurrentOrderMessage.OPERATION_FLAG);
Tag registryType = msg

.getTag(CurrentOrderMessage.REGISTRY_TYPE_FLAG);

log.debug("Bid/Offer=" +
bidOffer.getValue());
log.debug("Code=" +
code.getValue().toString());
log.debug("Registry type=" +
registryType.getValue().toString());
log.debug("Operation flag=" +
operationFlag.getValue().toString());

Order.Side side = null;


if
(bidOffer.getValue().toString().charAt(0) == 'O') {
side = Order.Side.OFFER;
} else if
(bidOffer.getValue().toString().charAt(0) == 'D') {
side = Order.Side.BID;
}

order = new MXOrder(instrument, side,


code.getValue().toString(),

registryType.getValue().toString().charAt(0),
price.getDoubleValue(),
amount.getDoubleValue(),
totalAmount != null ?
totalAmount.getDoubleValue() : 0);

order.setMessage(msg);

log.debug("Order key=" +
order.getKey());
log.debug("Amount=" +
order.getAmount());
log.debug("Price=" +
order.getPrice());
switch
(operationFlag.getValue().toString().charAt(0)) {
case 'I':
case 'M':
instrument.updateOrder(order);
break;
case 'B':
instrument.removeOrder(order);
break;
}
}

for (MessageListener ml : listeners) {

ml.processCurrentOrderDataReceived(instrument,
order);
}
}

public void sendTransactionOrderMessage(Order order, Metodo que permite enviar los


Class msgClass)
mensajes de las ordenes de
throws Exception {
transacciones, asigna datos de
TransactionOrderMessage toMessage = new mensaje de orden de transacción a
MXTransactionOrderMessage(); la entidad mensaje para luego de
toMessage.setDatatecFields(datatecFields);
asignado a los campos definidos en
toMessage.addTag(Tag.MESSAGE_ID,
messageId++); la entidad sean enviados.
toMessage.setClass(msgClass);
toMessage.setOrder(order);

sendMessage(toMessage);

No se encuentra código malicioso

 MXFixedIncomeInstrumentMessage : Clase que permite definir variables


estáticas finales enteras lasc cuales contienen valores constantes y un
método que hereda un estructura de tipo mensaje
public final static int OPERATION_FLAG = 20000; Se declaran variables estáticas finales de
public final static int CURRENCY = 21570;
tipo entero asignándole valores constants
public final static int ENTERED_INDEX_FLAG =
22320;
public final static int UNIQUE_CODE = 28000;
public final static int MARKET = 20440;
public final static int TERM_TEXT = 20610;
public final static int ORDER_TYPE_FLAG = 28010;
public final static int TITLE_REFERENCE = 21870;
public final static int GROUP_CODE = 22120;
public final static int SUPER_GROUP_CODE = 22180;
public final static int VALUE_DATE = 28100;
public final static int LIQUIDATION = 22230;
public final static int AGREEMENT = 28130;
public final static int XDAYS = 20570;
public final static int DAYS = 20560;
public final static int CAMA_DE_MONTO = 22250;
public final static int OPERATION_TYPE = 22240;
public final static int PEAK_LINE = 22260;
public final static int GROUP_NUMBER = 28290;
public final static int MATCHING_TEXT = 28350;
public final static int TV = 28390;
public final static int GROUP_NAME = 28440;
public final static int MIN_LINE = 28500;
public MXFixedIncomeInstrumentMessage() { Método que invoca al constructor de la
super(MSG_TYPE_MX_RF_INSTRUMENT);
} clase superior que comparta el mismo tipo
de parametrización.

No se encuentra código malicioso

 MXInstrument: Clase que permite definir variables estáticas finales,


variables privadas, clases especiales enum y métodos.
public final static NumberFormat Define una variable estatica final la cual
GROUP_NUMBER_FOR_KEY_FORMAT = new DecimalFormat(
formatea valores decimales
"00000");
public enum Agreement { Clase especial enum que contiene los datos
FIRM_ORDER,
de acuerdo
CAMA,
RONDA,
CHINGA,
MONTOS,
WEIGHTED;
}
private Market market; Delaraciones de variables privadas las
private String uniqueCode;
cuales se les generaran los métodos get y
private String term Text;
private String groupCode; set
private int groupNumber;
private String superGroupCode;
private String comparingText;
private int minimumLine;
private String titleReference;
private String tvIdentifier;
private String groupName;
private String liquidation;
private int line;
private int valueDate;
private int xDays;
private String currency;
private Agreement agreement; Se declara un objeto de tipo estructura
private Map<String, MXOrder> bids;
Agreement y dos objetos de tipo map
private Map<String, MXOrder> offers;
public String getLiquidation() { Se generan los métodos get y set para cada
variable declarada para enviar y recepcionar
return liquidation;
} valores.

public void setLiquidation(String


liquidation) {
this.liquidation = liquidation;
}

public Agreement getAgreement() {

return agreement;
}

public void setAgreement(Agreement


agreement) {

this.agreement = agreement;
}

public String getGroupName() {

return groupName;
}

public void setGroupName(String groupName)


{

this.groupName = groupName;
}
public Market getMarket() {

return market;
}

public void setMarket(Market market) {

this.market = market;
}

public String getUniqueCode() {

return uniqueCode;
}

public void setUniqueCode(String


uniqueCode) {

this.uniqueCode = uniqueCode;
}

public String getTermText() {

return term Text;


}

public void setTermText(String term Text) {

this.termText = term Text;


}

public String getGroupCode() {

return groupCode;
}
public void setGroupCode(String groupCode)
{

this.groupCode = groupCode;
}

public String getSuperGroupCode() {

return superGroupCode;
}
public void setSuperGroupCode(String
superGroupCode) {

this.superGroupCode =
superGroupCode;
}

public String getComparingText() {

return comparingText;
}
public int getMinimumLine() {

return minimumLine;
}

public void setMinimumLine(int minimumLine)


{

this.minimumLine = minimumLine;
}

public String getTitleReference() {

return titleReference;
}

public void setTitleReference(String


titleReference) {

this.titleReference =
titleReference;
}

public String getTvIdentifier() {

return tvIdentifier;
}

public void setTvIdentifier(String


tvIdentifier) {

this.tvIdentifier = tvIdentifier;
}

public int getGroupNumber() {

return groupNumber;
}
public void setGroupNumber(int groupNumber)
{

this.groupNumber = groupNumber;
}

public int getLine() {

return line;
}

public void setLine(int line) {

this.line = line;
}
public int getValueDate() {

return valueDate;
}

public void setValueDate(int valueDate) {

this.valueDate = valueDate;
}

public int getxDays() {

return xDays;
}

public void setxDays(int xDays) {

this.xDays = xDays;
}

public String getCurrency() {

return currency;
}

public void setCurrency(String currency) {

this.currency = currency;
}

public List<MXOrder> getOffersList() { Método que devuelve un objeto de tipo


lista de manera ordenada.
ArrayList<MXOrder> list = new
ArrayList<MXOrder>(offers.values());
Collections.sort(list);
return list;
}

public List<MXOrder> getBidsList() {

ArrayList<MXOrder> list = new


ArrayList<MXOrder>(bids.values());
Collections.sort(list);
return list;
}
public MXOrder removeOrder(MXOrder order) { Método que remueve una orden de las
if (order.getSide() == Order.Side.OFFER) {
estructura MXOrder.
return offers.remove(order.getKey());
} else if (order.getSide() ==
Order.Side.BID) {
return bids.remove(order.getKey());
}
return null;
}
public void updateOrder(MXOrder order) { Método que actualiza una orden de las
estructura MXOrder.
if (order.getSide() ==
Order.Side.OFFER) {
offers.put(order.getKey(),
order);
} else if (order.getSide() ==
Order.Side.BID) {
bids.put(order.getKey(),
order);
}
}
public String toString() { Método que permite obtener una cadena
con valores concatenados y lo retorna
return "mkt=[" + market.getCode() +
"] - superGroup=[" + superGroupCode como tipo string
+ "] - group=[" +
groupCode + "] - term Text=[" + term Text
+ "] -
titleReference=[" + titleReference
+ "] - tvIdentifier=["
+ tvIdentifier + "] - comparingText["
+ comparingText + "]";
}
public boolean equals(Object o) { Método que compara un objeto con los
elementos de la estructura MXInstrument
if (this == o) {
return true;
}
if (o instanceof MXInstrument) {
MXInstrument other =
(MXInstrument) o;
return this.compareTo(other)
== 0;
}
return false;
}
public int hashCode() { Método que devuelve un número entero
que 'identifica' al objeto cuando se guarda
int hc = 19 * uniqueCode.hashCode();
en una estructura de datos conocida
return hc;
como HashMap
public String getKey() { Metodo que se usa para obtener una clase
return market.getCode() +
superGroupCode
+
GROUP_NUMBER_FOR_KEY_FORMAT.format(groupNumber)
+ comparingText;
}
public MXInstrument() { Metodo que se usa para generar hashMap y
asignarlos a variables de tipo objeto
bids = new HashMap<String,
MXOrder>();
offers = new HashMap<String,
MXOrder>();
}

No se encuentra código malicioso

 MXOrder: Clase que permite definir variables estáticas finales y métodos.


public final static char Metodo que declara variables estáticas
REGISTRY_TYPE_BEST_PRICE_ACCUMULATED = 'A';
finales que almacenan valores constantes
public final static char
REGISTRY_TYPE_BEST_PRICE_SINGLE_ORDER = 'B';
public final static char
REGISTRY_TYPE_SIMPLE_ORDER = 'P';
public final static int MIN_AMOUNT = 50000000;
private MXInstrument instrument Declara una estructura privada de tipo
Instrumento
private char registryTypeFlag; Declara una variable de tipo carácter

public MXOrder(MXInstrument instrument, Side, Constructor que hace referencia a una clase
String code,
padre y le envía parámetros , así mismo
char registryTypeFlag, double
rate, double amount, almacena los valores como instrumento un
double totalAmount) { tipo de registro flag

super(instrument.getMarket(), side,
code, rate, amount, totalAmount);

this.instrument = instrument;
this.registryTypeFlag =
registryTypeFlag;

}
public MXInstrument getInstrument() { Método get y set de las estructura
return instrument;
Instrument
}
public void setInstrument(MXInstrument
instrument) {
this.instrument = instrument;
}
public String getKey() { Método para generar código, el Código de
return getMarket().getCode() + registryTypeFlag +
pedido Se utiliza con el "indicador de tipo de
code;
} registro" y el mercado para crear un
identificador único del pedido
public int compareTo(MXOrder o) { Método que permite comparar el valor de la
int c = super.compareTo(o);
variebles finales constantes con el valor del
if (c == 0) {
if (this.registryTypeFlag == tipo de registro flag y retorna un valor entero
REGISTRY_TYPE_BEST_PRICE_ACCUMULATED como resultado de la comparación
&& o.registryTypeFlag !=
REGISTRY_TYPE_BEST_PRICE_ACCUMULATED) {
return -1;
} else if
(this.registryTypeFlag !=
REGISTRY_TYPE_BEST_PRICE_ACCUMULATED
&& o.registryTypeFlag
== REGISTRY_TYPE_BEST_PRICE_ACCUMULATED) {
return 1;
}
c = code.compareTo(o.code);
}
return c;
}
public Market getMarket() { Metodo para obtener los valores del
if (instrument == null) {
Mercado y el registro de tipo Flag
return null;
}
return instrument.getMarket();
}

public char getRegistryTypeFlag() {

return registryTypeFlag;
}

public void setRegistryTypeFlag(char


registryTypeFlag) {

this.registryTypeFlag =
registryTypeFlag;
}

No se encuentra código malicioso

 MXTransactionOrderMessage: Clase que permite agregar elementos de


tipo Tag a valores de entidades declaradas
MXOrder = (MXOrder) order; Metodo que permite agregar tag los campos
MXInstrument instrument =
de las entidades de tipo order y de tipo
mxOrder.getInstrument();
instrument,asi mismo modifica o retirar
addTag(new Tag(MARKET, orden
instrument.getMarket().getCode()));
addTag(new Tag(BID_OR_OFFER,
order.getSide().getCode()));
addTag(new Tag(VALUE_DATE,
instrument.getValueDate()));
addTag(new Tag(XDAYS,
instrument.getxDays()));
addTag(new Tag(TERM_TEXT,
instrument.getTermText()));

addTag(new Tag(PRICE,
order.getPrice()));
addTag(new Tag(NUMBER,
AMOUNT_FORMAT.format(order.getAmount())));
// setTag(new Tag(MIN_NUMBER,
AMOUNT_FORMAT.format(order.getAmount())));
// Drop (Iceberg) orders
if (order.getTotalAmount() > 0
&&
order.getTotalAmount() > order.getAmount()) {
addTag(new Tag(TOTAL_NUMBER,
AMOUNT_FORMAT.format(order

.getTotalAmount())));
}

addTag(new Tag(CURRENCY,
instrument.getCurrency()));

addTag(new Tag(GROUP_CODE,
instrument.getGroupCode()));

addTag(new Tag(LIQUIDATION,
instrument.getLiquidation()));

addTag(new
Tag(FI_INSTRUMENT_IDENTIFIER,
instrument.getTitleReference()));

if (order.getGoodFor() > 0) {
addTag(new
Tag(LIQUIDATION_NUMBER, order.getGoodFor()));
}

// modify or withdraw order


if (order.getMessage() != null) {
addTag(new Tag(ORDER_CODE,
order.getMessage()

.getTag(CurrentOrderMessage.ORDER_CODE).get
Value()));
}

No se encuentra código malicioso

9. com.datatec.gui

 AbstractDialog.java: Clase java AbstractDialog se define clases enum,


objetos, métodos y métodos públicos.
public enum Option { Clase enum que almacena
OK,
valores constante
CANCEL
}
protected Option opcion; Declaran objetos como
private JButton btnOk;
option,button y panel
private JButton btnCancel;
protected JPanel pnlBotones;
public AbstractDialog(String titulo, boolean modal, boolean Constructor que define la
cancelOnly) {
cancelación de una acción
this(titulo, modal);
if (cancelOnly) {
pnlBotones.remove(btnOk);
}
}

public AbstractDialog(String titulo, boolean modal) { Constructor que define la


construcción de un JPanel
super();
setModal(modal); asignando atributos y
setTitle(titulo); acciones de objetos

btnOk = new JButton("Ok");


btnOk.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent


arg0) {

doOk();

}
});
btnCancel = new JButton("Cancel");
btnCancel.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent


arg0) {

doCancel();

}
});

pnlBotones = new JPanel(new


FlowLayout(FlowLayout.RIGHT));

pnlBotones.setBorder(BorderFactory.createMatteBorder(1,
0, 0, 0,
Color.LIGHT_GRAY));
pnlBotones.add(btnOk);
pnlBotones.add(btnCancel);
add(pnlBotones, BorderLayout.SOUTH);
agregarActionEnter(pnlBotones);
}

public void center() { Método que permite centrar


el panel con su contenido
GraphicsEnvironment env =
GraphicsEnvironment incluido.
.getLocalGraphicsEnvironment();
Rectangle bounds =
env.getMaximumWindowBounds();
int py = (bounds.height -
this.getSize().height) / 2;
int px = (bounds.width -
this.getSize().width) / 2;
setLocation(px, py);
}
protected void doCancel() { Metodo que asigna la opción
de cancel y liberarlo
opcion = Option.CANCEL;
dispose();
}
protected void doOk() { Metodo que asigna la opción
de ok y liberarlo
opcion = Option.OK;
dispose();
}
public Option getOption() { Metodo que retorna la
opción seleccionada
return opcion;
}
protected void agregarActionEnter(JPanel panel) { Metodo que se ejecuta
cuando se pulsa el botón
panel.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put( enter sobre un objeto del
panel e invocando al método
KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0), doOK.
"enterPressed");
panel.getActionMap().put("enterPressed",
new AbstractAction("enterPressed") {

public void
actionPerformed(ActionEvent actionEvent) {

doOk();
}
});
}

No se encuentra código malicioso

 DatatecFrame.java: Clase java DatatecFrame se define objetos, métodos y


métodos públicos.
protected static Logger log = Logger Se declara el objeto de tipo
.getLogger(DatatecFrame.class.getName());
log para almacenar las
incidencias que pueda pasar
en la ejecución del
formulario
protected JButton createMinButton(String path, String txt, int Método donde se degine un
iconSize) {
objeto de tipo JButton
JButton btn = createButton(path, txt); asignando sus principales
atributos
btn.setMargin(new Insets(0, 0, 0, 0));
Dimension d = btn.getSize();
d.height = iconSize + 3;
d.width = iconSize + 4;
btn.setMinimumSize(d);
btn.setMaximumSize(d);
btn.setPreferredSize(d);
return btn;
}
protected JButton createMinButton(String path, String txt) { Método que se crea para
invocar a otro método
return createMinButton(path, txt, 24);
(createMinButton)
}
protected JButton createButton(String path, String txt) { Se crear un botón
asignándole un mensaje
URL = MarketFrame.class.getResource(path);
ImageIcon img = new ImageIcon(url); cuando se pone encima el
JButton tmp = new JButton(img); cursor, se le asigna una
tmp.setToolTipText(txt); imagen.
return tmp;
}
protected void showMessageForLine(JTable table) { Método que permite cargar
de valores a un objeto Jtable
int selectedRow = table.getSelectedRow();
int translatedRow = Deacuerdo al modelo de
table.convertRowIndexToModel(selectedRow); tabla estructurada
int selectedColumn = table.getSelectedColumn();

log.debug("double click [r,c]: " + selectedRow +


"," + selectedColumn);

SimpleTableModel otm = (SimpleTableModel)


table.getModel();

showMessage(otm.getObjectList().get(translatedRow));
}
protected void showMessage(Object msgContainer) { Método que permite
mostrar un mensaje dentro
MessageFrame msgFrame = null;
if (msgContainer instanceof Message) { de un objeto frame
msgFrame = new MessageFrame((Message)
msgContainer);
} else if (msgContainer instanceof
MessageContainer) {
msgFrame = new
MessageFrame((MessageContainer) msgContainer);
}

if (msgFrame != null) {
Point p = this.getLocation();
msgFrame.setLocation(p.x + 60, p.y + 60);
msgFrame.setVisible(true);
}

No se encuentra código malicioso

 DatatecTableColumn : se declaran variable de tipo cadena y un objeto


public String getTitle(); Se obtiene variables de tipo
titulo
public Class<?> getType(); Se obtiene un objeto de tipo
desconocido

No se encuentra código malicioso

 NestedTableCellRenderer: se declaran métodos para realizar diversos tipos


de acciones en los JTables
public final static int FIXED_ROW_HEIGHT = 16; Se declara una variable
estatica entero final que
almacena un valor constant
protected JTable table; Se declara objeto de tipo
protected SimpleTableModel model;
JPanel
public NestedTableCellRenderer(SimpleTableModel model) { Metodo que asigna un nuevo
this.model = model;
modelo a un objeto JTable
table = new JTable(model);
}
protected void setTable(JTable table) { Metodo que permite activar
this.table = table;
la selección de una fila de un
// add(this.table, BorderLayout.CENTER);
this.table.setRowSelectionAllowed(true); JTable
}
public void setColumnWidth(int index, int width) { Método que asigna atributos
a las columnas de un JTable
if (index >= model.getColumnCount()) {
throw new IllegalArgumentException();
}
TableColumn column =
table.getColumnModel().getColumn(index);
column.setWidth(width);
column.setPreferredWidth(width);
column.setMaxWidth(width);
column.setMinWidth(width);
}
public void setColumAlignment(int index, int alignment) { Método que determina las
columnas que se van a
if (index >= model.getColumnCount()) {
throw new IllegalArgumentException(); alinear de manera horizontal
} las columnas de un JTable
TableColumn column =
table.getColumnModel().getColumn(index);
DefaultTableCellRenderer tmp = new
DefaultTableCellRenderer();
tmp.setHorizontalAlignment(alignment);
column.setCellRenderer(tmp);
}
public Component getTableCellRendererComponent(JTable table, Método de un componente
Object value,
JTable que permite
boolean isSelected, boolean hasFocus, int
row, int column) { renderizar el contenido de
una celda definiendo su
if (!(value instanceof List<?>)) {
throw new IllegalArgumentException(); comportamiento tal como se
}
le define.
List<?> l = (List<?>) value;
model.setObjectList(l);
Dimension d = this.table.getSize();
d.height = model.getRowCount() * FIXED_ROW_HEIGHT;
this.table.setSize(d);
return this.table;
// return this;
}
public TableCellRenderer getCellRenderer(int row, int column) { Método que invoca a
método getCellRenderer
return table.getCellRenderer(row, column);
para enviarle como
}
parámetros la fila y
columna obtenida de un
objeto JTable
public int getRowCount() { Metodo que obtiene la
cantidad de filas.
return model.getRowCount();
}
public JTable getTable() { Metodo que obtiene el
return table;
JTable.
}

No se encuentra código malicioso

 OrderTableModel: Método que permite definir el modelo que contendrá el


contenido del JTable.
private final static DateFormat MATURITY_DATE_FORMAT = new Se declara la variable
SimpleDateFormat("dd-MMM-yyyy"); MATURITY_DATE_FORMAT la cual
se le realiza un formato de fecha
simple de dia, mes y año
public enum Column implements DatatecTableColumn { Se define una clase enum
// Order columns
determinando el orden de
INSTITUTION_CODE("Code", String.class),
AMOUNT("Amount", Double.class), las columnas que contendrá
PRICE("Price", Double.class), el JTable, así como cada tipo
RATE("Rate", Double.class), de dato que contendrá cada
MATURITY_DATE("MatDate", String.class),
columna.
DAYS("Days", Integer.class),
VALUE_DATE_CDBCR("VD", Integer.class),
YIELD_CDBCR("Yield%", Double.class),
VALUE_DATE_FI("VD", Integer.class),
PRICE_PCT_FI("Price%", Double.class),
YIELD_PCT_FI("Yield%", Double.class);
private Column(String title, Class<?> type) {
this.title = title;
this.type = type;
}
private String title;
private Class<?> type;
@Override
public String getTitle() {
return title;
}
@Override
public Class<?> getType() {
return type;
}
}
// Columns by market type Se define los datos de las
public static Column[] spotBidColumns = {
columnas por tipo de
Column.INSTITUTION_CODE,
Column.AMOUNT, Column.PRICE }; comercio

public static Column[] spotOfferColumns = { Column.PRICE,


Column.AMOUNT,
Column.INSTITUTION_CODE };

public static Column[] interbankBidColumns = {


Column.MATURITY_DATE,
Column.DAYS, Column.INSTITUTION_CODE,
Column.AMOUNT, Column.RATE };

public static Column[] interbankOfferColumns = {


Column.MATURITY_DATE,
Column.DAYS, Column.RATE, Column.AMOUNT,
Column.INSTITUTION_CODE };

public static Column[] depositCertificatesBidColumns = {


Column.MATURITY_DATE,
Column.INSTITUTION_CODE, Column.AMOUNT,
Column.VALUE_DATE_CDBCR, Column.YIELD_CDBCR
};

public static Column[] depositCertificatesOfferColumns = {


Column.MATURITY_DATE, Column.YIELD_CDBCR,
Column.VALUE_DATE_CDBCR,
Column.AMOUNT, Column.INSTITUTION_CODE };

public static Column[] fixedIncomeBidColumns = {


Column.MATURITY_DATE,
Column.VALUE_DATE_FI, Column.DAYS,
Column.INSTITUTION_CODE,
Column.AMOUNT, Column.YIELD_PCT_FI,
Column.PRICE_PCT_FI };

public static Column[] fixedIncomeOfferColumns = {


Column.MATURITY_DATE,
Column.VALUE_DATE_FI, Column.DAYS,
Column.PRICE_PCT_FI,
Column.YIELD_PCT_FI, Column.AMOUNT,
Column.INSTITUTION_CODE };

public OrderTableModel(Column... columns) { Metodo que se define para


heredar los campos de la
super(columns);
} columna
public Object getValueAt(int rowIndex, int columnIndex) { Metodo que permite
obtener un valor de una
if (rowIndex >= objectList.size() || columnIndex >
titles.length) { celda especifica, realiza una
return null; selección deacuerdo al valor
} obtenido en la fila y columna
seleccionada para asignarle
Object tmp = objectList.get(rowIndex);
un valor constamte
Column = (Column) columns.get(columnIndex);

// Order data
Order = (Order) tmp;

switch (column) {
case INSTITUTION_CODE:
return order.getInstitutionCode();
case AMOUNT:
return order.getAmount();
case PRICE:
case RATE:
return order.getPrice();
case MATURITY_DATE:
if (order.getMaturityDate() != null) {
return
MATURITY_DATE_FORMAT.format(order.getMaturityDate());
}
break;
case DAYS:
return order.getDays();
case VALUE_DATE_CDBCR:
case VALUE_DATE_FI:
return order.getValueDateCDBCR();
case YIELD_CDBCR:
return order.getYieldCDBCR();
case PRICE_PCT_FI:
return order.getPricePercentageFI();
case YIELD_PCT_FI:
return order.getPrice();
}
return null;
}

No se encuentra código malicioso

 PrintableColorTable: Metodo declara variabeles finales, privadas , métodos


que dan formato a un JTable
private final static Color backgroundColor = new Declara variable backgroundColor
Color(232, 232, 232);
como final asignando un valor de
color constante
private boolean printing; Declara una variable lógica para
impresión
private SimpleTableModel = null; Declara una variable de tipo
modelo de tabla
public PrintableColorTable() { Método que declara un método
super();
que define si la opción printing
printing = false;
} esta desactivado
public PrintableColorTable(TableModel modeloTabla) { Constructor que hereda el modelo
super(modeloTabla);
de tabla
}
public PrintableColorTable(SimpleTableModel modeloTabla) { Constructor que hereda el modelo
de tabla y lo asigna a la tabla
super(modeloTabla);
this.simpleTableModel = modeloTabla;
}
public void setModel(SimpleTableModel arg0) { Método que recibe un argumento
y lo asigna al modelo de la tabla
this.simpleTableModel = arg0;
super.setModel(arg0);
}
public void print(Graphics g) { Método que define si la opción
printing esta activa o no, recibe
printing = true;
try { como parámetro el objeto
super.print(g); Graphics
} finally {
printing = false;
}
}
public Component prepareRenderer(TableCellRenderer Metodo que define el modo de
renderer, int row,
impresión con respecto al fondo ,
int col) {
así mismo define si la celda esta
Component c = super.prepareRenderer(renderer, seleccionada se usara un color
row, col); resaltado
// if printing, only use plain background
if (!printing) {

if (row % 2 == 0 &&
!isCellSelected(row, col)) {

c.setBackground(backgroundColor);
// cell is selected, use the
highlight color
} else if (isCellSelected(row, col)) {

c.setBackground(getSelectionBackground());
} else {

c.setBackground(getBackground());
}
}
return c;
}
public TableColumn getColumn(Object arg0) { Metodo que se define para
obtener el valor de una columna
if (simpleTableModel != null) {
return getColumnModel() del JTable
.getColumn(

simpleTableModel

.getColumnIndex((com.datatec.gui.DatatecTableColumn)
arg0));
}
return super.getColumn(arg0);
}

No se encuentra código malicioso


 SimpleTableModel: se declaran métodos get, set, arreglos y objetos
protected String[] titles; Se declaran arreglos, Clases
protected Class<?>[] types;
desconocidas, Listas desconocidad y
protected List<?> objectList;
protected List<DatatecTableColumn> columns; listas de columnas definidas para el
JTable
public SimpleTableModel(DatatecTableColumn... Metodo que define los datos de los
columnas) {
campos títulos y tipos de las columnas
this.columns = new
ArrayList<DatatecTableColumn>(columnas.length); definidas en el JTable
titles = new String[columnas.length];
types = new Class[columnas.length];
for (int i = 0; i < columnas.length; i++) {
this.columns.add(columnas[i]);
titles[i] = columnas[i].getTitle();
types[i] = columnas[i].getType();
}
}
public void setObjectList(List<?> l) { Metodo que define la obtención de
listas de objetos
objectList = l;
fireTableDataChanged();
}
public int getRowCount() { Método que se define para la
obtención de cantidad de filas ,y valida
if (objectList == null) {
return 0; el tamaño del objeto
}
return objectList.size();
}
public int getColumnCount() { Método que define la cantidad de
columnas
return titles.length;
}
public Class<?> getColumnClass(int arg0) { Método que define una clase como
parámetro de salida recibiendo como
return types[arg0];
} parámetro un valor entero
public String getColumnName(int col) { Método que obtiene el nombre de una
columna del JTable recibiendo como
return titles[col];
} parámetro el valor de la columna
public List<?> getObjectList() { Método que obtiene una lista de
objeto y lo retorna
return objectList;
}
public int getColumnIndex(DatatecTableColumn column) { Método que devuelve el número de
return columns.indexOf(column);
índice de la columna seleccionada
}

No se encuentra código malicioso


 StatisticsTableModel : Clase que permite definir enum,métodos y
variables estáticas de tipo finales
private final static DateFormat MATURITY_DATE_FORMAT Variable estatica final el cual formatea
= new SimpleDateFormat("dd/MM/yyyy");
un valor de tipo fecha
private final static DateFormat TIME_FORMAT = new Variable estatica final el cual formatea
SimpleDateFormat("HH:mm:ss");
un valor de tipo hora
public enum Column implements DatatecTableColumn { Clase especial enum que permite
definir el nomnbre de las columnas del
TIME,
DATE, JTable.
ORDER_CODE,
MARKET,
BID_OFFER,
VALUE_DATE,
DELIVERY_DATE,
DAYS,
PHYSICAL_COMPENSATION_FLAG,
BOND_IDENTIFIER,
PRICE,
TRADED_NUMBER,
TITLE_CODE,
EMITTER,
COUNTRY_CODE,
EMITTER_CODE,
ISSUE_TYPE,
CURRENCY,
INTEREST_RATE,
EMISSION_DATE,
MATURITY_DATE,
SPOT_PRICE,
FINAL_PRICE,
YIELD_RATE,
EFFECTIVE_MONTHLY_YIELD_RATE,
ORDER_CODE_1,
TITLE_NAME,
TITLE_IDENTIFIER,
TITLE_IDENTIFIER_ALTERNATE,
EMIT_NAME,
EMIT_NAME_SHORT,
OPERATION_TICKS,
REGISTERED_FLAG,
REGISTER_HOUR,
ORIGIN_FLAG;

private Column() {

this.title = name();
this.type = String.class;
}

private Column(String title, Class<?>


type) {

this.title = title;
this.type = type;
}

private String title;


private Class<?> type;

@Override
public String getTitle() {

return title;
}

@Override
public Class<?> getType() {

return type;
}
}
public StatisticsTableModel(Column... columns) { Metodo que hereda los dasos de las
super(columns);
columnas
}
public Object getValueAt(int rowIndex, int Metodo que obtene el valor de una
columnIndex) {
celda tomando como valor la fila y la
if (rowIndex >= objectList.size() || columna la cual se ha seleccionado. Se
columnIndex > titles.length) { obtine los valores de la celda para
return null; realizar operaciones de cálculos y
}
validaciones, se muestra datos de la
Object tmp = objectList.get(rowIndex); JTable estadicticas.
Column = (Column)
columns.get(columnIndex);

// Statistics data
StatisticData statistics =
(StatisticData) tmp;

switch (column) {
case TIME:
return
TIME_FORMAT.format(statistics.getDateTime());
case PRICE:
return statistics.getPrice();
case TRADED_NUMBER:
return
statistics.getTradedNumber();
case REGISTERED_FLAG:
if (statistics.getRegisterFlag() !=
null) {
return
statistics.getRegisterFlag().getCode();
}
break;
case DAYS:
return statistics.getDays();
case MATURITY_DATE:
if (statistics.getMaturityDate() !=
null) {
return MATURITY_DATE_FORMAT

.format(statistics.getMaturityDate());
}
break;
case BOND_IDENTIFIER:
if (statistics.getBondIdentifier()
!= null) {
return
statistics.getBondIdentifier();
}
break;
case VALUE_DATE:
return statistics.getValueDate();
case EFFECTIVE_MONTHLY_YIELD_RATE:
return
statistics.getEffectiveMontlhyYieldRate();
case TITLE_CODE:
return statistics.getTitleCode();
case EMITTER_CODE:
return statistics.getEmitterCode();
case CURRENCY:
return statistics.getCurrency();
case EMISSION_DATE:
if (statistics.getEmissionDate() !=
null) {
return MATURITY_DATE_FORMAT

.format(statistics.getEmissionDate());
}
break;
case YIELD_RATE:
return statistics.getYieldRate();
default:
break;
}

return null;
}

No se encuentra código malicioso

Você também pode gostar