it.neo4art.api.search.repository.WikipediaSearchRepositoryTest.java Source code

Java tutorial

Introduction

Here is the source code for it.neo4art.api.search.repository.WikipediaSearchRepositoryTest.java

Source

/**
 * Copyright 2015 the original author or authors.
 *
 * Licensed 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 it.neo4art.api.search.repository;

import java.io.File;
import java.io.IOException;
import java.util.List;

import org.apache.commons.io.FileUtils;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.neo4art.api.search.bean.WikipediaSearchResult;
import org.neo4art.api.search.bean.WikipediaSearchResultNode;
import org.neo4art.api.search.bean.WikipediaSearchResultRelationship;
import org.neo4art.api.search.repository.WikipediaSearchGraphDatabaseServiceRepository;
import org.neo4art.api.search.repository.WikipediaSearchRepository;
import org.neo4art.graphdb.connection.GraphDatabaseConnectionManager;
import org.neo4art.graphdb.connection.GraphDatabaseConnectionManagerFactory;
import org.neo4art.graphdb.connection.GraphDatabaseConnectionManagerFactory.GraphDatabaseConnectionType;
import org.neo4art.graphdb.transaction.GraphDatabaseTransaction;
import org.neo4art.importer.wikipedia.graphdb.WikipediaLabel;
import org.neo4art.importer.wikipedia.graphdb.WikipediaRelationship;
import org.neo4j.helpers.collection.MapUtil;

/**
 * 
 * @author Lorenzo Speranzoni
 * @since 1 Nov 2015
 */
public class WikipediaSearchRepositoryTest {

    @Before
    public void cleanDatabase() throws IOException {

        FileUtils.deleteDirectory(new File(GraphDatabaseConnectionManager.NEO4J_STORE_DIR));
    }

    @Test
    public void shouldFindDepthOneConnectionsForVanGogh() {

        GraphDatabaseConnectionManager graphDatabaseConnectionManager = GraphDatabaseConnectionManagerFactory
                .getInstance(GraphDatabaseConnectionType.EMBEDDED_DATABASE);

        String vincentVanGogh = "Vincent van Gogh";
        String paulGauguin = "Paul Gauguin";
        String emileBernard = "mile Bernard";

        try (GraphDatabaseTransaction tx = graphDatabaseConnectionManager.getTransactionManager()) {

            graphDatabaseConnectionManager.executeCypherQuery(
                    "CREATE (:" + WikipediaLabel.Wikipedia + " {title: {title}})",
                    MapUtil.map("title", vincentVanGogh));
            graphDatabaseConnectionManager.executeCypherQuery(
                    "CREATE (:" + WikipediaLabel.Wikipedia + " {title: {title}})",
                    MapUtil.map("title", paulGauguin));
            graphDatabaseConnectionManager.executeCypherQuery(
                    "CREATE (:" + WikipediaLabel.Wikipedia + " {title: {title}})",
                    MapUtil.map("title", emileBernard));

            graphDatabaseConnectionManager.executeCypherQuery(
                    "MATCH (n:" + WikipediaLabel.Wikipedia + " {title: {title1}}), (m:" + WikipediaLabel.Wikipedia
                            + " {title: {title2}}) CREATE (n)-[:" + WikipediaRelationship.REFERS + "]->(m)",
                    MapUtil.map("title1", vincentVanGogh, "title2", paulGauguin));
            graphDatabaseConnectionManager.executeCypherQuery(
                    "MATCH (n:" + WikipediaLabel.Wikipedia + " {title: {title1}}), (m:" + WikipediaLabel.Wikipedia
                            + " {title: {title2}}) CREATE (n)-[:" + WikipediaRelationship.REFERS + "]->(m)",
                    MapUtil.map("title1", vincentVanGogh, "title2", emileBernard));
            graphDatabaseConnectionManager.executeCypherQuery(
                    "MATCH (n:" + WikipediaLabel.Wikipedia + " {title: {title1}}), (m:" + WikipediaLabel.Wikipedia
                            + " {title: {title2}}) CREATE (n)-[:" + WikipediaRelationship.REFERS + "]->(m)",
                    MapUtil.map("title1", paulGauguin, "title2", emileBernard));
            graphDatabaseConnectionManager.executeCypherQuery(
                    "MATCH (n:" + WikipediaLabel.Wikipedia + " {title: {title1}}), (m:" + WikipediaLabel.Wikipedia
                            + " {title: {title2}}) CREATE (n)-[:" + WikipediaRelationship.REFERS + "]->(m)",
                    MapUtil.map("title1", emileBernard, "title2", paulGauguin));

            tx.success();
        }

        WikipediaSearchRepository wikipediaSearchRepository = new WikipediaSearchGraphDatabaseServiceRepository();

        WikipediaSearchResult wikipediaSearchResult = wikipediaSearchRepository
                .findDepthOneConnectionsByPageTitle(vincentVanGogh, false);

        List<WikipediaSearchResultNode> nodes = wikipediaSearchResult.getNodes();

        for (WikipediaSearchResultNode node : nodes) {

            System.out.println(node.getId() + ": " + node.getName());
        }

        Assert.assertEquals(3, nodes.size());

        List<WikipediaSearchResultRelationship> relationships = wikipediaSearchResult.getRelationships();

        for (WikipediaSearchResultRelationship relationship : relationships) {

            System.out.println("(" + relationship.getSource() + ")-[:" + relationship.getLinkName() + "]->("
                    + relationship.getTarget() + ")");
        }

        Assert.assertEquals(2, relationships.size());

        graphDatabaseConnectionManager.close();
    }
}