/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.jena.rdf.model; import org.apache.jena.graph.* ; import org.apache.jena.shared.AlreadyExistsException ; import org.apache.jena.shared.DoesNotExistException ; import org.apache.jena.util.iterator.* ; /** A ModelMaker contains a collection of named models, methods for creating new models [both named and anonymous] and opening previously-named models, removing models, and accessing a single "default" Model for this Maker. <p>Additional constraints are placed on a ModelMaker as compared to its ancestor <code>ModelSource</code>. ModelMakers do not arbitrarily forget their contents - once they contain a named model, that model stays inside the ModelMaker until that ModelMaker goes away, and maybe for longer (eg if the ModelMaker fronted a database or directory). And new models can be added to a ModelMaker. */ public interface ModelMaker extends ModelSource { /** Create a new Model associated with the given name. If there is no such association, create one and return it. If one exists but <code>strict</code> is false, return the associated Model. Otherwise throw an AlreadyExistsException. @param name the name to give to the new Model @param strict true to cause existing bindings to throw an exception @exception AlreadyExistsException if that name is already bound. */ public Model createModel( String name, boolean strict ); /** Create a Model with the given name if no such model exists. Otherwise, answer the existing model. Equivalent to <br><code>createModel( name, false )</code>. */ public Model createModel( String name ); /** Find an existing Model that this factory knows about under the given name. If such a Model exists, return it. Otherwise, if <code>strict</code> is false, create a new Model, associate it with the name, and return it. Otherwise throw a DoesNotExistException. <p>When called with <code>strict=false</code>, is equivalent to the ancestor <code>openModel(String)</code> method. @param name the name of the Model to find and return @param strict false to create a new one if one doesn't already exist @exception DoesNotExistException if there's no such named Model */ public Model openModel( String name, boolean strict ); /** Remove the association between the name and the Model. create will now be able to create a Model with that name, and open will no longer be able to find it. Throws an exception if there's no such Model. The Model itself is not touched. @param name the name to disassociate @exception DoesNotExistException if the name is unbound */ public void removeModel( String name ); /** return true iff the factory has a Model with the given name @param name the name of the Model to look for @return true iff there's a Model with that name */ public boolean hasModel( String name ); /** Close the factory - no more requests need be honoured, and any clean-up can be done. */ public void close(); /** Answer a GraphMaker that makes graphs the same way this ModelMaker makes models. In general this will be an underlying GraphMaker. */ public GraphMaker getGraphMaker(); /** Answer an [extended] iterator where each element is the name of a model in the maker, and the complete sequence exhausts the set of names. No particular order is expected from the list. @return an extended iterator over the names of models known to this Maker. */ public ExtendedIterator<String> listModels(); }