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