SaveGroupListener.java
package sk.iway.iwcm.editor.rest;
import javax.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Component;
import sk.iway.iwcm.Identity;
import sk.iway.iwcm.Logger;
import sk.iway.iwcm.components.structuremirroring.SaveListener;
import sk.iway.iwcm.database.SimpleQuery;
import sk.iway.iwcm.doc.GroupDetails;
import sk.iway.iwcm.editor.service.WebpagesService;
import sk.iway.iwcm.system.spring.events.WebjetEvent;
import sk.iway.iwcm.system.spring.events.WebjetEventType;
import sk.iway.iwcm.users.UsersDB;
@Component
public class SaveGroupListener {
@Autowired
private HttpServletRequest request;
private static final String REQUEST_KEY = "SaveGroupListener.regenerateUrl";
@EventListener(condition = "#event.clazz eq 'sk.iway.iwcm.doc.GroupDetails'")
public void changeDirection(final WebjetEvent<GroupDetails> event) {
try {
//probably published by background task
if (request == null) return;
Identity user = UsersDB.getCurrentUser(request);
GroupDetails groupToSave = event.getSource();
if (event.getEventType().equals(WebjetEventType.ON_START) && groupToSave.getGroupId()>0) {
//sme ON_START, ulozena v DB je este stara verzia
int parentGroupId = (new SimpleQuery()).forInt("SELECT parent_group_id FROM groups WHERE group_id=?", groupToSave.getGroupId());
String urlDirName = (new SimpleQuery()).forString("SELECT url_dir_name FROM groups WHERE group_id=?", groupToSave.getGroupId());
if (urlDirName == null) urlDirName = "";
// Over či bola zmenená poloha group v stromovej štrukture alebo bola zmenena
// virtualPath hodnota
if (parentGroupId != groupToSave.getParentGroupId()
|| urlDirName.equals(groupToSave.getUrlDirName()) == false) {
//musime to preniest takto
request.setAttribute(REQUEST_KEY, Boolean.TRUE);
}
}
if (event.getEventType().equals(WebjetEventType.AFTER_SAVE) && request.getAttribute(REQUEST_KEY) != null) {
try {
request.removeAttribute(REQUEST_KEY);
WebpagesService.regenerateUrl(groupToSave.getGroupId(), user, request, true);
} catch (Exception ex) {
Logger.error(SaveListener.class, ex);
}
}
} catch (IllegalStateException ex) {
//it's not called from web request, probably background task
}
}
}