/******************************************************************************* * Copyright 2006 - 2012 Vienna University of Technology, * Department of Software Technology and Interactive Systems, IFS * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. ******************************************************************************/ package at.tuwien.minimee.migration.engines; import java.util.ArrayList; import java.util.List; import at.tuwien.minimee.registry.ToolRegistry; import eu.scape_project.planning.model.beans.MigrationResult; import eu.scape_project.planning.model.measurement.Measure; import eu.scape_project.planning.model.measurement.Measurement; /** * This engine combines the output of several other engines, i.e. * it calls the configured engines and returns the set of all measurements. * It does not perform any measurements itself * @author Christoph Becker * */ public class MultipleMonitoringMigrationEngine extends MiniMeeDefaultMigrationEngine { private List<IMigrationEngine> engines = new ArrayList<IMigrationEngine>(); private List<String> engineNames = new ArrayList<String>(); public void addEngineName(String name) { engineNames.add(name); } public void initEngines() { for (String name: engineNames) { engines.add(ToolRegistry.getInstance().getEngine(name)); } } /** * forwards the migration request to all configured engines * and collects their results. * Forwarding is done sequentially, one AFTER the other. */ public MigrationResult migrate(byte[] data, String toolID, String params) { MigrationResult result = new MigrationResult(); StringBuffer report = new StringBuffer(); for (IMigrationEngine engine: engines) { // execute tool on all migration engines (ideally in parallel) report.append("migrating with engine "+engine.getName()+":\n"); MigrationResult r = engine.migrate(data, toolID, params); report.append(r.getReport()).append("\n------------------- ------------\n"); // get all performance data and put them together in the order the engines are defined for (Measure measure : engine.getMeasures()) { result.getMeasurements().put(measure.getUri(),r.getMeasurements().get(measure.getUri())); } for (Measurement m : r.getMeasurements().values()) { if (m.getMeasureId().contains(":normalised")) { result.getMeasurements().put(m.getMeasureId(),m); } }// TODO define proper models and IDs for these measurements // Let's be nice for now - we can still get more defensive later on // and check consistency, i.e. identity of the produced byte arrays, etc. if (r.isSuccessful()) { result.setMigratedObject(r.getMigratedObject()); result.setTargetFormat(r.getTargetFormat()); result.setSuccessful(true); } } normaliseMeasurements(result, toolID); result.setReport(report.toString()); return result; } public List<Measure> getMeasures() { List<Measure> props = new ArrayList<Measure>(); for (IMigrationEngine e: engines) { props.addAll(e.getMeasures()); } return props; // TODO avoid duplicates! } }