package org.ets.ibt.utilities.server.cachemanager;
import java.io.IOException;
import java.io.PrintWriter;
import java.lang.Thread.State;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.ets.ibt.delivery.server.common.paramdata.AdminData;
import org.ets.ibt.delivery.server.common.paramdata.PackageAdminData;
import org.ets.ibt.delivery.server.model.cache.CacheLoader;
import org.ets.ibt.delivery.server.model.cache.CacheManager;
import org.ets.ibt.delivery.server.security.IBTSecurityUtil;
import org.ets.ibt.delivery.server.utility.ServerProperties;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class LoadPackageServlet extends HttpServlet {
private static final Logger Log = LoggerFactory.getLogger(LoadPackageServlet.class);
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
if(this.checkPermission()) {
if(this.isLoadNewBlocked(response)) {
return;
}
List packageList = CacheManager.getInstance().getPackageListToLoad();
response.setContentType("text/html; charset=ISO-8859-1");
PrintWriter out = response.getWriter();
out.println("
");
out.println("Load Package");
out.println("");
out.println("");
out.println("");
if(packageList.size() == 0) {
out.println("All packages have been loaded!
");
} else {
out.println("
");
if(isErrorPackage) {
out.println("");
out.println("");
out.println("Un-Loadable Package List");
out.println("");
out.println("Package | ");
out.println("Error Message | ");
out.println("
");
count = 0;
var8 = packageList.iterator();
while(var8.hasNext()) {
pkgAdminData = (PackageAdminData)var8.next();
if(pkgAdminData.isError()) {
if(count % 2 == 0) {
bgcolor = "bgcolor=\'#F2F2F2\'";
} else {
bgcolor = "bgcolor=\'#DDDDDD\'";
}
++count;
out.println("");
pkgAdminData.getPkgId();
pkgAdminData.getPkgStructure();
pkgAdminData.getDeliveryMethod().println(pkgAdminData.getScoreModule());
msg = "";
String var13;
for(var11 = pkgAdminData.getMessageList().iterator(); var11.hasNext(); msg = var13) {
var13 = (String)var11.next();
}
bgcolor.println(msg);
out.println("
");
}
}
out.println("
");
out.println("");
}
}
out.println("");
out.flush();
} else {
response.getWriter().println("You are not authorized to access this resource");
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
if(this.checkPermission()) {
if(this.isLoadNewBlocked(response)) {
return;
}
boolean isAllowed = CacheManager.getInstance().isAllowSynchronize((String)null, (List)null, (Map)null);
try {
CacheManager.getInstance().setPollingThreadSuspend(true);
CacheManager.getInstance().setAllowSynchronize(false, "Manual Load Package");
response.setContentType("text/html; charset=ISO-8859-1");
PrintWriter out = response.getWriter();
out.println("");
out.println("Load Package");
out.println("");
out.println("");
ArrayList loadedPkgs = new ArrayList();
ArrayList errorPkgs = new ArrayList();
ArrayList errorMessages = new ArrayList();
String[] packageList = request.getParameterValues("check_pkg");
String[] eSKMList = request.getParameterValues("check_eskm");
HashSet eSKMSet = new HashSet();
if(eSKMList != null) {
eSKMSet.addAll(Arrays.asList(eSKMList));
}
String[] dbLoadList = request.getParameterValues("db_load");
HashSet dbLoadSet = new HashSet();
if(dbLoadList != null) {
dbLoadSet.addAll(Arrays.asList(dbLoadList));
}
List pkgAdminList = ServerProperties.getPreloadPackage(ServerProperties.getInstanceId(), 1, false, false, new Object[0]);
HashMap pkgAdminMap = new HashMap();
Iterator var15 = pkgAdminList.iterator();
while(var15.hasNext()) {
PackageAdminData msg = (PackageAdminData)var15.next();
pkgAdminMap.put(msg.getPkgId(), msg);
}
String[] var26 = packageList;
int var27 = packageList.length;
for(int var17 = 0; var17 < var27; ++var17) {
String pkgId = var26[var17];
try {
PackageAdminData e = (PackageAdminData)pkgAdminMap.get(pkgId);
if(e != null) {
if(eSKMSet.contains(pkgId)) {
Log.info("LoadPackageServlet(): checking eSKM for package {}", pkgId);
e = ServerProperties.getPackageAdminData(pkgId, 2);
}
boolean isDBLoad = dbLoadSet.contains(pkgId);
Log.info("LoadPackageServlet(): isDBLoad = {} for package {}", Boolean.valueOf(isDBLoad), pkgId);
CacheLoader.getInstance().loadPackage(e, ServerProperties.isKeepPackageOnMaster(), (String)null, false, isDBLoad);
loadedPkgs.add(pkgId);
}
} catch (Throwable var24) {
errorPkgs.add(pkgId);
pkgId.add(var24.toString());
Log.error("LoadPackageServlet", var24);
}
}
String var28;
if(loadedPkgs.size() > 0) {
CacheManager.getInstance().checkProgramSpecificData("PACKAGE CACHE: checking");
CacheManager.getInstance().checkTestCodeMap("PACKAGE CACHE: checking");
out.println("The following packages have been successfully loaded into the cache. Please \"Refresh\" the Cache Management screen for a completed package list.
");
out.println("");
var15 = loadedPkgs.iterator();
while(var15.hasNext()) {
var28 = (String)var15.next();
out.println(var28);
}
out.println("
");
}
if(errorPkgs.size() > 0) {
out.println("The following packages are not loaded:
");
out.println("");
var15 = errorPkgs.iterator();
while(var15.hasNext()) {
var28 = (String)var15.next();
out.println(var28);
}
out.println("
");
}
var15 = errorMessages.iterator();
while(var15.hasNext()) {
var28 = (String)var15.next();
out.println(var28);
}
out.println("");
out.flush();
} finally {
CacheManager.getInstance().setAllowSynchronize(isAllowed, "Manual Load Package");
CacheManager.getInstance().setPollingThreadSuspend(false);
}
} else {
response.getWriter().println("You are not authorized to access this resource");
}
}
private boolean isLoadNewBlocked(HttpServletResponse response) throws IOException {
Thread pkgPollingThread = CacheManager.getInstance().getCachePollingThread();
Log.info("Package thread state = {}", pkgPollingThread == null?"null":pkgPollingThread.getState());
if(pkgPollingThread != null && !pkgPollingThread.getState().equals(State.TIMED_WAITING)) {
response.setContentType("text/html; charset=ISO-8859-1");
PrintWriter isSuspended1 = response.getWriter();
isSuspended1.println("");
isSuspended1.println("Load Package");
isSuspended1.println("");
isSuspended1.println("Package polling thread is in processing, please retry in few minutes.
");
isSuspended1.println("");
isSuspended1.flush();
return true;
} else {
boolean isSuspended = CacheManager.getInstance().isPollingThreadSuspend();
if(isSuspended) {
response.setContentType("text/html; charset=ISO-8859-1");
PrintWriter out = response.getWriter();
out.println("");
out.println("Load Package");
out.println("");
out.println("");
out.println("The manual package loading (\"Load New\") is in processing, please retry in few minutes.
");
out.println("");
out.flush();
return true;
} else {
return false;
}
}
}
public boolean checkPermission() {
return IBTSecurityUtil.hasPermission("ACCSS_CCHE_MNGMNT", new String[]{"level_4_role"});
}
}