Skip to content
This repository was archived by the owner on Jan 8, 2023. It is now read-only.

Commit bbfdb50

Browse files
committed
improves getters API
1 parent 6ad0d9d commit bbfdb50

File tree

7 files changed

+73
-42
lines changed

7 files changed

+73
-42
lines changed

src/main/java/io/github/spair/byond/dmi/Dmi.java

Lines changed: 24 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616

1717
@Data
1818
@NoArgsConstructor
19-
@SuppressWarnings("WeakerAccess")
19+
@SuppressWarnings({"WeakerAccess", "OptionalGetWithoutIsPresent"})
2020
public class Dmi implements Iterable<Map.Entry<String, DmiState>> {
2121

2222
/**
@@ -84,24 +84,36 @@ public void clearStates() {
8484
duplicateStatesNames.clear();
8585
}
8686

87+
public DmiState getState(final String stateName) {
88+
return getStateSafe(stateName).get();
89+
}
90+
8791
/**
8892
* Returns state with provided name or empty optional if not found.
8993
*
9094
* @param stateName state name to search
9195
* @return {@link DmiState} instance or empty optional if not found
9296
*/
93-
public Optional<DmiState> getState(final String stateName) {
97+
public Optional<DmiState> getStateSafe(final String stateName) {
9498
return Optional.ofNullable(states.get(stateName));
9599
}
96100

101+
public DmiSprite getStateSprite(final String stateName) {
102+
return getStateSpriteSafe(stateName).get();
103+
}
104+
97105
/**
98106
* Returns the first sprite of state with provided name or empty optional if not found.
99107
*
100108
* @param stateName state name to search
101109
* @return {@link DmiSprite} instance or empty optional if not found
102110
*/
103-
public Optional<DmiSprite> getStateSprite(final String stateName) {
104-
return getState(stateName).flatMap(DmiState::getSprite);
111+
public Optional<DmiSprite> getStateSpriteSafe(final String stateName) {
112+
return getStateSafe(stateName).flatMap(DmiState::getSpriteSafe);
113+
}
114+
115+
public DmiSprite getStateSprite(final String stateName, final SpriteDir dir) {
116+
return getStateSpriteSafe(stateName, dir).get();
105117
}
106118

107119
/**
@@ -111,8 +123,12 @@ public Optional<DmiSprite> getStateSprite(final String stateName) {
111123
* @param dir dir value to search
112124
* @return {@link DmiSprite} instance or empty optional if not found
113125
*/
114-
public Optional<DmiSprite> getStateSprite(final String stateName, final SpriteDir dir) {
115-
return getState(stateName).flatMap(s -> s.getSprite(dir));
126+
public Optional<DmiSprite> getStateSpriteSafe(final String stateName, final SpriteDir dir) {
127+
return getStateSafe(stateName).flatMap(s -> s.getSpriteSafe(dir));
128+
}
129+
130+
public DmiSprite getStateSprite(final String stateName, final SpriteDir dir, final int frame) {
131+
return getStateSpriteSafe(stateName, dir, frame).get();
116132
}
117133

118134
/**
@@ -123,8 +139,8 @@ public Optional<DmiSprite> getStateSprite(final String stateName, final SpriteDi
123139
* @param frame dir number to search
124140
* @return {@link DmiSprite} instance or empty optional if not found
125141
*/
126-
public Optional<DmiSprite> getStateSprite(final String stateName, final SpriteDir dir, final int frame) {
127-
return getState(stateName).flatMap(s -> s.getSprite(dir, frame));
142+
public Optional<DmiSprite> getStateSpriteSafe(final String stateName, final SpriteDir dir, final int frame) {
143+
return getStateSafe(stateName).flatMap(s -> s.getSpriteSafe(dir, frame));
128144
}
129145

130146
public boolean hasState(final String stateName) {

src/main/java/io/github/spair/byond/dmi/DmiState.java

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
@Data
1515
@NoArgsConstructor
1616
@AllArgsConstructor
17-
@SuppressWarnings("WeakerAccess")
17+
@SuppressWarnings({"WeakerAccess", "OptionalGetWithoutIsPresent"})
1818
public class DmiState implements Iterable<Map.Entry<SpriteDir, List<DmiSprite>>> {
1919

2020
public static final String MOVEMENT_SUFFIX = " (M)";
@@ -44,14 +44,22 @@ public void addDuplicate(final DmiState dmiState) {
4444
duplicates.add(dmiState);
4545
}
4646

47+
public DmiSprite getSprite() {
48+
return getSpriteSafe().get();
49+
}
50+
4751
/**
4852
* Returns the first available sprite.
4953
* That means, that sprite will be the first frame and {@link SpriteDir#SOUTH} dir.
5054
*
5155
* @return first available sprite
5256
*/
53-
public Optional<DmiSprite> getSprite() {
54-
return getSprite(SpriteDir.SOUTH);
57+
public Optional<DmiSprite> getSpriteSafe() {
58+
return getSpriteSafe(SpriteDir.SOUTH);
59+
}
60+
61+
public DmiSprite getSprite(final SpriteDir dir) {
62+
return getSpriteSafe(dir).get();
5563
}
5664

5765
/**
@@ -61,10 +69,14 @@ public Optional<DmiSprite> getSprite() {
6169
* @param dir dir to search sprite
6270
* @return optional sprite instance
6371
*/
64-
public Optional<DmiSprite> getSprite(final SpriteDir dir) {
72+
public Optional<DmiSprite> getSpriteSafe(final SpriteDir dir) {
6573
return Optional.ofNullable(sprites.get(dir)).map(dmiSprites -> dmiSprites.get(0));
6674
}
6775

76+
public DmiSprite getSprite(final SpriteDir dir, final int frame) {
77+
return getSpriteSafe(dir, frame).get();
78+
}
79+
6880
/**
6981
* Returns sprite with specified dir and frame. If sprite wasn't found result will be null.
7082
* Frame count goes <b>from</b> '1' number, so if method get something lesser then it than exception will be thrown.
@@ -73,7 +85,7 @@ public Optional<DmiSprite> getSprite(final SpriteDir dir) {
7385
* @param frame frame to search sprite
7486
* @return optional sprite instance
7587
*/
76-
public Optional<DmiSprite> getSprite(final SpriteDir dir, final int frame) {
88+
public Optional<DmiSprite> getSpriteSafe(final SpriteDir dir, final int frame) {
7789
if (frame <= 0) {
7890
throw new IllegalArgumentException("Frame count goes from 1 digit. Received: " + frame);
7991
}
@@ -82,13 +94,17 @@ public Optional<DmiSprite> getSprite(final SpriteDir dir, final int frame) {
8294
);
8395
}
8496

97+
public List<DmiSprite> getSpriteList(final SpriteDir dir) {
98+
return Optional.ofNullable(sprites.get(dir)).get();
99+
}
100+
85101
/**
86102
* Returns the list of sprites for specified dir.
87103
*
88104
* @param dir dir to search sprite
89105
* @return optional list of sprites for specified dir
90106
*/
91-
public Optional<List<DmiSprite>> getSpriteList(final SpriteDir dir) {
107+
public Optional<List<DmiSprite>> getSpriteListSafe(final SpriteDir dir) {
92108
return Optional.ofNullable(sprites.get(dir));
93109
}
94110

src/main/java/io/github/spair/byond/dmi/DmiWriter.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,7 @@ private static List<BufferedImage> getAllSprites(final Dmi dmi) {
170170
private static void addStateSpritesToList(final List<BufferedImage> spritesList, final DmiState dmiState) {
171171
for (int frame = 1; frame <= dmiState.getFrames(); frame++) {
172172
for (val spriteDir : dmiState.getSprites().keySet()) {
173-
spritesList.add(dmiState.getSprite(spriteDir, frame).orElseThrow(IllegalStateException::new).getSprite());
173+
spritesList.add(dmiState.getSprite(spriteDir, frame).getSprite());
174174
}
175175
}
176176
}

src/test/java/io/github/spair/byond/dmi/DmiStateTest.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,8 @@ public void setUp() {
2323
public void testGetSprite() {
2424
dmiState.addSprite(new DmiSprite(mockedImage, SpriteDir.SOUTH, 1));
2525

26-
assertNotEquals(Optional.empty(), dmiState.getSprite(SpriteDir.SOUTH));
27-
assertEquals(Optional.empty(), dmiState.getSprite(SpriteDir.NORTH));
26+
assertNotEquals(Optional.empty(), dmiState.getSpriteSafe(SpriteDir.SOUTH));
27+
assertEquals(Optional.empty(), dmiState.getSpriteSafe(SpriteDir.NORTH));
2828
}
2929

3030
@Test
@@ -33,16 +33,16 @@ public void testGetSpriteWithFrame() {
3333
dmiState.addSprite(new DmiSprite(mockedImage, SpriteDir.EAST, 1));
3434
dmiState.addSprite(new DmiSprite(mockedImage, SpriteDir.EAST, 2));
3535

36-
assertNotEquals(Optional.empty(), dmiState.getSprite(SpriteDir.SOUTH, 1));
36+
assertNotEquals(Optional.empty(), dmiState.getSpriteSafe(SpriteDir.SOUTH, 1));
3737

38-
Optional<DmiSprite> sprite = dmiState.getSprite(SpriteDir.EAST, 2);
38+
Optional<DmiSprite> sprite = dmiState.getSpriteSafe(SpriteDir.EAST, 2);
3939

4040
assertTrue(sprite.isPresent());
4141
assertEquals(2, sprite.get().getFrameNumber());
4242
}
4343

4444
@Test(expected = IllegalArgumentException.class)
4545
public void testGetSpriteWithIllegalFrame() {
46-
dmiState.getSprite(SpriteDir.SOUTH, 0);
46+
dmiState.getSpriteSafe(SpriteDir.SOUTH, 0);
4747
}
4848
}

src/test/java/io/github/spair/byond/dmi/DmiTest.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -73,8 +73,8 @@ public void testGetStateSprite() {
7373

7474
dmi.addState(dmiState);
7575

76-
assertNotEquals(Optional.empty(), dmi.getStateSprite("state"));
77-
assertEquals(Optional.empty(), dmi.getStateSprite("1234567890"));
76+
assertNotEquals(Optional.empty(), dmi.getStateSpriteSafe("state"));
77+
assertEquals(Optional.empty(), dmi.getStateSpriteSafe("1234567890"));
7878
}
7979

8080
@Test
@@ -84,8 +84,8 @@ public void testGetStateSpriteWithDir() {
8484

8585
dmi.addState(dmiState);
8686

87-
assertNotEquals(Optional.empty(), dmi.getStateSprite("state", SpriteDir.NORTH));
88-
assertEquals(Optional.empty(), dmi.getStateSprite("state", SpriteDir.SOUTH));
87+
assertNotEquals(Optional.empty(), dmi.getStateSpriteSafe("state", SpriteDir.NORTH));
88+
assertEquals(Optional.empty(), dmi.getStateSpriteSafe("state", SpriteDir.SOUTH));
8989
}
9090

9191
@Test
@@ -95,8 +95,8 @@ public void testGetStateSpriteWithDirAndFrame() {
9595

9696
dmi.addState(dmiState);
9797

98-
assertNotEquals(Optional.empty(), dmi.getStateSprite("state", SpriteDir.SOUTHEAST, 1));
99-
assertEquals(Optional.empty(), dmi.getStateSprite("state", SpriteDir.SOUTHEAST, 15));
98+
assertNotEquals(Optional.empty(), dmi.getStateSpriteSafe("state", SpriteDir.SOUTHEAST, 1));
99+
assertEquals(Optional.empty(), dmi.getStateSpriteSafe("state", SpriteDir.SOUTHEAST, 15));
100100
}
101101

102102
@Test

src/test/java/io/github/spair/byond/dmi/slurper/DmiSlurperTest.java

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,6 @@ public void testSlurpUpWithDuplicateStates() {
4343
assertTrue(dmi.isHasDuplicates());
4444
}
4545

46-
@SuppressWarnings("OptionalGetWithoutIsPresent")
4746
private void commonDmiAssertion(Dmi dmi) {
4847
assertEquals("rollerbed_original.dmi", dmi.getName());
4948
assertEquals(160, dmi.getTotalWidth());
@@ -52,7 +51,7 @@ private void commonDmiAssertion(Dmi dmi) {
5251
assertEquals(32, dmi.getSpriteWidth());
5352
assertEquals(32, dmi.getSpriteHeight());
5453

55-
DmiState downState = dmi.getState("down").get();
54+
DmiState downState = dmi.getState("down");
5655

5756
assertEquals("down", downState.getName());
5857
assertEquals(1, downState.getDirs());
@@ -62,7 +61,7 @@ private void commonDmiAssertion(Dmi dmi) {
6261
assertFalse(downState.isMovement());
6362
assertFalse(downState.isRewind());
6463

65-
DmiState upState = dmi.getState("up").get();
64+
DmiState upState = dmi.getState("up");
6665

6766
assertEquals("up", upState.getName());
6867
assertEquals(4, upState.getDirs());
@@ -72,7 +71,7 @@ private void commonDmiAssertion(Dmi dmi) {
7271
assertFalse(upState.isMovement());
7372
assertTrue(upState.isRewind());
7473

75-
DmiState foldedState = dmi.getState("folded").get();
74+
DmiState foldedState = dmi.getState("folded");
7675

7776
assertEquals("folded", foldedState.getName());
7877
assertEquals(4, foldedState.getDirs());
@@ -83,18 +82,18 @@ private void commonDmiAssertion(Dmi dmi) {
8382
assertFalse(foldedState.isRewind());
8483

8584
assertEquals(new HashSet<>(Collections.singletonList(SpriteDir.SOUTH)), downState.getSprites().keySet());
86-
assertEquals(1, downState.getSpriteList(SpriteDir.SOUTH).get().size());
87-
assertEquals(SpriteDir.SOUTH, downState.getSprite(SpriteDir.SOUTH).get().getDir());
88-
assertEquals(1, downState.getSprite(SpriteDir.SOUTH).get().getFrameNumber());
85+
assertEquals(1, downState.getSpriteList(SpriteDir.SOUTH).size());
86+
assertEquals(SpriteDir.SOUTH, downState.getSprite(SpriteDir.SOUTH).getDir());
87+
assertEquals(1, downState.getSprite(SpriteDir.SOUTH).getFrameNumber());
8988

9089
assertEquals(new HashSet<>(Arrays.asList(SpriteDir.SOUTH, SpriteDir.NORTH, SpriteDir.EAST, SpriteDir.WEST)), upState.getSprites().keySet());
91-
assertEquals(1, upState.getSpriteList(SpriteDir.SOUTH).get().size());
92-
assertEquals(SpriteDir.NORTH, upState.getSprite(SpriteDir.NORTH).get().getDir());
93-
assertEquals(1, upState.getSprite(SpriteDir.EAST).get().getFrameNumber());
90+
assertEquals(1, upState.getSpriteList(SpriteDir.SOUTH).size());
91+
assertEquals(SpriteDir.NORTH, upState.getSprite(SpriteDir.NORTH).getDir());
92+
assertEquals(1, upState.getSprite(SpriteDir.EAST).getFrameNumber());
9493

9594
assertEquals(new HashSet<>(Arrays.asList(SpriteDir.SOUTH, SpriteDir.NORTH, SpriteDir.EAST, SpriteDir.WEST)), foldedState.getSprites().keySet());
96-
assertEquals(3, foldedState.getSpriteList(SpriteDir.SOUTH).get().size());
97-
assertEquals(SpriteDir.NORTH, foldedState.getSprite(SpriteDir.NORTH, 2).get().getDir());
98-
assertEquals(3, foldedState.getSprite(SpriteDir.EAST, 3).get().getFrameNumber());
95+
assertEquals(3, foldedState.getSpriteList(SpriteDir.SOUTH).size());
96+
assertEquals(SpriteDir.NORTH, foldedState.getSprite(SpriteDir.NORTH, 2).getDir());
97+
assertEquals(3, foldedState.getSprite(SpriteDir.EAST, 3).getFrameNumber());
9998
}
10099
}

src/test/java/io/github/spair/byond/dmi/slurper/StateExtractorTest.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,10 +37,10 @@ public void testExtractStates() throws Exception {
3737
assertEquals(1, states.get("down").getSprites().size());
3838
assertEquals(1, states.get("down (M)").getSprites().size());
3939

40-
assertEquals(SpriteDir.SOUTH, states.get("down").getSprite(SpriteDir.SOUTH).get().getDir());
41-
assertEquals(SpriteDir.SOUTH, states.get("down (M)").getSprite(SpriteDir.SOUTH).get().getDir());
40+
assertEquals(SpriteDir.SOUTH, states.get("down").getSpriteSafe(SpriteDir.SOUTH).get().getDir());
41+
assertEquals(SpriteDir.SOUTH, states.get("down (M)").getSpriteSafe(SpriteDir.SOUTH).get().getDir());
4242

43-
assertEquals(states.get("down").getSprite(SpriteDir.SOUTH), states.get("down (M)").getSprite(SpriteDir.SOUTH));
43+
assertEquals(states.get("down").getSpriteSafe(SpriteDir.SOUTH), states.get("down (M)").getSpriteSafe(SpriteDir.SOUTH));
4444
}
4545

4646
@Test

0 commit comments

Comments
 (0)