package be.redtree.library; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Locale; import java.util.Map; import java.util.UUID; import javax.portlet.PortletRequest; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import be.redtree.model.Field; import be.redtree.model.Form; import be.redtree.model.MultiValue; import be.redtree.model.SingleValue; import be.redtree.sql.FormController; import com.google.gson.Gson; import com.liferay.faces.portal.context.LiferayFacesContext; import com.liferay.portal.kernel.util.LocaleUtil; import com.liferay.portal.kernel.util.WebKeys; import com.liferay.portal.model.User; import com.liferay.portal.theme.ThemeDisplay; public class Library { private static Log sLog = LogFactory.getLog(Library.class); public static String getLocaleVersion(Locale locale, String json) { Map<String, String> values = Library.getJsonMapping(json); // try getting user version of translation String value = values.get(locale.toString()); if (value == null || value.isEmpty()) { // value does not exist so getting default SITE version locale = LocaleUtil.getSiteDefault(); value = values.get(locale.toString()); if (value == null || value.isEmpty()) { // value does not exist so getting default PORTAL version locale = LocaleUtil.getDefault(); if (value == null || value.isEmpty()) { value = ""; } } } return value; } public static HashMap<String, String> getJsonMapping(String json) { HashMap<String, String> values = new HashMap<String, String>(); try { values = new Gson().fromJson(json, values.getClass()); if (values == null) { values = new HashMap<String, String>(); } } catch (Exception e) { sLog.info("not a valid multilangual value " + json + " .. upgrading"); } return values; } public static Locale getCurrentLocale(Locale locale) { if (locale == null) { PortletRequest portletRequest = (PortletRequest) LiferayFacesContext.getCurrentInstance().getExternalContext().getRequest(); ThemeDisplay themeDisplay = (ThemeDisplay) portletRequest.getAttribute(WebKeys.THEME_DISPLAY); User user = themeDisplay.getUser(); if (user != null) { return user.getLocale(); } return LocaleUtil.getDefault(); } return locale; } public static Form duplicateForm(Form form_) { PortletRequest portletRequest = (PortletRequest) LiferayFacesContext.getCurrentInstance().getExternalContext().getRequest(); ThemeDisplay themeDisplay = (ThemeDisplay) portletRequest.getAttribute(WebKeys.THEME_DISPLAY); List<Field> fields = new ArrayList<Field>(form_.getFields()); Long companyId = themeDisplay.getCompanyId(); String title = form_.getName(); Boolean template = form_.getTemplate(); Boolean allowGuest = form_.getAllowGuest(); Boolean accessResults = form_.getAccessResults(); Boolean allowMultiple = form_.getAllowMultiple(); Boolean userCopy = form_.getUserCopy(); Boolean userinfo = form_.getUserinfo(); Boolean anonymous = form_.getAnonymous(); Boolean sendMail = form_.getSendMail(); String email = form_.getEmail(); Locale locale = LocaleUtil.getDefault(); Form form = new Form(companyId, locale, title, template, allowGuest, accessResults, allowMultiple, userCopy, userinfo, anonymous, sendMail, email, new ArrayList<Field>()); List<Field> cleanFields = new ArrayList<Field>(); for (Field field : fields) { String uuid = UUID.randomUUID().toString(); String fieldName = field.getName(); Integer weight = field.getWeight(); String tempValue = field.getTempValue(); Boolean mandatory = field.getMandatory(); List<MultiValue> multiValues = new ArrayList<MultiValue>(); String style = field.getStyle(); String css = field.getCss(); Integer size = field.getSize(); String formats = field.getFormats(); String fieldTitle = field.getJSONTitle(); String message = field.getJSONMessage(); Field fieldTemplate = new Field(uuid, fieldName, form, null, multiValues, weight, mandatory, message, fieldTitle, style, css, tempValue, size, formats); SingleValue singleValue = field.getValue(); if (singleValue != null) { String singleValueName = singleValue.getName(); Integer singleValueWeight = singleValue.getWeight(); String singleValueContent = singleValue.getContent(); Boolean singleValueEnabled = singleValue.getEnabled(); fieldTemplate.setValue(new SingleValue(singleValueName, singleValueWeight, singleValueContent, singleValueEnabled, fieldTemplate)); } List<MultiValue> values = new ArrayList<MultiValue>(); for (MultiValue value : field.getValues()) { String valueName = value.getName(); Integer valueWeight = value.getWeight(); String content = value.getContent(); Boolean enabled = value.getEnabled(); values.add(new MultiValue(valueName, valueWeight, content, enabled, fieldTemplate)); } fieldTemplate.setValues(new HashSet<MultiValue>(values)); cleanFields.add(fieldTemplate); } sortFields(cleanFields, form); form.setSelectedFields(cleanFields); return form; } private static void sortFields(List<Field> newFields, Form form) { List<Field> fields = form.getSelectedFields(); if (fields != null) { for (Field dbField : fields) { Boolean found = false; for (Field field : newFields) { if (field.getUuid().equals(dbField.getUuid())) { found = true; } } if (!found) { new FormController().deleteField(dbField); } } } int x = 0; for (Field field : newFields) { field.setForm(form); field.setWeight(x++); } } }