1 17 package org.alfresco.jcr.example; 18 19 import java.io.File ; 20 import java.io.FileOutputStream ; 21 import java.util.Calendar ; 22 23 import javax.jcr.Node; 24 import javax.jcr.NodeIterator; 25 import javax.jcr.PathNotFoundException; 26 import javax.jcr.Property; 27 import javax.jcr.Repository; 28 import javax.jcr.RepositoryException; 29 import javax.jcr.Session; 30 import javax.jcr.SimpleCredentials; 31 import javax.jcr.Value; 32 import javax.jcr.Workspace; 33 import javax.jcr.query.Query; 34 import javax.jcr.query.QueryManager; 35 import javax.jcr.query.QueryResult; 36 import javax.jcr.version.Version; 37 import javax.jcr.version.VersionHistory; 38 import javax.jcr.version.VersionIterator; 39 40 import org.alfresco.jcr.api.JCRNodeRef; 41 import org.alfresco.model.ContentModel; 42 import org.alfresco.repo.content.MimetypeMap; 43 import org.alfresco.service.ServiceRegistry; 44 import org.alfresco.service.cmr.repository.ContentData; 45 import org.alfresco.service.cmr.repository.NodeRef; 46 import org.alfresco.service.cmr.repository.NodeService; 47 import org.alfresco.service.cmr.security.PermissionService; 48 import org.springframework.context.ApplicationContext; 49 import org.springframework.context.support.ClassPathXmlApplicationContext; 50 import org.springframework.core.io.ClassPathResource; 51 52 53 61 public class WIKIExample 62 { 63 64 public static void main(String [] args) 65 throws Exception 66 { 67 71 System.out.println("Initialising Repository..."); 73 ApplicationContext context = new ClassPathXmlApplicationContext("classpath:org/alfresco/jcr/example/wiki-context.xml"); 74 Repository repository = (Repository)context.getBean("JCR.Repository"); 75 76 System.out.println("Repository Description..."); 78 String [] keys = repository.getDescriptorKeys(); 79 for (String key : keys) 80 { 81 String value = repository.getDescriptor(key); 82 System.out.println(" " + key + " = " + value); 83 } 84 85 92 Session session = repository.login(new SimpleCredentials("admin", "admin".toCharArray())); 94 95 try 96 { 97 System.out.println("Creating WIKI..."); 98 99 Node rootNode = session.getRootNode(); 101 System.out.println("Root node: path=" + rootNode.getPath() + ", type=" + rootNode.getPrimaryNodeType().getName()); 102 Node companyHome = rootNode.getNode("app:company_home"); 103 System.out.println("Company home node: path=" + companyHome.getPath() + ", type=" + companyHome.getPrimaryNodeType().getName()); 104 105 try 107 { 108 Node encyclopedia = companyHome.getNode("wiki:encyclopedia"); 109 encyclopedia.remove(); 110 System.out.println("Existing WIKI found and removed"); 111 } 112 catch(PathNotFoundException e) 113 { 114 } 116 117 Node encyclopedia = companyHome.addNode("wiki:encyclopedia", "cm:folder"); 119 encyclopedia.setProperty("cm:name", "WIKI Encyclopedia"); 120 encyclopedia.setProperty("cm:description", ""); 121 122 Node page1 = encyclopedia.addNode("wiki:entry1", "wiki:page"); 124 page1.setProperty("cm:name", "Rose"); 125 page1.setProperty("cm:description", ""); 126 page1.setProperty("cm:title", "The rose"); 127 page1.setProperty("cm:content", "A rose is a flowering shrub."); 128 page1.setProperty("wiki:category", new String [] {"flower", "plant", "rose"}); 129 130 Node page2 = encyclopedia.addNode("wiki:entry2", "wiki:page"); 132 page2.setProperty("cm:name", "Shakespeare"); 133 page2.setProperty("cm:description", ""); 134 page2.setProperty("cm:title", "William Shakespeare"); 135 page2.setProperty("cm:content", "A famous poet who likes roses."); 136 page2.setProperty("wiki:restrict", true); 137 page2.setProperty("wiki:category", new String [] {"poet"}); 138 139 Node contentNode = encyclopedia.addNode("wiki:image", "cm:content"); 141 contentNode.setProperty("cm:name", "Dog"); 142 contentNode.setProperty("cm:description", ""); 143 contentNode.setProperty("cm:title", "My dog at New Year party"); 144 ClassPathResource resource = new ClassPathResource("org/alfresco/jcr/example/wikiImage.gif"); 145 contentNode.setProperty("cm:content", resource.getInputStream()); 146 147 session.save(); 148 System.out.println("WIKI created"); 149 } 150 finally 151 { 152 session.logout(); 153 } 154 155 159 session = repository.login(new SimpleCredentials("admin", "admin".toCharArray())); 161 162 try 163 { 164 System.out.println("Accessing WIKI..."); 165 166 Node rootNode = session.getRootNode(); 168 Node encyclopedia = rootNode.getNode("app:company_home/wiki:encyclopedia"); 169 Node direct = session.getNodeByUUID(encyclopedia.getUUID()); 170 System.out.println("Found WIKI root correctly: " + encyclopedia.equals(direct)); 171 172 Node entry1 = rootNode.getNode("app:company_home/wiki:encyclopedia/wiki:entry1"); 174 String title = entry1.getProperty("cm:title").getString(); 175 System.out.println("Found WIKI page 1 title: " + title); 176 Calendar modified = entry1.getProperty("cm:modified").getDate(); 177 System.out.println("Found WIKI page 1 last modified date: " + modified.getTime()); 178 179 System.out.println("WIKI browser:"); 181 NodeIterator entries = encyclopedia.getNodes(); 182 while (entries.hasNext()) 183 { 184 Node entry = entries.nextNode(); 185 outputContentNode(entry); 186 } 187 188 System.out.println("Search results:"); 190 Workspace workspace = session.getWorkspace(); 191 QueryManager queryManager = workspace.getQueryManager(); 192 Query query = queryManager.createQuery("//app:company_home/wiki:encyclopedia/*[@cm:title = 'The rose']", Query.XPATH); 193 QueryResult result = query.execute(); 195 NodeIterator it = result.getNodes(); 196 while (it.hasNext()) 197 { 198 Node n = it.nextNode(); 199 outputContentNode(n); 200 } 201 202 File systemView = new File ("systemview.xml"); 204 FileOutputStream systemViewOut = new FileOutputStream (systemView); 205 session.exportSystemView("/app:company_home/wiki:encyclopedia", systemViewOut, false, false); 206 207 File docView = new File ("docview.xml"); 209 FileOutputStream docViewOut = new FileOutputStream (docView); 210 session.exportDocumentView("/app:company_home/wiki:encyclopedia", docViewOut, false, false); 211 212 System.out.println("WIKI exported"); 213 214 } 215 finally 216 { 217 session.logout(); 218 } 219 220 221 225 session = repository.login(new SimpleCredentials("admin", "admin".toCharArray())); 227 228 try 229 { 230 234 Node rootNode = session.getRootNode(); 236 Node entry1 = rootNode.getNode("app:company_home/wiki:encyclopedia/wiki:entry1"); 237 238 entry1.addMixin("mix:versionable"); 240 241 entry1.setProperty("cm:title", "The Rise"); 243 entry1.setProperty("cm:content", "A rose is a flowering shrub of the genus Rosa."); 244 Value[] categories = entry1.getProperty("wiki:category").getValues(); 245 Value[] newCategories = new Value[categories.length + 1]; 246 System.arraycopy(categories, 0, newCategories, 0, categories.length); 247 newCategories[categories.length] = session.getValueFactory().createValue("poet"); 248 entry1.setProperty("wiki:category", newCategories); 249 250 entry1.checkin(); 252 253 entry1.checkout(); 255 entry1.setProperty("cm:title", "The Rose"); 256 entry1.checkin(); 257 258 session.save(); 259 System.out.println("Versioned WIKI Page 1"); 260 } 261 finally 262 { 263 session.logout(); 264 } 265 266 session = repository.login(new SimpleCredentials("admin", "admin".toCharArray())); 268 269 try 270 { 271 275 Node rootNode = session.getRootNode(); 277 Node entry1 = rootNode.getNode("app:company_home/wiki:encyclopedia/wiki:entry1"); 278 279 VersionHistory versionHistory = entry1.getVersionHistory(); 281 VersionIterator versionIterator = versionHistory.getAllVersions(); 282 283 while (versionIterator.hasNext()) 285 { 286 Version version = versionIterator.nextVersion(); 287 NodeIterator nodeIterator = version.getNodes(); 288 289 while (nodeIterator.hasNext()) 290 { 291 Node versionedNode = nodeIterator.nextNode(); 292 System.out.println(" Version: " + version.getName()); 293 System.out.println(" Created: " + version.getCreated().getTime()); 294 outputContentNode(versionedNode); 295 } 296 } 297 298 299 303 System.out.println("Testing Permissions:"); 304 305 session.checkPermission("app:company_home/wiki:encyclopedia/wiki:entry1", "read"); 307 System.out.println("Session has 'read' permission on app:company_home/wiki:encyclopedia/wiki:entry1"); 308 309 session.checkPermission("app:company_home/wiki:encyclopedia/wiki:entry1", PermissionService.TAKE_OWNERSHIP); 311 System.out.println("Session has 'take ownership' permission on app:company_home/wiki:encyclopedia/wiki:entry1"); 312 } 313 finally 314 { 315 session.logout(); 316 } 317 318 319 325 session = repository.login(new SimpleCredentials("admin", "admin".toCharArray())); 326 327 try 328 { 329 ServiceRegistry registry = (ServiceRegistry)context.getBean(ServiceRegistry.SERVICE_REGISTRY); 331 332 Node rootNode = session.getRootNode(); 334 335 Node entry1 = rootNode.getNode("app:company_home/wiki:encyclopedia/wiki:entry1"); 337 entry1.checkout(); 338 setMimetype(registry, entry1, "cm:content", MimetypeMap.MIMETYPE_TEXT_PLAIN); 339 entry1.checkin(); 340 341 Node entry2 = rootNode.getNode("app:company_home/wiki:encyclopedia/wiki:entry2"); 342 setMimetype(registry, entry2, "cm:content", MimetypeMap.MIMETYPE_TEXT_PLAIN); 343 Node image = rootNode.getNode("app:company_home/wiki:encyclopedia/wiki:image"); 344 setMimetype(registry, image, "cm:content", MimetypeMap.MIMETYPE_IMAGE_GIF); 345 346 session.save(); 348 System.out.println("Updated WIKI mimetypes via Alfresco calls"); 349 } 350 finally 351 { 352 session.logout(); 353 } 354 355 System.out.println("Completed successfully."); 357 System.exit(0); 358 } 359 360 361 private static void outputContentNode(Node node) 362 throws RepositoryException 363 { 364 System.out.println(" Node " + node.getUUID()); 366 System.out.println(" title: " + node.getProperty("cm:title").getString()); 367 368 if (node.getPrimaryNodeType().getName().equals("wiki:page")) 370 { 371 System.out.println(" content: " + node.getProperty("cm:content").getString()); 372 System.out.println(" restrict: " + node.getProperty("wiki:restrict").getString()); 373 374 Property categoryProperty = node.getProperty("wiki:category"); 376 Value[] categories = categoryProperty.getValues(); 377 for (Value category : categories) 378 { 379 System.out.println(" category: " + category.getString()); 380 } 381 } 382 } 383 384 385 private static void setMimetype(ServiceRegistry registry, Node node, String propertyName, String mimeType) 386 throws RepositoryException 387 { 388 NodeRef nodeRef = JCRNodeRef.getNodeRef(node); 390 391 NodeService nodeService = registry.getNodeService(); 393 ContentData content = (ContentData)nodeService.getProperty(nodeRef, ContentModel.PROP_CONTENT); 394 395 content = ContentData.setMimetype(content, mimeType); 397 nodeService.setProperty(nodeRef, ContentModel.PROP_CONTENT, content); 398 } 399 400 } 401 | Popular Tags |