Archived
0

implement illegal state for items

This commit is contained in:
iMoHax
2015-12-09 17:08:10 +03:00
parent eb6acf5b56
commit d113caf564
5 changed files with 112 additions and 1 deletions

View File

@@ -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();

View File

@@ -8,6 +8,11 @@ public interface Item extends Comparable<Item> {
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

View File

@@ -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){

View File

@@ -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<FACTION> fIllegals = new HashSet<>();
@SecondaryKey(relate=Relationship.MANY_TO_MANY)
Collection<GOVERNMENT> 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;
}

View File

@@ -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<GOVERNMENT> gIllegals = EnumSet.noneOf(GOVERNMENT.class);
private final EnumSet<FACTION> 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;