/*
*
* Copyright (C) 2010 Remco Bouckaert remco@cs.auckland.ac.nz
*
* This file is part of BEAST2.
* See the NOTICE file distributed with this work for additional
* information regarding copyright ownership and licensing.
*
* BEAST is free software; you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* BEAST 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with BEAST; if not, write to the
* Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
* Boston, MA 02110-1301 USA
*/
package beast.core;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
@Description(
value = "Base class for all BEAST objects, which is pretty much every class " +
"you want to incorporate in a model.",
isInheritable = false
)
abstract public class BEASTObject implements BEASTInterface{
/**
* set of Objects that have this Object in one of its Inputs *
* @deprecate use getOuputs() or BEASTObject.getOuputs(object) instead
*/
@Deprecated
public Set<BEASTInterface> outputs = new HashSet<>();
/**
* cache collecting all Inputs and InputForAnnotatedConstrutors
* indexed through input name
*/
private Map<String,Input<?>> inputcache;
/**
* @return set of Objects that have this Object in one of its Inputs
*/
@Override
public Set<BEASTInterface> getOutputs() {
return outputs;
};
@Override
public Map<String, Input<?>> getInputs() {
if (inputcache == null) {
inputcache = new HashMap<>();
try {
for (Input<?> input : listInputs()) {
inputcache.put(input.getName(), input);
}
} catch (IllegalArgumentException e) {
e.printStackTrace();
throw new RuntimeException("Problem getting inputs " + e.getClass().getName() + e.getMessage());
}
}
return inputcache;
};
// identifiable
protected String ID;
@Override
public String getID() {
return ID;
}
@Override
public void setID(final String ID) {
this.ID = ID;
}
// A default method in BEASTInterface cannot override
// a method in Object, so it needs to be in BEASTObject
@Override
public String toString() {
if (getID() != null) {
return getID();
}
return this.getClass().getSimpleName().toLowerCase();
}
} // class BEASTObject