Skip to content

Commit

Permalink
IIDM XML anonymization
Browse files Browse the repository at this point in the history
  • Loading branch information
geofjamg committed Oct 26, 2016
1 parent b8c46a9 commit f5d435a
Show file tree
Hide file tree
Showing 35 changed files with 727 additions and 357 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
/**
* Copyright (c) 2016, RTE (http://www.rte-france.com)
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
package eu.itesla_project.iidm.xml;

import eu.itesla_project.iidm.network.Country;

import java.io.BufferedReader;
import java.io.BufferedWriter;

/**
* @author Geoffroy Jamgotchian <geoffroy.jamgotchian at rte-france.com>
*/
public interface Anonymizer {

String anonymizeString(String str);

String deanonymizeString(String str);

Country anonymizeCountry(Country country);

Country deanonymizeCountry(Country country);

void read(BufferedReader reader);

void write(BufferedWriter writer);
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,6 @@
import eu.itesla_project.iidm.network.VoltageLevel;

import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamReader;
import java.util.List;

/**
* @author Geoffroy Jamgotchian <geoffroy.jamgotchian at rte-france.com>
Expand All @@ -27,8 +25,8 @@ protected void writeRootElementAttributes(Switch s, VoltageLevel vl, XmlWriterCo
VoltageLevel.BusBreakerView v = vl.getBusBreakerView();
Bus bus1 = v.getBus1(s.getId());
Bus bus2 = v.getBus2(s.getId());
context.getWriter().writeAttribute("bus1", bus1.getId());
context.getWriter().writeAttribute("bus2", bus2.getId());
context.getWriter().writeAttribute("bus1", context.getAnonymizer().anonymizeString(bus1.getId()));
context.getWriter().writeAttribute("bus2", context.getAnonymizer().anonymizeString(bus2.getId()));
}

@Override
Expand All @@ -37,10 +35,10 @@ protected VoltageLevel.BusBreakerView.SwitchAdder createAdder(VoltageLevel vl) {
}

@Override
protected Switch readRootElementAttributes(VoltageLevel.BusBreakerView.SwitchAdder adder, XMLStreamReader reader, List<Runnable> endTasks) {
boolean open = XmlUtil.readBoolAttribute(reader, "open");
String bus1 = reader.getAttributeValue(null, "bus1");
String bus2 = reader.getAttributeValue(null, "bus2");
protected Switch readRootElementAttributes(VoltageLevel.BusBreakerView.SwitchAdder adder, XmlReaderContext context) {
boolean open = XmlUtil.readBoolAttribute(context.getReader(), "open");
String bus1 = context.getAnonymizer().deanonymizeString(context.getReader().getAttributeValue(null, "bus1"));
String bus2 = context.getAnonymizer().deanonymizeString(context.getReader().getAttributeValue(null, "bus2"));
return adder.setOpen(open)
.setBus1(bus1)
.setBus2(bus2)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,6 @@
import eu.itesla_project.iidm.network.VoltageLevel;

import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamReader;
import java.util.List;

/**
*
Expand Down Expand Up @@ -50,17 +48,17 @@ protected BusAdder createAdder(VoltageLevel vl) {
}

@Override
protected Bus readRootElementAttributes(BusAdder adder, XMLStreamReader reader, List<Runnable> endTasks) {
float v = XmlUtil.readOptionalFloatAttribute(reader, "v");
float angle = XmlUtil.readOptionalFloatAttribute(reader, "angle");
protected Bus readRootElementAttributes(BusAdder adder, XmlReaderContext context) {
float v = XmlUtil.readOptionalFloatAttribute(context.getReader(), "v");
float angle = XmlUtil.readOptionalFloatAttribute(context.getReader(), "angle");
Bus b = adder.add();
b.setV(v);
b.setAngle(angle);
return b;
}

@Override
protected void readSubElements(Bus b, XMLStreamReader reader, List<Runnable> endTasks) throws XMLStreamException {
readUntilEndRootElement(reader, () -> BusXml.super.readSubElements(b, reader,endTasks));
protected void readSubElements(Bus b, XmlReaderContext context) throws XMLStreamException {
readUntilEndRootElement(context.getReader(), () -> BusXml.super.readSubElements(b, context));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,6 @@
import eu.itesla_project.iidm.network.VoltageLevel;

import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamReader;
import java.util.List;

/**
*
Expand Down Expand Up @@ -52,13 +50,13 @@ protected BusbarSectionAdder createAdder(VoltageLevel vl) {
}

@Override
protected BusbarSection readRootElementAttributes(BusbarSectionAdder adder, XMLStreamReader reader, List<Runnable> endTasks) {
int node = XmlUtil.readIntAttribute(reader, "node");
float v = XmlUtil.readOptionalFloatAttribute(reader, "v");
float angle = XmlUtil.readOptionalFloatAttribute(reader, "angle");
protected BusbarSection readRootElementAttributes(BusbarSectionAdder adder, XmlReaderContext context) {
int node = XmlUtil.readIntAttribute(context.getReader(), "node");
float v = XmlUtil.readOptionalFloatAttribute(context.getReader(), "v");
float angle = XmlUtil.readOptionalFloatAttribute(context.getReader(), "angle");
BusbarSection bbs = adder.setNode(node)
.add();
endTasks.add(() -> {
context.getEndTasks().add(() -> {
Bus b = bbs.getTerminal().getBusView().getBus();
if (b != null) {
b.setV(v).setAngle(angle);
Expand All @@ -68,7 +66,7 @@ protected BusbarSection readRootElementAttributes(BusbarSectionAdder adder, XMLS
}

@Override
protected void readSubElements(BusbarSection bs, XMLStreamReader reader, List<Runnable> endTasks) throws XMLStreamException {
readUntilEndRootElement(reader, () -> BusbarSectionXml.super.readSubElements(bs, reader,endTasks));
protected void readSubElements(BusbarSection bs, XmlReaderContext context) throws XMLStreamException {
readUntilEndRootElement(context.getReader(), () -> BusbarSectionXml.super.readSubElements(bs, context));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -27,11 +27,11 @@ protected static void writeNodeOrBus(Integer index, Terminal t, XmlWriterContext
if (context.getOptions().isForceBusBranchTopo()) {
Bus bus = t.getBusView().getBus();
if (bus != null) {
context.getWriter().writeAttribute("bus" + indexToString(index), bus.getId());
context.getWriter().writeAttribute("bus" + indexToString(index), context.getAnonymizer().anonymizeString(bus.getId()));
}
Bus connectableBus = t.getBusView().getConnectableBus();
if (connectableBus != null) {
context.getWriter().writeAttribute("connectableBus" + indexToString(index), connectableBus.getId());
context.getWriter().writeAttribute("connectableBus" + indexToString(index), context.getAnonymizer().anonymizeString(connectableBus.getId()));
}
} else {
switch (t.getVoltageLevel().getTopologyKind()) {
Expand All @@ -43,11 +43,11 @@ protected static void writeNodeOrBus(Integer index, Terminal t, XmlWriterContext
case BUS_BREAKER:
Bus bus = t.getBusBreakerView().getBus();
if (bus != null) {
context.getWriter().writeAttribute("bus" + indexToString(index), bus.getId());
context.getWriter().writeAttribute("bus" + indexToString(index), context.getAnonymizer().anonymizeString(bus.getId()));
}
Bus connectableBus = t.getBusBreakerView().getConnectableBus();
if (connectableBus != null) {
context.getWriter().writeAttribute("connectableBus" + indexToString(index), connectableBus.getId());
context.getWriter().writeAttribute("connectableBus" + indexToString(index), context.getAnonymizer().anonymizeString(connectableBus.getId()));
}
break;

Expand All @@ -56,14 +56,14 @@ protected static void writeNodeOrBus(Integer index, Terminal t, XmlWriterContext
}
}
if (index != null) {
context.getWriter().writeAttribute("voltageLevelId" + index, t.getVoltageLevel().getId());
context.getWriter().writeAttribute("voltageLevelId" + index, context.getAnonymizer().anonymizeString(t.getVoltageLevel().getId()));
}
}

protected static void readNodeOrBus(SingleTerminalConnectableAdder adder, XMLStreamReader reader) {
String bus = reader.getAttributeValue(null, "bus");
String connectableBus = reader.getAttributeValue(null, "connectableBus");
Integer node = XmlUtil.readOptionalIntegerAttribute(reader, "node");
protected static void readNodeOrBus(SingleTerminalConnectableAdder adder, XmlReaderContext context) {
String bus = context.getAnonymizer().deanonymizeString(context.getReader().getAttributeValue(null, "bus"));
String connectableBus = context.getAnonymizer().deanonymizeString(context.getReader().getAttributeValue(null, "connectableBus"));
Integer node = XmlUtil.readOptionalIntegerAttribute(context.getReader(), "node");
if (bus != null) {
adder.setBus(bus);
}
Expand All @@ -75,15 +75,15 @@ protected static void readNodeOrBus(SingleTerminalConnectableAdder adder, XMLStr
}
}

protected static void readNodeOrBus(TwoTerminalsConnectableAdder adder, XMLStreamReader reader) {
String bus1 = reader.getAttributeValue(null, "bus1");
String connectableBus1 = reader.getAttributeValue(null, "connectableBus1");
Integer node1 = XmlUtil.readOptionalIntegerAttribute(reader, "node1");
String voltageLevelId1 = reader.getAttributeValue(null, "voltageLevelId1");
String bus2 = reader.getAttributeValue(null, "bus2");
String connectableBus2 = reader.getAttributeValue(null, "connectableBus2");
Integer node2 = XmlUtil.readOptionalIntegerAttribute(reader, "node2");
String voltageLevelId2 = reader.getAttributeValue(null, "voltageLevelId2");
protected static void readNodeOrBus(TwoTerminalsConnectableAdder adder, XmlReaderContext context) {
String bus1 = context.getAnonymizer().deanonymizeString(context.getReader().getAttributeValue(null, "bus1"));
String connectableBus1 = context.getAnonymizer().deanonymizeString(context.getReader().getAttributeValue(null, "connectableBus1"));
Integer node1 = XmlUtil.readOptionalIntegerAttribute(context.getReader(), "node1");
String voltageLevelId1 = context.getAnonymizer().deanonymizeString(context.getReader().getAttributeValue(null, "voltageLevelId1"));
String bus2 = context.getAnonymizer().deanonymizeString(context.getReader().getAttributeValue(null, "bus2"));
String connectableBus2 = context.getAnonymizer().deanonymizeString(context.getReader().getAttributeValue(null, "connectableBus2"));
Integer node2 = XmlUtil.readOptionalIntegerAttribute(context.getReader(), "node2");
String voltageLevelId2 = context.getAnonymizer().deanonymizeString(context.getReader().getAttributeValue(null, "voltageLevelId2"));
if (bus1 != null) {
adder.setBus1(bus1);
}
Expand Down Expand Up @@ -170,7 +170,7 @@ protected static void writeTerminalRef(Terminal t, XmlWriterContext context, Str
throw new RuntimeException("Oups, terminal ref point to a filtered equipment " + c.getId());
}
context.getWriter().writeEmptyElement(IIDM_URI, elementName);
context.getWriter().writeAttribute("id", c.getId());
context.getWriter().writeAttribute("id", context.getAnonymizer().anonymizeString(c.getId()));
if (c.getTerminals().size() > 1) {
if (c instanceof SingleTerminalConnectable) {
// nothing to do
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,11 @@
*/
package eu.itesla_project.iidm.xml;

import eu.itesla_project.iidm.network.*;
import eu.itesla_project.iidm.network.DanglingLine;
import eu.itesla_project.iidm.network.DanglingLineAdder;
import eu.itesla_project.iidm.network.VoltageLevel;

import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamReader;
import java.util.List;

/**
*
Expand Down Expand Up @@ -60,15 +60,15 @@ protected DanglingLineAdder createAdder(VoltageLevel vl) {
}

@Override
protected DanglingLine readRootElementAttributes(DanglingLineAdder adder, XMLStreamReader reader, List<Runnable> endTasks) {
float p0 = XmlUtil.readFloatAttribute(reader, "p0");
float q0 = XmlUtil.readFloatAttribute(reader, "q0");
float r = XmlUtil.readFloatAttribute(reader, "r");
float x = XmlUtil.readFloatAttribute(reader, "x");
float g = XmlUtil.readFloatAttribute(reader, "g");
float b = XmlUtil.readFloatAttribute(reader, "b");
String ucteXnodeCode = reader.getAttributeValue(null, "ucteXnodeCode");
readNodeOrBus(adder, reader);
protected DanglingLine readRootElementAttributes(DanglingLineAdder adder, XmlReaderContext context) {
float p0 = XmlUtil.readFloatAttribute(context.getReader(), "p0");
float q0 = XmlUtil.readFloatAttribute(context.getReader(), "q0");
float r = XmlUtil.readFloatAttribute(context.getReader(), "r");
float x = XmlUtil.readFloatAttribute(context.getReader(), "x");
float g = XmlUtil.readFloatAttribute(context.getReader(), "g");
float b = XmlUtil.readFloatAttribute(context.getReader(), "b");
String ucteXnodeCode = context.getReader().getAttributeValue(null, "ucteXnodeCode");
readNodeOrBus(adder, context);
DanglingLine dl = adder.setP0(p0)
.setQ0(q0)
.setR(r)
Expand All @@ -77,17 +77,17 @@ protected DanglingLine readRootElementAttributes(DanglingLineAdder adder, XMLStr
.setB(b)
.setUcteXnodeCode(ucteXnodeCode)
.add();
readPQ(null, dl.getTerminal(), reader);
readPQ(null, dl.getTerminal(), context.getReader());
return dl;
}

@Override
protected void readSubElements(DanglingLine dl, XMLStreamReader reader, List<Runnable> endTasks) throws XMLStreamException {
readUntilEndRootElement(reader, () -> {
if ("currentLimits".equals(reader.getLocalName())) {
readCurrentLimits(null, dl::newCurrentLimits, reader);
protected void readSubElements(DanglingLine dl, XmlReaderContext context) throws XMLStreamException {
readUntilEndRootElement(context.getReader(), () -> {
if ("currentLimits".equals(context.getReader().getLocalName())) {
readCurrentLimits(null, dl::newCurrentLimits, context.getReader());
} else {
super.readSubElements(dl, reader, endTasks);
super.readSubElements(dl, context);
}
});
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,5 +31,5 @@ public interface ExtensionXml<I extends Identifiable, E extends Identifiable.Ext

void write(E extension, XmlWriterContext context) throws XMLStreamException;

E read(I identifiable, XMLStreamReader reader) throws XMLStreamException;
E read(I identifiable, XmlReaderContext context) throws XMLStreamException;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
/**
* Copyright (c) 2016, RTE (http://www.rte-france.com)
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
package eu.itesla_project.iidm.xml;

import eu.itesla_project.iidm.network.Country;

import java.io.BufferedReader;
import java.io.BufferedWriter;

/**
* @author Geoffroy Jamgotchian <geoffroy.jamgotchian at rte-france.com>
*/
public class FakeAnonymizer implements Anonymizer {
@Override
public String anonymizeString(String str) {
return str;
}

@Override
public String deanonymizeString(String str) {
return str;
}

@Override
public Country anonymizeCountry(Country country) {
return country;
}

@Override
public Country deanonymizeCountry(Country country) {
return country;
}

@Override
public void read(BufferedReader reader) {
}

@Override
public void write(BufferedWriter writer) {
}
}

0 comments on commit f5d435a

Please sign in to comment.