@@ -201,7 +201,7 @@ impl OntoEnv {
201201 how_created,
202202 inner_store : None ,
203203 } ;
204- env. inner_store = Some ( env. get_store ( ) ?) ;
204+ env. inner_store = Some ( env. get_store ( env . read_only ) ?) ;
205205 Ok ( env)
206206 }
207207
@@ -215,10 +215,10 @@ impl OntoEnv {
215215 }
216216
217217 // TODO: add a read-only version? make this thread-safe?
218- fn get_store ( & self ) -> Result < Store > {
218+ fn get_store ( & self , read_only : bool ) -> Result < Store > {
219219 let ontoenv_dir = self . config . root . join ( ".ontoenv" ) ;
220220 std:: fs:: create_dir_all ( & ontoenv_dir) ?;
221- if self . read_only {
221+ if read_only {
222222 return Store :: open_read_only ( ontoenv_dir. join ( "store.db" ) )
223223 . map_err ( |e| anyhow:: anyhow!( "Could not open store: {}" , e) ) ;
224224 }
@@ -330,7 +330,8 @@ impl OntoEnv {
330330
331331 let file = std:: fs:: File :: open ( path) ?;
332332 let reader = BufReader :: new ( file) ;
333- let env: OntoEnv = serde_json:: from_reader ( reader) ?;
333+ let mut env: OntoEnv = serde_json:: from_reader ( reader) ?;
334+ env. inner_store = Some ( env. get_store ( read_only) ?) ;
334335 Ok ( Self { read_only, ..env } )
335336 }
336337
@@ -961,6 +962,17 @@ impl OntoEnv {
961962 }
962963 }
963964
965+ /// Returns a list of all ontologies that depend on the given ontology
966+ pub fn get_dependents ( & self , id : & NamedNode ) -> Result < Vec < GraphIdentifier > > {
967+ let mut dependents = vec ! [ ] ;
968+ for ontology in self . ontologies . values ( ) {
969+ if ontology. imports . contains ( & id) {
970+ dependents. push ( ontology. id ( ) . clone ( ) ) ;
971+ }
972+ }
973+ Ok ( dependents)
974+ }
975+
964976 /// Outputs a human-readable dump of the environment, including all ontologies
965977 /// and their metadata and imports
966978 pub fn dump ( & self , contains : Option < & str > ) {
0 commit comments