/* * Copyright (c) 2005-2010 KOM – Multimedia Communications Lab * * This file is part of PeerfactSim.KOM. * * PeerfactSim.KOM is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * PeerfactSim.KOM is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with PeerfactSim.KOM. If not, see . * */ package de.tud.kom.p2psim.impl.vehicular.caching.decision; import java.util.List; import de.tudarmstadt.maki.simonstrator.api.Time; import de.tudarmstadt.maki.simonstrator.api.component.sensor.environment.data.TemporalDependencyMatrix; import de.tudarmstadt.maki.simonstrator.api.component.sensor.environment.data.VectoralProperty; import de.tudarmstadt.maki.simonstrator.api.component.vehicular.caching.decision.CacheDecisionStrategy; import de.tudarmstadt.maki.simonstrator.api.component.vehicular.information.AvailableInformationAttributes; import de.tudarmstadt.maki.simonstrator.api.component.vehicular.information.PointInformation; import de.tudarmstadt.maki.simonstrator.api.component.vehicular.information.RoadInformation; public class MajorityVotingVectoralCacheDecisionStrategy implements CacheDecisionStrategy { private static final long SCALING = Time.SECOND; @Override public T decideOnCorrectInformation( List pSimilarPointInformation) { VectoralProperty currentProperty = null; long minTimestamp = Long.MAX_VALUE; long maxTimestamp = 0; for (T t : pSimilarPointInformation) { long timestamp = t.getDetectionDate(); if (timestamp < minTimestamp) { minTimestamp = timestamp; } if (timestamp > maxTimestamp) { maxTimestamp = timestamp; } } for (T t : pSimilarPointInformation) { RoadInformation roadInformation = ((RoadInformation) t); VectoralProperty property = (VectoralProperty) roadInformation.getValue(); TemporalDependencyMatrix dependencyMatrix = property.getDependencyMatrix(); VectoralProperty agedProperty = property.age((maxTimestamp - property.getDetectionDate()) / SCALING, dependencyMatrix); if (currentProperty != null) { currentProperty = currentProperty.combine(agedProperty); } else { currentProperty = agedProperty; } } // TemporalDependencyMatrix dependencyMatrix = currentProperty.getDependencyMatrix(); // // VectoralProperty agedProperty = currentProperty.age((Time.getCurrentTime() - maxTimestamp) / SCALING, dependencyMatrix); RoadInformation roadInformation = new RoadInformation(currentProperty); copyAttributes((RoadInformation) pSimilarPointInformation.get(0), roadInformation); return (T) roadInformation; } /** * @param pT * @param pRoadInformation */ private void copyAttributes(RoadInformation pSrc, RoadInformation pDest) { for (AvailableInformationAttributes attribute : pSrc.getAvailableAttributes()) { pDest.setAttribute(attribute, pSrc.getAttribute(attribute)); } } }