protected void mergePublicRenderParameters(
      DynamicServletRequest dynamicRequest, PortletPreferences preferences, long plid) {

    Enumeration<PublicRenderParameter> publicRenderParameters =
        Collections.enumeration(_portlet.getPublicRenderParameters());

    while (publicRenderParameters.hasMoreElements()) {
      PublicRenderParameter publicRenderParameter = publicRenderParameters.nextElement();

      String ignoreKey = PublicRenderParameterConfiguration.getIgnoreKey(publicRenderParameter);

      boolean ignoreValue = GetterUtil.getBoolean(preferences.getValue(ignoreKey, null));

      if (ignoreValue) {
        continue;
      }

      String mappingKey = PublicRenderParameterConfiguration.getMappingKey(publicRenderParameter);

      String mappingValue = GetterUtil.getString(preferences.getValue(mappingKey, null));

      HttpServletRequest request = (HttpServletRequest) dynamicRequest.getRequest();

      String[] newValues = request.getParameterValues(mappingValue);

      if ((newValues != null) && (newValues.length != 0)) {
        newValues = ArrayUtil.remove(newValues, StringPool.NULL);
      }

      String name = publicRenderParameter.getIdentifier();

      if ((newValues == null) || (newValues.length == 0)) {
        QName qName = publicRenderParameter.getQName();

        String[] values =
            _publicRenderParameters.get(PortletQNameUtil.getPublicRenderParameterName(qName));

        if ((values) == null || (values.length == 0) || (Validator.isNull(values[0]))) {

          continue;
        }

        if (dynamicRequest.getParameter(name) == null) {
          dynamicRequest.setParameterValues(name, values);
        }
      } else {
        dynamicRequest.setParameterValues(name, newValues);
      }
    }
  }
  public void editPublicRenderParameters(ActionRequest actionRequest, ActionResponse actionResponse)
      throws Exception {

    Portlet portlet = ActionUtil.getPortlet(actionRequest);

    PortletPreferences portletPreferences =
        ActionUtil.getLayoutPortletSetup(actionRequest, portlet);

    actionRequest = ActionUtil.getWrappedActionRequest(actionRequest, portletPreferences);

    Enumeration<String> enu = portletPreferences.getNames();

    while (enu.hasMoreElements()) {
      String name = enu.nextElement();

      if (name.startsWith(PublicRenderParameterConfiguration.IGNORE_PREFIX)
          || name.startsWith(PublicRenderParameterConfiguration.MAPPING_PREFIX)) {

        portletPreferences.reset(name);
      }
    }

    for (PublicRenderParameter publicRenderParameter : portlet.getPublicRenderParameters()) {

      String ignoreKey = PublicRenderParameterConfiguration.getIgnoreKey(publicRenderParameter);

      boolean ignoreValue = ParamUtil.getBoolean(actionRequest, ignoreKey);

      if (ignoreValue) {
        portletPreferences.setValue(ignoreKey, String.valueOf(Boolean.TRUE));
      } else {
        String mappingKey = PublicRenderParameterConfiguration.getMappingKey(publicRenderParameter);

        String mappingValue = ParamUtil.getString(actionRequest, mappingKey);

        if (Validator.isNotNull(mappingValue)) {
          portletPreferences.setValue(mappingKey, mappingValue);
        }
      }
    }

    if (SessionErrors.isEmpty(actionRequest)) {
      portletPreferences.store();
    }
  }