blob: 7f8ff3a6da3a1fef8335331d588b65c66bdc415c [file] [log] [blame]
/**
********************************************************************************
* Copyright (c) 2019-2020 Robert Bosch GmbH.
*
* This program and the accompanying materials are made
* available under the terms of the Eclipse Public License 2.0
* which is available at https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Robert Bosch GmbH - initial API and implementation
********************************************************************************
*/
package app4mc.example.tool.validation;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintStream;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import org.eclipse.app4mc.amalthea.model.Amalthea;
import org.eclipse.app4mc.amalthea.model.io.AmaltheaLoader;
import org.eclipse.app4mc.amalthea.validations.standard.AmaltheaProfile;
import org.eclipse.app4mc.amalthea.validations.standard.EMFProfile;
import org.eclipse.app4mc.validation.core.IProfile;
import org.eclipse.app4mc.validation.core.ValidationDiagnostic;
import org.eclipse.app4mc.validation.util.ProfileManager;
import org.eclipse.app4mc.validation.util.ValidationAggregator;
import org.eclipse.app4mc.validation.util.ValidationExecutor;
//@SuppressWarnings("java:S106") // Example code - Use of standard outputs is intended
public class NewValidationExample {
public static void main(String[] args) {
// example: absolute path
// final File inputFile = new File("d:/temp/democar.amxmi");
// final File outputFile = new File("d:/temp/democar_1.amxmi");
// example: relative path
final File inputFile = new File("model-input/democar.amxmi");
final File resultFile = new File("output/validation/validation-results.txt");
final File infoFile = new File("output/validation/validation-profile.txt");
System.out.println("-----------------------------\n Amalthea Validation Example \n-----------------------------");
// ***** Load model *****
Amalthea model = AmaltheaLoader.loadFromFile(inputFile);
if (model != null) {
System.out.println("reading file: " + inputFile.getAbsolutePath());
} else {
System.err.println("Error: No model loaded!");
return;
}
// ***** Create validation objects *****
List<Class<? extends IProfile>> profileList =
Arrays.asList(AmaltheaProfile.class, EMFProfile.class);
ValidationAggregator aggregator = new ValidationAggregator();
aggregator.addProfiles(profileList);
// ***** Create output directories *****
try {
Files.createDirectories(Paths.get(infoFile.getAbsoluteFile().getParent()));
Files.createDirectories(Paths.get(resultFile.getAbsoluteFile().getParent()));
} catch (IOException e1) {
System.err.println("Error: Output directories could not be created!");
return;
}
// ***** Write to info file *****
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try (PrintStream infoStream = new PrintStream(new FileOutputStream(infoFile.getAbsoluteFile(), false)))
{
System.out.println("writing file: " + infoFile.getAbsoluteFile());
infoStream.println(dateFormat.format(new Date()));
// ***** Show single profile resolution *****
infoStream.println("\n\n*** Validation Profiles ***");
ProfileManager man = new ProfileManager();
infoStream.println();
man.dumpProfile(AmaltheaProfile.class, infoStream);
infoStream.println();
man.dumpProfile(EMFProfile.class, infoStream);
// ***** Print (complex) profile info *****
infoStream.println("\n\n*** Validation info ***");
infoStream.println();
infoStream.println("Compact validation map (map1)");
infoStream.println("-----------------------------");
infoStream.println();
aggregator.dumpValidationMap1(infoStream);
infoStream.println("\n");
infoStream.println("Expanded validation map (map2)");
infoStream.println("------------------------------");
infoStream.println();
aggregator.dumpValidationMap2(infoStream);
} catch (IOException e) {
System.err.println("Error: Info file could not be created!");
}
// ***** Validate *****
ValidationExecutor executor = new ValidationExecutor(profileList);
executor.validate(model);
List<ValidationDiagnostic> results = executor.getResults();
// ***** Write to result file *****
try (PrintStream resultStream = new PrintStream(new FileOutputStream(resultFile.getAbsoluteFile(), false)))
{
System.out.println("writing file: " + resultFile.getAbsoluteFile());
resultStream.println("\nValidation results (" + dateFormat.format(new Date()) + ")");
resultStream.println("\nNumber of results: " + results.size() + "\n");
executor.dumpResultMap(resultStream);
} catch (IOException e) {
System.err.println("Error: Result file could not be created!");
}
System.out.println("\ndone.");
}
}