Index: trunk/calendar3/calCore/src/org/bedework/calcore/hibernate/Calendars.java =================================================================== --- trunk/calendar3/calCore/src/org/bedework/calcore/hibernate/Calendars.java (revision 445) +++ trunk/calendar3/calCore/src/org/bedework/calcore/hibernate/Calendars.java (revision 466) @@ -55,4 +55,5 @@ import org.bedework.calfacade.BwCalendar; +import org.bedework.calfacade.BwSystem; import org.bedework.calfacade.BwUser; import org.bedework.calfacade.ifs.CalendarsI; @@ -146,64 +147,4 @@ usercal.addChild(cal); - /* Add the trash calendar */ - cal = new BwCalendar(); - cal.setName(getSyspars().getDefaultTrashCalendar()); - cal.setCreator(user); - cal.setOwner(user); - cal.setPublick(false); - cal.setPath(path + "/" + getSyspars().getDefaultTrashCalendar()); - cal.setCalendar(usercal); - cal.setCalendarCollection(true); - cal.setCalType(BwCalendar.calTypeTrash); - usercal.addChild(cal); - - /* Add the inbox */ - cal = new BwCalendar(); - cal.setName(getSyspars().getUserInbox()); - cal.setCreator(user); - cal.setOwner(user); - cal.setPublick(false); - cal.setPath(path + "/" + getSyspars().getUserInbox()); - cal.setCalendar(usercal); - cal.setCalendarCollection(true); - cal.setCalType(BwCalendar.calTypeInbox); - usercal.addChild(cal); - - /* Add the outbox */ - cal = new BwCalendar(); - cal.setName(getSyspars().getUserOutbox()); - cal.setCreator(user); - cal.setOwner(user); - cal.setPublick(false); - cal.setPath(path + "/" + getSyspars().getUserOutbox()); - cal.setCalendar(usercal); - cal.setCalendarCollection(true); - cal.setCalType(BwCalendar.calTypeOutbox); - usercal.addChild(cal); - - /* Add the deleted calendar */ - cal = new BwCalendar(); - cal.setName(getSyspars().getDeletedCalendar()); - cal.setCreator(user); - cal.setOwner(user); - cal.setPublick(false); - cal.setPath(path + "/" + getSyspars().getDeletedCalendar()); - cal.setCalendar(usercal); - cal.setCalendarCollection(true); - cal.setCalType(BwCalendar.calTypeDeleted); - usercal.addChild(cal); - - /* Add the busy calendar */ - cal = new BwCalendar(); - cal.setName(getSyspars().getBusyCalendar()); - cal.setCreator(user); - cal.setOwner(user); - cal.setPublick(false); - cal.setPath(path + "/" + getSyspars().getBusyCalendar()); - cal.setCalendar(usercal); - cal.setCalendarCollection(true); - cal.setCalType(BwCalendar.calTypeBusy); - usercal.addChild(cal); - sess.save(usercal); @@ -343,46 +284,39 @@ } - public BwCalendar getTrashCalendar(BwUser user) throws CalFacadeException { + public BwCalendar getSpecialCalendar(BwUser user, + int calType) throws CalFacadeException { StringBuffer sb = new StringBuffer(); - - sb.append("/"); - sb.append(getSyspars().getUserCalendarRoot()); + String name; + BwSystem sys = getSyspars(); + + if (calType == BwCalendar.calTypeBusy) { + name = sys.getBusyCalendar(); + } else if (calType == BwCalendar.calTypeDeleted) { + name = sys.getDeletedCalendar(); + } else if (calType == BwCalendar.calTypeInbox) { + name = sys.getUserInbox(); + } else if (calType == BwCalendar.calTypeOutbox) { + name = sys.getUserOutbox(); + } else if (calType == BwCalendar.calTypeTrash) { + name = sys.getDefaultTrashCalendar(); + } else { + // Not supported + return null; + } + + sb.append(userCalendarRootPath); sb.append("/"); sb.append(user.getAccount()); + + String pathTo = sb.toString(); + sb.append("/"); - sb.append(getSyspars().getDefaultTrashCalendar()); - - return getCalendar(sb.toString(), privRead); - } - - public BwCalendar getDeletedCalendar(BwUser user) throws CalFacadeException { - StringBuffer sb = new StringBuffer(); - - sb.append("/"); - sb.append(getSyspars().getUserCalendarRoot()); - sb.append("/"); - sb.append(user.getAccount()); - sb.append("/"); - sb.append("Deleted"); - // XXX new syspar sb.append(getSyspars().getDefaultTrashCalendar()); - - return getCalendar(sb.toString(), privRead); - } - - /** Create the special deleted calendar which holds deletion annotations to - * entities for which the user has no write access. - * - * @param user - * @throws CalFacadeException - */ - public void createDeletedCalendar(BwUser user) throws CalFacadeException { - StringBuffer sb = new StringBuffer(); - - sb.append("/"); - sb.append(getSyspars().getUserCalendarRoot()); - sb.append("/"); - sb.append(user.getAccount()); - - String pathTo = sb.toString(); + sb.append(name); + + BwCalendar cal = getCalendar(sb.toString(), privRead); + + if (cal != null) { + return cal; + } /* @@ -394,11 +328,13 @@ */ - BwCalendar cal = new BwCalendar(); - cal.setName(getSyspars().getDeletedCalendar()); + cal = new BwCalendar(); + cal.setName(name); cal.setOwner(user); cal.setCreator(user); cal.setCalendarCollection(true); - cal.setCalType(BwCalendar.calTypeDeleted); + cal.setCalType(calType); addCalendar(cal, pathTo); + + return cal; } @@ -408,4 +344,8 @@ /* We need write content access to the parent */ BwCalendar parent = getCalendar(parentPath, privWriteContent, false); + if (parent == null) { + throw new CalFacadeException("org.bedework.error.nosuchcalendarpath", + parentPath); + } /** Is the parent a calendar collection? Index: trunk/calendar3/calCore/src/org/bedework/calcore/hibernate/CalintfImpl.java =================================================================== --- trunk/calendar3/calCore/src/org/bedework/calcore/hibernate/CalintfImpl.java (revision 448) +++ trunk/calendar3/calCore/src/org/bedework/calcore/hibernate/CalintfImpl.java (revision 466) @@ -870,10 +870,7 @@ } - public BwCalendar getTrashCalendar(BwUser user) throws CalFacadeException { - return calendars.getTrashCalendar(user); - } - - public BwCalendar getDeletedCalendar(BwUser user) throws CalFacadeException { - return calendars.getDeletedCalendar(user); + public BwCalendar getSpecialCalendar(BwUser user, + int calType) throws CalFacadeException { + return calendars.getSpecialCalendar(user, calType); } @@ -1126,13 +1123,12 @@ public Collection getDeletedProxies() throws CalFacadeException { - BwCalendar cal = this.getDeletedCalendar(user); + BwCalendar cal = getSpecialCalendar(user, BwCalendar.calTypeDeleted); if (cal == null) { - // Create the deleted calendar for another time - calendars.createDeletedCalendar(user); + // Not supported return new ArrayList(); } - return events.getDeletedProxies(this.getDeletedCalendar(user)); + return events.getDeletedProxies(cal); } Index: trunk/calendar3/calFacade/src/org/bedework/calfacade/base/CalintfBase.java =================================================================== --- trunk/calendar3/calFacade/src/org/bedework/calfacade/base/CalintfBase.java (revision 445) +++ trunk/calendar3/calFacade/src/org/bedework/calfacade/base/CalintfBase.java (revision 466) @@ -472,9 +472,6 @@ } - public BwCalendar getTrashCalendar(BwUser user) throws CalFacadeException { - throw new CalFacadeUnimplementedException(); - } - - public BwCalendar getDeletedCalendar(BwUser user) throws CalFacadeException { + public BwCalendar getSpecialCalendar(BwUser user, + int calType) throws CalFacadeException { throw new CalFacadeUnimplementedException(); } Index: trunk/calendar3/calFacade/src/org/bedework/calfacade/ifs/CalendarsI.java =================================================================== --- trunk/calendar3/calFacade/src/org/bedework/calfacade/ifs/CalendarsI.java (revision 436) +++ trunk/calendar3/calFacade/src/org/bedework/calfacade/ifs/CalendarsI.java (revision 466) @@ -155,13 +155,15 @@ * of a calendar. * - * @param val int id of calendar - * @return CalendarVO null for unknown calendar + * @param val int id of calendar + * @return BwCalendar null for unknown calendar * @throws CalFacadeException */ public BwCalendar getCalendar(int val) throws CalFacadeException; - /** Get a calendar given the path - * - * @param path String path of calendar + /** Get a calendar given the path. If the path is that of a 'special' + * calendar, for example the deleted calendar, it may not exist if it has + * not been used. + * + * @param path String path of calendar * @param desiredAccess int access we need * @return BwCalendar null for unknown calendar @@ -181,20 +183,14 @@ public BwCalendar getDefaultCalendar(BwUser user) throws CalFacadeException; - /** Get the trash calendar for the given user. + /** Get a special calendar (e.g. Trash) for the given user. If it does not + * exist and is supported by the target system it will be created. * * @param user - * @return BwCalendar null for unknown calendar - * @throws CalFacadeException - */ - public BwCalendar getTrashCalendar(BwUser user) throws CalFacadeException; - - /** Get the deleted calendar for the given user. This holds annotations - * marking other events as deleted - * - * @param user - * @return BwCalendar null for unknown calendar - * @throws CalFacadeException - */ - public BwCalendar getDeletedCalendar(BwUser user) throws CalFacadeException; + * @param calType int special calendar type. + * @return BwCalendar null for unknown calendar + * @throws CalFacadeException + */ + public BwCalendar getSpecialCalendar(BwUser user, + int calType) throws CalFacadeException; /** Add a calendar object Index: trunk/calendar3/caldavClientApi/src/org/bedework/caldav/client/CalintfCaldavImpl.java =================================================================== --- trunk/calendar3/caldavClientApi/src/org/bedework/caldav/client/CalintfCaldavImpl.java (revision 445) +++ trunk/calendar3/caldavClientApi/src/org/bedework/caldav/client/CalintfCaldavImpl.java (revision 466) @@ -389,8 +389,4 @@ } - public BwCalendar getTrashCalendar(BwUser user) throws CalFacadeException { - throw new CalFacadeUnimplementedException(); - } - public void addCalendar(BwCalendar val, String parentPath) throws CalFacadeException { checkOpen(); Index: trunk/calendar3/calsvc/src/org/bedework/calsvc/CalSvc.java =================================================================== --- trunk/calendar3/calsvc/src/org/bedework/calsvc/CalSvc.java (revision 445) +++ trunk/calendar3/calsvc/src/org/bedework/calsvc/CalSvc.java (revision 466) @@ -1701,5 +1701,6 @@ // Have write access - just set the flag and move it into the owners trash event.setDeleted(true); - event.setCalendar(getCal().getTrashCalendar(event.getOwner())); + event.setCalendar(getCal().getSpecialCalendar(event.getOwner(), + BwCalendar.calTypeTrash)); updateEvent(event); return; @@ -1713,5 +1714,6 @@ // Put it in the trash - but don't delete on empty trash - BwCalendar cal = getCal().getDeletedCalendar(getUser()); + BwCalendar cal = getCal().getSpecialCalendar(getUser(), + BwCalendar.calTypeTrash); proxy.setOwner(getUser()); proxy.setDeleted(true); Index: trunk/calendar3/dumprestore/src/org/bedework/dumprestore/dump/dumpling/DumpSyspars.java =================================================================== --- trunk/calendar3/dumprestore/src/org/bedework/dumprestore/dump/dumpling/DumpSyspars.java (revision 64) +++ trunk/calendar3/dumprestore/src/org/bedework/dumprestore/dump/dumpling/DumpSyspars.java (revision 466) @@ -83,4 +83,7 @@ taggedVal("userInbox", s.getUserInbox()); taggedVal("userOutbox", s.getUserOutbox()); + taggedVal("deletedCalendar", s.getDeletedCalendar()); + taggedVal("busyCalendar", s.getBusyCalendar()); + taggedVal("defaultUserViewName", s.getDefaultUserViewName()); Index: trunk/calendar3/dumprestore/src/org/bedework/dumprestore/restore/rules/FiltersRule.java =================================================================== --- trunk/calendar3/dumprestore/src/org/bedework/dumprestore/restore/rules/FiltersRule.java (revision 463) +++ trunk/calendar3/dumprestore/src/org/bedework/dumprestore/restore/rules/FiltersRule.java (revision 466) @@ -150,42 +150,4 @@ globals.defaultCalendars.put(new Integer(u.getId()), cal); - /* Add the trash calendar */ - cal = new BwCalendar(); - cal.setId(globals.nextCalKey); - globals.nextCalKey++; - cal.setName(globals.syspars.getDefaultTrashCalendar()); - cal.setPath(ucal.getPath() + "/" + cal.getName()); - cal.setCreator(u); - cal.setOwner(u); - cal.setCalendar(ucal); - cal.setCalendarCollection(true); - ucal.addChild(cal); - - globals.trashCalendars.put(new Integer(u.getId()), cal); - - /* Add the inbox */ - cal = new BwCalendar(); - cal.setId(globals.nextCalKey); - globals.nextCalKey++; - cal.setName(globals.syspars.getUserInbox()); - cal.setPath(ucal.getPath() + "/" + cal.getName()); - cal.setCreator(u); - cal.setOwner(u); - cal.setCalendar(ucal); - cal.setCalendarCollection(true); - ucal.addChild(cal); - - /* Add the outbox */ - cal = new BwCalendar(); - cal.setId(globals.nextCalKey); - globals.nextCalKey++; - cal.setName(globals.syspars.getUserOutbox()); - cal.setPath(ucal.getPath() + "/" + cal.getName()); - cal.setCreator(u); - cal.setOwner(u); - cal.setCalendar(ucal); - cal.setCalendarCollection(true); - ucal.addChild(cal); - if (globals.rintf != null) { globals.rintf.restoreCalendars(ucal); @@ -195,3 +157,2 @@ } } - Index: trunk/calendar3/dumprestore/src/org/bedework/dumprestore/restore/rules/SysparsFieldRule.java =================================================================== --- trunk/calendar3/dumprestore/src/org/bedework/dumprestore/restore/rules/SysparsFieldRule.java (revision 463) +++ trunk/calendar3/dumprestore/src/org/bedework/dumprestore/restore/rules/SysparsFieldRule.java (revision 466) @@ -94,4 +94,9 @@ } else if (name.equals("userOutbox")) { ent.setUserOutbox(parval(globals.syspars.getUserOutbox(), stringFld())); + } else if (name.equals("deletedCalendar")) { + ent.setDeletedCalendar(parval(globals.syspars.getDeletedCalendar(), stringFld())); + } else if (name.equals("busyCalendar")) { + ent.setBusyCalendar(parval(globals.syspars.getBusyCalendar(), stringFld())); + } else if (name.equals("defaultUserViewName")) { ent.setDefaultUserViewName(parval(globals.syspars.getDefaultUserViewName(), stringFld()));