/*
* $Id: ApplicationsBusinessBean.java,v 1.11 2005/06/16 12:34:42 laddi Exp $
* Created on 7.12.2004
*
* Copyright (C) 2004 Idega Software hf. All Rights Reserved.
*
* This software is the proprietary information of Idega hf.
* Use is subject to license terms.
*/
package se.agura.applications.business;
import java.io.File;
import java.rmi.RemoteException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import javax.ejb.FinderException;
import se.agura.AguraConstants;
import com.idega.block.process.business.CaseBusinessBean;
import com.idega.business.IBOLookup;
import com.idega.business.IBOLookupException;
import com.idega.business.IBORuntimeException;
import com.idega.data.IDOException;
import com.idega.idegaweb.IWBundle;
import com.idega.user.business.GroupBusiness;
import com.idega.user.business.UserBusiness;
import com.idega.user.data.Group;
import com.idega.user.data.User;
/**
* Last modified: $Date: 2005/06/16 12:34:42 $ by $Author: laddi $
*
* @author <a href="mailto:laddi@idega.com">laddi</a>
* @version $Revision: 1.11 $
*/
public class ApplicationsBusinessBean extends CaseBusinessBean implements ApplicationsBusiness {
protected final static String IW_BUNDLE_IDENTIFIER = "se.agura";
private static final String VIEW_ACTIVE = "app_active";
private static final String VIEW_INACTIVE = "app_inactive";
private static String DEFAULT_SMTP_MAILSERVER = "mail.agurait.com";
private static String PROP_SYSTEM_SMTP_MAILSERVER = "messagebox_smtp_mailserver";
private static String PROP_MESSAGEBOX_FROM_ADDRESS = "messagebox_from_mailaddress";
private static String DEFAULT_MESSAGEBOX_FROM_ADDRESS = "no-reply@aguraintra.se";
protected String getBundleIdentifier() {
return IW_BUNDLE_IDENTIFIER;
}
public User getSupervisor(Group parish) {
Collection supervisorGroups = parish.getChildGroups(new String[]{AguraConstants.GROUP_TYPE_SUPERVISOR}, true);
Iterator iter = supervisorGroups.iterator();
while (iter.hasNext()) {
Group group = (Group) iter.next();
try {
Collection users = getUserBusiness().getUsersInGroup(group);
Iterator iterator = users.iterator();
while (iterator.hasNext()) {
return (User) iterator.next();
}
}
catch (RemoteException re) {
throw new IBORuntimeException(re);
}
}
return null;
}
public boolean isSupervisor(User user) {
Group parish = getUserParish(user);
if (parish != null) {
Collection supervisorGroups = parish.getChildGroups(new String[]{AguraConstants.GROUP_TYPE_SUPERVISOR}, true);
Iterator iter = supervisorGroups.iterator();
while (iter.hasNext()) {
Group group = (Group) iter.next();
try {
Collection users = getUserBusiness().getUsersInGroup(group);
Iterator iterator = users.iterator();
while (iterator.hasNext()) {
User groupUser = (User) iterator.next();
if (user.equals(groupUser)) {
return true;
}
}
}
catch (RemoteException re) {
throw new IBORuntimeException(re);
}
}
}
return false;
}
public Collection getNotifiableUserCases(User user) {
try {
String[] statuses = { getCaseStatusGranted().getStatus(), getCaseStatusDenied().getStatus() };
return getCaseHome().findAllCasesForUserByStatuses(user, statuses, -1, -1);
}
catch (FinderException fe) {
return new ArrayList();
}
}
public int getNumberOfNotifiableUserCases(User user) {
try {
String[] statuses = { getCaseStatusGranted().getStatus(), getCaseStatusDenied().getStatus() };
return getCaseHome().getCountOfAllCasesForUserByStatuses(user, statuses);
}
catch (IDOException ie) {
return 0;
}
}
public Collection getUserCases(User user, String viewType, int startingCase, int numberOfCases) {
try {
String[] statuses = null;
if (viewType.equals(getViewTypeActive())) {
statuses = getActiveUserCaseStatuses();
}
else {
statuses = getInactiveUserCaseStatuses();
}
return getCaseHome().findAllCasesForUserByStatuses(user, statuses, startingCase, numberOfCases);
}
catch (FinderException fe) {
return new ArrayList();
}
}
public int getNumberOfUserCases(User user, String viewType) {
try {
String[] statuses = null;
if (viewType.equals(getViewTypeActive())) {
statuses = getActiveUserCaseStatuses();
}
else {
statuses = getInactiveUserCaseStatuses();
}
return getCaseHome().getCountOfAllCasesForUserByStatuses(user, statuses);
}
catch (IDOException fe) {
return 0;
}
}
public Collection getGroupCases(Collection groups, String viewType, int startingCase, int numberOfCases) {
try {
String[] statuses = null;
if (viewType.equals(getViewTypeActive())) {
statuses = getActiveGroupCaseStatuses();
}
else {
statuses = getInactiveGroupCaseStatuses();
}
return getCaseHome().findAllCasesForGroupsByStatuses(groups, statuses, startingCase, numberOfCases);
}
catch (FinderException fe) {
return new ArrayList();
}
}
public int getNumberOfGroupCases(Collection groups, String viewType) {
try {
String[] statuses = null;
if (viewType.equals(getViewTypeActive())) {
statuses = getActiveGroupCaseStatuses();
}
else {
statuses = getInactiveGroupCaseStatuses();
}
return getCaseHome().getCountOfAllCasesForGroupsByStatuses(groups, statuses);
}
catch (IDOException fe) {
return 0;
}
}
private String[] getActiveUserCaseStatuses() {
String[] statuses = { getCaseStatusGranted().getStatus(), getCaseStatusOpen().getStatus(), getCaseStatusDenied().getStatus(), getCaseStatusMoved().getStatus(), getCaseStatusReady().getStatus() };
return statuses;
}
private String[] getInactiveUserCaseStatuses() {
String[] statuses = { getCaseStatusInactive().getStatus() };
return statuses;
}
private String[] getActiveGroupCaseStatuses() {
String[] statuses = { getCaseStatusOpen().getStatus(), getCaseStatusMoved().getStatus() };
return statuses;
}
private String[] getInactiveGroupCaseStatuses() {
String[] statuses = { getCaseStatusDenied().getStatus(), getCaseStatusGranted().getStatus(), getCaseStatusInactive().getStatus(), getCaseStatusReady().getStatus() };
return statuses;
}
public String getViewTypeActive() {
return VIEW_ACTIVE;
}
public String getViewTypeInactive() {
return VIEW_INACTIVE;
}
public Group getUserParish(User user) {
try {
String[] groupTypes = { AguraConstants.GROUP_TYPE_PARISH, AguraConstants.GROUP_TYPE_PARISH_OFFICE };
Collection groups = getGroupBusiness().getParentGroupsRecursive(user,groupTypes,true);
if (groups != null) {
Iterator iter = groups.iterator();
while (iter.hasNext()) {
return (Group) iter.next();
}
}
}
catch (RemoteException re) {
log(re);
}
return user.getPrimaryGroup();
}
public Collection getParishes() {
try {
String[] types = { AguraConstants.GROUP_TYPE_PARISH, AguraConstants.GROUP_TYPE_PARISH_OFFICE };
return getGroupBusiness().getGroups(types,true);
}
catch (Exception e) {
throw new IBORuntimeException(e);
}
}
protected UserBusiness getUserBusiness() {
try {
return (UserBusiness) IBOLookup.getServiceInstance(getIWApplicationContext(), UserBusiness.class);
}
catch (IBOLookupException ible) {
throw new IBORuntimeException(ible);
}
}
protected GroupBusiness getGroupBusiness() {
try {
return (GroupBusiness) IBOLookup.getServiceInstance(getIWApplicationContext(), GroupBusiness.class);
}
catch (IBOLookupException ible) {
throw new IBORuntimeException(ible);
}
}
protected void sendMessage(String email, String cc, String subject, String body, File attachment) {
String receiver = email.trim();
String mailServer = DEFAULT_SMTP_MAILSERVER;
String fromAddress = DEFAULT_MESSAGEBOX_FROM_ADDRESS;
try {
IWBundle iwb = getIWApplicationContext().getIWMainApplication().getBundle(IW_BUNDLE_IDENTIFIER);
mailServer = iwb.getProperty(PROP_SYSTEM_SMTP_MAILSERVER, DEFAULT_SMTP_MAILSERVER);
fromAddress = iwb.getProperty(PROP_MESSAGEBOX_FROM_ADDRESS, DEFAULT_MESSAGEBOX_FROM_ADDRESS);
}
catch (Exception e) {
System.err.println("MessageBusinessBean: Error getting mail property from bundle");
e.printStackTrace();
}
try {
if (attachment == null) {
com.idega.util.SendMail.send(fromAddress, receiver, cc != null ? cc : "", "", mailServer, subject, body);
}
else {
com.idega.util.SendMail.send(fromAddress, receiver, cc != null ? cc : "", "", mailServer, subject, body, attachment);
}
}
catch (javax.mail.MessagingException me) {
System.err.println("Error sending mail to address: " + email);
me.printStackTrace(System.err);
}
}
}