c72e72b75933b58d5c59f3a21ee72c5f950df7d2
[simantics/platform.git] / bundles / org.simantics.db / src / org / simantics / db / Database.java
1 package org.simantics.db;\r
2 \r
3 import java.io.File;\r
4 import java.nio.ByteBuffer;\r
5 import java.nio.file.Path;\r
6 import java.util.Properties;\r
7 \r
8 import org.simantics.db.exception.DatabaseException;\r
9 import org.simantics.db.exception.SDBException;\r
10 import org.simantics.db.service.ClusterUID;\r
11 \r
12 public interface Database {\r
13     static public enum Status {\r
14         NoDatabase { @Override public String getString() { return "NoDatabase"; }},\r
15         NotRunning { @Override public String getString() { return "NotRunning"; }},\r
16         Standalone { @Override public String getString() { return "Standalone"; }},\r
17         Local { @Override public String getString() { return "Local"; }},\r
18         Remote { @Override public String getString() { return "Remote";}};\r
19         public abstract String getString();\r
20         @Override\r
21         public String toString() {\r
22             return message;\r
23         }\r
24         public String message = "";\r
25     }\r
26     public DatabaseUserAgent getUserAgent();\r
27     public void setUserAgent(DatabaseUserAgent dbUserAgent);\r
28     public Status getStatus();\r
29 \r
30     public File getFolder();\r
31     public boolean isFolderOk();\r
32     public boolean isFolderOk(File aFolder);\r
33     public boolean isFolderEmpty();\r
34     public boolean isFolderEmpty(File aFolder);\r
35     public void initFolder(Properties properties) throws SDBException;\r
36     public void deleteFiles() throws SDBException;\r
37 \r
38     public void start() throws SDBException;\r
39     public boolean isRunning() throws SDBException;\r
40     public boolean tryToStop() throws SDBException;\r
41 \r
42     public void connect() throws SDBException;\r
43     public boolean isConnected() throws SDBException;\r
44     public String execute(String command) throws SDBException;\r
45     public void disconnect() throws SDBException;\r
46 \r
47     public void clone(File to, int revision, boolean saveHistory) throws SDBException;\r
48     public Path createFromChangeSets(int revision) throws SDBException;\r
49     public void deleteGuard() throws SDBException;\r
50     public Path dumpChangeSets() throws SDBException;\r
51     public void purgeDatabase() throws SDBException;\r
52     public long serverGetTailChangeSetId() throws SDBException;\r
53 \r
54     public interface Session {\r
55         public Database getDatabase(); // Convenience method.\r
56         public void close() throws SDBException;\r
57         public void open() throws SDBException;\r
58         public boolean isClosed() throws SDBException;\r
59         public interface ChangeSetData {\r
60             public boolean isOk();\r
61         }\r
62         public interface ChangeSetIds {\r
63             public long getFirstChangeSetId();\r
64             public int getCount();\r
65         }\r
66         public interface Cluster {\r
67             public int getInflateSize();\r
68             public ByteBuffer getDeflated();\r
69         }\r
70         public interface ClusterChanges {\r
71             public long getHeadChangeSetId();\r
72             public int[] getResourceIndex();\r
73             public int[] getPredicateIndex();\r
74             public long[] getPredicateFirst();\r
75             public long[] getPredicateSecond();\r
76             public int[] getValueIndex();\r
77         }\r
78         public interface ClusterIds {\r
79             public int getStatus();\r
80             public long[] getFirst();\r
81             public long[] getSecond();\r
82         }\r
83         public interface Information {\r
84             public String getServerId();\r
85             public String getProtocolId();\r
86             public String getDatabaseId();\r
87             public long getFirstChangeSetId();\r
88         }\r
89         public interface Refresh {\r
90             public long getHeadChangeSetId();\r
91             public long[] getFirst();\r
92             public long[] getSecond();\r
93         }\r
94         public interface ResourceSegment {\r
95             public byte[] getClusterId();\r
96             public int getResourceIndex();\r
97             public long getValueSize(); // Size of whole value.\r
98             public byte[] getSegment(); // Bytes of asked segment.\r
99             public long getOffset(); // Segment offset.\r
100         }\r
101         public interface Transaction {\r
102             public long getHeadChangeSetId();\r
103             public long getTransactionId();\r
104         }\r
105         interface OnChangeSetUpdate {\r
106             public void onChangeSetUpdate(ChangeSetUpdate changeSetUpdate) throws SDBException;\r
107         }\r
108         public void acceptCommit(long transactionId, long changeSetId, byte[] metadata) throws SDBException;\r
109         public long cancelCommit(long transactionId, long changeSetId, byte[] metadata, OnChangeSetUpdate onChangeSetUpdate) throws SDBException;\r
110         public Transaction askReadTransaction() throws SDBException;\r
111         public Transaction askWriteTransaction(long transactionId) throws SDBException;\r
112         public long endTransaction(long transactionId) throws SDBException; // Return head change set id.\r
113         public String execute(String command) throws SDBException;\r
114         public byte[] getChangeSetMetadata(long changeSetId) throws SDBException;\r
115         public ChangeSetData getChangeSetData(long minChangeSetId, long  maxChangeSetId, OnChangeSetUpdate onChangeSetupate) throws SDBException;\r
116         public ChangeSetIds getChangeSetIds() throws SDBException;\r
117         public Cluster getCluster(byte[] clusterId) throws SDBException;\r
118         public ClusterChanges getClusterChanges(long changeSetId, byte[] clusterId) throws SDBException;\r
119         public ClusterIds getClusterIds() throws SDBException;\r
120         public Information getInformation() throws SDBException;\r
121         public Refresh getRefresh(long changeSetId) throws SDBException;\r
122         public ResourceSegment getResourceSegment(byte[] clusterUID, int resourceIndex, long offset, short size) throws SDBException;\r
123         public long reserveIds(int count) throws SDBException;\r
124         public void updateCluster(byte[] operations) throws SDBException;\r
125         public interface ChangeSetUpdate {\r
126             public long getChangeSetId();\r
127             public int getChangeSetIndex();\r
128             public int getNumberOfClusterChangeSets();\r
129             public int getIndexOfClusterChangeSet();\r
130             public byte[] getClusterId();\r
131             public boolean getNewCluster();\r
132             public byte[] getData();\r
133         }\r
134         public boolean undo(long[] changeSetIds, OnChangeSetUpdate onChangeSetUpdate) throws SDBException;\r
135         \r
136         public <T> T clone(ClusterUID clusterUID, ClusterCreator clusterCreator) throws DatabaseException;\r
137         public boolean refreshEnabled();\r
138     }\r
139     public Session newSession(ServiceLocator locator) throws SDBException;\r
140     interface Journal {\r
141         public class Line {\r
142             public boolean status;\r
143             public String request;\r
144             public String comment;\r
145         }\r
146         public boolean canRead();\r
147         public int count();\r
148         public int read(int index, Line line) throws SDBException;\r
149     }\r
150     public Journal getJournal() throws SDBException;\r
151     public String getCompression();\r
152 }\r