Skip to content

Commit 521d9fc

Browse files
Merge pull request #634 from ie3-institute/sp/#633-fix-code-smells
Fixing some code smells
2 parents cb1cd44 + 33e4efc commit 521d9fc

File tree

47 files changed

+376
-473
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

47 files changed

+376
-473
lines changed

CHANGELOG.md

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
1414
- `TemperatureDependantLoadProfile`s for depiction of profile behavior of night storage heating and heat pumps [#601](https://github.com/ie3-institute/PowerSystemDataModel/issues/601)
1515
- `ThermalUnits` as a container to hold all thermal units [#134](https://github.com/ie3-institute/PowerSystemDataModel/issues/134)
1616
- `ThermalInput` as a distinct abstract class for all thermal models
17-
- `ThermalGrid` as a container for a completly connected thermal grid
17+
- `ThermalGrid` as a container for a completely connected thermal grid
1818

1919
### Fixed
2020
- Reduced code smells [#492](https://github.com/ie3-institute/PowerSystemDataModel/issues/492)
@@ -25,6 +25,16 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
2525
- Replace lambdas with method references
2626
- Use `Stream#toList`
2727
- Adapt visibility for JUnit 5
28+
- More code smell fixing [#633](https://github.com/ie3-institute/PowerSystemDataModel/issues/633)
29+
- Use `List#of`
30+
- Use direct assignment with switch/case structures
31+
- Turn some classes into records
32+
- Making abstract classes' constructor protected
33+
- Improving some RegExs
34+
- Replacing `filter(Optional::isPresent).map(Optional::get)` on streams with `flatMap(Optional::stream)`
35+
- instanceof variable declarations
36+
- Removing unnecessary parentheses
37+
- Miscellaneous code smells
2838
- Fix JavaDoc creation
2939
- Create JavaDoc with java 17 instead of java 8
3040
- Let JavDoc pass, if there are warnings **ATTENTION:** Should be removed, when JavaDoc is fixed! (cf. Issue [#494](https://github.com/ie3-institute/PowerSystemDataModel/issues/494))

src/main/java/edu/ie3/datamodel/graph/SubGridGate.java

Lines changed: 19 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,13 @@
1212
import edu.ie3.datamodel.models.input.connector.TransformerInput;
1313
import edu.ie3.datamodel.models.input.container.SubGridContainer;
1414
import java.io.Serializable;
15-
import java.util.Objects;
1615

1716
/**
1817
* Defines gates between {@link SubGridContainer}s and serves as edge definition for {@link
1918
* SubGridTopologyGraph}
2019
*/
21-
public class SubGridGate implements Serializable {
20+
public record SubGridGate(TransformerInput link, NodeInput superiorNode, NodeInput inferiorNode)
21+
implements Serializable {
2222
/**
2323
* Creates a sub grid gate from two winding transformer.
2424
*
@@ -40,47 +40,33 @@ public static SubGridGate fromTransformer2W(Transformer2WInput transformer) {
4040
*/
4141
public static SubGridGate fromTransformer3W(
4242
Transformer3WInput transformer, ConnectorPort inferiorPort) {
43-
switch (inferiorPort) {
44-
case B:
45-
return new SubGridGate(transformer, transformer.getNodeA(), transformer.getNodeB());
46-
case C:
47-
return new SubGridGate(transformer, transformer.getNodeA(), transformer.getNodeC());
48-
default:
49-
throw new IllegalArgumentException(
50-
"Only port "
51-
+ ConnectorPort.B
52-
+ " or "
53-
+ ConnectorPort.C
54-
+ " can be "
55-
+ "chosen as inferior port.");
56-
}
57-
}
58-
59-
private final TransformerInput link;
60-
private final NodeInput superiorNode;
61-
private final NodeInput inferiorNode;
62-
63-
/**
64-
* Create a {@link SubGridGate}
65-
*
66-
* @param link Model, that physically represents the gate
67-
* @param superiorNode Upstream node of the gate
68-
* @param inferiorNode Downstream node of the gate
69-
*/
70-
public SubGridGate(TransformerInput link, NodeInput superiorNode, NodeInput inferiorNode) {
71-
this.link = link;
72-
this.superiorNode = superiorNode;
73-
this.inferiorNode = inferiorNode;
43+
return switch (inferiorPort) {
44+
case B -> new SubGridGate(transformer, transformer.getNodeA(), transformer.getNodeB());
45+
case C -> new SubGridGate(transformer, transformer.getNodeA(), transformer.getNodeC());
46+
default -> throw new IllegalArgumentException(
47+
"Only port "
48+
+ ConnectorPort.B
49+
+ " or "
50+
+ ConnectorPort.C
51+
+ " can be "
52+
+ "chosen as inferior port.");
53+
};
7454
}
7555

56+
/** @deprecated since 3.0. Use {@link #link()} instead */
57+
@Deprecated(since = "3.0")
7658
public TransformerInput getLink() {
7759
return link;
7860
}
7961

62+
/** @deprecated since 3.0. Use {@link #superiorNode()} instead */
63+
@Deprecated(since = "3.0")
8064
public NodeInput getSuperiorNode() {
8165
return superiorNode;
8266
}
8367

68+
/** @deprecated since 3.0. Use {@link #inferiorNode()} instead */
69+
@Deprecated(since = "3.0")
8470
public NodeInput getInferiorNode() {
8571
return inferiorNode;
8672
}
@@ -93,21 +79,6 @@ public int getInferiorSubGrid() {
9379
return inferiorNode.getSubnet();
9480
}
9581

96-
@Override
97-
public boolean equals(Object o) {
98-
if (this == o) return true;
99-
if (o == null || getClass() != o.getClass()) return false;
100-
SubGridGate that = (SubGridGate) o;
101-
return link.equals(that.link)
102-
&& superiorNode.equals(that.superiorNode)
103-
&& inferiorNode.equals(that.inferiorNode);
104-
}
105-
106-
@Override
107-
public int hashCode() {
108-
return Objects.hash(link, superiorNode, inferiorNode);
109-
}
110-
11182
@Override
11283
public String toString() {
11384
return "SubGridTopolgyEdge{"

src/main/java/edu/ie3/datamodel/io/connectors/CsvFileConnector.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ private BufferedCsvWriter initWriter(String baseDirectory, CsvFileDefinition fil
111111
/* Join the full DIRECTORY path (excluding file name) */
112112
String baseDirectoryHarmonized = IoUtil.harmonizeFileSeparator(baseDirectory);
113113
String fullDirectoryPath =
114-
FilenameUtils.concat(baseDirectoryHarmonized, fileDefinition.getDirectoryPath());
114+
FilenameUtils.concat(baseDirectoryHarmonized, fileDefinition.directoryPath());
115115
String fullPath = FilenameUtils.concat(baseDirectoryHarmonized, fileDefinition.getFilePath());
116116

117117
/* Create missing directories */
@@ -125,13 +125,13 @@ private BufferedCsvWriter initWriter(String baseDirectory, CsvFileDefinition fil
125125
boolean append = pathFile.exists();
126126
BufferedCsvWriter writer =
127127
new BufferedCsvWriter(
128-
fullPath, fileDefinition.getHeadLineElements(), fileDefinition.getCsvSep(), append);
128+
fullPath, fileDefinition.headLineElements(), fileDefinition.csvSep(), append);
129129
if (!append) {
130130
writer.writeFileHeader();
131131
} else {
132132
log.warn(
133133
"File '{}' already exist. Will append new content WITHOUT new header! Full path: {}",
134-
fileDefinition.getFileName(),
134+
fileDefinition.fileName(),
135135
pathFile.getAbsolutePath());
136136
}
137137
return writer;
@@ -161,7 +161,7 @@ public synchronized void closeTimeSeriesWriter(UUID uuid) throws IOException {
161161
* @param <C> Type of class
162162
* @throws IOException If closing of writer fails.
163163
*/
164-
public synchronized <C extends Class<? extends UniqueEntity>> void closeEntityWriter(C clz)
164+
public synchronized <C extends UniqueEntity> void closeEntityWriter(Class<C> clz)
165165
throws IOException {
166166
Optional<BufferedCsvWriter> maybeWriter = Optional.ofNullable(entityWriters.get(clz));
167167
if (maybeWriter.isPresent()) {

src/main/java/edu/ie3/datamodel/io/csv/BufferedCsvWriter.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,8 +63,8 @@ public BufferedCsvWriter(String baseFolder, CsvFileDefinition fileDefinition, bo
6363
throws IOException {
6464
this(
6565
baseFolder + File.separator + fileDefinition.getFilePath(),
66-
fileDefinition.getHeadLineElements(),
67-
fileDefinition.getCsvSep(),
66+
fileDefinition.headLineElements(),
67+
fileDefinition.csvSep(),
6868
append);
6969
}
7070

src/main/java/edu/ie3/datamodel/io/csv/CsvFileDefinition.java

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -14,19 +14,15 @@
1414
import org.slf4j.Logger;
1515
import org.slf4j.LoggerFactory;
1616

17-
public class CsvFileDefinition {
17+
public record CsvFileDefinition(
18+
String fileName, String directoryPath, String[] headLineElements, String csvSep) {
1819
private static final Logger logger = LoggerFactory.getLogger(CsvFileDefinition.class);
1920

2021
private static final Pattern FILE_NAME_PATTERN =
2122
Pattern.compile(
2223
"^(?<fileName>[^\\\\/\\s.]{0,255})(?:\\.(?<extension>[a-zA-Z0-9]{0,10}(?:\\.[a-zA-Z0-9]{0,10})?))?$");
2324

24-
protected static final String FILE_EXTENSION = "csv";
25-
26-
private final String directoryPath;
27-
private final String fileName;
28-
private final String[] headLineElements;
29-
private final String csvSep;
25+
private static final String FILE_EXTENSION = "csv";
3026

3127
public CsvFileDefinition(
3228
String fileName, String directoryPath, String[] headLineElements, String csvSep) {
@@ -60,11 +56,17 @@ public CsvFileDefinition(
6056
this.csvSep = csvSep;
6157
}
6258

59+
/** @deprecated since 3.0. Use {@link #directoryPath()} instead */
60+
@Deprecated(since = "3.0")
6361
public String getDirectoryPath() {
6462
return directoryPath;
6563
}
6664

67-
/** @return The file name including extension */
65+
/**
66+
* @return The file name including extension
67+
* @deprecated since 3.0. Use {@link #fileName()} instead
68+
*/
69+
@Deprecated(since = "3.0")
6870
public String getFileName() {
6971
return fileName;
7072
}
@@ -77,19 +79,24 @@ public String getFilePath() {
7779
return !directoryPath.isEmpty() ? FilenameUtils.concat(directoryPath, fileName) : fileName;
7880
}
7981

82+
/** @deprecated since 3.0. Use {@link #headLineElements()} instead */
83+
@Deprecated(since = "3.0")
8084
public String[] getHeadLineElements() {
8185
return headLineElements;
8286
}
8387

88+
/** @deprecated since 3.0. Use {@link #csvSep()} instead */
89+
@Deprecated(since = "3.0")
8490
public String getCsvSep() {
8591
return csvSep;
8692
}
8793

8894
@Override
8995
public boolean equals(Object o) {
96+
// equals implementation is required here because
97+
// records' equals method and array fields don't play together nicely
9098
if (this == o) return true;
91-
if (!(o instanceof CsvFileDefinition)) return false;
92-
CsvFileDefinition that = (CsvFileDefinition) o;
99+
if (!(o instanceof CsvFileDefinition that)) return false;
93100
return directoryPath.equals(that.directoryPath)
94101
&& fileName.equals(that.fileName)
95102
&& Arrays.equals(headLineElements, that.headLineElements)

src/main/java/edu/ie3/datamodel/io/csv/timeseries/IndividualTimeSeriesMetaInformation.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,9 +45,8 @@ public ColumnScheme getColumnScheme() {
4545
@Override
4646
public boolean equals(Object o) {
4747
if (this == o) return true;
48-
if (!(o instanceof IndividualTimeSeriesMetaInformation)) return false;
48+
if (!(o instanceof IndividualTimeSeriesMetaInformation that)) return false;
4949
if (!super.equals(o)) return false;
50-
IndividualTimeSeriesMetaInformation that = (IndividualTimeSeriesMetaInformation) o;
5150
return columnScheme == that.columnScheme;
5251
}
5352

src/main/java/edu/ie3/datamodel/io/csv/timeseries/LoadProfileTimeSeriesMetaInformation.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,8 @@ public String getProfile() {
3737
@Override
3838
public boolean equals(Object o) {
3939
if (this == o) return true;
40-
if (!(o instanceof LoadProfileTimeSeriesMetaInformation)) return false;
40+
if (!(o instanceof LoadProfileTimeSeriesMetaInformation that)) return false;
4141
if (!super.equals(o)) return false;
42-
LoadProfileTimeSeriesMetaInformation that = (LoadProfileTimeSeriesMetaInformation) o;
4342
return profile.equals(that.profile);
4443
}
4544

src/main/java/edu/ie3/datamodel/io/extractor/Extractor.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ public static Set<InputEntity> extractElements(NestedEntity nestedEntity)
3434
throws ExtractorException {
3535
CopyOnWriteArrayList<InputEntity> resultingList = new CopyOnWriteArrayList<>();
3636
if (nestedEntity instanceof HasNodes nestedHasNode) {
37-
resultingList.addAll((nestedHasNode).allNodes());
37+
resultingList.addAll(nestedHasNode.allNodes());
3838
}
3939
if (nestedEntity instanceof Operable nestedOperable) {
4040
extractOperator(nestedOperable).ifPresent(resultingList::add);
@@ -43,13 +43,13 @@ public static Set<InputEntity> extractElements(NestedEntity nestedEntity)
4343
resultingList.add(extractType(nestedHasType));
4444
}
4545
if (nestedEntity instanceof HasThermalBus nestedHasThermalBus) {
46-
resultingList.add((nestedHasThermalBus).getThermalBus());
46+
resultingList.add(nestedHasThermalBus.getThermalBus());
4747
}
4848
if (nestedEntity instanceof HasThermalStorage nestedHasThermalStorage) {
49-
resultingList.add((nestedHasThermalStorage).getThermalStorage());
49+
resultingList.add(nestedHasThermalStorage.getThermalStorage());
5050
}
5151
if (nestedEntity instanceof HasLine nestedHasLine) {
52-
resultingList.add((nestedHasLine).getLine());
52+
resultingList.add(nestedHasLine.getLine());
5353
}
5454

5555
if (resultingList.contains(null)) {

src/main/java/edu/ie3/datamodel/io/factory/FactoryData.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -140,8 +140,7 @@ field, getField(field)),
140140
@Override
141141
public boolean equals(Object o) {
142142
if (this == o) return true;
143-
if (!(o instanceof FactoryData)) return false;
144-
FactoryData that = (FactoryData) o;
143+
if (!(o instanceof FactoryData that)) return false;
145144
return fieldsToAttributes.equals(that.fieldsToAttributes)
146145
&& targetClass.equals(that.targetClass);
147146
}

src/main/java/edu/ie3/datamodel/io/factory/input/ThermalUnitInputEntityData.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,8 @@ public ThermalBusInput getBusInput() {
3838
@Override
3939
public boolean equals(Object o) {
4040
if (this == o) return true;
41-
if (!(o instanceof ThermalUnitInputEntityData)) return false;
41+
if (!(o instanceof ThermalUnitInputEntityData that)) return false;
4242
if (!super.equals(o)) return false;
43-
ThermalUnitInputEntityData that = (ThermalUnitInputEntityData) o;
4443
return busInput.equals(that.busInput);
4544
}
4645

0 commit comments

Comments
 (0)