...with the standard caveat that you will need to be aware of the int -> double conversion issues if you ever try to do equality comparisons.
-----Original Message----- From: [email protected] [mailto:[email protected]] On Behalf Of Michael Hunger Sent: Saturday, June 25, 2011 12:17 PM To: Neo4j user discussions Subject: Re: [Neo4j] Integer cost property Rather just use ((Number)n).doubleValue(). That should work for all primitive math types and their counter-Objects, as well as BigDecimal/BigInteger. Cheers Michael Am 25.06.2011 um 17:52 schrieb Jim Webber: > Josh, > > Just to re-assure you I haven't lost this. The REST stuff I wanted in the > last milestone release is there, and I've been working to make the functional > test suite run faster. Now I'm at that stage, I'll crack on with this next > week. > > Jim > > On 18 Jun 2011, at 01:17, Josh Adell wrote: > >> Jim, >> The best I can do as far as a failing test is this series of curl >> calls. I create 2 nodes, then connect them with a relationship that >> has a property called "distance". When I ask for paths without >> specifying the algorithm, I get back the path with the relationship. >> When I specify the algorithm as "dijkstra" with a cost property of >> "distance", I get back a 400 Bad Request with a stack trace. >> >> Now interestingly, if I create the relationship with a distance of >> 2.0, it works. Unfortunately, PHP's json_encode method turns a double >> 2.0 into an integer 2. >> >> My original thought was to make the DoubleEvaluator class cast the >> Integer cost property value to a basic double before wrapping it in a >> Double object. >> >> Here is the series of commands: >> >> ===== SHELL >> >> $ curl -i -HAccept:application/json -HContent-Type:application/json -X >> POST -d '{"name":"A"}' http://localhost:7474/db/data/node >> HTTP/1.1 201 Created >> Content-Length: 996 >> Location: http://localhost:7474/db/data/node/73 >> Content-Encoding: UTF-8 >> Content-Type: application/json >> Access-Control-Allow-Origin: * >> Server: Jetty(6.1.25) >> >> { >> "outgoing_relationships" : >> "http://localhost:7474/db/data/node/73/relationships/out", >> "data" : { >> "name" : "A" >> }, >> "traverse" : "http://localhost:7474/db/data/node/73/traverse/{returnType}", >> "all_typed_relationships" : >> "http://localhost:7474/db/data/node/73/relationships/all/{-list|&|types}", >> "property" : "http://localhost:7474/db/data/node/73/properties/{key}", >> "self" : "http://localhost:7474/db/data/node/73", >> "properties" : "http://localhost:7474/db/data/node/73/properties", >> "outgoing_typed_relationships" : >> "http://localhost:7474/db/data/node/73/relationships/out/{-list|&|types}", >> "incoming_relationships" : >> "http://localhost:7474/db/data/node/73/relationships/in", >> "extensions" : { >> }, >> "create_relationship" : >> "http://localhost:7474/db/data/node/73/relationships", >> "all_relationships" : >> "http://localhost:7474/db/data/node/73/relationships/all", >> "incoming_typed_relationships" : >> "http://localhost:7474/db/data/node/73/relationships/in/{-list|&|types}" >> } >> >> $ curl -i -HAccept:application/json -HContent-Type:application/json -X >> POST -d '{"name":"B"}' http://localhost:7474/db/data/node >> HTTP/1.1 201 Created >> Content-Length: 996 >> Location: http://localhost:7474/db/data/node/74 >> Content-Encoding: UTF-8 >> Content-Type: application/json >> Access-Control-Allow-Origin: * >> Server: Jetty(6.1.25) >> >> { >> "outgoing_relationships" : >> "http://localhost:7474/db/data/node/74/relationships/out", >> "data" : { >> "name" : "B" >> }, >> "traverse" : "http://localhost:7474/db/data/node/74/traverse/{returnType}", >> "all_typed_relationships" : >> "http://localhost:7474/db/data/node/74/relationships/all/{-list|&|types}", >> "property" : "http://localhost:7474/db/data/node/74/properties/{key}", >> "self" : "http://localhost:7474/db/data/node/74", >> "properties" : "http://localhost:7474/db/data/node/74/properties", >> "outgoing_typed_relationships" : >> "http://localhost:7474/db/data/node/74/relationships/out/{-list|&|types}", >> "incoming_relationships" : >> "http://localhost:7474/db/data/node/74/relationships/in", >> "extensions" : { >> }, >> "create_relationship" : >> "http://localhost:7474/db/data/node/74/relationships", >> "all_relationships" : >> "http://localhost:7474/db/data/node/74/relationships/all", >> "incoming_typed_relationships" : >> "http://localhost:7474/db/data/node/74/relationships/in/{-list|&|types}" >> } >> >> $ curl -i -HAccept:application/json -HContent-Type:application/json -X >> POST -d >> '{"to":"http://localhost:7474/db/data/node/74","type":"GO","data":{"name":"AB","distance":2}}' >> http://localhost:7474/db/data/node/73/relationships >> HTTP/1.1 201 Created >> Content-Length: 421 >> Location: http://localhost:7474/db/data/relationship/64 >> Content-Encoding: UTF-8 >> Content-Type: application/json >> Access-Control-Allow-Origin: * >> Server: Jetty(6.1.25) >> >> { >> "start" : "http://localhost:7474/db/data/node/73", >> "data" : { >> "distance" : 2, >> "name" : "AB" >> }, >> "self" : "http://localhost:7474/db/data/relationship/64", >> "property" : >> "http://localhost:7474/db/data/relationship/64/properties/{key}", >> "properties" : "http://localhost:7474/db/data/relationship/64/properties", >> "type" : "GO", >> "extensions" : { >> }, >> "end" : "http://localhost:7474/db/data/node/74" >> } >> >> ##### This succeeds >> $ curl -i -HAccept:application/json -HContent-Type:application/json -X >> POST -d '{"to":"http://localhost:7474/db/data/node/74","type":"GO"}' >> http://localhost:7474/db/data/node/73/paths >> HTTP/1.1 200 OK >> Content-Length: 297 >> Content-Encoding: UTF-8 >> Content-Type: application/json >> Access-Control-Allow-Origin: * >> Server: Jetty(6.1.25) >> >> [ { >> "start" : "http://localhost:7474/db/data/node/73", >> "nodes" : [ "http://localhost:7474/db/data/node/73", >> "http://localhost:7474/db/data/node/74" ], >> "length" : 1, >> "relationships" : [ "http://localhost:7474/db/data/relationship/64" ], >> "end" : "http://localhost:7474/db/data/node/74" >> } ] >> >> >> ##### This fails >> $ curl -i -HAccept:application/json -HContent-Type:application/json -X >> POST -d >> '{"to":"http://localhost:7474/db/data/node/74","type":"GO","algorithm":"dijkstra","cost >> property":"distance"}' http://localhost:7474/db/data/node/73/paths >> HTTP/1.1 400 Bad Request >> Content-Length: 4579 >> Content-Encoding: UTF-8 >> Content-Type: application/json >> Access-Control-Allow-Origin: * >> Server: Jetty(6.1.25) >> >> { >> "message" : "java.lang.Integer cannot be cast to java.lang.Double", >> "exception" : "java.lang.ClassCastException: java.lang.Integer >> cannot be cast to java.lang.Double", >> "stacktrace" : [ >> "org.neo4j.graphalgo.impl.util.DoubleEvaluator.getCost(DoubleEvaluator.java:38)", >> "org.neo4j.graphalgo.impl.util.DoubleEvaluator.getCost(DoubleEvaluator.java:26)", >> "org.neo4j.graphalgo.impl.path.Dijkstra$SelectorFactory.calculateValue(Dijkstra.java:100)", >> "org.neo4j.graphalgo.impl.path.Dijkstra$SelectorFactory.calculateValue(Dijkstra.java:88)", >> "org.neo4j.graphalgo.impl.util.BestFirstSelectorFactory$BestFirstSelector.next(BestFirstSelectorFactory.java:66)", >> "org.neo4j.kernel.impl.traversal.TraverserImpl$TraverserIterator.fetchNextOrNull(TraverserImpl.java:127)", >> "org.neo4j.kernel.impl.traversal.TraverserImpl$TraverserIterator.fetchNextOrNull(TraverserImpl.java:94)", >> "org.neo4j.helpers.collection.PrefetchingIterator.hasNext(PrefetchingIterator.java:55)", >> "org.neo4j.graphalgo.impl.util.StopAfterWeightIterator.fetchNextOrNull(StopAfterWeightIterator.java:45)", >> "org.neo4j.graphalgo.impl.util.StopAfterWeightIterator.fetchNextOrNull(StopAfterWeightIterator.java:29)", >> "org.neo4j.helpers.collection.PrefetchingIterator.hasNext(PrefetchingIterator.java:55)", >> "org.neo4j.helpers.collection.IteratorWrapper.hasNext(IteratorWrapper.java:42)", >> "org.neo4j.server.rest.repr.ListRepresentation.serialize(ListRepresentation.java:58)", >> "org.neo4j.server.rest.repr.ListRepresentation.serialize(ListRepresentation.java:51)", >> "org.neo4j.server.rest.repr.OutputFormat.format(OutputFormat.java:118)", >> "org.neo4j.server.rest.repr.OutputFormat.response(OutputFormat.java:95)", >> "org.neo4j.server.rest.repr.OutputFormat.ok(OutputFormat.java:48)", >> "org.neo4j.server.rest.web.RestfulGraphDatabase.allPaths(RestfulGraphDatabase.java:987)", >> "sun.reflect.GeneratedMethodAccessor153.invoke(Unknown Source)", >> "sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)", >> "java.lang.reflect.Method.invoke(Method.java:597)", >> "com.sun.jersey.server.impl.model.method.dispatch.AbstractResourceMethodDispatchProvider$ResponseOutInvoker._dispatch(AbstractResourceMethodDispatchProvider.java:184)", >> "com.sun.jersey.server.impl.model.method.dispatch.ResourceJavaMethodDispatcher.dispatch(ResourceJavaMethodDispatcher.java:67)", >> "com.sun.jersey.server.impl.uri.rules.HttpMethodRule.accept(HttpMethodRule.java:276)", >> "com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:133)", >> "com.sun.jersey.server.impl.uri.rules.ResourceClassRule.accept(ResourceClassRule.java:83)", >> "com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:133)", >> "com.sun.jersey.server.impl.uri.rules.RootResourceClassesRule.accept(RootResourceClassesRule.java:71)", >> "com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1171)", >> "com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1103)", >> "com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1053)", >> "com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1043)", >> "com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:406)", >> "com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:477)", >> "com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:662)", >> "javax.servlet.http.HttpServlet.service(HttpServlet.java:820)", >> "org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)", >> "org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:390)", >> "org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)", >> "org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)", >> "org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114)", >> "org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)", >> "org.mortbay.jetty.Server.handle(Server.java:326)", >> "org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)", >> "org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:943)", >> "org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:756)", >> "org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:218)", >> "org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)", >> "org.mortbay.jetty.bio.SocketConnector$Connection.run(SocketConnector.java:228)", >> "org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)" >> ] >> } >> >> ===== END SHELL >> >> Thanks for any help you can provide. >> >> -- Josh >> _______________________________________________ >> Neo4j mailing list >> [email protected] >> https://lists.neo4j.org/mailman/listinfo/user > > _______________________________________________ > Neo4j mailing list > [email protected] > https://lists.neo4j.org/mailman/listinfo/user _______________________________________________ Neo4j mailing list [email protected] https://lists.neo4j.org/mailman/listinfo/user _______________________________________________ Neo4j mailing list [email protected] https://lists.neo4j.org/mailman/listinfo/user

