Skip to content

Commit

Permalink
minor changes to disploay better progress
Browse files Browse the repository at this point in the history
  • Loading branch information
Reiner Jung committed Jul 6, 2015
1 parent 8f627f7 commit ed1426c
Show file tree
Hide file tree
Showing 4 changed files with 48 additions and 54 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -35,9 +35,11 @@ class CalculationSubJob extends Job {
}

override protected run(IProgressMonitor monitor) {
// TODO determine size
monitor.beginTask("Processing graphs.",0)
var Node node
var int i = 0
while ((node = parent.getNextConnectedNodeTask) != null) {
monitor.subTask("task " + i++)
// S^#_i
val transformationConnectedNodeHyperedgesOnlyGraph =
new TransformationConnectedNodeHyperedgesOnlyGraph(input)
Expand All @@ -47,6 +49,8 @@ class CalculationSubJob extends Job {
parent.deliverResult(transformationConnectedNodeHyperedgesOnlyGraph.result)
}

monitor.done

return Status.OK_STATUS
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,8 @@ import org.eclipse.emf.ecore.EObject

class ComplexityAnalysisJob extends Job {

private static val PARALLEL_TASKS = 8

val List<AbstractTypeDeclaration> classes

val List<String> dataTypePatterns
Expand All @@ -62,6 +64,7 @@ class ComplexityAnalysisJob extends Job {

var TransformationJavaMethodsToModularHypergraph javaToModularHypergraph

var IProgressMonitor monitor

/**
* The constructor scans the selection for files.
Expand All @@ -78,19 +81,22 @@ class ComplexityAnalysisJob extends Job {
}

protected override IStatus run(IProgressMonitor monitor) {
this.monitor = monitor
// set total number of work units
val result = ResultModelProvider.INSTANCE
/** construct analysis. */
monitor.beginTask("Processing project", 0)
this.monitor.beginTask("Processing project", 3)

this.javaToModularHypergraph = new TransformationJavaMethodsToModularHypergraph(project, classes, dataTypePatterns, observedSystemPatterns, monitor)

this.javaToModularHypergraph.transform
this.monitor.worked(1)

result.values.add(new NamedValue(project.project.name + " size of observed system", classes.size))
result.values.add(new NamedValue(project.project.name + " number of modules", javaToModularHypergraph.modularSystem.modules.size))
result.values.add(new NamedValue(project.project.name + " number of nodes",javaToModularHypergraph.modularSystem.nodes.size))
result.values.add(new NamedValue(project.project.name + " number of edges",javaToModularHypergraph.modularSystem.edges.size))

updateView()

/** Preparing different hypergraphs */
Expand All @@ -102,18 +108,17 @@ class ComplexityAnalysisJob extends Job {

monitor.subTask("Create maximal interconnected graph")
transformationMaximalInterconnectedGraph.transform
this.monitor.worked(1)
monitor.subTask("Create intermodule hyperedges only graph")
transformationIntermoduleHyperedgesOnlyGraph.transform
this.monitor.worked(1)

/** calculating result metrics */
monitor.beginTask("Calculating metrics", 1+3*3)
// Calculation for S
val metrics = new TransformationHypergraphMetrics(monitor)
val metrics = new TransformationHypergraphMetrics(monitor, "Calculate system size")
metrics.setSystem(javaToModularHypergraph.modularSystem)
monitor.subTask("System size")
val systemSize = metrics.calculate
monitor.worked(1)


// Calculation for S -> S^#, S^#_i
val complexity = calculateComplexity(javaToModularHypergraph.modularSystem, monitor, "Complexity")
// Calculation for MS^(n) -> MS^(n)#, MS^(n)#_i
Expand Down Expand Up @@ -161,50 +166,45 @@ class ComplexityAnalysisJob extends Job {
* @param input a modular system
*/
private def calculateComplexity(Hypergraph input, IProgressMonitor monitor, String message) {
monitor?.subTask(message + " - S^#")
// S^#
monitor.beginTask(message + " - S^#", input.nodes.size + 1)
/** S^# (hyperedges only graph) */
val transformationHyperedgesOnlyGraph = new TransformationHyperedgesOnlyGraph(input)
transformationHyperedgesOnlyGraph.transform
monitor?.worked(1)
monitor.worked(1)

// S^#_i
/** S^#_i (hyperedges only graphs for each node graph) */
//val transformationConnectedNodeHyperedgesOnlyGraph =
// new TransformationConnectedNodeHyperedgesOnlyGraph(transformationHyperedgesOnlyGraph.result)

//val resultConnectedNodeGraphs = new ArrayList<Hypergraph>()

// var int i = 0
//var int i = 0

//for (Node node : transformationHyperedgesOnlyGraph.result.nodes) {
// monitor?.subTask(message + " - S^#_" + i)

// transformationConnectedNodeHyperedgesOnlyGraph.node = node
// transformationConnectedNodeHyperedgesOnlyGraph.transform
// resultConnectedNodeGraphs.add(transformationConnectedNodeHyperedgesOnlyGraph.result)
// i++
//}

var List<Job> jobs = new ArrayList<Job>()

resultConnectedNodeGraphs = new ArrayList<Hypergraph>()
globalHyperEdgesOnlyGraphNodes = transformationHyperedgesOnlyGraph.result.nodes.iterator

for (var int j=0;j<8;j++) {
for (var int j=0;j<PARALLEL_TASKS;j++) {
val job = new CalculationSubJob("S^#_i " + j, this, transformationHyperedgesOnlyGraph.result)
jobs.add(job)
job.schedule
}

jobs.forEach[it.join]

//for (Node node : transformationHyperedgesOnlyGraph.result.nodes) {
// monitor?.subTask(message + " - S^#_" + i)

// transformationConnectedNodeHyperedgesOnlyGraph.node = node
// transformationConnectedNodeHyperedgesOnlyGraph.transform
// resultConnectedNodeGraphs.add(transformationConnectedNodeHyperedgesOnlyGraph.result)
// i++
//}
monitor?.worked(1)

val metrics = new TransformationHypergraphMetrics(monitor)

metrics.setSystem(transformationHyperedgesOnlyGraph.result)
monitor?.subTask(message + " - calculate")

/** calculate size of S^# and S^#_i */
val complexity = calculateComplexity(transformationHyperedgesOnlyGraph.result, resultConnectedNodeGraphs, monitor)
monitor?.worked(1)


return complexity
}

Expand All @@ -222,6 +222,7 @@ class ComplexityAnalysisJob extends Job {
* Used for the parallelization. Deliver the result
*/
synchronized def deliverResult(Hypergraph hypergraph) {
this.monitor.worked(1)
resultConnectedNodeGraphs.add(hypergraph)
}

Expand All @@ -244,15 +245,15 @@ class ComplexityAnalysisJob extends Job {
globalMetricsSubGraphTotal = hypergraph.nodes.size

var List<Job> jobs = new ArrayList<Job>()
for (var int j=0;j<8;j++) {
for (var int j=0;j<PARALLEL_TASKS;j++) {
val job = new MetricsSubJob("Metrics " + j, this)
jobs.add(job)
job.schedule
}

jobs.forEach[it.join]

val metrics = new TransformationHypergraphMetrics(monitor)
val metrics = new TransformationHypergraphMetrics(monitor, "S^#")
/** the rest stays in both versions */
metrics.setSystem(hypergraph)
complexity -= metrics.calculate
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ class MetricsSubJob extends Job {
}

override protected run(IProgressMonitor monitor) {
val metrics = new TransformationHypergraphMetrics(monitor)
val metrics = new TransformationHypergraphMetrics(monitor, "S^#_i Metric")
var Hypergraph subgraph
while ((subgraph = parent.getNextSubgraph) != null) {
metrics.setSystem(subgraph)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,32 +34,23 @@ class TransformationHypergraphMetrics {
var Hypergraph system

val String name

val boolean subtask

new(IProgressMonitor monitor) {
this.monitor = monitor
this.name = ""
this.subtask = true
}


new(IProgressMonitor monitor, String name) {
this.monitor = monitor
this.name = name
this.subtask = false
}

public def setSystem(Hypergraph system) {
this.system = system
}

public def double calculate() {
if (!subtask) monitor.beginTask(this.name, (system.edges.size + system.nodes.size)*2 + system.nodes.size)
monitor.beginTask(this.name, (system.edges.size + system.nodes.size)*2 + system.nodes.size)
val systemGraph = createSystemGraph(system)
val table = systemGraph.createRowPatternTable

val result = calculateSize(systemGraph, table)
if (!subtask) monitor.done

return result
}

Expand All @@ -71,16 +62,14 @@ class TransformationHypergraphMetrics {
var double size = 0

for (var int i=0;i<system.nodes.size;i++) {
if (!subtask) monitor?.worked(1)
monitor.worked(1)
val probability = table.patterns.lookupProbability(system.nodes.get(i), system)
if (probability > 0.0d)
size+= (-log2(probability))
else
System.out.println("Disconnected component. Result is tainted.")
}

if (subtask) monitor?.worked(1)


return size
}

Expand Down Expand Up @@ -112,10 +101,10 @@ class TransformationHypergraphMetrics {
private def RowPatternTable createRowPatternTable(Hypergraph systemGraph) {
val RowPatternTable patternTable = StateFactory.eINSTANCE.createRowPatternTable()
systemGraph.edges.forEach[edge | patternTable.edges.add(edge)]
if (!subtask) monitor?.worked(system.edges.size)
monitor.worked(system.edges.size)
systemGraph.nodes.forEach[node | patternTable.patterns.add(node.calculateRowPattern(patternTable.edges))]
patternTable.compactPatternTable
if (!subtask) monitor?.worked(system.nodes.size)
monitor.worked(system.nodes.size)

return patternTable
}
Expand Down Expand Up @@ -181,7 +170,7 @@ class TransformationHypergraphMetrics {
systemGraph.nodes.add(environmentNode)

system.edges.forEach[edge | systemGraph.edges.add(edge.deriveEdge)]
if (!subtask) monitor?.worked(system.edges.size)
monitor.worked(system.edges.size)
system.nodes.forEach[node |
val derivedNode = node.deriveNode
node.edges.forEach[edge |
Expand All @@ -190,7 +179,7 @@ class TransformationHypergraphMetrics {
]
systemGraph.nodes.add(derivedNode)
]
if (!subtask) monitor?.worked(system.nodes.size)
monitor.worked(system.nodes.size)

return systemGraph
}
Expand Down

0 comments on commit ed1426c

Please sign in to comment.