An error occurred while loading the file. Please try again.
CompetencyAssessmentUtil.java 4.49 KiB
package de.hftstuttgart.dtabackend.utils;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.net.MalformedURLException;
import java.nio.file.Path;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import com.fasterxml.jackson.core.exc.StreamReadException;
import com.fasterxml.jackson.databind.DatabindException;
import com.fasterxml.jackson.databind.ObjectMapper;
import de.hftstuttgart.dtabackend.models.Result;
import de.hftstuttgart.dtabackend.models.ResultSummary;
import de.hftstuttgart.dtabackend.models.TestCompetencyProfile;
import java.io.FileNotFoundException;
public class CompetencyAssessmentUtil {
	private static final Logger LOG = LogManager.getLogger(CompetencyAssessmentUtil.class);
	public static String TEST_COMPETENCY_MANIFEST_FILE_NAME="competency-tests.mft";
	public static void main(String[] args) throws StreamReadException, DatabindException, MalformedURLException, IOException {
		ResultSummary summary=ExecuteTestUtil.generateResult(Path.of(args[0]), Path.of(args[1]));
        System.out.println(summary.successfulTestCompetencyProfile);
	public static float[] sumTestCompetencyProfiles(List<TestCompetencyProfile> testCompetencyProfiles) {
		float[] tcpTotalProfile=new float[TestCompetencyProfile.MAX_COMPETENCY_DIMENSIONS];
		for(TestCompetencyProfile currentProfile: testCompetencyProfiles) {
			tcpTotalProfile=TestCompetencyProfile.competencySum(tcpTotalProfile, currentProfile.competencyAssessments);
		return tcpTotalProfile;
	public static float[] sumSuccessfulCompetencyProfiles(List<TestCompetencyProfile> testCompetencyProfiles, ResultSummary resultSummary) {
		float[] sumSuccessful=new float[TestCompetencyProfile.MAX_COMPETENCY_DIMENSIONS];
		for(Result currentResult: resultSummary.results) {
			if(currentResult.state==Result.State.SUCCESS.ordinal()) {
				TestCompetencyProfile currentProfile=new TestCompetencyProfile();
				currentProfile.testPackageName=(currentResult.packageName!=null)?currentResult.packageName:"";
				currentProfile.testClassName=(currentResult.className!=null)?currentResult.className:"";
				currentProfile.testName=(currentResult.name!=null)?currentResult.name:"";
				int testIndex=testCompetencyProfiles.indexOf(currentProfile);
				if(testIndex!=-1) {
					sumSuccessful=TestCompetencyProfile.competencySum(sumSuccessful, testCompetencyProfiles.get(testIndex).competencyAssessments);
		return sumSuccessful;
	public static List<TestCompetencyProfile> readTestCompetencyProfiles(Path testPath, String fileName) {
		List<TestCompetencyProfile> testCompetencyProfiles=new ArrayList<TestCompetencyProfile>();
		try {
			BufferedReader testCompetencyManifest=new BufferedReader(new FileReader(new File(testPath.toFile(), fileName)));
			String testEntry=testCompetencyManifest.readLine();
			while(testEntry!=null)
				String[] testEntyComponents=testEntry.split(TestCompetencyProfile.COMPETENCY_SEPARATOR);
				TestCompetencyProfile currentProfile=new TestCompetencyProfile();
currentProfile.testPackageName=testEntyComponents[0]; currentProfile.testClassName=testEntyComponents[1]; currentProfile.testName=testEntyComponents[2]; for(int competencyIndex=0; competencyIndex<TestCompetencyProfile.MAX_COMPETENCY_DIMENSIONS; competencyIndex++) { currentProfile.competencyAssessments[competencyIndex]=Float.valueOf(testEntyComponents[competencyIndex+3]); } testCompetencyProfiles.add(currentProfile); testEntry=testCompetencyManifest.readLine(); } testCompetencyManifest.close(); LOG.info("Added "+testCompetencyProfiles.size()+" test competency profiles from test competency manifest. Optional agent functionality enabled."); } catch (FileNotFoundException e) { LOG.info("Test competency manifest file for agent feedback not found. Skipping optional functionality."); testCompetencyProfiles=null; } catch (IOException e) { LOG.info("Test competency manifest file for agent feedback unreadable. Skipping optional functionality."); testCompetencyProfiles=null; } return testCompetencyProfiles; } public static String packFloats(float[] array) { return IntStream.range(0, array.length) .mapToObj(i -> String.valueOf(array[i])) .collect(Collectors.joining(";")); } }