ProposedExpressionAnalyserBlackboardView.java
package de.uka.ipd.sdq.beagle.core.analysis;
import de.uka.ipd.sdq.beagle.core.AnalysisController;
import de.uka.ipd.sdq.beagle.core.Blackboard;
import de.uka.ipd.sdq.beagle.core.BlackboardStorer;
import de.uka.ipd.sdq.beagle.core.ExternalCallParameter;
import de.uka.ipd.sdq.beagle.core.MeasurableSeffElement;
import de.uka.ipd.sdq.beagle.core.ProjectInformation;
import de.uka.ipd.sdq.beagle.core.ResourceDemandingInternalAction;
import de.uka.ipd.sdq.beagle.core.SeffBranch;
import de.uka.ipd.sdq.beagle.core.SeffLoop;
import de.uka.ipd.sdq.beagle.core.evaluableexpressions.EvaluableExpression;
import de.uka.ipd.sdq.beagle.core.judge.EvaluableExpressionFitnessFunction;
import de.uka.ipd.sdq.beagle.core.judge.EvaluableExpressionFitnessFunctionBlackboardView;
import de.uka.ipd.sdq.beagle.core.measurement.BranchDecisionMeasurementResult;
import de.uka.ipd.sdq.beagle.core.measurement.LoopRepetitionCountMeasurementResult;
import de.uka.ipd.sdq.beagle.core.measurement.ParameterChangeMeasurementResult;
import de.uka.ipd.sdq.beagle.core.measurement.ResourceDemandMeasurementResult;
import org.apache.commons.lang3.Validate;
import org.apache.commons.lang3.builder.HashCodeBuilder;
import java.io.Serializable;
import java.util.Collection;
import java.util.Set;
/**
* View of the {@link Blackboard} designed to be used by {@link MeasurementResultAnalyser}
* . It allows reading access and adding access for
* {@linkplain ResourceDemandingInternalAction resource demanding internal actions},
* {@linkplain SeffBranch SEFF branches}, {@linkplain SeffLoop SEFF loops},
* {@linkplain ExternalCallParameter external call parameters}, reading, writing, and the
* fitness function.
*
* @author Christoph Michelbach
* @author Michael Vogt
*/
public class ProposedExpressionAnalyserBlackboardView implements EvaluableExpressionFitnessFunctionBlackboardView {
/**
* Blackboard instance committed from the {@link AnalysisController}.
*/
private final Blackboard blackboard;
/**
* Set the blackboard instance from the {@link AnalysisController} to the private
* blackboard attribute.
*
* @param blackboard The blackboard given from the {@link AnalysisController}.
*/
public ProposedExpressionAnalyserBlackboardView(final Blackboard blackboard) {
Validate.notNull(blackboard);
this.blackboard = blackboard;
}
@Override
public boolean equals(final Object object) {
if (object == null) {
return false;
}
if (object == this) {
return true;
}
if (object.getClass() != ProposedExpressionAnalyserBlackboardView.class) {
return false;
}
final ProposedExpressionAnalyserBlackboardView other = (ProposedExpressionAnalyserBlackboardView) object;
return this.blackboard == other.blackboard;
}
/**
* Delegates to {@link de.uka.ipd.sdq.beagle.core.Blackboard#getAllSeffBranches()}.
*
* @return all {@linkplain ResourceDemandingInternalAction resource demanding internal
* actions} known to Beagle. Changes to the returned set will not modify the
* blackboard content. Is never {@code null}.
*/
public Set<ResourceDemandingInternalAction> getAllRdias() {
return this.blackboard.getAllRdias();
}
/**
* Delegates to {@link de.uka.ipd.sdq.beagle.core.Blackboard#getAllSeffBranches()}.
*
* @return all {@linkplain SeffBranch SEFF branches} known to Beagle. Changes to the
* returned set will not modify the blackboard content. Is never {@code null}.
*/
public Set<SeffBranch> getAllSeffBranches() {
return this.blackboard.getAllSeffBranches();
}
/**
* Delegates to {@link de.uka.ipd.sdq.beagle.core.Blackboard#getAllSeffLoops()}.
*
* @return all {@linkplain SeffLoop SEFF loops} known to Beagle. Changes to the
* returned set will not modify the blackboard content. Is never {@code null}.
*/
public Set<SeffLoop> getAllSeffLoops() {
return this.blackboard.getAllSeffLoops();
}
/**
* Delegates to
* {@link de.uka.ipd.sdq.beagle.core.Blackboard#getAllExternalCallParameters()}.
*
* @return All {@linkplain ExternalCallParameter external call parameters} known to
* Beagle. Is never {@code null}.
*/
public Set<ExternalCallParameter> getAllExternalCallParameters() {
return this.blackboard.getAllExternalCallParameters();
}
/**
* Delegates to
* {@link de.uka.ipd.sdq.beagle.core.Blackboard#addToBeMeasuredRdias(Collection)}.
*
* @param rdias Resource demanding internal actions that shall be measured. Must not
* be {@code null} and must be known to this blackboard.
*/
public void addToBeMeasuredRdias(final Collection<ResourceDemandingInternalAction> rdias) {
this.blackboard.addToBeMeasuredRdias(rdias);
}
/**
* Delegates to
* {@link de.uka.ipd.sdq.beagle.core.Blackboard#addToBeMeasuredSeffBranches(Collection)}
* .
*
* @param branches SEFF branches that shall be measured. Must not be {@code null} and
* must be known to this blackboard.
*/
public void addToBeMeasuredSeffBranches(final Collection<SeffBranch> branches) {
this.blackboard.addToBeMeasuredSeffBranches(branches);
}
/**
* Delegates to
* {@link de.uka.ipd.sdq.beagle.core.Blackboard#addToBeMeasuredSeffLoops(Collection)}.
*
* @param loops SEFF Loops that shall be measured. Must not be {@code null} and must
* be known to this blackboard.
*/
public void addToBeMeasuredSeffLoops(final Collection<SeffLoop> loops) {
this.blackboard.addToBeMeasuredSeffLoops(loops);
}
/**
* Delegates to
* {@link de.uka.ipd.sdq.beagle.core.Blackboard#addToBeMeasuredExternalCallParameters(Collection)}
* .
*
* @param parameters external call parameters that shall be measured. Must not be
* {@code null} and must be known to this blackboard.
*/
public void addToBeMeasuredExternalCallParameters(final Collection<ExternalCallParameter> parameters) {
this.blackboard.addToBeMeasuredExternalCallParameters(parameters);
}
/**
* Delegates to
* {@link de.uka.ipd.sdq.beagle.core.Blackboard#getMeasurementResultsFor( ResourceDemandingInternalAction)}
* .
*
* @param rdia An resource demanding internal action to get the measurement results
* of. Must not be {@code null}.
* @return All measurement results reported for {@code rdia}. Changes to the returned
* set will not modify the blackboard content. Is never {@code null}.
* @see de.uka.ipd.sdq.beagle.core.Blackboard#getMeasurementResultsFor(
* ResourceDemandingInternalAction)
*/
@Override
public Set<ResourceDemandMeasurementResult> getMeasurementResultsFor(final ResourceDemandingInternalAction rdia) {
return this.blackboard.getMeasurementResultsFor(rdia);
}
/**
* Delegates to
* {@link de.uka.ipd.sdq.beagle.core.Blackboard#getMeasurementResultsFor(SeffBranch)}.
*
* @param branch A SEFF Branch to get the measurement results of. Must not be
* {@code null}.
* @return All measurement results reported for {@code branch}. Changes to the
* returned set will not modify the blackboard content. Is never {@code null}.
* @see de.uka.ipd.sdq.beagle.core.Blackboard#getMeasurementResultsFor(SeffBranch)
*/
@Override
public Set<BranchDecisionMeasurementResult> getMeasurementResultsFor(final SeffBranch branch) {
return this.blackboard.getMeasurementResultsFor(branch);
}
/**
* Delegates to
* {@link de.uka.ipd.sdq.beagle.core.Blackboard#getMeasurementResultsFor(SeffLoop)}.
*
* @param loop A SEFF Loop to get the measurement results of. Must not be {@code null}
* .
* @return All measurement results reported for {@code loop}. Changes to the returned
* set will not modify the blackboard content. Is never {@code null}.
* @see de.uka.ipd.sdq.beagle.core.Blackboard#getMeasurementResultsFor(SeffLoop)
*/
@Override
public Set<LoopRepetitionCountMeasurementResult> getMeasurementResultsFor(final SeffLoop loop) {
return this.blackboard.getMeasurementResultsFor(loop);
}
/**
* Delegates to
* {@link de.uka.ipd.sdq.beagle.core.Blackboard#getMeasurementResultsFor(ExternalCallParameter)}
* .
*
* @param externalCallParameter An external parameter to get the measurement results
* of. Must not be {@code null}.
* @return All measurement results reported for {@code loexternalCallParameterop}.
* Changes to the returned set will not modify the blackboard content. Is
* never {@code null}.
* @see de.uka.ipd.sdq.beagle.core.Blackboard#getMeasurementResultsFor(ExternalCallParameter)
*/
@Override
public Set<ParameterChangeMeasurementResult> getMeasurementResultsFor(
final ExternalCallParameter externalCallParameter) {
return this.blackboard.getMeasurementResultsFor(externalCallParameter);
}
/**
* Delegates to
* {@link de.uka.ipd.sdq.beagle.core.Blackboard#getProposedExpressionFor(MeasurableSeffElement)}
* .
*
* @param element A SEFF element. Must not be {@code null}.
* @return All measruement results reported for {@code evaluableExpression}. Changes
* to the returned set will not modify the blackboard content. Is never
* {@code null}.
* @see de.uka.ipd.sdq.beagle.core.Blackboard#getProposedExpressionFor(MeasurableSeffElement)
*
*/
public Set<EvaluableExpression> getProposedExpressionFor(final MeasurableSeffElement element) {
return this.blackboard.getProposedExpressionFor(element);
}
/**
* Delegates to {@link de.uka.ipd.sdq.beagle.core.Blackboard#getFitnessFunction()} .
*
* @return An object which holds and is responsible allows access to the fitness
* function grading {@linkplain EvaluableExpression evaluable expressions}
* regarding their fitness.
* @see de.uka.ipd.sdq.beagle.core.Blackboard#getFitnessFunction()
*/
public EvaluableExpressionFitnessFunction getFitnessFunction() {
return this.blackboard.getFitnessFunction();
}
/**
* Information about the project belonging to this blackboard.
*
* @return Information about the project belonging to this blackboard.
*/
public ProjectInformation getProjectInformation() {
return this.blackboard.getProjectInformation();
}
/**
* Delegates to {@link de.uka.ipd.sdq.beagle.core.Blackboard#readFor(Class)} .
*
* @param writer The class the desired data was written for. Must not be {@code null}.
* @param <WRITTEN_TYPE> The type of the data to be read.
* @return The data written in the last call to
* {@linkplain de.uka.ipd.sdq.beagle.core.Blackboard#writeFor(Class, Serializable)}
* for {@code writer}. {@code null} if no data has been written for
* {@code writer} yet.
* @see de.uka.ipd.sdq.beagle.core.Blackboard#readFor(Class)
*/
@Override
public <WRITTEN_TYPE extends Serializable> WRITTEN_TYPE readFor(
final Class<? extends BlackboardStorer<WRITTEN_TYPE>> writer) {
return this.blackboard.readFor(writer);
}
/**
* Delegates to
* {@link de.uka.ipd.sdq.beagle.core.Blackboard#writeFor(Class, Serializable)} .
*
* @param writer The class the data should be written for. Must not be {@code null}.
* @param written The data to write.
* @param <WRITTEN_TYPE> {@code written}’s type.
* @see de.uka.ipd.sdq.beagle.core.Blackboard#writeFor(Class, Serializable)
*/
@Override
public <WRITTEN_TYPE extends Serializable> void writeFor(
final Class<? extends BlackboardStorer<WRITTEN_TYPE>> writer, final WRITTEN_TYPE written) {
this.blackboard.writeFor(writer, written);
}
@Override
public int hashCode() {
// you pick a hard-coded, randomly chosen, non-zero, odd number
// ideally different for each class
return new HashCodeBuilder(435, 453).append(this.blackboard).toHashCode();
}
}