diff --git a/src/de/tud/kom/p2psim/impl/vehicular/caching/DefaultCachingComponent.java b/src/de/tud/kom/p2psim/impl/vehicular/caching/DefaultCachingComponent.java index 39661ff28278b49549265b10a322c50ea8bc16a5..5aed44088cce0b70e061e8ca27265e360126e6d1 100755 --- a/src/de/tud/kom/p2psim/impl/vehicular/caching/DefaultCachingComponent.java +++ b/src/de/tud/kom/p2psim/impl/vehicular/caching/DefaultCachingComponent.java @@ -40,7 +40,6 @@ import de.tudarmstadt.maki.simonstrator.api.component.vehicular.information.Avai import de.tudarmstadt.maki.simonstrator.api.component.vehicular.information.JamInformation; import de.tudarmstadt.maki.simonstrator.api.component.vehicular.information.PointInformation; import de.tudarmstadt.maki.simonstrator.api.component.vehicular.information.RoadInformation; -import de.tudarmstadt.maki.simonstrator.api.component.vehicular.roadnetwork.RoadNetwork; import de.tudarmstadt.maki.simonstrator.api.component.vehicular.roadnetwork.RoadNetworkEdge; import de.tudarmstadt.maki.simonstrator.api.component.vehicular.roadnetwork.RoadNetworkRoute; @@ -58,6 +57,8 @@ implements CachingComponent, ConnectivityListener { private CacheDecisionStrategy _decisionStrategy; + private int _minObservations = 0; + private double[] informationRatios = new double[] {1, 0.75, 0.5, 0.25, 0}; public DefaultCachingComponent(Host pHost, @@ -67,8 +68,13 @@ implements CachingComponent, ConnectivityListener { _host = pHost; if (_host != null) { - _host.getNetworkComponent().getByName(NetInterfaceName.WIFI) - .addConnectivityListener(this); + NetInterface wifi = _host.getNetworkComponent().getByName(NetInterfaceName.WIFI); + if (wifi != null) { + wifi.addConnectivityListener(this); + } else { + NetInterface cellular = _host.getNetworkComponent().getByName(NetInterfaceName.MOBILE); + cellular.addConnectivityListener(this); + } } _invalidationStrategy = pInvalidationStrategy; @@ -85,28 +91,40 @@ implements CachingComponent, ConnectivityListener { return null; } - Map> similarCacheEntries = new HashMap<>(); + Map, List>> similarCacheEntries = new HashMap<>(); for (T t : cacheEntries) { Object position = getEdgeOrPosition(t); - + if (!similarCacheEntries.containsKey(position)) { - similarCacheEntries.put(position, new ArrayList<>()); + similarCacheEntries.put(position, new HashMap<>()); } - similarCacheEntries.get(position).add(t); + if (!similarCacheEntries.get(position).containsKey(t.getValue().getClass())) { + similarCacheEntries.get(position).put(t.getValue().getClass(), new ArrayList()); + } + similarCacheEntries.get(position).get(t.getValue().getClass()).add(t); } List decidedInformation = new ArrayList<>(); - for (List similarEntries : similarCacheEntries + for (Map, List> similarEdges : similarCacheEntries .values()) { - PointInformation correctInformation = _decisionStrategy - .decideOnCorrectInformation(similarEntries); - decidedInformation.add((T) correctInformation); + for (List similarInformation : similarEdges.values()) { + if (similarInformation.size() >= _minObservations) { + PointInformation correctInformation = _decisionStrategy + .decideOnCorrectInformation(similarInformation); + + decidedInformation.add((T) correctInformation); + } + } } return decidedInformation; } + public void setMinObservations(int pMinObservations) { + this._minObservations = pMinObservations; + } + @Override public List getCacheEntries( Class pCacheEntryClass) {