aboutsummaryrefslogtreecommitdiff
path: root/src/uk/ac/ox/cs/pagoda/rules/DatalogProgram.java
blob: e2a171da3170bbaf7b3bea3f90fd78fc81cdcfbf (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
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
package uk.ac.ox.cs.pagoda.rules;

import org.semanticweb.owlapi.model.OWLOntology;
import uk.ac.ox.cs.pagoda.constraints.BottomStrategy;
import uk.ac.ox.cs.pagoda.constraints.UpperUnaryBottom;
import uk.ac.ox.cs.pagoda.util.disposable.Disposable;
import uk.ac.ox.cs.pagoda.util.disposable.DisposedException;

import java.io.InputStream;

public class DatalogProgram extends Disposable {

    UpperDatalogProgram upperProgram = new UpperDatalogProgram();
    LowerDatalogProgram lowerProgram;
    GeneralProgram program = new GeneralProgram();

    BottomStrategy upperBottom;

    public DatalogProgram(InputStream inputStream) {
        lowerProgram = new LowerDatalogProgram();

        upperProgram.load(inputStream, upperBottom = new UpperUnaryBottom());
        lowerProgram.clone(upperProgram);
        program.clone(upperProgram);

        upperProgram.transform();
        lowerProgram.transform();
        program.transform();

        program.buildDependencyGraph();
        lowerProgram.dependencyGraph = upperProgram.buildDependencyGraph();
    }

    public DatalogProgram(OWLOntology o) {
        lowerProgram = new LowerDatalogProgram();

        upperProgram.load(o, upperBottom = new UpperUnaryBottom());
//		upperProgram.load(o, upperBottom = new UnaryBottom());
        lowerProgram.clone(upperProgram);
        program.clone(upperProgram);
//		program.botStrategy = new UnaryBottom();

        upperProgram.transform();
        lowerProgram.transform();
        program.transform();

        program.buildDependencyGraph();
        lowerProgram.dependencyGraph = upperProgram.buildDependencyGraph();
    }

    public LowerDatalogProgram getLower() {
        if(isDisposed()) throw new DisposedException();
        return lowerProgram;
    }

    public UpperDatalogProgram getUpper() {
        if(isDisposed()) throw new DisposedException();
        return upperProgram;
    }

    public GeneralProgram getGeneral() {
        if(isDisposed()) throw new DisposedException();
        return program;
    }

    public String getAdditionalDataFile() {
        if(isDisposed()) throw new DisposedException();
        return upperProgram.getAdditionalDataFile();
    }

    public BottomStrategy getUpperBottomStrategy() {
        if(isDisposed()) throw new DisposedException();
        return upperBottom;
    }

    @Override
    public void dispose() {
        super.dispose();
        if(upperProgram != null) upperProgram.deleteABoxTurtleFile();
    }
}