org.jasig.schedassist.impl.AppointmentTool Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of sched-assist-spi Show documentation
Show all versions of sched-assist-spi Show documentation
Scheduling Assistant Common Service Provider implementations.
/**
* Licensed to Jasig under one or more contributor license
* agreements. See the NOTICE file distributed with this work
* for additional information regarding copyright ownership.
* Jasig licenses this file to you under the Apache License,
* Version 2.0 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a
* copy of the License at:
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.jasig.schedassist.impl;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import net.fortuna.ical4j.model.component.VEvent;
import org.apache.commons.lang.Validate;
import org.apache.commons.lang.time.DateUtils;
import org.jasig.schedassist.CalendarAccountNotFoundException;
import org.jasig.schedassist.ICalendarAccountDao;
import org.jasig.schedassist.SchedulingAssistantService;
import org.jasig.schedassist.SchedulingException;
import org.jasig.schedassist.impl.owner.AvailableScheduleDao;
import org.jasig.schedassist.impl.owner.OwnerDao;
import org.jasig.schedassist.impl.visitor.NotAVisitorException;
import org.jasig.schedassist.impl.visitor.VisitorDao;
import org.jasig.schedassist.model.AvailableBlock;
import org.jasig.schedassist.model.ICalendarAccount;
import org.jasig.schedassist.model.IScheduleOwner;
import org.jasig.schedassist.model.IScheduleVisitor;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
/**
* Helper class to provide a means to create an Available
* appointment via the main method (command line).
*
* @author Nicholas Blair, [email protected]
* @version $Id: AvailableAppointmentTool.java 2400 2010-08-19 18:12:29Z npblair $
*/
public final class AppointmentTool {
public static final String CONFIG = System.getProperty(
"org.jasig.schedassist.impl.AppointmentTool.CONFIG",
"cli-tools-SAMPLE.xml");
public static final String CREATE = "create";
public static final String OWNER_ARG = "-owner";
public static final String VISITOR_ARG = "-visitor";
public static final String START_ARG = "-start";
public static final String DURATION_ARG = "-duration";
public static final String DATE_FORMAT = "yyyyMMdd-HHmm";
private ICalendarAccountDao calendarAccountDao;
private OwnerDao ownerDao;
private VisitorDao visitorDao;
private AvailableScheduleDao availableScheduleDao;
private SchedulingAssistantService schedulingAssistantService;
/**
* @param schedulingAssistantService
* @param calendarDao
* @param calendarUserDao
* @param ownerDao
* @param visitorDao
*/
public AppointmentTool(final SchedulingAssistantService schedulingAssistantService,
final ICalendarAccountDao calendarAccountDao, final OwnerDao ownerDao,
final VisitorDao visitorDao, final AvailableScheduleDao availableScheduleDao) {
this.schedulingAssistantService = schedulingAssistantService;
this.calendarAccountDao = calendarAccountDao;
this.ownerDao = ownerDao;
this.visitorDao = visitorDao;
this.availableScheduleDao = availableScheduleDao;
}
/**
*
* @param visitorUsername
* @param ownerUsername
* @param startDate
* @param endDate
* @return
* @throws CalendarAccountNotFoundException
* @throws NotAVisitorException
* @throws SchedulingException
*/
public VEvent createAvailableAppointment(String visitorUsername, String ownerUsername,
Date startDate, Date endDate) throws CalendarAccountNotFoundException, NotAVisitorException, SchedulingException {
ICalendarAccount visitorUser = calendarAccountDao.getCalendarAccount(visitorUsername);
ICalendarAccount ownerUser = calendarAccountDao.getCalendarAccount(ownerUsername);
IScheduleVisitor visitor = visitorDao.toVisitor(visitorUser);
IScheduleOwner owner = ownerDao.locateOwner(ownerUser);
if(null == owner) {
throw new SchedulingException("owner not registered with Available");
}
AvailableBlock block = availableScheduleDao.retrieveTargetBlock(owner, startDate);
if(null == block) {
throw new SchedulingException("owner does not have availability at " + startDate);
}
VEvent result = this.schedulingAssistantService.scheduleAppointment(visitor, owner, block, "test appointment created by WiscCal administrator");
return result;
}
/**
* main method to interact with {@link AvailableApplicationTool}.
*
* @param args
* @throws SchedulingException
* @throws NotAVisitorException
* @throws CalendarAccountNotFoundException
*/
public static void main(String[] args) throws CalendarAccountNotFoundException, NotAVisitorException, SchedulingException {
// scan the arguments
if(args.length == 0) {
System.err.println("Usage: AppointmentTool create [-owner username] [-visitor username] [-start YYYYmmdd-hhmm] [-duration minutes]");
System.exit(1);
}
if(CREATE.equals(args[0])) {
String visitorUsername = null;
String ownerUsername = null;
Date startTime = null;
int duration = 30;
for(int i = 1; i < args.length; i++) {
if(OWNER_ARG.equalsIgnoreCase(args[i])) {
ownerUsername = args[++i];
} else if (VISITOR_ARG.equalsIgnoreCase(args[i])) {
visitorUsername = args[++i];
} else if (START_ARG.equalsIgnoreCase(args[i])) {
String start = args[++i];
SimpleDateFormat df = new SimpleDateFormat(DATE_FORMAT);
try {
startTime = df.parse(start);
} catch (ParseException e) {
System.err.println("Invalid format for start parameter, must match: " + DATE_FORMAT);
System.exit(1);
}
} else if (DURATION_ARG.equalsIgnoreCase(args[i])) {
String dur = args[++i];
duration = Integer.parseInt(dur);
}
}
Validate.notEmpty(ownerUsername, "owner argument cannot be empty");
Validate.notEmpty(visitorUsername, "visitor argument cannot be empty");
Validate.notNull(startTime, "start argument cannot be empty");
ApplicationContext applicationContext = new ClassPathXmlApplicationContext(CONFIG);
AppointmentTool tool = new AppointmentTool(
(SchedulingAssistantService) applicationContext.getBean("schedulingAssistantService"),
(ICalendarAccountDao) applicationContext.getBean("calendarAccountDao"),
(OwnerDao) applicationContext.getBean("ownerDao"),
(VisitorDao) applicationContext.getBean("visitorDao"),
(AvailableScheduleDao) applicationContext.getBean("availableScheduleDao"));
Date endDate = DateUtils.addMinutes(startTime, duration);
VEvent event = tool.createAvailableAppointment(visitorUsername, ownerUsername, startTime, endDate);
System.out.println("Event successfully created: ");
System.out.println(event.toString());
} else {
System.err.println("Unrecognized command: " + args[0]);
System.exit(1);
}
}
}