Author: vgritsenko
Date: Mon Nov 12 09:47:53 2007
New Revision: 594230
URL: http://svn.apache.org/viewvc?rev=594230&view=rev
Log:
rearrange methods
Modified:
xml/xindice/trunk/java/src/org/apache/xindice/core/Collection.java
Modified: xml/xindice/trunk/java/src/org/apache/xindice/core/Collection.java
URL:
http://svn.apache.org/viewvc/xml/xindice/trunk/java/src/org/apache/xindice/core/Collection.java?rev=594230&r1=594229&r2=594230&view=diff
==============================================================================
--- xml/xindice/trunk/java/src/org/apache/xindice/core/Collection.java
(original)
+++ xml/xindice/trunk/java/src/org/apache/xindice/core/Collection.java Mon Nov
12 09:47:53 2007
@@ -243,6 +243,9 @@
this.parent = parent;
}
+
+ // -- Internal Implementation Methods -----------------------------------
+
private void checkFiler(int faultCode) throws DBException {
if (filer == null) {
throw new DBException(faultCode,
@@ -254,19 +257,90 @@
}
}
+ private Key getIdentityKey(Key key) {
+ synchronized (identityMap) {
+ Key id = null;
+ WeakReference ref = (WeakReference) identityMap.get(key);
+ if (ref != null) {
+ id = (Key) ref.get();
+ }
+ if (id == null) {
+ id = key;
+ identityMap.put(id, new WeakReference(id));
+ }
+
+ return id;
+ }
+ }
+
+ private String debugHeader() {
+ return "["
+ + Thread.currentThread().getName()
+ + "] '"
+ + (parent != null ? parent.getCanonicalName() : "")
+ + "/"
+ + name
+ + "' ";
+ }
+
/**
- * @see org.apache.xindice.core.DBObject#close()
+ * @throws DBException if operation failed
*/
- public boolean close() throws DBException {
- // Close children collections first
- super.close();
+ private void flushSymbolTable() throws DBException {
+ if (symbols.isDirty()) {
+ getSystemCollection().saveSymbols(this, symbols);
+ }
+ }
- // Close its own filer
- if (filer != null) {
- indexManager.close();
- filer.close();
+ /**
+ * @param name collection name
+ */
+ protected void setName(String name) {
+ this.name = name;
+ }
+
+ protected final void setCanonicalName(String canonicalName) {
+ this.canonicalName = canonicalName;
+
+ // Calculate The OID Template
+ StringBuffer sb = new StringBuffer("00000000000000000000000000000000");
+ String host = Integer.toString(host_id, 16);
+ sb.insert(8 - host.length(), host);
+
+ String collection =
Integer.toString(Math.abs(canonicalName.hashCode()), 16);
+ sb.insert(16 - collection.length(), collection);
+
+ sb.setLength(32);
+ oidTemplate = sb.toString();
+ }
+
+ protected final void setCollectionRoot(File collectionRoot) {
+ this.collectionRoot = collectionRoot;
+ if (!collectionRoot.exists()) {
+ if (log.isTraceEnabled()) {
+ log.trace("Creating directories: " + collectionRoot);
+ }
+ collectionRoot.mkdirs();
}
+ }
+
+
+ // -- Database Object Methods -------------------------------------------
+ public boolean isOpened() {
+ // Collection without filer is always open ... for now.
+ //noinspection SimplifiableIfStatement
+ if (filer == null) {
+ return true;
+ }
+
+ return filer.isOpened();
+ }
+
+ /**
+ * @see org.apache.xindice.core.DBObject#exists()
+ */
+ public boolean exists() throws DBException {
return true;
}
@@ -281,6 +355,178 @@
return true;
}
+ public final boolean open() throws DBException {
+ return true;
+ }
+
+ /**
+ * @see org.apache.xindice.core.DBObject#drop()
+ */
+ public boolean drop() throws DBException {
+ DBObserver.getInstance().dropCollection(this);
+
+ // Drop the meta if necessary
+ if (isMetaEnabled()) {
+ getMetaSystemCollection().dropCollectionMeta(this);
+ }
+
+ // Drop Child Collections
+ String[] cols = listCollections();
+ for (int i = 0; i < cols.length; i++) {
+ dropCollection(getCollection(cols[i]));
+ }
+
+ if (filer != null) {
+ // Drop Indexers and Filer
+ indexManager.drop();
+ filer.drop();
+ }
+
+ getCollectionRoot().delete();
+
+ // Drop symbols
+ if (!symbols.isReadOnly()) {
+ getSystemCollection().dropSymbols(this);
+ }
+
+ getDatabase().flushConfig();
+ return true;
+ }
+
+ /**
+ * @see org.apache.xindice.core.DBObject#close()
+ */
+ public boolean close() throws DBException {
+ // Close children collections first
+ super.close();
+
+ // Close its own filer
+ if (filer != null) {
+ indexManager.close();
+ filer.close();
+ }
+
+ return true;
+ }
+
+
+ // -- CollectionManager methods -----------------------------------------
+
+ public void setConfig(Configuration config) throws XindiceException {
+ name = config.getAttribute(NAME);
+ compressed = config.getBooleanAttribute(COMPRESSED, true);
+
+ /*
+ * If inline metadata is desired, get an InlineMetaService object.
+ */
+ if (config.getBooleanAttribute(INLINE_METADATA, false)) {
+ inlineMetaService = new InlineMetaService();
+ }
+
+ /*
+ * Wait to set up the local debug header until everything needed
+ * by debugHeader() is complete!
+ */
+ final String localDebugHeader = debugHeader() + "setConfig: ";
+
+ // Set parent
+ if (parent != null) {
+ setCanonicalName(parent.getCanonicalName() + '/' + name);
+ setCollectionRoot(new File(parent.getCollectionRoot(), name));
+ if (log.isDebugEnabled()) {
+ log.debug(localDebugHeader + "Root=<" + getCollectionRoot() +
">");
+ }
+ }
+
+ if (log.isDebugEnabled()) {
+ log.debug(localDebugHeader
+ + (compressed ? "Compressed" : "NOT Compressed")
+ + ", "
+ + (inlineMetaService == null ? "Inline metadata
DISABLED" : "Inline metadata ENABLED")
+ );
+ }
+
+ if (config.getBooleanAttribute(CACHE, true)) {
+ documentCache = getDatabase().getDocumentCache();
+ }
+
+ // If no Filer is defined, skip Symbols and Indexes
+ Configuration filerConfig = config.getChild(FILER);
+ if (filerConfig != null) {
+ if (log.isTraceEnabled()) {
+ log.trace(localDebugHeader + "Have filer config...");
+ }
+
+ // Symbol Table Setup
+ Configuration symConfig = config.getChild(SYMBOLS);
+ if (symConfig != null) {
+ if (log.isTraceEnabled()) {
+ log.trace(localDebugHeader +
+ "Internal symbols=<" +
TextWriter.toString(symConfig.getElement()) + ">");
+ }
+
+ try {
+ symbols = new SymbolTable(symConfig.getElement(), true);
+ } catch (Exception e) {
+ if (log.isWarnEnabled()) {
+ log.warn(localDebugHeader + "Error building symbol
table from internal symbols", e);
+ }
+ }
+ } else {
+ if (log.isTraceEnabled()) {
+ log.trace(localDebugHeader + "No internal symbols...");
+ }
+
+ try {
+ symbols = getSystemCollection().loadSymbols(this);
+ if (log.isDebugEnabled()) {
+ log.debug(localDebugHeader + "Loaded symbols=<" +
+ TextWriter.toString(symbols.streamToXML(new
DocumentImpl())) + ">");
+ }
+ } catch (Exception e) {
+ if (log.isWarnEnabled()) {
+ log.warn(localDebugHeader + "Error loading symbol
table from system collection", e);
+ }
+ }
+ }
+
+ String className = filerConfig.getAttribute(CLASS);
+ if (log.isDebugEnabled()) {
+ log.debug(localDebugHeader + "Filer class=<" + className +
">");
+ }
+ try {
+ filer = (Filer) Class.forName(className).newInstance();
+ filer.setLocation(getCollectionRoot(), getName());
+ filer.setConfig(filerConfig);
+ if (!filer.exists()) {
+ filer.create();
+ }
+ filer.open();
+ } catch (Exception e) {
+ if (log.isWarnEnabled()) {
+ log.warn("Filer '" + className + "' is not available", e);
+ }
+ }
+
+ // Index Manager
+ try {
+ indexManager = new IndexManager(this,
getDatabase().getTimer());
+ Configuration idxConfig = config.getChild(INDEXES, true);
+ indexManager.setConfig(idxConfig);
+ } catch (Exception e) {
+ if (log.isWarnEnabled()) {
+ log.warn("Failed to initialize indexer", e);
+ }
+ }
+ }
+
+ // Last thing to do is to init child collections
+ super.setConfig(config);
+
+ // observer
+ DBObserver.getInstance().setCollectionConfig(this, config);
+ }
+
/**
* @see CollectionManager#createCollection(String, Configuration)
*/
@@ -291,6 +537,136 @@
}
/**
+ * @see CollectionManager#dropCollection(Collection)
+ */
+ public final boolean dropCollection(Collection collection) throws
DBException {
+ boolean success = super.dropCollection(collection);
+ getDatabase().flushConfig();
+ return success;
+ }
+
+ // -- Core Collection API Public Methods --------------------------------
+
+ /**
+ * getDatabase returns the Database owner for this Collection.
+ *
+ * @return The Database
+ */
+ public Database getDatabase() {
+ return parent.getDatabase();
+ }
+
+ /**
+ * getParentCollection returns the parent Collection of this
+ * Collection.
+ *
+ * @return The parent Collection (or null)
+ * @throws DBException if operation failed
+ */
+ public final Collection getParentCollection() throws DBException {
+ return parent;
+ }
+
+
+ /**
+ * getSystemCollection returns the System Collection.
+ *
+ * @return The System Collection
+ */
+ public SystemCollection getSystemCollection() {
+ return getDatabase().getSystemCollection();
+ }
+
+ /**
+ * Return the MetaSystemCollection for the database containing this
+ * collection.
+ *
+ * @return MetaSystemCollection
+ */
+ private MetaSystemCollection getMetaSystemCollection() {
+ return getDatabase().getMetaSystemCollection();
+ }
+
+ public final String getName() {
+ return name;
+ }
+
+ /**
+ * getCanonicalName returns the canonical name of this Collection.
+ * <br>
+ * ex: /local/test/ocs
+ *
+ * @return The canonical name of the Collection
+ */
+ public final String getCanonicalName() {
+ return canonicalName;
+ }
+
+ /**
+ * getCanonicalDocumentName returns the canonical name for the specified
+ * Key in relation to this Collection.
+ * <br>
+ * ex: /local/test/ocs/ytd
+ *
+ * @param key The Key
+ * @return The canonical name
+ */
+ public final String getCanonicalDocumentName(Key key) {
+ return getCanonicalDocumentName(key.toString());
+ }
+
+ /**
+ * From the document key and this collection canonical name,
+ * composes canonical document name.
+ *
+ * @param key document key
+ * @return The canonical document name
+ */
+ public final String getCanonicalDocumentName(String key) {
+ return canonicalName + '/' + key;
+ }
+
+ /**
+ * @return The collection root
+ */
+ public final File getCollectionRoot() {
+ return collectionRoot;
+ }
+
+ /**
+ * getSymbols returns the SymbolTable in use by this
+ * Collection.
+ *
+ * @return The Symbol Table
+ */
+ public final SymbolTable getSymbols() {
+ return symbols;
+ }
+
+ /**
+ * getFiler returns the low-level Filer instance underlying the
+ * Collection instance.
+ *
+ * @return The requested Filer
+ */
+ public final Filer getFiler() {
+ return filer;
+ }
+
+ /**
+ * getQueryEngine returns the Database's Query Engine
+ *
+ * @return The Query Engine
+ * @throws DBException if operation failed
+ */
+ public QueryEngine getQueryEngine() throws DBException {
+ return getDatabase().getQueryEngine();
+ }
+
+
+ // ----------------------------------------------------------------------
+
+ /**
* createIndexer creates a new Indexer object and any associated
* system resources that the Indexer will need.
*
@@ -345,59 +721,6 @@
return new Key(sb.toString());
}
- private String debugHeader() {
- return "["
- + Thread.currentThread().getName()
- + "] '"
- + (parent != null ? parent.getCanonicalName() : "")
- + "/"
- + name
- + "' ";
- }
-
- /**
- * @see org.apache.xindice.core.DBObject#drop()
- */
- public boolean drop() throws DBException {
- DBObserver.getInstance().dropCollection(this);
-
- // Drop the meta if necessary
- if (isMetaEnabled()) {
- getMetaSystemCollection().dropCollectionMeta(this);
- }
-
- // Drop Child Collections
- String[] cols = listCollections();
- for (int i = 0; i < cols.length; i++) {
- dropCollection(getCollection(cols[i]));
- }
-
- if (filer != null) {
- // Drop Indexers and Filer
- indexManager.drop();
- filer.drop();
- }
-
- getCollectionRoot().delete();
-
- // Drop symbols
- if (!symbols.isReadOnly()) {
- getSystemCollection().dropSymbols(this);
- }
-
- getDatabase().flushConfig();
- return true;
- }
-
- /**
- * @see CollectionManager#dropCollection(Collection)
- */
- public final boolean dropCollection(Collection collection) throws
DBException {
- boolean success = super.dropCollection(collection);
- getDatabase().flushConfig();
- return success;
- }
-
/**
* dropIndexer physically removes the specified Indexer and any
* associated system resources that the Indexer uses.
@@ -420,22 +743,6 @@
}
/**
- * @see org.apache.xindice.core.DBObject#exists()
- */
- public boolean exists() throws DBException {
- return true;
- }
-
- /**
- * @throws DBException if operation failed
- */
- public final void flushSymbolTable() throws DBException {
- if (symbols.isDirty()) {
- getSystemCollection().saveSymbols(this, symbols);
- }
- }
-
- /**
* Retrieve a binary database entry by key.
* This low-level method will not update non-inline metadata.
*
@@ -473,45 +780,6 @@
}
/**
- * getCanonicalDocumentName returns the canonical name for the specified
- * Key in relation to this Collection.
- * <br>
- * ex: /local/test/ocs/ytd
- *
- * @param key The Key
- * @return The canonical name
- */
- public final String getCanonicalDocumentName(Key key) {
- return getCanonicalDocumentName(key.toString());
- }
-
- /**
- * From the document key and this collection canonical name,
- * composes canonical document name.
- *
- * @param key document key
- * @return The canonical document name
- */
- public final String getCanonicalDocumentName(String key) {
- StringBuffer sb = new StringBuffer();
- sb.append(canonicalName);
- sb.append('/');
- sb.append(key);
- return sb.toString();
- }
-
- /**
- * getCanonicalName returns the canonical name for this Object.
- * <br>
- * ex: /local/test/ocs
- *
- * @return The canonical name
- */
- public final String getCanonicalName() {
- return canonicalName;
- }
-
- /**
* Return the MetaData for this collection.
*
* If metadata is not enabled in the configuration, the MetaData object
@@ -536,14 +804,7 @@
metacol.setCollectionMeta(this, meta);
}
- return meta;
- }
-
- /**
- * @return The collection root
- */
- public final File getCollectionRoot() {
- return collectionRoot;
+ return meta;
}
/**
@@ -562,15 +823,6 @@
}
/**
- * getDatabase returns the Database owner for this Collection.
- *
- * @return The Database
- */
- public Database getDatabase() {
- return parent.getDatabase();
- }
-
- /**
* getDocument retrieves a Document by Key.
*
* @param key The Document Key
@@ -628,7 +880,7 @@
Key key = getIdentityKey(createNewKey(id));
synchronized (key) {
- if (null == getEntry(id)) {
+ if (getEntry(id) == null) {
throw new DBException(FaultCodes.COL_DOCUMENT_NOT_FOUND,
"Resource '" + id + "' does not exist in
'" + getCanonicalName() + "'");
}
@@ -653,7 +905,7 @@
// this is wrong.. but it should work for now...
long now = System.currentTimeMillis();
- if (null == meta) {
+ if (meta == null) {
meta = new MetaData(MetaData.DOCUMENT,
getCanonicalDocumentName(id), now, now);
metacol.setDocumentMeta(this, id, meta);
} else if (!meta.hasContext()) {
@@ -836,16 +1088,6 @@
}
/**
- * getFiler returns the low-level Filer instances underlying the
- * Collection instance.
- *
- * @return The requested Filer
- */
- public final Filer getFiler() {
- return filer;
- }
-
- /**
* getIndexer retrieves an Indexer by name.
*
* @param name The Indexer name
@@ -869,20 +1111,6 @@
}
/**
- * Return the MetaSystemCollection for the database containing this
- * collection.
- *
- * @return MetaSystemCollection
- */
- private MetaSystemCollection getMetaSystemCollection() {
- return getDatabase().getMetaSystemCollection();
- }
-
- public final String getName() {
- return name;
- }
-
- /**
* getObject instantiates and returns an XMLSerializable object based on
the
* provided Key. Xindice takes care of instantiating the correct class,
but
* only if a class was registered with the Document in the first place.
@@ -926,46 +1154,6 @@
}
/**
- * getParentCollection returns the parent Collection of this
- * Collection.
- *
- * @return The parent Collection (or null)
- * @throws DBException if operation failed
- */
- public final Collection getParentCollection() throws DBException {
- return parent;
- }
-
- /**
- * getQueryEngine returns the Database's Query Engine
- *
- * @return The Query Engine
- * @throws DBException if operation failed
- */
- public QueryEngine getQueryEngine() throws DBException {
- return getDatabase().getQueryEngine();
- }
-
- /**
- * getSymbols returns the SymbolTable in use by this
- * Collection.
- *
- * @return The Symbol Table
- */
- public final SymbolTable getSymbols() {
- return symbols;
- }
-
- /**
- * getSystemCollection returns the System Collection.
- *
- * @return The System Collection
- */
- public SystemCollection getSystemCollection() {
- return getDatabase().getSystemCollection();
- }
-
- /**
* Insert a binary object into a Xindice Collection. A unique key
* is automatically generated. by which the binary object can be
* retrieved in the future. Note: because the key is automatically
@@ -1083,16 +1271,6 @@
return getDatabase().isMetaEnabled();
}
- public boolean isOpened() {
- // Collection without filer is always open ... for now.
- //noinspection SimplifiableIfStatement
- if (filer == null) {
- return true;
- }
-
- return filer.isOpened();
- }
-
/**
* listDocuments returns a list of all entry keys stored by this
* collection.
@@ -1134,10 +1312,6 @@
return indexManager.list();
}
- public final boolean open() throws DBException {
- return true;
- }
-
/**
* Turns an XML string into a parsed document retrieved
* from the uncompressed collection.
@@ -1455,21 +1629,6 @@
DBObserver.getInstance().dropDocument(this, objKey);
}
- protected final void setCanonicalName(String canonicalName) {
- this.canonicalName = canonicalName;
-
- // Calculate The OID Template
- StringBuffer sb = new StringBuffer("00000000000000000000000000000000");
- String host = Integer.toString(host_id, 16);
- sb.insert(8 - host.length(), host);
-
- String collection =
Integer.toString(Math.abs(canonicalName.hashCode()), 16);
- sb.insert(16 - collection.length(), collection);
-
- sb.setLength(32);
- oidTemplate = sb.toString();
- }
-
/**
* Reset the metadata object for this collection.
*
@@ -1497,131 +1656,6 @@
}
}
- protected final void setCollectionRoot(File collectionRoot) {
- this.collectionRoot = collectionRoot;
- if (!collectionRoot.exists()) {
- if (log.isTraceEnabled()) {
- log.trace("Creating directories: " + collectionRoot);
- }
- collectionRoot.mkdirs();
- }
- }
-
- public void setConfig(Configuration config) throws XindiceException {
- name = config.getAttribute(NAME);
- compressed = config.getBooleanAttribute(COMPRESSED, true);
-
- /*
- * If inline metadata is desired, get an InlineMetaService object.
- */
- if (config.getBooleanAttribute(INLINE_METADATA, false)) {
- inlineMetaService = new InlineMetaService();
- }
-
- /*
- * Wait to set up the local debug header until everything needed
- * by debugHeader() is complete!
- */
- final String localDebugHeader = debugHeader() + "setConfig: ";
-
- // Set parent
- if (parent != null) {
- setCanonicalName(parent.getCanonicalName() + '/' + name);
- setCollectionRoot(new File(parent.getCollectionRoot(), name));
- if (log.isDebugEnabled()) {
- log.debug(localDebugHeader + "Root=<" + getCollectionRoot() +
">");
- }
- }
-
- if (log.isDebugEnabled()) {
- log.debug(localDebugHeader
- + (compressed ? "Compressed" : "NOT Compressed")
- + ", "
- + (inlineMetaService == null ? "Inline metadata
DISABLED" : "Inline metadata ENABLED")
- );
- }
-
- if (config.getBooleanAttribute(CACHE, true)) {
- documentCache = getDatabase().getDocumentCache();
- }
-
- // If no Filer is defined, skip Symbols and Indexes
- Configuration filerConfig = config.getChild(FILER);
- if (filerConfig != null) {
- if (log.isTraceEnabled()) {
- log.trace(localDebugHeader + "Have filer config...");
- }
-
- // Symbol Table Setup
- Configuration symConfig = config.getChild(SYMBOLS);
- if (symConfig != null) {
- if (log.isTraceEnabled()) {
- log.trace(localDebugHeader +
- "Internal symbols=<" +
TextWriter.toString(symConfig.getElement()) + ">");
- }
-
- try {
- symbols = new SymbolTable(symConfig.getElement(), true);
- } catch (Exception e) {
- if (log.isWarnEnabled()) {
- log.warn(localDebugHeader + "Error building symbol
table from internal symbols", e);
- }
- }
- } else {
- if (log.isTraceEnabled()) {
- log.trace(localDebugHeader + "No internal symbols...");
- }
-
- try {
- symbols = getSystemCollection().loadSymbols(this);
- if (log.isDebugEnabled()) {
- log.debug(localDebugHeader + "Loaded symbols=<" +
- TextWriter.toString(symbols.streamToXML(new
DocumentImpl())) + ">");
- }
- } catch (Exception e) {
- if (log.isWarnEnabled()) {
- log.warn(localDebugHeader + "Error loading symbol
table from system collection", e);
- }
- }
- }
-
- String className = filerConfig.getAttribute(CLASS);
- if (log.isDebugEnabled()) {
- log.debug(localDebugHeader + "Filer class=<" + className +
">");
- }
- try {
- filer = (Filer) Class.forName(className).newInstance();
- filer.setLocation(getCollectionRoot(), getName());
- filer.setConfig(filerConfig);
- if (!filer.exists()) {
- filer.create();
- }
- filer.open();
- } catch (Exception e) {
- if (log.isWarnEnabled()) {
- log.warn("Filer '" + className + "' is not available", e);
- }
- }
-
- // Index Manager
- try {
- indexManager = new IndexManager(this,
getDatabase().getTimer());
- Configuration idxConfig = config.getChild(INDEXES, true);
- indexManager.setConfig(idxConfig);
- } catch (Exception e) {
- if (log.isWarnEnabled()) {
- log.warn("Failed to initialize indexer", e);
- }
- }
- }
-
- // Last thing to do is to init child collections
- super.setConfig(config);
-
- // observer
- DBObserver.getInstance().setCollectionConfig(this, config);
- }
-
/**
* setDocument inserts or updates an existing Document in a
* Xindice Collection.
@@ -1712,13 +1746,6 @@
}
/**
- * @param name collection name
- */
- protected void setName(String name) {
- this.name = name;
- }
-
- /**
* setObject sets an XMLSerializable object in the Collection based on the
* provided Key. Xindice takes care of associating the implementation
class
* with the XMLSerializable object.
@@ -1816,21 +1843,5 @@
}
metacol.setDocumentMeta(this, id, meta);
- }
-
- private Key getIdentityKey(Key key) {
- synchronized (identityMap) {
- Key id = null;
- WeakReference ref = (WeakReference) identityMap.get(key);
- if (ref != null) {
- id = (Key) ref.get();
- }
- if (id == null) {
- id = key;
- identityMap.put(id, new WeakReference(id));
- }
-
- return id;
- }
}
}