blob: 5c871a789a58f3734ea98f1870665562a41a10d8 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
package hu.bme.mit.inf.dslreasoner.application.ui.highlight
import java.util.List
import java.util.Random
import org.eclipse.emf.ecore.EClass
import org.eclipse.emf.ecore.EEnum
class ColorCalculator {
public def dispatch getColor(EClass c) {
val supertypes = (c.getEAllSuperTypes + #[c])
val typeHashcodes = supertypes.map[(c.getEPackage.nsURI->c.name).hashCode+2]
return randomColor(typeHashcodes)
}
public def dispatch getColor(EEnum e) {
return randomColor((e.getEPackage.nsURI->e.name).hashCode)
}
protected def randomColor(Integer seed) {
val Random random = new Random(seed)
val rangePicker = [|random.nextInt(128)+128]
return #[rangePicker.apply(), rangePicker.apply(), rangePicker.apply()]
}
protected def randomColor(Iterable<Integer> seeds) { seeds.map[randomColor].averageColor }
private def averageColor(Iterable<List<Integer>> colors) {
if(colors.empty) {
return #[256,256,256]
} else {
return #[
colors.map[get(0)].average,
colors.map[get(1)].average,
colors.map[get(2)].average
]
}
}
private def average(Iterable<Integer> doubles) { return doubles.reduce[p1, p2|p1+p2]/doubles.size }
}
|