001: /*
002: * Copyright (c) 2001 - 2005 ivata limited.
003: * All rights reserved.
004: * -----------------------------------------------------------------------------
005: * ivata groupware may be redistributed under the GNU General Public
006: * License as published by the Free Software Foundation;
007: * version 2 of the License.
008: *
009: * These programs are free software; you can redistribute them and/or
010: * modify them under the terms of the GNU General Public License
011: * as published by the Free Software Foundation; version 2 of the License.
012: *
013: * These programs are distributed in the hope that they will be useful,
014: * but WITHOUT ANY WARRANTY; without even the implied warranty of
015: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
016: *
017: * See the GNU General Public License in the file LICENSE.txt for more
018: * details.
019: *
020: * If you would like a copy of the GNU General Public License write to
021: *
022: * Free Software Foundation, Inc.
023: * 59 Temple Place - Suite 330
024: * Boston, MA 02111-1307, USA.
025: *
026: *
027: * To arrange commercial support and licensing, contact ivata at
028: * http://www.ivata.com/contact.jsp
029: * -----------------------------------------------------------------------------
030: * $Log: IndexAction.java,v $
031: * Revision 1.4 2005/05/01 08:47:32 colinmacleod
032: * Cosmetic (line length) changes.
033: *
034: * Revision 1.3 2005/04/10 18:47:39 colinmacleod
035: * Changed i tag to em and b tag to strong.
036: *
037: * Revision 1.2 2005/04/09 17:19:46 colinmacleod
038: * Changed copyright text to GPL v2 explicitly.
039: *
040: * Revision 1.1.1.1 2005/03/10 17:51:59 colinmacleod
041: * Restructured ivata op around Hibernate/PicoContainer.
042: * Renamed ivata groupware.
043: *
044: * Revision 1.6 2004/12/31 18:27:44 colinmacleod
045: * Added MaskFactory to constructor of MaskAction.
046: *
047: * Revision 1.5 2004/12/23 21:01:29 colinmacleod
048: * Updated Struts to v1.2.4.
049: * Changed base classes to use ivata masks.
050: *
051: * Revision 1.4 2004/11/12 18:19:15 colinmacleod
052: * Change action and form classes to extend MaskAction, MaskForm respectively.
053: *
054: * Revision 1.3 2004/11/12 15:57:16 colinmacleod
055: * Removed dependencies on SSLEXT.
056: * Moved Persistence classes to ivata masks.
057: *
058: * Revision 1.2 2004/11/03 15:31:51 colinmacleod
059: * Change method interfaces to remove log.
060: *
061: * Revision 1.1 2004/07/13 19:47:29 colinmacleod
062: * Moved project to POJOs from EJBs.
063: * Applied PicoContainer to services layer (replacing session EJBs).
064: * Applied Hibernate to persistence layer (replacing entity EJBs).
065: * -----------------------------------------------------------------------------
066: */
067: package com.ivata.groupware.business.library.struts;
068:
069: import java.lang.reflect.InvocationTargetException;
070: import java.util.Collection;
071: import java.util.HashMap;
072: import java.util.Iterator;
073: import java.util.Map;
074:
075: import javax.servlet.http.HttpServletRequest;
076: import javax.servlet.http.HttpServletResponse;
077: import javax.servlet.http.HttpSession;
078:
079: import org.apache.commons.beanutils.PropertyUtils;
080: import org.apache.struts.action.ActionErrors;
081: import org.apache.struts.action.ActionForm;
082: import org.apache.struts.action.ActionMapping;
083: import org.picocontainer.PicoContainer;
084:
085: import com.ivata.groupware.admin.security.server.SecuritySession;
086: import com.ivata.groupware.admin.setting.Settings;
087: import com.ivata.groupware.business.addressbook.AddressBook;
088: import com.ivata.groupware.business.addressbook.person.group.right.RightConstants;
089: import com.ivata.groupware.business.library.Library;
090: import com.ivata.groupware.business.library.item.LibraryItemDO;
091: import com.ivata.groupware.business.mail.Mail;
092: import com.ivata.mask.MaskFactory;
093: import com.ivata.mask.persistence.PersistenceManager;
094: import com.ivata.mask.util.SystemException;
095: import com.ivata.mask.web.format.HTMLFormatter;
096: import com.ivata.mask.web.struts.MaskAction;
097: import com.ivata.mask.web.struts.MaskAuthenticator;
098:
099: /**
100: * <p>
101: * Retrieves a list of recent library items.
102: * </p>
103: *
104: * @since 2004-06-27
105: * @author Colin MacLeod
106: * <a href='mailto:colin.macleod@ivata.com'>colin.macleod@ivata.com</a>
107: * @version $Revision: 1.4 $
108: */
109: public class IndexAction extends MaskAction {
110: private Library library;
111: private Settings settings;
112:
113: /**
114: * TODO
115: * @param securitySession
116: * @param settings
117: * @param maskFactory This factory is needed to access the masks and groups
118: * of masks.
119: * @param authenticator used to confirm whether or not the
120: * user should be allowed to continue, in the <code>execute</code> method.
121: */
122: public IndexAction(SecuritySession securitySession,
123: Settings settings, MaskFactory maskFactory,
124: MaskAuthenticator authenticator) {
125: super (maskFactory, authenticator);
126: PicoContainer container = securitySession.getContainer();
127: Object object = container
128: .getComponentInstance(PersistenceManager.class);
129: object = container.getComponentInstance(AddressBook.class);
130: object = container.getComponentInstance(Mail.class);
131: object = container.getComponentInstance(Settings.class);
132: object = container.getComponentInstance(HTMLFormatter.class);
133: this .library = (Library) container
134: .getComponentInstance(Library.class);
135: // this.library = library;
136: this .settings = settings;
137: }
138:
139: /**
140: * <p>
141: * Retrieves a list of recent library items.
142: * </p>
143: *
144: * @param mapping current action mapping from <em>Struts</em> config.
145: * @param log valid logging object to write messages to.
146: * @param errors valid errors object to append errors to. If there are
147: * any errors, the action will return to the input.
148: * @param form optional ActionForm bean for this request (if any)
149: * @param request non-HTTP request we are processing
150: * @param response The non-HTTP response we are creating
151: * @param session returned from the <code>request</code> parameter.
152: * @param userName current user name from session. .
153: * @param settings valid, non-null settings from session.
154: * @exception SystemException if there is any problem which
155: * prevents processing. It will result in the webapp being forwarded
156: * to
157: * the standard error page.
158: * @return this method returns the string used to identify the correct
159: * <em>Struts</em> <code>ActionForward</code> which should follow this
160: * page, or <code>null</code> if it should return to the input.
161: *
162: */
163: public String execute(final ActionMapping mapping,
164: final ActionErrors errors, final ActionForm form,
165: final HttpServletRequest request,
166: final HttpServletResponse response,
167: final HttpSession session) throws SystemException {
168: SecuritySession securitySession = (SecuritySession) session
169: .getAttribute("securitySession");
170:
171: try {
172: Integer libraryHome = settings.getIntegerSetting(
173: securitySession, "libraryHome", securitySession
174: .getUser());
175: Integer libraryRecent = settings.getIntegerSetting(
176: securitySession, "libraryRecent", securitySession
177: .getUser());
178: int numberOfItems = libraryHome.intValue();
179: int numberOfRecent = libraryRecent.intValue();
180: int numberToRead = (numberOfRecent > numberOfItems) ? numberOfRecent
181: : numberOfItems;
182:
183: Collection items = library.findRecentItems(securitySession,
184: new Integer(numberToRead),
185: RightConstants.ACCESS_VIEW, null);
186: PropertyUtils.setProperty(form, "items", items);
187:
188: Iterator itemIterator = items.iterator();
189:
190: Map commentsForItem = new HashMap();
191: while (itemIterator.hasNext()) {
192: LibraryItemDO item = (LibraryItemDO) itemIterator
193: .next();
194: int commentCount = library.countCommentsForItem(
195: securitySession, item.getId());
196: commentsForItem.put(item.getId(), new Integer(
197: commentCount));
198: }
199: PropertyUtils.setProperty(form, "commentsForItem",
200: commentsForItem);
201:
202: Collection unacknowledgedComments = library
203: .findUnacknowledgedComments(securitySession,
204: new Integer(10));
205: PropertyUtils.setProperty(form, "unacknowledgedComments",
206: unacknowledgedComments);
207: } catch (IllegalAccessException e) {
208: throw new SystemException(e);
209: } catch (InvocationTargetException e) {
210: throw new SystemException(e);
211: } catch (NoSuchMethodException e) {
212: throw new SystemException(e);
213: }
214:
215: // this list always goes to the same page
216: return null;
217: }
218: }
|