/** * Copyright (C) 2001-2017 by RapidMiner and the contributors * * Complete list of developers available at our web site: * * http://rapidminer.com * * This program is free software: you can redistribute it and/or modify it under the terms of the * GNU Affero General Public License as published by the Free Software Foundation, either version 3 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License along with this program. * If not, see http://www.gnu.org/licenses/. */ package com.rapidminer.test_utils; 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; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; /** * * @author Marcin Skirzynski * */ 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(); } } }