/*
*
* Copyright 2005 AgileTec s.r.l. (http://www.agiletec.it) All rights reserved.
*
* This file is part of jAPS software.
* jAPS 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 2005 AgileTec s.r.l. (http://www.agiletec.it) All rights reserved.
*
*/
package com.agiletec.plugins.jacms.apsadmin.content.attribute.action.resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import com.agiletec.aps.system.SystemConstants;
import com.agiletec.aps.system.common.entity.model.attribute.AttributeInterface;
import com.agiletec.aps.system.common.entity.model.attribute.CompositeAttribute;
import com.agiletec.aps.system.common.entity.model.attribute.MonoListAttribute;
import com.agiletec.aps.system.services.lang.ILangManager;
import com.agiletec.aps.util.ApsWebApplicationUtils;
import com.agiletec.plugins.jacms.aps.system.services.content.model.Content;
import com.agiletec.plugins.jacms.aps.system.services.content.model.extraAttribute.AbstractResourceAttribute;
import com.agiletec.plugins.jacms.aps.system.services.content.model.extraAttribute.ResourceAttributeInterface;
import com.agiletec.plugins.jacms.aps.system.services.resource.model.ResourceInterface;
import com.agiletec.plugins.jacms.apsadmin.content.ContentActionConstants;
/**
* Classe helper base per le action delegata
* alla gestione delle operazione sugli attributi risorsa.
* @author E.Santoboni
*/
public class ResourceAttributeActionHelper {
public static void initSessionParams(IResourceAttributeAction action, HttpServletRequest request) {
HttpSession session = request.getSession();
if (null != action.getParentAttributeName()) {
session.setAttribute(ATTRIBUTE_NAME_SESSION_PARAM, action.getParentAttributeName());
session.setAttribute(INCLUDED_ELEMENT_NAME_SESSION_PARAM, action.getAttributeName());
} else {
session.setAttribute(ATTRIBUTE_NAME_SESSION_PARAM, action.getAttributeName());
}
if (action.getElementIndex()>=0) {
session.setAttribute(LIST_ELEMENT_INDEX_SESSION_PARAM, new Integer(action.getElementIndex()));
}
session.setAttribute(RESOURCE_TYPE_CODE_SESSION_PARAM, action.getResourceTypeCode());
session.setAttribute(RESOURCE_LANG_CODE_SESSION_PARAM, action.getResourceLangCode());
}
/**
* Associa la risorsa all'attributo del contenuto o all'elemento dell'attributo lista
* o all'elemento dell'attributo Composito (sia semplice che in lista).
*/
public static void joinResource(ResourceInterface resource, HttpServletRequest request) {
HttpSession session = request.getSession();
Content currentContent = ResourceAttributeActionHelper.getContent(request);
String attributeName = (String) session.getAttribute(ATTRIBUTE_NAME_SESSION_PARAM);
AttributeInterface attribute = (AttributeInterface) currentContent.getAttribute(attributeName);
joinResource(attribute, resource, session);
removeSessionParams(session);
}
/**
* Associa la risorsa all'attributo del contenuto o all'elemento dell'attributo lista
* o all'elemento dell'attributo Composito (sia semplice che in lista).
*/
private static void joinResource(AttributeInterface attribute, ResourceInterface resource, HttpSession session) {
if (attribute instanceof CompositeAttribute) {
String includedAttributeName = (String) session.getAttribute(INCLUDED_ELEMENT_NAME_SESSION_PARAM);
AttributeInterface includedAttribute = ((CompositeAttribute) attribute).getAttribute(includedAttributeName);
joinResource(includedAttribute, resource, session);
} else if (attribute instanceof ResourceAttributeInterface) {
String langCode = (String) session.getAttribute(RESOURCE_LANG_CODE_SESSION_PARAM);
langCode = (langCode!=null && !"".equals(langCode)) ? langCode : null;
((ResourceAttributeInterface) attribute).setResource(resource, langCode);
} else if (attribute instanceof MonoListAttribute) {
int elementIndex = ((Integer) session.getAttribute(LIST_ELEMENT_INDEX_SESSION_PARAM)).intValue();
AttributeInterface attributeElement = ((MonoListAttribute) attribute).getAttribute(elementIndex);
joinResource(attributeElement, resource, session);
}
}
protected static void removeSessionParams(HttpSession session) {
session.removeAttribute(ATTRIBUTE_NAME_SESSION_PARAM);
session.removeAttribute(RESOURCE_TYPE_CODE_SESSION_PARAM);
session.removeAttribute(RESOURCE_LANG_CODE_SESSION_PARAM);
session.removeAttribute(LIST_ELEMENT_INDEX_SESSION_PARAM);
session.removeAttribute(INCLUDED_ELEMENT_NAME_SESSION_PARAM);
}
protected static String buildEntryContentAnchorDest(HttpSession session) {
StringBuffer buffer = new StringBuffer("contentedit_");
buffer.append(session.getAttribute(ResourceAttributeActionHelper.RESOURCE_LANG_CODE_SESSION_PARAM));
buffer.append("_" + session.getAttribute(ResourceAttributeActionHelper.ATTRIBUTE_NAME_SESSION_PARAM));
return buffer.toString();
}
/**
* Restituisce il contenuto in sesione.
* @return Il contenuto in sesione.
*/
public static Content getContent(HttpServletRequest request) {
return (Content) request.getSession().getAttribute(ContentActionConstants.SESSION_PARAM_NAME_CURRENT_CONTENT);
}
public static void removeResource(HttpServletRequest request) {
HttpSession session = request.getSession();
String attributeName = (String) session.getAttribute(ATTRIBUTE_NAME_SESSION_PARAM);
AttributeInterface attribute = (AttributeInterface) getContent(request).getAttribute(attributeName);
removeResource(attribute, request);
removeSessionParams(session);
}
private static void removeResource(AttributeInterface attribute, HttpServletRequest request) {
HttpSession session = request.getSession();
if (attribute instanceof CompositeAttribute) {
String includedAttributeName = (String) session.getAttribute(INCLUDED_ELEMENT_NAME_SESSION_PARAM);
AttributeInterface includedAttribute = ((CompositeAttribute) attribute).getAttribute(includedAttributeName);
removeResource(includedAttribute, request);
} else if (attribute instanceof AbstractResourceAttribute) {
ILangManager langManager = (ILangManager) ApsWebApplicationUtils.getBean(SystemConstants.LANGUAGE_MANAGER, request);
String langCode = (String) session.getAttribute(RESOURCE_LANG_CODE_SESSION_PARAM);
AbstractResourceAttribute resourceAttribute = (AbstractResourceAttribute) attribute;
if (langCode == null ||
langCode.length()==0 ||
langManager.getDefaultLang().getCode().equals(langCode)) {
resourceAttribute.getResources().clear();
resourceAttribute.getTextMap().clear();
} else {
resourceAttribute.setResource(null, langCode);
resourceAttribute.setText(null, langCode);
}
} else if (attribute instanceof MonoListAttribute) {
int elementIndex = ((Integer) session.getAttribute(LIST_ELEMENT_INDEX_SESSION_PARAM)).intValue();
AttributeInterface attributeElement = ((MonoListAttribute) attribute).getAttribute(elementIndex);
removeResource(attributeElement, request);
}
}
public static final String ATTRIBUTE_NAME_SESSION_PARAM = "contentAttributeName";
public static final String RESOURCE_TYPE_CODE_SESSION_PARAM = "resourceTypeCode";
public static final String RESOURCE_LANG_CODE_SESSION_PARAM = "resourceLangCode";
public static final String LIST_ELEMENT_INDEX_SESSION_PARAM = "listElementIndex";
public static final String INCLUDED_ELEMENT_NAME_SESSION_PARAM = "includedElementName";
}