Changeset 18
- Timestamp:
- 01/23/06 13:11:30
- Files:
-
- trunk/calendar3/.classpath (modified) (1 diff)
- trunk/calendar3/appcommon/build.xml (modified) (1 diff)
- trunk/calendar3/appcommon/src/org/bedework/appcommon/TimeZonesParser.java (added)
- trunk/calendar3/bldfiles/defjars.properties (modified) (1 diff)
- trunk/calendar3/build.properties (modified) (1 diff)
- trunk/calendar3/calCore/resources/properties/hibernate.cfg.xml (modified) (1 diff)
- trunk/calendar3/calCore/src/org/bedework/calcore/hibernate/CalintfImpl.java (modified) (12 diffs)
- trunk/calendar3/calCore/src/org/bedework/calcore/hibernate/Events.java (modified) (1 diff)
- trunk/calendar3/calFacade/src/org/bedework/calfacade/BwSystem.java (added)
- trunk/calendar3/calFacade/src/org/bedework/calfacade/CalFacadeException.java (modified) (2 diffs)
- trunk/calendar3/calFacade/src/org/bedework/calfacade/CalFacadeUtil.java (modified) (1 diff)
- trunk/calendar3/calFacade/src/org/bedework/calfacade/base/CalintfBase.java (modified) (2 diffs)
- trunk/calendar3/calFacade/src/org/bedework/calfacade/ifs/Calintf.java (modified) (2 diffs)
- trunk/calendar3/calsvc/src/org/bedework/calsvc/CalSvc.java (modified) (9 diffs)
- trunk/calendar3/config/configs/democal.properties (modified) (1 diff)
- trunk/calendar3/docs/todo.txt (modified) (4 diffs)
- trunk/calendar3/lib/ical4j-0.9.18.jar (added)
- trunk/calendar3/tools/build.xml (modified) (1 diff)
- trunk/calendar3/tools/dumprestore/build.xml (modified) (2 diffs)
- trunk/calendar3/tools/properties/dumprestore.properties (modified) (2 diffs)
- trunk/calendar3/tools/src/org/bedework/tools/dumprestore/restore/HibRestore.java (modified) (7 diffs)
- trunk/calendar3/tools/src/org/bedework/tools/dumprestore/restore/Restore.java (modified) (9 diffs)
- trunk/calendar3/tools/src/org/bedework/tools/dumprestore/restore/RestoreGlobals.java (modified) (6 diffs)
- trunk/calendar3/tools/src/org/bedework/tools/dumprestore/restore/RestoreIntf.java (modified) (3 diffs)
- trunk/calendar3/tools/src/org/bedework/tools/dumprestore/restore/TimezonesImpl.java (modified) (4 diffs)
- trunk/calendar3/tools/src/org/bedework/tools/dumprestore/restore/rules/AdminGroupRule.java (modified) (1 diff)
- trunk/calendar3/tools/src/org/bedework/tools/dumprestore/restore/rules/AuthUserRule.java (modified) (1 diff)
- trunk/calendar3/tools/src/org/bedework/tools/dumprestore/restore/rules/EntityFieldRule.java (modified) (1 diff)
- trunk/calendar3/tools/src/org/bedework/tools/dumprestore/restore/rules/EventRule.java (modified) (2 diffs)
- trunk/calendar3/tools/src/org/bedework/tools/dumprestore/restore/rules/FilterRule.java (modified) (2 diffs)
- trunk/calendar3/tools/src/org/bedework/tools/dumprestore/restore/rules/FiltersRule.java (modified) (5 diffs)
- trunk/calendar3/tools/src/org/bedework/tools/dumprestore/restore/rules/UserRule.java (modified) (1 diff)
- trunk/calendar3/webadmin/src/org/bedework/webadmin/timezones/PEUploadTimezonesAction.java (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/calendar3/.classpath
r2 r18 61 61 <classpathentry kind="lib" path="lib/xmlParserAPIs.jar"/> 62 62 <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/> 63 <classpathentry kind="lib" path="lib/ical4j-0.9.17.jar"/>64 63 <classpathentry kind="lib" path="lib/commons/commons-httpclient-3.0.jar"/> 64 <classpathentry kind="lib" path="lib/ical4j-0.9.18.jar"/> 65 65 <classpathentry kind="output" path="eclipse"/> 66 66 </classpath> trunk/calendar3/appcommon/build.xml
r2 r18 38 38 <pathelement location="${org.bedework.calsvci.jar}"/> 39 39 <pathelement location="${org.bedework.calfacadeshared.jar}"/> 40 <pathelement location="${org.bedework.ical.jar}"/> 40 41 <pathelement location="${org.bedework.locale.jar}"/> 41 42 </path> trunk/calendar3/bldfiles/defjars.properties
r2 r18 55 55 56 56 # ical4j.jar Used for icalendar translation. 57 ical4j.jar.name=ical4j-0.9.1 7.jar57 ical4j.jar.name=ical4j-0.9.18.jar 58 58 ical4j.jar=${org.bedework.default.lib}/${ical4j.jar.name} 59 59 trunk/calendar3/build.properties
r2 r18 37 37 product.name=Bedework 38 38 product.version=3 39 40 org.bedework.deploy.log4j.config=no trunk/calendar3/calCore/resources/properties/hibernate.cfg.xml
r2 r18 37 37 <mapping resource="SynchInfo.hbm.xml"/> 38 38 <mapping resource="SynchState.hbm.xml"/> 39 <mapping resource="System.hbm.xml"/> 39 40 <mapping resource="TimeZone.hbm.xml"/> 40 41 <mapping resource="Todo.hbm.xml"/> trunk/calendar3/calCore/src/org/bedework/calcore/hibernate/CalintfImpl.java
r2 r18 69 69 import org.bedework.calfacade.BwSynchInfo; 70 70 import org.bedework.calfacade.BwSynchState; 71 import org.bedework.calfacade.BwSystem; 71 72 import org.bedework.calfacade.BwTimeZone; 72 73 import org.bedework.calfacade.BwUser; … … 127 128 private boolean debug; 128 129 130 private BwSystem syspars; 131 129 132 private BwStats stats = new BwRWStats(); 130 133 … … 141 144 private AccessUtil access; 142 145 143 /* From core environment properties * /146 /* From core environment properties * / 144 147 private String systemId; 145 148 146 149 private String publicCalendarRoot; 147 private String publicCalendarRootPath;148 150 private String userCalendarRoot; 149 private String userCalendarRootPath;150 151 private String userDefaultCalendar; 151 152 private String defaultTrashCalendar; 153 */ 154 private String publicCalendarRootPath; 155 private String userCalendarRootPath; 152 156 153 157 /** Ensure we don't open while open … … 261 265 262 266 /** Define the roots of the calendars. 263 * /267 * / 264 268 publicCalendarRoot = CalEnv.getGlobalProperty("public.calroot"); 265 269 userCalendarRoot = CalEnv.getGlobalProperty("user.calroot"); 266 270 userDefaultCalendar = CalEnv.getGlobalProperty("default.user.calendar"); 267 271 defaultTrashCalendar = CalEnv.getGlobalProperty("default.trash.calendar"); 272 273 systemId = CalEnv.getGlobalProperty("systemid"); 274 */ 268 275 } catch (Throwable t) { 269 276 throw new CalFacadeException(t); 270 277 } 271 278 272 publicCalendarRootPath = "/" + publicCalendarRoot; 273 userCalendarRootPath = "/" + userCalendarRoot; 274 275 try { 276 systemId = CalEnv.getGlobalProperty("systemid"); 277 } catch (Throwable t) { 278 throw new CalFacadeException(t); 279 } 279 publicCalendarRootPath = "/" + getSyspars().getPublicCalendarRoot(); 280 userCalendarRootPath = "/" + getSyspars().getUserCalendarRoot(); 281 //systemId = getSyspars().getSystemid(); 280 282 281 283 if (user == null) { … … 350 352 } 351 353 352 /** Get the current stats353 *354 * @return BwStats object355 * @throws CalFacadeException if not admin356 */357 354 public BwStats getStats() throws CalFacadeException { 358 355 return stats; 359 356 } 360 357 361 /** Get the timezones cache object 362 * 363 * @return CalTimezones object 364 * @throws CalFacadeException if not admin 365 */ 358 public BwSystem getSyspars() throws CalFacadeException { 359 if (syspars == null) { 360 String name; 361 362 try { 363 name = CalEnv.getGlobalProperty("system.name"); 364 } catch (Throwable t) { 365 throw new CalFacadeException(t); 366 } 367 368 sess.namedQuery("getSystemPars"); 369 370 sess.setString("name", name); 371 372 syspars = (BwSystem)sess.getUnique(); 373 374 if (syspars == null) { 375 throw new CalFacadeException("No system parameters with name " + name); 376 } 377 378 if (debug) { 379 trace("Read system parameters: " + syspars); 380 } 381 } 382 return syspars; 383 } 384 366 385 public CalTimezones getTimezones() throws CalFacadeException { 367 386 return timezones; … … 549 568 550 569 public String getSysid() throws CalFacadeException { 551 return systemId;570 return getSyspars().getSystemid(); 552 571 } 553 572 … … 604 623 sess.namedQuery("getCalendarByPath"); 605 624 606 String path = "/" + userCalendarRoot;625 String path = "/" + getSyspars().getUserCalendarRoot(); 607 626 sess.setString("path", path); 608 627 … … 622 641 } 623 642 643 /* Create a folder for the user */ 624 644 usercal = new BwCalendar(); 625 645 usercal.setName(user.getAccount()); … … 633 653 sess.save(userrootcal); 634 654 655 /* Create a default calendar */ 635 656 BwCalendar cal = new BwCalendar(); 636 cal.setName( userDefaultCalendar);657 cal.setName(getSyspars().getUserDefaultCalendar()); 637 658 cal.setCreator(user); 638 659 cal.setOwner(user); 639 660 cal.setPublick(false); 640 cal.setPath(path + "/" + userDefaultCalendar);661 cal.setPath(path + "/" + getSyspars().getUserDefaultCalendar()); 641 662 cal.setCalendar(usercal); 642 663 cal.setCalendarCollection(true); … … 644 665 645 666 /* Add the trash calendar */ 646 647 667 cal = new BwCalendar(); 648 cal.setName( defaultTrashCalendar);668 cal.setName(getSyspars().getDefaultTrashCalendar()); 649 669 cal.setCreator(user); 650 670 cal.setOwner(user); 651 671 cal.setPublick(false); 652 cal.setPath(path + "/" + defaultTrashCalendar); 672 cal.setPath(path + "/" + getSyspars().getDefaultTrashCalendar()); 673 cal.setCalendar(usercal); 674 cal.setCalendarCollection(true); 675 usercal.addChild(cal); 676 677 /* Add the inbox */ 678 cal = new BwCalendar(); 679 cal.setName(getSyspars().getUserInbox()); 680 cal.setCreator(user); 681 cal.setOwner(user); 682 cal.setPublick(false); 683 cal.setPath(path + "/" + getSyspars().getUserInbox()); 684 cal.setCalendar(usercal); 685 cal.setCalendarCollection(true); 686 usercal.addChild(cal); 687 688 /* Add the outbox */ 689 cal = new BwCalendar(); 690 cal.setName(getSyspars().getUserOutbox()); 691 cal.setCreator(user); 692 cal.setOwner(user); 693 cal.setPublick(false); 694 cal.setPath(path + "/" + getSyspars().getUserOutbox()); 653 695 cal.setCalendar(usercal); 654 696 cal.setCalendarCollection(true); … … 907 949 908 950 sb.append("/"); 909 sb.append( userCalendarRoot);951 sb.append(getSyspars().getUserCalendarRoot()); 910 952 sb.append("/"); 911 953 sb.append(user.getAccount()); 912 954 sb.append("/"); 913 sb.append( userDefaultCalendar);955 sb.append(getSyspars().getUserDefaultCalendar()); 914 956 915 957 return getCalendar(sb.toString()); … … 920 962 921 963 sb.append("/"); 922 sb.append( userCalendarRoot);964 sb.append(getSyspars().getUserCalendarRoot()); 923 965 sb.append("/"); 924 966 sb.append(user.getAccount()); 925 967 sb.append("/"); 926 sb.append( defaultTrashCalendar);968 sb.append(getSyspars().getDefaultTrashCalendar()); 927 969 928 970 return getCalendar(sb.toString()); trunk/calendar3/calCore/src/org/bedework/calcore/hibernate/Events.java
r2 r18 966 966 } 967 967 968 debugMsg("Try query " + sb.toString());968 //debugMsg("Try query " + sb.toString()); 969 969 } 970 970 trunk/calendar3/calFacade/src/org/bedework/calfacade/CalFacadeException.java
r2 r18 88 88 "org.bedework.exception.duplicateguid"; 89 89 90 /** Error reading timezones */ 91 public static final String timezonesReadError = 92 "org.bedework.error.timezones.readerror"; 93 94 95 private String extra; 96 90 97 /** Constrictor 91 98 * … … 108 115 super(s); 109 116 } 117 118 /** 119 * @param s - retrieve with getMessage(), property ame 120 * @param extra String extra text 121 */ 122 public CalFacadeException(String s, String extra) { 123 super(s); 124 this.extra = extra; 125 } 126 127 /** 128 * @return String extra text 129 */ 130 public String getExtra() { 131 return extra; 132 } 110 133 } trunk/calendar3/calFacade/src/org/bedework/calfacade/CalFacadeUtil.java
r2 r18 503 503 } 504 504 505 /** Given a class name return an object of that class. 506 * The class parameter is used to check that the 507 * named class is an instance of that class. 508 * 509 * @param className String class name 510 * @param cl Class expected 511 * @return Object checked to be an instance of that class 512 * @throws CalFacadeException 513 */ 514 public static Object getObject(String className, Class cl) throws CalFacadeException { 515 try { 516 Object o = Class.forName(className).newInstance(); 517 518 if (o == null) { 519 throw new CalFacadeException("Class " + className + " not found"); 520 } 521 522 if (!cl.isInstance(o)) { 523 throw new CalFacadeException("Class " + className + 524 " is not a subclass of " + 525 cl.getName()); 526 } 527 528 return o; 529 } catch (CalFacadeException ce) { 530 throw ce; 531 } catch (Throwable t) { 532 throw new CalFacadeException(t); 533 } 534 } 535 505 536 /* ==================================================================== 506 537 ical utilities trunk/calendar3/calFacade/src/org/bedework/calfacade/base/CalintfBase.java
r2 r18 65 65 import org.bedework.calfacade.BwSynchInfo; 66 66 import org.bedework.calfacade.BwSynchState; 67 import org.bedework.calfacade.BwSystem; 67 68 import org.bedework.calfacade.BwUser; 68 69 import org.bedework.calfacade.CalFacadeAccessException; … … 168 169 } 169 170 171 public BwSystem getSyspars() throws CalFacadeException { 172 return null; 173 } 174 170 175 /** Get the timezones cache object 171 176 * trunk/calendar3/calFacade/src/org/bedework/calfacade/ifs/Calintf.java
r2 r18 64 64 import org.bedework.calfacade.BwSynchInfo; 65 65 import org.bedework.calfacade.BwSynchState; 66 import org.bedework.calfacade.BwSystem; 66 67 import org.bedework.calfacade.BwUser; 67 68 import org.bedework.calfacade.CalFacadeException; … … 121 122 public BwStats getStats() throws CalFacadeException; 122 123 124 /** Get the system pars 125 * 126 * @return BwSystem object 127 * @throws CalFacadeException if not admin 128 */ 129 public BwSystem getSyspars() throws CalFacadeException; 130 123 131 /** Get the timezones cache object 124 132 * trunk/calendar3/calsvc/src/org/bedework/calsvc/CalSvc.java
r2 r18 74 74 import org.bedework.calfacade.BwSynchInfo; 75 75 import org.bedework.calfacade.BwSynchState; 76 import org.bedework.calfacade.BwSystem; 76 77 import org.bedework.calfacade.BwUser; 77 78 import org.bedework.calfacade.CalFacadeAccessException; 78 79 import org.bedework.calfacade.CalFacadeDefs; 79 80 import org.bedework.calfacade.CalFacadeException; 81 import org.bedework.calfacade.CalFacadeUtil; 80 82 import org.bedework.calfacade.filter.BwFilter; 81 83 import org.bedework.calfacade.ifs.CalTimezones; … … 129 131 */ 130 132 private BwUser publicUser; 133 134 // Set up by call to getCal() 131 135 private String publicUserAccount; 132 136 … … 290 294 env = new CalEnv(appPrefix, debug); 291 295 292 publicUserAccount = CalEnv.getGlobalProperty("public.user");296 //publicUserAccount = CalEnv.getGlobalProperty("public.user"); 293 297 294 298 if (pars.isGuest() && (pars.getUser() == null)) { … … 325 329 } 326 330 331 /** Get the system pars 332 * 333 * @return BwSystem object 334 * @throws CalFacadeException if not admin 335 */ 336 public BwSystem getSyspars() throws CalFacadeException { 337 return getCal().getSyspars(); 338 } 339 327 340 public CalTimezones getTimezones() throws CalFacadeException { 328 341 return getCal().getTimezones(); … … 445 458 446 459 try { 447 userAuth = (UserAuth)Cal Env.getGlobalObject("userauthclass",460 userAuth = (UserAuth)CalFacadeUtil.getObject(getSyspars().getUserauthClass(), 448 461 UserAuth.class); 449 462 } catch (Throwable t) { … … 479 492 480 493 try { 481 userGroups = (Groups)Cal Env.getGlobalObject("usergroupsclass", Groups.class);494 userGroups = (Groups)CalFacadeUtil.getObject(getSyspars().getUsergroupsClass(), Groups.class); 482 495 userGroups.init(getGroupsCallBack()); 483 496 } catch (Throwable t) { … … 494 507 495 508 try { 496 adminGroups = (Groups)Cal Env.getGlobalObject("admingroupsclass", Groups.class);509 adminGroups = (Groups)CalFacadeUtil.getObject(getSyspars().getAdmingroupsClass(), Groups.class); 497 510 adminGroups.init(getGroupsCallBack()); 498 511 } catch (Throwable t) { … … 1781 1794 1782 1795 try { 1783 cali = (Calintf)CalEnv.getGlobalObject("calintfclass", 1784 Calintf.class); 1796 cali = (Calintf)CalEnv.getGlobalObject("calintfclass", Calintf.class); 1785 1797 } catch (Throwable t) { 1786 1798 throw new CalFacadeException(t); … … 1799 1811 debug); 1800 1812 1813 // Prepare for call below. 1814 publicUserAccount = cali.getSyspars().getPublicUser(); 1815 1801 1816 BwUser auth; 1802 1817 if (isPublicAdmin() || isGuest()) { trunk/calendar3/config/configs/democal.properties
r2 r18 24 24 # 25 25 org.bedework.global.hibernate.dialect=org.hibernate.dialect.HSQLDialect 26 org.bedework.global.systemid=demobedework@mysite.edu 27 org.bedework.global.directory.browsing.disallowed=false 28 org.bedework.global.http.connections.peruser=10 29 org.bedework.global.http.connections.perhost=50 30 org.bedework.global.http.connections=200 31 32 org.bedework.global.public.calroot=public 33 org.bedework.global.user.calroot=user 34 org.bedework.global.default.user.calendar=calendar 35 org.bedework.global.default.trash.calendar=Trash 36 org.bedework.global.public.user=public-user 37 org.bedework.global.timezoneroot=timezones 38 39 org.bedework.global.userauthclass=org.bedework.calcore.hibernate.UserAuthUWDbImpl 40 org.bedework.global.mailerclass=org.bedework.mail.DummyMailer 26 org.bedework.global.system.name=bedework 27 #org.bedework.global.systemid=demobedework@mysite.edu 28 #org.bedework.global.directory.browsing.disallowed=false 29 #org.bedework.global.http.connections.peruser=10 30 #org.bedework.global.http.connections.perhost=50 31 #org.bedework.global.http.connections=200 32 33 #org.bedework.global.public.calroot=public 34 #org.bedework.global.user.calroot=user 35 #org.bedework.global.default.user.calendar=calendar 36 #org.bedework.global.default.trash.calendar=Trash 37 #org.bedework.global.public.user=public-user 38 #org.bedework.global.timezoneroot=timezones 39 41 40 org.bedework.global.calintfclass=org.bedework.calcore.hibernate.CalintfImpl 42 org.bedework.global.update.check.interval=5000 43 org.bedework.global.admingroupsclass=org.bedework.calcore.hibernate.AdminGroupsDbImpl 44 org.bedework.global.usergroupsclass=org.bedework.calcore.hibernate.GroupsDbImpl 41 42 #org.bedework.global.userauthclass=org.bedework.calcore.hibernate.UserAuthUWDbImpl 43 #org.bedework.global.mailerclass=org.bedework.mail.DummyMailer 44 #org.bedework.global.admingroupsclass=org.bedework.calcore.hibernate.AdminGroupsDbImpl 45 #org.bedework.global.usergroupsclass=org.bedework.calcore.hibernate.GroupsDbImpl 46 #org.bedework.global.update.check.interval=5000 45 47 46 48 # trunk/calendar3/docs/todo.txt
r2 r18 5 5 -------------------------------------------------------------------------------- 6 6 -------------------------------------------------------------------------------- 7 -------------------------------------------------------------------------------- 8 The EventAnnotation class is causing multiple queries - (polymorphic queries) 9 For example, the hql "select count(*) from BwEvents where ..." 10 causes 2 queries and a non-unique result exception 11 12 Perhaps create a BwEventCommon class then subclass for BwEvent, 13 BwEventAnnotation? 7 svn 14 8 -------------------------------------------------------------------------------- 15 9 All times should have a timezone - we need to set the default timezone for the … … 28 22 is the container for that stuff. 29 23 -------------------------------------------------------------------------------- 30 Acl.encode should not encode Ace with inherited = true 24 The EventAnnotation class was causing multiple queries - (polymorphic queries) 25 For example, the hql "select count(*) from BwEvents where ..." 26 caused 2 queries and a non-unique result exception 27 28 Fixed by changing the hierarchy, making BwEvent a common base class then 29 subclass for BwEventObj and BwEventAnnotation. 31 30 -------------------------------------------------------------------------------- 32 31 FiltersRule needs to add Inbox … … 35 34 -------------------------------------------------------------------------------- 36 35 lazy="false" is set on calendar objects. 36 -------------------------------------------------------------------------------- 37 Acl.encode should not encode Ace with inherited = true 37 38 -------------------------------------------------------------------------------- 38 39 Access control not quite right. The requirements are something like: … … 103 104 -------------------------------------------------------------------------------- 104 105 Remove target from BwEvent? 105 --------------------------------------------------------------------------------106 Events.getEvent by guid/rid/seq fails because we get same guid in different107 users events. Do we enforce absolute uniqueness - probably108 109 Should probably remove owner from unique key110 106 -------------------------------------------------------------------------------- 111 107 We probably need the equivalent of an event info object at the Calintf level to trunk/calendar3/tools/build.xml
r2 r18 49 49 <pathelement location="${org.bedework.calcore.jar}"/> 50 50 <pathelement location="${org.bedework.access.jar}"/> 51 <pathelement location="${org.bedework.appcommon.jar}"/> 51 52 </path> 52 53 trunk/calendar3/tools/dumprestore/build.xml
r2 r18 197 197 <classpath refid="lib.restore.class.path" /> 198 198 <arg value="${org.bedework.restore.arg.debug}" /> 199 <!-- 200 <arg value="-printdata" /> 201 --> 199 <arg value="-supergroup" /> 200 <arg value="${org.bedework.restore.supergroup}" /> 201 <arg value="-f" /> 202 <arg value="${org.bedework.restore.arg.dumpfile}" /> 203 <arg value="${org.bedework.restore.arg.from2p3px}" /> 204 <arg line="${org.bedework.restore.arg.fixowner}" /> 205 <arg line="${org.bedework.restore.arg.defaultpubliccal}" /> 206 <arg line="${org.bedework.restore.arg.timezones}" /> 207 208 <arg value="-sysname" /> 209 <arg value="${org.bedework.restore.arg.sysname}" /> 210 <arg value="-tzid" /> 211 <arg value="${org.bedework.restore.arg.tzid}" /> 212 <arg value="-sysid" /> 213 <arg value="${org.bedework.restore.arg.sysid}" /> 214 202 215 <arg value="-publiccalroot" /> 203 216 <arg value="${org.bedework.env.public.calroot}" /> … … 208 221 <arg value="-deftrashcal" /> 209 222 <arg value="${org.bedework.env.default.trash.calendar}" /> 210 <arg value="-supergroup" /> 211 <arg value="${org.bedework.restore.supergroup}" /> 212 <arg value="-f" /> 213 <arg value="${org.bedework.restore.arg.dumpfile}" /> 214 <arg value="${org.bedework.restore.arg.hib}" /> 215 <arg line="${org.bedework.restore.arg.defaultpubliccal}" /> 223 <arg value="-definbox" /> 224 <arg value="${org.bedework.env.default.user.inbox}" /> 225 <arg value="-defoutbox" /> 226 <arg value="${org.bedework.env.default.user.outbox}" /> 227 216 228 <arg line="${org.bedework.restore.arg.public.user}" /> 217 <arg line="${org.bedework.restore.arg.fixowner}" /> 218 <arg value="-sysid" /> 219 <arg value="${org.bedework.restore.arg.sysid}" /> 229 230 <arg line="${org.bedework.restore.arg.dirbrowsing.disallowed}" /> 231 232 <arg line="${org.bedework.restore.arg.httpconns.peruser}" /> 233 <arg line="${org.bedework.restore.arg.httpconns.perhost}" /> 234 <arg line="${org.bedework.restore.arg.httpconns}" /> 235 236 <arg line="${org.bedework.restore.arg.userauthClass}" /> 237 <arg line="${org.bedework.restore.arg.mailerClass}" /> 238 <arg line="${org.bedework.restore.arg.admingroupsClass}" /> 239 <arg line="${org.bedework.restore.arg.usergroupsClass}" /> 240 <jvmarg value="-Xrunyjpagent:cpu=times,onexit=cpu" /> 220 241 <!-- 221 242 <arg value="-Djava.endorsed.dir=${org.bedework.default.lib}/endorsed"/>--> trunk/calendar3/tools/properties/dumprestore.properties
r2 r18 36 36 # -debug or -ndebug 37 37 org.bedework.restore.arg.debug=-debug 38 org.bedework.restore.arg.from2p3px= 38 39 39 org.bedework.restore.arg.hib=-nhib40 40 org.bedework.restore.arg.fixcals=-nfixcals 41 41 org.bedework.restore.arg.defaultpubliccal= … … 55 55 org.bedework.restore.arg.jdbcpw= 56 56 57 # ------------------- global properties -------------------------- 57 # -------------------- System parameters ---------------------------- 58 org.bedework.restore.arg.sysname=bedework 59 org.bedework.restore.arg.tzid=America/New_York 60 org.bedework.restore.arg.sysid=calendar@bedework.org 61 58 62 org.bedework.env.public.calroot=public 59 63 org.bedework.env.user.calroot=user 60 64 org.bedework.env.default.user.calendar=calendar 61 65 org.bedework.env.default.trash.calendar=Trash 66 org.bedework.env.default.user.inbox=Inbox 67 org.bedework.env.default.user.outbox=Outbox 62 68 69 org.bedework.restore.arg.public.user=-pu public-user 70 71 org.bedework.restore.arg.dirbrowsing.disallowed=-dirbrowsing-disallowed false 72 73 org.bedework.restore.arg.httpconns.peruser=-httpconnsperuser 10 74 org.bedework.restore.arg.httpconns.perhost=-httpconnsperhost 50 75 org.bedework.restore.arg.httpconns=-httpconns 200 76 77 org.bedework.restore.arg.userauthClass=-userauthClass org.bedework.calcore.hibernate.UserAuthUWDbImpl 78 org.bedework.restore.arg.mailerClass=-mailerClass org.bedework.mail.DummyMailer 79 org.bedework.restore.arg.admingroupsClass=-admingroupsClass org.bedework.calcore.hibernate.AdminGroupsDbImpl 80 org.bedework.restore.arg.usergroupsClass=-usergroupsClass org.bedework.calcore.hibernate.GroupsDbImpl 81 trunk/calendar3/tools/src/org/bedework/tools/dumprestore/restore/HibRestore.java
r2 r18 63 63 import org.bedework.calfacade.BwPrincipal; 64 64 import org.bedework.calfacade.BwSponsor; 65 import org.bedework.calfacade.BwSystem; 66 import org.bedework.calfacade.BwTimeZone; 65 67 import org.bedework.calfacade.BwUser; 66 68 import org.bedework.calfacade.BwUserInfo; … … 144 146 ps.close(); 145 147 148 ps = conn.prepareStatement("delete from bedework_settings"); 149 ps.executeUpdate(); 150 ps.close(); 151 146 152 ps = conn.prepareStatement("delete from adminGroupMembers"); 147 153 ps.executeUpdate(); … … 211 217 ps.executeUpdate(); 212 218 213 if (globals. toHibernate) {219 if (globals.from2p3px) { 214 220 ps = conn.prepareStatement("delete from filters"); 215 221 ps.executeUpdate(); … … 281 287 ps.close(); 282 288 283 if (!globals. toHibernate) {289 if (!globals.from2p3px) { 284 290 ps = conn.prepareStatement("delete from lastmods"); 285 291 ps.executeUpdate(); … … 306 312 } catch (Throwable t) { 307 313 } 314 } 315 316 public void restoreSyspars(BwSystem o) throws Throwable { 317 openSess(); 318 319 sess.save(o); 320 321 closeSess(); 308 322 } 309 323 … … 332 346 } 333 347 348 public void restoreTimezone(BwTimeZone o) throws Throwable { 349 openSess(); 350 351 sess.save(o); 352 353 closeSess(); 354 } 355 334 356 /* (non-Javadoc) 335 357 * @see org.bedework.tools.dumprestore.restore.RestoreIntf#restoreAdminGroup(org.bedework.calfacade.svc.BwAdminGroup) … … 338 360 openSess(); 339 361 340 if (globals. toHibernate) {362 if (globals.from2p3px) { 341 363 // No id assigned 342 364 sess.save(o); trunk/calendar3/tools/src/org/bedework/tools/dumprestore/restore/Restore.java
r2 r18 54 54 package org.bedework.tools.dumprestore.restore; 55 55 56 import org.bedework.appcommon.TimeZonesParser; 56 57 import org.bedework.calfacade.BwCalendar; 57 58 import org.bedework.calfacade.BwUser; … … 63 64 import org.bedework.tools.dumprestore.restore.rules.RestoreRuleSet; 64 65 66 import java.io.FileInputStream; 65 67 import java.io.FileReader; 66 68 import java.util.Collection; … … 121 123 122 124 void open() throws Throwable { 123 globals.timezones = new TimezonesImpl(false, globals.debug);124 125 125 if (globals.rintf == null) { 126 126 // globals.rintf = new JdbcRestore(); … … 129 129 globals.rintf.open(); 130 130 } 131 132 globals.timezones = new TimezonesImpl(globals.debug, 133 globals.getPublicUser(), 134 globals.rintf); 135 136 if (globals.from2p3px) { 137 // System prefs are set up by run time pars 138 139 globals.rintf.restoreSyspars(globals.syspars); 140 } 141 142 if (globals.timezonesFilename != null) { 143 TimeZonesParser tzp = new TimeZonesParser( 144 new FileInputStream(globals.timezonesFilename), 145 globals.debug); 146 147 Collection tzis = tzp.getTimeZones(); 148 149 Iterator it = tzis.iterator(); 150 while (it.hasNext()) { 151 TimeZonesParser.TimeZoneInfo tzi = (TimeZonesParser.TimeZoneInfo)it.next(); 152 153 globals.timezones.saveTimeZone(tzi.tzid, tzi.timezone); 154 } 155 } 131 156 } 132 157 … … 146 171 digester.parse(new FileReader(fileName)); 147 172 148 if (globals. toHibernate) {173 if (globals.from2p3px) { 149 174 makePrefs(); 150 175 if (globals.rintf != null) { … … 271 296 } else if (args[i].equals("-noarg")) { 272 297 globals.debug = false; 273 } else if (argpar("-sysid", args, i)) {274 i++;275 globals.systemId = args[i];276 } else if (argpar("-publiccalroot", args, i)) {277 i++;278 globals.publicCalendarRoot = args[i];279 298 } else if (argpar("-supergroup", args, i)) { 280 299 i++; … … 284 303 globals.defaultPublicCalPath = args[i]; 285 304 trace("Setting null event calendars to " + args[i]); 286 } else if (argpar("-usercalroot", args, i)) {287 i++;288 globals.userCalendarRoot = args[i];289 } else if (argpar("-defusercal", args, i)) {290 i++;291 globals.userDefaultCalendar = args[i];292 } else if (argpar("-deftrashcal", args, i)) {293 i++;294 globals.defaultTrashCalendar = args[i];295 305 } else if (argpar("-fixOwner", args, i)) { 296 306 i++; 297 307 globals.fixOwnerAccount = args[i]; 298 //} else if (args[i].equals("-concatdesc")) { 299 // concatdesc = true; 300 //} else if (args[i].equals("-printdata")) { 301 // printData = true; 302 } else if (args[i].equals("-hib")) { 303 globals.toHibernate = true; 304 } else if (args[i].equals("-nhib")) { 305 globals.toHibernate = false; 306 } else if (argpar("-pu", args, i)) { 307 i++; 308 globals.publicUserAccount = args[i]; 309 //} else if (args[i].equals("-jdbc")) { 310 // jdbcUpdate = true; 311 //} else if (args[i].equals("-njdbc")) { 312 // jdbcUpdate = false; 308 } else if (args[i].equals("-from2p3px")) { 309 globals.from2p3px = true; 313 310 } else if (argpar("-d", args, i)) { 314 311 i++; … … 326 323 i++; 327 324 fileName = args[i]; 325 } else if (argpar("-timezones", args, i)) { 326 i++; 327 globals.timezonesFilename = args[i]; 328 329 /* System parameters */ 330 } else if (argpar("-sysname", args, i)) { 331 i++; 332 globals.syspars.setName(args[i]); 333 } else if (argpar("-tzid", args, i)) { 334 i++; 335 globals.syspars.setTzid(args[i]); 336 } else if (argpar("-sysid", args, i)) { 337 i++; 338 globals.syspars.setSystemid(args[i]); 339 } else if (argpar("-publiccalroot", args, i)) { 340 i++; 341 globals.syspars.setPublicCalendarRoot(args[i]); 342 } else if (argpar("-usercalroot", args, i)) { 343 i++; 344 globals.syspars.setUserCalendarRoot(args[i]); 345 } else if (argpar("-defusercal", args, i)) { 346 i++; 347 globals.syspars.setUserDefaultCalendar(args[i]); 348 } else if (argpar("-deftrashcal", args, i)) { 349 i++; 350 globals.syspars.setDefaultTrashCalendar(args[i]); 351 } else if (argpar("-definbox", args, i)) { 352 i++; 353 globals.syspars.setUserInbox(args[i]); 354 } else if (argpar("-defoutbox", args, i)) { 355 i++; 356 globals.syspars.setUserOutbox(args[i]); 357 358 } else if (argpar("-pu", args, i)) { 359 i++; 360 globals.syspars.setPublicUser(args[i]); 361 362 } else if (argpar("-dirbrowsing-disallowed", args, i)) { 363 i++; 364 globals.syspars.setDirectoryBrowsingDisallowed("true".equals(args[i])); 365 366 } else if (argpar("-httpconnsperuser", args, i)) { 367 i++; 368 globals.syspars.setHttpConnectionsPerUser(intPar(args[i])); 369 } else if (argpar("-httpconnsperhost", args, i)) { 370 i++; 371 globals.syspars.setHttpConnectionsPerHost(intPar(args[i])); 372 } else if (argpar("-httpconns", args, i)) { 373 i++; 374 globals.syspars.setHttpConnections(intPar(args[i])); 375 376 } else if (argpar("-userauthClass", args, i)) { 377 i++; 378 globals.syspars.setUserauthClass(args[i]); 379 } else if (argpar("-mailerClass", args, i)) { 380 i++; 381 globals.syspars.setMailerClass(args[i]); 382 } else if (argpar("-admingroupsClass", args, i)) { 383 i++; 384 globals.syspars.setAdmingroupsClass(args[i]); 385 } else if (argpar("-usergroupsClass", args, i)) { 386 i++; 387 globals.syspars.setUsergroupsClass(args[i]); 328 388 } else { 329 389 error("Illegal argument: " + args[i]); … … 334 394 335 395 return true; 396 } 397 398 private int intPar(String par) throws Throwable { 399 return Integer.parseInt(par); 336 400 } 337 401 trunk/calendar3/tools/src/org/bedework/tools/dumprestore/restore/RestoreGlobals.java
r2 r18 62 62 import org.bedework.calfacade.BwOrganizer; 63 63 import org.bedework.calfacade.BwSponsor; 64 import org.bedework.calfacade.BwSystem; 64 65 import org.bedework.calfacade.BwUser; 65 66 import org.bedework.calfacade.BwUserInfo; … … 91 92 public boolean debugEntity; 92 93 94 /** We can restore timezone info from this file 95 */ 96 public String timezonesFilename; 97 98 /** System parameters object */ 99 public BwSystem syspars = new BwSystem(); 100 101 /** * / 102 public String publicCalendarRoot; 103 /** * / 104 public String userCalendarRoot; 105 /** * / 106 public String userDefaultCalendar; 107 /** * / 108 public String defaultTrashCalendar; 109 110 /** Account name for owner of public entities* / 111 public String publicUserAccount; 112 113 /** * / 114 public String systemId; // required for fixing guids 115 116 */ 117 93 118 /** */ 94 119 public CalTimezones timezones; 95 120 96 /** True if we doing the conversion from 2.3.2 to hibernate (V3)*/97 public boolean toHibernate;121 /** True if we doing the conversion from 2.3.2 to V3 */ 122 public boolean from2p3px; 98 123 99 124 /** When converting put all admin groups into the new group with this name */ … … 119 144 public BwCalendar defaultPublicCal; 120 145 121 /* names from env properties */122 123 /** */124 public String publicCalendarRoot;125 /** */126 public String userCalendarRoot;127 /** */128 public String userDefaultCalendar;129 /** */130 public String defaultTrashCalendar;131 132 /** Account name for owner of public entities*/133 public String publicUserAccount;134 135 146 /** User entry for owner of public entities. 136 147 */ … … 164 175 */ 165 176 public int fixedNoEndTime; 166 167 /** */168 public String systemId; // required for fixing guids169 177 170 178 /** Used when converting from 2.3.2 */ … … 559 567 classes.put("category", "org.bedework.calfacade.BwCategory"); 560 568 classes.put("authuser", "org.bedework.calfacade.svc.BwAuthUser"); 561 classes.put("event", "org.bedework.calfacade.BwEvent ");569 classes.put("event", "org.bedework.calfacade.BwEventObj"); 562 570 classes.put("adminGroup", "org.bedework.calfacade.svc.BwAdminGroup"); 563 571 classes.put("user-prefs", "org.bedework.calfacade.svc.BwPreferences"); … … 586 594 /* See if it's in the user map first. */ 587 595 588 if ( publicUserAccount== null) {596 if (syspars.getPublicUser() == null) { 589 597 throw new Exception("publicUserAccount must be defined"); 590 598 } 591 599 592 publicUser = usersTbl.get( publicUserAccount);600 publicUser = usersTbl.get(syspars.getPublicUser()); 593 601 594 602 if (publicUser == null) { 595 603 // Create it 596 publicUser = new BwUser( publicUserAccount);604 publicUser = new BwUser(syspars.getPublicUser()); 597 605 publicUser.setInstanceOwner(true); 598 606 publicUser.setCategoryAccess(getDefaultPublicAccess()); trunk/calendar3/tools/src/org/bedework/tools/dumprestore/restore/RestoreIntf.java
r2 r18 60 60 import org.bedework.calfacade.BwOrganizer; 61 61 import org.bedework.calfacade.BwSponsor; 62 import org.bedework.calfacade.BwSystem; 63 import org.bedework.calfacade.BwTimeZone; 62 64 import org.bedework.calfacade.BwUser; 63 65 import org.bedework.calfacade.BwUserInfo; … … 110 112 public void close() throws Throwable; 111 113 114 /** Restore system pars 115 * 116 * @param o 117 * @throws Throwable 118 */ 119 public void restoreSyspars(BwSystem o) throws Throwable; 120 112 121 /** Restore user 113 122 * … … 123 132 */ 124 133 public void restoreUserInfo(BwUserInfo o) throws Throwable; 134 135 /** Restore timezone 136 * 137 * @param o 138 * @throws Throwable 139 */ 140 public void restoreTimezone(BwTimeZone o) throws Throwable; 125 141 126 142 /** Restore an admin group - though not the user entries nor trunk/calendar3/tools/src/org/bedework/tools/dumprestore/restore/TimezonesImpl.java
r2 r18 57 57 import org.bedework.calfacade.BwUser; 58 58 //import org.bedework.calfacade.BwTimeZone; 59 import org.bedework.calfacade.BwTimeZone; 59 60 import org.bedework.calfacade.CalFacadeBadDateException; 60 61 import org.bedework.calfacade.CalFacadeException; … … 87 88 private transient Logger log; 88 89 89 private boolean publicAdmin;90 90 private boolean debug; 91 private boolean publick = true; // current mode 92 private BwUser user; 93 94 private RestoreIntf ri; 91 95 92 96 private static class TimezoneInfo { … … 107 111 //private transient Logger log; 108 112 109 TimezonesImpl(boolean publicAdmin, boolean debug)113 TimezonesImpl(boolean debug, BwUser user, RestoreIntf ri) 110 114 throws CalFacadeException { 111 this.publicAdmin = publicAdmin;112 115 this.debug = debug; 116 this.user = user; 117 this.ri = ri; 113 118 114 119 // Force fetch of timezones 115 120 //lookup("not-a-timezone"); 121 } 122 123 /** Set current publick mode 124 * 125 * @param val 126 */ 127 public void setPublick(boolean val) { 128 publick = val; 129 } 130 131 /** Set current user 132 * 133 * @param val 134 */ 135 public void setUser(BwUser val) { 136 user = val; 116 137 } 117 138 … … 121 142 force a refresh when we're done. 122 143 */ 123 if (publicAdmin) { 124 return; 144 145 BwTimeZone tz = new BwTimeZone(); 146 147 tz.setTzid(tzid); 148 tz.setPublick(publick); 149 tz.setOwner(user); 150 151 StringBuffer sb = new StringBuffer(); 152 153 sb.append("BEGIN:VCALENDAR\n"); 154 sb.append("PRODID:-//RPI//BEDEWORK//US\n"); 155 sb.append("VERSION:2.0\n"); 156 sb.append(vtz.toString()); 157 sb.append("END:VCALENDAR\n"); 158 159 tz.setVtimezone(sb.toString()); 160 161 try { 162 ri.restoreTimezone(tz); 163 } catch (Throwable t) { 164 throw new CalFacadeException(t); 125 165 } 126 166 trunk/calendar3/tools/src/org/bedework/tools/dumprestore/restore/rules/AdminGroupRule.java
r2 r18 90 90 } 91 91 92 if (globals. toHibernate) {92 if (globals.from2p3px) { 93 93 globals.getSuperGroup().addGroupMember(entity); 94 94 } trunk/calendar3/tools/src/org/bedework/tools/dumprestore/restore/rules/AuthUserRule.java
r2 r18 78 78 globals.rintf.restoreAuthUser(au); 79 79 80 if (globals. toHibernate&& (globals.userInfo != null)) {80 if (globals.from2p3px && (globals.userInfo != null)) { 81 81 globals.userInfo.setUser(au.getUser()); 82 82 globals.rintf.restoreUserInfo(globals.userInfo); trunk/calendar3/tools/src/org/bedework/tools/dumprestore/restore/rules/EntityFieldRule.java
r2 r18 148 148 149 149 /* XXX We need to handle timezones here as well */ 150 val.init(false, val.getDtval() + tmval, null, globals.timezones); 150 val.init(false, val.getDtval() + tmval, 151 globals.syspars.getTzid(), globals.timezones); 151 152 } 152 153 trunk/calendar3/tools/src/org/bedework/tools/dumprestore/restore/rules/EventRule.java
r2 r18 103 103 104 104 try { 105 if (globals. toHibernate) {105 if (globals.from2p3px) { 106 106 if ((entity.getGuid() == null) || (entity.getGuid().length() == 0)) { 107 if (globals.sys temId== null) {107 if (globals.syspars.getSystemid() == null) { 108 108 throw new Exception("You must supply a system id"); 109 109 } … … 116 116 } 117 117 118 String guid = guidPrefix + globals.sys temId;118 String guid = guidPrefix + globals.syspars.getSystemid(); 119 119 120 120 if (globals.debug) { trunk/calendar3/tools/src/org/bedework/tools/dumprestore/restore/rules/FilterRule.java
r2 r18 86 86 87 87 try { 88 if (globals. toHibernate) {88 if (globals.from2p3px) { 89 89 /* We are converting filter definitions into calendar definitions. 90 90 */ … … 124 124 // This is the root 125 125 globals.publicCalRoot = cal; 126 globals.publicCalRoot.setName(globals. publicCalendarRoot);127 globals.publicCalRoot.setPath("/" + globals. publicCalendarRoot);126 globals.publicCalRoot.setName(globals.syspars.getPublicCalendarRoot()); 127 globals.publicCalRoot.setPath("/" + globals.syspars.getPublicCalendarRoot()); 128 128 129 129 globals.publicCalRoot.setAccess(globals.getDefaultPublicCalendarsAccess()); trunk/calendar3/tools/src/org/bedework/tools/dumprestore/restore/rules/FiltersRule.java
r2 r18 80 80 */ 81 81 public void end(String ns, String name) throws Exception { 82 if (!globals. toHibernate) {82 if (!globals.from2p3px) { 83 83 // Not converting 84 84 return; … … 100 100 userRootCal.setId(globals.nextCalKey); 101 101 globals.nextCalKey++; 102 userRootCal.setName(globals. userCalendarRoot);103 userRootCal.setPath("/" + globals. userCalendarRoot);102 userRootCal.setName(globals.syspars.getUserCalendarRoot()); 103 userRootCal.setPath("/" + globals.syspars.getUserCalendarRoot()); 104 104 userRootCal.setCreator(globals.getPublicUser()); 105 105 userRootCal.setOwner(globals.getPublicUser()); … … 122 122 /* Create a user collection */ 123 123 124 /* Create a folder for the user */ 124 125 BwCalendar ucal = new BwCalendar(); 125 126 ucal.setId(globals.nextCalKey); … … 132 133 userRootCal.addChild(ucal); 133 134 135 /* Create a default calendar */ 134 136 BwCalendar cal = new BwCalendar(); 135 137 cal.setId(globals.nextCalKey); 136 138 globals.nextCalKey++; 137 cal.setName(globals. userDefaultCalendar);139 cal.setName(globals.syspars.getUserDefaultCalendar()); 138 140 cal.setPath(ucal.getPath() + "/" + cal.getName()); 139 141 cal.setCreator(u); … … 147 149 globals.defaultCalendars.put(new Integer(u.getId()), cal); 148 150 151 /* Add the trash calendar */ 149 152 cal = new BwCalendar(); 150 153 cal.setId(globals.nextCalKey); 151 154 globals.nextCalKey++; 152 cal.setName(globals.defaultTrashCalendar); 155 cal.setName(globals.syspars.getDefaultTrashCalendar()); 156 cal.setPath(ucal.getPath() + "/" + cal.getName()); 157 cal.setCreator(u); 158 cal.setOwner(u); 159 cal.setCalendar(ucal); 160 cal.setCalendarCollection(true); 161 ucal.addChild(cal); 162 163 /* Add the inbox */ 164 cal = new BwCalendar(); 165 cal.setId(globals.nextCalKey); 166 globals.nextCalKey++; 167 cal.setName(globals.syspars.getUserInbox()); 168 cal.setPath(ucal.getPath() + "/" + cal.getName()); 169 cal.setCreator(u); 170 cal.setOwner(u); 171 cal.setCalendar(ucal); 172 cal.setCalendarCollection(true); 173 ucal.addChild(cal); 174 175 /* Add the outbox */ 176 cal = new BwCalendar(); 177 cal.setId(globals.nextCalKey); 178 globals.nextCalKey++; 179 cal.setName(globals.syspars.getUserOutbox()); 153 180 cal.setPath(ucal.getPath() + "/" + cal.getName()); 154 181 cal.setCreator(u); trunk/calendar3/tools/src/org/bedework/tools/dumprestore/restore/rules/UserRule.java
r2 r18 74 74 globals.users++; 75 75 76 if (globals. toHibernate) {76 if (globals.from2p3px) { 77 77 entity.setCategoryAccess(globals.getDefaultPersonalAccess()); 78 78 entity.setLocationAccess(globals.getDefaultPersonalAccess()); trunk/calendar3/webadmin/src/org/bedework/webadmin/timezones/PEUploadTimezonesAction.java
r2 r18 55 55 package org.bedework.webadmin.timezones; 56 56 57 import org.bedework. calfacade.BwCalendar;57 import org.bedework.appcommon.TimeZonesParser; 58 58 import org.bedework.calsvci.CalSvcI; 59 import org.bedework.icalendar.IcalTranslator;60 import org.bedework.icalendar.IcalUtil;61 59 import org.bedework.webadmin.PEAbstractAction; 62 60 import org.bedework.webadmin.PEActionForm; 63 61 import org.bedework.webcommon.BwSession; 64 62 65 import edu.rpi.sss.util.xml.XmlUtil;66 67 68 import java.io.InputStream;69 import java.io.InputStreamReader;70 import java.io.Reader;71 63 import java.util.Collection; 72 64 import java.util.Iterator; 73 import java.util.Vector;74 65 import javax.servlet.http.HttpServletRequest; 75 import javax.xml.parsers.DocumentBuilderFactory;76 import javax.xml.parsers.DocumentBuilder;77 78 import net.fortuna.ical4j.model.Calendar;79 import net.fortuna.ical4j.model.component.VTimeZone;80 import net.fortuna.ical4j.model.ComponentList;81 import net.fortuna.ical4j.model.Property;82 66 83 67 import org.apache.struts.upload.FormFile; 84 85 import org.w3c.dom.Document;86 import org.w3c.dom.Element;87 import org.xml.sax.InputSource;88 //import org.w3c.dom.NodeList;89 import org.xml.sax.SAXException;90 68 91 69 /** This action imports the uploaded system timezone definitions. … … 119 97 } 120 98 121 InputStream is = upFile.getInputStream();99 TimeZonesParser tzp = new TimeZonesParser(upFile.getInputStream(), debug); 122 100 123 /* The input file should look something like: 124 <dir> 125 <name>A-name</name> 126 <dir>...</dir> 127 <file> 128 <name>file1.ics</name> 129 <data>...</data> 130 </file> 131 </dir> 132 133 We ignore the first name - it represents the root. 134 Each <dir> element may contain other <dir> and <file> elements. 135 Each <name> element is a path element 136 */ 137 138 DirClass rootDir = parseTzDefs(new InputStreamReader(is)); 139 if (!rootDir.ok) { 140 form.getErr().emit("org.bedework.error.timezones.parseerror", 141 rootDir.msg); 142 return "error"; 143 } 101 Collection tzis = tzp.getTimeZones(); 144 102 145 103 CalSvcI svci = form.getCalSvcI(); 146 104 147 if (!doDir(svci, rootDir, "", form)) { 148 return "error"; 105 Iterator it = tzis.iterator(); 106 while (it.hasNext()) { 107 TimeZonesParser.TimeZoneInfo tzi = (TimeZonesParser.TimeZoneInfo)it.next(); 108 109 svci.saveTimeZone(tzi.tzid, tzi.timezone); 149 110 } 150 111 … … 153 114 return "success"; 154 115 } 155 156 private boolean doDir(CalSvcI svci, DirClass dir, String indent,157 PEActionForm form) throws Throwable {158 if (debug) {159 debugMsg(indent + "Dir: " + dir.cal.getName());160 }161 162 Iterator dit = dir.dirs.iterator();163 while (dit.hasNext()) {164 doDir(svci, (DirClass)dit.next(), indent + " ", form);165 }166 167 Iterator tzit = dir.tzs.iterator();168 while (tzit.hasNext()) {169 Calendar ical = (Calendar)tzit.next();170 171 ComponentList cl = ical.getComponents();172 173 if (cl.size() != 1) {174 form.getErr().emit("org.bedework.error.timezones.dataerror",175 cl.size() + " components in Calendar");176 return false;177 }178 179 Object o = cl.get(0);180 if (!(o instanceof VTimeZone)) {181 form.getErr().emit("org.bedework.error.timezones.dataerror",182 "component in Calendar not VTimeZone");183 return false;184 }185 186 VTimeZone tz = (VTimeZone)o;187 String tzid = IcalUtil.getProperty(tz, Property.TZID).getValue();188 189 svci.saveTimeZone(tzid, tz);190 191 if (debug) {192 debugMsg(indent + "tzid: " + tzid);193 }194 }195 196 return true;197 }198 199 private static class DirClass {200 boolean ok = true; // Set in root only201 String msg;202 BwCalendar cal; // The name will be set according to the dir/name203 204 Collection dirs = new Vector();205 206 /* Collection of Calendar obects207 */208 Collection tzs = new Vector();209 }210 211 private DirClass parseTzDefs(Reader rdr) throws Throwable {212 Document doc = null;213 boolean ok;214 String msg = null;215 216 try {217 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();218 factory.setNamespaceAware(false);219 220 DocumentBuilder builder = factory.newDocumentBuilder();221 222 doc = builder.parse(new InputSource(rdr));223 ok = true;224 } catch (SAXException e) {225 msg = e.getMessage();226 ok = false;227 } catch (Throwable t) {228 msg = t.getMessage();229 ok = false;230 } finally {231 if (rdr != null) {232 try {233 rdr.close();234 } catch (Throwable t) {}235 }236 }237 238 if (!ok) {239 DirClass dir = new DirClass();240 dir.ok = false;241 dir.msg = msg;242 return dir;243 }244 245 return processDir(doc.getDocumentElement());246 }247 248 private DirClass processDir(Element dir) throws Throwable {249 DirClass d = new DirClass();250 Collection children = XmlUtil.getElements(dir);251 252 Iterator it = children.iterator();253 254 /* First is name */255 256 Element nmel = (Element)it.next();257 258 d.cal = new BwCalendar();259 d.cal.setName(XmlUtil.getElementContent(nmel));260 261 while (it.hasNext()) {262 Element el = (Element)it.next();263 264 if ("dir".equals(el.getTagName())) {265 d.dirs.add(processDir(el));266 } else if ("file".equals(el.getTagName())) {267 d.tzs.add(processFile(el));268 } else {269 throw new Exception("Expected <dir> or <file>, found: " + el.getTagName());270 }271 }272 273 return d;274 }275 276 private Calendar processFile(Element ics) throws Throwable {277 //NodeList ds = ics.getElementsByTagName("data");278 279 Collection children = XmlUtil.getElements(ics);280 281 Iterator it = children.iterator();282 283 /* First is name */284 285 Element el = (Element)it.next();286 if (!"name".equals(el.getTagName())) {287 throw new Exception("Expected <name>, found: " + el.getTagName());288 }289 290 /* Next is data */291 el = (Element)it.next();292 if (!"data".equals(el.getTagName())) {293 throw new Exception("Expected <data>, found: " + el.getTagName());294 }295 296 return IcalTranslator.getCalendar(XmlUtil.getElementContent(el));297 }298 116 } 299 117
