package com.ponysdk.spring.servlet;
import com.ponysdk.core.server.application.AbstractApplicationManager;
import com.ponysdk.core.server.application.ApplicationManagerOption;
import com.ponysdk.core.server.application.UIContext;
import com.ponysdk.core.ui.main.EntryPoint;
import com.ponysdk.impl.webapplication.page.InitializingActivity;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.util.StringUtils;
import javax.servlet.ServletException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
class SpringApplicationManager extends AbstractApplicationManager {
private String[] configurations;
SpringApplicationManager(ApplicationManagerOption options) {
super(options);
final List<String> files = new ArrayList<>();
final String clientConfigFile = getOptions().getClientConfigFile();
if (StringUtils.isEmpty(clientConfigFile))
files.addAll(Arrays.asList("conf/client_application.inc.xml", "etc/client_application.xml"));
else
files.add(clientConfigFile);
configurations = files.toArray(new String[0]);
}
@Override
protected EntryPoint initializeUIContext(UIContext ponySession) throws ServletException {
try (ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext(configurations)) {
EntryPoint entryPoint = applicationContext.getBean(EntryPoint.class);
final Map<String, InitializingActivity> initializingPages = applicationContext.getBeansOfType(InitializingActivity.class);
if (initializingPages != null && !initializingPages.isEmpty()) {
initializingPages.values().forEach(InitializingActivity::afterContextInitialized);
}
return entryPoint;
}
}
}