1 40 package com.mvnforum.admin.importexport.jive; 41 42 import java.io.File ; 43 import java.io.IOException ; 44 import java.util.Calendar ; 45 import java.util.Vector ; 46 import javax.servlet.http.HttpServletRequest ; 47 import javax.servlet.http.HttpServletResponse ; 48 49 import org.apache.commons.digester.Digester; 50 import org.apache.commons.logging.Log; 51 import org.apache.commons.logging.LogFactory; 52 import org.xml.sax.SAXException ; 53 import com.mvnforum.MVNForumConfig; 54 import com.mvnforum.admin.CategoryXML; 55 import com.mvnforum.admin.ImportWebHelper; 56 import com.mvnforum.admin.importexport.SetParentRule; 57 import net.myvietnam.mvncore.exception.*; 58 59 69 public class ImportJive extends ImportWebHelper { 70 71 72 private static Log log = LogFactory.getLog(ImportJive.class); 73 74 75 private ImportJive() { 76 } 77 78 79 106 public static void importXml(File importFile, 107 HttpServletRequest request, HttpServletResponse response, 108 int logonMemberID, String logonMemberName, 109 Calendar importTime, String importIP, boolean clearIfError, 110 Vector otherFieldValues, int messageLevel) 111 throws ImportException { 112 for (int i=0; i<otherFieldValues.size()-1; i+=2) { 113 String name=(String )otherFieldValues.get(i); 114 String value=(String )otherFieldValues.get(i+1); 115 if (name!=null) { 116 if (name.equals("ForumPasswords")) JiveXML.allForumsPassword=value; 117 else if (name.equals("RootCategory")) JiveXML.rootCategoryName=value; 118 else if (name.equals("RootCategoryDesc")) JiveXML.rootCategoryDesc=value; 119 else if (name.equals("JiveGuest")) JiveXML.guestName=value; 120 else if (name.equals("JiveAdmin")) JiveXML.adminName=value; 121 } 123 } 124 125 try { 126 response.setContentType("text/html; charset=utf-8"); 127 setOutputHtmlWriter(response.getWriter()); 128 setMessageOutputLevel(messageLevel); 129 startHtml(request); 130 clearDatabase(); 131 clearFiles(request.getSession().getServletContext()); 132 } catch (DatabaseException e) { 133 handleFatalError("Database error while clearing previous contents.", 134 e, clearIfError, request); 135 } catch (IOException e) { 136 handleFatalError("I/O error while clearing previous contents.", 137 e, clearIfError, request); 138 } 139 140 try { 141 processXml(importFile, importTime); 142 handleSuccess(request); 143 } catch (ImportException e) { 144 handleFatalError(e.getMessage(), e.getException(), 145 clearIfError, request); 146 } catch (IOException e) { 147 handleFatalError("I/O error while reading XML file.", 148 e, clearIfError, request); 149 } catch (SAXException e) { 150 if (e.getException()==null) { 151 handleFatalError("Error while parsing uploaded XML file.", 152 e, clearIfError, request); 153 } else { 154 handleFatalError("Error while parsing uploaded XML file.", 155 e.getException(), clearIfError, request); 156 } 157 } finally { 158 163 } 164 } 165 166 167 184 protected static void processXml(File inputFile, Calendar importTime) 185 throws IOException , SAXException , ImportException { 186 addImportantMessage("Starting migration of data..."); 187 188 Digester digester=new Digester(); 190 digester.setValidating(true); 192 digester.setNamespaceAware(true); 193 194 195 209 210 217 digester.addObjectCreate("Jive", JiveXML.class); 218 digester.addSetProperties("Jive", "xmlversion", "jiveXmlVersion"); 219 digester.addSetProperties("Jive", "exportDate", "jiveExportDate"); 220 221 222 223 digester.addObjectCreate("Jive/UserList/User", JiveUserXML.class); 224 digester.addCallMethod("Jive/UserList/User", "addJiveUser", 9); 226 digester.addCallParam("Jive/UserList/User/Username", 0); 227 digester.addCallParam("Jive/UserList/User/Password", 1); 228 digester.addCallParam("Jive/UserList/User/Email", 2); 229 digester.addCallParam("Jive/UserList/User/Email", 3, "visible"); 230 digester.addCallParam("Jive/UserList/User/Name", 4); 231 digester.addCallParam("Jive/UserList/User/Name", 5, "visible"); 232 digester.addCallParam("Jive/UserList/User/CreationDate", 6); 233 digester.addCallParam("Jive/UserList/User/ModifiedDate", 7); 234 digester.addCallParam("Jive/UserList/User/RewardPoints", 8); 235 ImportJive.addMessage("All Jive/UserList/User/PropertyList/Property will be ignored."); 236 237 238 243 digester.addObjectCreate("Jive/GroupList/Group", JiveGroupXML.class); 244 245 digester.addCallMethod("Jive/GroupList/Group", "addJiveGroup"); 246 digester.addCallMethod("Jive/GroupList/Group/Name", "setGroupName", 0); 248 digester.addCallMethod("Jive/GroupList/Group/Description", "setGroupDescription", 0); 249 digester.addCallMethod("Jive/GroupList/Group/CreationDate", "setGroupCreationDate", 0); 250 digester.addCallMethod("Jive/GroupList/Group/ModifiedDate", "setGroupModifiedDate", 0); 251 digester.addCallMethod("Jive/GroupList/Group/AdministratorList/Username", "setGroupOwnerName", 0); 252 ImportJive.addMessage("All Jive/GroupList/Group/PropertyList/Property will be ignored."); 253 ImportJive.addMessage("All Jive/GroupList/Group/AdministratorList/Username will be ignored, except for the first one (to become GroupOwner)."); 254 255 258 digester.addCallMethod("Jive/GroupList/Group/MemberList/Username", "addJiveGroupMember", 0); 259 260 261 265 digester.addObjectCreate("Jive/ForumList/Forum", JiveForumXML.class); 266 267 digester.addCallMethod("Jive/ForumList/Forum", "addJiveForum"); 268 digester.addCallMethod("Jive/ForumList/Forum/Name", "setForumName", 0); 270 digester.addCallMethod("Jive/ForumList/Forum/Description", "setForumDescription", 0); 271 digester.addCallMethod("Jive/ForumList/Forum/CreationDate", "setForumCreationDate", 0); 272 digester.addCallMethod("Jive/ForumList/Forum/ModifiedDate", "setForumModifiedDate", 0); 273 ImportJive.addMessage("All Jive/ForumList/Forum/FilterList/Filter will be ignored."); 274 ImportJive.addMessage("All Jive/ForumList/Forum/PropertyList/Property will be ignored."); 275 276 279 digester.addCallMethod("Jive/ForumList/Forum/PermissionList/UserPermissionList/UserPermission", "addJiveForumUser", 3); 280 digester.addCallParam("Jive/ForumList/Forum/PermissionList/UserPermissionList/UserPermission", 0, "usertype"); 281 digester.addCallParam("Jive/ForumList/Forum/PermissionList/UserPermissionList/UserPermission", 1, "username"); 282 digester.addCallParam("Jive/ForumList/Forum/PermissionList/UserPermissionList/UserPermission", 2, "permission"); 283 284 287 digester.addCallMethod("Jive/ForumList/Forum/PermissionList/GroupPermissionList/GroupPermission", "addJiveForumGroup", 2); 288 digester.addCallParam("Jive/ForumList/Forum/PermissionList/GroupPermissionList/GroupPermission", 0, "groupname"); 289 digester.addCallParam("Jive/ForumList/Forum/PermissionList/GroupPermissionList/GroupPermission", 1, "permission"); 290 291 292 295 digester.addObjectCreate("Jive/ForumList/Forum/ThreadList/Thread", JiveThreadXML.class); 296 SetParentRule threadParentRule = new SetParentRule("setParentForum"); 298 digester.addRule("Jive/ForumList/Forum/ThreadList/Thread", threadParentRule); 299 300 digester.addCallMethod("Jive/ForumList/Forum/ThreadList/Thread", "addJiveThread"); 301 306 307 322 digester.addCallMethod("Jive/ForumList/Forum/ThreadList/Thread/CreationDate", "setCreationDate", 0); 323 digester.addCallMethod("Jive/ForumList/Forum/ThreadList/Thread/ModifiedDate", "setModifiedDate", 0); 324 ImportJive.addMessage("All Jive/ForumList/Forum/ThreadList/Thread/PropertyList/Property will be ignored."); 325 326 digester.addCallMethod("Jive/ForumList/Forum/ThreadList/Thread/WatchList/Watch", "addJiveThreadWatch", 3); 327 digester.addCallParam("Jive/ForumList/Forum/ThreadList/Thread/WatchList/Watch", 0, "type"); 328 digester.addCallParam("Jive/ForumList/Forum/ThreadList/Thread/WatchList/Watch", 1, "expirable"); 329 digester.addCallParam("Jive/ForumList/Forum/ThreadList/Thread/WatchList/Watch/Username", 2); 330 331 332 335 digester.addObjectCreate("*/Message", JiveMessageXML.class); 336 SetParentRule messageParentRule = new SetParentRule("setParentThreadOrPost"); 338 digester.addRule("*/Message", messageParentRule); 339 340 digester.addCallMethod("*/Message", "addJiveMessage"); 341 digester.addCallMethod("*/Message/Subject", "setPostSubject", 0); 343 digester.addCallMethod("*/Message/Body", "setPostBody", 0); 344 digester.addCallMethod("*/Message/Username", "setPostUsername", 0); 345 digester.addCallMethod("*/Message/CreationDate", "setPostCreationDate", 0); 346 digester.addCallMethod("*/Message/ModifiedDate", "setPostModifiedDate", 0); 347 ImportJive.addMessage("All */Message/PropertyList/Property will be ignored."); 348 349 350 351 352 digester.addCallMethod("Jive/UserPermissionList/UserPermission", "addJiveUserPermission", 3); 353 digester.addCallParam("Jive/UserPermissionList/UserPermission", 0, "usertype"); 354 digester.addCallParam("Jive/UserPermissionList/UserPermission", 1, "username"); 355 digester.addCallParam("Jive/UserPermissionList/UserPermission", 2, "permission"); 356 357 360 digester.addCallMethod("Jive/GroupPermissionList/GroupPermission", "addJiveGroupPermission", 2); 361 digester.addCallParam("Jive/GroupPermissionList/GroupPermission", 0, "groupname"); 362 digester.addCallParam("Jive/GroupPermissionList/GroupPermission", 1, "permission"); 363 364 368 369 digester.parse(inputFile); 370 371 try { 373 for (int j=0; j<JiveXML.addDefaultPermissionsToGuests.length; j++) { 374 try { 375 JiveXML.addGuestMemberPermission(Integer.toString(JiveXML.addDefaultPermissionsToGuests[j])); 376 } catch (DuplicateKeyException e) { 377 382 } 383 } 384 385 for (int j=0; j<JiveXML.addDefaultPermissionsToMembers.length; j++) { 386 try { 387 JiveXML.addRegisteredMembersGroupPermission(Integer.toString(JiveXML.addDefaultPermissionsToMembers[j])); 388 } catch (DuplicateKeyException e) { 389 394 } 395 } 396 } catch (DatabaseException e) { 397 log.error("Database error while adding default permissions.", e); 398 throw new ImportException("Error while adding default permissions to guests and registered members.", e); 399 } catch (CreateException e) { 400 log.error("Create data error while adding default permissions.", e); 401 throw new ImportException("Error while adding default permissions to guests and registered members.", e); 402 } catch (ForeignKeyNotFoundException e) { 403 log.error("Foreign key not found error while adding default permissions.", e); 404 throw new ImportException("Error while adding default permissions to guests and registered members.", e); 405 } 406 407 if (JiveXML.foundAdminUser) { 408 ImportJive.addImportantMessage("IMPORTANT: Jive user \""+JiveXML.adminName+ 409 "\" kept all his data (including password), and has SYSTEM_ADMIN "+ 410 "permissions - even if he didn't have them in Jive!!!"); 411 } else { 412 ImportJive.addImportantMessage("SYSTEM_ADMIN user with a name \""+ 413 JiveXML.adminName+"\" and password \"admin\" was created. "+ 414 "For your security, you should first change that password."); 415 } 416 } 417 418 427 public static void addMessage(String message) { 428 ImportWebHelper.addMessage(message); 429 } 430 431 440 public static void addImportantMessage(String message) { 441 ImportWebHelper.addImportantMessage(message); 442 } 443 444 public static void createDefaultGuestMember() throws DuplicateKeyException, 445 ObjectNotFoundException, CreateException, DatabaseException, ForeignKeyNotFoundException { 446 if ((JiveXML.guestName==null) || (JiveXML.guestName.length()<=0)) { 447 JiveXML.guestName=MVNForumConfig.getDefaultGuestName(); 448 } 449 ImportWebHelper.createDefaultGuestMember(JiveXML.guestName); 451 } 452 453 public static void createDefaultAdminMember() throws ObjectNotFoundException, 454 CreateException, DatabaseException, DuplicateKeyException, ForeignKeyNotFoundException { 455 if ((JiveXML.adminName==null) || (JiveXML.adminName.length()<=0)) { 456 JiveXML.adminName="Admin"; 457 } 458 ImportWebHelper.createDefaultAdminMember(JiveXML.adminName); 460 } 461 462 public static void createDefaultRegisteredMembersGroup() throws CreateException, 463 DuplicateKeyException, ObjectNotFoundException, DatabaseException, ForeignKeyNotFoundException { 464 ImportWebHelper.createDefaultRegisteredMembersGroup(JiveXML.adminName); 466 } 467 468 public static void createDefaultRanks() throws CreateException, 469 DuplicateKeyException, ObjectNotFoundException, DatabaseException, ForeignKeyNotFoundException { 470 ImportWebHelper.createDefaultRanks(); 472 } 473 474 public static void createRootCategory() throws CreateException, 475 DuplicateKeyException, ObjectNotFoundException, DatabaseException, ForeignKeyNotFoundException { 476 482 addMessage("Adding category \""+JiveXML.rootCategoryName+"\" where all Jive forums will be stored in."); 483 CategoryXML categoryXML=new CategoryXML(); 484 categoryXML.addCategory(JiveXML.rootCategoryName, JiveXML.rootCategoryDesc, 485 null , null , 486 null , null , null ); 487 JiveXML.rootCategoryID=categoryXML.getCategoryID(); 488 addImportantMessage("All ForumPasswords will be set to \""+JiveXML.allForumsPassword+"\"."); 489 } 490 491 private static void handleSuccess(HttpServletRequest request) { 492 addSuccessMessage(); 493 endHtml(); 494 } 495 496 private static void handleFatalError(String message, Exception e, 498 boolean clearIfError, HttpServletRequest request) 499 throws ImportException { 500 if (e==null) log.error(message); 501 else log.error(message, e); 502 if ((e==null) || (e.getMessage()==null)) addErrorMessage(message); 503 else addErrorMessage(message+"<br/>Cause: "+e.getMessage()); 504 ImportWebHelper.addFinalErrorHandling(request, clearIfError); 506 endHtml(); 507 if (e==null) throw new ImportException(message); 508 else throw new ImportException(message, e); 509 } 510 511 512 } 513 514 | Popular Tags |