001: /*
002: (c) Copyright 2002, 2003, 2004, 2005, 2006, 2007, 2008 Hewlett-Packard Development Company, LP
003: [See end of file]
004: $Id: ModelMaker.java,v 1.18 2008/01/15 08:19:22 chris-dollin Exp $
005: */
006:
007: package com.hp.hpl.jena.rdf.model;
008:
009: import com.hp.hpl.jena.graph.*;
010: import com.hp.hpl.jena.util.iterator.*;
011:
012: /**
013: A ModelMaker contains a collection of named models, methods for creating
014: new models [both named and anonymous] and opening previously-named
015: models, removing models, and accessing a single "default" Model for this
016: Maker.
017:
018: <p>Additional constraints are placed on a ModelMaker as compared to its
019: ancestor <code>ModelSource</code>. ModelMakers do not arbitrarily forget
020: their contents - once they contain a named model, that model stays inside
021: the ModelMaker until that ModelMaker goes away, and maybe for longer
022: (eg if the ModelMaker fronted a database or directory). And new models
023: can be added to a ModelMaker.
024:
025: @author kers
026: */
027:
028: public interface ModelMaker extends ModelSource {
029: /**
030: Create a new Model associated with the given name. If there is no such
031: association, create one and return it. If one exists but <code>strict</code>
032: is false, return the associated Model. Otherwise throw an AlreadyExistsException.
033:
034: @param name the name to give to the new Model
035: @param strict true to cause existing bindings to throw an exception
036: @exception AlreadyExistsException if that name is already bound.
037: */
038: public Model createModel(String name, boolean strict);
039:
040: /**
041: Create a Model that does not already exist - equivalent to
042: <br><code>createModel( name, false )</code>.
043: */
044: public Model createModel(String name);
045:
046: /**
047: Find an existing Model that this factory knows about under the given
048: name. If such a Model exists, return it. Otherwise, if <code>strict</code>
049: is false, create a new Model, associate it with the name, and return it.
050: Otherwise throw a DoesNotExistException.
051:
052: <p>When called with <code>strict=false</code>, is equivalent to the
053: ancestor <code>openModel(String)</code> method.
054:
055: @param name the name of the Model to find and return
056: @param strict false to create a new one if one doesn't already exist
057: @exception DoesNotExistException if there's no such named Model
058: */
059: public Model openModel(String name, boolean strict);
060:
061: /**
062: Remove the association between the name and the Model. create
063: will now be able to create a Model with that name, and open will no
064: longer be able to find it. Throws an exception if there's no such Model.
065: The Model itself is not touched.
066:
067: @param name the name to disassociate
068: @exception DoesNotExistException if the name is unbound
069: */
070: public void removeModel(String name);
071:
072: /**
073: return true iff the factory has a Model with the given name
074:
075: @param name the name of the Model to look for
076: @return true iff there's a Model with that name
077: */
078: public boolean hasModel(String name);
079:
080: /**
081: Close the factory - no more requests need be honoured, and any clean-up
082: can be done.
083: */
084: public void close();
085:
086: /**
087: Answer a GraphMaker that makes graphs the same way this ModelMaker
088: makes models. In general this will be an underlying GraphMaker.
089: */
090: public GraphMaker getGraphMaker();
091:
092: /**
093: Answer an [extended] iterator where each element is the name of a model in
094: the maker, and the complete sequence exhausts the set of names. No particular
095: order is expected from the list.
096: @return an extended iterator over the names of models known to this Maker.
097: */
098: public ExtendedIterator listModels();
099: }
100:
101: /*
102: (c) Copyright 2003, 2004, 2005, 2006, 2007, 2008 Hewlett-Packard Development Company, LP
103: All rights reserved.
104:
105: Redistribution and use in source and binary forms, with or without
106: modification, are permitted provided that the following conditions
107: are met:
108:
109: 1. Redistributions of source code must retain the above copyright
110: notice, this list of conditions and the following disclaimer.
111:
112: 2. Redistributions in binary form must reproduce the above copyright
113: notice, this list of conditions and the following disclaimer in the
114: documentation and/or other materials provided with the distribution.
115:
116: 3. The name of the author may not be used to endorse or promote products
117: derived from this software without specific prior written permission.
118:
119: THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
120: IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
121: OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
122: IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
123: INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
124: NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
125: DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
126: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
127: (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
128: THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
129: */
|