Keyword: add KeywordInterface to be used instead of KeywordInstance<?>

This commit is contained in:
Hanmac
2017-10-22 06:31:30 +00:00
parent ce2f75d43d
commit acd30aaf08
5 changed files with 42 additions and 12 deletions

1
.gitattributes vendored
View File

@@ -606,6 +606,7 @@ forge-game/src/main/java/forge/game/event/package-info.java -text
forge-game/src/main/java/forge/game/keyword/Keyword.java -text
forge-game/src/main/java/forge/game/keyword/KeywordCollection.java -text
forge-game/src/main/java/forge/game/keyword/KeywordInstance.java -text
forge-game/src/main/java/forge/game/keyword/KeywordInterface.java -text svneol=unset#text/plain
forge-game/src/main/java/forge/game/keyword/KeywordWithAmount.java -text
forge-game/src/main/java/forge/game/keyword/KeywordWithAmountAndType.java -text svneol=unset#text/plain
forge-game/src/main/java/forge/game/keyword/KeywordWithCost.java -text

View File

@@ -154,7 +154,7 @@ public enum Keyword {
displayName = EnumUtil.getEnumDisplayName(this);
}
public static KeywordInstance<?> getInstance(String k) {
public static KeywordInterface getInstance(String k) {
Keyword keyword = Keyword.UNDEFINED;
String details = k;
String enumName = k.replace(' ', '_').toUpperCase();

View File

@@ -12,7 +12,7 @@ public class KeywordCollection implements Iterable<String>, Serializable {
private static final long serialVersionUID = -2882986558147844702L;
private transient KeywordCollectionView view;
private final Multimap<Keyword, KeywordInstance<?>> map = MultimapBuilder.enumKeys(Keyword.class)
private final Multimap<Keyword, KeywordInterface> map = MultimapBuilder.enumKeys(Keyword.class)
.arrayListValues().build();
public boolean contains(Keyword keyword) {
@@ -29,16 +29,16 @@ public class KeywordCollection implements Iterable<String>, Serializable {
public int getAmount(Keyword keyword) {
int amount = 0;
for (KeywordInstance<?> inst : map.get(keyword)) {
for (KeywordInterface inst : map.get(keyword)) {
amount += inst.getAmount();
}
return amount;
}
public boolean add(String k) {
KeywordInstance<?> inst = Keyword.getInstance(k);
KeywordInterface inst = Keyword.getInstance(k);
Keyword keyword = inst.getKeyword();
Collection<KeywordInstance<?>> list = map.get(keyword);
Collection<KeywordInterface> list = map.get(keyword);
if (list.isEmpty() || !keyword.isMultipleRedundant) {
list.add(inst);
return true;
@@ -53,11 +53,11 @@ public class KeywordCollection implements Iterable<String>, Serializable {
}
public boolean remove(String keyword) {
Iterator<KeywordInstance<?>> it = map.values().iterator();
Iterator<KeywordInterface> it = map.values().iterator();
boolean result = false;
while (it.hasNext()) {
KeywordInstance<?> k = it.next();
KeywordInterface k = it.next();
if (keyword.equals(k.getOriginal())) {
it.remove();
result = true;
@@ -78,7 +78,7 @@ public class KeywordCollection implements Iterable<String>, Serializable {
}
public boolean contains(String keyword) {
for (KeywordInstance<?> inst : map.values()) {
for (KeywordInterface inst : map.values()) {
if (keyword.equals(inst.getOriginal())) {
return true;
}
@@ -88,7 +88,7 @@ public class KeywordCollection implements Iterable<String>, Serializable {
public int getAmount(String k) {
int amount = 0;
for (KeywordInstance<?> inst : map.values()) {
for (KeywordInterface inst : map.values()) {
if (k.equals(inst.getOriginal())) {
amount++;
}
@@ -99,7 +99,7 @@ public class KeywordCollection implements Iterable<String>, Serializable {
@Override
public Iterator<String> iterator() {
return new Iterator<String>() {
private final Iterator<KeywordInstance<?>> iterator = map.values().iterator();
private final Iterator<KeywordInterface> iterator = map.values().iterator();
@Override
@@ -109,7 +109,7 @@ public class KeywordCollection implements Iterable<String>, Serializable {
@Override
public String next() {
KeywordInstance<?> entry = iterator.next();
KeywordInterface entry = iterator.next();
return entry.getOriginal();
}

View File

@@ -5,16 +5,28 @@ import java.util.regex.Matcher;
import forge.util.Lang;
public abstract class KeywordInstance<T extends KeywordInstance<?>> {
public abstract class KeywordInstance<T extends KeywordInstance<?>> implements KeywordInterface {
private Keyword keyword;
private String original;
/* (non-Javadoc)
* @see forge.game.keyword.KeywordInterface#getOriginal()
*/
@Override
public String getOriginal() {
return original;
}
/* (non-Javadoc)
* @see forge.game.keyword.KeywordInterface#getKeyword()
*/
@Override
public Keyword getKeyword() {
return keyword;
}
/* (non-Javadoc)
* @see forge.game.keyword.KeywordInterface#getReminderText()
*/
@Override
public String getReminderText() {
String result = formatReminderText(keyword.reminderText);
Matcher m = Pattern.compile("\\{(\\w):(.+?)\\}").matcher(result);
@@ -26,6 +38,10 @@ public abstract class KeywordInstance<T extends KeywordInstance<?>> {
m.appendTail(sb);
return sb.toString();
}
/* (non-Javadoc)
* @see forge.game.keyword.KeywordInterface#getAmount()
*/
@Override
public int getAmount() {
return 1;
}

View File

@@ -0,0 +1,13 @@
package forge.game.keyword;
public interface KeywordInterface {
String getOriginal();
Keyword getKeyword();
String getReminderText();
int getAmount();
}