package org.jactr.tools.tracer.transformer.visual; /* * default logging */ import java.util.TreeMap; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.commonreality.identifier.IIdentifier; import org.jactr.core.chunk.IChunk; import org.jactr.core.event.IACTREvent; import org.jactr.modules.pm.common.memory.IPerceptualEncoder; import org.jactr.modules.pm.common.memory.IPerceptualMemory; import org.jactr.modules.pm.common.memory.map.FeatureMapEvent; import org.jactr.modules.pm.visual.IVisualModule; import org.jactr.modules.pm.visual.event.VisualModuleEvent; import org.jactr.tools.tracer.transformer.IEventTransformer; import org.jactr.tools.tracer.transformer.ITransformedEvent; public class VisualEventTransformer implements IEventTransformer { /** * Logger definition */ static private final transient Log LOGGER = LogFactory .getLog(VisualEventTransformer.class); public ITransformedEvent transform(IACTREvent actrEvent) { if (actrEvent instanceof VisualModuleEvent) { VisualModuleEvent vme = (VisualModuleEvent) actrEvent; VisualModuleEvent.Type type = vme.getType(); if (type == VisualModuleEvent.Type.ENCODED || type == VisualModuleEvent.Type.SEARCHED) try { IChunk chunk = vme.getChunk(); if(chunk.hasBeenDisposed()) return null; IIdentifier id = getIdentifier(chunk); TransformedVisualEvent.Type vType = TransformedVisualEvent.Type.FOUND; if (type == VisualModuleEvent.Type.ENCODED) vType = TransformedVisualEvent.Type.ENCODED; return new TransformedVisualEvent(vme.getSource().getModel() .getName(), vme.getSource(), vme.getSystemTime(), vme .getSimulationTime(), id, vType); } catch (Exception e) { if (LOGGER.isDebugEnabled()) LOGGER.debug("Could not convert chunk to ast ", e); } return null; } else if (actrEvent instanceof FeatureMapEvent) { FeatureMapEvent vfme = (FeatureMapEvent) actrEvent; // should modify the event to handle more than one.. IIdentifier id = vfme.getIdentifiers().iterator().next(); TransformedVisualEvent.Type vType = TransformedVisualEvent.Type.ADDED; if (vfme.getType() == FeatureMapEvent.Type.UPDATED) vType = TransformedVisualEvent.Type.UPDATED; else if (vfme.getType() == FeatureMapEvent.Type.REMOVED) vType = TransformedVisualEvent.Type.REMOVED; IVisualModule module = (IVisualModule) vfme.getSource() .getPerceptualMemory().getModule(); return new TransformedVisualEvent(module.getModel().getName(), module, vfme.getSystemTime(), vfme.getSimulationTime(), id, vType, new TreeMap<String, Object>()); } return null; } protected IIdentifier getIdentifier(IChunk chunk) { IIdentifier id = (IIdentifier) chunk .getMetaData(IPerceptualEncoder.COMMONREALITY_IDENTIFIER_META_KEY); if (id != null) return id; // no id, this was a visual-location, try // IVisualModule.SEARCH_RESULT_OBJECT_METAKEY id = (IIdentifier) chunk .getMetaData(IPerceptualMemory.SEARCH_RESULT_IDENTIFIER_KEY); return id; } }