package org.nishen.alma.toolkit.tasks;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import javax.ws.rs.client.WebTarget;
import javax.ws.rs.core.MediaType;
import org.nishen.alma.toolkit.entity.resreq.UserResourceSharingRequest;
import org.nishen.alma.toolkit.entity.resreq.UserResourceSharingRequests;
import org.nishen.alma.toolkit.util.MailUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.google.inject.Inject;
import com.google.inject.Provider;
import com.google.inject.name.Named;
/**
* A task to check whether there are any urgent resource requests enqueued. If so,
* send an alert email to library staff.
*
*
* @author nishen
*/
public class TaskCheckResourceRequests implements Task
{
private static final Logger log = LoggerFactory.getLogger(TaskCheckResourceRequests.class);
private static final String TASKNAME = "checkResourceRequests";
private Provider<WebTarget> webTargetProvider;
private Properties config;
private String institutionCode;
@Inject
private TaskCheckResourceRequests(@Named("app.cmdline") final String[] args,
@Named("app.config") final Properties config,
@Named("ws.url.alma") Provider<WebTarget> webTargetProvider)
{
this.webTargetProvider = webTargetProvider;
this.config = config;
this.institutionCode = config.getProperty("resreq.alma.institution.code");
log.debug("initialised tasklistusers");
}
@Override
public void run()
{
log.info("executing task: {}", this.getClass().getSimpleName());
log.debug("code: {}", this.institutionCode);
String host = config.getProperty("resreq.mail.host");
String from = config.getProperty("resreq.mail.from");
String name = config.getProperty("resreq.mail.name");
String addr = config.getProperty("resreq.mail.to");
String subj = config.getProperty("resreq.mail.subj");
// get an instance of the web client.
WebTarget target = webTargetProvider.get();
target = target.path("task-lists/rs/lending-requests").queryParam("library", institutionCode);
UserResourceSharingRequests requests = target.request(MediaType.APPLICATION_XML_TYPE)
.get(UserResourceSharingRequests.class);
List<UserResourceSharingRequest> requestList = new ArrayList<UserResourceSharingRequest>();
for (UserResourceSharingRequest r : requests.getUserResourceSharingRequest())
{
log.info("level of service [{}]: {}", r.getLevelOfService().getValue(), r.getTitle());
if ("RUSH_LOCAL".equals(r.getLevelOfService().getValue())
|| "EXPRESS_LOCAL".equals(r.getLevelOfService().getValue()))
requestList.add(r);
}
if (requestList.size() == 0)
return;
StringBuilder mesg = new StringBuilder();
mesg.append("Dear ILL Librarian,\n\n");
mesg.append("There are urgent requests requiring your attention:\n\n");
for (UserResourceSharingRequest r : requestList)
{
mesg.append("EXTERNAL ID: ").append(r.getExternalId()).append("\n");
mesg.append("TITLE: ").append(r.getTitle()).append("\n");
if (r.getCallNumber() != null && !"".equals(r.getCallNumber()))
mesg.append("CALL NUMBER: ").append(r.getCallNumber()).append("\n");
Calendar cal = Calendar.getInstance();
cal.setTime(r.getCreatedTime().toGregorianCalendar().getTime());
mesg.append("CREATED AT: ").append(cal.getTime()).append("\n");
mesg.append("--\n\n");
}
mesg.append("\n");
mesg.append("Thanks,\n");
mesg.append("User Resource Request Watcher\n\n");
try
{
MailUtil.sendEmails(host, from, name, addr, subj, mesg.toString());
}
catch (Exception e)
{
log.error("failed to send email: {}", mesg.toString(), e);
}
}
@Override
public Map<String, String> getUsageOptions()
{
return new HashMap<String, String>();
}
public static String getTaskName()
{
return TASKNAME;
}
}