From: "Enrico Weigelt, metux IT consult" <[email protected]>
---
.../freecol/client/control/InGameController.java | 4 +-
.../gui/panel/colopedia/GoodsDetailPanel.java | 2 +-
.../gui/panel/report/ReportCompactColonyPanel.java | 6 +--
src/net/sf/freecol/common/model/AbstractGoods.java | 63 ++++++++++++++++++----
src/net/sf/freecol/common/model/BuildQueue.java | 2 +-
src/net/sf/freecol/common/model/Building.java | 2 +-
src/net/sf/freecol/common/model/Colony.java | 7 ++-
.../sf/freecol/common/model/ProductionCache.java | 6 +--
.../sf/freecol/common/model/ProductionInfo.java | 6 +--
src/net/sf/freecol/common/model/ProductionMap.java | 6 +--
.../sf/freecol/common/model/ProductionType.java | 2 +-
src/net/sf/freecol/common/model/Role.java | 2 +-
.../sf/freecol/common/model/TradeRouteStop.java | 11 ++--
src/net/sf/freecol/common/model/WorkLocation.java | 6 +--
src/net/sf/freecol/server/model/ServerColony.java | 15 ++++--
.../sf/freecol/server/model/ServerColonyTest.java | 3 +-
16 files changed, 93 insertions(+), 50 deletions(-)
diff --git a/src/net/sf/freecol/client/control/InGameController.java
b/src/net/sf/freecol/client/control/InGameController.java
index b164c8ce020..9d2f6239f91 100644
--- a/src/net/sf/freecol/client/control/InGameController.java
+++ b/src/net/sf/freecol/client/control/InGameController.java
@@ -1958,7 +1958,7 @@ public final class InGameController extends
FreeColClientHolder {
// failed somewhere). If it is expected to load, reduce the
// loading amount by what is already on board.
for (Goods g : unit.getCompactGoods()) {
- AbstractGoods ag = find(toLoad,
AbstractGoods.matches(g.getType()));
+ AbstractGoods ag = AbstractGoods.findByType(toLoad, g.getType());
if (ag == null) { // Excess goods on board, failed unload?
unexpected.addStringTemplate(g.getLabel());
} else {
@@ -2006,7 +2006,7 @@ public final class InGameController extends
FreeColClientHolder {
turns += unit.getTurnsToReach(start, trs.getLocation());
int amountIn = trs.getImportAmount(type, turns),
amountOut = trs.getExportAmount(type, turns);
- if (none(trs.getCompactCargo(),
AbstractGoods.matches(type))
+ if ((AbstractGoods.findByType(trs.getCompactCargo(),type)
== null)
|| amountIn > amountOut) {
importAmount = amountIn;
unload = trs;
diff --git
a/src/net/sf/freecol/client/gui/panel/colopedia/GoodsDetailPanel.java
b/src/net/sf/freecol/client/gui/panel/colopedia/GoodsDetailPanel.java
index 9bc0e48c047..22268485a75 100644
--- a/src/net/sf/freecol/client/gui/panel/colopedia/GoodsDetailPanel.java
+++ b/src/net/sf/freecol/client/gui/panel/colopedia/GoodsDetailPanel.java
@@ -216,7 +216,7 @@ public class GoodsDetailPanel extends
ColopediaGameObjectTypePanel<GoodsType> {
boolean result = false;
for (T bt : input) {
if (bt.needsGoodsToBuild()
- && any(bt.getRequiredGoods(), AbstractGoods.matches(type))) {
+ && AbstractGoods.anyIsType(bt.getRequiredGoods(), type)) {
output.add(bt);
result = true;
}
diff --git
a/src/net/sf/freecol/client/gui/panel/report/ReportCompactColonyPanel.java
b/src/net/sf/freecol/client/gui/panel/report/ReportCompactColonyPanel.java
index e9b87d002ef..9d046717dfa 100644
--- a/src/net/sf/freecol/client/gui/panel/report/ReportCompactColonyPanel.java
+++ b/src/net/sf/freecol/client/gui/panel/report/ReportCompactColonyPanel.java
@@ -291,8 +291,7 @@ public final class ReportCompactColonyPanel extends
ReportPanel
for (WorkLocation wl :
colony.getWorkLocationsForProducing(goodsType)) {
ProductionInfo pi = colony.getProductionInfo(wl);
if (pi == null) continue;
- deficit = find(pi.getConsumptionDeficit(),
- AbstractGoods.matches(goodsType));
+ deficit =
AbstractGoods.findByType(pi.getConsumptionDeficit(), goodsType);
if (deficit != null) {
status = ProductionStatus.CONSUMPTION;
extra = deficit.getAmount();
@@ -317,8 +316,7 @@ public final class ReportCompactColonyPanel extends
ReportPanel
for (WorkLocation wl :
colony.getWorkLocationsForProducing(goodsType)) {
ProductionInfo pi = colony.getProductionInfo(wl);
if (pi == null) continue;
- deficit = find(pi.getProductionDeficit(),
- AbstractGoods.matches(goodsType));
+ deficit =
AbstractGoods.findByType(pi.getProductionDeficit(),goodsType);
if (deficit != null) {
status = ProductionStatus.PRODUCTION;
extra = deficit.getAmount();
diff --git a/src/net/sf/freecol/common/model/AbstractGoods.java
b/src/net/sf/freecol/common/model/AbstractGoods.java
index 638588568ff..5d2e67ca790 100644
--- a/src/net/sf/freecol/common/model/AbstractGoods.java
+++ b/src/net/sf/freecol/common/model/AbstractGoods.java
@@ -19,9 +19,8 @@
package net.sf.freecol.common.model;
-import java.util.Collection;
import java.util.Comparator;
-import java.util.function.Predicate;
+import java.util.List;
import net.sf.freecol.common.model.GoodsType;
import static net.sf.freecol.common.util.CollectionUtils.*;
@@ -207,8 +206,8 @@ public class AbstractGoods extends FreeColObject implements
Named {
* @return The goods count found, or zero if not found.
*/
public static int getCount(GoodsType type,
- Collection<? extends AbstractGoods> goods) {
- AbstractGoods ag = find(goods, matches(type));
+ List<? extends AbstractGoods> goods) {
+ AbstractGoods ag = AbstractGoods.findByType(goods, type);
return (ag == null) ? 0 : ag.getAmount();
}
@@ -225,15 +224,61 @@ public class AbstractGoods extends FreeColObject
implements Named {
}
/**
- * A predicate maker to match by type.
+ * Check whether it is of the given {@link GoodsType}
*
- * @param key The key of type {@link GoodsType}
- * @return A suitable {@code Predicate}.
+ * @param gt The {@link GoodsType} to match against
+ * @return True if matching
*/
- public static final Predicate<? super AbstractGoods> matches(final
GoodsType key) {
- return matchKey(key, AbstractGoods::getType);
+ public final boolean isType(GoodsType gt) {
+ if ((gt == null) || (type == null))
+ return false;
+
+ return (type == gt || type.equals(gt));
}
+ /**
+ * Check whether any in the list is of given {@link GoodsType}
+ */
+ public static boolean anyIsType(List<AbstractGoods> l, GoodsType gt) {
+ if (l != null)
+ for (AbstractGoods ag : l)
+ if (ag.isType(gt))
+ return true;
+
+ return false;
+ }
+
+ /**
+ * find any in list by type
+ */
+ public static AbstractGoods findByType(List<AbstractGoods> l, GoodsType
gt) {
+ if (l != null)
+ for (AbstractGoods ag : l)
+ if (ag.getType() == gt)
+ return ag;
+
+ return false;
+ }
+
+ public static AbstractGoods findByType(List<AbstractGoods> l,
AbstractGoods ag) {
+ return findByType(l, ag.getType());
+ }
+
+ /**
+ * find any in list by type
+ */
+ public static AbstractGoods findByType(List<AbstractGoods> l, GoodsType
gt) {
+ if (l != null)
+ for (AbstractGoods ag : l)
+ if (ag.getType() == gt)
+ return ag;
+
+ return null;
+ }
+
+ public static AbstractGoods findByType(List<AbstractGoods> l,
AbstractGoods ag) {
+ return findByType(l, ag.getType());
+ }
// Interface Named
diff --git a/src/net/sf/freecol/common/model/BuildQueue.java
b/src/net/sf/freecol/common/model/BuildQueue.java
index 2614bcb29bb..b003844671e 100644
--- a/src/net/sf/freecol/common/model/BuildQueue.java
+++ b/src/net/sf/freecol/common/model/BuildQueue.java
@@ -169,7 +169,7 @@ public class BuildQueue<T extends BuildableType> implements
Consumer {
.getBoolean(GameOptions.SAVE_PRODUCTION_OVERFLOW);
List<AbstractGoods> consumption = new ArrayList<>();
for (AbstractGoods ag : current.getRequiredGoodsList()) {
- AbstractGoods available = find(input,
AbstractGoods.matches(ag.getType()));
+ AbstractGoods available = AbstractGoods.findByType(input, ag);
if (available != null
&& ag.getAmount() <= available.getAmount()) {
int amount = (overflow || ag.getType().isStorable())
diff --git a/src/net/sf/freecol/common/model/Building.java
b/src/net/sf/freecol/common/model/Building.java
index b3774d3ffa9..aa6954a9085 100644
--- a/src/net/sf/freecol/common/model/Building.java
+++ b/src/net/sf/freecol/common/model/Building.java
@@ -473,7 +473,7 @@ public class Building extends WorkLocation
return true;
} else if (colony.getTotalProductionOf(goodsType) == 0
&& (bt = colony.getCurrentlyBuilding()) != null
- && any(bt.getRequiredGoods(),
AbstractGoods.matches(goodsType))) {
+ && AbstractGoods.anyIsType(bt.getRequiredGoods(),
goodsType)) {
return true;
}
}
diff --git a/src/net/sf/freecol/common/model/Colony.java
b/src/net/sf/freecol/common/model/Colony.java
index c9a05fd50cc..8d6851870b8 100644
--- a/src/net/sf/freecol/common/model/Colony.java
+++ b/src/net/sf/freecol/common/model/Colony.java
@@ -721,7 +721,7 @@ public class Colony extends Settlement implements Nameable,
TradeLocation {
*/
public List<WorkLocation> getWorkLocationsForConsuming(GoodsType
goodsType) {
return transform(getCurrentWorkLocations(),
- wl -> any(wl.getInputs(), AbstractGoods.matches(goodsType)));
+ wl -> AbstractGoods.anyIsType(wl.getInputs(), goodsType));
}
/**
@@ -733,7 +733,7 @@ public class Colony extends Settlement implements Nameable,
TradeLocation {
*/
public List<WorkLocation> getWorkLocationsForProducing(GoodsType
goodsType) {
return transform(getCurrentWorkLocations(),
- wl -> any(wl.getOutputs(), AbstractGoods.matches(goodsType)));
+ wl -> AbstractGoods.anyIsType(wl.getOutputs(), goodsType));
}
/**
@@ -904,8 +904,7 @@ public class Colony extends Settlement implements Nameable,
TradeLocation {
}
int production = productionCache.getNetProductionOf(type);
if (info != null) {
- AbstractGoods consumption = find(info.getConsumption(),
- AbstractGoods.matches(type));
+ AbstractGoods consumption =
AbstractGoods.findByType(info.getConsumption(), type);
if (consumption != null) {
// add the amount the build queue itself will consume
production += consumption.getAmount();
diff --git a/src/net/sf/freecol/common/model/ProductionCache.java
b/src/net/sf/freecol/common/model/ProductionCache.java
index 6250481df56..38433c0329f 100644
--- a/src/net/sf/freecol/common/model/ProductionCache.java
+++ b/src/net/sf/freecol/common/model/ProductionCache.java
@@ -224,8 +224,7 @@ public class ProductionCache {
public boolean isProducing(GoodsType goodsType) {
update();
return any(productionAndConsumption.values(),
- pi -> any(pi.getProduction(),
- AbstractGoods.matches(goodsType)));
+ pi -> AbstractGoods.anyIsType(pi.getProduction(),
goodsType));
}
/**
@@ -237,8 +236,7 @@ public class ProductionCache {
public boolean isConsuming(GoodsType goodsType) {
update();
return any(productionAndConsumption.values(),
- pi -> any(pi.getConsumption(),
- AbstractGoods.matches(goodsType)));
+ pi -> AbstractGoods.anyIsType(pi.getConsumption(),
goodsType));
}
/**
diff --git a/src/net/sf/freecol/common/model/ProductionInfo.java
b/src/net/sf/freecol/common/model/ProductionInfo.java
index 0636cd50ac8..f330824da3c 100644
--- a/src/net/sf/freecol/common/model/ProductionInfo.java
+++ b/src/net/sf/freecol/common/model/ProductionInfo.java
@@ -92,8 +92,7 @@ public class ProductionInfo {
*/
public List<AbstractGoods> getProductionDeficit() {
final Function<AbstractGoods, AbstractGoods> mapper = ag -> {
- AbstractGoods agMax = find(this.maximumProduction,
- AbstractGoods.matches(ag.getType()));
+ AbstractGoods agMax =
AbstractGoods.findByType(this.maximumProduction, ag);
int amount = (agMax == null) ? 0
: agMax.getAmount() - ag.getAmount();
return (amount <= 0) ? null
@@ -112,8 +111,7 @@ public class ProductionInfo {
*/
public List<AbstractGoods> getConsumptionDeficit() {
final Function<AbstractGoods, AbstractGoods> mapper = ag -> {
- AbstractGoods agMax = find(this.maximumConsumption,
- AbstractGoods.matches(ag.getType()));
+ AbstractGoods agMax =
AbstractGoods.findByType(this.maximumConsumption, ag);
int amount = (agMax == null) ? 0
: agMax.getAmount() - ag.getAmount();
return (amount == 0) ? null
diff --git a/src/net/sf/freecol/common/model/ProductionMap.java
b/src/net/sf/freecol/common/model/ProductionMap.java
index 271830369f5..6ee70f33efe 100644
--- a/src/net/sf/freecol/common/model/ProductionMap.java
+++ b/src/net/sf/freecol/common/model/ProductionMap.java
@@ -82,7 +82,7 @@ public class ProductionMap {
throw new IllegalArgumentException(goods.getType().getId() + "
is not stored as "
+ root.getType());
} else {
- AbstractGoods leaf = find(leafs,
AbstractGoods.matches(goods.getType()));
+ AbstractGoods leaf = AbstractGoods.findByType(leafs,
goods.getType());
if (leaf != null) {
leaf.setAmount(leaf.getAmount() + goods.getAmount());
root.setAmount(root.getAmount() + goods.getAmount());
@@ -101,7 +101,7 @@ public class ProductionMap {
leaf.setAmount(Math.min(leaf.getAmount(),
root.getAmount()));
}
} else {
- AbstractGoods leaf = find(leafs,
AbstractGoods.matches(goods.getType()));
+ AbstractGoods leaf = AbstractGoods.findByType(leafs,
goods.getType());
if (leaf != null) {
leaf.setAmount(leaf.getAmount() - consumed);
root.setAmount(root.getAmount() - consumed);
@@ -114,7 +114,7 @@ public class ProductionMap {
if (root.getType() == type) {
return root;
} else {
- AbstractGoods leaf = find(leafs, AbstractGoods.matches(type));
+ AbstractGoods leaf = AbstractGoods.findByType(leafs, type);
if (leaf != null) {
return new AbstractGoods(type, leaf.getAmount());
}
diff --git a/src/net/sf/freecol/common/model/ProductionType.java
b/src/net/sf/freecol/common/model/ProductionType.java
index f6a769de9c0..a971b951d87 100644
--- a/src/net/sf/freecol/common/model/ProductionType.java
+++ b/src/net/sf/freecol/common/model/ProductionType.java
@@ -223,7 +223,7 @@ public class ProductionType extends FreeColSpecObject {
*/
public AbstractGoods getOutput(GoodsType goodsType) {
return (outputs == null) ? null
- : find(outputs, AbstractGoods.matches(goodsType));
+ : AbstractGoods.findByType(outputs, goodsType);
}
/**
diff --git a/src/net/sf/freecol/common/model/Role.java
b/src/net/sf/freecol/common/model/Role.java
index 164faf659b9..4eb33ed7e7b 100644
--- a/src/net/sf/freecol/common/model/Role.java
+++ b/src/net/sf/freecol/common/model/Role.java
@@ -366,7 +366,7 @@ public class Role extends BuildableType {
}
}
result.addAll(transform(fromGoods,
- ag -> !any(toGoods,
AbstractGoods.matches(ag.getType())),
+ ag -> !AbstractGoods.anyIsType(toGoods,
ag.getType()),
ag -> new AbstractGoods(ag.getType(),
-ag.getAmount())));
}
return result;
diff --git a/src/net/sf/freecol/common/model/TradeRouteStop.java
b/src/net/sf/freecol/common/model/TradeRouteStop.java
index 844fcb8254c..aeccb14ad33 100644
--- a/src/net/sf/freecol/common/model/TradeRouteStop.java
+++ b/src/net/sf/freecol/common/model/TradeRouteStop.java
@@ -164,7 +164,7 @@ public class TradeRouteStop extends FreeColGameObject
implements TradeLocation {
public List<AbstractGoods> getCompactCargo() {
List<AbstractGoods> result = new ArrayList<>();
for (GoodsType type : getCargo()) {
- AbstractGoods ag = find(result, AbstractGoods.matches(type));
+ AbstractGoods ag = AbstractGoods.findByType(result, type);
if (ag != null) {
ag.setAmount(ag.getAmount() + GoodsContainer.CARGO_SIZE);
} else {
@@ -218,10 +218,11 @@ public class TradeRouteStop extends FreeColGameObject
implements TradeLocation {
// Look for goods to unload.
// For all goods the unit has loaded, and if the type of goods
// is not to be loaded here, and there is demand here, return true.
- final Predicate<Goods> unloadPred = g ->
- !any(stopGoods, AbstractGoods.matches(g.getType()))
- && getImportAmount(g.getType(), turns) > 0;
- if (any(unit.getCompactGoodsList(), unloadPred)) return true;
+ for (AbstractGoods g : stopGoods) {
+ GoodsType gt = g.getType();
+ if (!AbstractGoods.anyIsType(stopGoods, gt) && getImportAmount(gt,
turns) > 0)
+ return true;
+ }
return false; // Otherwise no work here.
}
diff --git a/src/net/sf/freecol/common/model/WorkLocation.java
b/src/net/sf/freecol/common/model/WorkLocation.java
index c76c2f5a35c..40d69537f04 100644
--- a/src/net/sf/freecol/common/model/WorkLocation.java
+++ b/src/net/sf/freecol/common/model/WorkLocation.java
@@ -435,7 +435,7 @@ public abstract class WorkLocation extends UnitLocation
* given {@code GoodsType}.
*/
public boolean produces(GoodsType goodsType) {
- return any(getOutputs(), AbstractGoods.matches(goodsType));
+ return AbstractGoods.anyIsType(getOutputs(), goodsType);
}
/**
@@ -521,7 +521,7 @@ public abstract class WorkLocation extends UnitLocation
if (info == null) return 0;
List<AbstractGoods> production = info.getMaximumProduction();
if (production != null) {
- AbstractGoods ag = find(production,
AbstractGoods.matches(goodsType));
+ AbstractGoods ag = AbstractGoods.findByType(production, goodsType);
if (ag != null) return ag.getAmount();
}
return getTotalProductionOf(goodsType);
@@ -650,7 +650,7 @@ public abstract class WorkLocation extends UnitLocation
public AbstractGoods getProductionDeficit(GoodsType goodsType) {
ProductionInfo pi = getProductionInfo();
return (pi == null) ? null
- : find(pi.getProductionDeficit(),
AbstractGoods.matches(goodsType));
+ : AbstractGoods.findByType(pi.getProductionDeficit(), goodsType);
}
diff --git a/src/net/sf/freecol/server/model/ServerColony.java
b/src/net/sf/freecol/server/model/ServerColony.java
index 834c8b7c6ae..5c047e3c631 100644
--- a/src/net/sf/freecol/server/model/ServerColony.java
+++ b/src/net/sf/freecol/server/model/ServerColony.java
@@ -135,11 +135,16 @@ public class ServerColony extends Colony implements
ServerModelObject {
*/
private boolean neededForBuildableType(GoodsType goodsType) {
final Specification spec = getSpecification();
- List<BuildableType> buildables = new ArrayList<>();
- buildables.addAll(spec.getBuildingTypeList());
- buildables.addAll(spec.getUnitTypesWithoutAbility(Ability.PERSON));
- return any(buildables, bt -> canBuild(bt)
- && any(bt.getRequiredGoods(), AbstractGoods.matches(goodsType)));
+
+ for (BuildableType bt : spec.getBuildingTypeList())
+ if (canBuild(bt) && AbstractGoods.anyIsType(bt.getRequiredGoods(),
goodsType))
+ return true;
+
+ for (BuildableType bt :
spec.getUnitTypesWithoutAbility(Ability.PERSON))
+ if (canBuild(bt) && AbstractGoods.anyIsType(bt.getRequiredGoods(),
goodsType))
+ return true;
+
+ return false;
}
/**
diff --git a/test/src/net/sf/freecol/server/model/ServerColonyTest.java
b/test/src/net/sf/freecol/server/model/ServerColonyTest.java
index e4c82f9f04e..b689d5a459b 100644
--- a/test/src/net/sf/freecol/server/model/ServerColonyTest.java
+++ b/test/src/net/sf/freecol/server/model/ServerColonyTest.java
@@ -121,8 +121,7 @@ public class ServerColonyTest extends FreeColTestCase {
// Set the food production of the center tile of the colony to 2
// This will be the only food production of the colony
AbstractGoods foodGoods
- = first(transform(colonyTile.getType().getPossibleProduction(true),
- AbstractGoods.matches(foodGoodsType)));
+ =
AbstractGoods.findByType(colonyTile.getType().getPossibleProduction(true),foodGoodsType);
if (foodGoods != null) foodGoods.setAmount(2);
Unit unit = colony.getUnitList().get(0);
--
2.11.0.rc0.7.gbe5a750
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, SlashDot.org! http://sdm.link/slashdot
_______________________________________________
Freecol-developers mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/freecol-developers