Changeset 50

Show
Ignore:
Timestamp:
01/30/06 22:49:17
Author:
douglm
Message:

Many more updates to get the dump and restore working

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/calendar3/calFacade/src/org/bedework/calfacade/svc/BwSubscription.java

    r2 r50  
    360360 
    361361    toStringSegment(sb); 
    362     sb.append("name="); 
     362    sb.append(", name="); 
    363363    sb.append(String.valueOf(getName())); 
    364     sb.append("uri="); 
     364    sb.append(", uri="); 
    365365    sb.append(String.valueOf(getUri())); 
    366366    sb.append(")"); 
  • trunk/calendar3/docs/todo.txt

    r48 r50  
    22 
    33-------------------------------------------------------------------------------- 
     4Web-client - ensure no unexpeected data modifications. 
    45-------------------------------------------------------------------------------- 
    56maxDescriptionLength out of BwEvent - into syspars? 
  • trunk/calendar3/dumprestore/build.xml

    r48 r50  
    148148 
    149149    <echo file="${dumprestore.run.base}/resources/hibernate.properties"> 
     150hibernate.query.substitutions true 'T', false 'F', yes 'Y', no 'N' 
    150151hibernate.dialect=${org.bedework.dump.arg.hibernate.dialect} 
    151152hibernate.connection.driver_class=${org.bedework.dump.arg.jdbcdriver} 
     
    209210 
    210211    <echo file="${dumprestore.run.base}/resources/hibernate.properties"> 
     212hibernate.query.substitutions true 'T', false 'F', yes 'Y', no 'N' 
    211213hibernate.dialect=${org.bedework.restore.arg.hibernate.dialect} 
    212214hibernate.connection.driver_class=${org.bedework.restore.arg.jdbcdriver} 
  • trunk/calendar3/dumprestore/properties/dumprestore.properties

    r48 r50  
    5555org.bedework.restore.arg.jdbcpw= 
    5656 
     57org.bedework.restore.arg.timezones= 
     58 
    5759# -------------------- System parameters ---------------------------- 
    5860org.bedework.restore.arg.sysname=bedework 
  • trunk/calendar3/dumprestore/src/org/bedework/dumprestore/Defs.java

    r48 r50  
    165165  public static final String objectAttendee = "attendee"; 
    166166  /** */ 
    167   public static final String objectAlarm = "alarm"; 
     167  public static final String objectEventAlarm = "event-alarm"; 
     168  /** */ 
     169  public static final String objectTodoAlarm = "todo-alarm"; 
    168170  /** */ 
    169171  public static final String objectKeyword = "keyword"; // v2.3.2 
  • trunk/calendar3/dumprestore/src/org/bedework/dumprestore/dump/HibDump.java

    r48 r50  
    3030 
    3131import org.bedework.calcore.hibernate.HibSession; 
     32import org.bedework.calfacade.BwGroup; 
    3233import org.bedework.calfacade.BwSystem; 
     34import org.bedework.calfacade.CalFacadeException; 
     35import org.bedework.calfacade.svc.BwAdminGroup; 
    3336 
    3437import org.apache.log4j.Logger; 
     
    8083 
    8184  public Iterator getAdminGroups() throws Throwable { 
    82     return getObjects("org.bedework.calfacade.svc.BwAdminGroup"); 
     85    sess.createQuery("from " + BwAdminGroup.class.getName()); 
     86 
     87    Collection c = sess.getList(); 
     88 
     89    Iterator it = c.iterator(); 
     90    while (it.hasNext()) { 
     91      getMembers((BwGroup)it.next()); 
     92    } 
     93 
     94    return c.iterator(); 
    8395  } 
    8496 
     
    99111 
    100112    sess.createQuery("from org.bedework.calfacade.BwCalendar cal where " + 
    101                      "cal.path=:path1 or cal.path=:path1"); 
     113                     "cal.path=:path1 or cal.path=:path2"); 
    102114    sess.setString("path1", "/" + syspars.getPublicCalendarRoot()); 
    103115    sess.setString("path2", "/" + syspars.getUserCalendarRoot()); 
     
    160172  public Iterator getDbLastmods() throws Throwable { 
    161173    return getObjects("org.bedework.calfacade.BwDbLastmod"); 
     174  } 
     175 
     176  /** Start a (possibly long-running) transaction. In the web environment 
     177   * this might do nothing. The endTransaction method should in some way 
     178   * check version numbers to detect concurrent updates and fail with an 
     179   * exception. 
     180   * 
     181   * @throws Throwable 
     182   */ 
     183  public void beginTransaction() throws Throwable { 
     184    sess.beginTransaction(); 
     185  } 
     186 
     187  /** End a (possibly long-running) transaction. In the web environment 
     188   * this should in some way check version numbers to detect concurrent updates 
     189   * and fail with an exception. 
     190   * 
     191   * @throws Throwable 
     192   */ 
     193  public void endTransaction() throws Throwable { 
     194    /* Just commit */ 
     195    sess.commit(); 
    162196  } 
    163197 
     
    204238  } 
    205239 
    206   /** Start a (possibly long-running) transaction. In the web environment 
    207    * this might do nothing. The endTransaction method should in some way 
    208    * check version numbers to detect concurrent updates and fail with an 
    209    * exception. 
    210    * 
    211    * @throws Throwable 
    212    */ 
    213   public void beginTransaction() throws Throwable { 
    214     sess.beginTransaction(); 
    215   } 
    216  
    217   /** End a (possibly long-running) transaction. In the web environment 
    218    * this should in some way check version numbers to detect concurrent updates 
    219    * and fail with an exception. 
    220    * 
    221    * @throws Throwable 
    222    */ 
    223   public void endTransaction() throws Throwable { 
    224     /* Just commit */ 
    225     sess.commit(); 
     240  private void getMembers(BwGroup group) throws CalFacadeException { 
     241    sess.namedQuery("getGroupUserMembers"); 
     242    sess.setEntity("gr", group); 
     243 
     244    Collection ms = sess.getList(); 
     245 
     246    sess.namedQuery("getGroupGroupMembers"); 
     247    sess.setEntity("gr", group); 
     248 
     249    ms.addAll(sess.getList()); 
     250 
     251    group.setGroupMembers(ms); 
    226252  } 
    227253} 
    228  
  • trunk/calendar3/dumprestore/src/org/bedework/dumprestore/dump/dumpling/DumpAdminGroups.java

    r49 r50  
    3333import org.bedework.dumprestore.dump.DumpGlobals; 
    3434 
    35  
    36  
    37 import java.util.Collection; 
    3835import java.util.Iterator; 
    3936 
     
    7067    tagStart(objectAdminGroup); 
    7168 
    72     taggedVal("groupname", ag.getAccount()); 
    7369    taggedVal("description", ag.getDescription()); 
    7470 
     
    8581    } 
    8682 
    87     tagStart("groupMembers"); 
     83    groupTags(ag); 
    8884 
    89     Collection mbrs = ag.getGroupMembers(); 
    90     Iterator mbrsi = mbrs.iterator(); 
    91  
    92     while (mbrsi.hasNext()) { 
    93       u = (BwUser)mbrsi.next(); 
    94  
    95       taggedVal("groupMemberId", u.getId()); 
    96     } 
    97  
    98     tagEnd("groupMembers"); 
    9985    tagEnd(objectAdminGroup); 
    10086 
  • trunk/calendar3/dumprestore/src/org/bedework/dumprestore/dump/dumpling/DumpAlarms.java

    r49 r50  
    6868 
    6969  private void dumpAlarm(BwAlarm a) throws Throwable { 
    70     tagStart(objectAlarm); 
     70    boolean eventAlarm = a instanceof BwEventAlarm; 
     71 
     72    if (eventAlarm) { 
     73      tagStart(objectEventAlarm); 
     74    } else { 
     75      tagStart(objectTodoAlarm); 
     76    } 
    7177 
    7278    ownedEntityTags(a); 
     
    8490    taggedVal("expired", a.getExpired()); 
    8591 
    86     if (a instanceof BwEventAlarm) { 
     92    if (eventAlarm) { 
    8793      taggedEntityId("event", ((BwEventAlarm)a).getEvent()); 
     94 
     95      tagEnd(objectEventAlarm); 
     96    } else { 
     97      taggedEntityId("todo", ((BwTodoAlarm)a).getTodo()); 
     98 
     99      tagEnd(objectTodoAlarm); 
    88100    } 
    89  
    90     if (a instanceof BwTodoAlarm) { 
    91       taggedEntityId("todo", ((BwTodoAlarm)a).getTodo()); 
    92     } 
    93  
    94     tagEnd(objectAlarm); 
    95101 
    96102    globals.valarms++; 
  • trunk/calendar3/dumprestore/src/org/bedework/dumprestore/dump/dumpling/DumpAll.java

    r49 r50  
    138138    di.close(); 
    139139 
     140    /* 
    140141    info("Dumping lastmods."); 
    141142    di.open(); 
    142143    new DumpDbLastmods(globals).dumpSection(di.getDbLastmods()); 
    143144    di.close(); 
     145    */ 
    144146 
    145147    tagEnd(dumpTag); 
  • trunk/calendar3/dumprestore/src/org/bedework/dumprestore/dump/dumpling/DumpCalendars.java

    r49 r50  
    8181    taggedVal("calendarCollection", val.getCalendarCollection()); 
    8282 
    83     BwCalendar p = val.getCalendar(); 
    84  
    85     if (p != null) { 
    86       taggedVal("parent", p.getId()); 
    87     } 
    88  
    8983    tagEnd(objectCalendar); 
    9084 
  • trunk/calendar3/dumprestore/src/org/bedework/dumprestore/dump/dumpling/DumpUserPrefs.java

    r49 r50  
    6969    tagStart(objectUserPrefs); 
    7070 
    71     taggedVal("id", p.getId()); 
    72     taggedVal("owner", p.getOwner()); 
     71    ownedEntityTags(p); 
    7372 
    7473    Collection s = p.getSubscriptions(); 
  • trunk/calendar3/dumprestore/src/org/bedework/dumprestore/dump/dumpling/DumpUsers.java

    r49 r50  
    7373  } 
    7474} 
    75  
  • trunk/calendar3/dumprestore/src/org/bedework/dumprestore/dump/dumpling/Dumpling.java

    r49 r50  
    5555 
    5656import org.bedework.calfacade.BwDateTime; 
     57import org.bedework.calfacade.BwGroup; 
    5758import org.bedework.calfacade.BwPrincipal; 
     59import org.bedework.calfacade.BwUser; 
    5860import org.bedework.calfacade.base.BwDbentity; 
    5961import org.bedework.calfacade.base.BwOwnedDbentity; 
     
    6466 
    6567import java.io.Writer; 
     68import java.util.Collection; 
    6669import java.util.Iterator; 
    6770 
     
    161164  } 
    162165 
     166  protected void groupTags(BwGroup val) throws Throwable { 
     167    principalTags(val); 
     168    tagStart("groupMembers"); 
     169 
     170    Collection mbrs = val.getGroupMembers(); 
     171    Iterator mbrsi = mbrs.iterator(); 
     172 
     173    while (mbrsi.hasNext()) { 
     174      BwPrincipal pr = (BwPrincipal)mbrsi.next(); 
     175 
     176      if (pr instanceof BwUser) { 
     177        taggedVal("groupMemberId", pr.getId()); 
     178      } else { 
     179        taggedVal("groupMemberGroupId", pr.getId()); 
     180      } 
     181    } 
     182 
     183    tagEnd("groupMembers"); 
     184  } 
     185 
    163186  protected void shareableEntityTags(BwShareableDbentity entity) throws Throwable { 
    164187    ownedEntityTags(entity); 
     
    173196 
    174197    taggedEntityId("calendar", entity.getCalendar()); 
    175     taggedVal("access", entity.getAccess()); 
    176198  } 
    177199 
  • trunk/calendar3/dumprestore/src/org/bedework/dumprestore/restore/HibRestore.java

    r48 r50  
    5656 
    5757import org.bedework.calcore.hibernate.HibSession; 
     58import org.bedework.calfacade.BwAlarm; 
    5859import org.bedework.calfacade.BwCalendar; 
    5960import org.bedework.calfacade.BwCategory; 
     
    6768import org.bedework.calfacade.BwUser; 
    6869import org.bedework.calfacade.BwUserInfo; 
     70import org.bedework.calfacade.CalFacadeDefs; 
    6971import org.bedework.calfacade.filter.BwFilter; 
    7072import org.bedework.calfacade.svc.BwAdminGroup; 
     
    7274import org.bedework.calfacade.svc.BwAuthUser; 
    7375import org.bedework.calfacade.svc.BwPreferences; 
     76import org.bedework.calfacade.svc.BwSubscription; 
     77import org.bedework.calfacade.svc.BwView; 
    7478import org.bedework.dumprestore.BwDbLastmod; 
    7579 
     
    286290    ps.close(); 
    287291 
    288     if (!globals.from2p3px) { 
     292    /* 
    289293      ps = conn.prepareStatement("delete from lastmods"); 
    290294      ps.executeUpdate(); 
    291295      ps.close(); 
    292     } 
     296      */ 
    293297 
    294298    ps = conn.prepareStatement("SET REFERENTIAL_INTEGRITY TRUE"); 
     
    325329   */ 
    326330  public void restoreUser(BwUser o) throws Throwable { 
    327     openSess(); 
    328  
    329     sess.save(o, new Integer(o.getId())); 
    330  
    331     closeSess(); 
     331    try { 
     332      openSess(); 
     333 
     334      sess.save(o, new Integer(o.getId())); 
     335 
     336      closeSess(); 
     337    } catch (Throwable t) { 
     338      log.error("Exception restoring user " + o); 
     339      throw t; 
     340    } 
    332341  } 
    333342 
     
    504513 
    505514  public void restoreUserPrefs(BwPreferences o) throws Throwable { 
     515    openSess(); 
     516 
     517    /* Unset the subscription id - hibernate cascades cause an error 
     518     * We'll just have to go with a new id 
     519     */ 
     520    Iterator it = o.iterateSubscriptions(); 
     521    while (it.hasNext()) { 
     522      BwSubscription sub = (BwSubscription)it.next(); 
     523      sub.setId(CalFacadeDefs.unsavedItemKey); 
     524 
     525      globals.subscriptions++; 
     526    } 
     527 
     528    /* Same for views */ 
     529    it = o.iterateViews(); 
     530    while (it.hasNext()) { 
     531      BwView view = (BwView)it.next(); 
     532      view.setId(CalFacadeDefs.unsavedItemKey); 
     533 
     534      globals.views++; 
     535    } 
     536 
     537    sess.save(o, new Integer(o.getId())); 
     538 
     539    closeSess(); 
     540  } 
     541 
     542  public void restoreAlarm(BwAlarm o) throws Throwable { 
    506543    openSess(); 
    507544 
     
    573610  } 
    574611 
     612  /* We cannot use hibernate to set the db id here as the save will cascade 
     613   * down all the children. 
     614   * 
     615   * <p>We save a skeleton copy of the calendar structure using direct jdbc 
     616   * calls then update the structure with hibernate. 
     617   */ 
     618  public void restoreCalendar(BwCalendar o) throws Throwable { 
     619    openSess(); 
     620 
     621    restoreCalendar(o, sess.connection()); 
     622 
     623    closeSess(); 
     624  } 
     625 
    575626  /* ==================================================================== 
    576627   *                       Private methods 
     
    578629 
    579630  private void restoreCalendars(BwCalendar val, Connection conn) throws Throwable { 
     631    restoreCalendar(val, conn); 
     632 
     633    Collection cals = val.getChildren(); 
     634    if (cals == null) { 
     635      return; 
     636    } 
     637 
     638    Iterator it = cals.iterator(); 
     639 
     640    while (it.hasNext()) { 
     641      BwCalendar cal = (BwCalendar)it.next(); 
     642 
     643      restoreCalendars(cal, conn); 
     644    } 
     645  } 
     646 
     647  /* Restore a single calendar. Don't restore children 
     648   */ 
     649  private void restoreCalendar(BwCalendar val, Connection conn) throws Throwable { 
    580650    PreparedStatement ps = null; 
    581651 
     
    619689        ps.close(); 
    620690      } 
    621     } 
    622  
    623     Collection cals = val.getChildren(); 
    624     if (cals == null) { 
    625       return; 
    626     } 
    627  
    628     Iterator it = cals.iterator(); 
    629  
    630     while (it.hasNext()) { 
    631       BwCalendar cal = (BwCalendar)it.next(); 
    632  
    633       restoreCalendars(cal, conn); 
    634691    } 
    635692  } 
  • trunk/calendar3/dumprestore/src/org/bedework/dumprestore/restore/Restore.java

    r48 r50  
    5454package org.bedework.dumprestore.restore; 
    5555 
    56 import org.bedework.appcommon.TimeZonesParser; 
    5756import org.bedework.calfacade.BwCalendar; 
    5857import org.bedework.calfacade.BwUser; 
     
    6463import org.bedework.dumprestore.restore.rules.RestoreRuleSet; 
    6564 
    66 import java.io.FileInputStream; 
    6765import java.io.FileReader; 
    6866import java.util.Collection; 
     
    128126    } 
    129127 
    130     globals.timezones = new TimezonesImpl(globals.debug, 
    131                                           globals.getPublicUser(), 
    132                                           globals.rintf); 
    133     globals.timezones.setDefaultTimeZoneId(globals.syspars.getTzid()); 
    134  
    135128    if (globals.from2p3px) { 
    136129      // System prefs are set up by run time pars 
    137130 
    138131      globals.rintf.restoreSyspars(globals.syspars); 
    139     } 
    140  
    141     if (globals.timezonesFilename != null) { 
    142       TimeZonesParser tzp = new TimeZonesParser( 
    143              new FileInputStream(globals.timezonesFilename), 
    144              globals.debug); 
    145  
    146       Collection tzis = tzp.getTimeZones(); 
    147  
    148       Iterator it = tzis.iterator(); 
    149       while (it.hasNext()) { 
    150         TimeZonesParser.TimeZoneInfo tzi = (TimeZonesParser.TimeZoneInfo)it.next(); 
    151  
    152         globals.timezones.saveTimeZone(tzi.tzid, tzi.timezone); 
    153       } 
    154132    } 
    155133  } 
     
    285263 
    286264    for (int i = 0; i < args.length; i++) { 
    287       if (args[i].equals("-debug")) { 
     265      if (args[i].equals("")) { 
     266        // null arg generated by ant 
     267      } else if (args[i].equals("-debug")) { 
    288268        globals.debug = true; 
    289269      } else if (args[i].equals("-ndebug")) { 
     
    386366        globals.syspars.setUsergroupsClass(args[i]); 
    387367      } else { 
    388         error("Illegal argument: " + args[i]); 
     368        error("Illegal argument: '" + args[i] + "'"); 
    389369        usage(); 
    390370        return false; 
  • trunk/calendar3/dumprestore/src/org/bedework/dumprestore/restore/RestoreGlobals.java

    r48 r50  
    5454package org.bedework.dumprestore.restore; 
    5555 
     56import org.bedework.appcommon.TimeZonesParser; 
    5657import org.bedework.calfacade.BwAttendee; 
     58import org.bedework.calfacade.BwEvent; 
     59import org.bedework.calfacade.BwEventAlarm; 
    5760import org.bedework.calfacade.BwEventAnnotation; 
     61import org.bedework.calfacade.BwEventObj; 
    5862import org.bedework.calfacade.BwGroup; 
    5963import org.bedework.calfacade.BwCalendar; 
     
    6367import org.bedework.calfacade.BwSponsor; 
    6468import org.bedework.calfacade.BwSystem; 
     69import org.bedework.calfacade.BwTimeZone; 
     70import org.bedework.calfacade.BwTodoAlarm; 
    6571import org.bedework.calfacade.BwUser; 
    6672import org.bedework.calfacade.BwUserInfo; 
     73import org.bedework.calfacade.filter.BwAndFilter; 
     74import org.bedework.calfacade.filter.BwCategoryFilter; 
     75import org.bedework.calfacade.filter.BwCreatorFilter; 
    6776import org.bedework.calfacade.filter.BwFilter; 
     77import org.bedework.calfacade.filter.BwLocationFilter; 
     78import org.bedework.calfacade.filter.BwNotFilter; 
     79import org.bedework.calfacade.filter.BwOrFilter; 
     80import org.bedework.calfacade.filter.BwSponsorFilter; 
    6881import org.bedework.calfacade.ifs.CalTimezones; 
    6982import org.bedework.calfacade.svc.BwAdminGroup; 
     83import org.bedework.calfacade.svc.BwAuthUser; 
     84import org.bedework.calfacade.svc.BwPreferences; 
    7085import org.bedework.calfacade.svc.BwSubscription; 
    7186import org.bedework.calfacade.svc.BwView; 
     87import org.bedework.dumprestore.BwDbLastmod; 
    7288 
    7389import edu.rpi.cct.uwcal.access.Access; 
     
    7591import edu.rpi.cct.uwcal.access.Acl; 
    7692 
     93import java.io.FileInputStream; 
    7794import java.util.Collection; 
    7895import java.util.HashMap; 
     
    116133  */ 
    117134 
    118   /** */ 
    119   public CalTimezones timezones
     135  /* Used when processing timezones */ 
     136  private CalTimezones tzcache
    120137 
    121138  /** True if we doing the conversion from 2.3.2 to V3 */ 
     
    164181 
    165182  /** For each of these we update events to have the appropriate calendar id. 
    166    * Any event which already has a calendar id turned up in tow calendars. 
     183   * Any event which already has a calendar id turned up in two calendars. 
    167184   */ 
    168185  public Vector calLeaves = new Vector(); 
     
    181198  /** counter */ 
    182199  public int filters; 
     200 
    183201  /** counter */ 
    184202  public int users; 
    185203 
    186204  /** counter */ 
     205  public int timezones; 
     206 
     207  /** counter */ 
    187208  public int subscribedUsers; 
    188209 
    189210  /** counter */ 
     211  public int calendars; 
     212 
     213  /** counter */ 
    190214  public int subscriptions; 
    191215 
    192216  /** counter */ 
     217  public int views; 
     218 
     219  /** counter */ 
    193220  public int locations; 
    194221 
     
    218245  /** counter */ 
    219246  public int adminGroups; 
     247 
    220248  /** counter */ 
    221249  public int userPrefs; 
     250 
     251  /** counter */ 
     252  public int alarms; 
    222253 
    223254  /** counter */ 
     
    532563 
    533564  /** */ 
    534   public HashMap calendars = new HashMap(); 
     565  public HashMap calendarsTbl = new HashMap(); 
    535566 
    536567  /** Subscription we are currently restoring */ 
     
    540571  public BwView curView; 
    541572 
    542   /** Link tag-name to calendar class 
    543    */ 
    544   public static final HashMap classes = new HashMap(); 
    545  
    546573  /** Classes to stand in for 2.3.2 classes */ 
    547574  public static class AliasFilter extends BwFilter { 
    548575  } 
    549576 
     577  /** Link tag-name to calendar class. For every entity tag generated by the dump 
     578   * there should be an entry in this table. 
     579   */ 
     580  public static final HashMap classes = new HashMap(); 
     581 
    550582  static { 
    551     classes.put("aliasFilter", "org.bedework.dumprestore.restore.RestoreGlobals$AliasFilter"); 
    552     classes.put("andFilter", "org.bedework.calfacade.filter.BwAndFilter"); 
    553     classes.put("creatorFilter", "org.bedework.calfacade.filter.BwCreatorFilter"); 
    554     classes.put("keyFilter", "org.bedework.calfacade.filter.BwCategoryFilter"); 
    555     classes.put("locationFilter", "org.bedework.calfacade.filter.BwLocationFilter"); 
    556     classes.put("notFilter", "org.bedework.calfacade.filter.BwNotFilter"); 
    557     classes.put("orFilter", "org.bedework.calfacade.filter.BwOrFilter"); 
    558     classes.put("sponsorFilter", "org.bedework.calfacade.filter.BwSponsorFilter"); 
    559  
    560     classes.put("user", "org.bedework.calfacade.BwUser"); 
    561     classes.put("location", "org.bedework.calfacade.BwLocation"); 
    562     classes.put("sponsor", "org.bedework.calfacade.BwSponsor"); 
    563     classes.put("organizer", "org.bedework.calfacade.BwOrganizer"); 
    564     classes.put("attendee", "org.bedework.calfacade.BwAttendee"); 
    565     classes.put("alarm", "org.bedework.calfacade.BwAlarm"); 
    566     classes.put("keyword", "org.bedework.calfacade.BwCategory"); 
    567     classes.put("category", "org.bedework.calfacade.BwCategory"); 
    568     classes.put("authuser", "org.bedework.calfacade.svc.BwAuthUser"); 
    569     classes.put("event", "org.bedework.calfacade.BwEventObj"); 
    570     classes.put("adminGroup", "org.bedework.calfacade.svc.BwAdminGroup"); 
    571     classes.put("user-prefs", "org.bedework.calfacade.svc.BwPreferences"); 
    572     classes.put("dblastmod", "org.bedework.dumprestore.BwDbLastmod"); 
     583    classes.put("aliasFilter", AliasFilter.class.getName()); 
     584    classes.put("andFilter", BwAndFilter.class.getName()); 
     585    classes.put("creatorFilter", BwCreatorFilter.class.getName()); 
     586    classes.put("keyFilter", BwCategoryFilter.class.getName()); 
     587    classes.put("locationFilter", BwLocationFilter.class.getName()); 
     588    classes.put("notFilter", BwNotFilter.class.getName()); 
     589    classes.put("orFilter", BwOrFilter.class.getName()); 
     590    classes.put("sponsorFilter", BwSponsorFilter.class.getName()); 
     591 
     592    classes.put("system", BwSystem.class.getName()); 
     593    classes.put("user", BwUser.class.getName()); 
     594    classes.put("timezone", BwTimeZone.class.getName()); 
     595    classes.put("calendar", BwCalendar.class.getName()); 
     596    classes.put("location", BwLocation.class.getName()); 
     597    classes.put("sponsor", BwSponsor.class.getName()); 
     598    classes.put("organizer", BwOrganizer.class.getName()); 
     599    classes.put("attendee", BwAttendee.class.getName()); 
     600    classes.put("event-alarm", BwEventAlarm.class.getName()); 
     601    classes.put("todo-alarm", BwTodoAlarm.class.getName()); 
     602    classes.put("keyword", BwCategory.class.getName()); 
     603    classes.put("category", BwCategory.class.getName()); 
     604    classes.put("authuser", BwAuthUser.class.getName()); 
     605    classes.put("event", BwEventObj.class.getName()); 
     606    classes.put("adminGroup", BwAdminGroup.class.getName()); 
     607    classes.put("user-prefs", BwPreferences.class.getName()); 
     608    classes.put("dblastmod", BwDbLastmod.class.getName()); 
    573609 
    574610    /* 2.3.2 */ 
    575     classes.put("eventRef", "org.bedework.calfacade.BwEvent"); 
     611    classes.put("eventRef", BwEvent.class.getName()); 
    576612  } 
    577613 
     
    580616 
    581617  RestoreGlobals() { 
     618  } 
     619 
     620  /** This must be called after syspars has been initialised. 
     621   * 
     622   * @return CalTimezones object 
     623   * @throws Throwable 
     624   */ 
     625  public CalTimezones getTzcache() throws Throwable { 
     626    if (tzcache != null) { 
     627      return tzcache; 
     628    } 
     629 
     630    if (syspars.getTzid() == null) { 
     631      throw new Exception("syspars.tzid not initialised"); 
     632    } 
     633 
     634    tzcache = new TimezonesImpl(debug, getPublicUser(), rintf); 
     635    tzcache.setDefaultTimeZoneId(syspars.getTzid()); 
     636 
     637    if (timezonesFilename != null) { 
     638      TimeZonesParser tzp = new TimeZonesParser( 
     639             new FileInputStream(timezonesFilename), 
     640             debug); 
     641 
     642      Collection tzis = tzp.getTimeZones(); 
     643 
     644      Iterator it = tzis.iterator(); 
     645      while (it.hasNext()) { 
     646        TimeZonesParser.TimeZoneInfo tzi = (TimeZonesParser.TimeZoneInfo)it.next(); 
     647 
     648        tzcache.saveTimeZone(tzi.tzid, tzi.timezone); 
     649      } 
     650    } 
     651 
     652    return tzcache; 
    582653  } 
    583654 
     
    739810  public void stats() { 
    740811    System.out.println("              users: " + users); 
     812    System.out.println("          timezones: " + timezones); 
    741813    System.out.println("    subscribedUsers: " + subscribedUsers); 
     814    System.out.println("          calendars: " + calendars); 
    742815    System.out.println("      subscriptions: " + subscriptions); 
     816    System.out.println("              views: " + views); 
    743817    System.out.println("          locations: " + locations); 
    744818    System.out.println("           sponsors: " + sponsors); 
     
    753827    System.out.println("        adminGroups: " + adminGroups); 
    754828    System.out.println("          userPrefs: " + userPrefs); 
     829    System.out.println("             alarms: " + alarms); 
    755830    System.out.println(" "); 
    756831    System.out.println("    Fixed end times: " + fixedNoEndTime); 
  • trunk/calendar3/dumprestore/src/org/bedework/dumprestore/restore/RestoreIntf.java

    r48 r50  
    5454package org.bedework.dumprestore.restore; 
    5555 
     56import org.bedework.calfacade.BwAlarm; 
    5657import org.bedework.calfacade.BwCalendar; 
    5758import org.bedework.calfacade.BwCategory; 
     
    213214  public void restoreUserPrefs(BwPreferences o) throws Throwable; 
    214215 
     216  /** Restore alarm 
     217   * 
     218   * @param o   Object to restore with id set 
     219   * @throws Throwable 
     220   */ 
     221  public void restoreAlarm(BwAlarm o) throws Throwable; 
     222 
    215223  /** Update user. 
    216224   * 
     
    240248   */ 
    241249  public void restoreCalendars(BwCalendar val) throws Throwable; 
     250 
     251  /** Restore a single calendar 
     252   * 
     253   * @param val 
     254   * @throws Throwable 
     255   */ 
     256  public void restoreCalendar(BwCalendar val) throws Throwable; 
    242257} 
    243258 
  • trunk/calendar3/dumprestore/src/org/bedework/dumprestore/restore/rules/AdminGroupFieldRule.java

    r49 r50  
    6969    BwAdminGroup ag = (BwAdminGroup)top(); 
    7070 
    71     if (name.equals("groupname")) { 
     71    if (groupTags(ag, name)) { 
     72      return; 
     73    } 
     74 
     75    if (name.equals("groupname")) {    // 2.3.2 
    7276      ag.setAccount(stringFld()); 
    7377    } else if (name.equals("description")) { 
     
    7781    } else if (name.equals("ownerid")) { 
    7882      ag.setOwner(userFld()); 
    79     } else if (name.equals("groupMemberId")) { 
    80       ag.addGroupMember(userFld()); 
    81     } else if (name.equals("groupMemberGroupId")) { 
    82       ag.addGroupMember(groupFld()); 
     83    } else if (name.equals("groupMembers")) { 
     84    } else { 
     85      unknownTag(name); 
    8386    } 
    8487  } 
  • trunk/calendar3/dumprestore/src/org/bedework/dumprestore/restore/rules/CategoryFieldRule.java

    r49 r50  
    6666  } 
    6767 
    68   public void field(String name) throws java.lang.Exception
     68  public void field(String name) throws Exception
    6969    BwCategory cat = (BwCategory)top(); 
    7070 
    71     if (name.equals("id")) { 
    72       cat.setId(intFld()); 
    73     } else if (name.equals("creator")) { 
    74       cat.setCreator(userFld()); 
    75     } else if (name.equals("owner")) { 
    76       cat.setOwner(userFld()); 
    77     } else if (name.equals("access")) { 
    78       cat.setAccess(stringFld()); 
    79     } else if (name.equals("public")) { 
    80       cat.setPublick(booleanFld()); 
    81     } else if (name.equals("word")) { 
     71    if (shareableEntityTags(cat, name)) { 
     72      return; 
     73    } 
     74 
     75    if (name.equals("word")) { 
    8276      cat.setWord(stringFld()); 
    8377    } else if (name.equals("description")) { 
    8478      cat.setDescription(stringFld()); 
     79    } else { 
     80      unknownTag(name); 
    8581    } 
    8682  } 
    8783} 
    88  
  • trunk/calendar3/dumprestore/src/org/bedework/dumprestore/restore/rules/EntityFieldRule.java

    r49 r50  
    6060import org.bedework.calfacade.BwLocation; 
    6161import org.bedework.calfacade.BwOrganizer; 
     62import org.bedework.calfacade.BwPrincipal; 
    6263import org.bedework.calfacade.BwSponsor; 
    6364import org.bedework.calfacade.BwUser; 
     65import org.bedework.calfacade.base.BwDbentity; 
     66import org.bedework.calfacade.base.BwOwnedDbentity; 
     67import org.bedework.calfacade.base.BwShareableContainedDbentity; 
     68import org.bedework.calfacade.base.BwShareableDbentity; 
    6469import org.bedework.calfacade.filter.BwFilter; 
    6570import org.bedework.dumprestore.restore.RestoreGlobals; 
     
    8590  public abstract void field(String name) throws Exception; 
    8691 
     92  protected void unknownTag(String name) throws Exception { 
     93    throw new Exception("Unknown tag " + name); 
     94  } 
     95 
     96  protected boolean principalTags(BwPrincipal entity, 
     97                     String name) throws Exception { 
     98    if (taggedEntityId(entity, name)) { 
     99      return true; 
     100    } 
     101 
     102    if (name.equals("account")) { 
     103      entity.setAccount(stringFld()); 
     104      return true; 
     105    } 
     106 
     107    if (name.equals("created")) { 
     108      entity.setCreated(timestampFld()); 
     109      return true; 
     110    } 
     111 
     112    if (name.equals("logon")) { 
     113      entity.setLogon(timestampFld()); 
     114      return true; 
     115    } 
     116 
     117    if (name.equals("lastAccess")) { 
     118      entity.setLastAccess(timestampFld()); 
     119      return true; 
     120    } 
     121 
     122    if (name.equals("lastModify")) { 
     123      entity.setLastModify(timestampFld()); 
     124      return true; 
     125    } 
     126 
     127    if (name.equals("category-access")) { 
     128      entity.setCategoryAccess(stringFld()); 
     129      return true; 
     130    } 
     131 
     132    if (name.equals("location-access")) { 
     133      entity.setLocationAccess(stringFld()); 
     134      return true; 
     135    } 
     136 
     137    if (name.equals("sponsor-access")) { 
     138      entity.setSponsorAccess(stringFld()); 
     139      return true; 
     140    } 
     141 
     142    return false; 
     143  } 
     144 
     145  protected boolean groupTags(BwGroup entity, 
     146                              String name) throws Exception { 
     147    if (principalTags(entity, name)) { 
     148      return true; 
     149    } 
     150 
     151    if (name.equals("groupMemberId")) { 
     152      entity.addGroupMember(userFld()); 
     153      return true; 
     154    } 
     155 
     156    if (name.equals("groupMemberGroupId")) { 
     157      entity.addGroupMember(groupFld()); 
     158      return true; 
     159    } 
     160 
     161 
     162    return false; 
     163  } 
     164 
     165  protected boolean shareableContainedEntityTags(BwShareableContainedDbentity entity, 
     166                     String name) throws Exception { 
     167    if (shareableEntityTags(entity, name)) { 
     168      return true; 
     169    } 
     170 
     171    if (name.equals("calendar")) { 
     172      entity.setCalendar(calendarFld()); 
     173      return true; 
     174    } 
     175 
     176    return false; 
     177  } 
     178 
     179  protected boolean shareableEntityTags(BwShareableDbentity entity, 
     180                                        String name) throws Exception { 
     181    if (ownedEntityTags(entity, name)) { 
     182      return true; 
     183    } 
     184 
     185    if (name.equals("creator")) { 
     186      entity.setCreator(userFld()); 
     187      return true; 
     188    } 
     189 
     190    if (name.equals("access")) { 
     191      entity.setAccess(stringFld()); 
     192      return true; 
     193    } 
     194 
     195    return false; 
     196  } 
     197 
     198  protected boolean ownedEntityTags(BwOwnedDbentity entity, 
     199                                    String name) throws Exception { 
     200    if (taggedEntityId(entity, name)) { 
     201      return true; 
     202    } 
     203 
     204    if (name.equals("owner")) { 
     205      entity.setOwner(userFld()); 
     206      return true; 
     207    } 
     208 
     209    if (name.equals("public")) { 
     210      entity.setPublick(booleanFld()); 
     211      return true; 
     212    } 
     213 
     214    return false; 
     215  } 
     216 
     217  protected boolean taggedEntityId(BwDbentity entity, 
     218                                   String name) throws Exception { 
     219    if (name.equals("id")) { 
     220      entity.setId(intFld()); 
     221      return true; 
     222    } 
     223 
     224    if (name.equals("seq")) { 
     225      entity.setSeq(intFld()); 
     226      return true; 
     227    } 
     228 
     229    return false; 
     230  } 
     231 
    87232  public void body(String namespace, String name, String text) 
    88       throws java.lang.Exception
     233      throws Exception
    89234    /* 
    90235    if (globals.debug) { 
     
    107252    } 
    108253 
    109     /** Date should be of form yyyy-MM-dd, convert to yyyyMMdd 
    110      */ 
    111  
    112     if ((fldval.length() != 10) || 
    113         (fldval.charAt(4) != '-') || 
    114         (fldval.charAt(7) != '-')) { 
    115       throw new Exception("Bad value " + fldval + " for " + tagName); 
    116     } 
    117  
    118     String dtval = fldval.substring(0, 4) + fldval.substring(5, 7) + 
    119                    fldval.substring(8, 10); 
    120  
    121     BwDateTime dtim = new BwDateTime(); 
    122     dtim.init(true, dtval, null, globals.timezones); 
    123  
    124     return dtim; 
     254    try { 
     255      /** Date should be of form yyyy-MM-dd, convert to yyyyMMdd 
     256       */ 
     257 
     258      if ((fldval.length() != 10) || 
     259          (fldval.charAt(4) != '-') || 
     260          (fldval.charAt(7) != '-')) { 
     261        throw new Exception("Bad value " + fldval + " for " + tagName); 
     262      } 
     263 
     264      String dtval = fldval.substring(0, 4) + fldval.substring(5, 7) + 
     265      fldval.substring(8, 10); 
     266 
     267      BwDateTime dtim = new BwDateTime(); 
     268      dtim.init(true, dtval, null, globals.getTzcache()); 
     269 
     270      return dtim; 
     271    } catch (Throwable t) { 
     272      throw new Exception(t); 
     273    } 
    125274  } 
    126275 
     
    131280    } 
    132281 
    133     if (val == null) { 
    134       throw new Exception("No date for " + tagName); 
    135     } 
    136  
    137     /** Time should be of form hh:mm:ss, convert to Thhmmss 
    138      */ 
    139  
    140     if ((fldval.length() != 8) || 
    141         (fldval.charAt(2) != ':') || 
    142         (fldval.charAt(5) != ':')) { 
    143       throw new Exception("Bad value " + fldval + " for " + tagName); 
    144     } 
    145  
    146     String tmval = "T" + fldval.substring(0, 2) + fldval.substring(3, 5) + 
    147                    fldval.substring(6, 8); 
    148  
    149     /* XXX We need to handle timezones here as well */ 
    150     val.init(false, val.getDtval() + tmval, 
    151              globals.syspars.getTzid(), globals.timezones); 
     282    try { 
     283      if (val == null) { 
     284        throw new Exception("No date for " + tagName); 
     285      } 
     286 
     287      /** Time should be of form hh:mm:ss, convert to Thhmmss 
     288       */ 
     289 
     290      if ((fldval.length() != 8) || 
     291          (fldval.charAt(2) != ':') || 
     292          (fldval.charAt(5) != ':')) { 
     293        throw new Exception("Bad value " + fldval + " for " + tagName); 
     294      } 
     295 
     296      String tmval = "T" + fldval.substring(0, 2) + fldval.substring(3, 5) + 
     297      fldval.substring(6, 8); 
     298 
     299      /* XXX We need to handle timezones here as well */ 
     300      val.init(false, val.getDtval() + tmval, 
     301          globals.syspars.getTzid(), globals.getTzcache()); 
     302    } catch (Throwable t) { 
     303      throw new Exception(t); 
     304    } 
    152305  } 
    153306 
     
    184337    } 
    185338 
    186     BwDateTime dtim = new BwDateTime(); 
    187     dtim.init(false, fldval, null, globals.timezones); 
    188  
    189     return dtim; 
     339    try { 
     340      BwDateTime dtim = new BwDateTime(); 
     341      dtim.init(false, fldval, null, globals.getTzcache()); 
     342 
     343      return dtim; 
     344    } catch (Throwable t) { 
     345      throw new Exception(t); 
     346    } 
    190347  } 
    191348 
     
    216373    int id = Integer.parseInt(fldval); 
    217374 
    218     return (BwCalendar)globals.calendars.get(new Integer(id)); 
     375    return (BwCalendar)globals.calendarsTbl.get(new Integer(id)); 
    219376  } 
    220377 
  • trunk/calendar3/dumprestore/src/org/bedework/dumprestore/restore/rules/EventFieldRule.java

    r49 r50  
    7373    BwEvent e = (BwEvent)top(); 
    7474 
    75     if (name.equals("id")) { 
    76       e.setId(intFld()); 
     75    if (shareableContainedEntityTags(e, name)) { 
     76      return; 
     77    } 
    7778 
    7879    /* pre-hibernate fields */ 
    79     } else if (name.equals("lastmod")) { // pre-hibernate 
     80    if (name.equals("lastmod")) { // pre-hibernate 
    8081      e.setLastmod(isoDateTimeFld()); 
    8182    } else if (name.equals("created")) {  // pre-hibernate 
     
    117118    } else if (name.equals("cost")) { 
    118119      e.setCost(stringFld()); 
    119     } else if (name.equals("creator")) { 
    120       e.setCreator(userFld()); 
    121120    } else if (name.equals("create-date")) { 
    122121      e.setCreated(stringFld()); 
     
    151150    } else if (name.equals("organizer")) { 
    152151      e.setOrganizer(organizerFld()); 
    153     } else if (name.equals("public")) { 
    154       e.setPublick(booleanFld()); 
    155     } else if (name.equals("seq")) { 
    156       e.setSeq(intFld()); 
    157152    } else if (name.equals("sequence")) { 
    158153      e.setSequence(intFld()); 
     
    181176      // Nothing to do. 
    182177    } else { 
    183       warn("Unknown event field " + name); 
     178      unknownTag(name); 
    184179    } 
    185180  } 
  • trunk/calendar3/dumprestore/src/org/bedework/dumprestore/restore/rules/EventRule.java

    r49 r50  
    154154 
    155155          /* Increment the end by one day to take account of current practice */ 
    156           end = end.getNextDay(globals.timezones); 
     156          end = end.getNextDay(globals.getTzcache()); 
    157157          entity.setDtend(end); 
    158158        } else if (!end.getDateType()) { 
     
    179179               " end = " + end); 
    180180 
    181           end.init(start.getDateType(), start.getDtval(), null, globals.timezones); 
     181          end.init(start.getDateType(), start.getDtval(), null, 
     182                   globals.getTzcache()); 
    182183        } 
    183184 
  • trunk/calendar3/dumprestore/src/org/bedework/dumprestore/restore/rules/FilterRule.java

    r49 r50  
    146146          globals.nextCalKey++; 
    147147 
    148           globals.calendars.put(new Integer(cal.getId()), cal); 
     148          globals.calendarsTbl.put(new Integer(cal.getId()), cal); 
    149149 
    150150          if (entity.getParent() != null) { 
  • trunk/calendar3/dumprestore/src/org/bedework/dumprestore/restore/rules/FiltersRule.java

    r49 r50  
    145145    ucal.addChild(cal); 
    146146 
    147     globals.calendars.put(new Integer(cal.getId()), cal); 
     147    globals.calendarsTbl.put(new Integer(cal.getId()), cal); 
    148148 
    149149    globals.defaultCalendars.put(new Integer(u.getId()), cal); 
  • trunk/calendar3/dumprestore/src/org/bedework/dumprestore/restore/rules/LocationFieldRule.java

    r49 r50  
    6969    BwLocation l = (BwLocation)top(); 
    7070 
    71     if (name.equals("id")) { 
    72       l.setId(intFld()); 
    73     } else if (name.equals("creator")) { 
    74       l.setCreator(userFld()); 
    75     } else if (name.equals("owner")) { 
    76       l.setOwner(userFld()); 
    77     } else if (name.equals("access")) { 
    78       l.setAccess(stringFld()); 
    79     } else if (name.equals("public")) { 
    80       l.setPublick(booleanFld()); 
    81     } else if (name.equals("address")) { 
     71    if (shareableEntityTags(l, name)) { 
     72      return; 
     73    } 
     74 
     75    if (name.equals("address")) { 
    8276      l.setAddress(stringFld()); 
    8377    } else if (name.equals("subaddress")) { 
     
    8579    } else if (name.equals("link")) { 
    8680      l.setLink(stringFld()); 
     81    } else { 
     82      unknownTag(name); 
    8783    } 
    8884  } 
  • trunk/calendar3/dumprestore/src/org/bedework/dumprestore/restore/rules/OrganizerFieldRule.java

    r49 r50  
    6969    BwOrganizer ent = (BwOrganizer)top(); 
    7070 
    71     if (name.equals("orgid")) { 
    72       ent.setId(intFld()); 
    73     } else if (name.equals("cn")) { 
     71    if (taggedEntityId(ent, name)) { 
     72      return; 
     73    } 
     74 
     75    if (name.equals("cn")) { 
    7476      ent.setCn(stringFld()); 
    7577    } else if (name.equals("dir")) { 
     
    8385    } else if (name.equals("orgseq")) { 
    8486      ent.setSeq(intFld()); 
     87    } else { 
     88      unknownTag(name); 
    8589    } 
    8690  } 
  • trunk/calendar3/dumprestore/src/org/bedework/dumprestore/restore/rules/RestoreRuleSet.java

    r49 r50  
    7676 
    7777  public void addRuleInstances(Digester d) { 
     78    d.addRule("caldata/syspars/system", new SysparsRule(globals)); 
     79    d.addRule("caldata/syspars/system/*", new SysparsFieldRule(globals)); 
     80 
    7881    UserFieldRule ufr = new UserFieldRule(globals); 
    7982    d.addRule("caldata/users/user", new UserRule(globals)); 
    8083    d.addRule("caldata/users/user/*", ufr); 
     84 
     85    d.addRule("caldata/timezones/timezone", new TimeZoneRule(globals)); 
     86    d.addRule("caldata/timezones/timezone/*", new TimeZoneFieldRule(globals)); 
     87 
     88    d.addRule("caldata/calendars/calendar", new CalendarRule(globals)); 
     89    d.addRule("caldata/calendars/calendar/*", new CalendarFieldRule(globals)); 
    8190 
    8291    d.addRule("caldata/locations/location", new LocationRule(globals)); 
     
    122131    d.addRule("caldata/events/event/*", efr); 
    123132 
     133    AlarmRule alr = new AlarmRule(globals); 
     134    AlarmFieldRule alfr = new AlarmFieldRule(globals); 
     135    d.addRule("caldata/alarms/event-alarm", alr); 
     136    d.addRule("caldata/alarms/event-alarm/*", alfr); 
     137    d.addRule("caldata/alarms/todo-alarm", alr); 
     138    d.addRule("caldata/alarms/todo-alarm/*", alfr); 
     139 
    124140    FilterRule fr = new FilterRule(globals); 
    125141    d.addRule("caldata/filters/aliasFilter", fr); 
  • trunk/calendar3/dumprestore/src/org/bedework/dumprestore/restore/rules/SponsorFieldRule.java

    r49 r50  
    6969    BwSponsor s = (BwSponsor)top(); 
    7070 
    71     if (name.equals("id")) { 
    72       s.setId(intFld()); 
    73     } else if (name.equals("creator")) { 
    74       s.setCreator(userFld()); 
    75     } else if (name.equals("owner")) { 
    76       s.setOwner(userFld()); 
    77     } else if (name.equals("access")) { 
    78       s.setAccess(stringFld()); 
    79     } else if (name.equals("public")) { 
    80       s.setPublick(booleanFld()); 
    81     } else if (name.equals("name")) { 
     71    if (shareableEntityTags(s, name)) { 
     72      return; 
     73    } 
     74 
     75    if (name.equals("name")) { 
    8276      s.setName(stringFld()); 
    8377    } else if (name.equals("phone")) { 
     
    8781    } else if (name.equals("link")) { 
    8882      s.setLink(stringFld()); 
     83    } else { 
     84      unknownTag(name); 
    8985    } 
    9086  } 
  • trunk/calendar3/dumprestore/src/org/bedework/dumprestore/restore/rules/UserFieldRule.java

    r49 r50  
    6969    BwUser u = (BwUser)top(); 
    7070 
    71     if (name.equals("id")) { 
    72       u.setId(intFld()); 
    73     } else if (name.equals("account")) { 
    74       u.setAccount(stringFld()); 
    75     } else if (name.equals("created")) { 
    76       u.setCreated(timestampFld()); 
    77     } else if (name.equals("logon")) { 
    78       u.setLogon(timestampFld()); 
    79     } else if (name.equals("lastAccess")) { 
    80       u.setLastAccess(timestampFld()); 
    81     } else if (name.equals("lastModify")) { 
    82       u.setLastModify(timestampFld()); 
    83     } else if (name.equals("category-access")) { 
    84       u.setCategoryAccess(stringFld()); 
    85     } else if (name.equals("location-access")) { 
    86       u.setLocationAccess(stringFld()); 
    87     } else if (name.equals("sponsor-access")) { 
    88       u.setSponsorAccess(stringFld()); 
     71    if (principalTags(u, name)) { 
     72      return; 
     73    } 
    8974 
    90     } else if (name.equals("calendarid")) {      // 2.3.2 
     75    if (name.equals("calendarid")) {      // 2.3.2 
    9176      // Fix it later 
    9277      globals.subscriptionsTbl.put(u, intFld()); 
     78    } else { 
     79      unknownTag(name); 
    9380    } 
    9481  } 
    9582} 
    96  
  • trunk/calendar3/dumprestore/src/org/bedework/dumprestore/restore/rules/UserPrefsFieldRule.java

    r49 r50  
    7171    BwPreferences p = (BwPreferences)top(); 
    7272 
    73     if (name.equals("id")) { 
    74       p.setId(intFld())
    75     } else if (name.equals("owner")) { 
    76       p.setOwner(userFld()); 
    77     } else if (name.equals("email")) { 
     73    if (ownedEntityTags(p, name)) { 
     74      return
     75    } 
     76 
     77    if (name.equals("email")) { 
    7878      p.setEmail(stringFld()); 
    7979    } else if (name.equals("default-calendar")) { 
     
    108108      globals.curSub.setName(stringFld()); 
    109109    } else if (name.equals("sub-owner")) { 
    110       if (p.getId() != intFld()) { 
     110      if (p.getOwner().getId() != intFld()) { 
    111111        error("Subscription owners don't match for " + globals.curSub); 
    112112        error("  Found owner id " + intFld() + " expected " + p); 
  • trunk/calendar3/icalendar/src/org/bedework/icalendar/IcalCallback.java

    r2 r50  
    127127  public URIgen getURIgen() throws CalFacadeException; 
    128128 
    129   /** Get the timezones cache object 
     129  /** Get the tzproc cache object 
    130130   * 
    131131   * @return CalTimezones object