package com.activequant.server.web;
import java.util.HashMap;
import java.util.Map;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import com.activequant.component.ComponentMessagingLayer;
import com.activequant.component.IServer;
import com.activequant.domainmodel.exceptions.TransportException;
import com.activequant.interfaces.dao.IDaoFactory;
import com.activequant.interfaces.transport.ITransportFactory;
public class ServerComponent implements IServer {
//
private final Map<String, Long> componentLastSeen = new HashMap<String, Long>();
private final Map<String, String> componentIdToName = new HashMap<String, String>();
private final Map<String, String> componentDescriptions = new HashMap<String, String>();
private final Logger log = Logger.getLogger(ServerComponent.class);
//
private ComponentMessagingLayer cml;
@Autowired
private ITransportFactory transFac;
@Autowired
private IDaoFactory daoFactory;
public ServerComponent() {}
public void init() throws TransportException{
cml = new ComponentMessagingLayer(transFac);
cml.setServer(this);
}
@Override
public void heartbeat(String componentId, String component) {
if(!componentLastSeen.containsKey(componentId))
{
// request a description.
try {
cml.requestDescription(componentId);
} catch (Exception e) {
e.printStackTrace();
}
}
componentLastSeen.put(componentId, System.currentTimeMillis());
componentIdToName.put(componentId, component);
}
public void sendMessage(String componentId, String message){
try {
cml.customMessage(componentId, message);
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void statusMessage(String componentId, String statusMessage) {
}
public Map<String, Long> getComponentLastSeen() {
return componentLastSeen;
}
public Map<String, String> getComponentIdToName() {
return componentIdToName;
}
public Map<String, String> getComponentDescriptions() {
return componentDescriptions;
}
@Override
public void componentDescription(String arg0, String arg1) {
log.info("Component "+ arg0 +" sent description.");
componentDescriptions.put(arg0, arg1);
}
public IDaoFactory getDaoFactory() {
return daoFactory;
}
}