001    /*
002     * Copyright 2011 Christian Kumpe http://kumpe.de/christian/java
003     *
004     * Licensed under the Apache License, Version 2.0 (the "License");
005     * you may not use this file except in compliance with the License.
006     * You may obtain a copy of the License at
007     *
008     *     http://www.apache.org/licenses/LICENSE-2.0
009     *
010     * Unless required by applicable law or agreed to in writing, software
011     * distributed under the License is distributed on an "AS IS" BASIS,
012     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013     * See the License for the specific language governing permissions and
014     * limitations under the License.
015     */
016    package de.kumpe.hadooptimizer.examples.functions;
017    
018    import java.awt.Color;
019    import java.awt.FontMetrics;
020    import java.awt.Graphics;
021    import java.awt.Graphics2D;
022    import java.util.Collection;
023    import java.util.concurrent.CopyOnWriteArrayList;
024    
025    import de.kumpe.hadooptimizer.EvaluationResult;
026    import de.kumpe.hadooptimizer.impl.ReportingHalterWrapper.Reporter;
027    
028    public class ResultReporterPanel extends AxisPanel implements
029                    Reporter<double[]> {
030            private static final long serialVersionUID = 1L;
031    
032            private final Collection<EvaluationResult<double[]>> results = new CopyOnWriteArrayList<EvaluationResult<double[]>>();
033    
034            @Override
035            public void report(
036                            final Collection<EvaluationResult<double[]>> evaluationResults) {
037                    results.add(evaluationResults.iterator().next());
038                    repaint();
039            }
040    
041            @Override
042            protected void paintComponent(final Graphics graphics) {
043                    super.paintComponent(graphics);
044    
045                    final Graphics2D g = (Graphics2D) graphics;
046                    final FontMetrics fm = g.getFontMetrics();
047    
048                    g.setColor(Color.RED);
049    
050                    for (final EvaluationResult<double[]> result : results) {
051                            final double[] individual = result.getIndividual();
052                            final int x = x(individual[0]);
053                            final int y = y(individual[1]);
054    
055                            g.drawLine(x - 2, y - 2, x + 2, y + 2);
056                            g.drawLine(x + 2, y - 2, x - 2, y + 2);
057    
058                            g.drawString(format(result.getEvaluation()), x + 3,
059                                            y + fm.getHeight());
060                    }
061            }
062    }