package com.rapidminer.test.utils;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.rapidminer.Process;
import com.rapidminer.operator.IOObject;
import com.rapidminer.repository.DataEntry;
import com.rapidminer.repository.Folder;
import com.rapidminer.repository.IOObjectEntry;
import com.rapidminer.repository.RepositoryException;
public class Util {
/**
* Token between the process name and the number for the expected results.
*/
public static final String EXPECTED_TOKEN = "-expected-port-";
/**
* Returns all expected results for the specified process. These are all ioobjects which are directly
* contained in the folder of the process.
*
* @throws RepositoryException
*/
public static List<IOObject> getExpectedResult( Process process ) throws RepositoryException {
Map<Integer, IOObject> results = new HashMap<Integer, IOObject>();
Folder folder = (Folder) process.getRepositoryLocation().parent().locateEntry();
for( DataEntry entry : folder.getDataEntries() ) {
if( entry instanceof IOObjectEntry ) {
IOObjectEntry ioo = (IOObjectEntry) entry;
String name = ioo.getLocation().getName();
// All expected results begin with port and the number of the port
String expectedPrefix = process.getRepositoryLocation().getName()+EXPECTED_TOKEN;
if( name.startsWith(expectedPrefix) ) {
String number = name.substring(expectedPrefix.length());
try {
int i = Integer.parseInt(number);
results.put(i, ((IOObjectEntry) entry).retrieveData(null));
} catch (NumberFormatException e) {
// Can not parse so this is not a valid ioobject for the test and we will skip this
}
}
}
}
List<Integer> keys = new ArrayList<Integer>(results.keySet());
Collections.sort(keys);
List<IOObject> sortedResults = new ArrayList<IOObject>();
for( Integer key : keys ) {
sortedResults.add(results.get(key));
}
return sortedResults;
}
/**
* Removes all stores expected results for the specified process.
*
* @param process
* @throws RepositoryException
*/
public static void removeExpectedResults( Process process ) throws RepositoryException {
Folder folder = process.getRepositoryLocation().locateEntry().getContainingFolder();
Collection<IOObjectEntry> toDelete = new ArrayList<IOObjectEntry>();
for( DataEntry entry : folder.getDataEntries() ) {
if( entry instanceof IOObjectEntry ) {
IOObjectEntry ioo = (IOObjectEntry) entry;
String name = ioo.getLocation().getName();
// All expected results begin with port and the number of the port
String expectedPrefix = process.getRepositoryLocation().getName()+EXPECTED_TOKEN;
if( name.startsWith(expectedPrefix) ) {
toDelete.add(ioo);
}
}
}
for( IOObjectEntry entry : toDelete ) {
entry.delete();
}
}
}