/***************************************************************************
* Copyright (C) 2003-2009 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.forum.webui.popup;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
import org.exoplatform.forum.ForumUtils;
import org.exoplatform.forum.service.PruneSetting;
import org.exoplatform.forum.webui.BaseForumForm;
import org.exoplatform.forum.webui.UIForumPortlet;
import org.exoplatform.portal.application.PortalRequestContext;
import org.exoplatform.portal.webui.util.Util;
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.core.model.SelectItemOption;
import org.exoplatform.webui.event.Event;
import org.exoplatform.webui.event.EventListener;
import org.exoplatform.webui.event.Event.Phase;
import org.exoplatform.webui.form.UIFormSelectBox;
import org.exoplatform.webui.form.UIFormStringInput;
/**
* Created by The eXo Platform SAS
* Author : Vu Duy Tu
* tu.duy@exoplatform.com
* May 22, 2009 - 2:11:20 AM
*/
@ComponentConfig(
lifecycle = UIFormLifecycle.class,
template = "app:/templates/forum/webui/popup/UIAutoPruneSettingForm.gtmpl",
events = {
@EventConfig(listeners = UIAutoPruneSettingForm.SaveActionListener.class),
@EventConfig(listeners = UIAutoPruneSettingForm.RunActionListener.class),
@EventConfig(listeners = UIAutoPruneSettingForm.CloseActionListener.class, phase=Phase.DECODE)
}
)
public class UIAutoPruneSettingForm extends BaseForumForm implements UIPopupComponent {
public static final String FIELD_INACTIVEDAY_INPUT = "inActiveDay";
public static final String FIELD_INACTIVEDAY_SELECTBOX = "inActiveDayType";
public static final String FIELD_JOBDAY_INPUT = "jobDay";
public static final String FIELD_JOBDAY_SELECTBOX = "jobDayType";
public static final String FIELD_VALUEDAY = "Day";
public static final String FIELD_VALUEWEEKS = "Weeks";
public static final String FIELD_VALUEMONTHS = "Months";
private PruneSetting pruneSetting;
private Locale locale;
private long topicOld = 0;
private boolean isTest = false;
private boolean isActivate = false;
public UIAutoPruneSettingForm() throws Exception {
if (getId() == null)
setId("UIAutoPruneSettingForm");
UIFormStringInput inActiveDay = new UIFormStringInput(FIELD_INACTIVEDAY_INPUT, FIELD_INACTIVEDAY_INPUT, null);
UIFormStringInput jobDay = new UIFormStringInput(FIELD_JOBDAY_INPUT, FIELD_JOBDAY_INPUT, null);
UIFormSelectBox inActiveDayType = getSelectBox(FIELD_INACTIVEDAY_SELECTBOX, false);
UIFormSelectBox jobDayType = getSelectBox(FIELD_JOBDAY_SELECTBOX, true);
addUIFormInput(inActiveDay);
addUIFormInput(inActiveDayType);
addUIFormInput(jobDay);
addUIFormInput(jobDayType);
setActions(new String[] { "Save", "Close" });
}
private void setLocale() throws Exception {
PortalRequestContext portalContext = Util.getPortalRequestContext();
Locale locale = portalContext.getLocale();
if (this.locale == null || !locale.getLanguage().equals(this.locale.getLanguage())) {
getSelectBox(FIELD_INACTIVEDAY_SELECTBOX, false);
getSelectBox(FIELD_JOBDAY_SELECTBOX, true);
this.locale = locale;
}
}
private UIFormSelectBox getSelectBox(String field, boolean isJobDay) {
List<SelectItemOption<String>> list = new ArrayList<SelectItemOption<String>>();
list.add(new SelectItemOption<String>(getLabel(FIELD_VALUEDAY), FIELD_VALUEDAY + ((isJobDay) ? "_Id" : ForumUtils.EMPTY_STR)));
list.add(new SelectItemOption<String>(getLabel(FIELD_VALUEWEEKS), FIELD_VALUEWEEKS + ((isJobDay) ? "_Id" : ForumUtils.EMPTY_STR)));
list.add(new SelectItemOption<String>(getLabel(FIELD_VALUEMONTHS), FIELD_VALUEMONTHS + ((isJobDay) ? "_Id" : ForumUtils.EMPTY_STR)));
UIFormSelectBox selectBox = getUIFormSelectBox(field);
if (selectBox == null) {
selectBox = new UIFormSelectBox(field, field, list);
selectBox.setDefaultValue(FIELD_VALUEDAY + ((isJobDay) ? "_Id" : ForumUtils.EMPTY_STR));
} else {
selectBox.setOptions(list);
}
return selectBox;
}
public boolean isActivate() {
return isActivate;
}
public void setActivate(boolean isActivate) {
this.isActivate = isActivate;
}
@SuppressWarnings("unused")
private void setInitForm() throws Exception {
if (!isTest) {
long i = pruneSetting.getInActiveDay();
String type = FIELD_VALUEDAY;
if (i != 0) {
if (i % 7 == 0) {
i = i / 7;
type = FIELD_VALUEWEEKS;
} else if (i % 30 == 0) {
i = i / 30;
type = FIELD_VALUEMONTHS;
}
}
getUIStringInput(FIELD_INACTIVEDAY_INPUT).setValue(String.valueOf(i));
getSelectBox(FIELD_INACTIVEDAY_SELECTBOX, false).setValue(type);
i = pruneSetting.getPeriodTime();
type = FIELD_VALUEDAY;
if (i != 0) {
if (i % 7 == 0) {
i = i / 7;
type = FIELD_VALUEWEEKS;
} else if (i % 30 == 0) {
i = i / 30;
type = FIELD_VALUEMONTHS;
}
}
type = type + "_Id";
getUIStringInput(FIELD_JOBDAY_INPUT).setValue(String.valueOf(i));
getSelectBox(FIELD_JOBDAY_SELECTBOX, true).setValue(type);
isTest = false;
} else {
setLocale();
}
}
public void setPruneSetting(PruneSetting pruneSetting) {
this.pruneSetting = pruneSetting;
}
public long getTopicOld() {
return topicOld;
}
public void setTopicOld(long topicOld) {
this.topicOld = topicOld;
}
public void activate() throws Exception {
}
public void deActivate() throws Exception {
}
private long convertDay(String type, long date) throws Exception {
if (type.equals(FIELD_VALUEMONTHS) || type.equals(FIELD_VALUEMONTHS + "_Id"))
date = date * 30;
else if (type.equals(FIELD_VALUEWEEKS) || type.equals(FIELD_VALUEWEEKS + "_Id"))
date = date * 7;
return date;
}
static public class SaveActionListener extends EventListener<UIAutoPruneSettingForm> {
public void execute(Event<UIAutoPruneSettingForm> event) throws Exception {
UIAutoPruneSettingForm uiform = event.getSource();
boolean isInactiveDay = false;
try {
String date_ = uiform.getUIStringInput(FIELD_INACTIVEDAY_INPUT).getValue();
String type = uiform.getUIFormSelectBox(FIELD_INACTIVEDAY_SELECTBOX).getValue();
uiform.pruneSetting.setInActiveDay(uiform.convertDay(type, Long.parseLong(date_)));
isInactiveDay = true;
date_ = uiform.getUIStringInput(FIELD_JOBDAY_INPUT).getValue();
type = uiform.getUIFormSelectBox(FIELD_JOBDAY_SELECTBOX).getValue();
uiform.pruneSetting.setPeriodTime(uiform.convertDay(type, Long.parseLong(date_)));
if (uiform.isActivate) {
uiform.pruneSetting.setActive(true);
uiform.isActivate = false;
}
uiform.getForumService().savePruneSetting(uiform.pruneSetting);
UIAutoPruneForm autoPruneForm = uiform.getAncestorOfType(UIForumPortlet.class).findFirstComponentOfType(UIAutoPruneForm.class);
event.getRequestContext().addUIComponentToUpdateByAjax(autoPruneForm);
uiform.cancelChildPopupAction();
} catch (NumberFormatException e) {
String[] args = new String[] { uiform.getLabel(FIELD_INACTIVEDAY_INPUT) };
if (isInactiveDay)
args = new String[] { uiform.getLabel(FIELD_JOBDAY_INPUT) };
uiform.warning("NameValidator.msg.Invalid-number", args);
return;
}
}
}
static public class RunActionListener extends EventListener<UIAutoPruneSettingForm> {
public void execute(Event<UIAutoPruneSettingForm> event) throws Exception {
UIAutoPruneSettingForm uiform = event.getSource();
String date_ = uiform.getUIStringInput(FIELD_INACTIVEDAY_INPUT).getValue();
String type = uiform.getUIFormSelectBox(FIELD_INACTIVEDAY_SELECTBOX).getValue();
long date = uiform.convertDay(type, Long.parseLong(date_));
PruneSetting setting = uiform.pruneSetting;
setting.setInActiveDay(date);
uiform.topicOld = uiform.getForumService().checkPrune(setting);
uiform.pruneSetting.setInActiveDay(date);
uiform.isTest = true;
event.getRequestContext().addUIComponentToUpdateByAjax(uiform);
}
}
static public class CloseActionListener extends EventListener<UIAutoPruneSettingForm> {
public void execute(Event<UIAutoPruneSettingForm> event) throws Exception {
event.getSource().cancelChildPopupAction();
}
}
}