Archived
0

add legal state item in factions and governments

This commit is contained in:
iMoHax
2016-03-15 13:43:53 +03:00
parent dceba046e0
commit 400f600b2c
12 changed files with 189 additions and 14 deletions

View File

@@ -13,6 +13,8 @@ public abstract class AbstractItem implements Item {
protected abstract void updateName(String name);
protected abstract void updateIllegalState(FACTION faction, boolean illegal);
protected abstract void updateIllegalState(GOVERNMENT government, boolean illegal);
protected abstract void updateLegalState(FACTION faction, boolean legal);
protected abstract void updateLegalState(GOVERNMENT government, boolean legal);
protected final void setMarket(AbstractMarket market){
assert this.market == null;
@@ -52,6 +54,28 @@ public abstract class AbstractItem implements Item {
}
}
@Override
public final void setLegal(FACTION faction, boolean legal){
if (market != null){
LOG.debug("Change legal state of item {} for faction {} to {}", this, faction, legal);
updateLegalState(faction, legal);
market.setChange(true);
} else {
updateLegalState(faction, legal);
}
}
@Override
public final void setLegal(GOVERNMENT government, boolean legal){
if (market != null){
LOG.debug("Change legal state of item {} for government {} to {}", this, government, legal);
updateLegalState(government, legal);
market.setChange(true);
} else {
updateLegalState(government, legal);
}
}
@Override
public String toString(){
return getName();

View File

@@ -12,8 +12,10 @@ public interface Item extends Comparable<Item> {
default boolean isIllegal(Vendor vendor){
FACTION faction = vendor.getFaction();
GOVERNMENT government = vendor.getGovernment();
return faction != null && getIllegalFactions().contains(vendor.getFaction())
|| government != null && getIllegalGovernments().contains(government);
if (faction != null && getLegalFactions().contains(faction)) return false;
if (government != null && getLegalGovernments().contains(government)) return false;
return faction != null && getIllegalFactions().contains(faction) ||
government != null && getIllegalGovernments().contains(government);
}
Collection<FACTION> getIllegalFactions();
@@ -21,6 +23,11 @@ public interface Item extends Comparable<Item> {
Collection<GOVERNMENT> getIllegalGovernments();
void setIllegal(GOVERNMENT government, boolean illegal);
Collection<FACTION> getLegalFactions();
void setLegal(FACTION faction, boolean legal);
Collection<GOVERNMENT> getLegalGovernments();
void setLegal(GOVERNMENT government, boolean legal);
Group getGroup();
@Override

View File

@@ -122,6 +122,18 @@ public interface Market {
for (Item item : items) {
Item nItem = getItem(item.getName());
if (nItem == null) nItem = this.addItem(item.getName(), mapGroups.get(item.getGroup()));
for (FACTION faction : item.getIllegalFactions()) {
nItem.setIllegal(faction, true);
}
for (FACTION faction : item.getLegalFactions()) {
nItem.setLegal(faction, true);
}
for (GOVERNMENT government : item.getIllegalGovernments()) {
nItem.setIllegal(government, true);
}
for (GOVERNMENT government : item.getLegalGovernments()) {
nItem.setLegal(government, true);
}
mapItems.put(item, nItem);
}
mapGroups.clear();

View File

@@ -59,6 +59,28 @@ public class ItemProxy extends AbstractItem {
return item.getIllegalGovernments();
}
@Override
protected void updateLegalState(FACTION faction, boolean legal) {
item.setLegal(faction, legal);
store.getItemAccessor().update(item);
}
@Override
public Collection<FACTION> getLegalFactions() {
return item.getLegalFactions();
}
@Override
protected void updateLegalState(GOVERNMENT government, boolean legal) {
item.setLegal(government, legal);
store.getItemAccessor().update(item);
}
@Override
public Collection<GOVERNMENT> getLegalGovernments() {
return item.getLegalGovernments();
}
@Override
public Group getGroup() {
if (group == null){

View File

@@ -7,7 +7,7 @@ import ru.trader.core.GOVERNMENT;
import java.util.Collection;
import java.util.HashSet;
@Entity(version = 2)
@Entity(version = 3)
public class BDBItem {
@PrimaryKey(sequence="I_ID")
private long id;
@@ -19,10 +19,10 @@ 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<>();
HashSet<FACTION> fIllegals = new HashSet<>();
HashSet<GOVERNMENT> gIllegals = new HashSet<>();
HashSet<FACTION> fLegals = new HashSet<>();
HashSet<GOVERNMENT> gLegals = new HashSet<>();
private BDBItem() {
}
@@ -62,6 +62,25 @@ public class BDBItem {
return gIllegals;
}
public void setLegal(FACTION faction, boolean legal) {
if (legal) fLegals.add(faction);
else fLegals.remove(faction);
}
public Collection<FACTION> getLegalFactions() {
return fLegals;
}
public void setLegal(GOVERNMENT government, boolean legal) {
if (legal) gLegals.add(government);
else gLegals.remove(government);
}
public Collection<GOVERNMENT> getLegalGovernments() {
return gLegals;
}
public String getGroupId() {
return groupId;
}
@@ -78,6 +97,8 @@ public class BDBItem {
if (!name.equals(bdbItem.name)) return false;
if (!fIllegals.equals(bdbItem.fIllegals)) return false;
if (!gIllegals.equals(bdbItem.gIllegals)) return false;
if (!fLegals.equals(bdbItem.fLegals)) return false;
if (!gLegals.equals(bdbItem.gLegals)) return false;
return true;
}

View File

@@ -35,6 +35,8 @@ public class MarketDocHandler extends DefaultHandler {
protected final static String ITEM_ATTR = "item";
protected final static String ILLEGAL_FACTION_ATTR = "illegalf";
protected final static String ILLEGAL_GOVERNMENT__ATTR = "illegalg";
protected final static String LEGAL_FACTION_ATTR = "legalf";
protected final static String LEGAL_GOVERNMENT__ATTR = "legalg";
protected final static String DISTANCE_ATTR = "distance";
protected final static String X_ATTR = "x";
protected final static String Y_ATTR = "y";
@@ -155,8 +157,23 @@ public class MarketDocHandler extends DefaultHandler {
}
}
LOG.debug("parse item {} ({}), illegal - {}, {}", name, id, factions, governments);
onItem(name, id, factions, governments);
String legalFactions = attributes.getValue(LEGAL_FACTION_ATTR);
String legalGovernments = attributes.getValue(LEGAL_GOVERNMENT__ATTR);
EnumSet<FACTION> legalf = EnumSet.noneOf(FACTION.class);
if (legalFactions != null){
for (String f : legalFactions.split(",")) {
legalf.add(FACTION.valueOf(f));
}
}
EnumSet<GOVERNMENT> legalg = EnumSet.noneOf(GOVERNMENT.class);
if (legalGovernments != null){
for (String f : legalGovernments.split(",")) {
legalg.add(GOVERNMENT.valueOf(f));
}
}
LOG.debug("parse item {} ({}), illegal - {}, {}, legal - {}, {}", name, id, factions, governments, legalf, legalg);
onItem(name, id, factions, governments, legalf, legalg);
}
protected void parseOffer(Attributes attributes) throws SAXException {
@@ -209,7 +226,8 @@ public class MarketDocHandler extends DefaultHandler {
curVendor.add(type);
}
protected void onItem(String name, String id, Collection<FACTION> illegalFactions, Collection<GOVERNMENT> illegalGovernment) {
protected void onItem(String name, String id, Collection<FACTION> illegalFactions, Collection<GOVERNMENT> illegalGovernment,
Collection<FACTION> legalFactions, Collection<GOVERNMENT> legalGovernment) {
Item item = world.addItem(name, curGroup);
for (FACTION faction : illegalFactions) {
item.setIllegal(faction, true);
@@ -217,6 +235,12 @@ public class MarketDocHandler extends DefaultHandler {
for (GOVERNMENT government : illegalGovernment) {
item.setIllegal(government, true);
}
for (FACTION faction : legalFactions) {
item.setLegal(faction, true);
}
for (GOVERNMENT government : legalGovernment) {
item.setLegal(government, true);
}
items.put(id, item);
}

View File

@@ -78,6 +78,17 @@ public class MarketStreamWriter {
String str = governments.stream().map(GOVERNMENT::toString).collect(Collectors.joining(","));
out.writeAttribute(MarketDocHandler.ILLEGAL_GOVERNMENT__ATTR, str);
}
factions = item.getLegalFactions();
if (!factions.isEmpty()) {
String str = factions.stream().map(FACTION::toString).collect(Collectors.joining(","));
out.writeAttribute(MarketDocHandler.LEGAL_FACTION_ATTR, str);
}
governments = item.getLegalGovernments();
if (!governments.isEmpty()) {
String str = governments.stream().map(GOVERNMENT::toString).collect(Collectors.joining(","));
out.writeAttribute(MarketDocHandler.LEGAL_GOVERNMENT__ATTR, str);
}
}
protected void writePlaces() throws XMLStreamException {

View File

@@ -13,6 +13,8 @@ public class SimpleItem extends AbstractItem {
private Group group;
private final EnumSet<GOVERNMENT> gIllegals = EnumSet.noneOf(GOVERNMENT.class);
private final EnumSet<FACTION> fIllegals = EnumSet.noneOf(FACTION.class);
private final EnumSet<GOVERNMENT> gLegals = EnumSet.noneOf(GOVERNMENT.class);
private final EnumSet<FACTION> fLegals = EnumSet.noneOf(FACTION.class);
public SimpleItem(String name) {
this.name = name;
@@ -55,6 +57,28 @@ public class SimpleItem extends AbstractItem {
return gIllegals;
}
@Override
protected void updateLegalState(FACTION faction, boolean legal) {
if (legal) fLegals.add(faction);
else fLegals.remove(faction);
}
@Override
public Collection<FACTION> getLegalFactions() {
return fLegals;
}
@Override
protected void updateLegalState(GOVERNMENT government, boolean legal) {
if (legal) gLegals.add(government);
else gLegals.remove(government);
}
@Override
public Collection<GOVERNMENT> getLegalGovernments() {
return gLegals;
}
@Override
public Group getGroup() {
return group;

View File

@@ -50,6 +50,8 @@
<xs:attribute name="name" type="xs:string" use="required"/>
<xs:attribute name="illegalf" type="xs:string" use="optional"/>
<xs:attribute name="illegalg" type="xs:string" use="optional"/>
<xs:attribute name="legalf" type="xs:string" use="optional"/>
<xs:attribute name="legalg" type="xs:string" use="optional"/>
</xs:complexType>
<xs:complexType name="placeType" mixed="true">