1 package org.simantics.graph.refactoring;
3 import gnu.trove.set.hash.TIntHashSet;
5 import java.io.BufferedReader;
7 import java.io.FileReader;
8 import java.io.IOException;
9 import java.util.ArrayList;
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;
20 public class RefactoringTool {
22 public static void main(String[] args) throws Exception {
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]));
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.");
34 System.out.println("Input tg " + input + " does not exist.");
38 MappingSpecification spec = readMappingSpec(mappingSpec);
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);
51 GraphRefactoringUtils.unfixIncorrectRoot(tg.identities);
53 // Write to output file
54 Files.writeFile(output, OldTransferableGraph1.BINDING, tg);
57 private static MappingSpecification readMappingSpec(File mappingSpec) throws IOException {
58 BufferedReader reader = new BufferedReader(new FileReader(mappingSpec));
59 ArrayList<MappingRule> rules = new ArrayList<MappingRule>();
61 String line = reader.readLine();
67 String[] parts = line.trim().split(" ");
69 throw new IOException("Invalid mapping spec format. Every non-empty line should contain two URIs.");
71 Path from = UriUtils.uriToPath(parts[0]);
72 Path to = UriUtils.uriToPath(parts[1]);
74 rules.add(new MappingRule(from, to));
78 return new MappingSpecification(rules);