Changeset 463

Show
Ignore:
Timestamp:
05/09/06 16:56:37
Author:
douglm
Message:

Mostly Dump/restore changes

Further schema changes - renamed calendar path column to bwpath

alter table CALENDARS alter column path rename to bwpath

Added ownerid column and index and publick to attendees

alter table ATTENDEES add column ownerid int
alter table ATTENDEES add column publick char(1)
CREATE INDEX vattendees_user ON attendees (ownerid)

Changed CalOptions? to support extra classes and fix bugs.

Moved system parameters into xml options.
Moved dump/restore runtime options into xml options.

Removed use of bedework.dumprestore.options file. Multiple files just lead to
confusion and the zipped version will eventually allow overrides as run time
parameters.

Many changes to deployment build files to build dump/restore applications as
zipped runnable packages

Disabled (for the time being at least) the targets which run the dump/restore
applications. For the moment cd into the temp directory and run it, e.g.

cd quickstart/calendar3/temp/shellscr/dumpres/
chmod +x cmd
./cmd restore ~/.bedework/caldata.xml

or unzip the zipped application that is in the dist directory.

The zipped application will handle dump, restore, initdb and has a backup option
to save the data in a file with a date tagged name.

Dump new attendee fields.

Still to do:
Check attendees restored correctly

Ensure all fields are dumped and restored
Use subscription name in view dump instead of id.

Use the event key fields instead of id for annotation target and master.

Not dumping preferred calendars in version3.0 - do so.

Need to set calType in 2.3 restore

EventAnnotations? still need work. target and master need setiing.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/calendar3/bldfiles/buildsh.xml

    r394 r463  
    33<!-- =================================================================== 
    44     This file builds a runnable application wrapped up as a zip file. 
    5      Unpacking the zip shoudl result in a directory containing a shell 
     5     Unpacking the zip should result in a directory containing a shell 
    66     script, a set of jars and any other resources needed. 
    77 
     
    2828    <property name="app.dest.resources" 
    2929              location="${app.dest.home}/resources" /> 
     30    <property name="app.dest.data" 
     31              location="${app.dest.home}/data" /> 
    3032 
    3133    <property name="app.zip.file" 
     
    3941  <target name="build" depends="init"> 
    4042    <filterset id="property.filters" > 
     43      <filter token="BW-APP-NAME" 
     44              value="${org.bedework.deploy.name}"/> 
     45 
    4146      <filter token="HIBERNATE-DIALECT" 
    4247              value="${org.bedework.global.hibernate.dialect}" /> 
     
    4954 
    5055      <filter token="DUMP-CLASS" 
    51               value="org.bedework.tools.dumprestore.dump.Dump"/> 
     56              value="org.bedework.dumprestore.dump.Dump"/> 
    5257      <filter token="RESTORE-CLASS" 
    53               value="org.bedework.tools.dumprestore.restore.Restore"/> 
     58              value="org.bedework.dumprestore.restore.Restore"/> 
    5459 
    5560      <filter token="APP-NAME" 
     
    8893    <copy todir="${app.dest.lib}" flatten="yes" > 
    8994      <fileset refid="org.bedework.run.jars" /> 
    90     </copy> 
    91     <copy todir="${app.dest.lib}" flatten="yes" > 
    9295      <fileset refid="org.bedework.run.lib.jars" /> 
     96 
     97      <!-- local jdbc drivers --> 
     98      <fileset dir="${org.bedework.jdbc.lib}"> 
     99        <include name="*.jar"/> 
     100      </fileset> 
    93101    </copy> 
    94102 
    95     <copy todir="${app.dest.classes}"  > 
     103    <!-- Include the quickstart jdbc driver --> 
     104    <copy todir="${app.dest.lib}" file="${hsqldb.jdbcdriver.jar}"/> 
     105 
     106    <copy todir="${app.dest.classes}"> 
     107      <fileset dir="${org.bedework.core.base}/resources/properties" /> 
     108      <filterset refid="property.filters" /> 
     109    </copy> 
     110 
     111    <copy todir="${app.dest.classes}"> 
     112      <fileset dir="${org.bedework.core.base}/resources/hbms" /> 
     113      <filterset refid="property.filters" /> 
     114    </copy> 
     115 
     116    <copy todir="${app.dest.classes}" overwrite="yes" > 
    96117      <fileset refid="org.bedework.extra.resources" /> 
     118      <filterset refid="property.filters" /> 
    97119    </copy> 
    98120 
     
    118140 
    119141    <!-- =============================================================== 
     142                       Add any data files 
     143         =============================================================== --> 
     144 
     145    <mkdir dir="${app.dest.data}" /> 
     146 
     147    <copy todir="${app.dest.data}" overwrite="yes" > 
     148      <fileset refid="org.bedework.shellscr.data" /> 
     149      <filterset refid="property.filters" /> 
     150    </copy> 
     151 
     152    <!-- =============================================================== 
    120153                       Build the classpath 
    121154         =============================================================== --> 
     
    137170         =============================================================== --> 
    138171 
    139     <copy toDir="${app.dest.home}" 
     172    <copy tofile="${app.dest.home}/${propval.app.shellscr.name}" 
    140173          file="${app.run.shellscr}" > 
    141174      <filterset> 
  • trunk/calendar3/bldfiles/globalDefs.xml

    r310 r463  
    2929    <property name="org.bedework.build.caldav" value="yes" /> 
    3030 
    31     <!-- First try to load properties from user dump/restore overrides --> 
    32     <property name="org.bedework.dumprestore.properties.file" 
    33               location="${user.home}/bedework.dumprestore.properties"/> 
    34  
    3531    <!-- Overriding this when invoking ant allows different user property 
    3632         files to be included e.g. 
     
    4339 
    4440    <!-- Load user property definition overrides --> 
    45     <property file="${org.bedework.dumprestore.properties.file}"/> 
    4641    <property file="${org.bedework.user.build.properties}" /> 
    4742    <property file="${calendar.dir}/build.properties"/> 
  • trunk/calendar3/calCore/resources/hbms/Alarm.hbm.xml

    r445 r463  
    7474      <column name="ownerid" not-null="true" index="valarms_user" /> 
    7575    </many-to-one> 
     76 
     77    <property name="publick" type="true_false" > 
     78      <column name="publick" not-null="true" /> 
     79    </property> 
    7680 
    7781    <property name="trigger" column="trigger_rfctime" type="text"/> 
  • trunk/calendar3/calCore/resources/hbms/Attendee.hbm.xml

    r445 r463  
    1717    <version name="seq" column="bwsequence" type="integer" /> 
    1818 
     19    <many-to-one name="owner" 
     20                 class="org.bedework.calfacade.BwUser" 
     21                 unique="true" > 
     22      <column name="ownerid" not-null="true" index="vattendees_user" /> 
     23    </many-to-one> 
     24 
    1925    <property name="cn" type="text"/> 
    2026    <property name="cuType" column="cutype" type="text"/> 
  • trunk/calendar3/calCore/resources/hbms/Calendar.hbm.xml

    r445 r463  
    4141    <!-- I wanted to specify unique="true" on this but mysql complains. 
    4242      --> 
    43     <property name="path" column="path" type="string" length="1000" 
     43    <property name="path" column="bwpath" type="string" length="1000" 
    4444              not-null="true" 
    4545              index="calpath" lazy="false" /> 
  • trunk/calendar3/calEnv/src/org/bedework/calenv/CalOptions.java

    r415 r463  
    9999      initOptions(); 
    100100    } catch (Throwable t) { 
    101       Logger.getLogger(CalOptions.class).error("Init error", t); 
     101      error("Init error", t); 
    102102      throw new RuntimeException(t); 
    103103    } 
     
    578578        Class[] parClasses = meth.getParameterTypes(); 
    579579        if (parClasses.length != 1) { 
     580          error("Invalid setter method " + name); 
    580581          throw new CalEnvException("org.bedework.calenv.invalid.setter"); 
    581582        } 
     
    588589            parClass.getName().equals("java.lang.Integer")) { 
    589590          par = Integer.valueOf(ndval); 
     591        } else if (parClass.getName().equals("long") || 
     592            parClass.getName().equals("java.lang.Long")) { 
     593          par = Long.valueOf(ndval); 
    590594        } else if (parClass.getName().equals("boolean") || 
    591595            parClass.getName().equals("java.lang.Boolean")) { 
    592596          par = Boolean.valueOf(ndval); 
    593597        } else { 
     598          error("Unsupported par class for method " + name); 
    594599          throw new CalEnvException("org.bedework.calenv.unsupported.setter"); 
    595600        } 
     
    618623           */ 
    619624          if (val != null) { 
     625            error("Nested classes not yet supported for element " + valnode.name + 
     626                  " and class " + className); 
    620627            throw new CalEnvException("org.bedework.calenv.nested.classes.unsupported"); 
    621628          } 
     
    629636 
    630637        doChildren(valnode, el, val); 
     638 
     639        val = null; 
    631640      } 
    632641    } catch (CalEnvException ce) { 
     
    635644      throw new CalEnvException(t); 
    636645    } 
     646  } 
     647 
     648  private static void error(String msg) { 
     649    Logger.getLogger(CalOptions.class).error(msg); 
     650  } 
     651 
     652  private static void error(String msg, Throwable t) { 
     653    Logger.getLogger(CalOptions.class).error(msg, t); 
    637654  } 
    638655 
  • trunk/calendar3/calFacade/src/org/bedework/calfacade/BwAlarm.java

    r128 r463  
    180180   * ==================================================================== */ 
    181181 
     182  /** Set the owner 
     183   * 
     184   * @param val     UserVO owner of the entity 
     185   */ 
     186  public void setOwner(BwUser val) { 
     187    super.setOwner(val); 
     188    if (attendeesHelper != null) { 
     189      attendeesHelper.setOwner(val); 
     190    } 
     191  } 
     192 
     193  /** 
     194   * @param val 
     195   */ 
     196  public void setPublick(boolean val) { 
     197    super.setPublick(val); 
     198    if (attendeesHelper != null) { 
     199      attendeesHelper.setPublick(val); 
     200    } 
     201  } 
     202 
    182203  /** Set the alarmType for this event 
    183204   * 
     
    560581  public void clearAttendees() { 
    561582    getAttendeesHelper().clearAttendees(); 
    562     setAttendees(attendeesHelper.getAttendees()); 
     583    setAttendees(getAttendeesHelper().getAttendees()); 
    563584  } 
    564585 
     
    568589  public void addAttendee(BwAttendee val) { 
    569590    getAttendeesHelper().addAttendee(val); 
    570     setAttendees(attendeesHelper.getAttendees()); 
     591    setAttendees(getAttendeesHelper().getAttendees()); 
    571592  } 
    572593 
     
    576597  public void addAttendeeEmail(String val) { 
    577598    getAttendeesHelper().addAttendeeEmail(val); 
    578     setAttendees(attendeesHelper.getAttendees()); 
     599    setAttendees(getAttendeesHelper().getAttendees()); 
    579600  } 
    580601 
     
    587608    } 
    588609 
    589     return attendeesHelper.getAttendeeEmailList(); 
     610    return getAttendeesHelper().getAttendeeEmailList(); 
    590611  } 
    591612 
     
    598619    } 
    599620 
    600     return attendeesHelper.copyAttendees(); 
     621    return getAttendeesHelper().copyAttendees(); 
    601622  } 
    602623 
     
    609630    } 
    610631 
    611     return attendeesHelper.cloneAttendees(); 
     632    return getAttendeesHelper().cloneAttendees(); 
    612633  } 
    613634 
     
    818839  private Attendees getAttendeesHelper() { 
    819840    if (attendeesHelper == null) { 
    820       attendeesHelper = new Attendees(); 
     841      attendeesHelper = new Attendees(getOwner(), getPublick()); 
    821842    } 
    822843 
  • trunk/calendar3/calFacade/src/org/bedework/calfacade/BwAttendee.java

    r2 r463  
    5454package org.bedework.calfacade; 
    5555 
    56 import org.bedework.calfacade.base.BwDbentity; 
     56import org.bedework.calfacade.base.BwOwnedDbentity; 
    5757 
    5858/** Represent an attendee 
     
    6060 *  @author Mike Douglass   douglm@rpi.edu 
    6161 */ 
    62 public class BwAttendee extends BwDbentity implements Comparable { 
     62public class BwAttendee extends BwOwnedDbentity implements Comparable { 
    6363  /* Params fields */ 
    6464 
     
    8686  /** Constructor 
    8787   * 
     88   * @param owner 
     89   * @param publick 
    8890   * @param cn 
    8991   * @param cuType 
     
    99101   * @param attendeeUri 
    100102   */ 
    101   public BwAttendee(String cn, 
     103  public BwAttendee(BwUser owner, 
     104                    boolean publick, 
     105                    String cn, 
    102106                    String cuType, 
    103107                    String delegatedFrom, 
     
    111115                    String sentBy, 
    112116                    String attendeeUri) { 
     117    super(owner, publick); 
    113118    this.cn = cn; 
    114119    this.cuType = cuType; 
     
    402407 
    403408  public Object clone() { 
    404     BwAttendee nobj = new BwAttendee(getCn(), 
     409    BwAttendee nobj = new BwAttendee((BwUser)getOwner().clone(), 
     410                                     getPublick(), 
     411                                     getCn(), 
    405412                                     getCuType(), 
    406413                                     getDelegatedFrom(), 
  • trunk/calendar3/calFacade/src/org/bedework/calfacade/BwDateTime.java

    r415 r463  
    423423   * @throws CalFacadeException 
    424424   */ 
    425   public void init(boolean dateType, String date, String tzid, CalTimezones timezones) throws CalFacadeException { 
     425  public void init(boolean dateType, String date, String tzid, 
     426                   CalTimezones timezones) throws CalFacadeException { 
    426427    setDateType(dateType); 
    427428    setDtval(date); 
  • trunk/calendar3/calFacade/src/org/bedework/calfacade/BwEvent.java

    r406 r463  
    247247  private Collection attendees; 
    248248 
    249   private Attendees attendeesHelper = new Attendees()
     249  private Attendees attendeesHelper
    250250 
    251251  private boolean recurring; 
     
    338338   * ==================================================================== */ 
    339339 
     340  /** Set the owner 
     341   * 
     342   * @param val     UserVO owner of the entity 
     343   */ 
     344  public void setOwner(BwUser val) { 
     345    super.setOwner(val); 
     346    if (attendeesHelper != null) { 
     347      attendeesHelper.setOwner(val); 
     348    } 
     349  } 
     350 
     351  /** 
     352   * @param val 
     353   */ 
     354  public void setPublick(boolean val) { 
     355    super.setPublick(val); 
     356    if (attendeesHelper != null) { 
     357      attendeesHelper.setPublick(val); 
     358    } 
     359  } 
     360 
    340361  /** Set the event's name 
    341362   * 
     
    830851  public void clearAttendees() { 
    831852    getAttendeesHelper().clearAttendees(); 
    832     setAttendees(attendeesHelper.getAttendees()); 
     853    setAttendees(getAttendeesHelper().getAttendees()); 
    833854    setAttendeesChanged(true); 
    834855  } 
     
    839860  public void addAttendee(BwAttendee val) { 
    840861    getAttendeesHelper().addAttendee(val); 
    841     setAttendees(attendeesHelper.getAttendees()); 
     862    setAttendees(getAttendeesHelper().getAttendees()); 
    842863    setAttendeesChanged(true); 
    843864  } 
     
    848869  public void addAttendeeEmail(String val) { 
    849870    getAttendeesHelper().addAttendeeEmail(val); 
    850     setAttendees(attendeesHelper.getAttendees()); 
     871    setAttendees(getAttendeesHelper().getAttendees()); 
    851872    setAttendeesChanged(true); 
    852873  } 
     
    860881    } 
    861882 
    862     return attendeesHelper.getAttendeeEmailList(); 
     883    return getAttendeesHelper().getAttendeeEmailList(); 
    863884  } 
    864885 
     
    871892    } 
    872893 
    873     return attendeesHelper.copyAttendees(); 
     894    return getAttendeesHelper().copyAttendees(); 
    874895  } 
    875896 
     
    882903    } 
    883904 
    884     return attendeesHelper.cloneAttendees(); 
     905    return getAttendeesHelper().cloneAttendees(); 
    885906  } 
    886907 
     
    12151236  private Attendees getAttendeesHelper() { 
    12161237    if (attendeesHelper == null) { 
    1217       attendeesHelper = new Attendees(); 
     1238      attendeesHelper = new Attendees(getOwner(), getPublick()); 
    12181239    } 
    12191240 
  • trunk/calendar3/calFacade/src/org/bedework/calfacade/ifs/Attendees.java

    r128 r463  
    5555 
    5656import org.bedework.calfacade.BwAttendee; 
     57import org.bedework.calfacade.BwUser; 
    5758 
    5859import java.io.Serializable; 
     60import java.util.ArrayList; 
    5961import java.util.Collection; 
    6062import java.util.Iterator; 
    6163import java.util.TreeSet; 
    62 import java.util.Vector; 
    63  
    64 /** An interface defining the operations we can carry out on attendees and 
     64 
     65/** A class defining the operations we can carry out on attendees and 
    6566 * collections of attendees 
    6667 * 
     
    6970 */ 
    7071public class Attendees implements Serializable { 
     72  private BwUser owner; 
     73  private boolean publick; 
    7174  private Collection attendees; 
    7275 
    7376  /** Constructor 
    74    */ 
    75   public Attendees() { 
     77   * 
     78   * @param owner 
     79   * @param publick 
     80   */ 
     81  public Attendees(BwUser owner, boolean publick) { 
     82    this.owner = owner; 
     83    this.publick = publick; 
    7684  } 
    7785 
    7886  /** Constructor 
    7987   * 
     88   * @param owner 
     89   * @param publick 
    8090   * @param attendees 
    8191   */ 
    82   public Attendees(Collection attendees) { 
     92  public Attendees(BwUser owner, boolean publick, Collection attendees) { 
     93    this(owner, publick); 
    8394    this.attendees = attendees; 
     95  } 
     96 
     97  /** Set the owner for this object and any contained objects. 
     98   * 
     99   * @param val 
     100   */ 
     101  public void setOwner(BwUser val) { 
     102    owner = val; 
     103 
     104    if (attendees != null) { 
     105      Iterator it = iterateAttendees(); 
     106      while (it.hasNext()) { 
     107        BwAttendee att = (BwAttendee)it.next(); 
     108        att.setOwner(owner); 
     109      } 
     110    } 
     111  } 
     112 
     113  /** Set the public flag for this object and any contained objects. 
     114   * 
     115   * @param val 
     116   */ 
     117  public void setPublick(boolean val) { 
     118    publick = val; 
     119 
     120    if (attendees != null) { 
     121      Iterator it = iterateAttendees(); 
     122      while (it.hasNext()) { 
     123        BwAttendee att = (BwAttendee)it.next(); 
     124        att.setPublick(publick); 
     125      } 
     126    } 
    84127  } 
    85128 
     
    126169 
    127170    if (!as.contains(val)) { 
     171      val.setOwner(owner); 
     172      val.setPublick(publick); 
    128173      as.add(val); 
    129174    } 
     
    138183    BwAttendee att = new BwAttendee(); 
    139184 
     185    att.setOwner(owner); 
     186    att.setPublick(publick); 
    140187    att.setAttendeeUri(val); 
    141188 
     
    150197   */ 
    151198  public String[] getAttendeeEmailList() { 
    152     Vector v = new Vector(); 
     199    ArrayList al = new ArrayList(); 
    153200    Iterator it = iterateAttendees(); 
    154201    while (it.hasNext()) { 
     
    161208      } else if (!uri.toUpperCase().startsWith("MAILTO:")) { 
    162209        // Assume an email without MAILTO: prefix. 
    163         v.add(uri); 
     210        al.add(uri); 
    164211      } else { 
    165         v.add(uri.substring(7)); 
     212        al.add(uri.substring(7)); 
    166213      } 
    167214    } 
    168     return (String[])v.toArray(new String[v.size()]); 
     215    return (String[])al.toArray(new String[al.size()]); 
    169216  } 
    170217 
  • trunk/calendar3/config/configs/democal.options.xml

    r394 r463  
    33    <bedework> 
    44      <global> 
     5 
    56        <module> 
    67          <user-ldap-group classname="org.bedework.calcore.ldap.LdapConfigProperties"> 
     
    1617          </user-ldap-group> 
    1718        </module> 
     19 
    1820      </global> 
     21 
     22      <!-- Only used for system initialisation or conversion from 2.3 - ignored thereafter --> 
     23      <syspars classname="org.bedework.calfacade.BwSystem"> 
     24        <!-- name must match the global system name --> 
     25        <name>bedework</name> 
     26        <tzid>America/New_York</tzid> 
     27        <systemid>demobedework@mysite.edu</systemid> 
     28 
     29        <publicCalendarRoot>public</publicCalendarRoot> 
     30        <userCalendarRoot>user</userCalendarRoot> 
     31        <userDefaultCalendar>calendar</userDefaultCalendar> 
     32        <defaultTrashCalendar>Trash</defaultTrashCalendar> 
     33        <userInbox>Inbox</userInbox> 
     34        <userOutbox>Outbox</userOutbox> 
     35        <deletedCalendar>Deleted</deletedCalendar> 
     36        <busyCalendar>Busy</busyCalendar> 
     37 
     38        <defaultUserViewName>All</defaultUserViewName> 
     39 
     40        <publicUser>user</publicUser> 
     41 
     42        <httpConnectionsPerUser>10</httpConnectionsPerUser> 
     43        <httpConnectionsPerHost>50</httpConnectionsPerHost> 
     44        <httpConnections>200</httpConnections> 
     45 
     46 
     47        <!-- size limits --> 
     48        <maxPublicDescriptionLength>500</maxPublicDescriptionLength> 
     49        <maxUserDescriptionLength>1000</maxUserDescriptionLength> 
     50        <maxUserEntitySize>100000</maxUserEntitySize> 
     51        <defaultUserQuota>10000000</defaultUserQuota> <!-- 10 Meg OK? --> 
     52 
     53        <!-- Max number of instances per recurring event --> 
     54        <maxInstances>1000</maxInstances> 
     55 
     56        <userauthClass>org.bedework.calcore.hibernate.UserAuthUWDbImpl</userauthClass> 
     57        <mailerClass>org.bedework.mail.DummyMailer</mailerClass> 
     58        <admingroupsClass>org.bedework.calcore.hibernate.AdminGroupsDbImpl</admingroupsClass> 
     59        <!-- 
     60        <usergroupsClass>org.bedework.calcore.ldap.UserGroupsLdapImpl</usergroupsClass> 
     61        --> 
     62        <usergroupsClass>org.bedework.calcore.hibernate.GroupsDbImpl</usergroupsClass> 
     63      </syspars> 
     64 
     65      <app> 
     66        <dumpres classname="org.bedework.dumprestore.DumpRestoreConfig"> 
     67          <debug>true</debug> 
     68          <debugEntity>false</debugEntity> 
     69          <superGroupName>campusAdminGroups</superGroupName> 
     70          <defaultPublicCalPath>/public/Other Events/Other</defaultPublicCalPath> 
     71        </dumpres> 
     72 
     73        <!-- Use the restore utility to convert from uwcal 2.3 --> 
     74        <restoreFrom2p3px classname="org.bedework.dumprestore.DumpRestoreConfig"> 
     75          <debug>true</debug> 
     76          <debugEntity>false</debugEntity> 
     77          <from2p3px>true</from2p3px> 
     78          <timezonesFilename>resources/bwtimezones.xml</timezonesFilename> 
     79          <superGroupName>campusAdminGroups</superGroupName> 
     80          <defaultPublicCalPath>/public/Other Events/Other</defaultPublicCalPath> 
     81        </restoreFrom2p3px> 
     82      </app> 
    1983    </bedework> 
    2084  </org> 
  • trunk/calendar3/config/configs/democal.properties

    r415 r463  
    99# deployed as well as some other global properties. 
    1010# 
     11# Note that the options and properties are undergoing yet another upheaval. 
     12# They will be divided into two parts, build-time ant properties in this file 
     13# and run-time application properties in a corresponding xxx.options.xml file. 
     14# 
    1115# -------------------------------------------------------------------- 
    1216# 
     
    1519 
    1620# Define the names of the applications we want to build 
    17 org.bedework.install.app.names=bwconfig,CalAdmin,Events,UserCal,Pubcaldav,Usercaldav 
    18 org.bedework.install.app.types=webconfig,webadmin,webpublic,webuser,publiccaldav,usercaldav 
     21org.bedework.install.app.names=bwconfig,CalAdmin,Events,UserCal,Pubcaldav,Usercaldav,dumpres,restoreFrom2p3px 
     22org.bedework.install.app.types=webconfig,webadmin,webpublic,webuser,publiccaldav,usercaldav,dumprestore,dumprestore 
    1923 
    2024# 
     
    3438org.bedework.global.personal.calendar.uri=/ucal 
    3539 
    36 # 
    37 # -------------------------------------------------------------------- 
    38 # 
    39 # System parameters used globally by the system and read from the db. 
    40 # 
    41 org.bedework.syspar.tzid=America/New_York 
    42 org.bedework.syspar.systemid=demobedework@mysite.edu 
    43  
    44 org.bedework.syspar.public.calroot=public 
    45 org.bedework.syspar.user.calroot=user 
    46 org.bedework.syspar.default.user.calendar=calendar 
    47 org.bedework.syspar.default.trash.calendar=Trash 
    48 org.bedework.syspar.default.user.inbox=Inbox 
    49 org.bedework.syspar.default.user.outbox=Outbox 
    50 org.bedework.syspar.default.user.view=All 
    51  
    52 org.bedework.syspar.public.user=public-user 
    53  
    54 org.bedework.syspar.http.connections.peruser=10 
    55 org.bedework.syspar.http.connections.perhost=50 
    56 org.bedework.syspar.http.connections=200 
    57  
    58 org.bedework.syspar.userauthclass=org.bedework.calcore.hibernate.UserAuthUWDbImpl 
    59 org.bedework.syspar.mailerclass=org.bedework.mail.DummyMailer 
    60 org.bedework.syspar.admingroupsclass=org.bedework.calcore.hibernate.AdminGroupsDbImpl 
    61 org.bedework.syspar.usergroupsclass=org.bedework.calcore.ldap.UserGroupsLdapImpl 
    62 #org.bedework.syspar.usergroupsclass=org.bedework.calcore.hibernate.GroupsDbImpl 
    6340# 
    6441# ------------------------------------------------------------------- 
     
    233210# 
    234211 
    235 org.bedework.app.dumprestore.zip.name=bwdumpres 
    236 org.bedework.app.dumprestore.description=Bedework dump/restore utility 
    237 org.bedework.app.dumprestore.version=3.0 
    238 org.bedework.app.dumprestore.jdbcdriver.jar=${appserver.jdbcdriver.jar} 
    239  
    240 # -------------- dump parameters ------------------ 
    241  
    242 org.bedework.dump.arg.dumpfile=${user.home}/.bedework/caldata.xml 
    243 org.bedework.dump.arg.debug=-debug 
    244 org.bedework.dump.arg.hibernate.dialect=org.hibernate.dialect.HSQLDialect 
    245 org.bedework.dump.arg.jdbcdriver=org.hsqldb.jdbcDriver 
    246 org.bedework.dump.arg.jdbcurl=jdbc:hsqldb:hsql://localhost:8887 
    247 org.bedework.dump.arg.jdbcid=sa 
    248 org.bedework.dump.arg.jdbcpw= 
    249  
    250 # -------------- restore parameters ------------------ 
    251  
    252 org.bedework.restore.arg.dumpfile=${calendar.dir}/dumprestore/initcaldata.xml 
    253 org.bedework.restore.arg.debug=-debug 
    254 org.bedework.restore.arg.from2p3px= 
    255 org.bedework.restore.arg.fixcals=-nfixcals 
    256 org.bedework.restore.arg.defaultpubliccal= 
    257 org.bedework.restore.arg.hibernate.dialect=org.hibernate.dialect.HSQLDialect 
    258 org.bedework.restore.arg.jdbcdriver=org.hsqldb.jdbcDriver 
    259 org.bedework.restore.arg.jdbcurl=jdbc:hsqldb:hsql://localhost:8887 
    260 org.bedework.restore.arg.jdbcid=sa 
    261 org.bedework.restore.arg.jdbcpw= 
    262 org.bedework.restore.arg.timezones= 
    263  
     212# -------------- normal dump/restore build properties ------------------ 
     213 
     214org.bedework.app.dumpres.shellscr.name=cmd 
     215org.bedework.app.dumpres.zip.name=dumpres 
     216org.bedework.app.dumpres.description=Bedework dump/restore utility 
     217org.bedework.app.dumpres.version=3.1 
     218org.bedework.app.dumpres.dumpfile=${calendar.dir}/dumprestore/initcaldata.xml 
     219org.bedework.app.dumpres.hibernate.dialect=org.hibernate.dialect.HSQLDialect 
     220org.bedework.app.dumpres.jdbcdriver=org.hsqldb.jdbcDriver 
     221org.bedework.app.dumpres.jdbcurl=jdbc:hsqldb:hsql://localhost:8887 
     222org.bedework.app.dumpres.jdbcid=sa 
     223org.bedework.app.dumpres.jdbcpw= 
     224 
     225# -------------- convert from 2.3 build properties - use restore only ------------------ 
     226 
     227org.bedework.app.restoreFrom2p3px.shellscr.name=cmd 
     228org.bedework.app.restoreFrom2p3px.zip.name=restoreFrom2p3px 
     229org.bedework.app.restoreFrom2p3px.dumpfile=${calendar.dir}/dumprestore/initcaldata.xml 
     230org.bedework.app.restoreFrom2p3px.hibernate.dialect=org.hibernate.dialect.HSQLDialect 
     231org.bedework.app.restoreFrom2p3px.jdbcdriver=org.hsqldb.jdbcDriver 
     232org.bedework.app.restoreFrom2p3px.jdbcurl=jdbc:hsqldb:hsql://localhost:8887 
     233org.bedework.app.restoreFrom2p3px.jdbcid=sa 
     234org.bedework.app.restoreFrom2p3px.jdbcpw= 
     235 
  • trunk/calendar3/deployment/build.xml

    r295 r463  
    145145    <antcall target="deploy.standalone.apps" inheritrefs="true" /> 
    146146 
     147    <antcall target="deploy.shellscr.apps" inheritrefs="true" /> 
     148 
    147149    <antcall target="deploy.portal.apps" inheritrefs="true" /> 
    148150 
     
    166168  <target name="deploy.standalone.apps" if="org.bedework.global.build.standalone.app" > 
    167169    <property name="org.bedework.deploy.kind" value="webapp" /> 
     170    <antcall target="deploy.apps" inheritrefs="true" /> 
     171  </target> 
     172 
     173  <target name="deploy.shellscr.apps" if="org.bedework.global.build.standalone.app" > 
     174    <property name="org.bedework.deploy.kind" value="shellscr" /> 
    168175    <antcall target="deploy.apps" inheritrefs="true" /> 
    169176  </target> 
     
    210217                prefix="org.bedework.deploy"> 
    211218      <sequential> 
    212         <propertyset id="app-properties"> 
    213           <propertyref prefix="org.bedework.app.${org.bedework.deploy.name}"/> 
    214           <globmapper from="org.bedework.app.${org.bedework.deploy.name}.*" to="propval.app.*"/> 
    215         </propertyset> 
    216  
    217         <ant antfile="${org.bedework.deployment.base}/${org.bedework.deploy.type}/${org.bedework.deploy.kind}/build.xml" 
    218              inheritrefs="true" target="build.configured" > 
    219           <propertyset refid="app-properties" /> 
    220         </ant> 
     219        <available file="${org.bedework.deployment.base}/${org.bedework.deploy.type}/${org.bedework.deploy.kind}/build.xml" 
     220                   property="app.kind.available" /> 
     221        <antcall target="build.available.configured.app" inheritrefs="true" /> 
    221222      </sequential> 
    222223    </forEachApp> 
     
    225226    <ant antfile="${org.bedework.deployment.base}/termination/${org.bedework.deploy.kind}/build.xml" 
    226227         inheritrefs="true" target="build.configured" /> 
     228  </target> 
     229 
     230  <target name="build.available.configured.app" if="app.kind.available"> 
     231    <!-- Pick out the application build properties based on the prefix "org.bedework.app." 
     232         and the deployment name --> 
     233    <propertyset id="app-properties"> 
     234      <propertyref prefix="org.bedework.app.${org.bedework.deploy.name}"/> 
     235      <globmapper from="org.bedework.app.${org.bedework.deploy.name}.*" to="propval.app.*"/> 
     236    </propertyset> 
     237 
     238    <ant antfile="${org.bedework.deployment.base}/${org.bedework.deploy.type}/${org.bedework.deploy.kind}/build.xml" 
     239         inheritrefs="true" target="build.configured" > 
     240      <propertyset refid="app-properties" /> 
     241    </ant> 
    227242  </target> 
    228243 
     
    232247                prefix="org.bedework.deploy"> 
    233248      <sequential> 
    234         <propertyset id="app-properties"> 
    235           <propertyref prefix="org.bedework.app.${org.bedework.deploy.name}"/> 
    236           <globmapper from="org.bedework.app.${org.bedework.deploy.name}.*" to="propval.app.*"/> 
    237         </propertyset> 
    238  
    239         <ant antfile="${org.bedework.deployment.base}/${org.bedework.deploy.type}/${org.bedework.deploy.kind}/build.xml" 
    240              inheritrefs="true" target="deploy" > 
    241           <propertyset refid="app-properties" /> 
    242         </ant> 
     249        <antcall target="wrap.deploy.available.app" inheritrefs="true" /> 
    243250      </sequential> 
    244251    </forEachApp> 
     
    248255         inheritrefs="true" target="deploy" /> 
    249256  </target> 
     257 
     258  <target name="wrap.deploy.available.app"> 
     259    <!-- just to make app.kind.available go away --> 
     260    <available file="${org.bedework.deployment.base}/${org.bedework.deploy.type}/${org.bedework.deploy.kind}/build.xml" 
     261               property="app.kind.available" /> 
     262    <antcall target="deploy.available.app" inheritrefs="true" /> 
     263  </target> 
     264 
     265  <target name="deploy.available.app" if="app.kind.available"> 
     266    <propertyset id="app-properties"> 
     267      <propertyref prefix="org.bedework.app.${org.bedework.deploy.name}"/> 
     268      <globmapper from="org.bedework.app.${org.bedework.deploy.name}.*" to="propval.app.*"/> 
     269    </propertyset> 
     270 
     271    <ant antfile="${org.bedework.deployment.base}/${org.bedework.deploy.type}/${org.bedework.deploy.kind}/build.xml" 
     272         inheritrefs="true" target="deploy" > 
     273      <propertyset refid="app-properties" /> 
     274    </ant> 
     275  </target> 
    250276</project> 
  • trunk/calendar3/deployment/dumprestore/shellscr/build.xml

    r293 r463  
    99    <dirname property="this.dir" file="${ant.file}"/> 
    1010 
    11     <property name="app.sou.dir" location="${org.bedework.tools.base}" /> 
     11    <property name="app.sou.dir" location="${org.bedework.dumprestore.base}" /> 
    1212 
    1313    <property name="app.resources.dir" 
     
    4747    <!-- Extra resources --> 
    4848    <property name="app.temp.home" 
    49               location="${org.bedework.temp.shellscr.home}/bldtemp/${propval.zip.name}" /> 
     49              location="${org.bedework.temp.shellscr.home}/bldtemp/${propval.app.zip.name}" /> 
    5050    <mkdir dir="${app.temp.home}"/> 
    5151    <mkdir dir="${app.temp.home}/resources"/> 
    52     <copy todir="${app.temp.home}/resources"> 
    53       <fileset dir="${org.bedework.core.base}/resources/hbms" /> 
    54     </copy> 
    55     <copy todir="${app.temp.home}/resources"> 
    56       <fileset dir="${org.bedework.core.base}/resources/properties" /> 
    57     </copy> 
    5852    <echo file="${app.temp.home}/resources/hibernate.properties"> 
    59 hibernate.dialect=${org.bedework.dump.arg.hibernate.dialect} 
    60 hibernate.connection.driver_class=${org.bedework.dump.arg.jdbcdriver} 
    61 hibernate.connection.username=${org.bedework.dump.arg.jdbcid} 
    62 hibernate.connection.password=${org.bedework.dump.arg.jdbcpw} 
    63 hibernate.connection.url=${org.bedework.dump.arg.jdbcurl} 
     53hibernate.query.substitutions true 'T', false 'F', yes 'Y', no 'N' 
     54hibernate.dialect=${propval.app.hibernate.dialect} 
     55hibernate.connection.driver_class=${propval.app.jdbcdriver} 
     56hibernate.connection.username=${propval.app.jdbcid} 
     57hibernate.connection.password=${propval.app.jdbcpw} 
     58hibernate.connection.url=${propval.app.jdbcurl} 
     59hibernate.cglib.use_reflection_optimizer=false 
     60
     61# Here for better debugging 
     62
     63hibernate.jdbc.batch_size=0 
    6464    </echo> 
    6565 
    66     <fileset id="org.bedework.extra.resources" dir="${app.temp.home}/resources" > 
    67     </fileset> 
     66    <mkdir dir="${app.temp.home}/data"/> 
     67    <copy todir="${app.temp.home}/data" file="${app.sou.dir}/resources/initbedework.xml" /> 
     68 
     69    <fileset id="org.bedework.extra.resources" dir="${app.temp.home}/resources" /> 
     70    <fileset id="org.bedework.shellscr.data" dir="${app.temp.home}/data" /> 
    6871 
    6972    <!-- =============================================================== 
  • trunk/calendar3/deployment/dumprestore/shellscr/resources/dumpres.sh

    r2 r463  
    1212RESTORECMD="$JAVA_HOME/bin/java -cp $cp @RESTORE-CLASS@" 
    1313 
    14  
     14APPNAME=@BW-APP-NAME@ 
    1515 
    1616case "$1" in 
    1717  dump) 
    18     echo $DUMPCMD -debug -f $2 $3 $4 $5 $6 $7 $8 $9 
    19     $DUMPCMD -debug -f $2 $3 $4 $5 $6 $7 $8 $9 
     18    echo $DUMPCMD -appname $APPNAME -f $2 $3 $4 $5 $6 $7 $8 $9 
     19    $DUMPCMD -appname $APPNAME -f $2 $3 $4 $5 $6 $7 $8 $9 
    2020    ;; 
    2121  restore) 
    22     echo $RESTORECMD -debug -f $2 $3 $4 $5 $6 $7 $8 $9 
    23     $RESTORECMD -debug -f $2 $3 $4 $5 $6 $7 $8 $9 
     22    echo $RESTORECMD -appname $APPNAME -f $2 $3 $4 $5 $6 $7 $8 $9 
     23    $RESTORECMD -appname $APPNAME -f $2 $3 $4 $5 $6 $7 $8 $9 
    2424    ;; 
    2525  backup) 
    2626    TARGET=$2/$3`date +%Y%m%d_%H%M%S`.ldif 
    27     echo $RUNCMD -dump -f $TARGET 
    28     $RUNCMD -dump -f $TARGET 
     27    echo $DUMPCMD -appname $APPNAME -f $TARGET 
     28    $DUMPCMD -appname $APPNAME -f $TARGET 
     29    ;; 
     30  initdb) 
     31    echo $RESTORECMD -appname $APPNAME -f ./data/initbedework.xml -initSyspars 
     32    $RESTORECMD -appname $APPNAME -f ./data/initbedework.xml -initSyspars 
    2933    ;; 
    3034  *) 
    31     echo $"Usage: $0 {dump <filename>|restore <filename>|backup <directory> <prefix>}
     35    echo $"Usage: $0 {dump <filename>|restore <filename>|backup <directory> <prefix>} || initdb
    3236esac 
    3337 
  • trunk/calendar3/deployment/dumprestore/shellscr/resources/log4j.xml

    r297 r463  
    161161   <!-- ================ --> 
    162162 
    163    <!-- Limit the org.apache.commons category to INFO as its DEBUG is verbose --> 
    164    <category name="org.apache.commons"> 
    165       <priority value="INFO"/> 
    166    </category> 
    167  
    168    <category name="org.apache.commons.digester"> 
    169       <priority value="INFO"/> 
    170    </category> 
    171  
    172    <category name="org.apache.commons.digester.SimpleRegexMatcher"> 
     163   <!-- Limit the org.apache category to INFO as its DEBUG is verbose --> 
     164   <category name="org.apache"> 
     165      <priority value="INFO"/> 
     166   </category> 
     167 
     168   <!-- ical4j is noisy --> 
     169   <category name="net.fortuna.ical4j"> 
     170      <priority value="INFO"/> 
     171   </category> 
     172 
     173   <!-- caching is noisy too --> 
     174   <category name="net.sf.ehcache"> 
    173175      <priority value="INFO"/> 
    174176   </category> 
     
    203205   <category name="edu.rpi"> 
    204206     <priority value="DEBUG"/> 
    205    </category> 
    206  
    207    <!-- Set washington categories --> 
    208    <category name="edu.washington"> 
    209      <priority value="DEBUG"/> 
    210    </category> 
    211  
    212    <!-- Set hibernate categories 
    213         Setting to DEBUG gives a lot of output. 
    214      --> 
    215    <category name="net.sf.hibernate"> 
    216      <priority value="INFO"/> 
    217207   </category> 
    218208 
  • trunk/calendar3/dumprestore/build.xml

    r261 r463  
    1616    <property name="dump.class" value="org.bedework.dumprestore.dump.Dump" /> 
    1717    <property name="restore.class" value="org.bedework.dumprestore.restore.Restore" /> 
    18  
    19     <property name="org.bedework.dump.jdbcdriver.jar" 
    20               value="${appserver.jdbcdriver.jar}" /> 
    21  
    22     <property name="dumprestore.run.base" 
    23               location="${org.bedework.temp.home}/dumprestore"/> 
    24     <property name="dumprestore.run.resources" 
    25               location="${org.bedework.temp.home}/dumprestore/resources"/> 
    26     <delete dir="${dumprestore.run.base}" /> 
    27     <mkdir dir="${dumprestore.run.base}" /> 
    28     <mkdir dir="${dumprestore.run.resources}" /> 
    29  
    30     <copy todir="${dumprestore.run.resources}"> 
    31       <fileset dir="${org.bedework.core.base}/resources/properties" /> 
    32     </copy> 
    33     <copy todir="${dumprestore.run.resources}"> 
    34       <fileset dir="${org.bedework.core.base}/resources/hbms" /> 
    35     </copy> 
    36  
    37     <path id="lib.dump.class.path"> 
    38       <fileset dir="${org.bedework.temp.jars}"> 
    39         <include name="*.jar"/> 
    40       </fileset> 
    41       <fileset dir="${org.bedework.default.lib}"> 
    42         <include name="*.jar"/> 
    43       </fileset> 
    44       <fileset dir="${hibernate.jars.dir}"> 
    45         <include name="*.jar"/> 
    46       </fileset> 
    47       <fileset dir="${digester.dir}"> 
    48         <include name="*.jar"/> 
    49       </fileset> 
    50       <fileset dir="${struts.dir}"> 
    51         <include name="*.jar"/> 
    52       </fileset> 
    53  
    54       <!-- local jdbc drivers --> 
    55       <fileset dir="${org.bedework.jdbc.lib}"> 
    56         <include name="*.jar"/> 
    57       </fileset> 
    58  
    59       <!-- Include the quickstart jdbc driver --> 
    60       <pathelement location="${hsqldb.jdbcdriver.jar}"/> 
    61  
    62       <!-- add any properties we might want --> 
    63       <pathelement location="${dumprestore.run.resources}" /> 
    64       <pathelement location="${org.bedework.dumprestore.base}/properties" /> 
    65  
    66       <!-- add the mapping file from appsuite --> 
    67       <pathelement 
    68           location="${org.bedework.appsuite.base}/resources/properties" /> 
    69       <pathelement 
    70           location="${dumprestore.run.base}/resources/hibernate.properties"/> 
    71     </path> 
    72  
    73     <path id="lib.restore.class.path"> 
    74       <fileset dir="${org.bedework.temp.jars}"> 
    75         <include name="*.jar"/> 
    76       </fileset> 
    77       <fileset dir="${org.bedework.default.lib}"> 
    78         <include name="*.jar"/> 
    79       </fileset> 
    80       <fileset dir="${hibernate.jars.dir}"> 
    81         <include name="*.jar"/> 
    82       </fileset> 
    83       <fileset dir="${digester.dir}"> 
    84         <include name="*.jar"/> 
    85       </fileset> 
    86       <fileset dir="${struts.dir}"> 
    87         <include name="*.jar"/> 
    88       </fileset> 
    89  
    90       <!-- local jdbc drivers --> 
    91       <fileset dir="${org.bedework.jdbc.lib}"> 
    92         <include name="*.jar"/> 
    93       </fileset> 
    94  
    95       <!-- Include the quickstart jdbc driver --> 
    96       <pathelement location="${hsqldb.jdbcdriver.jar}"/> 
    97  
    98       <!-- add any properties we might want --> 
    99       <pathelement location="${dumprestore.run.resources}" /> 
    100       <pathelement location="${org.bedework.dumprestore.base}/properties" /> 
    101  
    102       <!-- add the mapping file from appsuite --> 
    103       <pathelement 
    104           location="${org.bedework.appsuite.base}/resources/properties" /> 
    105       <pathelement 
    106           location="${dumprestore.run.base}/resources/hibernate.properties"/> 
    107     </path> 
    10818  </target> 
    10919 
     
    12838      <pathelement location="${digester.jar}"/> 
    12939      <pathelement location="${hibernate.jar}"/> 
     40      <pathelement location="${org.bedework.calenv.jar}"/> 
    13041      <pathelement location="${org.bedework.calfacadeshared.jar}"/> 
    13142      <pathelement location="${org.bedework.calsvci.jar}"/> 
     
    14556  <target name="dumpdb" depends="init" 
    14657          description="Run bedework db dump app"> 
    147  
    148     <echo file="${dumprestore.run.base}/resources/hibernate.properties"> 
    149 hibernate.query.substitutions true 'T', false 'F', yes 'Y', no 'N' 
    150 hibernate.dialect=${org.bedework.dump.arg.hibernate.dialect} 
    151 hibernate.connection.driver_class=${org.bedework.dump.arg.jdbcdriver} 
    152 hibernate.connection.username=${org.bedework.dump.arg.jdbcid} 
    153 hibernate.connection.password=${org.bedework.dump.arg.jdbcpw} 
    154 hibernate.connection.url=${org.bedework.dump.arg.jdbcurl} 
    155     </echo> 
    156  
    157     <pathconvert property="lib.txt.classpath" 
    158                  refid="lib.dump.class.path" 
    159                  targetos="unix"  pathsep=":" /> 
    160  
    161     <echo message="cp: ${lib.txt.classpath}" /> 
    162  
    163     <echo message=" " /> 
    164     <echo message="dumping to ${org.bedework.dump.arg.dumpfile}" /> 
    165  
    166     <java  classname="${dump.class}" 
    167           fork="true" 
    168           failonerror="true"> 
    169       <classpath refid="lib.dump.class.path" /> 
    170       <arg value="${org.bedework.dump.arg.debug}" /> 
    171       <arg value="-f" /> 
    172       <arg value="${org.bedework.dump.arg.dumpfile}" /> 
    173       <!-- 
    174       <arg value="-Djava.endorsed.dir=${org.bedework.default.lib}/endorsed"/>--> 
    175     </java> 
    17658  </target> 
    17759 
     
    19981    <fail if="do.abort">restore aborted by user.</fail> 
    20082 
    201     <echo file="${dumprestore.run.base}/resources/hibernate.properties"> 
    202 hibernate.query.substitutions true 'T', false 'F', yes 'Y', no 'N' 
    203 hibernate.dialect=${org.bedework.restore.arg.hibernate.dialect} 
    204 hibernate.connection.driver_class=${org.bedework.restore.arg.jdbcdriver} 
    205 hibernate.connection.username=${org.bedework.restore.arg.jdbcid} 
    206 hibernate.connection.password=${org.bedework.restore.arg.jdbcpw} 
    207 hibernate.connection.url=${org.bedework.restore.arg.jdbcurl} 
    208 # 
    209 # Here for better debugging 
    210 # 
    211 hibernate.jdbc.batch_size=0 
    212     </echo> 
    213  
    21483    <pathconvert property="lib.txt.classpath" 
    21584                 refid="lib.restore.class.path" 
     
    21786 
    21887    <echo message="cp: ${lib.txt.classpath}" /> 
    219  
    220     <echo message=" " /> 
    221     <echo message="restoring from ${org.bedework.restore.arg.dumpfile}" /> 
    222  
    223     <java  classname="${restore.class}" 
    224           fork="true" 
    225           failonerror="true"> 
    226       <classpath refid="lib.restore.class.path" /> 
    227       <arg value="${org.bedework.restore.arg.debug}" /> 
    228       <arg value="-supergroup" /> 
    229       <arg value="${org.bedework.restore.supergroup}" /> 
    230       <arg value="-f" /> 
    231       <arg value="${org.bedework.restore.arg.dumpfile}" /> 
    232       <arg value="${org.bedework.restore.arg.from2p3px}" /> 
    233       <arg line="${org.bedework.restore.arg.defaultpubliccal}" /> 
    234       <arg line="${org.bedework.restore.arg.timezones}" /> 
    235  
    236       <arg value="-sysname" /> 
    237       <arg value="${org.bedework.global.system.name}" /> 
    238       <arg value="-tzid" /> 
    239       <arg value="${org.bedework.syspar.tzid}" /> 
    240       <arg value="-sysid" /> 
    241       <arg value="${org.bedework.syspar.systemid}" /> 
    242  
    243       <arg value="-publiccalroot" /> 
    244       <arg value="${org.bedework.syspar.public.calroot}" /> 
    245       <arg value="-usercalroot" /> 
    246       <arg value="${org.bedework.syspar.user.calroot}" /> 
    247       <arg value="-defusercal" /> 
    248       <arg value="${org.bedework.syspar.default.user.calendar}" /> 
    249       <arg value="-deftrashcal" /> 
    250       <arg value="${org.bedework.syspar.default.trash.calendar}" /> 
    251       <arg value="-definbox" /> 
    252       <arg value="${org.bedework.syspar.default.user.inbox}" /> 
    253       <arg value="-defoutbox" /> 
    254       <arg value="${org.bedework.syspar.default.user.outbox}" /> 
    255       <arg value="-defuview" /> 
    256       <arg line="${org.bedework.syspar.default.user.view}" /> 
    257  
    258       <arg value="-pu" /> 
    259       <arg value="${org.bedework.syspar.public.user}" /> 
    260  
    261       <arg value="-onlyusers" /> 
    262       <arg value="${org.bedework.onlyusers}" /> 
    263  
    264       <arg value="-httpconnsperuser" /> 
    265       <arg value="${org.bedework.syspar.http.connections.peruser}" /> 
    266       <arg value="-httpconnsperhost" /> 
    267       <arg value="${org.bedework.syspar.http.connections.perhost}" /> 
    268       <arg value="-httpconns" /> 
    269       <arg value="${org.bedework.syspar.http.connections}" /> 
    270  
    271       <arg value="-userauthClass" /> 
    272       <arg value="${org.bedework.syspar.userauthclass}" /> 
    273       <arg value="-mailerClass" /> 
    274       <arg value="${org.bedework.syspar.mailerclass}" /> 
    275       <arg value="-admingroupsClass" /> 
    276       <arg value="${org.bedework.syspar.admingroupsclass}" /> 
    277       <arg value="-usergroupsClass" /> 
    278       <arg value="${org.bedework.syspar.usergroupsclass}" /> 
    279       <jvmarg value="-mx128m" /> 
    280       <jvmarg value="-ms128m" /> 
    281       <!-- 
    282       <jvmarg value="-Xrunyjpagent:cpu=times,onexit=cpu" /> 
    283       --> 
    284       <!-- 
    285       <arg value="-Djava.endorsed.dir=${org.bedework.default.lib}/endorsed"/>--> 
    286     </java> 
    28788  </target> 
    28889 
  • trunk/calendar3/dumprestore/src/org/bedework/dumprestore/dump/Dump.java

    r48 r463  
    2929package org.bedework.dumprestore.dump; 
    3030 
     31import org.bedework.calenv.CalOptions; 
    3132import org.bedework.dumprestore.Defs; 
     33import org.bedework.dumprestore.DumpRestoreConfig; 
    3234import org.bedework.dumprestore.dump.dumpling.DumpAll; 
    33  
    3435 
    3536import java.io.FileWriter; 
    3637import java.io.OutputStreamWriter; 
     38 
     39import org.apache.log4j.Logger; 
    3740 
    3841/** Application to dump calendar data. 
    3942 * 
    4043 * @author Mike Douglass   douglm@rpi.edu 
    41  * @version 1.0 
     44 * @version 3.1 
    4245 */ 
    4346public class Dump implements Defs { 
     47  private transient Logger log; 
     48 
     49  /* Properties can be supplied via the command line or via a the properties 
     50   * file with the prefix propertyPrefix + appName + "." 
     51   */ 
     52  private String appPrefix = "org.bedework.app."; 
     53 
     54  private String appName; 
     55 
    4456  DumpIntf di; 
    4557 
     
    5971 
    6072  void open() throws Throwable { 
    61     di = new HibDump(globals.debug); 
     73    di = new HibDump(globals.config.getDebug()); 
    6274 
    6375    if (fileName == null) { 
     
    8395 
    8496  void processArgs(String[] args) throws Throwable { 
    85     if (args == null) { 
    86       return; 
    87     } 
     97    /* Look for appname arg */ 
    8898 
    8999    for (int i = 0; i < args.length; i++) { 
    90100      if (args[i].equals("-debug")) { 
    91         globals.debug = true
     101        globals.config.setDebug(true)
    92102      } else if (args[i].equals("-ndebug")) { 
    93         globals.debug = false; 
     103        globals.config.setDebug(false); 
     104      } else if (args[i].equals("")) { 
     105        // null arg generated by ant 
    94106      } else if (args[i].equals("-noarg")) { 
     107        // noop 
     108      } else if (argpar("-appname", args, i)) { 
     109        i++; 
     110        // done earlier 
    95111      } else if (argpar("-f", args, i)) { 
    96112        i++; 
     
    100116        //id = args[i]; 
    101117      } else { 
    102         dmsg("Illegal argument: " + args[i]); 
     118        error("Illegal argument: " + args[i]); 
    103119        throw new Exception("Invalid args"); 
    104120      } 
     
    117133  } 
    118134 
    119   static void dmsg(String s) { 
    120     System.out.println(s); 
     135  void getConfigProperties(String[] args) throws Throwable { 
     136    /* Look for the appname arg */ 
     137 
     138    if (args != null) { 
     139      for (int i = 0; i < args.length; i++) { 
     140        if (argpar("-appname", args, i)) { 
     141          i++; 
     142          appName = args[i]; 
     143          break; 
     144        } 
     145      } 
     146    } 
     147 
     148    if (appName == null) { 
     149      error("Missing required argument -appname"); 
     150      throw new Exception("Invalid args"); 
     151    } 
     152 
     153    globals.init((DumpRestoreConfig)CalOptions.getProperty(appPrefix + appName)); 
     154  } 
     155 
     156  protected Logger getLog() { 
     157    if (log == null) { 
     158      log = Logger.getLogger(this.getClass()); 
     159    } 
     160 
     161    return log; 
     162  } 
     163 
     164  protected void error(String msg) { 
     165    getLog().error(msg); 
     166  } 
     167 
     168  protected void info(String msg) { 
     169    getLog().info(msg); 
     170  } 
     171 
     172  protected void trace(String msg) { 
     173    getLog().debug(msg); 
    121174  } 
    122175 
     
    128181 
    129182    try { 
     183      long startTime = System.currentTimeMillis(); 
     184 
    130185      d = new Dump(); 
    131186 
     187      d.getConfigProperties(args); 
     188 
    132189      d.processArgs(args); 
    133190 
     
    137194 
    138195      d.stats(); 
     196 
     197      long millis = System.currentTimeMillis() - startTime; 
     198      long seconds = millis / 1000; 
     199      long minutes = seconds / 60; 
     200      seconds -= (minutes * 60); 
     201 
     202      d.info("Elapsed time: " + minutes + ":" + twoDigits(seconds)); 
    139203    } catch (Throwable t) { 
    140204      t.printStackTrace(); 
     
    147211    } 
    148212  } 
     213 
     214  private static String twoDigits(long val) { 
     215    if (val < 10) { 
     216      return "0" + val; 
     217    } 
     218 
     219    return String.valueOf(val); 
     220  } 
    149221} 
    150  
  • trunk/calendar3/dumprestore/src/org/bedework/dumprestore/dump/DumpGlobals.java

    r218 r463  
    2929package org.bedework.dumprestore.dump; 
    3030 
     31import org.bedework.dumprestore.DumpRestoreConfig; 
     32 
    3133import java.io.Writer; 
    3234import java.util.Stack; 
     
    3638 * 
    3739 */ 
    38 /** 
    39  * @author douglm 
    40  * 
    41  */ 
    4240public class DumpGlobals { 
    43   /** */ 
    44   public boolean debug; 
     41  /** Config properties from options file. 
     42   */ 
     43  public DumpRestoreConfig config; 
    4544 
    4645  /** */ 
     
    8988  /** */ 
    9089  public int events; 
    91    
     90 
    9291  /** */ 
    9392  public int eventAnnotations; 
     
    152151    return out; 
    153152  } 
     153 
     154  /** 
     155   * @param config 
     156   */ 
     157  public void init(DumpRestoreConfig config) { 
     158    this.config = config; 
     159  } 
    154160} 
  • trunk/calendar3/dumprestore/src/org/bedework/dumprestore/dump/dumpling/DumpAttendees.java

    r49 r463  
    6868    tagStart(objectAttendee); 
    6969 
    70     taggedEntityId(a); 
     70    ownedEntityTags(a); 
    7171    taggedVal("cutype", a.getCuType()); 
    7272    taggedVal("delegated-from", a.getDelegatedFrom()); 
    73     taggedVal("getDelegatedTo-to", a.getCn()); 
     73    taggedVal("delegated-to", a.getDelegatedTo()); 
     74    taggedVal("cn", a.getCn()); 
    7475    taggedVal("dir", a.getDir()); 
    7576    taggedVal("lang", a.getLanguage()); 
  • trunk/calendar3/dumprestore/src/org/bedework/dumprestore/dump/dumpling/DumpAuthUsers.java

    r49 r463  
    2929package org.bedework.dumprestore.dump.dumpling; 
    3030 
     31import org.bedework.calfacade.BwCalendar; 
    3132import org.bedework.calfacade.BwCategory; 
    3233import org.bedework.calfacade.BwLocation; 
     
    129130        tagEnd("preferredSponsors"); 
    130131      } 
     132 
     133      s = aup.getPreferredCalendars(); 
     134      if ((s != null) && (s.size() > 0)) { 
     135        tagStart("preferredCalendars"); 
     136 
     137        Iterator si = s.iterator(); 
     138 
     139        while (si.hasNext()) { 
     140          BwCalendar p = (BwCalendar)si.next(); 
     141 
     142          taggedVal("preferredCalendar", p.getPath()); 
     143        } 
     144 
     145        tagEnd("preferredCalendars"); 
     146      } 
    131147    } 
    132148 
  • trunk/calendar3/dumprestore/src/org/bedework/dumprestore/dump/dumpling/DumpEvents.java

    r243 r463  
    4545public class DumpEvents extends Dumpling { 
    4646  protected boolean annotations; 
    47    
     47 
    4848  /** Constructor 
    4949   * 
     
    7878    BwEventAnnotation ann = null; 
    7979 
    80     if (e instanceof BwEventAnnotation) { 
    81       ann = (BwEventAnnotation)e; 
    82       taggedVal("target", ann.getTarget().getId()); 
    83       taggedVal("master", ann.getMaster().getId()); 
    84     } 
    85      
    8680    if (ann == null) { 
    8781      tagStart(objectEvent); 
     
    9387 
    9488    taggedVal("name", e.getName()); 
    95     taggedVal("guid", e.getGuid()); 
    9689    taggedVal("summary", e.getSummary()); 
    9790    taggedVal("description", e.getDescription()); 
     
    9992    taggedDateTime("start", e.getDtstart()); 
    10093    taggedDateTime("end", e.getDtend()); 
     94    taggedVal("end-type", e.getEndType()); 
    10195    taggedVal("duration", e.getDuration()); 
    102     taggedVal("end-type", e.getEndType()); 
    10396 
    10497    taggedVal("link", e.getLink()); 
     98    taggedVal("deleted", e.getDeleted()); 
    10599    taggedVal("status", e.getStatus()); 
    106100    taggedVal("cost", e.getCost()); 
    107     taggedVal("deleted", e.getDeleted()); 
     101 
     102    taggedEntityId("organizer", e.getOrganizer()); 
    108103 
    109104    taggedVal("dtstamp", e.getDtstamp()); 
     
    113108    taggedVal("priority", e.getPriority()); 
    114109    taggedVal("sequence", e.getSequence()); 
     110 
     111    taggedEntityId("sponsor", e.getSponsor()); 
     112    taggedEntityId("location", e.getLocation()); 
     113 
     114    taggedVal("guid", e.getGuid()); 
     115    taggedVal("transparency", e.getTransparency()); 
    115116 
    116117    tagStart("eventCategories"); 
     
    125126 
    126127    tagEnd("eventCategories"); 
    127  
    128     taggedEntityId("sponsor", e.getSponsor()); 
    129     taggedEntityId("location", e.getLocation()); 
    130     taggedEntityId("organizer", e.getOrganizer()); 
    131  
    132     taggedVal("transparency", e.getTransparency()); 
    133128 
    134129    tagStart("eventAttendees"); 
     
    181176    if (ann == null) { 
    182177      tagEnd(objectEvent); 
    183        
     178 
    184179      globals.events++; 
    185180    } else { 
    186       taggedVal("target", ann.getTarget().getId()); 
    187       taggedVal("master", ann.getMaster().getId()); 
     181      taggedEventKey("target", ann.getTarget()); 
     182      taggedEventKey("master", ann.getMaster()); 
    188183      tagEnd(objectEventAnnotation); 
    189        
     184 
    190185      globals.eventAnnotations++; 
    191186    } 
  • trunk/calendar3/dumprestore/src/org/bedework/dumprestore/dump/dumpling/DumpUserPrefs.java

    r59 r463  
    8585        taggedVal("sub-id", sub.getId()); 
    8686        taggedVal("sub-seq", sub.getSeq()); 
     87        taggedVal("sub-owner", sub.getOwner().getId()); 
     88 
    8789        taggedVal("sub-name", sub.getName()); 
    88         taggedVal("sub-owner", sub.getOwner().getId()); 
    8990        taggedVal("sub-uri", sub.getUri()); 
    9091        taggedVal("sub-affectsFreeBusy", sub.getAffectsFreeBusy()); 
     92        taggedVal("sub-ignoreTransparency", sub.getIgnoreTransparency()); 
    9193        taggedVal("sub-display", sub.getDisplay()); 
    9294        taggedVal("sub-style", sub.getStyle()); 
     
    119121        taggedVal("view-id", view.getId()); 
    120122        taggedVal("view-seq", view.getSeq()); 
     123        taggedVal("view-owner", view.getOwner().getId()); 
    121124        taggedVal("view-name", view.getName()); 
    122         taggedVal("view-owner", view.getOwner().getId()); 
    123125 
    124126        Collection vs = view.getSubscriptions(); 
     
    132134            BwSubscription sub = (BwSubscription)vsi.next(); 
    133135 
    134             taggedVal("view-sub-id", sub.getId()); 
     136            taggedVal("view-sub-name", sub.getName()); 
    135137          } 
    136138 
     
    146148    taggedVal("email", p.getEmail()); 
    147149    if (p.getDefaultCalendar() != null) { 
    148       taggedVal("default-calendar", p.getDefaultCalendar().getId()); 
     150      taggedVal("defaultCalendar", p.getDefaultCalendar().getPath()); 
    149151    } 
    150152    taggedVal("skinName", p.getSkinName()); 
     
    155157    taggedVal("workdayStart", p.getWorkdayStart()); 
    156158    taggedVal("workdayEnd", p.getWorkdayEnd()); 
     159    taggedVal("preferredEndType", p.getPreferredEndType()); 
     160    taggedVal("userMode", p.getUserMode()); 
    157161 
    158162    tagEnd(objectUserPrefs); 
  • trunk/calendar3/dumprestore/src/org/bedework/dumprestore/dump/dumpling/Dumpling.java

    r415 r463  
    5555 
    5656import org.bedework.calfacade.BwDateTime; 
     57import org.bedework.calfacade.BwEvent; 
    5758import org.bedework.calfacade.BwGroup; 
    5859import org.bedework.calfacade.BwPrincipal; 
     
    164165  } 
    165166 
     167  protected void ownerKey(BwPrincipal val) throws Throwable { 
     168    taggedVal("owner-account", val.getAccount()); 
     169    taggedVal("owner-kind", val.getKind()); 
     170  } 
     171 
    166172  protected void groupTags(BwGroup val) throws Throwable { 
    167173    principalTags(val); 
     
    195201    shareableEntityTags(entity); 
    196202 
    197     taggedEntityId("calendar", entity.getCalendar()); 
     203    if (entity.getCalendar() == null) { 
     204      // Sould check validity here. Only valid for calendar roots. 
     205      taggedVal("calendar", ""); 
     206    } else { 
     207      taggedVal("calendar", entity.getCalendar().getPath()); 
     208    } 
    198209  } 
    199210 
     
    223234    taggedVal(prefix + "-dtval", dt.getDtval()); 
    224235    taggedVal(prefix + "-date", dt.getDate()); 
     236  } 
     237 
     238  protected void taggedEventKey(String prefix, BwEvent ev) throws Throwable { 
     239    taggedVal(prefix + "-calendar", ev.getCalendar().getPath()); 
     240    taggedVal(prefix + "-guid", ev.getGuid()); 
     241    if (ev.getRecurring()) { 
     242      taggedVal(prefix + "-recurrenceId", ev.getRecurrence().getRecurrenceId()); 
     243    } 
    225244  } 
    226245 
  • trunk/calendar3/dumprestore/src/org/bedework/dumprestore/restore/HibRestore.java

    r299 r463  
    5656 
    5757import org.bedework.calfacade.BwAlarm; 
     58import org.bedework.calfacade.BwAttendee; 
    5859import org.bedework.calfacade.BwCalendar; 
    5960import org.bedework.calfacade.BwCategory; 
     
    8687 
    8788import org.apache.log4j.Logger; 
     89import org.hibernate.FlushMode; 
    8890import org.hibernate.Query; 
    8991import org.hibernate.SessionFactory; 
     
    104106  //private HibSession sess; 
    105107  private SessionFactory sessFactory; 
    106    
    107    
     108 
     109 
    108110  private Session hibSess; 
    109111  private StatelessSession sess; 
    110    
     112 
    111113  private int adminGroupId = 1; 
    112114 
     
    127129 
    128130  /* (non-Javadoc) 
    129    * @see org.bedework.dumprestore.restore.RestoreIntf#init(java.lang.String, java.lang.String, java.lang.String, java.lang.String, int, org.bedework.dumprestore.restore.RestoreGlobals) 
    130    */ 
    131   public void init(String url, 
    132                    String className, 
    133                    String id, 
    134                    String pw, 
    135                    RestoreGlobals globals) throws Throwable { 
    136     this.globals = globals; 
    137   } 
    138  
    139   /* (non-Javadoc) 
    140131   * @see org.bedework.dumprestore.restore.RestoreIntf#init(org.bedework.dumprestore.restore.RestoreGlobals) 
    141132   */ 
     
    148139   */ 
    149140  public void open() throws Throwable { 
     141  } 
     142 
     143  public void startTransaction() throws Throwable { 
     144    // Open delayed till retore method called 
     145  } 
     146 
     147  public void endTransaction() throws Throwable { 
     148    if (sess != null) { 
     149      closeSession(); 
     150    } 
     151 
     152    if (hibSess != null) { 
     153      closeHibSession(); 
     154    } 
    150155  } 
    151156 
     
    176181   */ 
    177182  public void restoreUser(BwUser o) throws Throwable { 
    178     if (globals.onlyUsers &&  
     183    if (globals.onlyUsers && 
    179184        (globals.onlyUsersMap.get(o.getAccount()) == null)) { 
    180185      return; 
    181186    } 
    182      
     187 
    183188    try { 
    184189      openSess(); 
     
    200205   */ 
    201206  public void restoreUserInfo(BwUserInfo o) throws Throwable { 
    202     if (globals.onlyUsers &&  
     207    if (globals.onlyUsers && 
    203208        (globals.onlyUsersMap.get(o.getUser().getAccount()) == null)) { 
    204209      return; 
    205210    } 
    206      
     211 
    207212    openHibSess(); 
    208213 
     
    216221      return; 
    217222    } 
    218      
     223 
    219224    openSess(); 
    220225 
     
    222227 
    223228    closeSess(); 
     229  } 
     230 
     231  public void restoreAttendee(BwAttendee o) throws Throwable { 
     232    // Ensure id not set 
     233    o.setId(CalFacadeDefs.unsavedItemKey); 
     234 
     235    openHibSess(); 
     236 
     237    hibSess.save(o); 
     238 
     239    closeHibSess(); 
    224240  } 
    225241 
     
    230246    openSess(); 
    231247 
    232     if (globals.from2p3px) { 
     248    if (globals.config.getFrom2p3px()) { 
    233249      // No id assigned 
    234250      o.setId(adminGroupId); 
    235251      adminGroupId++; 
    236252    } 
    237      
     253 
    238254    if (globals.onlyUsers) { 
    239255      if (globals.onlyUsersMap.get(o.getGroupOwner().getAccount()) == null) { 
     
    241257      } 
    242258    } 
    243      
     259 
    244260    save(o); 
    245261 
     
    254270    while (it.hasNext()) { 
    255271      BwPrincipal pr = (BwPrincipal)it.next(); 
    256        
    257       if (globals.onlyUsers &&  
     272 
     273      if (globals.onlyUsers && 
    258274          (pr instanceof BwUser) && 
    259275          (globals.onlyUsersMap.get(((BwUser)pr).getAccount()) == null)) { 
    260276        continue; 
    261277      } 
    262              
     278 
    263279      openSess(); 
    264280 
     
    280296   */ 
    281297  public void restoreAuthUser(BwAuthUser o) throws Throwable { 
    282     if (globals.onlyUsers &&  
     298    if (globals.onlyUsers && 
    283299        (globals.onlyUsersMap.get(o.getUser().getAccount()) == null)) { 
    284300      return; 
    285301    } 
    286      
     302 
    287303    openHibSess(); 
    288304 
     
    290306//      o.setId(o.getUser().getId()); 
    291307//    } 
    292      
     308 
    293309    hibSave(o); 
    294310 
     
    303319      return; 
    304320    } 
    305      
     321 
    306322    openHibSess(); 
    307323 
     
    318334      return; 
    319335    } 
    320      
     336 
    321337    openHibSess(); 
    322338 
     
    333349      return; 
    334350    } 
    335      
     351 
    336352    openSess(); 
    337353 
     
    348364      return null; 
    349365    } 
    350      
     366 
    351367    openSess(); 
    352368 
     
    359375    q.setString("address", o.getAddress()); 
    360376    q.setEntity("owner", o.getOwner()); 
    361      
     377 
    362378    Integer i = (Integer)q.uniqueResult(); 
    363379 
     
    377393      return null; 
    378394    } 
    379      
     395 
    380396    openSess(); 
    381397 
     
    414430      // XXX need fixing and we're not using them yet 
    415431      openHibSess(); 
    416        
     432 
    417433      hibSave(o); 
    418        
     434 
    419435      closeHibSess(); 
    420436    } 
     
    425441      return; 
    426442    } 
    427      
     443 
    428444    openHibSess(); 
    429445 
     
    457473      return; 
    458474    } 
    459      
     475 
    460476    openHibSess(); 
    461477 
     
    466482 
    467483  public void update(BwUser user) throws Throwable { 
    468     if (globals.onlyUsers &&  
     484    if (globals.onlyUsers && 
    469485        (globals.onlyUsersMap.get(user.getAccount()) == null)) { 
    470486      return; 
    471487    } 
    472      
     488 
    473489    openSess(); 
    474490 
     
    526542      return; 
    527543    } 
    528      
     544 
    529545    openSess(); 
    530546 
     
    534550 
    535551    closeSess(); 
     552  } 
     553 
     554  public BwCalendar getCalendar(String path) throws Throwable { 
     555    openHibSess(); 
     556 
     557    Query q = hibSess.createQuery("from org.bedework.calfacade.BwCalendar cal where " + 
     558                        "cal.path=:path"); 
     559    q.setString("path", path); 
     560    BwCalendar cal = (BwCalendar)q.uniqueResult(); 
     561 
     562    return cal; 
     563  } 
     564 
     565  public void saveRootCalendar(BwCalendar val) throws Throwable { 
     566    if (!checkOnlyUser(val)) { 
     567      return; 
     568    } 
     569 
     570    // Ensure id not set 
     571    val.setId(CalFacadeDefs.unsavedItemKey); 
     572 
     573    openHibSess(); 
     574 
     575    hibSess.save(val); 
     576 
     577    closeHibSess(); 
    536578  } 
    537579 
     
    542584   * calls then update the structure with hibernate. 
    543585   */ 
    544   public void restoreCalendar(BwCalendar o) throws Throwable { 
    545     if (!checkOnlyUser(o)) { 
    546       return; 
    547     } 
    548      
    549     openSess(); 
    550  
    551     restoreCalendar(o, sess.connection()); 
    552  
    553     closeSess(); 
     586  public void addCalendar(BwCalendar o) throws Throwable { 
     587    if (!checkOnlyUser(o)) { 
     588      return; 
     589    } 
     590 
     591    // Ensure id not set 
     592    o.setId(CalFacadeDefs.unsavedItemKey); 
     593 
     594    openHibSess(); 
     595 
     596    BwCalendar parent = o.getCalendar(); 
     597 
     598    parent.addChild(o); 
     599 
     600//    hibSess.update(parent); 
     601 
     602    closeHibSess(); 
    554603  } 
    555604 
     
    562611      return; 
    563612    } 
    564      
     613 
    565614    restoreCalendar(val, conn); 
    566615 
     
    579628  } 
    580629 
    581   /* Restore a single calendar. Don't restore children 
     630  /* The only reason for this is the need to preserve the calendar id. 
     631   * From 3.x on this need will not exist. Just use hibernate. 
     632   * 
     633   * Restore a single calendar. Don't restore children 
    582634   */ 
    583635  private void restoreCalendar(BwCalendar val, Connection conn) throws Throwable { 
     
    585637      return; 
    586638    } 
    587      
     639 
    588640    PreparedStatement ps = null; 
    589641 
     
    591643      ps = conn.prepareStatement( 
    592644            "INSERT INTO calendars " + 
    593                 "(id, seq, creatorid, ownerid, access, " + 
    594                  "publick, name, path, summary, description," + 
    595                  " mail_list_id, calendar_collection, parent) " + 
     645                "(id, seq, creatorid, ownerid, bwaccess, " + 
     646                 "publick, calname, path, summary, description," + 
     647                 " mail_list_id, calendar_collection, parent, caltype) " + 
    596648               "VALUES (?,?,?,?,?," + 
    597649                       "?,?,?,?,?," + 
    598                        "?,?,?)"); 
     650                       "?,?,?,?)"); 
    599651 
    600652      ps.setInt(1, val.getId()); 
     
    618670        ps.setInt(13, val.getCalendar().getId()); 
    619671      } 
     672      ps.setInt(14, val.getCalType()); 
    620673 
    621674      ps.executeUpdate(); 
     
    633686    if (sess == null) { 
    634687      sess = sessFactory.openStatelessSession(); 
    635     } 
    636     sess.beginTransaction(); 
     688      sess.beginTransaction(); 
     689    } 
    637690  } 
    638691 
     
    640693    if (hibSess == null) { 
    641694      hibSess = sessFactory.openSession(); 
    642     } 
    643     hibSess.beginTransaction(); 
    644   } 
    645  
    646   private synchronized void closeHibSess() throws Throwable { 
     695      hibSess.setFlushMode(FlushMode.COMMIT); 
     696      hibSess.beginTransaction(); 
     697    } 
     698  } 
     699 
     700  private void closeHibSess() throws Throwable { 
     701    endTransaction(); 
     702  } 
     703 
     704  private synchronized void closeHibSession() throws Throwable { 
    647705    hibSess.getTransaction().commit(); 
    648706    try { 
     
    660718 
    661719  private synchronized void closeSess() throws Throwable { 
    662     sess.getTransaction().commit(); 
     720    endTransaction(); 
     721  } 
     722 
     723  private synchronized void closeSession() throws Throwable { 
     724    if (sess.getTransaction() != null) { 
     725      sess.getTransaction().commit(); 
     726    } 
    663727    try { 
    664728      if (sess != null) { 
     
    673737    } 
    674738  } 
    675    
     739 
    676740  private void hibSave(Object o) throws Throwable { 
    677741    hibSess.save(o); 
    678742  } 
    679    
     743 
    680744  private void save(Object o) throws Throwable { 
    681745    sess.insert(o); 
     
    699763    sess.commit(); 
    700764  }*/ 
    701    
     765 
    702766  private boolean checkOnlyUser(BwOwnedDbentity ent) { 
    703767    if (!globals.onlyUsers) { 
    704768      return true; 
    705769    } 
    706      
     770 
    707771    if (globals.onlyUsersMap.get(ent.getOwner().getAccount()) == null) { 
    708772      return false; 
    709773    } 
    710      
     774 
    711775    return true; 
    712776  } 
    713    
     777 
    714778  private boolean checkOnlyUser(BwShareableDbentity ent) { 
    715779    if (!globals.onlyUsers) { 
    716780      return true; 
    717781    } 
    718      
     782 
    719783    if (globals.onlyUsersMap.get(ent.getOwner().getAccount()) == null) { 
    720784      return false; 
    721785    } 
    722      
     786 
    723787    if (globals.onlyUsersMap.get(ent.getCreator().getAccount()) == null) { 
    724788      ent.setCreator(ent.getOwner()); 
    725789    } 
    726      
     790 
    727791    return true; 
    728792  } 
  • trunk/calendar3/dumprestore/src/org/bedework/dumprestore/restore/Restore.java

    r415 r463  
    5454package org.bedework.dumprestore.restore; 
    5555 
     56import org.bedework.calenv.CalOptions; 
    5657import org.bedework.calfacade.BwCalendar; 
     58import org.bedework.calfacade.BwSystem; 
    5759import org.bedework.calfacade.BwUser; 
    5860import org.bedework.calfacade.svc.BwAdminGroup; 
     
    6163import org.bedework.calfacade.svc.BwView; 
    6264import org.bedework.dumprestore.Defs; 
     65import org.bedework.dumprestore.DumpRestoreConfig; 
    6366import org.bedework.dumprestore.restore.rules.RestoreRuleSet; 
    6467 
     
    7679 * 
    7780 * @author Mike Douglass   douglm@rpi.edu 
    78  * @version 1.0 
     81 * @version 3.1 
    7982 */ 
    8083public class Restore implements Defs { 
    8184  private transient Logger log; 
    8285 
     86  /* Properties can be supplied via the command line or via a the properties 
     87   * file with the prefix propertyPrefix + appName + "." 
     88   */ 
     89  private String appPrefix = "org.bedework.app."; 
     90 
     91  private String appName; 
     92 
     93  /* File we restore from */ 
     94  private String filename; 
     95 
    8396  //private boolean concatdesc = false; 
    8497 
    8598  //private boolean printData = false; 
    86  
    87   /** The dump file 
    88    */ 
    89   private String fileName; 
    90  
    91   /* runtime arg -i (id) */ 
    92   private String id = "sa"; 
    93  
    94   /* runtime arg -p (password) */ 
    95   private String pw = ""; 
    96  
    97   /* runtime arg -u  (url) */ 
    98   private String url = "jdbc:hsqldb:hsql://localhost:8887"; 
    99  
    100   /* runtime arg -d  (driver) */ 
    101   private String driver = "org.hsqldb.jdbcDriver"; 
    10299 
    103100  private RestoreGlobals globals = new RestoreGlobals(); 
     
    122119    if (globals.rintf == null) { 
    123120//      globals.rintf = new JdbcRestore(); 
    124       globals.rintf = new HibRestore(globals.debug); 
    125       globals.rintf.init(url, driver, id, pw, globals); 
     121      globals.rintf = new HibRestore(globals.config.getDebug()); 
     122      globals.rintf.init(globals); 
    126123      globals.rintf.open(); 
    127124    } 
    128125 
    129     if (globals.from2p3px) { 
     126    if (globals.config.getFrom2p3px()) { 
    130127      // System prefs are set up by run time pars 
    131128 
     
    150147 
    151148    digester.addRuleSet(new RestoreRuleSet(globals)); 
    152     digester.parse(new FileReader(fileName)); 
    153  
    154     if (globals.from2p3px) { 
     149    digester.parse(new FileReader(filename)); 
     150 
     151    if (globals.config.getFrom2p3px()) { 
    155152      makePrefs(); 
    156153      if (globals.rintf != null) { 
     
    286283 
    287284    for (int i = 0; i < args.length; i++) { 
    288       if (args[i].equals("")) { 
     285      if (args[i].equals("-debug")) { 
     286        globals.config.setDebug(true); 
     287      } else if (args[i].equals("-ndebug")) { 
     288        globals.config.setDebug(false); 
     289      } else if (args[i].equals("")) { 
    289290        // null arg generated by ant 
    290       } else if (args[i].equals("-debug")) { 
    291         globals.debug = true; 
    292       } else if (args[i].equals("-ndebug")) { 
    293         globals.debug = false; 
    294       } else if (args[i].equals("-debugentity")) { 
    295         globals.debugEntity = true; 
    296       } else if (args[i].equals("-ndebugentity")) { 
    297         globals.debugEntity = false; 
    298291      } else if (args[i].equals("-noarg")) { 
    299         globals.debug = false; 
    300       } else if (argpar("-supergroup", args, i)) { 
    301         i++; 
    302         globals.superGroupName = args[i]; 
    303       } else if (argpar("-defaultpubliccal", args, i)) { 
    304         i++; 
    305         globals.defaultPublicCalPath = args[i]; 
    306         trace("Setting null event calendars to " + args[i])
    307       } else if (args[i].equals("-from2p3px")) { 
    308         globals.from2p3px = true; 
     292        // noop 
     293      } else if (argpar("-appname", args, i)) { 
     294        i++; 
     295        // done earlier 
     296      } else if (args[i].equals("-initSyspars")) { 
     297        // done earlier 
     298      } else if (argpar("-f", args, i)) { 
     299        i++
     300        filename = args[i]; 
     301        /* Can we override these in the hibernate properties? 
    309302      } else if (argpar("-d", args, i)) { 
    310303        i++; 
     
    319312        i++; 
    320313        url = args[i]; 
    321       } else if (argpar("-f", args, i)) { 
    322         i++; 
    323         fileName = args[i]; 
    324       } else if (argpar("-timezones", args, i)) { 
    325         i++; 
    326         globals.timezonesFilename = args[i]; 
    327  
    328         /* System parameters */ 
    329       } else if (argpar("-sysname", args, i)) { 
    330         i++; 
    331         globals.syspars.setName(args[i]); 
    332       } else if (argpar("-tzid", args, i)) { 
    333         i++; 
    334         globals.syspars.setTzid(args[i]); 
    335       } else if (argpar("-sysid", args, i)) { 
    336         i++; 
    337         globals.syspars.setSystemid(args[i]); 
    338       } else if (argpar("-publiccalroot", args, i)) { 
    339         i++; 
    340         globals.syspars.setPublicCalendarRoot(args[i]); 
    341       } else if (argpar("-usercalroot", args, i)) { 
    342         i++; 
    343         globals.syspars.setUserCalendarRoot(args[i]); 
    344       } else if (argpar("-defusercal", args, i)) { 
    345         i++; 
    346         globals.syspars.setUserDefaultCalendar(args[i]); 
    347       } else if (argpar("-deftrashcal", args, i)) { 
    348         i++; 
    349         globals.syspars.setDefaultTrashCalendar(args[i]); 
    350       } else if (argpar("-definbox", args, i)) { 
    351         i++; 
    352         globals.syspars.setUserInbox(args[i]); 
    353       } else if (argpar("-defoutbox", args, i)) { 
    354         i++; 
    355         globals.syspars.setUserOutbox(args[i]); 
    356       } else if (argpar("-defuview", args, i)) { 
    357         i++; 
    358         globals.syspars.setDefaultUserViewName(args[i]); 
    359  
    360       } else if (argpar("-pu", args, i)) { 
    361         i++; 
    362         globals.syspars.setPublicUser(args[i]); 
     314        */ 
    363315 
    364316      } else if (argpar("-onlyusers", args, i)) { 
     
    375327        } 
    376328 
    377       } else if (argpar("-httpconnsperuser", args, i)) { 
    378         i++; 
    379         globals.syspars.setHttpConnectionsPerUser(intPar(args[i])); 
    380         globals.sysparsSetHttpConnectionsPerUser = true; 
    381       } else if (argpar("-httpconnsperhost", args, i)) { 
    382         i++; 
    383         globals.syspars.setHttpConnectionsPerHost(intPar(args[i])); 
    384         globals.sysparsSetHttpConnectionsPerHost = true; 
    385       } else if (argpar("-httpconns", args, i)) { 
    386         i++; 
    387         globals.syspars.setHttpConnections(intPar(args[i])); 
    388         globals.sysparsSetHttpConnections = true; 
    389  
    390       } else if (argpar("-defuquota", args, i)) { 
    391         i++; 
    392         globals.syspars.setDefaultUserQuota(longPar(args[i])); 
    393         globals.sysparsSetDefaultUserQuota = true; 
    394  
    395       } else if (argpar("-userauthClass", args, i)) { 
    396         i++; 
    397         globals.syspars.setUserauthClass(args[i]); 
    398       } else if (argpar("-mailerClass", args, i)) { 
    399         i++; 
    400         globals.syspars.setMailerClass(args[i]); 
    401       } else if (argpar("-admingroupsClass", args, i)) { 
    402         i++; 
    403         globals.syspars.setAdmingroupsClass(args[i]); 
    404       } else if (argpar("-usergroupsClass", args, i)) { 
    405         i++; 
    406         globals.syspars.setUsergroupsClass(args[i]); 
    407329      } else { 
    408330        error("Illegal argument: '" + args[i] + "'"); 
     
    415337  } 
    416338 
    417   private int intPar(String par) throws Throwable { 
    418     return Integer.parseInt(par); 
    419   } 
    420  
    421   private long longPar(String par) throws Throwable { 
    422     return Long.parseLong(par); 
    423   } 
    424  
    425339  void usage() { 
    426340    System.out.println("Usage:"); 
    427     System.out.println("args   -debug"); 
    428     System.out.println("       -ndebug"); 
    429     System.out.println("       -f filename"); 
    430     System.out.println("            define name of input file"); 
    431     System.out.println("       -concatdesc"); 
    432     System.out.println("            put all event description in one field"); 
    433     System.out.println("       -jdbc"); 
    434     System.out.println("            Update the database via jdbc"); 
    435     System.out.println("       -printdata"); 
    436     System.out.println("            print the data before restore"); 
     341    System.out.println("args   -appname name"); 
     342    System.out.println("       -f restorefilename"); 
    437343    System.out.println(""); 
    438344  } 
     
    447353    } 
    448354    return true; 
     355  } 
     356 
     357  void getConfigProperties(String[] args) throws Throwable { 
     358    /* Look for the appname arg */ 
     359 
     360    if (args != null) { 
     361      for (int i = 0; i < args.length; i++) { 
     362        if (argpar("-appname", args, i)) { 
     363          i++; 
     364          appName = args[i]; 
     365        } else if (args[i].equals("-initSyspars")) { 
     366          globals.config.setInitSyspars(true); 
     367        } 
     368      } 
     369    } 
     370 
     371    if (appName == null) { 
     372      error("Missing required argument -appname"); 
     373      throw new Exception("Invalid args"); 
     374    } 
     375 
     376    globals.init((DumpRestoreConfig)CalOptions.getProperty(appPrefix + appName)); 
     377    if (globals.config.getInitSyspars() || globals.config.getFrom2p3px()) { 
     378      globals.syspars = (BwSystem)CalOptions.getProperty("org.bedework.syspars"); 
     379    } 
    449380  } 
    450381 
     
    477408 
    478409    try { 
     410      long startTime = System.currentTimeMillis(); 
     411 
    479412      r = new Restore(); 
     413 
     414      r.getConfigProperties(args); 
    480415 
    481416      if (!r.processArgs(args)) { 
     
    491426      r.stats(); 
    492427 
     428      long millis = System.currentTimeMillis() - startTime; 
     429      long seconds = millis / 1000; 
     430      long minutes = seconds / 60; 
     431      seconds -= (minutes * 60); 
     432 
     433      r.info("Elapsed time: " + minutes + ":" + twoDigits(seconds)); 
    493434    } catch (Throwable t) { 
    494435      t.printStackTrace(); 
     
    501442    } 
    502443  } 
     444 
     445  private static String twoDigits(long val) { 
     446    if (val < 10) { 
     447      return "0" + val; 
     448    } 
     449 
     450    return String.valueOf(val); 
     451  } 
    503452} 
    504  
  • trunk/calendar3/dumprestore/src/org/bedework/dumprestore/restore/RestoreGlobals.java

    r415 r463  
    5656import org.bedework.appcommon.TimeZonesParser; 
    5757import org.bedework.calfacade.BwAttendee; 
    58 import org.bedework.calfacade.BwEvent; 
    59 import org.bedework.calfacade.BwEventAlarm; 
    6058import org.bedework.calfacade.BwEventAnnotation; 
    61 import org.bedework.calfacade.BwEventObj; 
    6259import org.bedework.calfacade.BwGroup; 
    6360import org.bedework.calfacade.BwCalendar; 
     
    6764import org.bedework.calfacade.BwSponsor; 
    6865import org.bedework.calfacade.BwSystem; 
    69 import org.bedework.calfacade.BwTimeZone; 
    70 import org.bedework.calfacade.BwTodoAlarm; 
    7166import org.bedework.calfacade.BwUser; 
    7267import org.bedework.calfacade.BwUserInfo; 
    73 import org.bedework.calfacade.filter.BwAndFilter; 
    74 import org.bedework.calfacade.filter.BwCategoryFilter; 
    75 import org.bedework.calfacade.filter.BwCreatorFilter; 
    7668import org.bedework.calfacade.filter.BwFilter; 
    77 import org.bedework.calfacade.filter.BwLocationFilter; 
    78 import org.bedework.calfacade.filter.BwNotFilter; 
    79 import org.bedework.calfacade.filter.BwOrFilter; 
    80 import org.bedework.calfacade.filter.BwSponsorFilter; 
    8169import org.bedework.calfacade.ifs.CalTimezones; 
    8270import org.bedework.calfacade.svc.BwAdminGroup; 
    83 import org.bedework.calfacade.svc.BwAuthUser; 
    84 import org.bedework.calfacade.svc.BwPreferences; 
    8571import org.bedework.calfacade.svc.BwSubscription; 
    8672import org.bedework.calfacade.svc.BwView; 
    87 import org.bedework.dumprestore.BwDbLastmod
     73import org.bedework.dumprestore.DumpRestoreConfig
    8874 
    8975import edu.rpi.cct.uwcal.access.Access; 
     
    9278 
    9379import java.io.FileInputStream; 
     80import java.util.ArrayList; 
    9481import java.util.Collection; 
    9582import java.util.HashMap; 
    9683import java.util.Iterator; 
    97 import java.util.Vector; 
    9884 
    9985/** Globals for the restore phase 
     
    10389 */ 
    10490public class RestoreGlobals { 
    105   /** */ 
    106   public boolean debug; 
     91  /** Set false at start of entity, set true on entity error 
     92   */ 
     93  public boolean entityError; 
     94 
     95  /** Config properties from options file. 
     96   */ 
     97  public DumpRestoreConfig config; 
    10798 
    10899  /** Map user with id of zero on to this id - fixes oversight */ 
    109100  public static int mapUser0 = 1; 
    110101 
    111   /** */ 
    112   public boolean debugEntity; 
    113  
    114   /** We can restore timezone info from this file 
    115    */ 
    116   public String timezonesFilename; 
    117  
    118102  /** System parameters object */ 
    119103  public BwSystem syspars = new BwSystem(); 
    120104 
    121   /** show syspars.setHttpConnectionsPerUser was set */ 
    122   public boolean sysparsSetHttpConnectionsPerUser; 
    123   /** show syspars.setHttpConnectionsPerHost was set */ 
    124   public boolean sysparsSetHttpConnectionsPerHost; 
    125   /** show syspars.setHttpConnections was set */ 
    126   public boolean sysparsSetHttpConnections; 
    127   /** show syspars.setDefaultUserQuota was set */ 
    128   public boolean sysparsSetDefaultUserQuota; 
    129  
    130105  /* Used when processing timezones */ 
    131106  private CalTimezones tzcache; 
    132107 
    133   /** True if we doing the conversion from 2.3.2 to V3 */ 
    134   public boolean from2p3px; 
    135  
    136   /** When converting put all admin groups into the new group with this name */ 
    137   public String superGroupName; 
    138  
    139108  /** The super admin group */ 
    140109  public BwGroup superGroup; 
     
    147116  /** Even number of elements, old-name followd by new-name 
    148117   */ 
    149   public Vector fixedCalendarNames = new Vector(); 
    150  
    151   /** If non-null we will set any events with no calendar to this one. 
    152    * This is mainly to fix errors in the data. All events should have a calendar. 
    153    */ 
    154   public String defaultPublicCalPath; 
     118  public ArrayList fixedCalendarNames = new ArrayList(); 
     119 
    155120  /** */ 
    156121  public BwCalendar defaultPublicCal; 
     
    172137   * Any event which already has a calendar id turned up in two calendars. 
    173138   */ 
    174   public Vector calLeaves = new Vector(); 
     139  public Collection calLeaves = new ArrayList(); 
    175140 
    176141  /** If true stop restore on any error, otherwise just flag it. 
     
    259224      Integer key = new Integer(owner.getId()); 
    260225 
    261       Vector v = (Vector)get(key); 
    262       if (v == null) { 
    263         v = new Vector(); 
    264         put(key, v); 
    265       } 
    266  
    267       v.add(new Integer(calid)); 
     226      ArrayList al = (ArrayList)get(key); 
     227      if (al == null) { 
     228        al = new ArrayList(); 
     229        put(key, al); 
     230      } 
     231 
     232      al.add(new Integer(calid)); 
    268233    } 
    269234 
     
    275240      Integer key = new Integer(owner.getId()); 
    276241 
    277       Vector v = (Vector)get(key); 
    278       if (v == null) { 
    279         v = new Vector(); 
    280         put(key, v); 
    281       } 
    282  
    283       v.add(sub); 
     242      ArrayList al = (ArrayList)get(key); 
     243      if (al == null) { 
     244        al = new ArrayList(); 
     245        put(key, al); 
     246      } 
     247 
     248      al.add(sub); 
    284249    } 
    285250 
     
    290255     */ 
    291256    public Collection getCalendarids(BwUser owner) { 
    292       return (Vector)get(new Integer(owner.getId())); 
     257      return (Collection)get(new Integer(owner.getId())); 
    293258    } 
    294259 
     
    298263     */ 
    299264    public Collection getSubs(BwUser owner) { 
    300       return (Vector)get(new Integer(owner.getId())); 
     265      return (Collection)get(new Integer(owner.getId())); 
    301266    } 
    302267 
     
    323288      return null; 
    324289    } 
     290 
     291    /** 
     292     * @param owner 
     293     * @param name 
     294     * @return BwSubscription 
     295     */ 
     296    public BwSubscription getSub(BwUser owner, String name) { 
     297      Collection subs = getSubs(owner); 
     298 
     299      if (subs == null) { 
     300        return null; 
     301      } 
     302 
     303      Iterator it = subs.iterator(); 
     304      while (it.hasNext()) { 
     305        BwSubscription sub = (BwSubscription)it.next(); 
     306        if (sub.getName().equals(name)) { 
     307          return sub; 
     308        } 
     309      } 
     310 
     311      return null; 
     312    } 
    325313  } 
    326314 
     
    335323      Integer key = new Integer(keyid); 
    336324 
    337       Vector v = (Vector)get(key); 
    338       if (v == null) { 
    339         v = new Vector(); 
    340         put(key, v); 
    341       } 
    342  
    343       v.add(new Integer(eventid)); 
     325      ArrayList al = (ArrayList)get(key); 
     326      if (al == null) { 
     327        al = new ArrayList(); 
     328        put(key, al); 
     329      } 
     330 
     331      al.add(new Integer(eventid)); 
    344332    } 
    345333 
     
    349337     */ 
    350338    public Collection getEventids(int keyid) { 
    351       return (Vector)get(new Integer(keyid)); 
     339      return (Collection)get(new Integer(keyid)); 
    352340    } 
    353341  } 
     
    433421  /** 
    434422   */ 
     423  public static class CalendarMap extends HashMap { 
     424    /** 
     425     * @param val 
     426     */ 
     427    public void put(BwCalendar val) { 
     428      put(val.getPath(), val); 
     429    } 
     430 
     431    /** 
     432     * @param path 
     433     * @return BwCalendar 
     434     */ 
     435    public BwCalendar get(String path) { 
     436      return (BwCalendar)get(path); 
     437    } 
     438  } 
     439 
     440  /** 
     441   */ 
    435442  public static class CategoryMap extends HashMap { 
    436443    /** 
     
    575582 
    576583  /** */ 
    577   public HashMap calendarsTbl = new HashMap(); 
     584  public CalendarMap calendarsTbl = new CalendarMap(); 
    578585 
    579586  /** Subscription we are currently restoring */ 
     
    585592  /** Classes to stand in for 2.3.2 classes */ 
    586593  public static class AliasFilter extends BwFilter { 
    587   } 
    588  
    589   /** Link tag-name to calendar class. For every entity tag generated by the dump 
    590    * there should be an entry in this table. 
    591    */ 
    592   public static final HashMap classes = new HashMap(); 
    593  
    594   static { 
    595     classes.put("aliasFilter", AliasFilter.class.getName()); 
    596     classes.put("andFilter", BwAndFilter.class.getName()); 
    597     classes.put("creatorFilter", BwCreatorFilter.class.getName()); 
    598     classes.put("keyFilter", BwCategoryFilter.class.getName()); 
    599     classes.put("locationFilter", BwLocationFilter.class.getName()); 
    600     classes.put("notFilter", BwNotFilter.class.getName()); 
    601     classes.put("orFilter", BwOrFilter.class.getName()); 
    602     classes.put("sponsorFilter", BwSponsorFilter.class.getName()); 
    603  
    604     classes.put("system", BwSystem.class.getName()); 
    605     classes.put("user", BwUser.class.getName()); 
    606     classes.put("timezone", BwTimeZone.class.getName()); 
    607     classes.put("calendar", BwCalendar.class.getName()); 
    608     classes.put("location", BwLocation.class.getName()); 
    609     classes.put("sponsor", BwSponsor.class.getName()); 
    610     classes.put("organizer", BwOrganizer.class.getName()); 
    611     classes.put("attendee", BwAttendee.class.getName()); 
    612     classes.put("event-alarm", BwEventAlarm.class.getName()); 
    613     classes.put("todo-alarm", BwTodoAlarm.class.getName()); 
    614     classes.put("keyword", BwCategory.class.getName()); 
    615     classes.put("category", BwCategory.class.getName()); 
    616     classes.put("authuser", BwAuthUser.class.getName()); 
    617     classes.put("event", BwEventObj.class.getName()); 
    618     classes.put("adminGroup", BwAdminGroup.class.getName()); 
    619     classes.put("user-prefs", BwPreferences.class.getName()); 
    620     classes.put("dblastmod", BwDbLastmod.class.getName()); 
    621  
    622     /* 2.3.2 */ 
    623     classes.put("eventRef", BwEvent.class.getName()); 
    624594  } 
    625595 
     
    644614    } 
    645615 
    646     tzcache = new TimezonesImpl(debug, getPublicUser(), rintf); 
     616    tzcache = new TimezonesImpl(config.getDebug(), getPublicUser(), rintf); 
    647617    tzcache.setDefaultTimeZoneId(syspars.getTzid()); 
    648618 
    649     if (from2p3px && (timezonesFilename != null)) { 
     619    if (config.getFrom2p3px() && (config.getTimezonesFilename() != null)) { 
    650620      // Populate from a file 
    651621      TimeZonesParser tzp = new TimeZonesParser( 
    652              new FileInputStream(timezonesFilename), 
    653              debug); 
     622             new FileInputStream(config.getTimezonesFilename()), 
     623             config.getDebug()); 
    654624 
    655625      Collection tzis = tzp.getTimeZones(); 
     
    716686    } 
    717687 
    718     if (superGroupName == null) { 
     688    if (config.getSuperGroupName() == null) { 
    719689      throw new Exception("superGroupName must be defined"); 
    720690    } 
    721691 
    722692    // Create it 
    723     BwAdminGroup sg = new BwAdminGroup(superGroupName); 
     693    BwAdminGroup sg = new BwAdminGroup(config.getSuperGroupName()); 
    724694    sg.setGroupOwner(getPublicUser()); 
    725695    sg.setOwner(getPublicUser()); 
     
    736706    if (defaultPublicAccess == null) { 
    737707      try { 
    738         Access a = new Access(debug); 
     708        Access a = new Access(config.getDebug()); 
    739709        defaultPublicAccess = a.getDefaultPublicAccess(); 
    740710        defaultPersonalAccess = a.getDefaultPublicAccess(); 
     
    768738   */ 
    769739  public String getDefaultPublicCalendarsAccess() throws Throwable { 
    770     Acl acl = new Acl(debug); 
     740    Acl acl = new Acl(config.getDebug()); 
    771741 
    772742    /** all owner, read others, read unauthenticated, (read,writeContent) group=superGroup */ 
     
    776746    acl.addAce(new Ace(null, false, Ace.whoTypeUnauthenticated, Access.read)); 
    777747 
    778     Ace rwcont = new Ace(getSuperGroup().getAccount(), false, 
     748    Ace rwcont = new Ace(config.getSuperGroupName(), false, 
    779749                        Ace.whoTypeGroup, Access.writeContent); 
    780750    rwcont.addPriv(Access.read); 
     
    818788    } 
    819789  } 
     790 
     791  /** 
     792   * @param config 
     793   */ 
     794  public void init(DumpRestoreConfig config) { 
     795    this.config = config; 
     796  } 
    820797} 
  • trunk/calendar3/dumprestore/src/org/bedework/dumprestore/restore/RestoreIntf.java

    r50 r463  
    5454package org.bedework.dumprestore.restore; 
    5555 
     56import org.bedework.calfacade.BwAttendee; 
    5657import org.bedework.calfacade.BwAlarm; 
    5758import org.bedework.calfacade.BwCalendar; 
     
    8081public interface RestoreIntf { 
    8182  /** 
    82    * @param url 
    83    * @param className 
    84    * @param id 
    85    * @param pw 
    8683   * @param globals 
    8784   * @throws Throwable 
    8885   */ 
    89   public void init(String url, 
    90                    String className, 
    91                    String id, 
    92                    String pw, 
    93                    RestoreGlobals globals) throws Throwable; 
    94  
    95   /** 
    96    * @param globals 
    97    * @throws Throwable 
    98    */ 
    9986  public void init(RestoreGlobals globals) throws Throwable; 
    10087 
     
    10592  public void open() throws Throwable; 
    10693 
     94  /** Call to start a transaction 
     95   * 
     96   * @throws Throwable 
     97   */ 
     98  public void startTransaction() throws Throwable; 
     99 
     100  /** Call to end a transaction 
     101   * 
     102   * @throws Throwable 
     103   */ 
     104  public void endTransaction() throws Throwable; 
     105 
    107106  /** Call at end of restoring to finish up. Will restore any cached values. 
    108107   * 
     
    124123   */ 
    125124  public void restoreUser(BwUser o) throws Throwable; 
     125 
     126  /** Restore attendee 
     127   * 
     128   * @param o 
     129   * @throws Throwable 
     130   */ 
     131  public void restoreAttendee(BwAttendee o) throws Throwable; 
    126132 
    127133  /** Restore user info 
     
    243249  public int fixUserEventsCal(BwUser u, BwCalendar cal) throws Throwable; 
    244250 
     251  /** 2.3 only 
     252   * @param val 
     253   * @throws Throwable 
     254   */ 
     255  public void restoreCalendars(BwCalendar val) throws Throwable; 
     256 
    245257  /** 
     258   * @param path 
     259   * @return BwCalendar 
     260   * @throws Throwable 
     261   */ 
     262  public BwCalendar getCalendar(String path) throws Throwable; 
     263 
     264  /** Save a single root calendar - no parent is set in the entity 
     265   * 
    246266   * @param val 
    247267   * @throws Throwable 
    248268   */ 
    249   public void restoreCalendars(BwCalendar val) throws Throwable; 
    250  
    251   /** Restore a single calendar 
     269  public void saveRootCalendar(BwCalendar val) throws Throwable; 
     270 
     271  /** Restore a single calendar - parent is set in the entity 
    252272   * 
    253273   * @param val 
    254274   * @throws Throwable 
    255275   */ 
    256   public void restoreCalendar(BwCalendar val) throws Throwable; 
     276  public void addCalendar(BwCalendar val) throws Throwable; 
    257277} 
    258278 
  • trunk/calendar3/dumprestore/src/org/bedework/dumprestore/restore/TimezonesImpl.java

    r278 r463  
    158158    } 
    159159    */ 
     160    if (tzinfo == null) { 
     161      return null; 
     162    } 
    160163 
    161164    return tzinfo.getTz(); 
     
    199202    lookup("not-a-timezone"); 
    200203  } 
    201    
     204 
    202205  /* ==================================================================== 
    203206   *                   Private methods 
  • trunk/calendar3/dumprestore/src/org/bedework/dumprestore/restore/rules/AdminGroupRule.java

    r260 r463  
    9090      } 
    9191 
    92       if (globals.from2p3px) { 
     92      if (globals.config.getFrom2p3px()) { 
    9393        globals.getSuperGroup().addGroupMember(entity); 
    9494      } 
  • trunk/calendar3/dumprestore/src/org/bedework/dumprestore/restore/rules/AuthUserRule.java

    r49 r463  
    7878        globals.rintf.restoreAuthUser(au); 
    7979 
    80         if (globals.from2p3px && (globals.userInfo != null)) { 
     80        if (globals.config.getFrom2p3px() && (globals.userInfo != null)) { 
    8181          globals.userInfo.setUser(au.getUser()); 
    8282          globals.rintf.restoreUserInfo(globals.userInfo); 
  • trunk/calendar3/dumprestore/src/org/bedework/dumprestore/restore/rules/CalendarRule.java

    r54 r463  
    7878    try { 
    7979      if (globals.rintf != null) { 
    80         globals.rintf.restoreCalendar(entity); 
     80        /* If the parent is null then this should be one of the root calendars, 
     81         */ 
     82        BwCalendar parent = entity.getCalendar(); 
     83        if (parent == null) { 
     84          // Ensure root 
     85          globals.rintf.saveRootCalendar(entity); 
     86        } else { 
     87          globals.rintf.addCalendar(entity); 
     88        } 
    8189      } 
    82       globals.calendarsTbl.put(new Integer(entity.getId()), entity); 
    8390    } catch (Throwable t) { 
    8491      throw new Exception(t); 
  • trunk/calendar3/dumprestore/src/org/bedework/dumprestore/restore/rules/EntityFieldRule.java

    r415 r463  
    175175 
    176176    if (name.equals("calendar")) { 
    177       entity.setCalendar(calendarFld()); 
     177      String path = stringFld(); 
     178 
     179      if ((path != null) && (path.length() > 0)) { 
     180        entity.setCalendar(calendarFld()); 
     181      } // Otherwise assume root calendar 
    178182      return true; 
    179183    } 
     
    228232 
    229233    if (name.equals("seq")) { 
    230       entity.setSeq(intFld()); 
     234      // Don't restore version number. 
     235      //entity.setSeq(intFld()); 
    231236      return true; 
    232237    } 
     
    377382      return dtim; 
    378383    } catch (Throwable t) { 
     384      if (t instanceof Exception) { 
     385        throw (Exception)t; 
     386      } 
    379387      throw new Exception(t); 
    380388    } 
     
    405413    } 
    406414 
    407     int id = Integer.parseInt(fldval); 
    408  
    409     return (BwCalendar)globals.calendarsTbl.get(new Integer(id)); 
     415    try { 
     416      return globals.rintf.getCalendar(fldval); 
     417    } catch (Throwable t) { 
     418      if (t instanceof Exception) { 
     419        throw (Exception)t; 
     420      } 
     421      throw new Exception(t); 
     422    } 
    410423  } 
    411424 
  • trunk/calendar3/dumprestore/src/org/bedework/dumprestore/restore/rules/EntityRule.java

    r75 r463  
    5454package org.bedework.dumprestore.restore.rules; 
    5555 
     56import org.bedework.calfacade.BwAttendee; 
     57import org.bedework.calfacade.BwCalendar; 
     58import org.bedework.calfacade.BwCategory; 
     59import org.bedework.calfacade.BwEvent; 
     60import org.bedework.calfacade.BwEventAlarm; 
     61import org.bedework.calfacade.BwEventAnnotation; 
     62import org.bedework.calfacade.BwEventObj; 
     63import org.bedework.calfacade.BwLocation; 
     64import org.bedework.calfacade.BwOrganizer; 
     65import org.bedework.calfacade.BwSponsor; 
     66import org.bedework.calfacade.BwSystem; 
     67import org.bedework.calfacade.BwTimeZone; 
     68import org.bedework.calfacade.BwTodoAlarm; 
     69import org.bedework.calfacade.BwUser; 
    5670import org.bedework.calfacade.base.BwShareableDbentity; 
     71import org.bedework.calfacade.filter.BwAndFilter; 
     72import org.bedework.calfacade.filter.BwCategoryFilter; 
     73import org.bedework.calfacade.filter.BwCreatorFilter; 
     74import org.bedework.calfacade.filter.BwLocationFilter; 
     75import org.bedework.calfacade.filter.BwNotFilter; 
     76import org.bedework.calfacade.filter.BwOrFilter; 
     77import org.bedework.calfacade.filter.BwSponsorFilter; 
     78import org.bedework.calfacade.svc.BwAdminGroup; 
     79import org.bedework.calfacade.svc.BwAuthUser; 
     80import org.bedework.calfacade.svc.BwPreferences; 
     81import org.bedework.dumprestore.BwDbLastmod; 
    5782import org.bedework.dumprestore.restore.RestoreGlobals; 
     83import org.bedework.dumprestore.restore.RestoreGlobals.AliasFilter; 
     84 
     85import java.util.HashMap; 
    5886 
    5987import org.xml.sax.Attributes; 
     
    6492 */ 
    6593public class EntityRule extends RestoreRule { 
     94 
     95  /** Link tag-name to calendar class. For every entity tag generated by the dump 
     96   * there should be an entry in this table. 
     97   */ 
     98  public static final HashMap classes = new HashMap(); 
     99 
     100  static { 
     101    classes.put("aliasFilter", AliasFilter.class.getName()); 
     102    classes.put("andFilter", BwAndFilter.class.getName()); 
     103    classes.put("creatorFilter", BwCreatorFilter.class.getName()); 
     104    classes.put("keyFilter", BwCategoryFilter.class.getName()); 
     105    classes.put("locationFilter", BwLocationFilter.class.getName()); 
     106    classes.put("notFilter", BwNotFilter.class.getName()); 
     107    classes.put("orFilter", BwOrFilter.class.getName()); 
     108    classes.put("sponsorFilter", BwSponsorFilter.class.getName()); 
     109 
     110    classes.put("system", BwSystem.class.getName()); 
     111    classes.put("user", BwUser.class.getName()); 
     112    classes.put("timezone", BwTimeZone.class.getName()); 
     113    classes.put("calendar", BwCalendar.class.getName()); 
     114    classes.put("location", BwLocation.class.getName()); 
     115    classes.put("sponsor", BwSponsor.class.getName()); 
     116    classes.put("organizer", BwOrganizer.class.getName()); 
     117    classes.put("attendee", BwAttendee.class.getName()); 
     118    classes.put("event-alarm", BwEventAlarm.class.getName()); 
     119    classes.put("todo-alarm", BwTodoAlarm.class.getName()); 
     120    classes.put("keyword", BwCategory.class.getName()); 
     121    classes.put("category", BwCategory.class.getName()); 
     122    classes.put("authuser", BwAuthUser.class.getName()); 
     123    classes.put("event", BwEventObj.class.getName()); 
     124    classes.put("event-annotation", BwEventAnnotation.class.getName()); 
     125    classes.put("adminGroup", BwAdminGroup.class.getName()); 
     126    classes.put("user-prefs", BwPreferences.class.getName()); 
     127    classes.put("dblastmod", BwDbLastmod.class.getName()); 
     128 
     129    /* 2.3.2 */ 
     130    classes.put("eventRef", BwEvent.class.getName()); 
     131  } 
     132 
    66133  EntityRule(RestoreGlobals globals) { 
    67134    super(globals); 
     
    69136 
    70137  public void begin(String ns, String name, Attributes att) { 
    71     if (globals.debugEntity) { 
     138    globals.entityError = false; 
     139 
     140    if (globals.config.getDebugEntity()) { 
    72141      trace("About to push entity for " + name); 
    73142    } 
    74143 
    75     String className = (String)RestoreGlobals.classes.get(name); 
     144    String className = (String)classes.get(name); 
    76145 
    77146    if (className == null) { 
     
    90159 
    91160      o = c.newInstance(); 
     161 
     162      push(o); 
     163 
     164      if (globals.rintf != null) { 
     165        globals.rintf.startTransaction(); 
     166      } 
    92167    } catch (ClassNotFoundException e) { 
    93168      throw new RuntimeException("Class " + className + " not found"); 
     
    95170      throw new RuntimeException(t); 
    96171    } 
    97  
    98     push(o); 
    99172  } 
    100173 
  • trunk/calendar3/dumprestore/src/org/bedework/dumprestore/restore/rules/EventFieldRule.java

    r246 r463  
    7777    } 
    7878 
    79     /* pre-hibernate fields */ 
    80     if (name.equals("lastmod")) { // pre-hibernate 
    81       e.setLastmod(isoDateTimeFld()); 
    82     } else if (name.equals("created")) {  // pre-hibernate 
    83       e.setCreated(isoDateTimeFld()); 
    84       e.setDtstamp(isoDateTimeFld()); 
    85     } else if (name.equals("longdesc")) { // pre-hibernate 
    86       e.setDescription(stringFld()); 
    87     } else if (name.equals("startdate")) { // pre-hibernate 
    88       e.setDtstart(dateFld()); 
    89     } else if (name.equals("starttime")) { // pre-hibernate 
    90       makeDateTimeFld(e.getDtstart()); 
    91     } else if (name.equals("enddate")) { // pre-hibernate 
    92       e.setEndType(BwEvent.endTypeDate); 
    93       e.setDtend(dateFld()); 
    94     } else if (name.equals("endtime")) { // pre-hibernate 
    95       makeDateTimeFld(e.getDtend()); 
    96     } else if (name.equals("shortdesc")) { // pre-hibernate 
    97       e.setSummary(stringFld()); 
    98     } else if (name.equals("keyword")) { // pre-hibernate 
    99       //globals.eventKeysTbl.put(intFld(), e.getId()); 
    100       BwCategory cat = categoryFld(); 
    101       e.addCategory(cat); 
    102       BwCalendar cal = globals.catCalTbl.get(cat.getId()); 
    103       if (cal == null) { 
    104         error("No mapping for category " + cat + " for event " + e); 
     79    try { 
     80      /* pre-hibernate fields */ 
     81      if (name.equals("lastmod")) { // pre-hibernate 
     82        e.setLastmod(isoDateTimeFld()); 
     83      } else if (name.equals("created")) {  // pre-hibernate 
     84        e.setCreated(isoDateTimeFld()); 
     85        e.setDtstamp(isoDateTimeFld()); 
     86      } else if (name.equals("longdesc")) { // pre-hibernate 
     87        e.setDescription(stringFld()); 
     88      } else if (name.equals("startdate")) { // pre-hibernate 
     89        e.setDtstart(dateFld()); 
     90      } else if (name.equals("starttime")) { // pre-hibernate 
     91        makeDateTimeFld(e.getDtstart()); 
     92      } else if (name.equals("enddate")) { // pre-hibernate 
     93        e.setEndType(BwEvent.endTypeDate); 
     94        e.setDtend(dateFld()); 
     95      } else if (name.equals("endtime")) { // pre-hibernate 
     96        makeDateTimeFld(e.getDtend()); 
     97      } else if (name.equals("shortdesc")) { // pre-hibernate 
     98        e.setSummary(stringFld()); 
     99      } else if (name.equals("keyword")) { // pre-hibernate 
     100        //globals.eventKeysTbl.put(intFld(), e.getId()); 
     101        BwCategory cat = categoryFld(); 
     102        e.addCategory(cat); 
     103        BwCalendar cal = globals.catCalTbl.get(cat.getId()); 
     104        if (cal == null) { 
     105          error("No mapping for category " + cat + " for event " + e); 
     106        } else { 
     107          e.setCalendar(cal); 
     108        } 
     109      } else if (name.equals("eventKeywords")) { // pre-hibernate 
     110        // Nothing to do. 
     111 
     112      } else if (name.equals("target-calendar")) { 
     113        BwEvent target = getAnnotationTarget(e); 
     114 
     115        // target.setCalendar() 
     116      } else if (name.equals("name")) { 
     117        e.setName(stringFld()); 
     118      } else if (name.equals("guid")) { 
     119        e.setGuid(stringFld()); 
     120      } else if (name.equals("summary")) { 
     121        e.setSummary(stringFld()); 
     122      } else if (name.equals("description")) { 
     123        e.setDescription(stringFld()); 
     124 
     125        /* Start */ 
     126      } else if (name.equals("start-date-type")) { 
     127        dateType = booleanFld(); 
     128        tzid = null; 
     129      } else if (name.equals("start-tzid")) { 
     130        tzid = stringFld(); 
     131      } else if (name.equals("start-dtval")) { 
     132        dtVal = fixedDateTimeFld(); 
     133      } else if (name.equals("start-date")) { 
     134        // Could compare given UTC time 
     135        e.setDtstart(dateTimeFld()); 
     136 
     137        /* end */ 
     138      } else if (name.equals("end-date-type")) { 
     139        dateType = booleanFld(); 
     140        tzid = null; 
     141      } else if (name.equals("end-tzid")) { 
     142        tzid = stringFld(); 
     143      } else if (name.equals("end-dtval")) { 
     144        dtVal = fixedDateTimeFld(); 
     145      } else if (name.equals("end-date")) { 
     146        // Could compare given UTC time 
     147        e.setDtend(dateTimeFld()); 
     148 
     149      } else if (name.equals("duration")) { 
     150        e.setDuration(stringFld()); 
     151      } else if (name.equals("end-type")) { 
     152        e.setEndType(charFld()); 
     153 
     154      } else if (name.equals("link")) { 
     155        e.setLink(stringFld()); 
     156      } else if (name.equals("status")) { 
     157        String status = stringFld(); 
     158        if ((status != null) && 
     159            (!status.equals("F"))) {       // 2.3 
     160          e.setStatus(status); 
     161        } 
     162      } else if (name.equals("cost")) { 
     163        e.setCost(stringFld()); 
     164      } else if (name.equals("deleted")) { 
     165        e.setDeleted(booleanFld()); 
     166 
     167      } else if (name.equals("dtstamp")) { 
     168        e.setDtstamp(stringFld()); 
     169      } else if (name.equals("last-mod")) { 
     170        e.setLastmod(stringFld()); 
     171      } else if (name.equals("create-date")) { 
     172        e.setCreated(stringFld()); 
     173 
     174      } else if (name.equals("priority")) { 
     175        e.setPriority(intFld()); 
     176      } else if (name.equals("sequence")) { 
     177        e.setSequence(intFld()); 
     178 
     179      } else if (name.equals("eventCategories")) { 
     180        // Nothing to do. 
     181      } else if (name.equals("category")) { 
     182        globals.eventKeysTbl.put(intFld(), e.getId()); 
     183        e.addCategory(categoryFld()); 
     184 
     185      } else if (name.equals("sponsor")) { 
     186        e.setSponsor(sponsorFld()); 
     187      } else if (name.equals("location")) { 
     188        e.setLocation(locationFld()); 
     189      } else if (name.equals("organizer")) { 
     190        e.setOrganizer(organizerFld()); 
     191 
     192      } else if (name.equals("transparency")) { 
     193        e.setTransparency(stringFld()); 
     194 
     195      } else if (name.equals("eventAttendees")) { 
     196        // Nothing to do. 
     197      } else if (name.equals("attendee")) { 
     198        throw new Exception("Unimplemented - attendee"); 
     199 
     200      } else if (name.equals("recurring")) { 
     201        e.setRecurring(booleanFld()); 
     202      } else if (name.equals("eventRecurrence")) { 
     203        // Nothing to do. 
     204      } else if (name.equals("rrule")) { 
     205        e.getRecurrence().addRrule(stringFld()); 
     206      } else if (name.equals("exrule")) { 
     207        e.getRecurrence().addExrule(stringFld()); 
     208 
     209        /* rdate */ 
     210      } else if (name.equals("rdate-date-type")) { 
     211        dateType = booleanFld(); 
     212        tzid = null; 
     213      } else if (name.equals("rdate-tzid")) { 
     214        tzid = stringFld(); 
     215      } else if (name.equals("rdate-dtval")) { 
     216        dtVal = stringFld(); 
     217      } else if (name.equals("rdate-date")) { 
     218        // Could compare given UTC time 
     219        e.getRecurrence().addRdate(dateTimeFld()); 
     220 
     221        /* exdate */ 
     222      } else if (name.equals("exdate-date-type")) { 
     223        dateType = booleanFld(); 
     224        tzid = null; 
     225      } else if (name.equals("exdate-tzid")) { 
     226        tzid = stringFld(); 
     227      } else if (name.equals("exdate-dtval")) { 
     228        dtVal = stringFld(); 
     229      } else if (name.equals("exdate-date")) { 
     230        // Could compare given UTC time 
     231        e.getRecurrence().addExdate(dateTimeFld()); 
     232 
     233      } else if (name.equals("recurrenceId")) { 
     234        e.setRecurrenceId(stringFld()); 
     235      } else if (name.equals("latestDate")) { 
     236        e.getRecurrence().setLatestDate(stringFld()); 
    105237      } else { 
    106         e.setCalendar(cal); 
     238        unknownTag(name); 
    107239      } 
    108     } else if (name.equals("eventKeywords")) { // pre-hibernate 
    109       // Nothing to do. 
    110  
    111     } else if (name.equals("target")) { 
    112       /* FIXME - this is wrong */ 
    113       // Create a dummy target 
    114       BwEvent target = new BwEventObj(); 
    115  
    116       target.setId(intFld()); 
    117       ((BwEventAnnotation)e).setTarget(target); 
    118  
    119     } else if (name.equals("name")) { 
    120       e.setName(stringFld()); 
    121     } else if (name.equals("guid")) { 
    122       e.setGuid(stringFld()); 
    123     } else if (name.equals("summary")) { 
    124       e.setSummary(stringFld()); 
    125     } else if (name.equals("description")) { 
    126       e.setDescription(stringFld()); 
    127  
    128       /* Start */ 
    129     } else if (name.equals("start-date-type")) { 
    130       dateType = booleanFld(); 
    131       tzid = null; 
    132     } else if (name.equals("start-tzid")) { 
    133       tzid = stringFld(); 
    134     } else if (name.equals("start-dtval")) { 
    135       dtVal = fixedDateTimeFld(); 
    136     } else if (name.equals("start-date")) { 
    137       // Could compare given UTC time 
    138       e.setDtstart(dateTimeFld()); 
    139  
    140       /* end */ 
    141     } else if (name.equals("end-date-type")) { 
    142       dateType = booleanFld(); 
    143       tzid = null; 
    144     } else if (name.equals("end-tzid")) { 
    145       tzid = stringFld(); 
    146     } else if (name.equals("end-dtval")) { 
    147       dtVal = fixedDateTimeFld(); 
    148     } else if (name.equals("end-date")) { 
    149       // Could compare given UTC time 
    150       e.setDtend(dateTimeFld()); 
    151  
    152     } else if (name.equals("duration")) { 
    153       e.setDuration(stringFld()); 
    154     } else if (name.equals("end-type")) { 
    155       e.setEndType(charFld()); 
    156  
    157     } else if (name.equals("link")) { 
    158       e.setLink(stringFld()); 
    159     } else if (name.equals("status")) { 
    160       String status = stringFld(); 
    161       if ((status != null) && 
    162           (!status.equals("F"))) {       // 2.3 
    163         e.setStatus(status); 
    164       } 
    165     } else if (name.equals("cost")) { 
    166       e.setCost(stringFld()); 
    167     } else if (name.equals("deleted")) { 
    168       e.setDeleted(booleanFld()); 
    169  
    170     } else if (name.equals("dtstamp")) { 
    171       e.setDtstamp(stringFld()); 
    172     } else if (name.equals("last-mod")) { 
    173       e.setLastmod(stringFld()); 
    174     } else if (name.equals("create-date")) { 
    175       e.setCreated(stringFld()); 
    176  
    177     } else if (name.equals("priority")) { 
    178       e.setPriority(intFld()); 
    179     } else if (name.equals("sequence")) { 
    180       e.setSequence(intFld()); 
    181  
    182     } else if (name.equals("eventCategories")) { 
    183       // Nothing to do. 
    184     } else if (name.equals("category")) { 
    185       globals.eventKeysTbl.put(intFld(), e.getId()); 
    186       e.addCategory(categoryFld()); 
    187  
    188     } else if (name.equals("sponsor")) { 
    189       e.setSponsor(sponsorFld()); 
    190     } else if (name.equals("location")) { 
    191       e.setLocation(locationFld()); 
    192     } else if (name.equals("organizer")) { 
    193       e.setOrganizer(organizerFld()); 
    194  
    195     } else if (name.equals("transparency")) { 
    196       e.setTransparency(stringFld()); 
    197  
    198     } else if (name.equals("eventAttendees")) { 
    199       // Nothing to do. 
    200     } else if (name.equals("attendee")) { 
    201       throw new Exception("Unimplemented - attendee"); 
    202  
    203     } else if (name.equals("recurring")) { 
    204       e.setRecurring(booleanFld()); 
    205     } else if (name.equals("eventRecurrence")) { 
    206       // Nothing to do. 
    207     } else if (name.equals("rrule")) { 
    208       e.getRecurrence().addRrule(stringFld()); 
    209     } else if (name.equals("exrule")) { 
    210       e.getRecurrence().addExrule(stringFld()); 
    211  
    212       /* rdate */ 
    213     } else if (name.equals("rdate-date-type")) { 
    214       dateType = booleanFld(); 
    215       tzid = null; 
    216     } else if (name.equals("rdate-tzid")) { 
    217       tzid = stringFld(); 
    218     } else if (name.equals("rdate-dtval")) { 
    219       dtVal = stringFld(); 
    220     } else if (name.equals("rdate-date")) { 
    221       // Could compare given UTC time 
    222       e.getRecurrence().addRdate(dateTimeFld()); 
    223  
    224       /* exdate */ 
    225     } else if (name.equals("exdate-date-type")) { 
    226       dateType = booleanFld(); 
    227       tzid = null; 
    228     } else if (name.equals("exdate-tzid")) { 
    229       tzid = stringFld(); 
    230     } else if (name.equals("exdate-dtval")) { 
    231       dtVal = stringFld(); 
    232     } else if (name.equals("exdate-date")) { 
    233       // Could compare given UTC time 
    234       e.getRecurrence().addExdate(dateTimeFld()); 
    235  
    236     } else if (name.equals("recurrenceId")) { 
    237       e.setRecurrenceId(stringFld()); 
    238     } else if (name.equals("latestDate")) { 
    239       e.getRecurrence().setLatestDate(stringFld()); 
    240     } else { 
    241       unknownTag(name); 
    242     } 
     240    } catch (Exception ex) { 
     241      error("Error processing event id " + e.getId(), ex); 
     242      globals.entityError = true; 
     243    } 
     244  } 
     245 
     246  private BwEvent getAnnotationTarget(BwEvent e) { 
     247    BwEventAnnotation ann = (BwEventAnnotation)e; 
     248    BwEvent target = ann.getTarget(); 
     249 
     250    if (target == null) { 
     251      target = new BwEventObj(); 
     252    } 
     253 
     254    ann.setTarget(target); 
     255    return target; 
     256  } 
     257 
     258  private BwEvent getAnnotationMaster(BwEvent e) { 
     259    BwEventAnnotation ann = (BwEventAnnotation)e; 
     260    BwEvent master = ann.getMaster(); 
     261 
     262    if (master == null) { 
     263      master = new BwEventObj(); 
     264    } 
     265 
     266    ann.setMaster(master); 
     267    return master; 
    243268  } 
    244269} 
  • trunk/calendar3/dumprestore/src/org/bedework/dumprestore/restore/rules/EventRule.java

    r235 r463  
    9090    BwEvent entity = (BwEvent)top(); 
    9191 
     92    if (globals.entityError) { 
     93      warn("Not restoring event because of previous error"); 
     94      warn(entity.toString()); 
     95      return; 
     96    } 
     97 
    9298    globals.events++; 
    9399 
    94     if (globals.debug) { 
     100    if (globals.config.getDebug()) { 
    95101      trace("Restore event # " + globals.events); 
    96102    } 
     
    98104    fixSharableEntity(entity, "Event"); 
    99105 
    100     /* If it's an alias, save an entry in the alia table then remove the dummy target. 
     106    /* If it's an alias, save an entry in the alias table then remove the dummy target. 
    101107     * We'll update them all at the end 
    102108     */ 
     
    107113 
    108114    try { 
    109       if (globals.from2p3px) { 
     115      if (globals.config.getFrom2p3px()) { 
    110116        if ((entity.getGuid() == null) || (entity.getGuid().length() == 0)) { 
    111117          if (globals.syspars.getSystemid() == null) { 
     
    122128          String guid = guidPrefix + globals.syspars.getSystemid(); 
    123129 
    124           if (globals.debug) { 
     130          if (globals.config.getDebug()) { 
    125131//            trace("Set guid for " + entity.getId() + " to " + guid); 
    126132          } 
  • trunk/calendar3/dumprestore/src/org/bedework/dumprestore/restore/rules/FilterRule.java

    r415 r463  
    8686 
    8787    try { 
    88       if (globals.from2p3px) { 
     88      if (globals.config.getFrom2p3px()) { 
    8989        /* We are converting filter definitions into calendar definitions. 
    9090         */ 
     
    108108          globals.calLeaves.add(entity); 
    109109          globals.catCalTbl.put(catf.getCategory().getId(), cal); 
    110           if (globals.debug) { 
     110          if (globals.config.getDebug()) { 
    111111            trace("Save calendar with id " + cal.getId()); 
    112112          } 
     
    153153          globals.nextCalKey++; 
    154154 
    155           globals.calendarsTbl.put(new Integer(cal.getId()), cal); 
    156  
    157155          if (entity.getParent() != null) { 
     156            // We set the path further up 
    158157            BwCalendar parent = (BwCalendar)globals.filterToCal.get( 
    159158                new Integer(entity.getParent().getId())); 
     
    165164              cal.setCalendar(parent); 
    166165              cal.setPath(parent.getPath() + "/" + cal.getName()); 
    167               if (cal.getPath().equals(globals.defaultPublicCalPath)) { 
     166              if (cal.getPath().equals(globals.config.getDefaultPublicCalPath())) { 
    168167                globals.defaultPublicCal = cal; 
    169168              } 
     
    172171          } 
    173172 
     173          globals.calendarsTbl.put(cal); 
     174 
    174175          globals.filterToCal.put(new Integer(entity.getId()), cal); 
    175176        } 
     
    177178        entity.setOwner(globals.getPublicUser()); 
    178179        entity.setPublick(true); 
    179       } 
     180      } // 2.3 
    180181 
    181182      if (globals.rintf != null) { 
  • trunk/calendar3/dumprestore/src/org/bedework/dumprestore/restore/rules/FiltersRule.java

    r59 r463  
    8080   */ 
    8181  public void end(String ns, String name) throws Exception { 
    82     if (!globals.from2p3px) { 
     82    if (!globals.config.getFrom2p3px()) { 
    8383      // Not converting 
    8484      return; 
     
    146146    ucal.addChild(cal); 
    147147 
    148     globals.calendarsTbl.put(new Integer(cal.getId()), cal); 
     148    globals.calendarsTbl.put(cal); 
    149149 
    150150    globals.defaultCalendars.put(new Integer(u.getId()), cal); 
  • trunk/calendar3/dumprestore/src/org/bedework/dumprestore/restore/rules/RestoreRule.java

    r49 r463  
    9696  } 
    9797 
     98  protected void error(String msg, Throwable t) { 
     99    getLog().error(msg, t); 
     100  } 
     101 
    98102  protected void warn(String msg) { 
    99103    getLog().warn(msg); 
  • trunk/calendar3/dumprestore/src/org/bedework/dumprestore/restore/rules/RestoreRuleSet.java

    r50 r463  
    9898    d.addRule("caldata/organizers/organizer/*", new OrganizerFieldRule(globals)); 
    9999 
     100    d.addRule("caldata/attendees/attendee", new AttendeeRule(globals)); 
     101    d.addRule("caldata/attendees/attendee/*", new AttendeeFieldRule(globals)); 
     102 
    100103    /* 2.3.2 
    101104    d.addRule("caldata/dblastmods/dblastmod", new DbLastmodRule(globals)); 
     
    131134    d.addRule("caldata/events/event/*", efr); 
    132135 
     136    d.addRule("caldata/event-annotations/event-annotation", new EventRule(globals)); 
     137    d.addRule("caldata/event-annotations/event-annotation/*", efr); 
     138 
    133139    AlarmRule alr = new AlarmRule(globals); 
    134140    AlarmFieldRule alfr = new AlarmFieldRule(globals); 
  • trunk/calendar3/dumprestore/src/org/bedework/dumprestore/restore/rules/SysparsFieldRule.java

    r64 r463  
    102102    } else if (name.equals("httpConnectionsPerUser")) { 
    103103      ent.setHttpConnectionsPerUser(parval(globals.syspars.getHttpConnectionsPerUser(), 
    104                                            globals.sysparsSetHttpConnectionsPerUser, 
    105104                                           intFld())); 
    106105    } else if (name.equals("httpConnectionsPerHost")) { 
    107106      ent.setHttpConnectionsPerHost(parval(globals.syspars.getHttpConnectionsPerHost(), 
    108                                            globals.sysparsSetHttpConnectionsPerHost, 
    109107                                           intFld())); 
    110108    } else if (name.equals("httpConnections")) { 
    111109      ent.setHttpConnections(parval(globals.syspars.getHttpConnections(), 
    112                                     globals.sysparsSetHttpConnections, 
    113110                                    intFld())); 
    114111 
     
    120117      ent.setMaxUserEntitySize(intFld()); 
    121118    } else if (name.equals("defaultUserQuota")) { 
    122       if (globals.sysparsSetDefaultUserQuota) { 
    123         ent.setDefaultUserQuota(globals.syspars.getDefaultUserQuota()); 
    124       } else { 
    125         ent.setDefaultUserQuota(longFld()); 
    126       } 
     119      ent.setDefaultUserQuota(parval(globals.syspars.getDefaultUserQuota(), 
     120                                     longFld())); 
    127121 
    128122    } else if (name.equals("userauthClass")) { 
     
    139133  } 
    140134 
    141   private int parval(int sysparVal, boolean isSet, int val) { 
    142     if (isSet) { 
     135  private int parval(int sysparVal, int val) { 
     136    if (sysparVal != 0) { 
     137      return sysparVal; 
     138    } 
     139 
     140    return val; 
     141  } 
     142 
     143  private long parval(long sysparVal, long val) { 
     144    if (sysparVal != 0) { 
    143145      return sysparVal; 
    144146    } 
  • trunk/calendar3/dumprestore/src/org/bedework/dumprestore/restore/rules/UserPrefsFieldRule.java

    r239 r463  
    7878    if (name.equals("email")) { 
    7979      p.setEmail(stringFld()); 
    80     } else if (name.equals("default-calendar")) { 
     80    } else if (name.equals("defaultCalendar")) { 
    8181      p.setDefaultCalendar(calendarFld()); 
    8282    } else if (name.equals("skinName")) { 
     
    9494    } else if (name.equals("workdayEnd")) { 
    9595      p.setWorkdayEnd(intFld()); 
     96    } else if (name.equals("preferredEndType")) { 
     97      p.setPreferredEndType(stringFld()); 
     98    } else if (name.equals("userMode")) { 
     99      p.setUserMode(intFld()); 
    96100 
    97101    // subscription fields 
     
    110114    } else if (name.equals("sub-owner")) { 
    111115      BwUser sowner = userFld(); 
    112        
     116 
    113117      if (!p.getOwner().equals(sowner)) { 
    114118        error("Subscription owners don't match for " + globals.curSub); 
     
    120124    } else if (name.equals("sub-affectsFreeBusy")) { 
    121125      globals.curSub.setAffectsFreeBusy(booleanFld()); 
     126    } else if (name.equals("sub-ignoreTransparency")) { 
     127      globals.curSub.setIgnoreTransparency(booleanFld()); 
    122128    } else if (name.equals("sub-display")) { 
    123129      globals.curSub.setDisplay(booleanFld()); 
     
    147153    } else if (name.equals("view-owner")) { 
    148154      BwUser vowner = userFld(); 
    149        
     155 
    150156      if (!p.getOwner().equals(vowner)) { 
    151157        error("View owners don't match for " + globals.curView); 
     
    155161    } else if (name.equals("view-subscriptions")) { 
    156162    } else if (name.equals("view-sub-id")) { 
     163      // pre 3.1 
    157164      BwSubscription sub = globals.subscriptionsTbl.getSub(p.getOwner(), intFld()); 
    158165 
     
    163170        globals.curView.addSubscription(sub); 
    164171      } 
     172    } else if (name.equals("view-sub-name")) { 
     173      BwSubscription sub = globals.subscriptionsTbl.getSub(p.getOwner(), stringFld()); 
     174 
     175      if (sub == null) { 
     176        error("  Missing subscription " + stringFld() + " for view " + 
     177              globals.curView); 
     178      } else { 
     179        globals.curView.addSubscription(sub); 
     180      } 
    165181    } 
    166182  } 
  • trunk/calendar3/dumprestore/src/org/bedework/dumprestore/restore/rules/UserRule.java

    r54 r463  
    7474    globals.users++; 
    7575 
    76     if (globals.from2p3px) { 
     76    if (globals.config.getFrom2p3px()) { 
    7777      entity.setCategoryAccess(globals.getDefaultPersonalAccess()); 
    7878      entity.setLocationAccess(globals.getDefaultPersonalAccess()); 
  • trunk/calendar3/test/src/org/bedework/tests/calsvc/CalSvcAlarmsTest.java

    r48 r463  
    151151      int twoAttendeeAlarm = alarm.getId(); 
    152152 
    153       alarm.addAttendee(new BwAttendee(null, null, null, null, 
     153      alarm.addAttendee(new BwAttendee(alarm.getOwner(), alarm.getPublick(), 
     154                                       null, null, null, null, 
    154155                                       null, null, null, true, 
    155156                                       null, null, "someone@rpi.edu", 
     
    228229      int twoAttendeeAlarm = alarm.getId(); 
    229230 
    230       alarm.addAttendee(new BwAttendee(null, null, null, null, 
     231      alarm.addAttendee(new BwAttendee(alarm.getOwner(), alarm.getPublick(), 
     232                                       null, null, null, null, 
    231233                                       null, null, null, true, 
    232234                                       null, null, "someone@rpi.edu", 
     
    261263 
    262264  private BwEventAlarm makeAlarm(String user, int mins) { 
    263     BwEventAlarm alarm = BwEventAlarm.emailAlarm(ev, new BwUser(user), 
     265    BwUser u = new BwUser(user); 
     266    BwEventAlarm alarm = BwEventAlarm.emailAlarm(ev, u, 
    264267                                                 "-PT" + mins + "M", true, true, 
    265268                                                 "PT5M", 1, 
     
    268271                                                 "Summary for alarm", 
    269272                                                 null);  //attendees 
    270     BwAttendee att = new BwAttendee(null, null, null, null, 
     273    BwAttendee att = new BwAttendee(u, false, null, null, null, null, 
    271274                                    null, null, null, true, 
    272275                                    null, null, "someone@rpi.edu",