summaryrefslogtreecommitdiff
path: root/java/src/org/singinst/uf/model/NodeMetadataBuilder.java
blob: 1dd8401e8ad2fa9ff6e43cf34d41e263ddb6763d (plain)
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
package org.singinst.uf.model;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

import org.singinst.uf.presenter.LineBounds;

class NodeMetadataBuilder {
	private final Node node;
	private UiText uiText;
	private final List<ScalarSchema> scalarSchemata = new ArrayList<ScalarSchema>();
	private final List<ScalarSchema> simpleScalars = new ArrayList<ScalarSchema>();
	private final List<ScalarRelation> scalarRelations = new ArrayList<ScalarRelation>();
	
	public NodeMetadataBuilder(String name) {
		this(name, Collections.<NodeMetadata>emptyList());
	}

	public NodeMetadataBuilder(String name, List<NodeMetadata> dependencies) {
		this(new Node(name, dependencies));
	}

	public NodeMetadataBuilder(Node node) {
		this.node = node;
	}

	public NodeMetadataBuilder setBuilderUserText(UiText uiText) {
		this.uiText = uiText;
		return this;
	}

	public NodeMetadataBuilder buildNodeTypeAsProbability(ConclusionReportGenerator... generators) {
		LineBounds bounds = new LineBounds(0, 100);
		ScalarSchema scalarSchema = new ScalarSchema(node, ScalarSubIDString.PROBABILITY, bounds, "%", "Probability: ", "", bounds, true);
		scalarSchema.getConclusionGenerators().addAll(Arrays.asList(generators));
		scalarSchemata.add(scalarSchema);
		simpleScalars.add(scalarSchema);
		return this;
	}

	public NodeMetadata build() {
		return new NodeMetadata(node, uiText, scalarSchemata, simpleScalars, scalarRelations);
	}

	public NodeMetadataBuilder buildNodeTypeAsMooresLaw() {
		MooresLawNodeMetadataContentsFactory mooresLawNodeMetadataContentsFactory = new MooresLawNodeMetadataContentsFactory(node);
		scalarSchemata.addAll(mooresLawNodeMetadataContentsFactory.getScalars());
		scalarRelations.add(mooresLawNodeMetadataContentsFactory.getRelation());
		return this;
	}
	
	public NodeMetadataBuilder buildNodeTypeAsHazardRate() {
		HazardRateNodeMetadataContentsFactory hazardRateNodeMetadataContentsFactory = new HazardRateNodeMetadataContentsFactory(node);
		scalarSchemata.addAll(hazardRateNodeMetadataContentsFactory.getScalars());
		scalarRelations.add(hazardRateNodeMetadataContentsFactory.getRelation());
		return this;
	}

	public NodeMetadataBuilder buildNodeTypeAsGeneLearning() {
		GeneLearningNodeMetadataContentsFactory geneLearningNodeMetadataContentsFactory = new GeneLearningNodeMetadataContentsFactory(node);
		scalarSchemata.addAll(geneLearningNodeMetadataContentsFactory.getScalarSchemata());
		scalarRelations.add(geneLearningNodeMetadataContentsFactory.getRelation());
		return this;
	}

	public NodeMetadataBuilder buildNodeTypeAsOtherIa() {
		OtherIaNodeMetadataContentsFactory otherIaNodeMetadataPartialPrototype = new OtherIaNodeMetadataContentsFactory(node);
		scalarSchemata.addAll(otherIaNodeMetadataPartialPrototype.getScalars());
		scalarRelations.add(otherIaNodeMetadataPartialPrototype.getRelation());
		return this;
	}

	public NodeMetadataBuilder buildNodeTypeAsResearcher() {
		ResearchersNodeMetadataContentsFactory researchersNodeMetadataContentsFactory = new ResearchersNodeMetadataContentsFactory(node);
		scalarSchemata.addAll(researchersNodeMetadataContentsFactory.getScalars());
		scalarRelations.add(researchersNodeMetadataContentsFactory.getRelation());
		return this;
	}

	public NodeMetadataBuilder buildNodeTypeAsLogNormal(String units, double lowerBound, double upperBound) {
		NormalNodeMetadataContentsFactory logNormal = new NormalNodeMetadataContentsFactory(node, units, new LineBounds(lowerBound, upperBound, true), "");
		scalarSchemata.addAll(logNormal.getScalars());
		scalarRelations.add(logNormal.getRelation());
		return this;
	}

	public NodeMetadataBuilder buildNodeTypeAsYearLogNormal(int firstMajorTick, int boundaryYear, int lowerYear, int upperYear) {
		double lowerBound = Math.log10(lowerYear - boundaryYear);
		double upperBound = Math.log10(upperYear - boundaryYear);
		int majorTickSpace = upperYear == ModelUtil.LATEST_IA_YEAR ? 5 : 50;
		LineBounds bounds = new LogBounds(firstMajorTick, boundaryYear, lowerBound, upperBound, majorTickSpace, 10);
		//NormalNodeMetadataContentsFactory yearNormal = new NormalNodeMetadataContentsFactory(node, "(log) years after " + boundaryYear, bounds) {
		NormalNodeMetadataContentsFactory yearNormal = new NormalNodeMetadataContentsFactory(node, "years after " + boundaryYear, bounds, "10 to the") {

			@Override
			protected String meanUnits() {
				return "year";
			}
			
		};
		scalarSchemata.addAll(yearNormal.getScalars());
		scalarRelations.add(yearNormal.getRelation());
		return this;
	}

	public NodeMetadataBuilder addScalarRelation(ScalarRelation relation) {
		scalarRelations.add(relation);
		return this;
	}

}