@@ -469,7 +469,7 @@ class CodeGen(schema: Schema) {
469
469
}
470
470
471
471
s """ /** ${adjacentNode.customStepDoc.getOrElse(" " )}
472
- | * Traverse to ${neighbor.name} via ${adjacentNode.viaEdge.name}.
472
+ | * Traverse to ${neighbor.name} via ${adjacentNode.viaEdge.name} $direction edge .
473
473
| */ ${docAnnotationMaybe(adjacentNode.customStepDoc)}
474
474
|def $accessorName: ${fullScalaType(neighbor, cardinality)} =
475
475
| $edgeAccessorName.collectAll[ ${neighbor.className}] $appendix""" .stripMargin
@@ -897,7 +897,7 @@ class CodeGen(schema: Schema) {
897
897
case neighborNodeInfo if ! neighborNodeInfo.isInherited =>
898
898
val accessorNameForNode = accessorName(neighborNodeInfo)
899
899
s """ /** ${neighborNodeInfo.customStepDoc.getOrElse(" " )}
900
- | * Traverse to ${neighborNodeInfo.neighborNode.name} via ${neighborNodeInfo.edge.name}.
900
+ | * Traverse to ${neighborNodeInfo.neighborNode.name} via ${neighborNodeInfo.edge.name} $direction edge .
901
901
| */ ${docAnnotationMaybe(neighborNodeInfo.customStepDoc)}
902
902
|def $accessorNameForNode: ${neighborNodeInfo.returnType} = get(). $accessorNameForNode""" .stripMargin
903
903
}.mkString(" \n " )
@@ -1131,7 +1131,7 @@ class CodeGen(schema: Schema) {
1131
1131
lazy val nodeTraversalImplicits = {
1132
1132
def implicitForNodeType (name : String ) = {
1133
1133
val traversalName = s " ${name}TraversalExtGen "
1134
- s " implicit def to $traversalName[NodeType <: $name](trav: Traversal [NodeType]): ${traversalName}[NodeType] = new $traversalName(trav) "
1134
+ s " implicit def to $traversalName[NodeType <: $name](trav: IterableOnce [NodeType]): ${traversalName}[NodeType] = new $traversalName(trav) "
1135
1135
}
1136
1136
1137
1137
val implicitsForNodeTraversals =
@@ -1142,7 +1142,6 @@ class CodeGen(schema: Schema) {
1142
1142
1143
1143
s """ package $traversalsPackage
1144
1144
|
1145
- |import overflowdb.traversal.Traversal
1146
1145
|import $nodesPackage._
1147
1146
|
1148
1147
|trait NodeTraversalImplicits extends NodeBaseTypeTraversalImplicits {
@@ -1156,24 +1155,25 @@ class CodeGen(schema: Schema) {
1156
1155
| """ .stripMargin
1157
1156
}
1158
1157
1159
- def generateCustomStepNameTraversals (nodeType : AbstractNodeType ): String = {
1160
- nodeType.edges
1161
- .sortBy(_.customStepName)
1162
- .collect { case AdjacentNode (viaEdge, neighbor, cardinality, Some (customStepName), customStepDoc) =>
1163
- val mapOrFlatMap = cardinality match {
1164
- case Cardinality .One => " map"
1165
- case Cardinality .ZeroOrOne | Cardinality .List => " flatMap"
1166
- }
1167
- s """ /** ${customStepDoc.getOrElse(" " )}
1168
- | * Traverse to ${neighbor.name} via ${viaEdge.name} - this relationship was given a customStepName in the schema.
1169
- | */ ${docAnnotationMaybe(customStepDoc)}
1170
- |def $customStepName: Traversal[ ${neighbor.className}] =
1171
- | traversal. $mapOrFlatMap(_. $customStepName)
1172
- | """ .stripMargin
1173
- }.mkString(" \n " )
1158
+ def generateCustomStepNameTraversals (nodeType : AbstractNodeType ): Seq [String ] = {
1159
+ for {
1160
+ direction <- Seq (Direction .IN , Direction .OUT )
1161
+ AdjacentNode (viaEdge, neighbor, cardinality, Some (customStepName), customStepDoc) <- nodeType.edges(direction).sortBy(_.customStepName)
1162
+ } yield {
1163
+ val mapOrFlatMap = cardinality match {
1164
+ case Cardinality .One => " map"
1165
+ case Cardinality .ZeroOrOne | Cardinality .List => " flatMap"
1166
+ }
1167
+ s """ /** ${customStepDoc.getOrElse(" " )}
1168
+ | * Traverse to ${neighbor.name} via ${viaEdge.name} $direction edge.
1169
+ | */ ${docAnnotationMaybe(customStepDoc)}
1170
+ |def $customStepName: Traversal[ ${neighbor.className}] =
1171
+ | traversal. $mapOrFlatMap(_. $customStepName)
1172
+ | """ .stripMargin
1173
+ }
1174
1174
}
1175
1175
1176
- def generatePropertyTraversals (properties : Seq [Property [_]]): String = {
1176
+ def generatePropertyTraversals (properties : Seq [Property [_]]): Seq [ String ] = {
1177
1177
import Property .Cardinality
1178
1178
properties.map { property =>
1179
1179
val nameCamelCase = camelCase(property.name)
@@ -1514,22 +1514,25 @@ class CodeGen(schema: Schema) {
1514
1514
|
1515
1515
| $filterSteps
1516
1516
| """ .stripMargin
1517
- }.mkString( " \n " )
1517
+ }
1518
1518
}
1519
1519
1520
1520
def generateNodeTraversalExt (nodeType : AbstractNodeType ): String = {
1521
+ val customStepNameTraversals = generateCustomStepNameTraversals(nodeType)
1522
+ val propertyTraversals = generatePropertyTraversals(nodeType.properties)
1521
1523
val className = nodeType.className
1524
+
1522
1525
s """ package $traversalsPackage
1523
1526
|
1524
- |import overflowdb.traversal.Traversal
1527
+ |import overflowdb.traversal._
1525
1528
|import $nodesPackage._
1526
1529
|
1527
1530
|/** Traversal steps for $className */
1528
- |class ${className}TraversalExtGen[NodeType <: $className](val traversal: Traversal [NodeType]) extends AnyVal {
1531
+ |class ${className}TraversalExtGen[NodeType <: $className](val traversal: IterableOnce [NodeType]) extends AnyVal {
1529
1532
|
1530
- | ${generateCustomStepNameTraversals(nodeType )}
1533
+ | ${customStepNameTraversals.mkString( " \n " )}
1531
1534
|
1532
- | ${generatePropertyTraversals(nodeType.properties )}
1535
+ | ${propertyTraversals.mkString( " \n " )}
1533
1536
|
1534
1537
|} """ .stripMargin
1535
1538
}
0 commit comments