/* * * Copyright 2013 Entando S.r.l. (http://www.entando.com) All rights reserved. * * This file is part of Entando software. * Entando is a free software; * You can redistribute it and/or modify it * under the terms of the GNU General Public License (GPL) as published by the Free Software Foundation; version 2. * * See the file License for the specific language governing permissions * and limitations under the License * * * * Copyright 2013 Entando S.r.l. (http://www.entando.com) All rights reserved. * */ package com.agiletec.plugins.jpmyportalplus.aps.system.services.userconfig.model; import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import java.net.URLEncoder; import java.util.List; import java.util.Set; import javax.servlet.http.Cookie; import org.entando.entando.aps.system.services.widgettype.IWidgetTypeManager; import org.entando.entando.aps.system.services.widgettype.WidgetType; import org.entando.entando.aps.system.services.widgettype.WidgetTypeParameter; import org.json.simple.JSONObject; import org.json.simple.parser.JSONParser; import org.json.simple.parser.ParseException; import com.agiletec.aps.system.ApsSystemUtils; import com.agiletec.aps.system.SystemConstants; import com.agiletec.aps.system.exception.ApsSystemException; import com.agiletec.aps.system.services.page.IPage; import com.agiletec.aps.system.services.page.Widget; import com.agiletec.plugins.jpmyportalplus.aps.system.services.pagemodel.Frame; import com.agiletec.plugins.jpmyportalplus.aps.system.services.pagemodel.MyPortalPageModel; /** * @author E.Santoboni */ public class CustomPageConfig { public CustomPageConfig(String pageCode, int frames) { this.setPageCode(pageCode); this.setConfig(new Widget[frames]); this.setStatus(new Integer[frames]); } public CustomPageConfig(Cookie cookie, IPage page, IWidgetTypeManager showletTypeManager, Set<String> allowedShowlets, String voidShowletCode) throws ApsSystemException { String value; try { value = URLDecoder.decode(cookie.getValue(),"UTF-8"); } catch (UnsupportedEncodingException e1) { value=null; ApsSystemUtils.logThrowable(e1, this, "CustomPageConfig", "Error decoding cookie"); } // FIX temporaneo :: problema escape sui doppi apici String tmp = value.replace("\\", ""); value=tmp; try { Frame[] frames = ((MyPortalPageModel) page.getModel()).getFrameConfigs(); int frameNumber = frames.length; JSONParser parser = new JSONParser(); JSONObject positions = (JSONObject) parser.parse(value); this.setPageCode(page.getCode()); this.setConfig(new Widget[frameNumber]); this.setStatus(new Integer[frameNumber]); for (int i = 0; i < frameNumber; i++) { if (frames[i].isLocked()) continue; JSONObject frame = (JSONObject) positions.get(String.valueOf(i)); if (null == frame) continue; Object showletCode = frame.get("code"); if (null == showletCode) continue; WidgetType type = showletTypeManager.getWidgetType(showletCode.toString()); if (null == type) continue; Widget showlet = null; if (showletCode.equals(voidShowletCode) || allowedShowlets.contains(showletCode) || this.isViewerType(type)) { showlet = new Widget(); showlet.setType(type); /* JSONObject showletConfig = (JSONObject) frame.get("config"); if (null != showletConfig) { ApsProperties properties = new ApsProperties(); Set<String> keys = showletConfig.keySet(); Iterator<String> keysiter = keys.iterator(); while (keysiter.hasNext()) { String configkey = keysiter.next(); Object configvalue = showletConfig.get(configkey); if (null != configvalue) { properties.put(configkey, configvalue.toString()); } } showlet.setConfig(properties); } */ } if (null != showlet) { this.getConfig()[i] = showlet; Object status = frame.get("status"); if (null != status) { int statusInt = 0; try { statusInt = Integer.parseInt(status.toString()); } catch (NumberFormatException e) { //nothing to do } this.getStatus()[i] = statusInt; } } } } catch (ParseException e) { ApsSystemUtils.logThrowable(e, this, "CustomPageConfig", "Invalid coockie value : VALUE :\n" + value); } catch (Throwable t) { ApsSystemUtils.logThrowable(t, this, "CustomPageConfig"); throw new ApsSystemException("Error reading the configuration of guest user", t); } } protected boolean isViewerType(WidgetType type) { String action = type.getAction(); if (null == action || !action.equals("viewerConfig")) return false; List<WidgetTypeParameter> params = type.getTypeParameters(); if (null == params || params.isEmpty()) return false; for (int i=0; i<params.size(); i++) { WidgetTypeParameter WidgetTypeParameter = params.get(i); if (WidgetTypeParameter.getName().equals(SystemConstants.K_CONTENT_ID_PARAM)) { return true; } } return false; } public void update(WidgetUpdateInfoBean[] updateInfos) { for (int i = 0; i < updateInfos.length; i++) { WidgetUpdateInfoBean infoBean = updateInfos[i]; int pos = infoBean.getFramePos(); this.getConfig()[pos] = infoBean.getShowlet(); this.getStatus()[pos] = infoBean.getStatus(); } } public Cookie toCookie(String coockieName) throws Throwable { String value = null; try { JSONObject frames = new JSONObject(); Widget[] showlets = this.getConfig(); for (int i = 0; i < showlets.length; i++) { Widget showlet = showlets[i]; if (null == showlet) continue; JSONObject frame = new JSONObject(); frame.put("code", showlet.getType().getCode()); /* ApsProperties properties = showlet.getConfig(); if (properties != null && !properties.isEmpty()) { JSONObject configFrame = new JSONObject(); Set<Object> keys = properties.keySet(); Iterator<Object> keysIter = keys.iterator(); while (keysIter.hasNext()) { Object configkey = keysIter.next(); Object configValue = properties.get(configkey); if (null != configValue) { configFrame.put(configkey.toString(), configValue.toString()); } } frame.put("config", configFrame); } else { */ frame.put("config", null); /* } */ Integer status = this.getStatus()[i]; if (status != null && status.intValue()==1) { frame.put("status", 1); } else { frame.put("status", 0); } frames.put(i, frame); } value = frames.toJSONString(); //value = "{\"23\": {\"status\": 1,\"config\": {\"contentType\": \"NEW\"},\"code\": \"latest_news\"},\"23\": {\"status\": 1,\"config\": {\"contentType\": \"NEW\"},\"code\": \"latest_news\"},\"23\": {\"status\": 1,\"config\": {\"contentType\": \"NEW\"},\"code\": \"latest_news\"},\"23\": {\"status\": 1,\"config\": {\"contentType\": \"NEW\"},\"code\": \"latest_news\"},\"23\": {\"status\": 1,\"config\": {\"contentType\": \"NEW\"},\"code\": \"latest_news\"}}"; } catch (Throwable t) { ApsSystemUtils.logThrowable(t, this, "toCookie"); throw new ApsSystemException("Error building the showlet array to render", t); } Cookie cookie = null; if (null != value) { cookie = new Cookie(coockieName, URLEncoder.encode(value, "UTF-8")); cookie.setMaxAge(365*24*60*60);//one year cookie.setPath("/"); } return cookie; } public String getPageCode() { return _pageCode; } protected void setPageCode(String pageCode) { this._pageCode = pageCode; } public Widget[] getConfig() { return _config; } protected void setConfig(Widget[] config) { this._config = config; } public Integer[] getStatus() { return _status; } protected void setStatus(Integer[] status) { this._status = status; } private String _pageCode; private Widget[] _config; private Integer[] _status; }