...
Code Block | ||
---|---|---|
| ||
boolean checkPlaceHold(org.osid.id.Id issueId, org.osid.id.Id agentId) throws org.osid.NotFoundException, org.osid.OperationFailedException, org.osid.PermissionDeniedException { org.osid.resource.ResourceAgentSession resourceAgentSession = resourceMgr.getResourceAgentSession(); // I'll assume the resourceId is the same as the personId org.osid.id.Id resourceId = resourceAgentSession.getResourceIdByAgent(agentId); org.osid.hold.IssueLookupSession issueLookupSession = holdMgr.getIssueLookupSession(); org.osid.hold.Issue issue = issueLookupSession.getIssue(issueId); // our local org data OrganizationIssueRecord record = (OrganizationIssueRecord) issue.getIssueRecord(organizationIssueRecordType); // could they have made this any more difficult! org.osid.personnel.AppointmentLookupSession appointmentLookupSession = personnelMgr.getAppointmentLookupSession(); appointmentLookupSession.useEffectiveAppointmentView(); org.osid.personnel.PositionLookupSession positionLookupSession = personnelMgr.getPositionLookupSession(); positionLookupSession.useEffectivePositionView(); // get the positions of an org - blasted there's no way to get a list of people in an org! try (org.osid.id.IdList orgIds = record.getHoldCreatorOrganizationIds()) { while (orgIds.hasNext()) { org.osid.id.Id orgId = orgIds.getNextId(); try (org.osid.personnel.PositionList positions = positionLookupSession.getPositionsForOrganization(orgId)) { while (positions.hasNext()) { org.osid.personnel.Position position = positions.getNextPosition(); try (org.osid.personnel.AppintmentListAppointmentList appointments = appointmentLookupSession.getAppointmentsForPersonAndPosition(resourceId, position.getNextId()) { if (appointments.hasNext()) { return (true); } } } } } } return (false); } |
...
Code Block | ||
---|---|---|
| ||
boolean isAuthorized(org.osid.id.Id agentId, org.osid.id.Id functionId, org.osid.id.Id qualifierId) throws org.osid.NotFoundException, org.osid.OperationFailedException, org.osid.PermissionDeniedException { org.osid.id.Id issueId; if (functionId.equals(CREATEHOLD_FUNCTION_ID)) { issueId = qualifierid; } else if (functionId.equals(UPDATEHOLD_FUNCTION_ID)) { org.osid.hold.Hold hold = holdLookupSession.getHold(qualifierId); issueId = hold.getIssueId(); } else { return (underlyingAuthorizationProvider.isAuthorized(agentId, functionId, qualfiierId)); } org.osid.id.Id resourceId = resourceAgentSession.getResourceIdByAgent(agentId); org.osid.hold.Issue issue = issueLookupSession.getIssue(issueId); OrganizationIssueRecord record = (OrganizationIssueRecord) issue.getIssueRecord(ORGANIZATION_ISSUE_RECORD_TYPE); org.osid.id.IdList organizationIds; if (functionId.equals(CREATEHOLD_FUNCTION_ID)) { organizationIds = record.getHoldCreatorOrganizationIds(); } else if (functionId.equals(UPDATEHOLD_FUNCTION_ID)) { organizationIds = record.getHoldUpdaterOrganizationIds(); } try { while (organizationIds.hasNext()) { org.osid.id.Id orgId = organizationIds.getNextId(); try (org.osid.personnel.PositionList positions = positionLookupSession.getPositionsForOrganization(orgId)) { while (positions.hasNext()) { org.osid.personnel.Position position = positions.getNextPosition(); try (org.osid.personnel.AppintmentListAppointmentList appointments = appointmentLookupSession.getAppointmentsForPersonAndPosition(resourceId, position.getNextId()) { if (appointments.hasNext()) { return (true); } } } } } return (false); } finally { organizationIds.close(); } } |
...
The difference between these two is that a Demographic is a grouping based on an explicit Rule. The service architect tries simple first and works with Resource groups by hard-coding an implicit rule.
Code Block |
---|
// ResourceGroupSession - gets a list of "people" in an "organization"
public getResourcesByGroup(org.osid.id.Id groupResourceId) {
// assumption: groupResourceId is an org Id
java.util.Collection<org.osid.resource.Resource> ret = new java.util.ArrayList<>();
try (org.osid.personnel.PositionList positions = positionLookupSession.getPositionsForOrganization(groupResourceId)) {
while (positions.hasNext()) {
org.osid.personnel.Position position = positions.getNextPosition();
// can filter on a type of position
try (org.osid.personnel.AppointmentList appointments = appointmentLookupSession.getAppointmentsForPosition(position.getNextId()) {
if (appointments.hasNext()) {
ret.add(convertPerson2Resource(position.getPerson()));
}
}
}
}
return (new net.okapia.osid.jamocha.resource.resource.ArrayResourceList(ret));
} |
The above method can be used as an assist for evaluating the list of Agents associated with a Resource.