/* ===============================================================================
*
* Part of the InfoGlue Content Management Platform (www.infoglue.org)
*
* ===============================================================================
*
* Copyright (C)
*
* This program is free software; you can redistribute it and/or modify it under
* the terms of the GNU General Public License version 2, as published by the
* Free Software Foundation. See the file LICENSE.html for more information.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY, including the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along with
* this program; if not, write to the Free Software Foundation, Inc. / 59 Temple
* Place, Suite 330 / Boston, MA 02111-1307 / USA.
*
* ===============================================================================
*/
package org.infoglue.calendar.actions;
import java.io.File;
import java.security.Principal;
import java.text.MessageFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Collection;
import java.util.Date;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Properties;
import java.util.ResourceBundle;
import java.util.Set;
import java.util.SortedMap;
import java.util.TreeMap;
import java.util.TreeSet;
import javax.portlet.RenderRequest;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.hibernate.FlushMode;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.infoglue.calendar.controllers.AccessRightController;
import org.infoglue.calendar.controllers.CalendarController;
import org.infoglue.calendar.controllers.CalendarLabelsController;
import org.infoglue.calendar.controllers.CalendarSettingsController;
import org.infoglue.calendar.controllers.EventController;
import org.infoglue.calendar.controllers.ICalendarController;
import org.infoglue.calendar.controllers.LanguageController;
import org.infoglue.calendar.controllers.ParticipantController;
import org.infoglue.calendar.controllers.ResourceController;
import org.infoglue.calendar.entities.Category;
import org.infoglue.calendar.entities.Event;
import org.infoglue.calendar.entities.EventCategory;
import org.infoglue.calendar.entities.EventTypeCategoryAttribute;
import org.infoglue.calendar.entities.EventVersion;
import org.infoglue.calendar.entities.Language;
import org.infoglue.calendar.entities.Participant;
import org.infoglue.calendar.util.AttributeType;
import org.infoglue.common.security.beans.InfoGluePrincipalBean;
import org.infoglue.common.util.VisualFormatter;
import org.infoglue.common.exceptions.ConstraintException;
import org.infoglue.common.util.ActionValidatorManager;
import org.infoglue.common.util.ConstraintExceptionBuffer;
import org.infoglue.common.util.PropertyHelper;
import org.infoglue.common.util.ResourceBundleHelper;
import org.infoglue.common.util.WebServiceHelper;
import com.opensymphony.webwork.ServletActionContext;
import com.opensymphony.xwork.ActionContext;
import com.opensymphony.xwork.ActionSupport;
import com.opensymphony.xwork.validator.ValidationException;
import com.sun.syndication.feed.synd.SyndCategory;
import com.sun.syndication.feed.synd.SyndEntry;
/**
* @author Mattias Bogeblad
*
* This is an abstract action used for all calendar actions.
* Just to not have to put to much in the WebworkAbstractAction.
*/
public class CalendarAbstractAction extends ActionSupport
{
private static Log log = LogFactory.getLog(CalendarAbstractAction.class);
private String renderedString = null;
/**
* This method lets the velocity template get hold of all actions inheriting.
*
* @return The action object currently invoked
*/
public CalendarAbstractAction getThis()
{
return this;
}
public Map getInternalEventMap()
{
Map yesOrNo = new HashMap();
yesOrNo.put("true", "labels.internal.event.isInternal.true");
yesOrNo.put("false", "labels.internal.event.isInternal.false");
return yesOrNo;
}
public Map getIsOrganizedByGUMap()
{
Map yesOrNo = new HashMap();
yesOrNo.put("true", "labels.internal.event.isOrganizedByGU");
return yesOrNo;
}
public List getAttributeTypes()
{
List list = new ArrayList();
//list.add("label", "Label");
list.add(new AttributeType("textfield", "TextField"));
list.add(new AttributeType("textarea", "TextArea"));
list.add(new AttributeType("checkbox", "Checkbox"));
list.add(new AttributeType("radiobutton", "RadioButton"));
list.add(new AttributeType("select", "SelectBox"));
list.add(new AttributeType("hidden", "Hidden"));
//list.add("password", "Label");
//list.add("image", "Label");
//list.add("submit", "Label");
//list.add("clear", "Label");
return list;
}
public List getItemsPerPageMap()
{
List items = new ArrayList();
items.add(new String[]{"10", "10"});
items.add(new String[]{"20", "20"});
items.add(new String[]{"50", "50"});
items.add(new String[]{"100", "100"});
items.add(new String[]{"200", "200"});
items.add(new String[]{"500", "500"});
items.add(new String[]{"-1", "Alla"});
return items;
}
public List getEventTypes()
{
List list = new ArrayList();
list.add(new AttributeType("0", "Evenemangsdefinition"));
list.add(new AttributeType("1", "Anm�lningsformul�r"));
return list;
}
public Map getAndSearch()
{
Map yesOrNo = new HashMap();
yesOrNo.put("true", "labels.internal.soba.andSearchTrue");
return yesOrNo;
}
public Map getYesNoMap()
{
Map yesOrNo = new HashMap();
yesOrNo.put("true", "true");
return yesOrNo;
}
public String concat(String start, String end)
{
return start + end;
}
public Integer getSiteNodeId()
{
return (Integer)ServletActionContext.getRequest().getAttribute("siteNodeId");
}
public Integer getComponentId()
{
return (Integer)ServletActionContext.getRequest().getAttribute("componentId");
}
public String getLanguageCode()
{
String languageCode = (String)ServletActionContext.getRequest().getAttribute("languageCode");
if(languageCode == null || languageCode.equals(""))
languageCode = (String)ServletActionContext.getRequest().getParameter("languageCode");
if(languageCode == null || languageCode.equals(""))
languageCode = "en";
return languageCode;
}
public Locale getLocale()
{
String languageCode = getLanguageCode();
if(languageCode == null || languageCode.equals(""))
languageCode = "en";
return new Locale(languageCode);
}
public Language getLanguage() throws Exception
{
String languageCode = getLanguageCode();
if(languageCode == null || languageCode.equals(""))
languageCode = "en";
return LanguageController.getController().getLanguageWithCode(languageCode, getSession());
}
public String getLogoutUrl()
{
return (String)ServletActionContext.getRequest().getAttribute("logoutUrl");
}
public String getCSSUrl()
{
return (String)ServletActionContext.getRequest().getAttribute("cssUrl");
}
public Integer getNumberOfItemsPerPage()
{
return (Integer)ServletActionContext.getRequest().getAttribute("numberOfItems");
}
public String getUploadMaxSize()
{
return PropertyHelper.getProperty("uploadMaxSize");
}
public String getInfoGlueRemoteUser()
{
return (String)ServletActionContext.getRequest().getAttribute("infoglueRemoteUser");
}
public List getInfoGlueRemoteUserRoles()
{
return (List)ServletActionContext.getRequest().getAttribute("infoglueRemoteUserRoles");
}
public List getInfoGlueRemoteUserGroups()
{
return (List)ServletActionContext.getRequest().getAttribute("infoglueRemoteUserGroups");
}
public String getStartDateTime()
{
return (String)ServletActionContext.getRequest().getAttribute("startDateTime");
}
public String getEndDateTime()
{
return (String)ServletActionContext.getRequest().getAttribute("endDateTime");
}
public String getCalendarMonth()
{
return (String)ServletActionContext.getRequest().getAttribute("calendarMonth");
}
public String getFreeText()
{
return (String)ServletActionContext.getRequest().getAttribute("freeText");
}
public String getCategoryAttribute()
{
return (String)ServletActionContext.getRequest().getAttribute("categoryAttribute");
}
public String getCategoryNames()
{
return (String)ServletActionContext.getRequest().getAttribute("categoryNames");
}
public String getContainerDivHTMLStart()
{
return (String)ServletActionContext.getRequest().getAttribute("containerDivHTMLStart");
}
public String getContainerDivHTMLEnd()
{
return (String)ServletActionContext.getRequest().getAttribute("containerDivHTMLEnd");
}
public String getSkipRowDiv()
{
return (String)ServletActionContext.getRequest().getAttribute("skipRowDiv");
}
public String getRowDivHTMLStart()
{
return (String)ServletActionContext.getRequest().getAttribute("rowDivHTMLStart");
}
public String getRowDivHTMLEnd()
{
return (String)ServletActionContext.getRequest().getAttribute("rowDivHTMLEnd");
}
public String getPresentationTemplate()
{
return (String)ServletActionContext.getRequest().getAttribute("presentationTemplate");
}
public InfoGluePrincipalBean getInfoGluePrincipal() throws Exception
{
try
{
return AccessRightController.getController().getPrincipal(this.getInfoGlueRemoteUser());
//return UserControllerProxy.getController().getUser(this.getInfoGlueRemoteUser());
}
catch(Exception e)
{
log.error("Could not get infoglue user:", e);
throw e;
}
}
/*
public String getRequestClass()
{
HttpServletRequest request = ServletActionContext.getRequest();
RenderRequest renderRequest = (RenderRequest)request.getAttribute("javax.portlet.request");
log.debug("renderRequest:" + renderRequest.getRemoteUser());
log.debug("Session ID in portlet: " + ServletActionContext.getRequest().getRequestedSessionId());
return (String)ServletActionContext.getRequest().getRemoteUser();
}
*/
public boolean getIsEventOwner(Long eventId) throws Exception
{
return getIsEventOwner(EventController.getController().getEvent(eventId, getSession()));
}
public List getAnonymousCalendars() throws Exception
{
String anonymousCalendar = PropertyHelper.getProperty("anonymousCalendar");
log.info("anonymousCalendar:" + anonymousCalendar);
if(anonymousCalendar == null)
anonymousCalendar = "";
return CalendarController.getController().getCalendar(anonymousCalendar, getSession());
}
public boolean getIsEventOwner(Event event)
{
boolean isEventOwner = false;
try
{
org.infoglue.calendar.entities.Calendar owningCalendar = event.getOwningCalendar();
if(owningCalendar != null)
{
log.info("owningCalendar.getOwningRoles():" + owningCalendar.getOwningRoles());
log.info("this.getInfoGlueRemoteUserGroups():" + this.getInfoGlueRemoteUserGroups());
if(owningCalendar.getOwningRoles().size() > 0 && this.getInfoGlueRemoteUserGroups().size() == 0)
{
isEventOwner = false;
}
else
{
Set calendars = CalendarController.getController().getCalendarList(this.getInfoGlueRemoteUserRoles(), this.getInfoGlueRemoteUserGroups(), getSession());
log.info("calendars: " + calendars);
if(calendars.contains(owningCalendar))
isEventOwner = true;
}
}
}
catch(Exception e)
{
log.warn("Error occurred:" + e.getMessage(), e);
}
return isEventOwner;
}
public boolean getIsCalendarAdministrator(org.infoglue.calendar.entities.Calendar calendar)
{
boolean isCalendarOwner = false;
try
{
log.info("calendar.getOwningRoles():" + calendar.getOwningRoles());
log.info("this.getInfoGlueRemoteUserGroups():" + this.getInfoGlueRemoteUserGroups());
if(calendar.getOwningRoles().size() > 0 && this.getInfoGlueRemoteUserGroups().size() == 0)
{
isCalendarOwner = false;
}
else
{
Set calendars = CalendarController.getController().getCalendarList(this.getInfoGlueRemoteUserRoles(), this.getInfoGlueRemoteUserGroups(), getSession());
if(calendars.contains(calendar))
isCalendarOwner = true;
}
}
catch(Exception e)
{
log.warn("Error occurred:" + e.getMessage(), e);
}
return isCalendarOwner;
}
public boolean getIsEventCreator(Event event)
{
boolean isEventCreator = false;
try
{
if(this.getInfoGlueRemoteUser() == null)
log.warn("InfoGlue remote user is null - should not happen..");
else
{
if(event.getCreator() != null && event.getCreator().equalsIgnoreCase(this.getInfoGlueRemoteUser()))
isEventCreator = true;
}
}
catch(Exception e)
{
log.warn("Error occurred:" + e.getMessage(), e);
}
return isEventCreator;
}
public List getEventCategories(String eventString, EventTypeCategoryAttribute categoryAttribute)
{
Object object = findOnValueStack(eventString);
Event event = (Event)object;
List categories = new ArrayList();
Iterator i = event.getEventCategories().iterator();
while(i.hasNext())
{
EventCategory eventCategory = (EventCategory)i.next();
if(eventCategory.getEventTypeCategoryAttribute().getId().equals(categoryAttribute.getId()))
categories.add(eventCategory.getCategory());
}
return categories;
}
public List getEventCategories(Event event, EventTypeCategoryAttribute categoryAttribute)
{
List categories = new ArrayList();
Iterator i = event.getEventCategories().iterator();
while(i.hasNext())
{
EventCategory eventCategory = (EventCategory)i.next();
if(eventCategory.getEventTypeCategoryAttribute().getId().equals(categoryAttribute.getId()))
categories.add(eventCategory.getCategory());
}
return categories;
}
public Collection getSortedChildren(Set<Category> categories)
{
Locale locale = new Locale(this.getLanguageCode());
SortedMap<String,Category> sortedChildren = new TreeMap<String,Category>();
for(Category category : categories)
{
sortedChildren.put(category.getLocalizedName(this.getLanguageCode(), "sv").toLowerCase(), category);
}
return sortedChildren.values();
}
public String getState(Integer stateId)
{
if(stateId == null)
return "None";
if(stateId.intValue() == 0)
return getLabel("labels.state.working");
if(stateId.intValue() == 2)
return getLabel("labels.state.publish");
if(stateId.intValue() == 3)
return getLabel("labels.state.published");
return "";
}
/**
* This method fetches a value from the xml that is the contentVersions Value. If the
* contentVersioVO is null the contentVersion has not been created yet and no values are present.
*/
public String getAttributeValue(String xml, String key)
{
String value = "";
log.info("xml:" + xml);
if(xml != null)
{
try
{
//log.info("key:" + key);
int startTagIndex = xml.indexOf("<" + key + ">");
int endTagIndex = xml.indexOf("]]></" + key + ">");
if(startTagIndex > 0 && startTagIndex < xml.length() && endTagIndex > startTagIndex && endTagIndex < xml.length())
{
value = xml.substring(startTagIndex + key.length() + 11, endTagIndex);
value = new VisualFormatter().escapeHTML(value);
}
}
catch(Exception e)
{
e.printStackTrace();
}
}
log.info("value:" + value);
return value;
}
public String getStringAttributeValue(String attributeName)
{
try
{
return (String)ServletActionContext.getRequest().getAttribute(attributeName);
}
catch(Exception e)
{
return "";
}
}
public String getRequestParameterValue(String name)
{
try
{
return (String)ServletActionContext.getRequest().getParameter(name);
}
catch(Exception e)
{
return null;
}
}
public String formatDate(Date date, String pattern, Locale locale)
{
if(date == null)
return "";
// Format the current time.
SimpleDateFormat formatter = new SimpleDateFormat(pattern, locale);
String dateString = formatter.format(date);
return dateString;
}
public Date parseDate(String dateString, String pattern, Locale locale)
{
if(dateString == null)
return new Date();
Date date = new Date();
try
{
// Format the current time.
SimpleDateFormat formatter = new SimpleDateFormat(pattern, locale);
date = formatter.parse(dateString);
}
catch(Exception e)
{
log.info("Could not parse date:" + e.getMessage() + " - defaulting to now...");
}
return date;
}
public String formatDate(Date date, String pattern)
{
if(date == null)
return "";
// Format the current time.
SimpleDateFormat formatter = new SimpleDateFormat(pattern, getLocale());
String dateString = formatter.format(date);
return dateString;
}
public Date parseDate(String dateString, String pattern)
{
if(dateString == null)
return new Date();
Date date = new Date();
try
{
// Format the current time.
SimpleDateFormat formatter = new SimpleDateFormat(pattern, new Locale(getLanguageCode()));
date = formatter.parse(dateString);
}
catch(Exception e)
{
log.info("Could not parse date:" + e.getMessage() + " - defaulting to now...");
}
return date;
}
/**
* Gets a calendar object with date and hour
*
* @param dateString
* @param pattern
* @param hour
* @return
*/
public Calendar getCalendar(String dateString, String pattern, boolean fallback)
{
Calendar calendar = Calendar.getInstance();
if(dateString == null)
{
//calendar.set(Calendar.HOUR_OF_DAY, hour.intValue());
return calendar;
}
Date date = new Date();
try
{
// Format the current time.
SimpleDateFormat formatter = new SimpleDateFormat(pattern);
date = formatter.parse(dateString);
calendar.setTime(date);
//calendar.set(Calendar.HOUR_OF_DAY, hour.intValue());
}
catch(Exception e)
{
log.info("Could not parse date:" + e.getMessage() + " - defaulting to now...");
if(!fallback)
return null;
}
return calendar;
}
/**
* Gets a calendar object which is now
*
* @return
*/
public Calendar getNow()
{
Calendar calendar = Calendar.getInstance();
return calendar;
}
public String getVCalendar(Long eventId) throws Exception
{
return ICalendarController.getICalendarController().getICalendarUrl(eventId, getSession());
}
public String getResourceUrl(Long resourceId) throws Exception
{
return ResourceController.getController().getResourceUrl(resourceId, getSession());
}
public String getResourceUrl(Event event, String assetKey) throws Exception
{
return ResourceController.getController().getResourceUrl(event, assetKey, getSession());
}
public Participant getParticipant(Long participantId) throws Exception
{
return ParticipantController.getController().getParticipant(participantId, getSession());
}
public void validateInput(CalendarAbstractAction action) throws ValidationException
{
validateInput(action, null);
}
public void validateInput(CalendarAbstractAction action, ConstraintExceptionBuffer ceb) throws ValidationException
{
validateInput(action, ceb, true);
}
public void validateInput(CalendarAbstractAction action, ConstraintExceptionBuffer ceb, boolean isCaptchaOk) throws ValidationException
{
boolean throwError = false;
Map fieldErrors = new HashMap();
if(!isCaptchaOk)
{
fieldErrors.put("captcha", new ArrayList<String>(Arrays.asList("errors.captcha")));
throwError = true;
}
//log.debug("this.getFieldErrors() 0:" + this.getFieldErrors().size());
String context = ActionContext.getContext().getName();
ActionValidatorManager.validate(this, context);
if(this.getFieldErrors() != null && this.getFieldErrors().size() > 0)
{
fieldErrors.putAll(this.getFieldErrors());
log.debug("fieldErrors:" + fieldErrors.size());
throwError = true;
}
ActionContext.getContext().getValueStack().getContext().put("actionErrors", this.getActionErrors());
ActionContext.getContext().getValueStack().getContext().put("fieldErrors", fieldErrors);
//ActionContext.getContext().getValueStack().getContext().put("errorAction", this);
log.debug("actionErrors:" + this.getActionErrors());
log.debug("fieldErrors:" + this.getFieldErrors());
log.debug("errorAction:" + this);
log.debug("ceb:" + ceb);
if(ceb != null)
{
List errs = new ArrayList();
ConstraintException ce = ceb.toConstraintException();
while(ce != null)
{
String fieldName = ce.getFieldName();
String errorCode = ce.getErrorCode();
String message = ce.getMessage();
log.debug("fieldName:" + fieldName);
log.debug("errorCode:" + errorCode);
log.debug("message:" + message);
errs.add(errorCode);
fieldErrors.put(fieldName, errs);
throwError = true;
ce = ce.getChainedException();
}
}
Iterator keyIterator = fieldErrors.keySet().iterator();
while(keyIterator.hasNext())
{
String key = (String)keyIterator.next();
log.info("FieldError: " + key + "=" + fieldErrors.get(key));
}
if(throwError)
{
ActionContext.getContext().getValueStack().getContext().put("errorAction", this);
throw new ValidationException("An validation error occurred - more information is in the valuestack...");
}
/*
if (fValidator != null)
{
if (validatorContext.hasFieldErrors())
{
Collection fieldErrors = (Collection) validatorContext.getFieldErrors().get(fullFieldName);
if (fieldErrors != null)
{
errs = new ArrayList(fieldErrors);
}
}
}
*/
/*
else if (validatorContext.hasActionErrors()) {
Collection actionErrors = validatorContext.getActionErrors();
if (actionErrors != null) {
errs = new ArrayList(actionErrors);
}
}
*/
/*
if (fValidator != null) {
if (validatorContext.hasFieldErrors()) {
Collection errCol = (Collection) validatorContext.getFieldErrors().get(fullFieldName);
if ((errCol != null) && !errCol.equals(errs)) {
if (LOG.isDebugEnabled()) {
LOG.debug("Short-circuiting on field validation");
}
if (shortcircuitedFields == null) {
shortcircuitedFields = new TreeSet();
}
shortcircuitedFields.add(fullFieldName);
}
}
} else if (validatorContext.hasActionErrors()) {
Collection errCol = validatorContext.getActionErrors();
if ((errCol != null) && !errCol.equals(errs)) {
if (LOG.isDebugEnabled()) {
LOG.debug("Short-circuiting");
}
break;
}
}
}
*/
}
public boolean validateCaptcha(String captcha, String correctCaptcha) throws ValidationException
{
if(correctCaptcha == null || !correctCaptcha.equals(captcha))
{
return false;
}
return true;
}
public void setError(String message, Exception e)
{
String context = ActionContext.getContext().getName();
ActionContext.getContext().getValueStack().getContext().put("message", message);
ActionContext.getContext().getValueStack().getContext().put("error", e);
}
public ActionContext getActionContext() throws ValidationException
{
return ActionContext.getContext();
}
public boolean useEventPublishing()
{
String useEventPublishing = PropertyHelper.getProperty("useEventPublishing");
return (useEventPublishing.equalsIgnoreCase("true") ? true : false);
}
public String getTempFilePath()
{
String digitalAssetPath = PropertyHelper.getProperty("digitalAssetPath");
return digitalAssetPath;
}
public boolean useEntryLimitation()
{
String useEntryLimitation = PropertyHelper.getProperty("useEntryLimitation");
return (useEntryLimitation.equalsIgnoreCase("true") ? true : false);
}
public String getParameterizedLabel(String key, String argument)
{
Locale locale = new Locale(this.getLanguageCode());
String label = getLabel(key, locale, false, true, true);
Object[] arguments = {argument};
label = MessageFormat.format(label, arguments);
//label"At {1,time} on {1,date}, there was {2} on planet {0,number,integer}.",
return label;
}
public String getLabel(String key)
{
Locale locale = new Locale(this.getLanguageCode());
return getLabel(key, locale, false, true, true);
}
public String getLabel(String key, String languageCode)
{
Locale locale = Locale.ENGLISH;
if(languageCode != null && !languageCode.equals(""))
locale = new Locale(languageCode);
return getLabel(key, locale, false, true, true);
}
public String getLabel(String key, String languageCode, boolean skipProperty)
{
Locale locale = Locale.ENGLISH;
if(languageCode != null && !languageCode.equals(""))
locale = new Locale(languageCode);
return getLabel(key, locale, skipProperty, true, true);
}
public String getLabel(String key, String languageCode, boolean skipProperty, boolean fallbackToDefault)
{
Locale locale = Locale.ENGLISH;
if(languageCode != null && !languageCode.equals(""))
locale = new Locale(languageCode);
return getLabel(key, locale, skipProperty, fallbackToDefault, true);
}
public String getLabel(String key, String languageCode, boolean skipProperty, boolean fallbackToDefault, boolean fallbackToKey)
{
Locale locale = Locale.ENGLISH;
if(languageCode != null && !languageCode.equals(""))
locale = new Locale(languageCode);
String label = getLabel(key, locale, skipProperty, fallbackToDefault, fallbackToKey);
return label;
}
public String getLabel(String key, Locale locale, boolean skipProperty, boolean fallbackToDefault, boolean fallbackToKey)
{
if(locale == null)
locale = Locale.ENGLISH;
String label = "";
if(fallbackToKey)
label = key;
try
{
Object derivedObject = findOnValueStack(key);
String derivedValue = null;
if(derivedObject != null)
derivedValue = derivedObject.toString();
if(!skipProperty)
{
if(derivedValue != null)
label = CalendarLabelsController.getCalendarLabelsController().getLabel("infoglueCalendar", derivedValue, locale, getSession());
else
label = CalendarLabelsController.getCalendarLabelsController().getLabel("infoglueCalendar", key, locale, getSession());
}
if(skipProperty || ((label == null || label.equals("")) && fallbackToDefault))
{
ResourceBundle resourceBundle = ResourceBundleHelper.getResourceBundle("infoglueCalendar", locale);
if(derivedValue != null)
label = resourceBundle.getString(derivedValue);
else
label = resourceBundle.getString(key);
}
if((label == null || label.equals("")) && fallbackToKey)
label = key;
}
catch(Exception e)
{
log.info("An label was not found for key: " + key + ": " + e.getMessage(), e);
}
return label;
}
public EventVersion getMasterEventVersion(String eventString)
{
Object object = findOnValueStack(eventString);
Event event = (Event)object;
if(event == null)
return null;
EventVersion masterEventVersion = null;
try
{
Language language = LanguageController.getController().getMasterLanguage(getSession());
Iterator eventVersionsIterator = event.getVersions().iterator();
while(eventVersionsIterator.hasNext())
{
EventVersion currentEventVersion = (EventVersion)eventVersionsIterator.next();
if(currentEventVersion.getVersionLanguageId().equals(language.getId()))
{
masterEventVersion = currentEventVersion;
break;
}
}
if(masterEventVersion == null && event.getVersions().size() > 0)
masterEventVersion = (EventVersion)event.getVersions().toArray()[0];
}
catch(Exception e)
{
log.error("Error when getting event version for event: " + event + ":" + e.getMessage(), e);
}
return masterEventVersion;
}
public EventVersion getEventVersion(String eventString)
{
Object object = findOnValueStack(eventString);
Event event = (Event)object;
if(event == null)
return null;
EventVersion eventVersion = null;
try
{
Language language = LanguageController.getController().getLanguageWithCode(this.getLanguageCode(), getSession());
Iterator eventVersionsIterator = event.getVersions().iterator();
while(eventVersionsIterator.hasNext())
{
EventVersion currentEventVersion = (EventVersion)eventVersionsIterator.next();
if(currentEventVersion.getVersionLanguageId().equals(language.getId()))
{
eventVersion = currentEventVersion;
break;
}
}
if(eventVersion == null && event.getVersions().size() > 0)
eventVersion = (EventVersion)event.getVersions().toArray()[0];
}
catch(Exception e)
{
log.error("Error when getting event version for event: " + event + ":" + e.getMessage(), e);
}
return eventVersion;
}
public EventVersion getEventVersion(Event event)
{
if(event == null)
return null;
EventVersion eventVersion = null;
try
{
Language language = LanguageController.getController().getLanguageWithCode(this.getLanguageCode(), getSession());
Iterator eventVersionsIterator = event.getVersions().iterator();
while(eventVersionsIterator.hasNext())
{
EventVersion currentEventVersion = (EventVersion)eventVersionsIterator.next();
if(currentEventVersion.getVersionLanguageId().equals(language.getId()))
{
eventVersion = currentEventVersion;
break;
}
}
if(eventVersion == null && event.getVersions().size() > 0)
eventVersion = (EventVersion)event.getVersions().toArray()[0];
}
catch(Exception e)
{
log.error("Error when getting event version for event: " + event + ":" + e.getMessage(), e);
}
return eventVersion;
}
public String getCategoryValue(String feedEntryString, String categoryName)
{
Object object = findOnValueStack(feedEntryString);
SyndEntry entry = (SyndEntry)object;
if(entry == null)
return null;
String categoryValue = null;
try
{
Iterator categoriesIterator = entry.getCategories().iterator();
while(categoriesIterator.hasNext())
{
SyndCategory category = (SyndCategory)categoriesIterator.next();
if(category.getTaxonomyUri().indexOf(categoryName) > -1)
{
categoryValue = category.getName();
break;
}
}
}
catch(Exception e)
{
log.error("Error when getting category for entry: " + feedEntryString + ":" + e.getMessage(), e);
}
return categoryValue;
}
public VisualFormatter getVisualFormatter()
{
return new VisualFormatter();
}
public boolean isActiveEventField(String fieldName)
{
String hiddenEventFields = getSetting("hiddenEventFields");
log.info("hiddenEventFields:" + hiddenEventFields);
return !(hiddenEventFields.indexOf(fieldName) > -1);
}
public boolean isActiveEntryField(String fieldName)
{
String hiddenEntryFields = getSetting("hiddenEntryFields");
log.info("hiddenEntryFields:" + hiddenEntryFields);
return !(hiddenEntryFields.indexOf(fieldName) > -1);
}
public String getSetting(String key)
{
return getSetting(key, "default", false, true);
}
public String getSetting(String key, String variationId)
{
return getSetting(key, variationId, false, true);
}
public String getSetting(String key, String variationId, boolean skipProperty)
{
return getSetting(key, variationId, skipProperty, true);
}
public String getSetting(String key, boolean skipProperty, boolean fallbackToDefault)
{
return getSetting(key, null, skipProperty, true);
}
public String getSetting(String key, String variationId, boolean skipProperty, boolean fallbackToDefault)
{
//log.info("Getting setting for " + key + ":" + variationId + ":" + skipProperty + ":" + fallbackToDefault);
if(variationId == null)
variationId = "default";
String label = "";
try
{
Object derivedObject = findOnValueStack(key);
String derivedValue = null;
if(derivedObject != null)
derivedValue = derivedObject.toString();
//log.info("derivedValue:" + derivedValue);
if(!skipProperty)
{
if(derivedValue != null)
label = CalendarSettingsController.getCalendarSettingsController().getSetting("infoglueCalendar", derivedValue, variationId, getSession());
else
label = CalendarSettingsController.getCalendarSettingsController().getSetting("infoglueCalendar", key, variationId, getSession());
}
if(skipProperty || ((label == null || label.equals("")) && fallbackToDefault))
{
Properties properties = PropertyHelper.getProperties();
if(derivedValue != null)
label = properties.getProperty(derivedValue);
else
label = properties.getProperty(key);
}
if(label == null)
label = "";
}
catch(Exception e)
{
log.info("An label was not found for key: " + key + ": " + e.getMessage(), e);
}
//log.info("label:" + label);
return label;
}
public void setRenderedString(String renderedString)
{
this.renderedString = renderedString;
}
public String getRenderedString()
{
return this.renderedString;
}
public String getDatabaseConfigurationError() throws HibernateException {
return (String)ServletActionContext.getRequest().getAttribute("DATABASE_CONFIGURATION_ERROR");
}
public Session getSession() throws HibernateException {
return (Session)ServletActionContext.getRequest().getAttribute("HIBERNATE_SESSION");
}
public Session getSession(boolean readOnly) throws HibernateException {
Session session = (Session)ServletActionContext.getRequest().getAttribute("HIBERNATE_SESSION");
if(readOnly)
session.setFlushMode(FlushMode.NEVER);
return session;
}
public Transaction getTransaction() throws HibernateException {
return (Transaction)ServletActionContext.getRequest().getAttribute("HIBERNATE_TRANSACTION");
}
public void emptySession() throws HibernateException {
ServletActionContext.getRequest().removeAttribute("HIBERNATE_SESSION");
}
public void emptyTransaction() throws HibernateException {
ServletActionContext.getRequest().removeAttribute("HIBERNATE_TRANSACTION");
}
boolean rollBackOnly = false;
public void disposeSession() throws HibernateException {
log.debug("disposing");
if (getSession()==null) return;
if (rollBackOnly) {
try {
log.debug("rolling back");
if (getTransaction()!=null) getTransaction().rollback();
}
catch (HibernateException e) {
log.error("error during rollback", e);
throw e;
}
finally {
getSession().close();
emptySession();
emptyTransaction();
}
}
else {
try {
log.debug("committing");
if (getTransaction()!=null)
{
getTransaction().commit();
}
}
catch (HibernateException e)
{
log.error("error during commit:" + e.getMessage());
if(log.isDebugEnabled())
log.debug("StackTrace:", e);
getTransaction().rollback();
throw e;
}
finally {
getSession().close();
emptySession();
emptyTransaction();
}
}
}
/*
protected void setRollbackOnly() {
session.setRollBackOnly(true);
}
*/
protected Object get(String name) {
return ActionContext.getContext().getSession().get(name);
}
protected void set(String name, Object value) {
ActionContext.getContext().getSession().put(name, value);
}
public boolean isRollBackOnly()
{
return rollBackOnly;
}
public void setRollBackOnly(boolean rollBackOnly)
{
this.rollBackOnly = rollBackOnly;
}
public static Object findOnValueStack(String expr)
{
ActionContext a = ActionContext.getContext();
Object value = a.getValueStack().findValue(expr);
return value;
}
}