if (args[0] != "droptables") { println """ WARNING: this script will drop all Roller tables and create newones populated with random but somewhat realistic Roller test data. If you are sure you want to do that, run again with argument \'droptables\' """ return } // TODO: assumes database is Derby class RollerDatabaseGenerator { def roller = null; def userCount = 10 def blogCount = 2*userCount def entryCount = 10 def commentCount = 3 def users = [] def blogs = [] def firstNames = ["Sarah","Nina","Rhonda","Elizabeth","Rosemary","Angela", "Kim","Deborah","Steve","Mike","Jose","Bill","Fred","Tyrone","Abdul"] def middleNames = ["Simpson","Rosewood","Arther","Michael","Sydney","Cook", "Drake","Mohonk","Ratburger","Scoober","Albert","Eli","Pat","Reilly"] def lastNames = ["Rockberry","Drummond","Shannon","Kingston","Pike","Svensen", "Ramachandran","Hess","Young","Harper","Schmidt","Woodman","Colburn"] def blogStart = ["Cool","Beginning","Nutty","Info","Super","Uber", "One","Original","Random","New","Old","Worthless","Artful"] def blogMiddle = ["Java","Oracle","Sun","Microsoft","DotNet","Security","3D", "History","Political","Music","Watercolor","Photography"] def blogEnd = ["Notebook","Journal","Blog", "Notes","Scribblings", "Observations","Ravings","Vibrations","Noodlings","News","Views"] def categories = ["Music", "Java", "General", "Politics", "Status"] def blogText = [ """Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Mauris non neque. Nam ultricies, diam id cursus ultrices, tellus pede ultricies ligula, vel rutrum metus sem sed quam. Nam consectetuer dolor. Proin a nisl. Aliquam malesuada, ligula eget porta nonummy, felis orci laoreet augue, non pulvinar erat erat eu orci. Donec pretium libero pellentesque ante. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos. Morbi tellus orci, posuere ut, consectetuer at, pulvinar sed, lectus. Sed non augue. Pellentesque adipiscing tellus eget pede. Etiam ac ante. Sed consectetuer tellus sit amet elit. Sed malesuada, risus eu eleifend placerat, pede arcu elementum metus, eget auctor ligula velit ac turpis. Vestibulum a est. Sed sagittis dapibus magna. Integer urna velit, ullamcorper nec, tincidunt et, ullamcorper tincidunt, urna. Pellentesque pede lorem, auctor non, sodales sed, pharetra vel, augue.""", """Phasellus sodales, quam sit amet viverra dignissim, neque enim fringilla sem, vitae luctus sem ante id tellus. Mauris risus tortor, varius a, volutpat ac, mollis in, mauris. Ut justo ante, consectetuer vel, sodales eget, facil eu, justo. Sed venenatis consequat sapien. Nunc porttitor urna vel massa. Praesent et mi. Curabitur aliquam eros sed lorem. Suspendisse potenti. Suspendisse at felis quis sapien euismod posuere. Vivamus nunc odio, eleifend eu, elementum id, mattis eu, augue.""", """Suspendisse quis dolor. Duis mollis metus eu est. Donec bibendum mollis. Vestibulum dignissim arcu eget leo. Curabitur orci. Aenean condimentum ante nec neque. Etiam dignissim mauris sit amet nisi. Fusce quis ante. Sed et elit quis ante tempor cursus. Maecenas turpis. Morbi est. Quisque urna ante, euis eget, sollicitudin in, sagittis quis, nisl. Suspendisse non lorem in dui fau venenatis. Pellentesque fermentum, elit sit amet volutpat rhoncus, massa nisl fringilla enim, non sodales magna risus eget nulla. In hac habitasse platea dictumst. Suspendisse potenti.""", """Maecenas ut justo id lacus fringilla blandit. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Donec malesuada blandit risus. Donec sagittis varius ante. Aliquam velit orci, ultricies ut, vehicula nec, nonummy quis, lectus. Vestibulum placerat. Morbi aliquam, pede nec vestibulum viverra, justo magna mattis mi, quis molestie tortor metus nec dolor. Nulla sed sapien. Vivamus faucibus, lectus et aliquet mollis, nunc nulla dictum mi, feugiat accumsan metus velit vitae diam. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Nulla facilisi. Proin ac ante eu diam fermentum tempor. Etiam in purus. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Nulla at justo sed nisi viverra elementum. Nullam dolor nisl, dapibus at, commodo, varius euismod, tortor. Suspendisse vel orci.""", """Fusce feugiat neque id nisl. Ut sagittis. Praesent tempus, nibh et rhoncus sodales, neque risus vehicula pede, vel tempus risus nibh nec pede. Vivamus est pede, varius sit amet, tristique vel, ultricies vitae, urna. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed non mi ut turpis ullamcorper dapibus. Duis metus. Donec placerat pharetra nisi. Duis lacinia enim id dui. Maecenas a leo. Duis lacus.""" ] def randomUserNameList() { String first = firstNames[ (int)(firstNames.size() * Math.random())] String middle = middleNames[ (int)(middleNames.size() * Math.random())] String last = lastNames[ (int)(lastNames.size() * Math.random())] return [first, middle, last] } def randomBlogNameList() { String first = blogStart[ (int)(blogStart.size() * Math.random())] String middle = blogMiddle[ (int)(blogMiddle.size() * Math.random())] String last = blogEnd[ (int)(blogEnd.size() * Math.random())] return [first, middle, last] } def createUser(username, password, fullname, email) { println "Creating user: " + username try { def locale = "en_US"; def timeZone = "America/New_York"; def user = new org.apache.roller.weblogger.pojos.User(); user.setUserName(username); user.setScreenName(username); user.setPassword(password); user.setFullName(fullname); user.setEmailAddress(email); user.setLocale(locale); user.setTimeZone(timeZone); user.setDateCreated(new java.util.Date()); roller.getUserManager().addUser(user); roller.flush(); users.add(user) return user } catch (Exception e) { e.printStackTrace() } } def createBlog(user, handle, name, desc, theme) { println "Creating blog: " + handle try { def website = new org.apache.roller.weblogger.pojos.Weblog( handle, user, name, desc, user.getEmailAddress(), user.getEmailAddress(), theme, user.getLocale(), user.getTimeZone()); def cat = new org.apache.roller.weblogger.pojos.WeblogCategory( website, null, "cat1", "cat1", null); roller.getWeblogManager().saveWeblogCategory(cat); website.setDefaultCategory(cat); roller.getUserManager().addWebsite(website); roller.flush(); return website } catch (Exception e) { e.printStackTrace() } } def createEntry(blog, title, text, pubTime) { println "Creating entry title: " + title try { def entry = new org.apache.roller.weblogger.pojos.WeblogEntry(); entry.setWebsite(blog); entry.setCreator(blog.getCreator()); def catName = categories.get((int)(Math.random() * categories.size())) def category = roller.getWeblogManager().getWeblogCategoryByPath(blog,catName) entry.setCategory(category); entry.setPubTime(new java.sql.Timestamp(pubTime.getTime())); entry.setUpdateTime(new java.sql.Timestamp(pubTime.getTime())); entry.setStatus(org.apache.roller.weblogger.pojos.WeblogEntry.PUBLISHED); entry.setText(text); entry.setTitle(title); entry.setLocale("en_US"); roller.getWeblogManager().saveWeblogEntry(entry); roller.flush(); return entry } catch (Exception e) { e.printStackTrace() } } def createComment(entry, commentername, content) { println "Creating comment from user: " + commentername try { def comment = new org.apache.roller.weblogger.pojos.WeblogEntryComment(); comment.setWeblogEntry(entry); comment.setName(commentername); comment.setPostTime(new java.sql.Timestamp(new java.util.Date().getTime())); comment.setContent(content); comment.setNotify(Boolean.FALSE); comment.setStatus(org.apache.roller.weblogger.pojos.WeblogEntryComment.APPROVED); roller.getWeblogManager().saveComment(comment); roller.flush(); } catch (Exception e) { e.printStackTrace() } } def createDatabase() { def properties = new Properties() properties.load(new FileInputStream("roller-custom.properties")) def jdbcClass = properties.get("database.jdbc.driverClass") def jdbcUrl = properties.get("database.jdbc.connectionURL") def jdbcUser = properties.get("database.jdbc.username") def jdbcPassword = properties.get("database.jdbc.password") def ant = new AntBuilder() // drop any existing Roller tables ant.sql(onerror:"continue", driver:jdbcClass, url:jdbcUrl, userid:jdbcUser, password:jdbcPassword, src:"../../../../../apps/weblogger/build/webapp/WEB-INF/classes/dbscripts/droptables.sql") // create fresh set of Roller tables ant.sql(onerror:"continue", driver:jdbcClass, url:jdbcUrl, userid:jdbcUser, password:jdbcPassword, src:"../../../../../apps/weblogger/build/webapp/WEB-INF/classes/dbscripts/derby/createdb.sql") bootstrap() // set database version to 400 //def propManager = roller.getPropertiesManager(); //def versionProp = new org.apache.roller.weblogger.pojos.RuntimeConfigProperty( //"roller.database.version","400") //propManager.saveProperty(versionProp) } def bootstrap() { org.apache.roller.weblogger.business.startup.WebloggerStartup.prepare(); org.apache.roller.weblogger.business.WebloggerFactory.bootstrap(); org.apache.roller.weblogger.business.WebloggerFactory.getWeblogger().getPropertiesManager().initialize(); org.apache.roller.weblogger.business.WebloggerFactory.getWeblogger().flush(); roller = org.apache.roller.weblogger.business.WebloggerFactory.getWeblogger(); } def createMainBlog() { def adminUser = createUser("admin", "admin", "Admin User", "admin@example.com") def mainBlog = createBlog(adminUser, "main", "main", "main", "frontpage") def propManager = roller.getPropertiesManager(); def mainBlogProp = propManager.getProperty( "site.frontpage.weblog.handle") mainBlogProp.setValue(mainBlog.handle) propManager.saveProperty(mainBlogProp) def aggProp = propManager.getProperty( "site.frontpage.weblog.aggregated") aggProp.setValue("true") propManager.saveProperty(aggProp) } def generateAllData() { // create users 1.upto(userCount) { def names = randomUserNameList(); def username = "${names[0]}${names[1]}${names[2]}"; def password = "password" def fullname = "${names[0]} ${names[1]} ${names[2]}"; def email = "${names[0]}@${names[1]}${names[2]}.com" def user = createUser(username, password, fullname, email) if (user) users.add(user) } // create blog 1.upto(blogCount) { def names = randomBlogNameList() def user = users[(int)(Math.random() * users.size())] def handle = names[0] + names[1] + names[2] def name = handle def desc = "A blog named ${names[0]} ${names[1]} ${names[2]}" def theme = "basic" def blog = createBlog(user, handle, name, desc, theme) if (blog) blogs.add(blog) } // Create blog entries and comments blogs.each() { blog -> 1.upto(entryCount) { def text = ""; def paraCount = (int)(Math.random() * 5); 0.upto(paraCount) { text += "

" + blogText[(int)(Math.random() * blogText.size())] + "

" } def title = text.substring(3,25) def pubTime = new Date(); pubTime = pubTime - (int)(Math.random() * 60) def entry = createEntry(blog, title, text, pubTime) if (entry) 1.upto(commentCount) { def names = randomUserNameList() def commentername = "${names[0]} ${names[1]} ${names[2]}" def content = blogText[(int)(Math.random()*blogText.size())] createComment(entry, commentername, content) } } } } } def generator = new RollerDatabaseGenerator() generator.createDatabase() generator.createMainBlog() generator.generateAllData()