Skip to content

Commit

Permalink
add json parameters
Browse files Browse the repository at this point in the history
  • Loading branch information
brahimibob committed Mar 13, 2018
1 parent fd67afb commit 7899993
Show file tree
Hide file tree
Showing 4 changed files with 43 additions and 16 deletions.
Expand Up @@ -6,8 +6,8 @@
*/
package eu.itesla_project.security.rest.api.impl;


import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.StringWriter;
Expand Down Expand Up @@ -47,13 +47,16 @@
import com.powsybl.iidm.network.Network;
import com.powsybl.security.LimitViolationFilter;
import com.powsybl.security.LimitViolationType;
import com.powsybl.security.SecurityAnalysisParameters;
import com.powsybl.security.SecurityAnalysisResult;
import com.powsybl.security.SecurityAnalyzer;
import com.powsybl.security.SecurityAnalyzer.Format;
import com.powsybl.security.converter.SecurityAnalysisResultExporters;
import com.powsybl.security.json.JsonSecurityAnalysisParameters;

import eu.itesla_project.security.rest.api.SecurityAnalysisService;
import eu.itesla_project.security.rest.api.impl.utils.Utils;

/**
*
* @author Giovanni Ferrari <giovanni.ferrari at techrain.it>
Expand Down Expand Up @@ -90,18 +93,27 @@ public Response analyze(MultipartFormDataInput form) {

LimitViolationFilter limitViolationFilter = new LimitViolationFilter(limitViolationTypes);

FilePart caseFile = formParts.get("case-file") != null ? Utils.getFilePart(formParts.get("case-file")) : null;
FilePart caseFile = formParts.get("case-file") != null ? Utils.getFilePart(formParts.get("case-file"))
: null;

if (caseFile == null) {
return Response.status(Status.BAD_REQUEST).entity("Missing required case-file parameter").build();
}
Network network = Importers.loadNetwork(caseFile.getFilename(), caseFile.getInputStream());

FilePart contingencies = formParts.get("contingencies-file") != null
? Utils.getFilePart(formParts.get("contingencies-file")) : null;
? Utils.getFilePart(formParts.get("contingencies-file"))
: null;

FilePart parametersFile = formParts.get("parameters-file") != null
? Utils.getFilePart(formParts.get("parameters-file"))
: null;

SecurityAnalysisResult result = analyze(network, contingencies, limitViolationFilter);
SecurityAnalysisParameters parameters = SecurityAnalysisParameters.load();
if (parametersFile != null) {
JsonSecurityAnalysisParameters.update(parameters, parametersFile.getInputStream());
}
SecurityAnalysisResult result = analyze(network, contingencies, limitViolationFilter, parameters);

return Response.ok(toStream(result, network, format))
.header("Content-Type", format.equals(Format.JSON) ? MediaType.APPLICATION_JSON : "text/csv")
Expand All @@ -112,11 +124,13 @@ public Response analyze(MultipartFormDataInput form) {
}
}

public SecurityAnalysisResult analyze(Network network, FilePart contingencies, LimitViolationFilter limitViolationFilter) {
public SecurityAnalysisResult analyze(Network network, FilePart contingencies,
LimitViolationFilter limitViolationFilter, SecurityAnalysisParameters parameters) {
ContingenciesProvider contingenciesProvider = (contingencies != null && contingencies.getInputStream() != null)
? Utils.getContingenciesProviderFactory().create(contingencies.getInputStream()) : new EmptyContingencyListProvider();
? Utils.getContingenciesProviderFactory().create(contingencies.getInputStream())
: new EmptyContingencyListProvider();
SecurityAnalyzer analyzer = new SecurityAnalyzer(limitViolationFilter, Utils.getLocalComputationManager(), 0);
return analyzer.analyze(network, contingenciesProvider);
return analyzer.analyze(network, contingenciesProvider, parameters);
}

private StreamingOutput toStream(SecurityAnalysisResult result, Network network, Format format) {
Expand All @@ -132,11 +146,6 @@ public void write(OutputStream out) throws IOException {
};
}






@Override
public Response actionSimulator(MultipartFormDataInput form) {
Objects.requireNonNull(form);
Expand All @@ -148,7 +157,8 @@ public Response actionSimulator(MultipartFormDataInput form) {
return Response.status(Status.BAD_REQUEST).entity("Missing required format parameter").build();
}

FilePart caseFile = formParts.get("case-file") != null ? Utils.getFilePart(formParts.get("case-file")) : null;
FilePart caseFile = formParts.get("case-file") != null ? Utils.getFilePart(formParts.get("case-file"))
: null;
if (caseFile == null) {
return Response.status(Status.BAD_REQUEST).entity("Missing required case-file parameter").build();
}
Expand Down Expand Up @@ -178,9 +188,17 @@ public Response actionSimulator(MultipartFormDataInput form) {
AbstractSecurityAnalysisResultBuilderImpl loadFlowActionSimulatorObserver = new AbstractSecurityAnalysisResultBuilderImpl();
observers.add(loadFlowActionSimulatorObserver);

FilePart parametersFile = formParts.get("parameters-file") != null
? Utils.getFilePart(formParts.get("parameters-file"))
: null;
InputStream parametersInputStream = null;
if (parametersFile != null) {
parametersInputStream = parametersFile.getInputStream();
}
// action simulator
ActionSimulator actionSimulator = new LoadFlowActionSimulator(network, Utils.getLocalComputationManager(), Utils.getActionSimulatorConfig(),
observers);
//TODO call LoadFlowActionSimulator with parametersInputStream
ActionSimulator actionSimulator = new LoadFlowActionSimulator(network, Utils.getLocalComputationManager(),
Utils.getActionSimulatorConfig(), observers);

// start simulator
actionSimulator.start(actionDb, contingencies);
Expand Down
4 changes: 4 additions & 0 deletions security-analysis-ws/src/main/webapp/action-simulator.html
Expand Up @@ -23,6 +23,10 @@ <h2>Action Simulator</h2>
<td><label>Dsl File </label></td>
<td><input type="file" name="dsl-file"></td>
</tr>
<tr>
<td><label>Parameters File </label></td>
<td><input type="file" name="parameters-file"></td>
</tr>
<tr>
<td><label>Output format </label></td>
<td><select name="format">
Expand Down
4 changes: 4 additions & 0 deletions security-analysis-ws/src/main/webapp/analysis.html
Expand Up @@ -27,6 +27,10 @@ <h2>Security Analysis</h2>
<td><label>Contingencies File </label></td>
<td><input type="file" name="contingencies-file"></td>
</tr>
<tr>
<td><label>Parameters File </label></td>
<td><input type="file" name="parameters-file"></td>
</tr>
<tr>
<td><label>Output format </label></td>
<td><select name="format">
Expand Down
Expand Up @@ -31,6 +31,7 @@
import com.powsybl.iidm.network.Network;
import com.powsybl.security.LimitViolationFilter;
import com.powsybl.security.LimitViolationsResult;
import com.powsybl.security.SecurityAnalysisParameters;
import com.powsybl.security.SecurityAnalysisResult;

import eu.itesla_project.security.rest.api.impl.FilePart;
Expand All @@ -49,7 +50,7 @@ public void setUp() {
SecurityAnalysisResult result = new SecurityAnalysisResult(
new LimitViolationsResult(true, Collections.emptyList()), Collections.emptyList());
service = Mockito.mock(SecurityAnalysisServiceImpl.class);
when(service.analyze(any(Network.class), any(FilePart.class), any(LimitViolationFilter.class)))
when(service.analyze(any(Network.class), any(FilePart.class), any(LimitViolationFilter.class), any(SecurityAnalysisParameters.class)))
.thenReturn(result);
when(service.analyze(any(MultipartFormDataInput.class))).thenCallRealMethod();
}
Expand Down

0 comments on commit 7899993

Please sign in to comment.