/* * Licensed to "Neo Technology," Network Engine for Objects in Lund AB * (http://neotechnology.com) under one or more contributor license agreements. * See the NOTICE file distributed with this work for additional information * regarding copyright ownership. Neo Technology licenses this file to you under * the Apache License, Version 2.0 (the "License"); you may not use this file * except in compliance with the License. You may obtain a copy of the License * at (http://www.apache.org/licenses/LICENSE-2.0). Unless required by * applicable law or agreed to in writing, software distributed under the * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS * OF ANY KIND, either express or implied. See the License for the specific * language governing permissions and limitations under the License. */ package examples.roles; import org.junit.BeforeClass; import org.junit.Test; import org.neo4j.graphdb.Direction; import org.neo4j.graphdb.Node; import org.neo4j.graphdb.RelationshipType; import org.neo4j.graphdb.ReturnableEvaluator; import org.neo4j.graphdb.StopEvaluator; import org.neo4j.graphdb.Transaction; import org.neo4j.graphdb.Traverser; import examples.NeoclipseExample; /** * Example on modeling DAGs from Kemal Erdogan, * http://www.codeproject.com/KB/database/Modeling_DAGs_on_SQL_DBs.aspx * @author Anders Nawroth */ public class Roles extends NeoclipseExample { @BeforeClass public static void copyIcons() { NeoclipseExample.copyIcons( "roles" ); } @BeforeClass public static void createRoles() { Transaction tx = neo.beginTx(); try { // add the top level groups Node admins = createTopLevelGroup( "Admins" ); Node users = createTopLevelGroup( "Users" ); // add other groups Node helpDesk = createGroup( "HelpDesk", admins ); Node managers = createGroup( "Managers", users ); Node technicians = createGroup( "Technicians", users ); Node abcTechnicians = createGroup( "ABCTechnicians", technicians ); // add the users createUser( "Ali", admins, users ); createUser( "Burcu", users ); createUser( "Can", users ); createUser( "Demet", helpDesk ); createUser( "Engin", helpDesk, users ); createUser( "Fuat", managers ); createUser( "Gul", managers ); createUser( "Hakan", technicians ); createUser( "Irmak", technicians ); createUser( "Jale", abcTechnicians ); tx.success(); } finally { tx.finish(); } } private static Node createTopLevelGroup( final String name ) { return createNode( name, RoleRels.ROOT, neo.getReferenceNode() ); } private static Node createGroup( final String name, final Node... containedIn ) { return createNode( name, RoleRels.PART_OF, containedIn ); } private static Node createUser( final String name, final Node... containedIn ) { return createNode( name, RoleRels.MEMBER_OF, containedIn ); } private static Node createNode( final String name, final RelationshipType relType, final Node... containedIn ) { Node node = neo.createNode(); node.setProperty( "name", name ); for ( Node parent : containedIn ) { node.createRelationshipTo( parent, relType ); } return node; } @Test public void getAllAdmins() { Transaction tx = neo.beginTx(); try { System.out.println( "All admins:" ); Node admins = neo.getNodeById( 1 ); // TODO search? Traverser traverser = admins.traverse( Traverser.Order.BREADTH_FIRST, StopEvaluator.END_OF_GRAPH, ReturnableEvaluator.ALL_BUT_START_NODE, RoleRels.PART_OF, Direction.INCOMING, RoleRels.MEMBER_OF, Direction.INCOMING ); for ( Node part : traverser ) { System.out.println( part.getProperty( "name" ) + " " + (traverser.currentPosition().depth() - 1) ); } tx.success(); } finally { tx.finish(); } } @Test public void getJalesMemberships() throws Exception { Transaction tx = neo.beginTx(); try { System.out.println( "Jale's memberships:" ); Node jale = neo.getNodeById( 16 ); // TODO search? Traverser traverser = jale.traverse( Traverser.Order.DEPTH_FIRST, StopEvaluator.END_OF_GRAPH, ReturnableEvaluator.ALL_BUT_START_NODE, RoleRels.MEMBER_OF, Direction.OUTGOING, RoleRels.PART_OF, Direction.OUTGOING ); for ( Node membership : traverser ) { System.out.println( membership.getProperty( "name" ) + " " + (traverser.currentPosition().depth() - 1) ); } tx.success(); } finally { tx.finish(); } } @Test public void getAllGroups() throws Exception { Transaction tx = neo.beginTx(); try { System.out.println( "All groups:" ); Node referenceNode = neo.getReferenceNode(); Traverser traverser = referenceNode.traverse( Traverser.Order.BREADTH_FIRST, StopEvaluator.END_OF_GRAPH, ReturnableEvaluator.ALL_BUT_START_NODE, RoleRels.ROOT, Direction.INCOMING, RoleRels.PART_OF, Direction.INCOMING ); for ( Node group : traverser ) { System.out.println( group.getProperty( "name" ) ); } tx.success(); } finally { tx.finish(); } } @Test public void getAllMembers() throws Exception { Transaction tx = neo.beginTx(); try { System.out.println( "All members:" ); Node referenceNode = neo.getReferenceNode(); Traverser traverser = referenceNode.traverse( Traverser.Order.BREADTH_FIRST, StopEvaluator.END_OF_GRAPH, ReturnableEvaluator.ALL_BUT_START_NODE, RoleRels.ROOT, Direction.INCOMING, RoleRels.PART_OF, Direction.INCOMING, RoleRels.MEMBER_OF, Direction.INCOMING ); for ( Node group : traverser ) { if ( traverser.currentPosition().lastRelationshipTraversed() .isType( RoleRels.MEMBER_OF ) ) { System.out.println( group.getProperty( "name" ) ); } } tx.success(); } finally { tx.finish(); } } }