/*
* Copyright (C) 2003-2007 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.ecm.webui.component.admin.folksonomy;
import javax.jcr.ItemNotFoundException;
import javax.jcr.Node;
import org.apache.commons.lang.StringUtils;
import org.exoplatform.ecm.webui.component.admin.UIECMAdminPortlet;
import org.exoplatform.services.cms.folksonomy.NewFolksonomyService;
import org.exoplatform.services.log.ExoLogger;
import org.exoplatform.services.log.Log;
import org.exoplatform.services.wcm.core.NodeLocation;
import org.exoplatform.web.application.ApplicationMessage;
import org.exoplatform.webui.config.annotation.ComponentConfig;
import org.exoplatform.webui.config.annotation.EventConfig;
import org.exoplatform.webui.core.UIApplication;
import org.exoplatform.webui.core.UIPopupWindow;
import org.exoplatform.webui.core.lifecycle.UIFormLifecycle;
import org.exoplatform.webui.event.Event;
import org.exoplatform.webui.event.EventListener;
import org.exoplatform.webui.event.Event.Phase;
import org.exoplatform.webui.form.UIForm;
import org.exoplatform.webui.form.UIFormStringInput;
import org.exoplatform.webui.form.UIFormTextAreaInput;
import org.exoplatform.webui.form.validator.MandatoryValidator;
/**
* Created by The eXo Platform SARL
* Author : Dang Van Minh
* minh.dang@exoplatform.com
* Jan 11, 2007
* 2:56:02 PM
*/
@ComponentConfig(
lifecycle = UIFormLifecycle.class,
template = "system:/groovy/webui/form/UIForm.gtmpl",
events = {
@EventConfig(listeners = UITagStyleForm.UpdateStyleActionListener.class),
@EventConfig(listeners = UITagStyleForm.CancelActionListener.class, phase = Phase.DECODE)
}
)
public class UITagStyleForm extends UIForm {
final static public String STYLE_NAME = "styleName" ;
final static public String DOCUMENT_RANGE = "documentRange" ;
final static public String STYLE_HTML = "styleHTML" ;
private static final Log LOG = ExoLogger.getLogger(UITagStyleForm.class.getName());
private NodeLocation selectedTagStyle_ ;
public UITagStyleForm() throws Exception {
addUIFormInput(new UIFormStringInput(STYLE_NAME, STYLE_NAME, null).addValidator(MandatoryValidator.class)) ;
addUIFormInput(new UIFormStringInput(DOCUMENT_RANGE, DOCUMENT_RANGE, null).addValidator(MandatoryValidator.class)) ;
addUIFormInput(new UIFormTextAreaInput(STYLE_HTML, STYLE_HTML, null).addValidator(MandatoryValidator.class)) ;
}
public Node getTagStyle() {
return NodeLocation.getNodeByLocation(selectedTagStyle_);
}
public void setTagStyle(Node selectedTagStyle) throws Exception {
selectedTagStyle_ = NodeLocation.getNodeLocationByNode(selectedTagStyle);
if (selectedTagStyle != null) {
getUIStringInput(STYLE_NAME).setValue(selectedTagStyle.getName()) ;
getUIStringInput(STYLE_NAME).setReadOnly(true);
String range = selectedTagStyle.getProperty(UITagStyleList.RANGE_PROP).getValue().getString() ;
getUIStringInput(DOCUMENT_RANGE).setValue(range) ;
String htmlStyle = selectedTagStyle.getProperty(UITagStyleList.HTML_STYLE_PROP).getValue().getString() ;
getUIFormTextAreaInput(STYLE_HTML).setValue(htmlStyle) ;
}
}
private boolean validateRange(String range) {
String[] vars = null ;
try {
vars = StringUtils.split(range,"..") ;
} catch(Exception e) {
if (LOG.isErrorEnabled()) {
LOG.error("Unexpected error", e);
}
return false ;
}
if(vars == null || vars.length!= 2) return false ;
String minRange = vars[0], maxRange = vars[1] ;
if(!StringUtils.isNumeric(minRange)) return false ;
try {
int min = Integer.parseInt(vars[0]) ;
if(min<0) return false ;
if(!StringUtils.isNumeric(maxRange)) {
if(!maxRange.equals("*")) return false ;
} else {
if(Integer.parseInt(maxRange)<=0) return false ;
}
} catch(Exception e) {
return false ;
}
return true ;
}
static public class UpdateStyleActionListener extends EventListener<UITagStyleForm> {
public void execute(Event<UITagStyleForm> event) throws Exception {
UITagStyleForm uiForm = event.getSource() ;
UITagManager uiManager = uiForm.getAncestorOfType(UITagManager.class) ;
UIApplication uiApp = uiForm.getAncestorOfType(UIApplication.class) ;
String repository = uiForm.getAncestorOfType(UIECMAdminPortlet.class).getPreferenceRepository() ;
String workspace = uiForm.getAncestorOfType(UIECMAdminPortlet.class).getDMSSystemWorkspace(repository);
String documentRange = uiForm.getUIStringInput(DOCUMENT_RANGE).getValue() ;
String styleHTML = uiForm.getUIFormTextAreaInput(STYLE_HTML).getValue() ;
if(!uiForm.validateRange(documentRange)) {
uiApp.addMessage(new ApplicationMessage("UITagStyleForm.msg.range-validator", null)) ;
return ;
}
try {
// add new tag
if (uiForm.getTagStyle() == null) {
String tagStyleName = uiForm.getUIStringInput(STYLE_NAME).getValue().trim();
NewFolksonomyService newFolksonomyService = uiForm.getApplicationComponent(NewFolksonomyService.class) ;
newFolksonomyService.addTagStyle(tagStyleName, "", "", workspace);
for(Node tagStyle: newFolksonomyService.getAllTagStyle(workspace))
if(tagStyle.getName().equals(tagStyleName)) {
uiForm.selectedTagStyle_ = NodeLocation.getNodeLocationByNode(tagStyle);
break;
}
}
uiForm.getTagStyle().setProperty(UITagStyleList.RANGE_PROP, documentRange) ;
uiForm.getTagStyle().setProperty(UITagStyleList.HTML_STYLE_PROP, styleHTML) ;
uiForm.getTagStyle().save() ;
uiForm.getTagStyle().getSession().save() ;
UITagStyleList uiTagList = uiManager.getChild(UITagStyleList.class) ;
uiTagList.refresh(uiTagList.getUIPageIterator().getCurrentPage());
} catch (ItemNotFoundException ie) {
String key = "UITagStyleForm.msg.item-not-existing" ;
uiApp.addMessage(new ApplicationMessage(key, null, ApplicationMessage.WARNING)) ;
return ;
} catch(Exception e) {
String key = "UITagStyleForm.msg.error-update" ;
uiApp.addMessage(new ApplicationMessage(key, null, ApplicationMessage.WARNING)) ;
return ;
}
UIPopupWindow uiPopup = uiManager.getChild(UIPopupWindow.class) ;
uiPopup.setShow(false) ;
event.getRequestContext().addUIComponentToUpdateByAjax(uiManager) ;
}
}
static public class CancelActionListener extends EventListener<UITagStyleForm> {
public void execute(Event<UITagStyleForm> event) throws Exception {
UITagStyleForm uiForm = event.getSource() ;
UITagManager uiManager = uiForm.getAncestorOfType(UITagManager.class) ;
UIPopupWindow uiPopup = uiManager.getChild(UIPopupWindow.class) ;
uiPopup.setShow(false) ;
event.getRequestContext().addUIComponentToUpdateByAjax(uiManager) ;
}
}
}