/*
* Created on 2003-aug-19
*
* To change the template for this generated file go to
* Window>Preferences>Java>Code Generation>Code and Comments
*/
package se.idega.idegaweb.commune.care.resource.business;
import java.rmi.RemoteException;
import java.sql.Timestamp;
import java.util.Collection;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Vector;
import javax.ejb.CreateException;
import javax.ejb.FinderException;
import javax.ejb.RemoveException;
import javax.transaction.SystemException;
import javax.transaction.UserTransaction;
import se.idega.idegaweb.commune.care.resource.data.Resource;
import se.idega.idegaweb.commune.care.resource.data.ResourceClassMember;
import se.idega.idegaweb.commune.care.resource.data.ResourceClassMemberHome;
import se.idega.idegaweb.commune.care.resource.data.ResourceHome;
import se.idega.idegaweb.commune.care.resource.data.ResourcePermission;
import se.idega.idegaweb.commune.care.resource.data.ResourcePermissionHome;
import com.idega.block.school.business.SchoolBusiness;
import com.idega.block.school.data.SchoolCategory;
import com.idega.block.school.data.SchoolCategoryHome;
import com.idega.block.school.data.SchoolClassMember;
import com.idega.block.school.data.SchoolClassMemberHome;
import com.idega.block.school.data.SchoolType;
import com.idega.block.school.data.SchoolTypeHome;
import com.idega.block.school.data.SchoolYear;
import com.idega.block.school.data.SchoolYearHome;
import com.idega.business.IBOLookup;
import com.idega.business.IBOServiceBean;
import com.idega.data.IDOException;
import com.idega.data.IDOLookup;
import com.idega.data.IDOLookupException;
import com.idega.data.IDORelationshipException;
import com.idega.data.IDORemoveRelationshipException;
import com.idega.presentation.IWContext;
import com.idega.user.business.UserBusiness;
import com.idega.user.data.User;
import com.idega.util.IWTimestamp;
import com.idega.util.text.Name;
/**
* @author G�ran Borgman
*
* This Businessbean contains methods for Resourcehandling(resource in the School sense of the word).
*/
public class ResourceBusinessBean extends IBOServiceBean implements ResourceBusiness {
private static final String KP = "ResourceBusiness.";
private static final String KEY_ERR_MSG_COULD_NOT_SAVE_RSC =
KP + "err_msg.could_not_save_resource";
/**
* Returns a Collection with all instances of the Class SchoolType from the DB.
*/
public Collection findAllSchoolTypes() {
try {
SchoolTypeHome shome = (SchoolTypeHome) IDOLookup.getHome(SchoolType.class);
return shome.findAllSchoolTypes();
}
catch (Exception ex) {
ex.printStackTrace();
return com.idega.util.ListUtil.getEmptyList();
}
}
/**
* Returns a Collection with all instances of the Class SchoolYear from the DB.
*/
public Collection findAllSchoolYears() {
try {
SchoolYearHome shome = (SchoolYearHome) IDOLookup.getHome(SchoolYear.class);
return shome.findAllSchoolYears();
}
catch (Exception ex) {
ex.printStackTrace();
return com.idega.util.ListUtil.getEmptyList();
}
}
/**
* Returns a Collection with all instances of the Class accounting.Resource from the DB.
*/
public Collection findAllResources() {
try {
ResourceHome rHome = (ResourceHome) IDOLookup.getHome(Resource.class);
return rHome.findAllResources();
} catch (Exception e) {
e.printStackTrace();
return com.idega.util.ListUtil.getEmptyList();
}
}
/**
* Returns one instance of the Class Resource from the DB, with param pk as primary key.
* @param pk An Integer object with the value of the primary key
*/
public Resource getResourceByPrimaryKey(Integer pk) {
try {
ResourceHome rHome = (ResourceHome) IDOLookup.getHome(Resource.class);
return rHome.findByPrimaryKey(pk);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
/**
* Returns one instance of the Class Resource from the DB, with the unique name of param name
* @param name The name of the requested Resource
*/
public Resource getResourceByName(String name) {
Resource rsc = null;
try {
ResourceHome rHome = (ResourceHome) IDOLookup.getHome(Resource.class);
rsc = rHome.findResourceByName(name);
} catch (FinderException e) {
e.printStackTrace();
} catch (IDOLookupException lue) {
lue.printStackTrace();
}
return rsc;
}
/**
* Returns a Collection of Resources that providers are allowed to assign to a child
*/
public Collection getAssignRightResourcesForGroup(Integer grpId) {
Collection rscColl = null;
try {
ResourceHome rHome = (ResourceHome) IDOLookup.getHome(Resource.class);
rscColl = rHome.findAssignRightResourcesByGrpId(grpId);
} catch (Exception e) {
e.printStackTrace();
}
return rscColl;
}
/**
* Returns a Collection of Resources that providers are allowed to view
*/
public Collection getViewRightResourcesForGroup(Integer grpId) {
Collection rscColl = null;
try {
ResourceHome rHome = (ResourceHome) IDOLookup.getHome(Resource.class);
rscColl = rHome.findViewRightResourcesByGrpId(grpId);
} catch (Exception e) {
e.printStackTrace();
}
return rscColl;
}
public boolean hasResources(int schoolClassMemberID, String resourceIDs) {
try {
ResourceClassMemberHome mHome = (ResourceClassMemberHome) getIDOHome(ResourceClassMember.class);
if (mHome.getCountOfResources(schoolClassMemberID, resourceIDs) > 0) {
return true;
}
}
catch (IDOException ie) {
log(ie);
}
catch (RemoteException re) {
log(re);
}
return false;
}
/**
* Returns a Collection of Resources related to a placements school year and type, and with
* rights to assign the Resource for the given group id. If group id == -7 all resources are shown.
* This is used when administered by central administration with rights to see all resources
*
* @param grpID The Group id
* @param clsMemberID The SchoolClassMember(placement) id
*/
public Collection getAssignableResourcesForPlacement(Integer grpID, Integer clsMemberID) {
Collection possibleRscs = null;
Collection validRscs = new Vector();
SchoolClassMember mbr;
//SchoolClass schClass;
int clsYearID = -1;
int clsTypeID = -1;
if (grpID.intValue() == -7)
// grpID is -7, means used by central admin
possibleRscs = findAllResources();
else
possibleRscs = getAssignRightResourcesForGroup(grpID);
try {
mbr = getSchoolClassMember(clsMemberID);
//schClass = mbr.getSchoolClass();
if (mbr != null) {
clsYearID = mbr.getSchoolYearId();
clsTypeID = mbr.getSchoolTypeId();
}
// Loop resources and check if the year and type match the SchoolClassMember(placement)
for (Iterator iter = possibleRscs.iterator(); iter.hasNext();) {
boolean hasYear = false;
boolean hasType = false;
Resource theRsc = (Resource) iter.next();
// if the group/class has no schoolyear, don't match year, just set hasYear to true
if (clsYearID != -1) {
Collection rscYears = theRsc.findRelatedSchoolYears();
// Check if the resource has the placement's/schoolClass'es school year
for (Iterator iterator = rscYears.iterator(); iterator.hasNext();) {
SchoolYear theYear = (SchoolYear) iterator.next();
Integer PK = (Integer) theYear.getPrimaryKey();
if (clsYearID == PK.intValue()) {
hasYear = true;
break;
}
}
} else {
hasYear = true;
}
Collection rscTypes = theRsc.findRelatedSchoolTypes();
// Check if the resource has the placement's/schoolClass'es school year
for (Iterator iterator = rscTypes.iterator(); iterator.hasNext();) {
SchoolType theType = (SchoolType) iterator.next();
Integer PK = (Integer) theType.getPrimaryKey();
if (clsTypeID == PK.intValue()) {
hasType = true;
break;
}
}
// if the Resource has the year and type. Add to validRscs
if (hasYear && hasType) {
validRscs.add(theRsc);
}
}
} catch (Exception e) {
e.printStackTrace();
}
return validRscs;
}
/**
* Returns a Collection of Resources related to the given school year and type.
* @param yearID The school year id
* @param typeID The school type id
*/
public Collection getAssignableResourcesByYearAndType(String yearIdStr, String typeIdStr) {
Collection possibleRscs = findAllResources();
Collection validRscs = new Vector();
try {
// Loop resources and check if the year and type match
for (Iterator iter = possibleRscs.iterator(); iter.hasNext();) {
boolean hasYear = false;
boolean hasType = false;
Resource theRsc = (Resource) iter.next();
// if the group/class has no schoolyear, don't match year, just set hasYear to true
if (yearIdStr != null) {
int yearID = Integer.parseInt(yearIdStr);
Collection rscYears = theRsc.findRelatedSchoolYears();
// Check if the resource has the placement's/schoolClass'es school year
for (Iterator iterator = rscYears.iterator(); iterator.hasNext();) {
SchoolYear theYear = (SchoolYear) iterator.next();
Integer PK = (Integer) theYear.getPrimaryKey();
if (yearID == PK.intValue()) {
hasYear = true;
break;
}
}
}
if (typeIdStr != null) {
int typeID = Integer.parseInt(typeIdStr);
Collection rscTypes = theRsc.findRelatedSchoolTypes();
// Check if the resource has the placement's/schoolClass'es school year
for (Iterator iterator = rscTypes.iterator(); iterator.hasNext();) {
SchoolType theType = (SchoolType) iterator.next();
Integer PK = (Integer) theType.getPrimaryKey();
if (typeID == PK.intValue()) {
hasType = true;
break;
}
}
}
// if the Resource has the year and type. Add to validRscs
if (hasYear && hasType) {
validRscs.add(theRsc);
}
}
} catch (Exception e) {
e.printStackTrace();
}
return validRscs;
}
public SchoolClassMember getSchoolClassMember(Integer memberID) {
SchoolClassMember mbr = null;
try {
SchoolClassMemberHome mHome = (SchoolClassMemberHome) IDOLookup.getHome(SchoolClassMember.class);
mbr = mHome.findByPrimaryKey(memberID);
} catch (Exception e) {
e.printStackTrace();
}
return mbr;
}
public SchoolBusiness getSchoolBusiness(IWContext iwc) throws RemoteException {
return (SchoolBusiness) IBOLookup.getServiceInstance(iwc, SchoolBusiness.class);
}
/**
* Gets a ResourcePermission by ResourceId and GroupId from db.
* @param rscId The requested ResourcePermissions related Resourceid.
* @param grpId The requested ResourcePermissions related Groupid.
*/
public ResourcePermission getRscPermByRscAndGrpId(Integer rscId, Integer grpId) {
ResourcePermission rscPerm = null;
try {
ResourcePermissionHome rpHome =
(ResourcePermissionHome) this.getIDOHome(ResourcePermission.class);
Collection rpColl = rpHome.findAllRscPermByRscIdAndGrpId(rscId, grpId);
int row = 0;
for (Iterator iter = rpColl.iterator(); iter.hasNext();) {
ResourcePermission tmpRscPerm = (ResourcePermission) iter.next();
row++;
if(row == 1) {
rscPerm = tmpRscPerm;
} else {
// delete duplicate entity/row from db
tmpRscPerm.remove();
}
}
} catch (Exception e) {
e.printStackTrace();
}
return rscPerm;
}
public Collection getResourcePlacementsByMemberId(Integer memberId) {
Collection mColl = null;
try {
ResourceClassMemberHome mHome = (ResourceClassMemberHome) getIDOHome(ResourceClassMember.class);
mColl = mHome.findAllByClassMemberId(memberId);
} catch (Exception e) {
e.printStackTrace();
}
return mColl;
}
public Collection getResourcePlacementsByMbrIdOrderByRscName(Integer memberId) {
Collection mColl = null;
try {
ResourceClassMemberHome mHome = (ResourceClassMemberHome) getIDOHome(ResourceClassMember.class);
mColl = mHome.findAllByClsMbrIdOrderByRscName(memberId);
} catch (Exception e) {
e.printStackTrace();
}
return mColl;
}
public int countResourcePlacementsByRscIDAndMemberID(Integer rID, Integer mID) {
int pSum = -1;
try {
ResourceClassMemberHome mHome = (ResourceClassMemberHome) getIDOHome(ResourceClassMember.class);
pSum = mHome.countByRscIdAndMemberId(rID, mID);
} catch (Exception e){
e.printStackTrace();
}
return pSum;
}
public void saveResource(boolean isSavingExisting, String rscName, int[] typeInts, int[] yearInts,
boolean permitAssign, boolean permitView, int grpId, int rscId)
throws ResourceException {
UserTransaction trans = getSessionContext().getUserTransaction();
try {
trans.begin(); // Start transaction
// Handle Resource
Resource oldRsc = null;
if (isSavingExisting) {
// Remove old from relationships from db.
oldRsc = getResourceByPrimaryKey(new Integer(rscId));
try {
oldRsc.removeAllSchoolTypes();
oldRsc.removeAllSchoolYears();
} catch (IDORemoveRelationshipException e) {
e.printStackTrace();
}
// Update resource fields
oldRsc.setResourceName(rscName);
oldRsc.addSchoolTypes(typeInts);
oldRsc.addSchoolYears(yearInts);
oldRsc.store();
} else {
// new rsc
createResource(rscName, typeInts, yearInts);
}
// Handle ResourcePermission
Integer rscIdInteger = (Integer) getResourceByName(rscName).getPrimaryKey();
deletePermissionsForResource(rscIdInteger);
if (permitAssign || permitView) {
createResourcePermission(rscIdInteger.intValue(), grpId, permitAssign, permitView);
}
trans.commit(); // Commit transaction
} catch (Exception e) {
try {
trans.rollback(); // Rollback transaction
} catch (IllegalStateException e1) {
e1.printStackTrace();
} catch (SecurityException e1) {
e1.printStackTrace();
} catch (SystemException e1) {
e1.printStackTrace();
}
throw new ResourceException(KEY_ERR_MSG_COULD_NOT_SAVE_RSC,
"Could not save resource. Check that resource name is unique.");
}
}
/**
* Saves a Resource to DB
* @param name the name of the Resource
* @param typeInts intArray of related SchoolTypes
* @param yearInts intArray of related SchoolYears
*/
public void createResource(String name, int[] typeInts, int[] yearInts) throws RemoteException, CreateException {
ResourceHome rscHome = (ResourceHome) getIDOHome(Resource.class);
Resource bmp = rscHome.create();
bmp.setResourceName(name);
bmp.store();
bmp.addSchoolTypes(typeInts);
bmp.addSchoolYears(yearInts);
}
/**
* Saves a ResourcePermission to DB
* @param rscId The requested ResourcePermissions related Resourceid.
* @param grpId The requested ResourcePermissions related Groupid.
* @param canAssign If this group has permission to assign related Resource to a childs Placement
* @param canView If this group has permission to view related Resource
*/
public void createResourcePermission(int rscId, int grpId, boolean permitAssign, boolean permitView)
throws RemoteException, CreateException {
ResourcePermissionHome rscPermHome = (ResourcePermissionHome) getIDOHome(ResourcePermission.class);
ResourcePermission permBmp = rscPermHome.create();
permBmp.setPermitAssignResource(permitAssign);
permBmp.setPermitViewResource(permitView);
permBmp.setResourceFK(rscId);
permBmp.setGroupFK(grpId);
permBmp.store();
}
/**
* Creates and stores a new ResourcePlacement to DB. No indata checks.
* @param rscId The ResourceID.
* @param grpId The SchoolPlacements SchoolClassMemberID.
* @param startDate Startdate of this ResourcePlacement
* @param endDate Enddate of this ResourcePlacement
*/
public ResourceClassMember createResourcePlacement(int rscId, int memberId, String startDateStr) throws RemoteException {
return createResourcePlacement(rscId, memberId, startDateStr, -1);
}
/**
* Creates and stores a new ResourcePlacement to DB. No indata checks.
* @param rscId The ResourceID.
* @param grpId The SchoolPlacements SchoolClassMemberID.
* @param startDate Startdate of this ResourcePlacement
* @param endDate Enddate of this ResourcePlacement
* @param registratorID UserID of current user
*/
public ResourceClassMember createResourcePlacement(int rscId, int memberId, String startDateStr, int registratorID) throws RemoteException {
ResourceClassMemberHome rscClMbrHome = (ResourceClassMemberHome) getIDOHome(ResourceClassMember.class);
Date startDate = null;
ResourceClassMember rscMemberBmp = null;
if (!startDateStr.equals("")) {
IWTimestamp start= new IWTimestamp(startDateStr);
startDate = start.getDate();
}
// Get created date - rightNow
java.util.Date rightNowDate = new java.util.Date();
java.sql.Date rightNow = new java.sql.Date(rightNowDate.getTime());
try {
rscMemberBmp = rscClMbrHome.create();
rscMemberBmp.setResourceFK(rscId);
rscMemberBmp.setMemberFK(memberId);
rscMemberBmp.setStartDate(startDate);
if (registratorID != -1)
rscMemberBmp.setRegistratorId(registratorID);
rscMemberBmp.setCreatedDate(rightNow);
rscMemberBmp.store();
}
catch (javax.ejb.CreateException ce) {
throw new java.rmi.RemoteException(ce.getMessage());
}
return rscMemberBmp;
}
/**
* Saves a ResourcePlacement to DB. Has indata checks and throws indata exceptions. Used primarily
* by SchoolAdminOverview.
* @param rscId The ResourceID.
* @param grpId The SchoolPlacements SchoolClassMemberID.
* @param startDate Startdate of this ResourcePlacement
* @param endDate Enddate of this ResourcePlacement
*/
public void createResourcePlacement(int rscId, int memberId, String startDateStr, String endDateStr, int registratorID,String teacherId) throws RemoteException, DateException, ResourceException, ClassMemberException {
createResourcePlacement(rscId, memberId, startDateStr, endDateStr, registratorID, true,teacherId);
}
/**
* Saves a ResourcePlacement to DB. Has boolean to set if we want to check past time of start date.
* Has indata checks and throws indata exceptions. Used primarily
* by SchoolAdminOverview.
* @param rscId The ResourceID.
* @param grpId The SchoolPlacements SchoolClassMemberID.
* @param startDate Startdate of this ResourcePlacement
* @param endDate Enddate of this ResourcePlacement
* @param isCentralAdmin check validity of start date if user is a provider
*/
public void createResourcePlacement(int rscId, int schClsMbrID, String startDateStr, String endDateStr, int registratorID, boolean isCentralAdmin,String teacherId) throws RemoteException, DateException, ResourceException, ClassMemberException {
ResourceClassMemberHome rscClMbrHome = (ResourceClassMemberHome) getIDOHome(ResourceClassMember.class);
try {
IWTimestamp today = IWTimestamp.RightNow();
today.setAsDate();
Date startDate = null;
Date endDate = null;
IWTimestamp start = null;
IWTimestamp end = null;
// Check valid resource and placement
if (rscId == -1) {
throw new ResourceException("cacc.rsc_placement.no_resource_chosen","You must chose a resource");
} else if (schClsMbrID == -1){
throw new ClassMemberException("cacc.rsc_placement.no_member_placement_id", "No group placement found");
} else {
int existing = countResourcePlacementsByRscIDAndMemberID(new Integer(rscId), new Integer(schClsMbrID));
if (existing > 0) {
throw new ResourceException("cacc.rsc_placement.this_resource_already_placed", "This placement already have this resource");
}
}
// Get dates from the school placement
IWTimestamp removed = null;
IWTimestamp registered = null;
SchoolClassMember schClsMbr = getSchoolClassMember(new Integer(schClsMbrID));
if (schClsMbr != null) {
Timestamp remTS = schClsMbr.getRemovedDate();
if (remTS != null)
removed = new IWTimestamp(remTS.getTime());
if (removed != null)
removed.setAsDate();
Timestamp regTS = schClsMbr.getRegisterDate();
if (regTS != null)
registered = new IWTimestamp(regTS);
if (registered != null)
registered.setAsDate();
}
// Check dates
if (!startDateStr.equals("")) {
start= new IWTimestamp(startDateStr);
start.setAsDate();
if (!isCentralAdmin && start.isEarlierThan(today)) {
throw new DateException("cacc.rsc_placement.to_early_start_date", "Startdate can't be earlier than today");
} else {
startDate = start.getDate();
}
} else {
throw new DateException("cacc.rsc_placement.must_enter_start_date", "You must chose a startdate");
}
if (!endDateStr.equals("")) {
end = new IWTimestamp(endDateStr);
end.setAsDate();
}
// Check resource start date
if (end != null && end.isEarlierThan(start)){
throw new DateException("cacc.rsc_placement.enddate_earlier_than_startdate", "Enddate can't be earlier than startdate");
} else if (registered != null && start.isEarlierThan(registered)){
throw new DateException("cacc.rsc_placement.startdate_earlier_than_registereddate", "Resource start date can't be earlier than the placements startdate");
// Check and set resource end date
} else if (end != null) {
if(removed != null && removed.isEarlierThan(end)) {
throw new DateException("cacc.rsc_placement.enddate_later_than_removeddate", "Resource enddate can't be later than school placements enddate");
}
endDate = end.getDate();
}
// Get created date - rightNow
java.util.Date rightNowDate = new java.util.Date();
java.sql.Date rightNow = new java.sql.Date(rightNowDate.getTime());
// Store
ResourceClassMember rscMemberBmp = rscClMbrHome.create();
rscMemberBmp.setResourceFK(rscId);
rscMemberBmp.setMemberFK(schClsMbrID);
rscMemberBmp.setStartDate(startDate);
rscMemberBmp.setTeacherId(teacherId);
if (endDate != null)
rscMemberBmp.setEndDate(endDate);
if (registratorID != -1)
rscMemberBmp.setRegistratorId(registratorID);
rscMemberBmp.setCreatedDate(rightNow);
rscMemberBmp.store();
}
catch (javax.ejb.CreateException ce) {
throw new java.rmi.RemoteException(ce.getMessage());
}
}
/**
* Sets end date of a resource placement
*
* @param grpId The SchoolPlacements SchoolClassMemberID.
* @param rscId The ResourceID.
* @param startDate Startdate of this ResourcePlacement
* @param endDate Enddate of this ResourcePlacement
*/
public void finishResourceClassMember(Integer schClsMbrID, Integer rscClsMbrId, String startDateStr, String endDateStr) throws FinderException, RemoteException, DateException, ClassMemberException {
finishResourceClassMember(schClsMbrID, rscClsMbrId, startDateStr, endDateStr, false);
}
/**
* Sets end date of a resource placement
*
* @param grpId The SchoolPlacements SchoolClassMemberID.
* @param rscId The ResourceID.
* @param startDate Startdate of this ResourcePlacement
* @param endDate Enddate of this ResourcePlacement
* @param isCentralAdmin user central admin or not
*/
public void finishResourceClassMember(Integer schClsMbrID, Integer rscClsMbrId, String startDateStr, String endDateStr, boolean isCentralAdmin) throws FinderException, RemoteException, DateException, ClassMemberException {
ResourceClassMemberHome mHome = (ResourceClassMemberHome) getIDOHome(ResourceClassMember.class);
ResourceClassMember mbr = mHome.findByPrimaryKey(rscClsMbrId);
IWTimestamp today = IWTimestamp.RightNow();
today.setAsDate();
IWTimestamp start = new IWTimestamp(startDateStr);
Date endDate;
if (rscClsMbrId == null)
throw new ClassMemberException("cacc.rsc_placement.no_member_placement_id", "No group placement found");
// Check dates
if (!endDateStr.equals("")) {
IWTimestamp end = new IWTimestamp(endDateStr);
end.setAsDate();
IWTimestamp removed = null;
IWTimestamp registered = null;
SchoolClassMember schClsMbr = getSchoolClassMember(schClsMbrID);
if (schClsMbr != null) {
Timestamp remTS = schClsMbr.getRemovedDate();
if (remTS != null)
removed = new IWTimestamp(remTS.getTime());
if (removed != null)
removed.setAsDate();
Timestamp regTS = schClsMbr.getRegisterDate();
if (regTS != null)
registered = new IWTimestamp(regTS.getTime());
if (registered != null)
registered.setAsDate();
}
if (!isCentralAdmin && end.isEarlierThan(today)) {
throw new DateException("cacc.rsc_placement.to_early_end_date", "Enddate can't be earlier than today");
} else if (end.isEarlierThan(start)){
throw new DateException("cacc.rsc_placement.enddate_earlier_than_startdate", "Enddate can't be earlier than startdate");
} else if (registered != null && end.isEarlierThan(registered)) {
throw new DateException("cacc.rsc_placement.enddate_earlier_than_registereddate", "Resource enddate can't be earlier than school placements start date");
} else if(removed != null && removed.isEarlierThan(end)) {
throw new DateException("cacc.rsc_placement.enddate_later_than_removeddate", "Resource enddate can't be later than school placements enddate");
} else {
endDate = end.getDate();
mbr.setEndDate(endDate);
mbr.store();
}
}
}
/**
* Delete all ResourcPermissions related to Resource with id rscId
* @param rscId The requested ResourcePermissions related Resourceid.
*/
public void deletePermissionsForResource(Integer rscId) throws RemoteException, FinderException, RemoveException {
Collection rscColl = null;
ResourcePermissionHome rpHome = (ResourcePermissionHome) getIDOHome(ResourcePermission.class);
rscColl = rpHome.findAllRscPermByRscId(rscId);
for (Iterator iter = rscColl.iterator(); iter.hasNext();) {
ResourcePermission element = (ResourcePermission) iter.next();
element.remove();
}
}
/**
* Delete one ResourceClassMember (Resource placement) from a student
* @param memberId The requested ResourcePermissions related Resourceid.
*/
public void deleteResourceClassMember(Integer memberId) throws RemoteException, FinderException, RemoveException {
ResourceClassMemberHome mHome = (ResourceClassMemberHome) getIDOHome(ResourceClassMember.class);
ResourceClassMember rscMember = (ResourceClassMember) mHome.findByPrimaryKeyIDO(memberId);
rscMember.remove();
}
/**
* Gets all SchoolType instances from db related to the Resource rsc
* @param rsc The Resource
*/
public Map getRelatedSchoolTypes(Resource rsc) {
HashMap typeMap = null;
try {
Collection rscColl = rsc.findRelatedSchoolTypes();
typeMap = new HashMap(rscColl.size());
for (Iterator iter = rscColl.iterator(); iter.hasNext();) {
SchoolType aType = (SchoolType) iter.next();
typeMap.put(aType.getPrimaryKey(), aType);
}
return typeMap;
} catch (IDORelationshipException e) {
e.printStackTrace();
}
return typeMap;
}
/**
* Gets all SchoolYear instances from db related to the Resource rsc
* @param rsc The Resource
*/
public Map getRelatedSchoolYears(Resource rsc) {
HashMap yearMap = null;
try {
Collection rscColl = rsc.findRelatedSchoolYears();
yearMap = new HashMap(rscColl.size());
for (Iterator iter = rscColl.iterator(); iter.hasNext();) {
SchoolYear aYear = (SchoolYear) iter.next();
yearMap.put(aYear.getPrimaryKey(), aYear);
}
return yearMap;
} catch (IDORelationshipException e) {
e.printStackTrace();
}
return yearMap;
}
/**
* Removes a Resource and all related rows from db
* @param rscId
*/
public void removeResource(Integer rscId){
Resource theRsc = getResourceByPrimaryKey(rscId);
// Get transaction
UserTransaction trans = getSessionContext().getUserTransaction();
try{
trans.begin(); // Start the transaction
theRsc.removeAllSchoolTypes();
theRsc.removeAllSchoolYears();
deletePermissionsForResource(rscId);
theRsc.remove(); // Delete the resource
trans.commit(); // Commit the transaction
}
catch(Exception e){
e.printStackTrace();
try {
trans.rollback();
} catch (IllegalStateException e1) {
e1.printStackTrace();
} catch (SecurityException e1) {
e1.printStackTrace();
} catch (SystemException e1) {
e1.printStackTrace();
}
}
}
public Collection findAllSchoolCategories() {
Collection cats = new Vector();
try {
cats = getSchoolCategoryHome().findAllCategories();
} catch (FinderException e) {
e.printStackTrace();
}
return cats;
}
public Collection findAllResourcesByCategory(String schCategoryID) {
ResourceHome rscHome = null;
Collection rscColl = new Vector();
try {
rscHome = (ResourceHome) IDOLookup.getHome(Resource.class);
rscColl = rscHome.findBySchCategory(schCategoryID);
} catch (IDOLookupException e) {
e.printStackTrace();
} catch (FinderException fe) {
}
return rscColl;
}
/**
* Get a String with the Resource names related to param placement
* @param placement
* @return
*/
public String getResourcesString(SchoolClassMember placement) {
Collection coll = getResourcePlacementsByMbrIdOrderByRscName((Integer) placement.getPrimaryKey());
StringBuffer buf = new StringBuffer("");
int i = 1;
for (Iterator iter = coll.iterator(); iter.hasNext();) {
ResourceClassMember rscPl = (ResourceClassMember) iter.next();
buf.append(rscPl.getResource().getResourceName());
if (i < coll.size())
buf.append(", ");
i++;
}
return buf.toString();
}
/**
* Get a String with the Resource names related to param placement
* @param placement
* @return
*/
public String getResourcesStringXtraInfo(SchoolClassMember placement) {
Collection coll = getResourcePlacementsByMbrIdOrderByRscName((Integer) placement.getPrimaryKey());
StringBuffer buf = new StringBuffer("");
int i = 1;
for (Iterator iter = coll.iterator(); iter.hasNext();) {
ResourceClassMember rscPl = (ResourceClassMember) iter.next();
int registratorID = rscPl.getRegistratorId();
User registrator = null;
String userName = null;
try {
registrator = getUserBusiness().getUser(registratorID);
if (registrator != null) {
Name name = new Name(registrator.getFirstName(), registrator.getMiddleName(), registrator.getLastName());
userName = name.getName(getIWMainApplication().getSettings().getDefaultLocale());
}
} catch (Exception e) {}
// Add createdDate and registrator
buf.append(rscPl.getResource().getResourceName());
java.sql.Date createdDate = rscPl.getCreatedDate();
if (createdDate != null) {
buf.append("(" + createdDate.toString());
if (userName != null)
buf.append("/" + userName);
buf.append(")");
}
if (i < coll.size())
buf.append(", ");
i++;
}
return buf.toString();
}
public SchoolCategoryHome getSchoolCategoryHome() {
SchoolCategoryHome home = null;
try {
home = (SchoolCategoryHome) IDOLookup.getHome(SchoolCategory .class);
} catch (IDOLookupException e) {
e.printStackTrace();
}
return home;
}
public UserBusiness getUserBusiness() throws RemoteException{
return (UserBusiness) getServiceInstance(UserBusiness.class);
}
}