Skip to content

Commit 73dee64

Browse files
Implemented reverse operator
Close #14 Delete commented code Fix typo in KnoxController
1 parent bc4f342 commit 73dee64

File tree

9 files changed

+107
-8
lines changed

9 files changed

+107
-8
lines changed

src/main/java/knox/spring/data/neo4j/controller/KnoxController.java

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -277,7 +277,7 @@ public ResponseEntity<String> orBranches(@RequestParam(value = "targetSpaceID",
277277
}
278278

279279
/**
280-
* @api {post} /branch/repeat Repeat
280+
* @api {post} /branch/Repeat
281281
* @apiName repeatBranches
282282
* @apiGroup Branch
283283
*
@@ -522,6 +522,38 @@ public ResponseEntity<String> mergeDesignSpaces(@RequestParam(value = "inputSpac
522522
}
523523
}
524524

525+
/**
526+
* @api {post} /designSpace/reverse Reverse
527+
* @apiName reverseDesignSpaces
528+
* @apiGroup DesignSpace
529+
*
530+
* @apiParam {String[]} inputSpaceIDs IDs for the input design spaces to be reversed.
531+
* @apiParam {String} [outputSpaceID] ID for the output design space resulting from reverse. If omitted, then the result is
532+
* stored in the first input design space.
533+
*
534+
* @apiDescription Reverse the edges from input design spaces.
535+
*/
536+
@RequestMapping(value = "/designSpace/reverse", method = RequestMethod.POST)
537+
public ResponseEntity<String> reverseDesignSpaces(@RequestParam(value = "inputSpaceID", required = true) String inputSpaceID,
538+
@RequestParam(value = "outputSpaceID", required = false) String outputSpaceID) {
539+
try {
540+
long startTime = System.nanoTime();
541+
542+
if (outputSpaceID == null) {
543+
designSpaceService.reverseDesignSpaces(inputSpaceID);
544+
} else {
545+
designSpaceService.reverseDesignSpaces(inputSpaceID, outputSpaceID);
546+
}
547+
548+
return new ResponseEntity<String>("{\"message\": \"Design space was successfully reversed after " +
549+
(System.nanoTime() - startTime) + " ns.\"}", HttpStatus.NO_CONTENT);
550+
} catch (ParameterEmptyException | DesignSpaceNotFoundException |
551+
DesignSpaceConflictException | DesignSpaceBranchesConflictException ex) {
552+
return new ResponseEntity<String>("{\"message\": \"" + ex.getMessage() + "\"}",
553+
HttpStatus.BAD_REQUEST);
554+
}
555+
}
556+
525557
/**
526558
* @api {post} /designSpace/or OR
527559
* @apiName orDesignSpaces

src/main/java/knox/spring/data/neo4j/domain/DesignSpace.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -223,4 +223,4 @@ public Set<Commit> getCommits() {
223223

224224
return commits;
225225
}
226-
}
226+
}

src/main/java/knox/spring/data/neo4j/domain/Edge.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -555,7 +555,6 @@ public boolean hasOrientation() {
555555
return isInline() || isReverseComplement();
556556
}
557557

558-
559558
public boolean hasOrientation(Orientation orientation) {
560559
return hasOrientation() && this.orientation.equals(orientation);
561560
}

src/main/java/knox/spring/data/neo4j/operations/OROperator.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,4 +17,4 @@ public static void apply(List<NodeSpace> inputSpaces, NodeSpace outputSpace) {
1717

1818
outputSpace.shallowCopyNodeSpace(union.getSpace());
1919
}
20-
}
20+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package knox.spring.data.neo4j.operations;
2+
3+
import knox.spring.data.neo4j.domain.Edge;
4+
import knox.spring.data.neo4j.domain.NodeSpace;
5+
6+
import java.util.ArrayList;
7+
import java.util.List;
8+
import java.util.Set;
9+
10+
public class ReverseOperator {
11+
public static void apply(NodeSpace inputSpace, NodeSpace outputSpace) {
12+
//copy input space to a new output space
13+
outputSpace.copyNodeSpace(inputSpace);
14+
15+
Set<Edge> allEdges = outputSpace.getEdges();
16+
17+
//traverse all edges of input space and flip the orientation attribute
18+
for(Edge edge: allEdges){
19+
edge.reverseOrientation();
20+
}
21+
}
22+
}

src/main/java/knox/spring/data/neo4j/services/DesignSpaceService.java

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import knox.spring.data.neo4j.operations.JoinOperator;
1414
import knox.spring.data.neo4j.operations.MergeOperator;
1515
import knox.spring.data.neo4j.operations.OROperator;
16+
import knox.spring.data.neo4j.operations.ReverseOperator;
1617
import knox.spring.data.neo4j.operations.Product;
1718
import knox.spring.data.neo4j.operations.RepeatOperator;
1819
import knox.spring.data.neo4j.operations.Star;
@@ -325,7 +326,31 @@ public void mergeBranches(String targetSpaceID, List<String> inputBranchIDs,
325326

326327
saveDesignSpace(targetSpace);
327328
}
328-
329+
330+
public void reverseDesignSpaces(String inputSpaceID) {
331+
reverseDesignSpaces(inputSpaceID, inputSpaceID);
332+
}
333+
334+
public void reverseDesignSpaces(String inputSpaceID, String outputSpaceID) {
335+
List<String> inputSpaceIDs = new ArrayList<>();
336+
inputSpaceIDs.add(inputSpaceID);
337+
List<NodeSpace> inputSpaces = new ArrayList<NodeSpace>(inputSpaceIDs.size());
338+
339+
DesignSpace outputSpace = loadIOSpaces(inputSpaceIDs, outputSpaceID, inputSpaces);
340+
341+
ReverseOperator.apply(inputSpaces.get(0), outputSpace);
342+
343+
344+
List<NodeSpace> inputSnaps = new ArrayList<NodeSpace>(inputSpaces.size());
345+
346+
NodeSpace outputSnap = mergeVersionHistories(castNodeSpacesToDesignSpaces(inputSpaces),
347+
outputSpace, inputSnaps);
348+
349+
ReverseOperator.apply(inputSnaps.get(0), outputSnap);
350+
351+
saveDesignSpace(outputSpace);
352+
}
353+
329354
private DesignSpace loadIOSpaces(List<String> inputSpaceIDs, String outputSpaceID,
330355
List<NodeSpace> inputSpaces) {
331356
for (String inputSpaceID : inputSpaceIDs) {
@@ -863,7 +888,8 @@ private DesignSpace findDesignSpace(String targetSpaceID) {
863888
}
864889

865890
private DesignSpace loadDesignSpace(String targetSpaceID) {
866-
DesignSpace targetSpace = designSpaceRepository.findOne(getDesignSpaceGraphID(targetSpaceID), 3);
891+
Long keyID = getDesignSpaceGraphID(targetSpaceID);
892+
DesignSpace targetSpace = designSpaceRepository.findOne(keyID, 3);
867893

868894
for (Commit commit : targetSpace.getCommits()) {
869895
commit.setSnapshot(reloadSnapshot(commit.getSnapshot()));

src/main/resources/static/gulpfile.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,4 +103,4 @@ gulp.task('dev', ['browserSync', 'less', 'minify-css', 'minify-js'], function()
103103
// Reloads the browser whenever HTML or JS files change
104104
gulp.watch('*.html', browserSync.reload);
105105
gulp.watch('js/**/*.js', browserSync.reload);
106-
});
106+
});

src/main/resources/static/js/endpoints.js

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,8 @@ export const operators = {
3030
OR: 'or',
3131
AND: 'and',
3232
MERGE: 'merge',
33-
REPEAT: 'repeat'
33+
REPEAT: 'repeat',
34+
REVERSE: 'reverse'
3435
};
3536

3637

@@ -288,4 +289,19 @@ export function designSpaceMerge(inputSpaces, outputSpace, tolerance){
288289
} else {
289290
swalError(request.response);
290291
}
292+
}
293+
294+
export function designSpaceReverse(inputSpaces, outputSpace, tolerance){
295+
let query = "?";
296+
query += encodeQueryParameter("inputSpaceID", inputSpaces, query);
297+
query += encodeQueryParameter("outputSpaceID", outputSpace, query);
298+
299+
let request = new XMLHttpRequest();
300+
request.open("POST", endpoints.DESIGN + "/" + operators.REVERSE + query, false);
301+
request.send(null);
302+
if (request.status >= 200 && request.status < 300) {
303+
swalSuccess();
304+
} else {
305+
swalError(request.response);
306+
}
291307
}

src/main/resources/static/js/knox.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -557,6 +557,10 @@ $('#apply-operators-tooltip').click(() => {
557557
case endpoint.operators.MERGE:
558558
endpoint.designSpaceMerge(inputSpaces, outputSpace, tolerance);
559559
break;
560+
561+
case endpoint.operators.REVERSE:
562+
endpoint.designSpaceReverse(inputSpaces, outputSpace);
563+
break;
560564
}
561565
}
562566
});

0 commit comments

Comments
 (0)