package org.openlegacy.terminal.modules.globals; import org.openlegacy.definitions.FieldDefinition; import org.openlegacy.modules.globals.Globals; import org.openlegacy.terminal.ScreenEntity; import org.openlegacy.terminal.ScreenPojoFieldAccessor; import org.openlegacy.terminal.TerminalConnection; import org.openlegacy.terminal.definitions.ScreenEntityDefinition; import org.openlegacy.terminal.services.ScreenEntitiesRegistry; import org.openlegacy.terminal.support.TerminalSessionModuleAdapter; import org.openlegacy.terminal.utils.SimpleScreenPojoFieldAccessor; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.inject.Inject; public class DefaultGlobalsModule extends TerminalSessionModuleAdapter implements Globals { private static final long serialVersionUID = 1L; private Map<String, Object> globals = new HashMap<String, Object>(); @Inject private ScreenEntitiesRegistry screenEntitiesRegistry; public Map<String, Object> getGlobals() { return globals; } public Object getGlobal(String name) { return globals.get(name); } @Override public void afterConnect(TerminalConnection terminalConnection) { collectGlobals(); } @Override public void afterSendAction(TerminalConnection terminalConnection) { collectGlobals(); } private void collectGlobals() { ScreenEntity currentEntity = getSession().getEntity(); if (currentEntity == null) { return; } ScreenPojoFieldAccessor fieldAccessor = new SimpleScreenPojoFieldAccessor(currentEntity); ScreenEntityDefinition entityDefinitions = screenEntitiesRegistry.get(currentEntity.getClass()); List<? extends FieldDefinition> globalFields = entityDefinitions.getFieldDefinitions(Globals.GlobalField.class); for (FieldDefinition fieldDefinition : globalFields) { String globalFieldName = fieldDefinition.getName(); Object globalFieldValue = fieldAccessor.getFieldValue(globalFieldName); if (globalFieldValue != null) { globals.put(globalFieldName, globalFieldValue); } } } }