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++);
}
}
}