/*
* Copyright (C) 2003-2010 eXo Platform SAS.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Affero General Public License
* as published by the Free Software Foundation; either version 3
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see<http://www.gnu.org/licenses/>.
*/
package org.exoplatform.wiki.webui;
import java.util.Arrays;
import org.apache.commons.lang.StringUtils;
import org.exoplatform.container.PortalContainer;
import org.exoplatform.webui.config.annotation.ComponentConfig;
import org.exoplatform.webui.config.annotation.EventConfig;
import org.exoplatform.webui.core.lifecycle.UIFormLifecycle;
import org.exoplatform.webui.event.Event;
import org.exoplatform.webui.event.EventListener;
import org.exoplatform.webui.form.UIFormSelectBox;
import org.exoplatform.webui.form.UIFormStringInput;
import org.exoplatform.webui.form.UIFormTextAreaInput;
import org.exoplatform.wiki.commons.Utils;
import org.exoplatform.wiki.mow.core.api.wiki.Preferences;
import org.exoplatform.wiki.mow.core.api.wiki.WikiImpl;
import org.exoplatform.wiki.rendering.RenderingService;
import org.exoplatform.wiki.rendering.impl.RenderingServiceImpl;
import org.exoplatform.wiki.service.WikiContext;
import org.exoplatform.wiki.service.WikiService;
import org.exoplatform.wiki.webui.control.UIPageToolBar;
import org.exoplatform.wiki.webui.core.UISyntaxSelectBoxFactory;
import org.exoplatform.wiki.webui.core.UIWikiForm;
import org.xwiki.context.Execution;
/**
* Created by The eXo Platform SAS
* Author : viet nguyen
* viet.nguyen@exoplatform.com
* May 14, 2010
*/
@ComponentConfig(
lifecycle = UIFormLifecycle.class,
template = "app:/templates/wiki/webui/UIWikiPageEditForm.gtmpl",
events = {
@EventConfig(listeners = UIWikiPageEditForm.SelectSyntaxActionListener.class),
@EventConfig(listeners = UIWikiPageEditForm.CloseActionListener.class)
}
)
public class UIWikiPageEditForm extends UIWikiForm {
public static final String UNTITLED = "Untitled";
public static final String FIELD_CONTENT = "Markup";
public static final String FIELD_COMMENT = "Comment";
public static final String FIELD_SYNTAX = "SyntaxType";
public static final String TITLE_CONTROL = "UIWikiPageTitleControlForm_PageEditForm";
public static final String PAGE_TOOLBAR = "UIWikiPageEditForm_PageToolBar";
public static final String HELP_PANEL = "UIWikiSidePanelArea";
public static final String RICHTEXT_AREA = "UIWikiRichTextArea";
public static final String FIELD_TEMPLATEDESCTIPTION = "UIWikiTemplateDescriptionContainer";
private boolean isTemplate = false;
private String templateId = StringUtils.EMPTY;
private String title;
public static final String CLOSE = "Close";
public UIWikiPageEditForm() throws Exception {
this.accept_Modes = Arrays.asList(new WikiMode[] { WikiMode.EDITPAGE, WikiMode.ADDPAGE,
WikiMode.EDITTEMPLATE, WikiMode.ADDTEMPLATE });
addChild(UIWikiPageTitleControlArea.class, null, TITLE_CONTROL).toInputMode();
addChild(UIWikiTemplateDescriptionContainer.class, null, FIELD_TEMPLATEDESCTIPTION);
addChild(UIPageToolBar.class, null, PAGE_TOOLBAR);
addChild(UIWikiSidePanelArea.class, null, HELP_PANEL);
addChild(UIWikiRichTextArea.class, null, RICHTEXT_AREA).setRendered(false);
UIFormTextAreaInput markupInput = new UIFormTextAreaInput(FIELD_CONTENT, FIELD_CONTENT, "");
addUIFormInput(markupInput).setRendered(true);
UIFormStringInput commentInput = new UIFormStringInput(FIELD_COMMENT, FIELD_COMMENT, "");
addUIFormInput(commentInput);
UIFormSelectBox selectSyntax = UISyntaxSelectBoxFactory.newInstance(FIELD_SYNTAX, FIELD_SYNTAX);
selectSyntax.setOnChange("SelectSyntax");
this.addChild(selectSyntax);
}
public void setTitle(String title){ this.title = title ;}
public String getTitle(){ return title ;}
public boolean isTemplate() {
return isTemplate;
}
public void setTemplate(boolean isTemplate) {
this.isTemplate = isTemplate;
}
public String getTemplateId() {
return templateId;
}
public void setTemplateId(String templateId) {
this.templateId = templateId;
}
public boolean isSidePanelRendered(){
return getChild(UIWikiSidePanelArea.class).isRendered();
}
public void reloadSyntax() throws Exception {
WikiService wservice = (WikiService) PortalContainer.getComponent(WikiService.class);
WikiMode currentMode = getCurrentMode();
UIFormSelectBox syntaxTypeSelectBox = getUIFormSelectBox(FIELD_SYNTAX);
Preferences currentPreferences = ((WikiImpl) Utils.getCurrentWiki()).getPreferences();
boolean allowSelect = currentPreferences.getPreferencesSyntax().getAllowMutipleSyntaxes();
syntaxTypeSelectBox.setEnable(allowSelect);
if (currentMode.equals(WikiMode.ADDPAGE)) {
String currentDefaultSyntaxt = currentPreferences.getPreferencesSyntax().getDefaultSyntax();
if (currentDefaultSyntaxt == null) {
currentDefaultSyntaxt = wservice.getDefaultWikiSyntaxId();
}
syntaxTypeSelectBox.setValue(currentDefaultSyntaxt);
}
}
public static class SelectSyntaxActionListener extends EventListener<UIWikiPageEditForm> {
@Override
public void execute(Event<UIWikiPageEditForm> event) throws Exception {
UIFormSelectBox selectBox = event.getSource().getChildById(FIELD_SYNTAX);
RenderingService renderingService = (RenderingService) PortalContainer.getComponent(RenderingService.class);
Execution ec = ((RenderingServiceImpl) renderingService).getExecution();
if (ec.getContext() != null) {
WikiContext wikiContext = (WikiContext) ec.getContext().getProperty(WikiContext.WIKICONTEXT);
wikiContext.setSyntax(selectBox.getValue());
}
event.getRequestContext().addUIComponentToUpdateByAjax(event.getSource());
}
}
static public class CloseActionListener extends EventListener<UIWikiPageEditForm> {
@Override
public void execute(Event<UIWikiPageEditForm> event) throws Exception {
UIWikiSidePanelArea sidePanelForm = event.getSource().getChild(UIWikiSidePanelArea.class);
sidePanelForm.setRendered(false);
event.getRequestContext().addUIComponentToUpdateByAjax(event.getSource());
}
}
}