package com.highway2urhell.service;
import java.lang.instrument.UnmodifiableClassException;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.List;
import com.google.gson.Gson;
import com.google.gson.JsonParseException;
import com.google.gson.reflect.TypeToken;
import com.highway2urhell.CoreEngine;
import com.highway2urhell.domain.FilterEntryPath;
import com.highway2urhell.domain.MessageEvent;
public class ListenerService {
private static ListenerService instance;
public static ListenerService getInstance() {
if (instance == null) {
synchronized (ListenerService.class) {
if (instance == null) {
instance = new ListenerService();
}
}
}
return instance;
}
private ListenerService() {
}
/**
* Step 1 : create the application
* Next Step : get the event H2H
*/
public void callServerH2H() {
if(CoreEngine.getInstance().getConfig().getToken() == null){
System.out.println("Call init Token");
ThunderExporterService.getInstance().registerAppInThunder();
}else{
MessageEvent me = new MessageEvent();
me.setToken(CoreEngine.getInstance().getConfig().getToken());
me.setReference(CoreEngine.getInstance().getConfig().getReference());
String result = ThunderExporterService.getInstance().sendDataHTTPOldSchool("/event",me);
System.out.println("Result on /event "+result);
Gson gson = new Gson();
try {
Type typeList = new TypeToken<ArrayList<MessageEvent>>() {}.getType();
List<MessageEvent> listEvent = gson.fromJson(result, typeList);
for(MessageEvent meResult : listEvent) {
System.out.println("MessageEvent "+meResult.toString());
switch (meResult.getTypeMessageEvent()) {
case INIT_PATH:
CoreEngine.getInstance().initPathsRemote();
break;
case ENABLE_ENTRY_POINT:
enableEntryPoint(meResult);
break;
default:
throw new IllegalStateException(meResult.getTypeMessageEvent() + " is not supported");
}
}
}catch (JsonParseException e){
System.err.println("Error on /event with token "+CoreEngine.getInstance().getConfig().getToken()+" and reference "+CoreEngine.getInstance().getConfig().getReference());
}
}
}
private void enableEntryPoint(MessageEvent meResult){
try {
FilterEntryPath filter = createFilter(meResult.getData());
CoreEngine.getInstance().enableEntryPointCoverage(filter);
} catch (ClassNotFoundException e) {
System.err.println("Error while launchTransformer "+ e);
} catch (UnmodifiableClassException e) {
System.err.println("Error while launchTransformer "+ e);
}
}
private FilterEntryPath createFilter(Object data) {
Gson gson = new Gson();
FilterEntryPath res = null;
try {
res = gson.fromJson((String) data, FilterEntryPath.class);
} catch (Exception e) {
System.err.println(" Not a JSON format for FilterEntryPath " + data.toString());
res = new FilterEntryPath();
}
return res;
}
}