|
From: <mrp...@us...> - 2010-08-05 17:57:07
|
Revision: 3415
http://bigdata.svn.sourceforge.net/bigdata/?rev=3415&view=rev
Author: mrpersonick
Date: 2010-08-05 17:57:00 +0000 (Thu, 05 Aug 2010)
Log Message:
-----------
eliminated use of non-final variables and hacked in a late initialization
Modified Paths:
--------------
trunk/bigdata-rdf/src/java/com/bigdata/rdf/internal/DefaultExtensionFactory.java
trunk/bigdata-rdf/src/java/com/bigdata/rdf/internal/IExtension.java
trunk/bigdata-rdf/src/java/com/bigdata/rdf/internal/IExtensionFactory.java
trunk/bigdata-rdf/src/java/com/bigdata/rdf/internal/ILexiconConfiguration.java
trunk/bigdata-rdf/src/java/com/bigdata/rdf/internal/LexiconConfiguration.java
trunk/bigdata-rdf/src/java/com/bigdata/rdf/lexicon/LexiconRelation.java
trunk/bigdata-rdf/src/test/com/bigdata/rdf/internal/ColorsEnumExtension.java
trunk/bigdata-rdf/src/test/com/bigdata/rdf/internal/EpochExtension.java
trunk/bigdata-rdf/src/test/com/bigdata/rdf/internal/SampleExtensionFactory.java
trunk/bigdata-rdf/src/test/com/bigdata/rdf/internal/TestEncodeDecodeKeys.java
Modified: trunk/bigdata-rdf/src/java/com/bigdata/rdf/internal/DefaultExtensionFactory.java
===================================================================
--- trunk/bigdata-rdf/src/java/com/bigdata/rdf/internal/DefaultExtensionFactory.java 2010-08-05 16:29:44 UTC (rev 3414)
+++ trunk/bigdata-rdf/src/java/com/bigdata/rdf/internal/DefaultExtensionFactory.java 2010-08-05 17:57:00 UTC (rev 3415)
@@ -9,17 +9,12 @@
public DefaultExtensionFactory() {
- extensions = new IExtension[] {
- };
+ extensions = new IExtension[0];
}
- public void resolveDatatypes(final IDatatypeURIResolver resolver) {
+ public void init(final IDatatypeURIResolver resolver) {
- for (IExtension extension : extensions) {
- extension.resolveDatatype(resolver);
- }
-
}
public IExtension[] getExtensions() {
Modified: trunk/bigdata-rdf/src/java/com/bigdata/rdf/internal/IExtension.java
===================================================================
--- trunk/bigdata-rdf/src/java/com/bigdata/rdf/internal/IExtension.java 2010-08-05 16:29:44 UTC (rev 3414)
+++ trunk/bigdata-rdf/src/java/com/bigdata/rdf/internal/IExtension.java 2010-08-05 17:57:00 UTC (rev 3415)
@@ -40,14 +40,14 @@
*/
public interface IExtension<V extends BigdataValue> {
- /**
- * This will be called very early in the IExtension lifecycle so that the
- * {@link TermId} for the datatype URI will be on hand when needed.
- *
- * @param resolver
- * the datatype URI resolver
- */
- void resolveDatatype(final IDatatypeURIResolver resolver);
+// /**
+// * This will be called very early in the IExtension lifecycle so that the
+// * {@link TermId} for the datatype URI will be on hand when needed.
+// *
+// * @param resolver
+// * the datatype URI resolver
+// */
+// void resolveDatatype(final IDatatypeURIResolver resolver);
/**
* Return the fully resolved datatype in the form of a {@link BigdataURI}
Modified: trunk/bigdata-rdf/src/java/com/bigdata/rdf/internal/IExtensionFactory.java
===================================================================
--- trunk/bigdata-rdf/src/java/com/bigdata/rdf/internal/IExtensionFactory.java 2010-08-05 16:29:44 UTC (rev 3414)
+++ trunk/bigdata-rdf/src/java/com/bigdata/rdf/internal/IExtensionFactory.java 2010-08-05 17:57:00 UTC (rev 3415)
@@ -42,7 +42,7 @@
* @param resolver
* the datatype URI resolver
*/
- void resolveDatatypes(final IDatatypeURIResolver resolver);
+ void init(final IDatatypeURIResolver resolver);
/**
* Return the supported extensions.
Modified: trunk/bigdata-rdf/src/java/com/bigdata/rdf/internal/ILexiconConfiguration.java
===================================================================
--- trunk/bigdata-rdf/src/java/com/bigdata/rdf/internal/ILexiconConfiguration.java 2010-08-05 16:29:44 UTC (rev 3414)
+++ trunk/bigdata-rdf/src/java/com/bigdata/rdf/internal/ILexiconConfiguration.java 2010-08-05 17:57:00 UTC (rev 3415)
@@ -64,6 +64,15 @@
V asValue(final ExtensionIV iv, final BigdataValueFactory vf);
/**
+ * Initialize the extensions, which need to resolve their datatype URIs
+ * into term ids.
+ *
+ * @param resolver
+ * the datatype URI resolver
+ */
+ void initExtensions(final IDatatypeURIResolver resolver);
+
+ /**
* <code>true</code> iff the <code>vte</code> and <code>dte</code>
* should be inlined.
*
Modified: trunk/bigdata-rdf/src/java/com/bigdata/rdf/internal/LexiconConfiguration.java
===================================================================
--- trunk/bigdata-rdf/src/java/com/bigdata/rdf/internal/LexiconConfiguration.java 2010-08-05 16:29:44 UTC (rev 3414)
+++ trunk/bigdata-rdf/src/java/com/bigdata/rdf/internal/LexiconConfiguration.java 2010-08-05 17:57:00 UTC (rev 3415)
@@ -30,6 +30,7 @@
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
+import org.apache.log4j.Logger;
import org.openrdf.model.BNode;
import org.openrdf.model.Literal;
import org.openrdf.model.URI;
@@ -40,33 +41,58 @@
import com.bigdata.rdf.model.BigdataValueFactory;
/**
- * An object which describes which kinds of RDF Values are inlined into the statement indices and how other RDF Values are coded into the lexicon.
+ * An object which describes which kinds of RDF Values are inlined into the
+ * statement indices and how other RDF Values are coded into the lexicon.
*
* @author <a href="mailto:tho...@us...">Bryan Thompson</a>
* @version $Id$
*/
-public class LexiconConfiguration<V extends BigdataValue> implements ILexiconConfiguration<V> {
+public class LexiconConfiguration<V extends BigdataValue>
+ implements ILexiconConfiguration<V> {
+ protected static final Logger log =
+ Logger.getLogger(LexiconConfiguration.class);
+
private final boolean inlineLiterals, inlineBNodes;
+ private final IExtensionFactory xFactory;
+
private final Map<TermId, IExtension> termIds;
private final Map<String, IExtension> datatypes;
-
- public LexiconConfiguration(final boolean inlineLiterals, final boolean inlineBNodes, final IExtensionFactory xFactory) {
+
+ public LexiconConfiguration(final boolean inlineLiterals,
+ final boolean inlineBNodes, final IExtensionFactory xFactory) {
+
this.inlineLiterals = inlineLiterals;
this.inlineBNodes = inlineBNodes;
-
+ this.xFactory = xFactory;
+
termIds = new HashMap<TermId, IExtension>();
datatypes = new HashMap<String, IExtension>();
- for (IExtension extension : xFactory.getExtensions()) {
- BigdataURI datatype = extension.getDatatype();
- if (datatype == null)
- continue;
- termIds.put((TermId) datatype.getIV(), extension);
- datatypes.put(datatype.stringValue(), extension);
+
+ }
+
+ public void initExtensions(final IDatatypeURIResolver resolver) {
+
+ xFactory.init(resolver);
+
+ /*
+ * Hacky way to know we haven't been initialized yet without using
+ * non-final variables.
+ */
+ if (termIds.size() == 0 && xFactory.getExtensions().length > 0) {
+
+ for (IExtension extension : xFactory.getExtensions()) {
+ BigdataURI datatype = extension.getDatatype();
+ if (datatype == null)
+ continue;
+ termIds.put((TermId) datatype.getIV(), extension);
+ datatypes.put(datatype.stringValue(), extension);
+ }
+
}
-
+
}
public V asValue(final ExtensionIV iv, final BigdataValueFactory vf) {
@@ -92,10 +118,11 @@
if (datatypes.containsKey(datatype.stringValue())) {
+ final IExtension xFactory =
+ datatypes.get(datatype.stringValue());
+
try {
- final IExtension xFactory = datatypes.get(datatype.stringValue());
-
final IV iv = xFactory.createIV(value);
if (iv != null && value instanceof BigdataValue)
@@ -105,6 +132,9 @@
} catch (Exception ex) {
+ log.warn("problem creating inline internal value for " +
+ "extension datatype: " + value.stringValue());
+
/*
* Some sort of parse error in the literal value most
* likely. Resort to term identifiers.
@@ -172,6 +202,8 @@
// some dummy doesn't know how to format a number
// default to term identifier for this term
+ log.warn("number format exception: " + v);
+
}
if (iv != null && value instanceof BigdataValue)
Modified: trunk/bigdata-rdf/src/java/com/bigdata/rdf/lexicon/LexiconRelation.java
===================================================================
--- trunk/bigdata-rdf/src/java/com/bigdata/rdf/lexicon/LexiconRelation.java 2010-08-05 16:29:44 UTC (rev 3414)
+++ trunk/bigdata-rdf/src/java/com/bigdata/rdf/lexicon/LexiconRelation.java 2010-08-05 17:57:00 UTC (rev 3415)
@@ -397,12 +397,6 @@
determineExtensionFactoryClass();
final IExtensionFactory xFactory = xfc.newInstance();
- /*
- * Allow the extensions to resolve their datatype URIs into
- * term identifiers.
- */
- xFactory.resolveDatatypes(this);
-
lexiconConfiguration = new LexiconConfiguration(
inlineLiterals, inlineBNodes, xFactory);
@@ -2679,6 +2673,15 @@
//
// }
+ /*
+ * Allow the extensions to resolve their datatype URIs into
+ * term identifiers. Unfortunately no way to tell whether to call this
+ * or not without using non-final variables. The configuration will
+ * have to be responsible for determining whether they are initialized
+ * or not (again using only final variables). Hacky.
+ */
+ lexiconConfiguration.initExtensions(this);
+
return lexiconConfiguration;
}
Modified: trunk/bigdata-rdf/src/test/com/bigdata/rdf/internal/ColorsEnumExtension.java
===================================================================
--- trunk/bigdata-rdf/src/test/com/bigdata/rdf/internal/ColorsEnumExtension.java 2010-08-05 16:29:44 UTC (rev 3414)
+++ trunk/bigdata-rdf/src/test/com/bigdata/rdf/internal/ColorsEnumExtension.java 2010-08-05 17:57:00 UTC (rev 3415)
@@ -44,18 +44,14 @@
*/
public transient static final URI COLOR = new URIImpl(BD.NAMESPACE + "Color");
- private BigdataURI color;
+ private final BigdataURI color;
- public ColorsEnumExtension() {
+ public ColorsEnumExtension(final IDatatypeURIResolver resolver) {
- }
-
- public void resolveDatatype(final IDatatypeURIResolver resolver) {
-
this.color = resolver.resolve(COLOR);
}
-
+
public BigdataURI getDatatype() {
return color;
Modified: trunk/bigdata-rdf/src/test/com/bigdata/rdf/internal/EpochExtension.java
===================================================================
--- trunk/bigdata-rdf/src/test/com/bigdata/rdf/internal/EpochExtension.java 2010-08-05 16:29:44 UTC (rev 3414)
+++ trunk/bigdata-rdf/src/test/com/bigdata/rdf/internal/EpochExtension.java 2010-08-05 17:57:00 UTC (rev 3415)
@@ -46,17 +46,14 @@
*/
public transient static final URI EPOCH = new URIImpl(BD.NAMESPACE + "Epoch");
- private BigdataURI epoch;
+ private final BigdataURI epoch;
- public EpochExtension() {
- }
-
- public void resolveDatatype(final IDatatypeURIResolver resolver) {
-
+ public EpochExtension(final IDatatypeURIResolver resolver) {
+
this.epoch = resolver.resolve(EPOCH);
}
-
+
public BigdataURI getDatatype() {
return epoch;
Modified: trunk/bigdata-rdf/src/test/com/bigdata/rdf/internal/SampleExtensionFactory.java
===================================================================
--- trunk/bigdata-rdf/src/test/com/bigdata/rdf/internal/SampleExtensionFactory.java 2010-08-05 16:29:44 UTC (rev 3414)
+++ trunk/bigdata-rdf/src/test/com/bigdata/rdf/internal/SampleExtensionFactory.java 2010-08-05 17:57:00 UTC (rev 3415)
@@ -1,5 +1,8 @@
package com.bigdata.rdf.internal;
+import java.util.Collection;
+import java.util.LinkedList;
+
/**
* Simple {@link IExtensionFactory} implementation that creates two
* {@link IExtension}s - the {@link EpochExtension} and the
@@ -7,28 +10,29 @@
*/
public class SampleExtensionFactory implements IExtensionFactory {
- private final IExtension[] extensions;
+ private final Collection<IExtension> extensions;
+ private volatile IExtension[] extensionsArray;
+
public SampleExtensionFactory() {
- extensions = new IExtension[] {
- new EpochExtension(),
- new ColorsEnumExtension()
- };
-
+ extensions = new LinkedList<IExtension>();
+
}
- public void resolveDatatypes(final IDatatypeURIResolver resolver) {
-
- for (IExtension extension : extensions) {
- extension.resolveDatatype(resolver);
+ public void init(final IDatatypeURIResolver resolver) {
+
+ if (extensions.size() == 0) {
+ extensions.add(new EpochExtension(resolver));
+ extensions.add(new ColorsEnumExtension(resolver));
+ extensionsArray = extensions.toArray(new IExtension[2]);
}
}
public IExtension[] getExtensions() {
- return extensions;
+ return extensionsArray;
}
Modified: trunk/bigdata-rdf/src/test/com/bigdata/rdf/internal/TestEncodeDecodeKeys.java
===================================================================
--- trunk/bigdata-rdf/src/test/com/bigdata/rdf/internal/TestEncodeDecodeKeys.java 2010-08-05 16:29:44 UTC (rev 3414)
+++ trunk/bigdata-rdf/src/test/com/bigdata/rdf/internal/TestEncodeDecodeKeys.java 2010-08-05 17:57:00 UTC (rev 3415)
@@ -720,8 +720,8 @@
final BigdataValueFactory vf = BigdataValueFactoryImpl.getInstance("test");
- EpochExtension<BigdataValue> ext = new EpochExtension<BigdataValue>();
- ext.resolveDatatype(new IDatatypeURIResolver() {
+ EpochExtension<BigdataValue> ext =
+ new EpochExtension<BigdataValue>(new IDatatypeURIResolver() {
public BigdataURI resolve(URI uri) {
BigdataURI buri = vf.createURI(uri.stringValue());
buri.setIV(new TermId(VTE.URI, 1024));
@@ -743,8 +743,8 @@
final BigdataValueFactory vf = BigdataValueFactoryImpl.getInstance("test");
- ColorsEnumExtension<BigdataValue> ext = new ColorsEnumExtension<BigdataValue>();
- ext.resolveDatatype(new IDatatypeURIResolver() {
+ ColorsEnumExtension<BigdataValue> ext =
+ new ColorsEnumExtension<BigdataValue>(new IDatatypeURIResolver() {
public BigdataURI resolve(URI uri) {
BigdataURI buri = vf.createURI(uri.stringValue());
buri.setIV(new TermId(VTE.URI, 1024));
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|