package org.jactr.modules.pm.aural.memory.impl.map; /* * default logging */ import java.util.HashMap; import java.util.Map; import java.util.Set; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.commonreality.identifier.IIdentifier; import org.commonreality.object.IAfferentObject; import org.jactr.modules.pm.aural.IAuralModule; public class DurationFeatureMap extends OffsetFeatureMap { /** * Logger definition */ static private final transient Log LOGGER = LogFactory .getLog(DurationFeatureMap.class); private Map<IIdentifier, Double> _onsetMap; public DurationFeatureMap() { super(IAuralModule.DURATION_SLOT); _onsetMap = new HashMap<IIdentifier, Double>(); } protected void not(double time, Set<IIdentifier> results) { for(Map.Entry<IIdentifier, Double> onsetEntry : _onsetMap.entrySet()) if(time!=getCurrentValue(onsetEntry.getKey())) results.add(onsetEntry.getKey()); } protected void equals(double time, Set<IIdentifier> results) { for(Map.Entry<IIdentifier, Double> onsetEntry : _onsetMap.entrySet()) if(time==getCurrentValue(onsetEntry.getKey())) results.add(onsetEntry.getKey()); } protected void lessThan(double time, Set<IIdentifier> results) { for(Map.Entry<IIdentifier, Double> onsetEntry : _onsetMap.entrySet()) if(time>getCurrentValue(onsetEntry.getKey())) results.add(onsetEntry.getKey()); } protected void greaterThan(double time, Set<IIdentifier> results) { for(Map.Entry<IIdentifier, Double> onsetEntry : _onsetMap.entrySet()) if(time<getCurrentValue(onsetEntry.getKey())) results.add(onsetEntry.getKey()); } /** * returns current time or end time if available * * @param identifier * @return * @see org.jactr.modules.pm.common.memory.map.AbstractFeatureMap#getCurrentValue(org.commonreality.identifier.IIdentifier) */ @Override protected Double getCurrentValue(IIdentifier identifier) { double completedTime = super.getCurrentValue(identifier); double onset = getOnset(identifier); return completedTime - onset; } @Override protected Double extractInformation(IAfferentObject afferentObject) { try { _onsetMap.put(afferentObject.getIdentifier(), getHandler().getOnset( afferentObject)); } catch (Exception e) { } return super.extractInformation(afferentObject); } protected void objectRemoved(IAfferentObject afferentObject, Double offset) { super.objectRemoved(afferentObject, offset); _onsetMap.remove(afferentObject.getIdentifier()); } protected double getOnset(IIdentifier identifier) { try { return _onsetMap.get(identifier); } catch(NullPointerException npe) { return getCurrentTime(); } } }