コード例 #1
0
  @Override
  public void processElement(String namespaceURI, String localName, RaplaSAXAttributes atts)
      throws RaplaSAXParseException {
    if (namespaceURI.equals(DYNATT_NS) || namespaceURI.equals(EXTENSION_NS)) {
      dynAttHandler.setClassifiable(reservation);
      delegateElement(dynAttHandler, namespaceURI, localName, atts);
      return;
    }

    if (!namespaceURI.equals(RAPLA_NS)) return;

    if (localName.equals("permission")) {
      permissionHandler.setContainer(reservation);
      delegateElement(permissionHandler, namespaceURI, localName, atts);
      return;
    }
    if (localName.equals("reservation")) {
      TimestampDates ts = readTimestamps(atts);
      reservation = new ReservationImpl(ts.createTime, ts.changeTime);
      reservation.setResolver(store);
      currentAnnotatable = reservation;
      setId(reservation, atts);
      setLastChangedBy(reservation, atts);
      setOwner(reservation, atts);
    }

    if (localName.equals("appointment")) {
      String id = atts.getValue("id");
      String startDate = atts.getValue("start-date");
      String endDate = atts.getValue("end-date");
      if (endDate == null) endDate = startDate;

      String startTime = atts.getValue("start-time");
      String endTime = atts.getValue("end-time");

      Date start;
      Date end;
      if (startTime != null && endTime != null) {
        start = parseDateTime(startDate, startTime);
        end = parseDateTime(endDate, endTime);
      } else {
        start = parseDate(startDate, false);
        end = parseDate(endDate, true);
      }

      appointment = new AppointmentImpl(start, end);
      appointment.setWholeDays(startTime == null && endTime == null);
      if (id != null) {
        setId(appointment, atts);
      } else {
        setNewId(appointment);
      }
      addAppointment(appointment);
    }

    if (localName.equals("repeating")) {
      String type = atts.getValue("type");
      String interval = atts.getValue("interval");
      String enddate = atts.getValue("end-date");
      String number = atts.getValue("number");
      appointment.setRepeatingEnabled(true);
      repeating = appointment.getRepeating();
      repeating.setType(RepeatingType.findForString(type));
      if (interval != null) {
        repeating.setInterval(Integer.valueOf(interval).intValue());
      }
      if (enddate != null) {
        repeating.setEnd(parseDate(enddate, true));
      } else if (number != null) {
        repeating.setNumber(Integer.valueOf(number).intValue());
      } else {
        repeating.setEnd(null);
      }
      /*
      if (getLogger().enabled(6))
          getLogger().log(6, "Repeating " + repeating.toString() );
      */
    }

    if (localName.equals("allocate")) {
      String id = getString(atts, "idref");
      allocatableId = getId(Allocatable.TYPE, id);
      reservation.addId("resources", allocatableId);
      if (appointment != null) {
        reservation.addRestrictionForId(allocatableId, appointment.getId());
      }
    }

    if (localName.equals("annotation") && namespaceURI.equals(RAPLA_NS)) {
      annotationKey = atts.getValue("key");
      Assert.notNull(annotationKey, "key attribute cannot be null");
      startContent();
    }

    if (localName.equals("exception")) {}

    if (localName.equals("date")) {
      String dateString = atts.getValue("date");
      if (dateString != null && repeating != null)
        repeating.addException(parseDate(dateString, false));
    }
  }