void PublishToGraph()
        {
            var client = new Neo4jClient(new Uri(string.Format("bolt://{0}:{1}", Host, Port)), Username, Password);

            _publisher.Publish(_settings, client);
            Autodesk.Revit.UI.TaskDialog.Show("Publish complete", "The current revit model has been successfully published to the graph database.");
            Close();
        }
Beispiel #2
0
        protected override void SolveInstance(IGH_DataAccess dataAccess)
        {
            bool commitChanges = false;

            dataAccess.GetData <bool>("_Commit", ref commitChanges);
            if (_neo4jDB != null && !_wasCommitted && commitChanges)
            {
                _neo4jDB.Value.CommitAsync().RunSynchronously();
                _wasCommitted = !commitChanges;
                AddRuntimeMessage(GH_RuntimeMessageLevel.Remark, "Changes committed");
                return;
            }


            string host     = string.Empty;
            string userName = string.Empty;
            string password = string.Empty;

            if (!dataAccess.GetData <string>("_neo4jHost", ref host))
            {
                AddRuntimeMessage(GH_RuntimeMessageLevel.Error, "Host required");
            }
            if (!dataAccess.GetData <string>("_neo4jUserName", ref userName))
            {
                AddRuntimeMessage(GH_RuntimeMessageLevel.Error, "Username required");
            }
            dataAccess.GetData <string>("_neo4jPassword", ref password);

            if (string.IsNullOrEmpty(host) || string.IsNullOrEmpty(userName))
            {
                AddRuntimeMessage(GH_RuntimeMessageLevel.Error, "Missing input data");
                return;
            }

            var driver = new Neo4jClient(new Uri(host), userName, password);
            var vstask = driver.VerifyConnectionAsync();

            vstask.RunSynchronously();

            if (vstask.Exception != null)
            {
                AddRuntimeMessage(GH_RuntimeMessageLevel.Error, "Connection failed: " + vstask.Exception.Message);
            }

            if (_neo4jDB == null)
            {
                _neo4jDB = new Neo4jDatabase(driver);
            }
            else
            {
                var oldDb = _neo4jDB.Value;
                oldDb.CloseAsync().ContinueWith((d) => { oldDb.Dispose(); });
                _neo4jDB.Value = driver;
            }

            dataAccess.SetData("_neo4jDriver", _neo4jDB);
        }
Beispiel #3
0
    public static string RunCypherQuery(Neo4jClient client, string cypher, Dictionary <string, object> vars)
    {
        var task = Task.Run(() => AsyncContext.Run(() => client.RunCypherQueryAsync(cypher, vars)));

        if (task.Exception != null)
        {
            throw new Exception("Query failed: " + task.Exception.Message, task.Exception);
        }

        return(task.Result.AsJson);
    }
Beispiel #4
0
        public void Publish(RevitToGraphPublisherSettings settings, Neo4jClient client)
        {
            var meGraph             = new MEPRevitGraph();
            MEPRevitGraphWriter mps = new MEPRevitGraphWriter(meGraph);

            if (settings.IncludeElectrical)
            {
                mps.Parsers.Add(new Parsers.MEPGraphParserElectrical());
            }
            if (settings.IncludeMechanical)
            {
                mps.Parsers.Add(new Parsers.MEPGraphParserConnectors());
            }
            if (settings.IncludeBoundaries)
            {
                mps.Parsers.Add(new Parsers.MEPGraphParserSpaces());
            }
            //if (settings.IncludeBoundaries) mps.Parsers.Add(new Parsers.ClashDetection());
            mps.Parsers.Add(new Parsers.MEPGraphParserIoT());

            if (mps.Parsers.Count == 0)
            {
                return;
            }

            var mecFEc      = new FilteredElementCollector(_rdoc);
            var mecFilter   = mps.GetFilterForAllParsers;
            var mecElements = mecFEc.WherePasses(mecFilter).WhereElementIsNotElementType().ToElements();

            var wfic = new FilteredElementCollector(_rdoc);
            var geoElementsFilter = new ElementMulticategoryFilter(new BuiltInCategory[] { BuiltInCategory.OST_Floors, BuiltInCategory.OST_Roofs, BuiltInCategory.OST_Windows, BuiltInCategory.OST_Doors, BuiltInCategory.OST_MEPSpaces, BuiltInCategory.OST_Rooms });
            var geoElements       = wfic.WherePasses(geoElementsFilter).WhereElementIsNotElementType().ToElements();


            using (Transaction tx = new Transaction(_rdoc, "Build graph"))
            {
                tx.Start("Build graph");
                mps.Write(mecElements, geoElements, -1, true, _rdoc);
                tx.Commit();
            }

            MEPGraphWriter wre = new MEPGraphWriter(client);

            wre.Write(meGraph, _rdoc);
            //var bc = new HLApps.Cloud.BuildingGraph.BuildingGraphClient(@"http://*****:*****@"C:\src\HLApps\GraphData-MEP\HLApps.Revit.Graph\RevitToGraphQLMappings.json");
            //var bgmap = new HLApps.Cloud.BuildingGraph.Introspection.BuildingGraphMapping(json);

            //gqlWrtier.Write(meGraph, bgmap, _rdoc);
        }
        public void Save(Lokation lokation)
        {
            Contract.Requires(lokation != null);

            IEnumerable<IndexEntry> indexEntries = new[]
                {
                    new IndexEntry("LokationIdx")
                    {
                        { "Name", lokation.Name }
                    }
                };
            NodeReference<Lokation> nodeRef = gc.Create(
                lokation,
                new IRelationshipAllowingParticipantNode<Lokation>[0],
                indexEntries);
            lokation.LokNr = nodeRef.Id;
        }
Beispiel #6
0
        public void Publish(RevitToGraphPublisherSettings settings, Neo4jClient client)
        {
            var meGraph             = new MEPRevitGraph();
            MEPRevitGraphWriter mps = new MEPRevitGraphWriter(meGraph);

            if (settings.IncludeElectrical)
            {
                mps.Parsers.Add(new Parsers.MEPGraphParserElectrical());
            }
            if (settings.IncludeMechanical)
            {
                mps.Parsers.Add(new Parsers.MEPGraphParserConnectors());
            }
            if (settings.IncludeBoundaries)
            {
                mps.Parsers.Add(new Parsers.MEPGraphParserSpaces());
            }
            //if (settings.IncludeBoundaries) mps.Parsers.Add(new Parsers.ClashDetection());
            mps.Parsers.Add(new Parsers.MEPGraphParserIoT());

            if (mps.Parsers.Count == 0)
            {
                return;
            }

            var mecFEc      = new FilteredElementCollector(_rdoc);
            var mecFilter   = mps.GetFilterForAllParsers;
            var mecElements = mecFEc.WherePasses(mecFilter).WhereElementIsNotElementType().ToElements();

            var wfic = new FilteredElementCollector(_rdoc);
            var geoElementsFilter = new ElementMulticategoryFilter(new BuiltInCategory[] { BuiltInCategory.OST_Floors, BuiltInCategory.OST_Roofs, BuiltInCategory.OST_Windows, BuiltInCategory.OST_Doors, BuiltInCategory.OST_MEPSpaces, BuiltInCategory.OST_Rooms });
            var geoElements       = wfic.WherePasses(geoElementsFilter).WhereElementIsNotElementType().ToElements();


            using (Transaction tx = new Transaction(_rdoc, "Build graph"))
            {
                tx.Start("Build graph");
                mps.Write(mecElements, geoElements, -1, true, _rdoc);
                tx.Commit();
            }

            MEPGraphWriter wre = new MEPGraphWriter(client);

            wre.Write(meGraph, _rdoc);
        }
Beispiel #7
0
        public static async Task AddClientAsync(this IdentityServerDriverProvider ext, Client client)
        {
            ext    = ext ?? throw new ArgumentNullException(nameof(ext));
            client = client ?? throw new ArgumentNullException(nameof(client));

            using (ISession session = ext.GetDriver().Session())
            {
                Node n = new Node(type: typeof(Neo4jClient));

                Neo4jClient newClient = await session.AsAsync(s =>
                                                              s.ExecuteQuery <Neo4jClient>($"CREATE (p{n.Labels}) SET p+=${nameof(client)}, p.{nameof(IGraphEntity.EntityId)}=id(p), p :{typeof(Neo4jClient).Name} RETURN p",
                                                                                           new { client = client.ExludeProperties(p => new { p.Properties, p.Claims, p.ClientSecrets }) }).FirstOrDefault());

                if (client is Neo4jClient)
                {
                    (client as Neo4jClient).EntityId = newClient.EntityId;
                }
            }
        }
Beispiel #8
0
        public async Task CreateNodesLoadTest()
        {
            Neo4jClient n4 = new Neo4jClient(new Uri("bolt://localhost:8687"), "neo4j", "neo4j");

            Node b = new Node("Building");

            b.ExtendedProperties.Add("Name", "Building 1");
            var pbn = n4.Push(b, b.ExtendedProperties);

            var pnl = new List <PendingNode>();

            for (int i = 1; i < 100; i++)
            {
                Node n = new Node("Space");
                n.ExtendedProperties.Add("Name", "Space " + i);

                for (int p = 1; p < 100; p++)
                {
                    n.ExtendedProperties.Add("Param " + p, p);
                }

                var spn = n4.Push(n, n.ExtendedProperties);
                pnl.Add(spn);
                n4.Relate(spn, pbn, "IS_IN", null);

                for (int e = 1; e < 100; e++)
                {
                    Node en = new Node("Element");
                    en.ExtendedProperties.Add("Name", "Element " + i);

                    for (int p = 1; p < 100; p++)
                    {
                        en.ExtendedProperties.Add("Param " + p, p);
                    }

                    var epn = n4.Push(en, en.ExtendedProperties);
                    pnl.Add(epn);
                    n4.Relate(epn, spn, "IS_IN", null);
                }
            }

            await n4.CommitAsync();
        }
        public async Task spquery()
        {
            Neo4jClient n4 = new Neo4jClient(new Uri("bolt://*****:*****@"match (frmSpace:Space {Number:$fromSpaceNumber}) MATCH (toSpace:Space {Number:$toSpaceNumber})
CALL apoc.algo.dijkstra(frmSpace, toSpace, 'TRAVEL_TO', 'Distance') YIELD path, weight
with nodes(path) as sfs, path, weight, frmSpace, toSpace
unwind sfs as sf
match p=(n)-[b:BOUNDED_BY]-(sf:Surface)-[o:IS_ON]-(t)
RETURN path, sum(weight) as totalDistance, collect(p) as context";


            var q2 = @"match (sp:Space {Number:$fromSpaceNumber}) MATCH (sc:Space {Number:$toSpaceNumber})
CALL apoc.algo.dijkstra(sp, sc, 'TRAVEL_TO', 'Distance') YIELD path, weight
RETURN path, sum(weight)";

            var vars = new Dictionary <string, object>();

            vars.Add("fromSpaceNumber", "01-01");
            vars.Add("toSpaceNumber", "02-01");
            var res = await n4.RunCypherQueryAsync(q1, vars);

            _ = res.Messages;
        }
Beispiel #10
0
        static void Main(string[] args)
        {
            using (Neo4jClient client = new Neo4jClient("bolt://localhost:7687", "neo4j", "1234"))
            {
                var command = client.NewCommand();
                command.Match().Pattern().Node("a", typeof(Person)).All()
                //.Relation("b").All()
                //.Node("c").All()
                //.Relation("d").All()
                //.Node("e").All()
                .Close()
                //.Pattern().Node("f").All()
                //          .Relation("g").All()
                //          .Node("h").All()
                //          .Close()
                .Close()
                .Return("a");

                //var cmd = command.AsPainCypher();
                //Console.WriteLine(cmd);
                var test = client.ExecuteQuery(command);
                Console.Read();
            }
        }
 public MEPGraphWriter(Neo4jClient gdbClient)
 {
     _gdbClient = gdbClient;
 }
Beispiel #12
0
    public static Neo4jClient CreateClient(string host, string username, string password)
    {
        var n4c = new Neo4jClient(new Uri(host), username, password);

        return(n4c);
    }
        internal Node<PO.Chunk> Add(DateTimeOffset start, DateTimeOffset stop, TimeSpan duration, Node<PO.Worker> owningWorkerNode, Neo4jClient.GraphClient Client, Neo4jClient.Node<PO.Root> RootNode)
        {
            var chunkNodeRef = Client.Create(
                PO.Chunk.Create(start, stop, duration),
                null,
                new[]
                {
                    new IndexEntry
                    {
                        Name = "NameIndex",
                        KeyValues = new[]
                        {
                            new KeyValuePair<string,object>("Name", "Chunk")
                        }
                    }
                }
            );

            //  I update all fields again because I have a problem with serialising/deserialising DateTimeOffset - I lose the fractions of a second.  Not that it matters in my project but rätt skall vara rätt.
            Client.Update<PO.Chunk>(chunkNodeRef, node => { node.Set(chunkNodeRef.Id, start, stop, duration); });

            var rel = Client.CreateRelationship<PO.Worker, Relationships.HasWorkedRelationship>(
                owningWorkerNode.Reference,
                new Relationships.HasWorkedRelationship( chunkNodeRef)
                );

            var ret = Get( chunkNodeRef.Id, Client );

            return ret;
        }