1 package org.simantics.graph.refactoring;
\r
3 import gnu.trove.set.hash.TIntHashSet;
\r
5 import java.io.BufferedReader;
\r
7 import java.io.FileReader;
\r
8 import java.io.IOException;
\r
9 import java.util.ArrayList;
\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
20 public class RefactoringTool {
\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
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
33 if(!input.exists()) {
\r
34 System.out.println("Input tg " + input + " does not exist.");
\r
38 MappingSpecification spec = readMappingSpec(mappingSpec);
\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
51 GraphRefactoringUtils.unfixIncorrectRoot(tg.identities);
\r
53 // Write to output file
\r
54 Files.writeFile(output, OldTransferableGraph1.BINDING, tg);
\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
61 String line = reader.readLine();
\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
71 Path from = UriUtils.uriToPath(parts[0]);
\r
72 Path to = UriUtils.uriToPath(parts[1]);
\r
74 rules.add(new MappingRule(from, to));
\r
78 return new MappingSpecification(rules);
\r