55import lombok .NoArgsConstructor ;
66import lombok .Setter ;
77
8- import javax .annotation .Nonnull ;
98import java .util .Map ;
109import java .util .HashMap ;
1110import java .util .Set ;
1211import java .util .HashSet ;
12+ import java .util .Optional ;
1313
1414@ Data
15+ @ Setter (AccessLevel .PACKAGE )
1516@ NoArgsConstructor
1617@ SuppressWarnings ("WeakerAccess" )
1718public class Dmi {
@@ -21,35 +22,32 @@ public class Dmi {
2122 */
2223 public static final int MAX_STATES = 512 ;
2324
24- @ Nonnull private String name = "" ;
25+ private String name = "" ;
2526 private int width ;
2627 private int height ;
27- @ Nonnull private DmiMeta metadata = new DmiMeta ();
28- @ Nonnull private Map <String , DmiState > states = new HashMap <>();
28+ private DmiMeta metadata = new DmiMeta ();
29+ private Map <String , DmiState > states = new HashMap <>();
30+ private Set <String > duplicateStatesNames = new HashSet <>();
2931
30- @ Setter (AccessLevel .NONE )
31- @ Nonnull private Set <String > duplicateStatesNames = new HashSet <>();
32-
33- public Dmi (@ Nonnull final String name , final int width , final int height ,
34- @ Nonnull final DmiMeta metadata , @ Nonnull final Map <String , DmiState > states ) {
32+ public Dmi (final String name , final int width , final int height ,
33+ final DmiMeta metadata , final Map <String , DmiState > states ) {
3534 this .name = name ;
3635 this .width = width ;
3736 this .height = height ;
3837 this .metadata = metadata ;
3938 this .states = states ;
40- checkDuplicates ();
41- }
4239
43- public void setStates (@ Nonnull final Map <String , DmiState > states ) {
44- this .states = states ;
45- checkDuplicates ();
40+ states .forEach ((stateName , dmiState ) -> {
41+ if (dmiState .isDuplicate ()) {
42+ duplicateStatesNames .add (stateName );
43+ }
44+ });
4645 }
4746
4847 public void addState (final DmiState dmiState ) {
49- final String stateName = dmiState .getStateName ();
50- states .put (stateName , dmiState );
48+ states .put (dmiState .getName (), dmiState );
5149 if (dmiState .isDuplicate ()) {
52- duplicateStatesNames .add (stateName );
50+ duplicateStatesNames .add (dmiState . getName () );
5351 }
5452 }
5553
@@ -59,8 +57,8 @@ public void addState(final DmiState dmiState) {
5957 * @param stateName state name to search
6058 * @return {@link DmiState} instance or null if wasn't found
6159 */
62- public DmiState getState (final String stateName ) {
63- return states .get (stateName );
60+ public Optional < DmiState > getState (final String stateName ) {
61+ return Optional . ofNullable ( states .get (stateName ) );
6462 }
6563
6664 /**
@@ -69,8 +67,8 @@ public DmiState getState(final String stateName) {
6967 * @param stateName state name to search
7068 * @return {@link DmiSprite} instance or null if wasn't found
7169 */
72- public DmiSprite getStateSprite (final String stateName ) {
73- return CheckSupplierUtil . returnIfNonNull ( getState (stateName ), DmiState ::getSprite );
70+ public Optional < DmiSprite > getStateSprite (final String stateName ) {
71+ return getState (stateName ). flatMap ( DmiState ::getSprite );
7472 }
7573
7674 /**
@@ -79,8 +77,8 @@ public DmiSprite getStateSprite(final String stateName) {
7977 * @param stateName state name to search
8078 * @return {@link DmiSprite} instance or null if wasn't found
8179 */
82- public DmiSprite getStateSprite (final String stateName , final SpriteDir dir ) {
83- return CheckSupplierUtil . returnIfNonNull ( getState (stateName ), s -> s .getSprite (dir ));
80+ public Optional < DmiSprite > getStateSprite (final String stateName , final SpriteDir dir ) {
81+ return getState (stateName ). flatMap ( s -> s .getSprite (dir ));
8482 }
8583
8684 /**
@@ -89,8 +87,8 @@ public DmiSprite getStateSprite(final String stateName, final SpriteDir dir) {
8987 * @param stateName state name to search
9088 * @return {@link DmiSprite} instance or null if wasn't found
9189 */
92- public DmiSprite getStateSprite (final String stateName , final SpriteDir dir , final int frame ) {
93- return CheckSupplierUtil . returnIfNonNull ( getState (stateName ), s -> s .getSprite (dir , frame ));
90+ public Optional < DmiSprite > getStateSprite (final String stateName , final SpriteDir dir , final int frame ) {
91+ return getState (stateName ). flatMap ( s -> s .getSprite (dir , frame ));
9492 }
9593
9694 public boolean hasState (final String stateName ) {
@@ -114,13 +112,4 @@ public boolean isHasDuplicates() {
114112 public boolean isStateOverflow () {
115113 return states .size () > MAX_STATES ;
116114 }
117-
118- private void checkDuplicates () {
119- duplicateStatesNames .clear ();
120- states .forEach ((stateName , dmiState ) -> {
121- if (dmiState .isDuplicate ()) {
122- duplicateStatesNames .add (stateName );
123- }
124- });
125- }
126115}
0 commit comments