package org.exoplatform.faq.webui.popup; import javax.jcr.AccessDeniedException; import javax.jcr.ItemExistsException; import javax.jcr.nodetype.ConstraintViolationException; import org.exoplatform.commons.utils.MimeTypeResolver; import org.exoplatform.container.PortalContainer; import org.exoplatform.faq.service.FAQService; import org.exoplatform.faq.webui.FAQUtils; import org.exoplatform.faq.webui.UIAnswersContainer; import org.exoplatform.faq.webui.UIAnswersPortlet; import org.exoplatform.faq.webui.UIQuestions; import org.exoplatform.ks.common.webui.BaseUIForm; import org.exoplatform.ks.common.webui.UIPopupAction; import org.exoplatform.upload.UploadService; import org.exoplatform.webui.config.annotation.ComponentConfig; import org.exoplatform.webui.config.annotation.EventConfig; import org.exoplatform.webui.core.UIPopupComponent; import org.exoplatform.webui.core.lifecycle.UIFormLifecycle; import org.exoplatform.webui.event.Event; import org.exoplatform.webui.event.EventListener; import org.exoplatform.webui.form.UIFormUploadInput; @ComponentConfig( lifecycle = UIFormLifecycle.class, template = "app:/templates/faq/webui/popup/UIImportForm.gtmpl", events = { @EventConfig(listeners = UIImportForm.SaveActionListener.class), @EventConfig(listeners = UIImportForm.CancelActionListener.class) } ) public class UIImportForm extends BaseUIForm implements UIPopupComponent { private final String FILE_UPLOAD = "FileUpload"; private String categoryId_; public void activate() throws Exception { } public void deActivate() throws Exception { } public UIImportForm() { this.addChild(new UIFormUploadInput(FILE_UPLOAD, FILE_UPLOAD, true)); } public void setCategoryId(String categoryId) { this.categoryId_ = categoryId; } static public class SaveActionListener extends EventListener<UIImportForm> { public void execute(Event<UIImportForm> event) throws Exception { UIImportForm importForm = event.getSource(); FAQService service = (FAQService) PortalContainer.getInstance().getComponentInstanceOfType(FAQService.class); UIAnswersPortlet portlet = importForm.getAncestorOfType(UIAnswersPortlet.class); try { service.getCategoryById(importForm.categoryId_); UIFormUploadInput uploadInput = (UIFormUploadInput) importForm.getChildById(importForm.FILE_UPLOAD); if (uploadInput.getUploadResource() == null) { importForm.warning("UIAttachmentForm.msg.file-not-found"); return; } String fileName = uploadInput.getUploadResource().getFileName(); MimeTypeResolver mimeTypeResolver = new MimeTypeResolver(); String mimeType = mimeTypeResolver.getMimeType(fileName); boolean isZip = false; if ("application/zip".equals(mimeType)) { isZip = true; } else if ("text/xml".equals(mimeType)) { isZip = false; } else { importForm.warning("UIImportForm.msg.mimetype-invalid"); return; } try { if (!service.importData(importForm.categoryId_, uploadInput.getUploadDataAsStream(), isZip)) { importForm.warning("UIImportForm.msg.import-fail"); } else { importForm.info("UIImportForm.msg.import-successful"); } } catch (AccessDeniedException ace) { importForm.warning("UIImportForm.msg.access-denied"); } catch (ConstraintViolationException con) { importForm.warning("UIImportForm.msg.constraint-violation-exception"); } catch (ItemExistsException ise) { importForm.warning("UIImportForm.msg.CategoryIsExist"); } catch (Exception e) { importForm.warning("UIImportForm.msg.filetype-error"); } UploadService uploadService = importForm.getApplicationComponent(UploadService.class); uploadService.removeUploadResource(uploadInput.getUploadId()); } catch (Exception e) { FAQUtils.findCateExist(service, portlet.findFirstComponentOfType(UIAnswersContainer.class)); importForm.warning("UIQuestions.msg.admin-moderator-removed-action"); event.getRequestContext().addUIComponentToUpdateByAjax(portlet); } UIPopupAction popupAction = portlet.getChild(UIPopupAction.class); UIAnswersContainer faqContainer = portlet.getChild(UIAnswersContainer.class); faqContainer.getChild(UIQuestions.class).setDefaultLanguage(); event.getRequestContext().addUIComponentToUpdateByAjax(faqContainer); popupAction.deActivate(); event.getRequestContext().addUIComponentToUpdateByAjax(popupAction); } } static public class CancelActionListener extends EventListener<UIImportForm> { public void execute(Event<UIImportForm> event) throws Exception { UIImportForm importForm = event.getSource(); UIAnswersPortlet portlet = importForm.getAncestorOfType(UIAnswersPortlet.class); // remove temp file in upload service and server try { UploadService uploadService = importForm.getApplicationComponent(UploadService.class); UIFormUploadInput uploadInput = (UIFormUploadInput) importForm.getChildById(importForm.FILE_UPLOAD); uploadService.removeUpload(uploadInput.getUploadId()); } catch (Exception e) { } portlet.cancelAction(); } } }