/*
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.util.checkpoint.status;
import java.util.Collection;
import es.uvigo.darwin.prottest.global.options.ApplicationOptions;
import es.uvigo.darwin.prottest.global.options.SerializableApplicationOptions;
import es.uvigo.darwin.prottest.model.Model;
import es.uvigo.darwin.prottest.util.exception.ProtTestInternalException;
public class ProtTestStatus extends ApplicationStatus {
private static final long serialVersionUID = 1L;
private SerializableApplicationOptions applicationOptions;
private Model[] models;
public Model[] getModels() {
return models;
}
public SerializableApplicationOptions getApplicationOptions() {
return applicationOptions;
}
public ProtTestStatus(Model[] models, ApplicationOptions applicationOptions) {
if (applicationOptions == null)
throw new ProtTestInternalException("Wrong status format");
if (models != null
&& models.length > 0)
checkIntegrity(models, applicationOptions);
this.models = models;
this.applicationOptions = new SerializableApplicationOptions(applicationOptions);
}
private boolean checkIntegrity(Model[] models, ApplicationOptions options) {
Collection<String> matrices = options.getMatrices();
Collection<Integer> distributions = options.getDistributions();
boolean plusF = options.isPlusF();
for (Model model : models) {
if (!(matrices.contains(model.getMatrix())
&& distributions.contains(model.getDistribution()))
&& (!model.isPlusF() || plusF)
&& (model.checkAlignment(options.getAlignment())))
return false;
if (!model.checkAlignment(options.getAlignment())) {
// sets up the same alignment instance, once equality have been tested
model.setAlignment(options.getAlignment());
}
}
return true;
}
@Override
public boolean isCompatible(ApplicationStatus other) {
if (other instanceof ProtTestStatus) {
ProtTestStatus otherStatus = (ProtTestStatus)other;
if (otherStatus.getApplicationOptions().equals(getApplicationOptions()))
return true;
}
return false;
}
}