diff --git a/core/src/main/java/ru/trader/core/AbstractItem.java b/core/src/main/java/ru/trader/core/AbstractItem.java index 5484c54..72e7c6b 100644 --- a/core/src/main/java/ru/trader/core/AbstractItem.java +++ b/core/src/main/java/ru/trader/core/AbstractItem.java @@ -11,6 +11,8 @@ public abstract class AbstractItem implements Item { private AbstractMarket market; protected abstract void updateName(String name); + protected abstract void updateIllegalState(FACTION faction, boolean illegal); + protected abstract void updateIllegalState(GOVERNMENT government, boolean illegal); protected final void setMarket(AbstractMarket market){ assert this.market == null; @@ -28,6 +30,28 @@ public abstract class AbstractItem implements Item { } } + @Override + public final void setIllegal(FACTION faction, boolean illegal){ + if (market != null){ + LOG.debug("Change illegal state of item {} for faction {} to {}", this, faction, illegal); + updateIllegalState(faction, illegal); + market.setChange(true); + } else { + updateIllegalState(faction, illegal); + } + } + + @Override + public final void setIllegal(GOVERNMENT government, boolean illegal){ + if (market != null){ + LOG.debug("Change illegal state of item {} for government {} to {}", this, government, illegal); + updateIllegalState(government, illegal); + market.setChange(true); + } else { + updateIllegalState(government, illegal); + } + } + @Override public String toString(){ return getName(); diff --git a/core/src/main/java/ru/trader/core/Item.java b/core/src/main/java/ru/trader/core/Item.java index ec8f9c4..f7805ca 100644 --- a/core/src/main/java/ru/trader/core/Item.java +++ b/core/src/main/java/ru/trader/core/Item.java @@ -8,6 +8,11 @@ public interface Item extends Comparable { String getName(); void setName(String name); + boolean isIllegal(FACTION faction); + void setIllegal(FACTION faction, boolean illegal); + boolean isIllegal(GOVERNMENT government); + void setIllegal(GOVERNMENT government, boolean illegal); + Group getGroup(); @Override diff --git a/core/src/main/java/ru/trader/store/berkeley/ItemProxy.java b/core/src/main/java/ru/trader/store/berkeley/ItemProxy.java index b44f84d..e6f3ea1 100644 --- a/core/src/main/java/ru/trader/store/berkeley/ItemProxy.java +++ b/core/src/main/java/ru/trader/store/berkeley/ItemProxy.java @@ -1,6 +1,8 @@ package ru.trader.store.berkeley; import ru.trader.core.AbstractItem; +import ru.trader.core.FACTION; +import ru.trader.core.GOVERNMENT; import ru.trader.core.Group; import ru.trader.store.berkeley.entities.BDBItem; @@ -33,6 +35,28 @@ public class ItemProxy extends AbstractItem { return item.getName(); } + @Override + protected void updateIllegalState(FACTION faction, boolean illegal) { + item.setIllegal(faction, illegal); + store.getItemAccessor().update(item); + } + + @Override + public boolean isIllegal(FACTION faction) { + return item.isIllegal(faction); + } + + @Override + protected void updateIllegalState(GOVERNMENT government, boolean illegal) { + item.setIllegal(government, illegal); + store.getItemAccessor().update(item); + } + + @Override + public boolean isIllegal(GOVERNMENT government) { + return item.isIllegal(government); + } + @Override public Group getGroup() { if (group == null){ diff --git a/core/src/main/java/ru/trader/store/berkeley/entities/BDBItem.java b/core/src/main/java/ru/trader/store/berkeley/entities/BDBItem.java index 932d0cc..0ae9a8b 100644 --- a/core/src/main/java/ru/trader/store/berkeley/entities/BDBItem.java +++ b/core/src/main/java/ru/trader/store/berkeley/entities/BDBItem.java @@ -1,8 +1,13 @@ package ru.trader.store.berkeley.entities; import com.sleepycat.persist.model.*; +import ru.trader.core.FACTION; +import ru.trader.core.GOVERNMENT; -@Entity(version = 1) +import java.util.Collection; +import java.util.HashSet; + +@Entity(version = 2) public class BDBItem { @PrimaryKey(sequence="I_ID") private long id; @@ -14,6 +19,11 @@ public class BDBItem { onRelatedEntityDelete = DeleteAction.CASCADE) private String groupId; + @SecondaryKey(relate=Relationship.MANY_TO_MANY) + Collection fIllegals = new HashSet<>(); + @SecondaryKey(relate=Relationship.MANY_TO_MANY) + Collection gIllegals = new HashSet<>(); + private BDBItem() { } @@ -34,6 +44,24 @@ public class BDBItem { this.name = name; } + public void setIllegal(FACTION faction, boolean illegal) { + if (illegal) fIllegals.add(faction); + else fIllegals.remove(faction); + } + + public boolean isIllegal(FACTION faction) { + return fIllegals.contains(faction); + } + + public void setIllegal(GOVERNMENT government, boolean illegal) { + if (illegal) gIllegals.add(government); + else gIllegals.remove(government); + } + + public boolean isIllegal(GOVERNMENT government) { + return gIllegals.contains(government); + } + public String getGroupId() { return groupId; } @@ -48,6 +76,8 @@ public class BDBItem { if (id != bdbItem.id) return false; if (!groupId.equals(bdbItem.groupId)) return false; if (!name.equals(bdbItem.name)) return false; + if (!fIllegals.equals(bdbItem.fIllegals)) return false; + if (!gIllegals.equals(bdbItem.gIllegals)) return false; return true; } diff --git a/core/src/main/java/ru/trader/store/simple/SimpleItem.java b/core/src/main/java/ru/trader/store/simple/SimpleItem.java index edf810c..961555a 100644 --- a/core/src/main/java/ru/trader/store/simple/SimpleItem.java +++ b/core/src/main/java/ru/trader/store/simple/SimpleItem.java @@ -1,11 +1,17 @@ package ru.trader.store.simple; import ru.trader.core.AbstractItem; +import ru.trader.core.FACTION; +import ru.trader.core.GOVERNMENT; import ru.trader.core.Group; +import java.util.EnumSet; + public class SimpleItem extends AbstractItem { private String name; private Group group; + private final EnumSet gIllegals = EnumSet.noneOf(GOVERNMENT.class); + private final EnumSet fIllegals = EnumSet.noneOf(FACTION.class); public SimpleItem(String name) { this.name = name; @@ -26,6 +32,28 @@ public class SimpleItem extends AbstractItem { this.name = name; } + @Override + protected void updateIllegalState(FACTION faction, boolean illegal) { + if (illegal) fIllegals.add(faction); + else fIllegals.remove(faction); + } + + @Override + public boolean isIllegal(FACTION faction) { + return fIllegals.contains(faction); + } + + @Override + protected void updateIllegalState(GOVERNMENT government, boolean illegal) { + if (illegal) gIllegals.add(government); + else gIllegals.remove(government); + } + + @Override + public boolean isIllegal(GOVERNMENT government) { + return gIllegals.contains(government); + } + @Override public Group getGroup() { return group;