##### Neo4j Server Examples

- Introduction
- Wiki
- Source Repository
- Downloads

##### Examples

- Neo4j Server REST
- Neo4j Server Plugins
- Neo4j Server Unmanaged Extensions

##### Examples full source code

- Example code

##### Project Documentation

- Project Information
- Project Reports

## Server-Plugins

Server-plugins are an easy way to extend the Neo4j REST API with your own functionality. In order to compile your plugin, you should include the neo4j-server-xx.jar in your classpath, e.g. via pom.xml:

    <dependency>
      <groupId>org.neo4j.app</groupId>
      <artifactId>neo4j-server</artifactId>
      <version>1.3-SNAPSHOT</version>
    </dependency>

from the neo4j repository at http://m2.neo4j.org/org/neo4j/app/neo4j-server/ or in the system/lib directory of the Neo4j Server distribution.

    @Description( "An extension to the Neo4j Server for getting all nodes or relationships" )
    public class GetAll extends ServerPlugin
    {
        @Name( "get_all_nodes" )
        @Description( "Get all nodes from the Neo4j graph database" )
        @PluginTarget( GraphDatabaseService.class )
        public Iterable<Node> getAllNodes( @Source GraphDatabaseService graphDb )
        {
            return graphDb.getAllNodes();
        }

        @Description( "Get all relationships from the Neo4j graph database" )
        @PluginTarget( GraphDatabaseService.class )
        public Iterable<Relationship> getAllRelationships( @Source GraphDatabaseService graphDb )
        {
            return new NestingIterable<Relationship, Node>( graphDb.getAllNodes() )
            {
                @Override
                protected Iterator<Relationship> createNestedIterator( Node item )
                {
                    return item.getRelationships( Direction.OUTGOING ).iterator();
                }
            };
        }
    }

In order to let the Neo4j Server find your extension, you need to add the file /META-INF/services/org.neo4j.server.plugins.ServerPlugin to the resulting .jar file, containing the classname of your plugin as a single line per plugin:

    org.neo4j.examples.server.plugins.GetAll

Now, place the myextension.jar (and any custom dependencies) into the $NEO$J_SERVER_HOME/plugins directory, start the server check out the database representation for the listing of your extension:

    curl -v htto://localhost:7474/db/data

will get you

    {
    "extensions-info" : "http://localhost:7474/db/data/ext",
    "node" : "http://localhost:7474/db/data/node",
    "node-index" : "http://localhost:7474/db/data/index/node",
    "relationship-index" : "http://localhost:7474/db/data/index/relationship",
    "reference_node" : "http://localhost:7474/db/data/node/0",
    "extensions" : {
      "GetAll" : {
        "get_all_nodes" : "http://localhost:7474/db/data/ext/GetAll/graphdb/get_all_nodes",
        "getAllRelationships" : "http://localhost:7474/db/data/ext/GetAll/graphdb/getAllRelationships"
      }
    }

Also, all extensions are listed upon a GET to `http://localhost:7474/db/data/ext/`

Requesting a GET on one of the two extension endpoints...

    curl http://localhost:7474/db/data/ext/GetAll/graphdb/get_all_nodes

...gives back the meta information about the service:

    {
      "extends" : "graphdb",
      "description" : "Get all nodes from the Neo4j graph database",
      "name" : "get_all_nodes",
      "parameters" : [ ]
    }

To use it, just POST to this URL, with parameters as specified in the description (none in this case).

Full source code: GetAll.java