Java tutorial
/* =============================================================================== * * 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.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.Iterator; import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Set; import java.util.StringTokenizer; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.hibernate.Session; import org.infoglue.calendar.controllers.CalendarController; import org.infoglue.calendar.controllers.CategoryController; import org.infoglue.calendar.controllers.ContentTypeDefinitionController; import org.infoglue.calendar.controllers.EntryController; import org.infoglue.calendar.controllers.EventController; import org.infoglue.calendar.controllers.EventTypeCategoryAttributeController; import org.infoglue.calendar.controllers.EventTypeController; import org.infoglue.calendar.controllers.LocationController; import org.infoglue.calendar.controllers.ResourceController; import org.infoglue.calendar.entities.Entry; import org.infoglue.calendar.entities.Event; import org.infoglue.calendar.entities.EventType; import org.infoglue.calendar.entities.EventVersion; import org.infoglue.calendar.entities.Location; import org.infoglue.calendar.util.EntrySearchResultfilesConstructor; import org.infoglue.common.contenttypeeditor.entities.ContentTypeAttribute; import org.infoglue.common.util.PropertyHelper; import com.opensymphony.webwork.ServletActionContext; import com.opensymphony.xwork.Action; /** * This action represents a Location Administration screen. * * @author Mattias Bogeblad */ public class ViewEntrySearchAction extends CalendarAbstractAction { private static Log log = LogFactory.getLog(ViewEntrySearchAction.class); private Long[] searchEventId; private String searchFirstName; private String searchLastName; private String searchEmail; private boolean onlyFutureEvents = true; private String[] categoryId; private String[] locationId; private String searchHashCode = ""; private Set eventList; private List categoryList; private List locationList; private List categoryAttributes; private String andSearch = "false"; private Set entries; //private String emailAddresses = ""; //private String emailEntryIds = ""; private Map searchResultFiles; private List resultValues = new LinkedList(); private Map categoryAttributesMap = new HashMap(); private void initialize(Session session) throws Exception { this.eventList = EventController.getController().getPublishedEventList(this.getInfoGlueRemoteUser(), this.getInfoGlueRemoteUserRoles(), this.getInfoGlueRemoteUserGroups(), null, session); this.categoryList = CategoryController.getController().getRootCategoryList(session); this.locationList = LocationController.getController().getLocationList(session); this.categoryAttributes = EventTypeCategoryAttributeController.getController() .getEventTypeCategoryAttributeList(session); log.debug("calendars:" + categoryAttributes.size()); String entryResultValues = PropertyHelper.getProperty("entryResultsValues"); StringTokenizer st = new StringTokenizer(entryResultValues, ",", false); while (st.hasMoreTokens()) { String resultValue = st.nextToken(); resultValues.add(resultValue); } } /** * This is the entry point for the main listing. */ public String execute() throws Exception { Session dbSession = getSession(true); initialize(dbSession); if (this.searchHashCode != null && !this.searchHashCode.equals("")) { log.debug("Getting search args from session..." + this.searchHashCode); HttpSession session = ServletActionContext.getRequest().getSession(); this.searchFirstName = (String) session.getAttribute("request_" + searchHashCode + "_searchFirstName"); this.searchLastName = (String) session.getAttribute("request_" + searchHashCode + "_searchLastName"); this.searchEmail = (String) session.getAttribute("request_" + searchHashCode + "_searchEmail"); this.onlyFutureEvents = Boolean .parseBoolean((String) session.getAttribute("request_" + searchHashCode + "_onlyFutureEvents")); this.searchEventId = (Long[]) session.getAttribute("request_" + searchHashCode + "_searchEventId"); this.categoryAttributesMap = (Map) session .getAttribute("request_" + searchHashCode + "_categoryAttributesMap"); this.andSearch = (String) session.getAttribute("request_" + searchHashCode + "_andSearch"); this.locationId = (String[]) session.getAttribute("request_" + searchHashCode + "_locationId"); } else { log.debug("Getting search args from request..."); int i = 0; String idKey = ServletActionContext.getRequest().getParameter("categoryAttributeId_" + i); log.info("idKey:" + idKey); while (idKey != null && idKey.length() > 0) { String[] categoryIds = ServletActionContext.getRequest() .getParameterValues("categoryAttribute_" + idKey + "_categoryId"); log.info("categoryIds:" + categoryIds); if (categoryIds != null) { Long[] categoryIdsLong = new Long[categoryIds.length]; for (int j = 0; j < categoryIds.length; j++) categoryIdsLong[j] = new Long(categoryIds[j]); categoryAttributesMap.put(idKey, categoryIdsLong); } i++; idKey = ServletActionContext.getRequest().getParameter("categoryAttributeId_" + i); log.info("idKey:" + idKey); } log.info("searchEventId:::::" + this.searchEventId); log.info("andSearch:" + this.andSearch); this.andSearch = ServletActionContext.getRequest().getParameter("andSearch"); log.info("andSearch:" + andSearch); } this.entries = EntryController.getController().getEntryList(this.getInfoGlueRemoteUser(), this.getInfoGlueRemoteUserRoles(), this.getInfoGlueRemoteUserGroups(), searchFirstName, searchLastName, searchEmail, onlyFutureEvents, searchEventId, categoryAttributesMap, Boolean.parseBoolean(andSearch), locationId, dbSession); List<Event> events = new ArrayList<Event>(); String eventName = ""; String emailAddresses = ""; Long entryTypeId = null; Iterator entriesIterator = entries.iterator(); while (entriesIterator.hasNext()) { Entry entry = (Entry) entriesIterator.next(); if (!events.contains(entry.getEvent())) { String name = entry.getEvent().getLocalizedName(this.getLanguageCode(), "sv"); if (name == null) { EventVersion eventVersion = this.getEventVersion(entry.getEvent()); if (eventVersion != null) name = eventVersion.getLocalizedName(this.getLanguageCode(), "sv"); } eventName += (eventName.equals("") ? "" : ", ") + name; events.add(entry.getEvent()); } if (entryTypeId == null) entryTypeId = entry.getEvent().getEntryFormId(); if (emailAddresses.length() != 0) emailAddresses += ";" + entry.getEmail(); else emailAddresses += entry.getEmail(); } HttpSession session = ServletActionContext.getRequest().getSession(); this.searchHashCode = "" + ServletActionContext.getRequest().hashCode(); log.debug("searchHashCode:" + searchHashCode); session.setAttribute("request_" + searchHashCode + "_emailAddresses", emailAddresses); session.setAttribute("request_" + searchHashCode + "_searchFirstName", searchFirstName); session.setAttribute("request_" + searchHashCode + "_searchLastName", searchLastName); session.setAttribute("request_" + searchHashCode + "_searchEmail", searchEmail); session.setAttribute("request_" + searchHashCode + "_onlyFutureEvents", "" + onlyFutureEvents); session.setAttribute("request_" + searchHashCode + "_searchEventId", searchEventId); session.setAttribute("request_" + searchHashCode + "_categoryAttributesMap", categoryAttributesMap); session.setAttribute("request_" + searchHashCode + "_andSearch", andSearch); session.setAttribute("request_" + searchHashCode + "_locationId", locationId); // should we create result files? boolean exportEntryResults = PropertyHelper.getBooleanProperty("exportEntryResults"); if (entries.size() > 0 && exportEntryResults) { Map parameters = new HashMap(); parameters.put("headLine", "Entries found for: " + eventName); EventType eventType = EventTypeController.getController().getEventType(entryTypeId, getSession()); List attributes = ContentTypeDefinitionController.getController() .getContentTypeAttributes(eventType.getSchemaValue()); List attributeNames = new ArrayList(); Iterator attributesIterator = attributes.iterator(); while (attributesIterator.hasNext()) { ContentTypeAttribute attribute = (ContentTypeAttribute) attributesIterator.next(); attributeNames.add(attribute.getName()); } parameters.put("attributes", attributes); parameters.put("attributeNames", attributeNames); HttpServletRequest request = ServletActionContext.getRequest(); EntrySearchResultfilesConstructor results = new EntrySearchResultfilesConstructor(parameters, entries, getTempFilePath(), request.getScheme(), request.getServerName(), request.getServerPort(), resultValues, this, entryTypeId.toString()); searchResultFiles = results.getResults(); } return Action.SUCCESS; } /** * This is the entry point for the search form. */ public String doInput() throws Exception { Session session = getSession(true); initialize(session); return Action.INPUT; } public Set getEntries() { return entries; } public List getEntriesAsList() { List result = new ArrayList(); result.addAll(entries); log.debug("result:" + result.size()); return result; } public List getCategoryList() { return categoryList; } public void setCategoryList(List categoryList) { this.categoryList = categoryList; } public List getLocationList() { return locationList; } public void setLocationList(List locationList) { this.locationList = locationList; } public String[] getCategoryId() { return categoryId; } public void setCategoryId(String[] categoryId) { this.categoryId = categoryId; } public String[] getLocationId() { return locationId; } public void setLocationId(String[] locationId) { this.locationId = locationId; } public Set getEventList() { return eventList; } public Long[] getSearchEventId() { return searchEventId; } public void setSearchEventId(Long[] searchEventId) { this.searchEventId = searchEventId; } public String getSearchEmail() { return searchEmail; } public void setSearchEmail(String searchEmail) { this.searchEmail = searchEmail; } public String getSearchFirstName() { return searchFirstName; } public void setSearchFirstName(String searchFirstName) { this.searchFirstName = searchFirstName; } public String getSearchLastName() { return searchLastName; } public void setSearchLastName(String searchLastName) { this.searchLastName = searchLastName; } /* public String getEmailAddresses() { return emailAddresses; } */ public void setOnlyFutureEvents(boolean onlyFutureEvents) { this.onlyFutureEvents = onlyFutureEvents; } public boolean getOnlyFutureEvents() { return this.onlyFutureEvents; } public List getCategoryAttributes() { return categoryAttributes; } public void setAndSearch(String andSearch) { this.andSearch = andSearch; } /** * @return Returns the searchResultFiles. */ public Map getSearchResultFiles() { return searchResultFiles; } /** * @param searchResultFiles The searchResultFiles to set. */ public void setSearchResultFiles(Map searchResultFiles) { this.searchResultFiles = searchResultFiles; } /** * @return Returns the resultValues. */ public List getResultValues() { return resultValues; } /** * @param resultValues The resultValues to set. */ public void setResultValues(List resultValues) { this.resultValues = resultValues; } public boolean getSingleEventSearch() { if (searchEventId == null || searchEventId.length > 1 || searchEventId[0] == null) return false; else return true; } /* public String getEmailEntryIds() { return emailEntryIds; } public void setEmailEntryIds(String emailEntryIds) { this.emailEntryIds = emailEntryIds; } */ public String getSearchHashCode() { return searchHashCode; } public void setSearchHashCode(String searchHashCode) { this.searchHashCode = searchHashCode; } }