]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.graph/src/org/simantics/graph/refactoring/RefactoringTool.java
Sync git svn branch with SVN repository r33358.
[simantics/platform.git] / bundles / org.simantics.graph / src / org / simantics / graph / refactoring / RefactoringTool.java
1 package org.simantics.graph.refactoring;\r
2 \r
3 import gnu.trove.set.hash.TIntHashSet;\r
4 \r
5 import java.io.BufferedReader;\r
6 import java.io.File;\r
7 import java.io.FileReader;\r
8 import java.io.IOException;\r
9 import java.util.ArrayList;\r
10 \r
11 import org.simantics.databoard.Files;\r
12 import org.simantics.graph.query.Path;\r
13 import org.simantics.graph.query.TransferableGraphConversion;\r
14 import org.simantics.graph.query.UriUtils;\r
15 import org.simantics.graph.refactoring.MappingSpecification.MappingRule;\r
16 import org.simantics.graph.representation.old.OldTransferableGraph1;\r
17 import org.simantics.graph.store.IdentityStore;\r
18 \r
19 \r
20 public class RefactoringTool {\r
21 \r
22     public static void main(String[] args) throws Exception {\r
23         if(args.length != 3)\r
24             System.out.println("Usage: java " + RefactoringTool.class.getCanonicalName() + " mappingSpec input.tg ouput.tg");\r
25         refactor(new File(args[0]), new File(args[1]), new File(args[2]));\r
26     }\r
27 \r
28     public static void refactor(File mappingSpec, File input, File output) throws IOException, GraphRefactoringException  {\r
29         if(!mappingSpec.exists()) {\r
30             System.out.println("Mapping specification " + mappingSpec + " does not exist.");\r
31             return;\r
32         }\r
33         if(!input.exists()) {\r
34             System.out.println("Input tg " + input + " does not exist.");\r
35             return;\r
36         }\r
37          \r
38         MappingSpecification spec = readMappingSpec(mappingSpec);\r
39         \r
40         // Refactor old format\r
41         OldTransferableGraph1 tg = (OldTransferableGraph1)\r
42                 Files.readFile(input, OldTransferableGraph1.BINDING);\r
43         boolean fixed = GraphRefactoringUtils.fixIncorrectRoot(tg.identities);\r
44         IdentityStore idStore = TransferableGraphConversion.extractIdentities(tg);\r
45         TIntHashSet parentsAffected = new TIntHashSet(); \r
46         GraphRefactoringUtils.refactor(null, idStore, spec, parentsAffected);\r
47         tg.resourceCount = idStore.getResourceCount();\r
48         tg.identities = idStore.toArray();\r
49         GraphRefactoringUtils.compactify(tg, parentsAffected);\r
50         if(fixed)\r
51             GraphRefactoringUtils.unfixIncorrectRoot(tg.identities);\r
52         \r
53         // Write to output file\r
54         Files.writeFile(output, OldTransferableGraph1.BINDING, tg);\r
55     }\r
56 \r
57     private static MappingSpecification readMappingSpec(File mappingSpec) throws IOException {\r
58         BufferedReader reader = new BufferedReader(new FileReader(mappingSpec));\r
59         ArrayList<MappingRule> rules = new ArrayList<MappingRule>();\r
60         while(true) {\r
61             String line = reader.readLine();\r
62             if(line == null)\r
63                 break;\r
64             line = line.trim();\r
65             if(line.isEmpty())\r
66                 continue;\r
67             String[] parts = line.trim().split(" ");\r
68             if(parts.length != 2)\r
69                 throw new IOException("Invalid mapping spec format. Every non-empty line should contain two URIs.");\r
70             \r
71             Path from = UriUtils.uriToPath(parts[0]);\r
72             Path to = UriUtils.uriToPath(parts[1]);\r
73             \r
74             rules.add(new MappingRule(from, to));\r
75         }\r
76         reader.close();\r
77         \r
78         return new MappingSpecification(rules);\r
79     }\r
80            \r
81 }\r