📄 appointmentmarker.java
字号:
package org.rapla.plugin.appointmentmarker;
import java.text.ParseException;
import java.util.Collection;
import java.util.Date;
import java.util.Iterator;
import java.util.Set;
import java.util.StringTokenizer;
import java.util.TreeSet;
import org.rapla.components.util.DateTools;
import org.rapla.components.util.SerializableDateTimeFormat;
import org.rapla.entities.domain.Appointment;
import org.rapla.entities.domain.AppointmentBlockArray;
import org.rapla.entities.domain.Repeating;
import org.rapla.entities.domain.Reservation;
import org.rapla.entities.dynamictype.Attribute;
import org.rapla.facade.RaplaComponent;
import org.rapla.framework.RaplaContext;
import org.rapla.framework.RaplaException;
public class AppointmentMarker extends RaplaComponent
{
static public String ROLE = AppointmentMarker.class.getName();
public AppointmentMarker( RaplaContext context ) throws RaplaException
{
super( context );
}
/** returns if the event has the appointmentmarker attribute*/
public boolean canBeMarked(Reservation event)
{
Attribute att = event.getClassification().getType().getAttribute( AppointmentMarkerPlugin.MARKER_ATTRIBUTE_KEY);
return att!= null;
}
/** returns all the marked Dates as an Set (of Date object(*/
public Set getMarkedDates(Reservation event) {
final Set markedDates = new TreeSet();
Attribute att = event.getClassification().getType().getAttribute( AppointmentMarkerPlugin.MARKER_ATTRIBUTE_KEY);
Object value = event.getClassification().getValue( att );
final SerializableDateTimeFormat format = new SerializableDateTimeFormat();
// Parse the marked dates
if ( value != null)
{
StringTokenizer tokenizer = new StringTokenizer((String) value,";");
while ( tokenizer.hasMoreTokens())
{
String dateString=tokenizer.nextToken();
try
{
Date markedDate = format.parseDate( dateString, false);
markedDates.add(markedDate);
}
catch (ParseException e)
{
getLogger().error("Couldnt parse date " + dateString + " for appointment marking. Ignoring");
}
}
}
return markedDates;
}
/** returns if the event is marked on the passed dates*/
public boolean isMarked( Reservation event, Date date)
{
return isMarked( date, getMarkedDates( event));
}
/** same as isMarked but you can pass the markedDates*/
static public boolean isMarked( Date date, Collection markedDates)
{
Date normalizedDate = DateTools.cutDate( date);
return markedDates.contains( normalizedDate );
}
/** marks/unmarks an event on the passed date*/
public void setMarked( Reservation event, Date dateToMark, boolean mark)
{
final SerializableDateTimeFormat format = new SerializableDateTimeFormat();
Set markedDates = getMarkedDates( event );
Date currentSelectedDate = DateTools.cutDate( dateToMark );
if ( mark )
{
markedDates.add( currentSelectedDate );
}
else
{
markedDates.remove( currentSelectedDate );
}
String newValue = "";
for (Iterator it = markedDates.iterator();it.hasNext();)
{
Date markedDate = (Date) it.next();
newValue+=format.formatDate( markedDate) + ";";
}
event.getClassification().setValue(AppointmentMarkerPlugin.MARKER_ATTRIBUTE_KEY, newValue);
}
/** returns null if the event contains an appointment that repeats forever*/
public AppointmentBlockArray getAllBlocks(Reservation event) {
AppointmentBlockArray blocks = new AppointmentBlockArray();
Appointment[] appointments = event.getAppointments();
for (int i = 0; i<appointments.length; i++) {
Appointment appointment = appointments[i];
Repeating repeating = appointment.getRepeating();
if ( repeating == null ) {
appointment.createBlocks( appointment.getStart(), appointment.getEnd(), blocks);
continue;
}
if ( repeating.getEnd() == null ){ // Repeats foreever ?
return null;
}
appointment.createBlocks( appointment.getStart(), repeating.getEnd(), blocks);
}
blocks.sort();
return blocks;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -