package fi.otavanopisto.pyramus.views.system;
import org.apache.commons.lang3.StringUtils;
import fi.internetix.smvc.AccessDeniedException;
import fi.internetix.smvc.LoginRequiredException;
import fi.internetix.smvc.SmvcRuntimeException;
import fi.internetix.smvc.StatusCode;
import fi.internetix.smvc.controllers.PageRequestContext;
import fi.internetix.smvc.controllers.RequestContext;
import fi.otavanopisto.pyramus.dao.DAOFactory;
import fi.otavanopisto.pyramus.dao.SystemDAO;
import fi.otavanopisto.pyramus.framework.PyramusViewController;
import fi.otavanopisto.pyramus.framework.UserRole;
public class ReindexAllHibernateObjects extends PyramusViewController {
public void process(PageRequestContext requestContext) {
SystemDAO systemDAO = DAOFactory.getInstance().getSystemDAO();
for (Class<?> entity : systemDAO.getIndexedEntities()) {
try {
systemDAO.reindexHibernateSearchObjects(entity, 200);
} catch (InterruptedException e) {
throw new SmvcRuntimeException(StatusCode.UNDEFINED, "Reindexing interrupted");
}
}
}
@Override
public void authorize(RequestContext requestContext) throws LoginRequiredException, AccessDeniedException {
String systemKey = System.getProperty("pyramus-reindex-key");
if (StringUtils.isNotBlank(systemKey)) {
String authorizationHeader = requestContext.getRequest().getHeader("Authorization");
if (StringUtils.startsWith(authorizationHeader, "ReindexKey ")) {
String headerKey = StringUtils.substring(authorizationHeader, 11);
if (StringUtils.equals(headerKey, systemKey)) {
return;
}
}
}
throw new AccessDeniedException(requestContext.getRequest().getLocale());
}
public UserRole[] getAllowedRoles() {
return new UserRole[] { UserRole.EVERYONE };
}
}