package se.cubecon.bun24.viewpoint.business; import java.rmi.RemoteException; import java.util.HashMap; import java.util.Map; import javax.ejb.CreateException; import javax.ejb.FinderException; import se.cubecon.bun24.viewpoint.data.RoadResponsible; import se.cubecon.bun24.viewpoint.data.RoadResponsibleHome; import se.cubecon.bun24.viewpoint.data.SubCategory; import se.cubecon.bun24.viewpoint.data.SubCategoryHome; import se.cubecon.bun24.viewpoint.data.TopCategory; import se.cubecon.bun24.viewpoint.data.TopCategoryHome; import se.cubecon.bun24.viewpoint.data.Viewpoint; import se.cubecon.bun24.viewpoint.data.ViewpointBMPBean; import se.cubecon.bun24.viewpoint.data.ViewpointHome; import se.cubecon.bun24.viewpoint.presentation.ViewpointForm; import se.idega.idegaweb.commune.message.business.CommuneMessageBusiness; import com.idega.block.process.business.CaseBusinessBean; import com.idega.block.process.data.CaseStatus; import com.idega.block.process.data.CaseStatusHome; import com.idega.block.process.message.data.Message; import com.idega.business.IBOLookup; import com.idega.data.IDOLookup; import com.idega.data.IDOLookupException; import com.idega.presentation.text.Link; import com.idega.user.data.Group; import com.idega.user.data.User; /** * Last modified: $Date: 2005/10/13 18:36:12 $ by $Author: laddi $ * * @author <a href="http://www.staffannoteberg.com">Staffan N�teberg</a> * @version $Revision: 1.17 $ */ public class ViewpointBusinessBean extends CaseBusinessBean implements ViewpointBusiness { public final static String ANSWER_KEY = "viewpoint.answer"; public final static String ANSWER_DEFAULT = "Svar till medborgare"; public final static String APPLIES_KEY = "viewpoint.applies"; public final static String APPLIES_DEFAULT = "Avser"; public final static String ORIGINALVIEWPOINT_KEY = "viewpoint.originalViewpoint"; public final static String ORIGINALVIEWPOINT_DEFAULT = "Ursprunglig synpunkt"; private final static String CONFIRMSUBJECT_KEY = "viewpoint.confirmEnterViewpointSubject"; private final static String CONFIRMSUBJECT_DEFAULT = "Tack f�r din synpunkt"; public void createViewpoint (final User user, final String subject, final String body, final String category, final int handlerGroupId, final int roadResponsibleId) throws CreateException, RemoteException { final Viewpoint viewpoint = getViewpointHome ().create (); viewpoint.setUser (user); viewpoint.setSubject (subject); viewpoint.setMessage (body); viewpoint.setCategory (category); viewpoint.setHandlerGroupId (handlerGroupId); if (roadResponsibleId >= 0) { viewpoint.setRoadResponsibleId (roadResponsibleId); } viewpoint.store(); final String messageBody = getLocalizedString (CONFIRMENTERVIEWPOINT_KEY, CONFIRMENTERVIEWPOINT_DEFAULT) + "\n\n-------------------------------------------------------" + "-----\n\n" + category + "\n\n" + subject + "\n\n" + body + "\n"; final String messageSubject = getLocalizedString (CONFIRMSUBJECT_KEY, CONFIRMSUBJECT_DEFAULT); final CommuneMessageBusiness messageBusiness = getMessageBusiness (); final Message message = messageBusiness.createUserMessage (viewpoint.getUserId ().intValue (), messageSubject, messageBody); message.setParentCase(viewpoint); message.store(); } public void createViewpoint (final String userName, final String userEmail, final String subject, final String body, final String category, final int handlerGroupId, final int roadResponsibleId) throws CreateException, RemoteException { final Viewpoint viewpoint = getViewpointHome ().create (); viewpoint.setUserName (userName); viewpoint.setUserEmail (userEmail); viewpoint.setSubject (subject); viewpoint.setMessage (body); viewpoint.setCategory (category); viewpoint.setHandlerGroupId (handlerGroupId); if (roadResponsibleId >= 0) { viewpoint.setRoadResponsibleId (roadResponsibleId); } viewpoint.store(); final String messageBody = getLocalizedString (CONFIRMENTERVIEWPOINT_KEY, CONFIRMENTERVIEWPOINT_DEFAULT) + "\n\n-------------------------------------------------------" + "-----\n\n" + category + "\n\n" + subject + "\n\n" + body + "\n"; final String messageSubject = getLocalizedString (CONFIRMSUBJECT_KEY, CONFIRMSUBJECT_DEFAULT); final CommuneMessageBusiness messageBusiness = getMessageBusiness (); messageBusiness.sendMessage (userEmail, messageSubject, messageBody); } public Viewpoint [] findUnhandledViewpointsInGroups (final Group [] groups) throws RemoteException, FinderException { return getViewpointHome ().findUnhandledViewpointsInGroups (groups); } public Viewpoint findViewpoint (final int viewpointID) throws RemoteException, FinderException { return getViewpointHome ().findByPrimaryKey (new Integer (viewpointID)); } public void registerHandler (final int viewpointId, final User handler) throws RemoteException, FinderException { final Viewpoint viewpoint = findViewpoint (viewpointId); viewpoint.setHandler (handler); viewpoint.store(); } public void registerHandler (final int viewpointId, final Group handler) throws RemoteException, FinderException { final Viewpoint viewpoint = findViewpoint (viewpointId); final Integer id = (Integer) handler.getPrimaryKey (); viewpoint.setHandlerGroupId (id.intValue ()); viewpoint.unsetHandler (); viewpoint.store(); } public void answerAndDeregisterViewpoint (final int viewpointId, final String answer) throws RemoteException, FinderException, CreateException { // 1. find viewpoint final Viewpoint viewpoint = findViewpoint (viewpointId); // 2. send answer message to citizen final String categoryLine = getLocalizedString (APPLIES_KEY, APPLIES_DEFAULT).toUpperCase () + ": " + viewpoint.getCategory (); final String answerLine = getLocalizedString (ANSWER_KEY, ANSWER_DEFAULT).toUpperCase () + ": " + answer; final String questionLine = "---- " + getLocalizedString (ORIGINALVIEWPOINT_KEY, ORIGINALVIEWPOINT_DEFAULT).toUpperCase () + " ----\n\n" + viewpoint.getMessage (); final String messageBody = categoryLine + "\n\n" + answerLine + "\n\n" + (questionLine.length () > 400 ? (questionLine.substring (0, 397) + "...") : questionLine) + "\n"; final CommuneMessageBusiness messageBusiness = getMessageBusiness (); final Integer userId = viewpoint.getUserId (); final String email = viewpoint.getUserEmail (); final String subject = "Re: " + viewpoint.getSubject (); if (null != userId) { final Message message = messageBusiness.createUserMessage (userId.intValue (), subject, messageBody); message.setParentCase(viewpoint); message.store(); } else if (null != email) { messageBusiness.sendMessage (email, subject, messageBody); } else { throw new RemoteException ("No user id and no email from user" + " in viewpoint " + viewpointId); } // 3. save answer and set 'closed' status on case viewpoint.setAnswer (answer); final CaseStatusHome caseStatusHome = (CaseStatusHome) IDOLookup.getHome (CaseStatus.class); final CaseStatus statusAnswered = caseStatusHome.findByPrimaryKey (ViewpointBMPBean.STATUSKEY_ANSWERED); viewpoint.setCaseStatus (statusAnswered); viewpoint.store (); } private ViewpointHome getViewpointHome () throws RemoteException { return (ViewpointHome) IDOLookup.getHome (Viewpoint.class); } private CommuneMessageBusiness getMessageBusiness () throws RemoteException { return (CommuneMessageBusiness) IBOLookup.getServiceInstance (getIWApplicationContext(), CommuneMessageBusiness.class); } public TopCategory [] findAllTopCategories () throws RemoteException, FinderException { final TopCategoryHome topCategoryHome = (TopCategoryHome) IDOLookup.getHome (TopCategory.class); return topCategoryHome.findAll (); } public SubCategory [] findSubCategories (final int topCategoryId) throws RemoteException, FinderException { final SubCategoryHome subCategoryHome = (SubCategoryHome) IDOLookup.getHome (SubCategory.class); return subCategoryHome.findSubCategories (topCategoryId); } public Group [] findAllHandlingGroups () throws RemoteException, FinderException { final SubCategoryHome subCategoryHome = (SubCategoryHome) IDOLookup.getHome (SubCategory.class); final SubCategory [] categories = subCategoryHome.findAllSubCategories (); final Map groups = new HashMap (); for (int i = 0; i < categories.length; i++) { final Group group = categories [i].getHandlerGroup (); groups.put (group.getPrimaryKey (), group); } return (Group []) groups.values ().toArray (new Group [groups.size ()]); } public SubCategory findSubCategory (final int subCategoryID) throws RemoteException, FinderException { final SubCategoryHome home = (SubCategoryHome) IDOLookup.getHome (SubCategory.class); return home.findByPrimaryKey (new Integer (subCategoryID)); } public SubCategory findSubCategory(String name) throws RemoteException { try { final SubCategoryHome subCategoryHome = (SubCategoryHome) IDOLookup.getHome (SubCategory.class); return subCategoryHome.findSubCategoryByName(name); } catch (FinderException fe) { return null; } } public RoadResponsible findRoadResponsible (final int id) throws FinderException { try { final RoadResponsibleHome roadResponsibleHome = (RoadResponsibleHome) IDOLookup.getHome (RoadResponsible.class); return roadResponsibleHome.findByPrimaryKey (new Integer (id)); } catch (final IDOLookupException e) { throw new FinderException (e.getMessage ()); } } public RoadResponsible [] findAllRoadResponsible () throws FinderException { try { final RoadResponsibleHome roadResponsibleHome = (RoadResponsibleHome) IDOLookup.getHome (RoadResponsible.class); return roadResponsibleHome.findAll (); } catch (final IDOLookupException e) { throw new FinderException (e.getMessage ()); } } public Link getLinkToPageForViewpoint(int pageID, Viewpoint viewpoint) { String primaryKey = viewpoint.getPrimaryKey().toString(); Link viewpointLink = new Link(primaryKey); viewpointLink.setPage(pageID); viewpointLink.addParameter(ViewpointForm.PARAM_ACTION, ViewpointForm.SHOWVIEWPOINT_ACTION + ""); viewpointLink.addParameter(ViewpointForm.PARAM_VIEWPOINT_ID, primaryKey); return viewpointLink; } public String getCaseCodeKeyForViewpoint() throws RemoteException { return ViewpointBMPBean.CASE_CODE_KEY; } }