/********************************************************************************** * $URL: https://source.sakaiproject.org/svn/msgcntr/trunk/messageforums-component-impl/src/java/org/sakaiproject/component/app/messageforums/MessageForumsUserManagerImpl.java $ * $Id: MessageForumsUserManagerImpl.java 9227 2006-05-15 15:02:42Z cwen@iupui.edu $ *********************************************************************************** * * Copyright (c) 2003, 2004, 2005, 2006, 2007, 2008 The Sakai Foundation * * Licensed under the Educational Community License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.opensource.org/licenses/ECL-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * **********************************************************************************/ package org.sakaiproject.component.app.messageforums; import java.sql.SQLException; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.hibernate.Hibernate; import org.hibernate.HibernateException; import org.hibernate.Query; import org.hibernate.Session; import org.sakaiproject.api.app.messageforums.MessageForumsUser; import org.sakaiproject.api.app.messageforums.DiscussionForumService; import org.sakaiproject.api.app.messageforums.MessageForumsUserManager; import org.sakaiproject.component.app.messageforums.dao.hibernate.MessageForumsUserImpl; import org.sakaiproject.event.api.EventTrackingService; import org.sakaiproject.id.api.IdManager; import org.sakaiproject.tool.api.Placement; import org.sakaiproject.tool.cover.ToolManager; import org.sakaiproject.user.api.UserDirectoryService; import org.sakaiproject.user.api.UserNotDefinedException; import org.springframework.orm.hibernate3.HibernateCallback; import org.springframework.orm.hibernate3.support.HibernateDaoSupport; public class MessageForumsUserManagerImpl extends HibernateDaoSupport implements MessageForumsUserManager { private static final Log LOG = LogFactory.getLog(MessageForumsUserManagerImpl.class); private static final String QUERY_BY_USER_ID = "findUserByUserId"; /** sakai dependencies */ protected IdManager idManager; protected UserDirectoryService userDirectoryService; private EventTrackingService eventTrackingService; public void init() { LOG.info("init()"); ; } public EventTrackingService getEventTrackingService() { return eventTrackingService; } public void setEventTrackingService(EventTrackingService eventTrackingService) { this.eventTrackingService = eventTrackingService; } /** * @throws UserNotDefinedException * @see org.sakaiproject.api.app.messageforums.MessageForumsUserManager#getForumUser(java.lang.String) */ public MessageForumsUser getForumUser(final String userId) { if (LOG.isDebugEnabled()){ LOG.debug("getForumUser(userId: " + userId + ")"); } if (userId == null){ throw new IllegalArgumentException("Null Argument"); } if (TestUtil.isRunningTests()){ MessageForumsUser newUser = new MessageForumsUserImpl(); newUser.setUuid(getNextUuid()); newUser.setUserId(userId); saveForumUser(newUser); return newUser; } HibernateCallback hcb = new HibernateCallback() { public Object doInHibernate(Session session) throws HibernateException, SQLException { Query q = session.getNamedQuery(QUERY_BY_USER_ID); q.setParameter("userId", userId, Hibernate.STRING); return q.uniqueResult(); } }; MessageForumsUser user = (MessageForumsUser) getHibernateTemplate().execute(hcb); if (user == null){ /** ensure user exists from user provider */ try { userDirectoryService.getUser(userId); } catch (UserNotDefinedException e) { e.printStackTrace(); } MessageForumsUser newUser = new MessageForumsUserImpl(); newUser.setUuid(getNextUuid()); newUser.setUserId(userId); saveForumUser(newUser); // commented out when splitting events between Messages tool and Forums tool // eventTrackingService.post(eventTrackingService.newEvent(DiscussionForumService.EVENT_RESOURCE_ADD, getEventMessage(newUser), false)); return newUser; } else{ return user; } } /** * @see org.sakaiproject.api.app.messageforums.MessageForumsUserManager#saveForumUser(org.sakaiproject.api.app.messageforums.MessageForumsUser) */ public void saveForumUser(MessageForumsUser user) { getHibernateTemplate().saveOrUpdate(user); LOG.debug("saveDiscussionForumTopic executed with topicId: " + user.getUuid()); } private String getNextUuid() { return idManager.createUuid(); } public void setIdManager(IdManager idManager) { this.idManager = idManager; } public void setUserDirectoryService(UserDirectoryService userDirectoryService) { this.userDirectoryService = userDirectoryService; } private String getEventMessage(Object object) { return "/MessageCenter/site/" + getContextId() + "/" + object.toString() ; //return "MessageCenter::" + object.toString(); } private String getContextId() { if (TestUtil.isRunningTests()) { return "test-context"; } Placement placement = ToolManager.getCurrentPlacement(); String presentSiteId = placement.getContext(); return presentSiteId; } }