/* Copyright (C) 2009 Diego Darriba This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ package es.uvigo.darwin.prottest.global.options; import java.io.Serializable; import java.util.List; /** * This class is a serializable version of {@link ApplicationOptions ApplicationOptions}. * It has all important attributes in a concrete state of the application, and * reduces alignment ant topology to a hash, making this object much lighter * than the Application Options instance. * * @author Diego Darriba * * @since 3.0 */ public class SerializableApplicationOptions implements Serializable { private static final long serialVersionUID = 7758895101915536602L; /** The alignment, according to the alignment input file. */ protected int alignment; /** The tree, according to the tree filename. */ protected int tree; /** The number of categories. It is only useful if the distribution is gamma */ public int numberOfCategories; /** The optimization strategy mode. */ public int strategyMode; /** The matrices of the models to optimize. */ private List<String> matrices; /** The distributions of the models to optimize. */ private List<Integer> distributions; /** Boolean value to consider or not different kind of amino-acid frequencies. */ private boolean plusF; /** * Gets the alignment hash. * * @return the alignment hash */ public int getAlignment() { return alignment; } /** * Gets the phylogenetic tree hash. * * @return the tree hash */ public int getTree() { return tree; } /** * Gets the number of rate categories. * * @return the number of rate categories */ public int getNumberOfCategories() { return numberOfCategories; } /** * Gets the starting topology strategy mode. * * @return the starting topology strategy mode */ public int getStrategyMode() { return strategyMode; } /** * Gets the collection of matrix names. * * @return the collection of matrix names */ public List<String> getMatrices() { return matrices; } /** * Gets the collection of distribution identifiers. * * @return the collection of distribution identifiers */ public List<Integer> getDistributions() { return distributions; } /** * Gets the state of empirical frequencies consideration. * * @return true, if empirical frequencies are considered */ public boolean isPlusF() { return plusF; } /** * Instantiates a new serializable application options. * * @param options the actual application options instance */ public SerializableApplicationOptions(ApplicationOptions options) { this.alignment = options.getAlignment().toString().hashCode(); if (options.getTree() != null) { this.tree = options.getTree().toString().hashCode(); } this.numberOfCategories = options.ncat; this.strategyMode = options.strategyMode; this.matrices = options.getMatrices(); this.distributions = options.getDistributions(); this.plusF = options.isPlusF(); } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + alignment; result = prime * result + ((distributions == null) ? 0 : distributions.hashCode()); result = prime * result + ((matrices == null) ? 0 : matrices.hashCode()); result = prime * result + numberOfCategories; result = prime * result + (plusF ? 1231 : 1237); result = prime * result + strategyMode; result = prime * result + tree; return result; } @Override public boolean equals(Object obj) { if (this == obj) { return true; } if (obj == null) { return false; } if (getClass() != obj.getClass()) { return false; } SerializableApplicationOptions other = (SerializableApplicationOptions) obj; if (alignment != other.alignment) { return false; } if (distributions == null) { if (other.distributions != null) { return false; } } else if (!distributions.equals(other.distributions)) { return false; } if (matrices == null) { if (other.matrices != null) { return false; } } else if (!matrices.equals(other.matrices)) { return false; } if (numberOfCategories != other.numberOfCategories) { return false; } if (plusF != other.plusF) { return false; } if (strategyMode != other.strategyMode) { return false; } if (tree != other.tree) { return false; } return true; } @Override public String toString() { return "SerializableApplicationOptions [alignment=" + alignment + ", distributions=" + distributions + ", matrices=" + matrices + ", numberOfCategories=" + numberOfCategories + ", plusF=" + plusF + ", strategyMode=" + strategyMode + ", tree=" + tree + "]"; } }