diff options
Diffstat (limited to 'Metrics/Metrics-Calculation/SocialNetwork_plugin/src/ca/mcgill/ecse/socialnetwork/runner/Main.java')
-rw-r--r-- | Metrics/Metrics-Calculation/SocialNetwork_plugin/src/ca/mcgill/ecse/socialnetwork/runner/Main.java | 128 |
1 files changed, 128 insertions, 0 deletions
diff --git a/Metrics/Metrics-Calculation/SocialNetwork_plugin/src/ca/mcgill/ecse/socialnetwork/runner/Main.java b/Metrics/Metrics-Calculation/SocialNetwork_plugin/src/ca/mcgill/ecse/socialnetwork/runner/Main.java new file mode 100644 index 00000000..72ea45d1 --- /dev/null +++ b/Metrics/Metrics-Calculation/SocialNetwork_plugin/src/ca/mcgill/ecse/socialnetwork/runner/Main.java | |||
@@ -0,0 +1,128 @@ | |||
1 | package ca.mcgill.ecse.socialnetwork.runner; | ||
2 | |||
3 | import java.io.File; | ||
4 | import java.io.FileNotFoundException; | ||
5 | import java.io.PrintStream; | ||
6 | import java.util.ArrayList; | ||
7 | |||
8 | import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.app.Domain; | ||
9 | import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.distance.KSDistance; | ||
10 | import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.graph.EMFGraph; | ||
11 | import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.io.CsvFileWriter; | ||
12 | import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.io.GraphReader; | ||
13 | import ca.mcgill.ecse.dslreasoner.realistic.metrics.calculator.metrics.MetricSampleGroup; | ||
14 | import hu.bme.mit.inf.dslreasoner.application.execution.StandaloneScriptExecutor; | ||
15 | import hu.bme.mit.inf.dslreasoner.domains.yakindu.sgraph.validation.ViolationCheck; | ||
16 | import hu.bme.mit.inf.dslreasoner.domains.yakindu.sgraph.yakindumm.YakindummPackage; | ||
17 | import socialnetwork.Person; | ||
18 | |||
19 | public class Main { | ||
20 | |||
21 | private static String runWithPath(String path) { | ||
22 | String message = StandaloneScriptExecutor.executeScript(path); | ||
23 | return message; | ||
24 | } | ||
25 | |||
26 | public static void main(String args[]) { | ||
27 | // try { | ||
28 | |||
29 | ArrayList<ArrayList<String>> output = new ArrayList<ArrayList<String>>(); | ||
30 | output.add(prepareInfo()); | ||
31 | CsvFileWriter.write(output, "yakinduum/info.csv"); | ||
32 | //YakinduumModel.init(); | ||
33 | generateModel(1); | ||
34 | // }catch(Exception e) { | ||
35 | // e.printStackTrace(); | ||
36 | // }finally { | ||
37 | // outDegreeStatistic(); | ||
38 | // } | ||
39 | // outDegreeStatistic(); | ||
40 | |||
41 | } | ||
42 | |||
43 | public static void generateModel(int run) { | ||
44 | //prepare initial info | ||
45 | long begin = System.currentTimeMillis(); | ||
46 | String message = runWithPath("yakinduGeneration.vsconfig"); | ||
47 | |||
48 | |||
49 | |||
50 | if(message == null) { | ||
51 | ArrayList<ArrayList<String>> output = new ArrayList<ArrayList<String>>(); | ||
52 | long elapsed = System.currentTimeMillis() - begin; | ||
53 | String time = formatTime(elapsed); | ||
54 | |||
55 | ArrayList<String> infoOutput = new ArrayList<String>(); | ||
56 | infoOutput.add(run+ ""); | ||
57 | infoOutput.add(time); | ||
58 | infoOutput.addAll(calculateMetric()); | ||
59 | |||
60 | YakinduumModel model = new YakinduumModel("output/Viatra_100/1.xmi"); | ||
61 | int violationCount = ViolationCheck.calculateViolationCounts(model.yakinduum); | ||
62 | infoOutput.add(violationCount + ""); | ||
63 | |||
64 | //save model to another directory | ||
65 | model.save("yakinduum/" + run + ".xmi"); | ||
66 | |||
67 | output.add(infoOutput); | ||
68 | CsvFileWriter.append(output, "yakinduum/info.csv"); | ||
69 | System.out.println("Finished"); | ||
70 | } | ||
71 | |||
72 | } | ||
73 | |||
74 | public static ArrayList<String> calculateMetric() { | ||
75 | //read model and metric | ||
76 | ArrayList<String> output = new ArrayList<String>(); | ||
77 | GraphReader reader = new GraphReader(YakindummPackage.eINSTANCE); | ||
78 | EMFGraph graph = reader.readModels("output/Viatra_100/").get(0); | ||
79 | |||
80 | //KS distance | ||
81 | KSDistance ks = new KSDistance(Domain.Yakinduum); | ||
82 | |||
83 | //calculate and put metric data to output array | ||
84 | MetricSampleGroup samples = graph.evaluateAllMetricsToSamples(); | ||
85 | output.add(graph.getStatistic().getAllNodes().size() + ""); | ||
86 | output.add(ks.outDegreeDistance(samples.outDegreeSamples) + ""); | ||
87 | output.add(ks.naDistance(samples.naSamples)+ ""); | ||
88 | output.add(ks.mpcDistance(samples.mpcSamples) + ""); | ||
89 | return output; | ||
90 | } | ||
91 | |||
92 | public static ArrayList<String> prepareInfo() { | ||
93 | ArrayList<String> info = new ArrayList<String>(); | ||
94 | info.add("ID"); | ||
95 | info.add("Time"); | ||
96 | info.add("# of Nodes"); | ||
97 | info.add("Out Degree"); | ||
98 | info.add("Node Activity"); | ||
99 | info.add("MPC"); | ||
100 | info.add("Violations"); | ||
101 | return info; | ||
102 | } | ||
103 | |||
104 | public static String formatTime(long time) { | ||
105 | long mili = time % 1000; | ||
106 | long second = (time / 1000) % 60; | ||
107 | long minute = (time / (1000 * 60)); | ||
108 | return String.format("%d : %d.%d", minute, second, mili); | ||
109 | } | ||
110 | |||
111 | public static void statistics() { | ||
112 | String uri = "output/1.xmi"; | ||
113 | SocialNetworkModel socialNetwork = new SocialNetworkModel(uri); | ||
114 | System.out.println(socialNetwork.getPersons().size()); | ||
115 | |||
116 | File file = new File("model/statistics/output.txt"); | ||
117 | try { | ||
118 | @SuppressWarnings("resource") | ||
119 | PrintStream out = new PrintStream(file); | ||
120 | for(Person p : socialNetwork.getPersons()) { | ||
121 | out.println(p.getFriends().size()); | ||
122 | } | ||
123 | } catch (FileNotFoundException e) { | ||
124 | e.printStackTrace(); | ||
125 | } | ||
126 | System.out.println("Output Finished"); | ||
127 | } | ||
128 | } | ||