package com.idega.content.themes.presentation;
import java.util.List;
import javax.faces.component.UIComponent;
import org.springframework.beans.factory.annotation.Autowired;
import com.idega.content.business.ContentUtil;
import com.idega.content.lucid.business.LucidEngine;
import com.idega.content.themes.helpers.bean.Setting;
import com.idega.content.themes.helpers.business.ThemesConstants;
import com.idega.content.themes.helpers.business.ThemesHelper;
import com.idega.core.builder.data.ICDomain;
import com.idega.core.localisation.business.ICLocaleBusiness;
import com.idega.idegaweb.IWResourceBundle;
import com.idega.presentation.Block;
import com.idega.presentation.IWContext;
import com.idega.presentation.Layer;
import com.idega.presentation.ui.DropdownMenu;
import com.idega.presentation.ui.Form;
import com.idega.presentation.ui.InterfaceObject;
import com.idega.presentation.ui.Label;
import com.idega.presentation.ui.SubmitButton;
import com.idega.presentation.ui.TextInput;
import com.idega.util.CoreConstants;
import com.idega.util.expression.ELUtil;
public class SiteInfo extends Block {
private static final String REGION_VALUE = "region_value";
private static final String IW_LOCALES = "iw_locales";
private static final String ACTION_PARAMETER = "theme_regions";
private static final String PARAMETER_CLASS_NAME = "iwcontent_class_name";
private static final String SAVE_PARAMETER = "save_site_info";
private static final String SAVE_ACTION = "save";
private static final String TYPE_TEXT = "text";
private String locale = null;
@Autowired
private LucidEngine lucidEngine;
@Autowired
private ThemesHelper themesHelper;
public SiteInfo() {
super();
try {
ELUtil.getInstance().autowire(this);
} catch(Exception e) {
e.printStackTrace();
}
}
@Override
public void main(IWContext iwc) throws Exception {
addForm(iwc);
}
protected DropdownMenu getLocales(IWContext iwc, boolean submit, String onChnageAction) {
locale = iwc.getParameter(IW_LOCALES);
DropdownMenu locales = ICLocaleBusiness.getAvailableLocalesDropdownStringKeyed(iwc.getIWMainApplication(), IW_LOCALES, true);
locales.keepStatusOnAction();
locales.setToSubmit(submit);
if (onChnageAction != null) {
locales.setOnChange(onChnageAction);
}
if (locale == null) {
locale = themesHelper.getCurrentLanguage(iwc);
locales.setSelectedElement(locale);
}
return locales;
}
protected void createContents(UIComponent layer, IWContext iwc, boolean boldText, boolean addKeyPressAction) {
List<Setting> settings = themesHelper.getThemeSettings();
if (settings == null) {
return;
}
if (locale == null || lucidEngine == null) {
return;
}
IWResourceBundle iwrb = ContentUtil.getBundle().getResourceBundle(iwc);
ICDomain domain = iwc.getIWMainApplication().getIWApplicationContext().getDomain();
String keyPressAction = "return saveSiteInfoWithEnter(event)";
for (Setting setting: settings) {
Layer formItem = new Layer();
formItem.setStyleClass("webfaceFormItem");
if (TYPE_TEXT.equals(setting.getType())) {
TextInput regionValue = new TextInput(new StringBuilder(ThemesConstants.THEMES_PROPERTY_START).append(setting.getCode()).append(CoreConstants.DOT)
.append(REGION_VALUE).toString());
if (addKeyPressAction) {
regionValue.setOnKeyPress(keyPressAction);
}
regionValue.setId(new StringBuilder("id").append(setting.getCode()).toString());
regionValue.setValue(lucidEngine.getSiteInfoValue(setting.getCode(), locale, iwc.getApplicationSettings(), domain));
formItem.add(getLabel(iwrb.getLocalizedString(new StringBuilder("site_info.").append(setting.getCode()).toString(), setting.getLabel()),
regionValue));
formItem.add(regionValue);
layer.getChildren().add(formItem);
}
}
}
private void addForm(IWContext iwc) {
Form form = new Form();
form.maintainParameter(ACTION_PARAMETER);
form.maintainParameter(PARAMETER_CLASS_NAME);
form.setID("siteInfoForm");
Layer layer = new Layer();
layer.setStyleClass("webfaceFormSection");
form.add(layer);
doBusiness(iwc, themesHelper.getThemeSettings());
DropdownMenu locales = getLocales(iwc, true, null);
createContents(layer, iwc, true, false);
IWResourceBundle iwrb = ContentUtil.getBundle().getResourceBundle(iwc);
Layer formItem = new Layer();
formItem.setStyleClass("webfaceFormItem");
formItem.add(getLabel(iwrb.getLocalizedString("site_info.locale", "Locale"), locales));
formItem.add(locales);
layer.add(formItem);
Layer buttonLayer = new Layer();
buttonLayer.setStyleClass("webfaceButtonLayer");
form.add(buttonLayer);
SubmitButton save = new SubmitButton(iwrb.getLocalizedString("save", "Save"), SAVE_PARAMETER, SAVE_ACTION);
save.setStyleClass("button");
save.setID(SAVE_ACTION);
buttonLayer.add(save);
add(form);
}
protected void doBusiness(IWContext iwc, List <Setting> settings) {
if (!SAVE_ACTION.equals(iwc.getParameter(SAVE_PARAMETER))) {
return;
}
if (locale == null || settings == null) {
return;
}
Setting setting = null;
String[] keywords = new String[settings.size()];
String[] values = new String[settings.size()];
for (int i = 0; i < settings.size(); i++) {
setting = settings.get(i);
keywords[i] = setting.getCode();
values[i] = iwc.getParameter(new StringBuilder(ThemesConstants.THEMES_PROPERTY_START).append(setting.getCode()).append(CoreConstants.DOT)
.append(REGION_VALUE).toString());
}
try {
lucidEngine.saveSiteInfo(locale, keywords, values);
} catch(Exception e) {
e.printStackTrace();
}
}
protected Label getLabel(String text, InterfaceObject component) {
Label label = new Label(text, component);
return label;
}
public LucidEngine getLucidEngine() {
return lucidEngine;
}
public void setLucidEngine(LucidEngine lucidEngine) {
this.lucidEngine = lucidEngine;
}
public ThemesHelper getThemesHelper() {
return themesHelper;
}
public void setThemesHelper(ThemesHelper themesHelper) {
this.themesHelper = themesHelper;
}
}