Skip to content

Commit

Permalink
Merge pull request #313 from HPI-Information-Systems/show_button
Browse files Browse the repository at this point in the history
Show button
  • Loading branch information
Dacry committed Mar 27, 2015
2 parents 9c95c6f + cc0ec50 commit 9a2c8a2
Show file tree
Hide file tree
Showing 7 changed files with 157 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,13 @@
package de.metanome.backend.resources;

import de.metanome.backend.results_db.EntityStorageException;
import de.metanome.backend.results_db.Execution;
import de.metanome.backend.results_db.FileInput;
import de.metanome.backend.results_db.HibernateUtil;
import de.metanome.backend.results_db.Result;
import de.metanome.backend.results_db.ResultType;

import java.util.ArrayList;
import java.util.List;

import javax.ws.rs.Consumes;
Expand Down Expand Up @@ -123,4 +127,39 @@ public Result update(Result result) {
}
return result;
}

/**
* Retrieves one result for each result type, which was executed on the given file input.
*
* @param id the id of the file input
* @return all matching results
*/
@GET
@Path("/file_input/{id}")
@Produces("application/json")
public List<Result> getResultsForFileInput(@PathParam("id") long id) {
List<Result> results = new ArrayList<>();
List<ResultType> types = new ArrayList<>();

try {
List<Execution> all = HibernateUtil.queryCriteria(Execution.class);
FileInput fileInput = (FileInput) HibernateUtil.retrieve(FileInput.class, id);
// Filter all executions for those, which belong to the requested file input
for (Execution execution : all) {
if (execution.getInputs().contains(fileInput)) {
for (Result result : execution.getResults()) {
if (!types.contains(result.getType())) {
results.add(result);
types.add(result.getType());
}
}
}
}
} catch (EntityStorageException e) {
// Algorithm should implement Entity, so the exception should not occur.
e.printStackTrace();
}

return results;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
import de.metanome.backend.results_db.Algorithm;
import de.metanome.backend.results_db.EntityStorageException;
import de.metanome.backend.results_db.Execution;
import de.metanome.backend.results_db.FileInput;
import de.metanome.backend.results_db.HibernateUtil;
import de.metanome.backend.results_db.Result;
import de.metanome.backend.results_db.ResultType;
Expand All @@ -38,6 +39,8 @@
public class ResultResourceTest {

ResultResource resultResource = new ResultResource();
ExecutionResource executionResource = new ExecutionResource();
FileInputResource fileInputResource = new FileInputResource();

/**
* Test method for {@link de.metanome.backend.resources.ResultResource#store(de.metanome.backend.results_db.Result)} and
Expand Down Expand Up @@ -177,4 +180,43 @@ public void testUpdate() throws EntityStorageException {
HibernateUtil.clear();
}

/**
* Test method for {@link de.metanome.backend.resources.ResultResource#getResultsForFileInput(long)}
* Only one result for each result type should be returned.
* @throws Exception
*/
@Test
public void testGetResultsForFileInput() throws Exception {
// Setup
HibernateUtil.clear();

FileInput input = new FileInput("file");
input = fileInputResource.store(input);

Result expectedResult1 = new Result("result_file_1");
expectedResult1.setType(ResultType.CUCC);
Result expectedResult2 = new Result("result_file_2");
expectedResult2.setType(ResultType.CUCC);
Result expectedResult3 = new Result("result_file_3");
expectedResult3.setType(ResultType.UCC);

Execution execution = new Execution(null);
execution.addInput(input);
execution.addResult(expectedResult1);
execution.addResult(expectedResult2);
execution.addResult(expectedResult3);
executionResource.store(execution);

// Execute functionality
List<Result> actualResults = resultResource.getResultsForFileInput(input.getId());

// Check result
assertTrue(actualResults.size() == 2);
assertTrue(actualResults.contains(expectedResult3));
assertTrue(actualResults.contains(expectedResult2));

// Cleanup
HibernateUtil.clear();
}

}
10 changes: 10 additions & 0 deletions frontend/src/main/java/de/metanome/frontend/client/BasePage.java
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
import de.metanome.backend.resources.AlgorithmExecutionParams;
import de.metanome.backend.results_db.Algorithm;
import de.metanome.backend.results_db.Execution;
import de.metanome.backend.results_db.FileInput;
import de.metanome.frontend.client.algorithms.AlgorithmsPage;
import de.metanome.frontend.client.datasources.DataSourcePage;
import de.metanome.frontend.client.executions.ExecutionsPage;
Expand Down Expand Up @@ -159,6 +160,15 @@ public void showResultsFor(Execution execution) {
this.selectTab(Tabs.RESULTS.ordinal());
}

/**
* Switches to the result page and shows the results of the given input.
* @param input the execution
*/
public void showResultsFor(FileInput input) {
this.resultsPage.showResults(input);
this.selectTab(Tabs.RESULTS.ordinal());
}

/**
* If the algorithm execution is successful, the results will be shown. otherwise the reason of
* failure will be displayed.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@

import de.metanome.algorithm_integration.configuration.ConfigurationSettingDataSource;
import de.metanome.backend.results_db.DatabaseConnection;
import de.metanome.backend.results_db.FileInput;
import de.metanome.frontend.client.BasePage;
import de.metanome.frontend.client.TabContent;
import de.metanome.frontend.client.TabWrapper;
Expand Down Expand Up @@ -120,4 +121,7 @@ public void setMessageReceiver(TabWrapper tab) {
this.databaseConnectionTab.setMessageReceiver(tab);
}

public void showResultsFor(FileInput input) {
this.basePage.showResultsFor(input);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -139,11 +139,21 @@ public void onClick(ClickEvent event) {
}
});

Button showButton = new Button("Show");
showButton.setTitle(String.valueOf(input.getId()));
showButton.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
parent.showResultsFor(input);
}
});

this.fileInputList.setWidget(row, 0, new HTML(FilePathHelper.getFileName(input.getFileName())));
this.fileInputList.setText(row, 1, input.getComment());
this.fileInputList.setWidget(row, 2, runButton);
this.fileInputList.setWidget(row, 3, deleteButton);
this.fileInputList.setWidget(row, 4, editButton);
this.fileInputList.setWidget(row, 5, showButton);
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,15 +28,21 @@
import com.google.gwt.user.client.ui.TabLayoutPanel;

import de.metanome.backend.results_db.Execution;
import de.metanome.backend.results_db.FileInput;
import de.metanome.backend.results_db.Result;
import de.metanome.frontend.client.BasePage;
import de.metanome.frontend.client.TabContent;
import de.metanome.frontend.client.TabWrapper;
import de.metanome.frontend.client.helpers.FilePathHelper;
import de.metanome.frontend.client.services.AlgorithmExecutionRestService;
import de.metanome.frontend.client.services.ResultRestService;

import org.fusesource.restygwt.client.Method;
import org.fusesource.restygwt.client.MethodCallback;

import java.util.Date;
import java.util.HashSet;
import java.util.List;

/**
* Tab that contains widgets displaying execution results, i.e. tables, visualizations etc.
Expand Down Expand Up @@ -171,7 +177,8 @@ public void run() {
public void showResults(Execution execution) {
this.messageReceiver.clearErrors();
this.clear();
AlgorithmExecutionRestService executionRestService = GWT.create(AlgorithmExecutionRestService.class);
AlgorithmExecutionRestService executionRestService = GWT.create(
AlgorithmExecutionRestService.class);

this.addChildPages(executionRestService, execution.getIdentifier());

Expand All @@ -183,6 +190,47 @@ public void showResults(Execution execution) {
this.insert(new Label(getExecutionTimeString(execution.getAlgorithm().getFileName(), executionTime)), 0);
}

/**
* Displays the results of the given file input.
* @param input the execution
*/
public void showResults(FileInput input) {
this.messageReceiver.clearErrors();
this.clear();

ResultRestService resultRestService = GWT.create(ResultRestService.class);
AlgorithmExecutionRestService algorithmExecutionRestService = GWT.create(AlgorithmExecutionRestService.class);

this.addChildPages(algorithmExecutionRestService, "");

resultRestService.getResultsForFileInput(input.getId(), getShowResultCallback());
this.insert(
new Label("All results for input " + FilePathHelper.getFileName(input.getName()) + "."), 0);
}

/**
* Sends a call to the backend for obtaining all executions for a specific input.
* If the callback is successful, the results of the executions are sent to the table page.
* @return the method callback
*/
private MethodCallback<List<Result>> getShowResultCallback() {
return new MethodCallback<List<Result>>() {
@Override
public void onFailure(Method method, Throwable throwable) {
messageReceiver.addError("Could not display results: " + method.getResponse().getText());
}

@Override
public void onSuccess(Method method, List<Result> results) {
if (results.isEmpty()) {
tablePage.add(new Label("There are no results yet."));
return;
}
tablePage.readResultsFromFile(new HashSet<>(results));
}
};
}

private void addChildPages(AlgorithmExecutionRestService executionService, String executionIdentifier) {
// Create new tab with result table
this.tablePage =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,4 +51,7 @@ public interface ResultRestService extends RestService {
@Path("/update")
public void updateResult(Result result, MethodCallback<Result> callback);

@GET
@Path("/file_input/{id}")
public void getResultsForFileInput(@PathParam("id") long id, MethodCallback<List<Result>> callback);
}

0 comments on commit 9a2c8a2

Please sign in to comment.