[Mulgara-svn] r469 - in branches/mgr-58/src/jar: resolver/java/org/mulgara/resolver resolver-spi/java/org/mulgara/resolver/spi
andrae at mulgara.org
andrae at mulgara.org
Thu Oct 11 06:13:26 UTC 2007
Author: andrae
Date: 2007-10-11 01:13:25 -0500 (Thu, 11 Oct 2007)
New Revision: 469
Modified:
branches/mgr-58/src/jar/resolver-spi/java/org/mulgara/resolver/spi/DatabaseMetadata.java
branches/mgr-58/src/jar/resolver-spi/java/org/mulgara/resolver/spi/SecurityAdapterInitializer.java
branches/mgr-58/src/jar/resolver/java/org/mulgara/resolver/BootstrapOperation.java
branches/mgr-58/src/jar/resolver/java/org/mulgara/resolver/DatabaseMetadataImpl.java
branches/mgr-58/src/jar/resolver/java/org/mulgara/resolver/DatabaseOperationContext.java
branches/mgr-58/src/jar/resolver/java/org/mulgara/resolver/DatabaseSecurityAdapterInitializer.java
branches/mgr-58/src/jar/resolver/java/org/mulgara/resolver/StringPoolSession.java
Log:
Eliminating reliance on introspecting the ServerURI from DatabaseMetadata,
replacing calls to getServerURI with calls to the appropriate comparison/getter
method.
Modified: branches/mgr-58/src/jar/resolver/java/org/mulgara/resolver/BootstrapOperation.java
===================================================================
--- branches/mgr-58/src/jar/resolver/java/org/mulgara/resolver/BootstrapOperation.java 2007-10-10 21:04:14 UTC (rev 468)
+++ branches/mgr-58/src/jar/resolver/java/org/mulgara/resolver/BootstrapOperation.java 2007-10-11 06:13:25 UTC (rev 469)
@@ -100,8 +100,8 @@
long serverURIType = systemResolver.localizePersistent(
new URIReferenceImpl(databaseMetadata.getServerURIType()));
- URI serverURI = retrieveOrCreateServerURI(systemResolver, bootstrapModel, rdfType, serverURIType, metadata);
- databaseMetadata.setServerURI(serverURI); // Also sets the system-model-uri (appends a #)
+// URI serverURI = retrieveOrCreateServerURI(systemResolver, bootstrapModel, rdfType, serverURIType, metadata);
+// databaseMetadata.setServerURI(serverURI); // Also sets the system-model-uri (appends a #)
long systemModel = systemResolver.localizePersistent(
new URIReferenceImpl(databaseMetadata.getSystemModelURI()));
Modified: branches/mgr-58/src/jar/resolver/java/org/mulgara/resolver/DatabaseMetadataImpl.java
===================================================================
--- branches/mgr-58/src/jar/resolver/java/org/mulgara/resolver/DatabaseMetadataImpl.java 2007-10-10 21:04:14 UTC (rev 468)
+++ branches/mgr-58/src/jar/resolver/java/org/mulgara/resolver/DatabaseMetadataImpl.java 2007-10-11 06:13:25 UTC (rev 469)
@@ -94,7 +94,9 @@
private long systemModelNode = -1;
private long systemModelTypeNode = -1;
private long rdfTypeNode = -1;
+
private String serverName;
+ private String orgId;
/**
@@ -119,7 +121,15 @@
this.securityDomainURI = securityDomainURI;
// Set server name from the path part of the server URI.
- serverName = getServerName(uri);
+ String[] names = extractNameAndOrgId(uri);
+ this.serverName = names[0];
+ this.orgId = names[1];
+ try {
+ serverURI = new URI("rdfdb", this.serverName + "~" + this.orgId, null, null, null);
+ } catch (URISyntaxException eu) {
+ throw new IllegalArgumentException("Unable to obtain serverURI from databaseURI: " + uri, eu);
+ }
+ systemModelURI = serverURI.resolve("/");
}
@@ -161,29 +171,79 @@
return hostnameAliases;
}
- private String getServerName(URI serverURI) {
+ /**
+ * @return String[2] := { serverName, orgId }
+ */
+ private String[] extractNameAndOrgId(URI serverURI) {
+ final String DEFAULT_SERVER_NAME = "no_server_name";
+ final String DEFAULT_ORG_ID = "no.organisation.id";
+
if (serverURI.getPath() != null && !serverURI.getPath().equals("")) {
logger.debug("serverURI.path not null/empty: " + serverURI.getPath());
- return serverURI.getPath().replaceAll("/", "");
+ return new String[] {
+ serverURI.getPath().replaceAll("/", ""),
+ invertAuthority(serverURI.getAuthority())
+ };
} else if (serverURI.getScheme().equals("local")) {
logger.debug("serverURI.scheme not null/empty: " + serverURI.getScheme());
if (serverURI.getAuthority() != null && !serverURI.getAuthority().equals("")) {
logger.debug("serverURI.authority not null/empty: " + serverURI.getAuthority());
- return serverURI.getAuthority();
+ return new String[] {
+ serverURI.getAuthority(),
+ DEFAULT_ORG_ID
+ };
}
if (serverURI.getSchemeSpecificPart() != null && !serverURI.getSchemeSpecificPart().equals("")) {
logger.debug("serverURI.ssp not null/empty: " + serverURI.getSchemeSpecificPart());
- return serverURI.getSchemeSpecificPart();
+ return new String[] {
+ serverURI.getSchemeSpecificPart(),
+ DEFAULT_ORG_ID
+ };
}
}
- return "no_server_name_found";
+ return new String[] { DEFAULT_SERVER_NAME, DEFAULT_ORG_ID };
}
+ /**
+ * The join of the reverse of the split. ie.
+ *
+ * invertAuthority = (join ".") . reverse . (split ".")
+ */
+ private String invertAuthority(String auth) {
+ String[] components = auth.split("\\.");
+ StringBuilder result = new StringBuilder(auth.length());
+
+ result.append(components[components.length - 1]);
+ for (int i = components.length - 2; i >= 0; i--) {
+ result.append(".");
+ result.append(components[i]);
+ }
+
+ return result.toString();
+ }
+
public String getServerName() {
return serverName;
}
+ public String getOrganisationId() {
+ return orgId;
+ }
+
+ public String getServerAuthority() {
+ return serverURI.getAuthority();
+ }
+
+ public URI modelNameToModelURI(String modelName, String def) throws URISyntaxException {
+ return new URI(
+ serverURI.getScheme(),
+ serverURI.getAuthority(),
+ "/" + modelName, // JDK barfs if path doesn't have leading '/'
+ def,
+ null).normalize(); // Removes any extra '/' if the path already had a leading '/'
+ }
+
public long getSystemModelNode()
{
if (systemModelNode == -1) {
@@ -322,7 +382,7 @@
this.preallocatedModelNode = preallocatedModelNode;
}
-
+/*
protected void setServerURI(URI serverURI) throws URISyntaxException {
if (serverURI == null) {
throw new IllegalArgumentException("Setting null serverURI in Database Metadata");
@@ -333,8 +393,8 @@
this.serverURI = serverURI;
this.systemModelURI = new URI(serverURI.getScheme(), serverURI.getAuthority(), serverURI.getPath(), "");
}
-
- public URI getServerURI() {
- return serverURI;
- }
+*/
+// public URI getServerURI() {
+// return serverURI;
+// }
}
Modified: branches/mgr-58/src/jar/resolver/java/org/mulgara/resolver/DatabaseOperationContext.java
===================================================================
--- branches/mgr-58/src/jar/resolver/java/org/mulgara/resolver/DatabaseOperationContext.java 2007-10-10 21:04:14 UTC (rev 468)
+++ branches/mgr-58/src/jar/resolver/java/org/mulgara/resolver/DatabaseOperationContext.java 2007-10-11 06:13:25 UTC (rev 469)
@@ -801,24 +801,29 @@
}
return modelURL;
} else {
- URI serverURI = metadata.getServerURI();
try {
- URI modelURI = new URI(serverURI.getScheme(),
- serverURI.getAuthority(),
- serverURI.getPath(),
- modelURL.getQuery(),
- modelURL.getFragment());
+ URI modelURI = metadata.modelNameToModelURI(modelURL.getFragment(), modelURL.getQuery());
if (logger.isDebugEnabled()) {
logger.debug(modelURL + " determined to be Internal: " + modelURI);
}
return modelURI;
} catch (URISyntaxException eu) {
- throw new QueryException("Invalid model URI generated from serverURI: " +
- serverURI + " and modelURL: " + modelURL, eu);
+ throw new QueryException("Invalid model URI generated from modelURL: " + modelURL, eu);
}
}
}
+ /**
+ * FIXME: We need to replace this ad-hoc mess with scheme based acceptance
+ * functions registered by mulgara client-protocol handlers.
+ *
+ * For the moment the following URL's are recognised as local:
+ * local://org-id/serverName#model
+ * local:///org-id/serverName#model
+ * ...://hostname/serverName#model
+ * rdfdb://serverName~org-id/model
+ *
+ */
private boolean isInternalModelURL(URI modelURL) throws QueryException {
if (modelURL == null) {
throw new IllegalArgumentException("Null 'modelURL' passed to isInternalModelURL");
@@ -833,7 +838,7 @@
}
if ("local".equals(modelURL.getScheme())) {
- if ((modelURL.getAuthority() != null && metadata.getServerName().equals(modelURL.getAuthority())) ||
+ if ((modelURL.getAuthority() != null && metadata.getOrganisationId().equals(modelURL.getAuthority())) ||
(modelURL.getPath() != null && ("/" + metadata.getServerName()).equals(modelURL.getPath()))) {
return true;
} else {
@@ -841,15 +846,13 @@
" doesn't match server-name: " + metadata.getServerName());
}
}
- if (modelURL.getPath() == null || !("/" + metadata.getServerName()).equals(modelURL.getPath())) {
- return false;
- }
- if (modelURL.getScheme().equals("rdfdb")) {
- if (modelURL.getAuthority().equals(metadata.getServerURI().getAuthority())) {
+
+ if (modelURL.getScheme() != null && modelURL.getScheme().equals("rdfdb")) {
+ if (modelURL.getAuthority().equals(metadata.getServerAuthority())) {
return true;
} else {
throw new QueryException("rdfdb: scheme URL: " + modelURL +
- " doesn't match server-name: " + metadata.getServerName());
+ " doesn't match server-name: " + metadata.getServerAuthority());
}
}
@@ -857,18 +860,23 @@
if (host == null) {
return false;
}
- if (metadata.getHostnameAliases().contains(host.toLowerCase())) {
- return true;
+
+ if (modelURL.getPath() != null && ("/" + metadata.getServerName()).equals(modelURL.getPath())) {
+ if (metadata.getHostnameAliases().contains(host.toLowerCase())) {
+ return true;
+ } else {
+ // Check with a DNS server to see if this host is recognised
+ try {
+ InetAddress addr = InetAddress.getByName(host);
+ return metadata.getHostnameAliases().contains(addr.getHostName())
+ || metadata.getHostnameAliases().contains(addr.getCanonicalHostName())
+ || metadata.getHostnameAliases().contains(addr.getHostAddress());
+ } catch (UnknownHostException uhe) {
+ return false;
+ }
+ }
}
- // Check with a DNS server to see if this host is recognised
- try {
- InetAddress addr = InetAddress.getByName(host);
- return metadata.getHostnameAliases().contains(addr.getHostName())
- || metadata.getHostnameAliases().contains(addr.getCanonicalHostName())
- || metadata.getHostnameAliases().contains(addr.getHostAddress());
- } catch (UnknownHostException uhe) {
- return false;
- }
+ return false;
}
}
Modified: branches/mgr-58/src/jar/resolver/java/org/mulgara/resolver/DatabaseSecurityAdapterInitializer.java
===================================================================
--- branches/mgr-58/src/jar/resolver/java/org/mulgara/resolver/DatabaseSecurityAdapterInitializer.java 2007-10-10 21:04:14 UTC (rev 468)
+++ branches/mgr-58/src/jar/resolver/java/org/mulgara/resolver/DatabaseSecurityAdapterInitializer.java 2007-10-11 06:13:25 UTC (rev 469)
@@ -86,12 +86,14 @@
// Methods implementing SecurityAdapterInitializer
//
- public URI getServerURI() throws InitializerException
+// public URI getServerURI() throws InitializerException
+/*
{
checkState();
return databaseMetadata.getServerURI();
}
+*/
public SessionFactory getUnsecuredSessionFactory() throws InitializerException
{
Modified: branches/mgr-58/src/jar/resolver/java/org/mulgara/resolver/StringPoolSession.java
===================================================================
--- branches/mgr-58/src/jar/resolver/java/org/mulgara/resolver/StringPoolSession.java 2007-10-10 21:04:14 UTC (rev 468)
+++ branches/mgr-58/src/jar/resolver/java/org/mulgara/resolver/StringPoolSession.java 2007-10-11 06:13:25 UTC (rev 469)
@@ -112,8 +112,8 @@
/** Extracts STORE_FLAG */
static final int STORE_MASK = 2;
- /** The unique {@link URI} naming this database. */
- private final URI databaseURI;
+ /** Database Metadata */
+ private final DatabaseMetadata metadata;
/** The set of alternative hostnames for the current host. */
private final Set hostnameAliases;
@@ -150,7 +150,7 @@
logger.debug("Constructing StringPoolSession " + System.identityHashCode(this), new Throwable());
}
- this.databaseURI = metadata.getServerURI();
+ this.metadata = metadata;
this.hostnameAliases = metadata.getHostnameAliases();
this.persistentStringPool = persistentStringPool;
this.persistentNodePool = persistentNodePool;
@@ -608,34 +608,29 @@
}
+ /**
+ * Map to/from Absolute values.
+ * Note: The encoding of the modelName as a fragment within the store is a
+ * historical artifact kept solely to remain backwards compatible with old
+ * stores - if this becomes a problem: sed -e 's/^#/\//' should migrate backups;
+ * unfortunately migrating stores is naturally harder.
+ */
private SPObject mapAbsolute(SPObject spObject) {
- if (
- spObject != null &&
- spObject.getTypeCategory() == SPObject.TypeCategory.URI
- ) {
+ if (spObject != null && spObject.getTypeCategory() == SPObject.TypeCategory.URI) {
URI uri = ((SPURI)spObject).getURI();
if (!uri.isAbsolute()) {
// Model URIs are stored as a relative URI containing only a fragment.
// Relative URIs with both a query string and a fragment are also used
// for views.
- SPObjectFactory spObjectFactory =
- persistentStringPool.getSPObjectFactory();
+ SPObjectFactory spObjectFactory = persistentStringPool.getSPObjectFactory();
try {
- // Construct an absolute URI based on the database URI.
- String query = uri.getQuery();
- String ssp = databaseURI.getSchemeSpecificPart();
- if (query != null) ssp += '?' + query;
- spObject = spObjectFactory.newSPURI(new URI(
- databaseURI.getScheme(), ssp, uri.getFragment()
- ));
+ spObject = spObjectFactory.newSPURI(
+ metadata.modelNameToModelURI(uri.getFragment(), uri.getQuery()));
} catch (URISyntaxException ex) {
- logger.warn(
- "Cannot create absolute URI with base:\"" + databaseURI +
- "\", query:\"" + uri.getQuery() + "\", fragment:\"" +
- uri.getFragment() + "\"", ex
- );
+ logger.warn("Cannot create absolute URI with query:\"" + uri.getQuery() +
+ "\", fragment:\"" + uri.getFragment() + "\"", ex);
}
}
}
@@ -644,90 +639,22 @@
private SPObject mapRelative(SPObject spObject) {
- if (
- spObject != null &&
- spObject.getTypeCategory() == SPObject.TypeCategory.URI
- ) {
+ if (spObject != null && spObject.getTypeCategory() == SPObject.TypeCategory.URI) {
URI uri = ((SPURI)spObject).getURI();
- // Check if the URI is relative to the database URI.
- // The user info of the uri is ignored and is stripped from the URI if it
- // ends up being relativized.
- String scheme = uri.getScheme();
- String fragment = uri.getFragment();
-
- if (
- scheme != null && scheme.equals(databaseURI.getScheme()) &&
- fragment != null
- ) {
- if (databaseURI.isOpaque()) {
- // databaseURI is opaque.
- if (uri.isOpaque()) {
- // Get the query string.
- // We have to do it this way for opaque URIs.
- String ssp = uri.getSchemeSpecificPart();
- String query;
- int qIndex = ssp.indexOf('?');
- if (qIndex >= 0) {
- query = ssp.substring(qIndex + 1);
- ssp = ssp.substring(0, qIndex);
- } else {
- query = null;
- }
-
- if (ssp.equals(databaseURI.getSchemeSpecificPart())) {
- // Construct a new relative uri with just the fragment and
- // optional query string.
- SPObjectFactory spObjectFactory =
- persistentStringPool.getSPObjectFactory();
- try {
- spObject = spObjectFactory.newSPURI(new URI(
- null, null, null, query, fragment
- ));
- } catch (URISyntaxException ex) {
- logger.warn(
- "Cannot create relative URI with fragment:\"" + fragment +
- "\"", ex
- );
- }
- }
- }
- } else {
- // databaseURI is hierarchial.
- String path;
- String host;
-
- if (
- !uri.isOpaque() && (
- uri.getSchemeSpecificPart().equals(
- databaseURI.getSchemeSpecificPart()
- ) || (
- (host = uri.getHost()) != null &&
- uri.getPort() == databaseURI.getPort() &&
- (path = uri.getPath()) != null &&
- path.equals(databaseURI.getPath()) &&
- hostnameAliases.contains(host.toLowerCase())
- )
- )
- ) {
- // Construct a new relative uri with just the fragment and
- // optional query string.
- SPObjectFactory spObjectFactory =
- persistentStringPool.getSPObjectFactory();
- try {
- spObject = spObjectFactory.newSPURI(new URI(
- null, null, null, uri.getQuery(), fragment
- ));
- } catch (URISyntaxException ex) {
- logger.warn(
- "Cannot create relative URI with fragment:\"" + fragment +
- "\"", ex
- );
- }
- }
+ // Convert rdfdb://serverName~org.id/serverName?def into #serverName?def
+ // Note that the system model is defined to be rdfdb://serverName~org.id/
+ if (uri.toString().startsWith(metadata.getSystemModelURI().toString())) {
+ SPObjectFactory spObjectFactory = persistentStringPool.getSPObjectFactory();
+ try {
+ spObject = spObjectFactory.newSPURI(
+ new URI(null, null, null, uri.getQuery(), uri.getPath().substring(1)));
+ } catch (URISyntaxException ex) {
+ logger.warn("Cannot create relative URI with fragment:\"" + uri.getPath().substring(1) + "\"", ex);
}
}
}
+
return spObject;
}
Modified: branches/mgr-58/src/jar/resolver-spi/java/org/mulgara/resolver/spi/DatabaseMetadata.java
===================================================================
--- branches/mgr-58/src/jar/resolver-spi/java/org/mulgara/resolver/spi/DatabaseMetadata.java 2007-10-10 21:04:14 UTC (rev 468)
+++ branches/mgr-58/src/jar/resolver-spi/java/org/mulgara/resolver/spi/DatabaseMetadata.java 2007-10-11 06:13:25 UTC (rev 469)
@@ -29,6 +29,7 @@
// Java 2 standard packages
import java.net.URI;
+import java.net.URISyntaxException;
import java.util.Set;
// Local packages
@@ -57,8 +58,11 @@
* @return String the server name.
*/
public String getServerName();
+ public String getOrganisationId();
+ public String getServerAuthority();
+ public URI modelNameToModelURI(String modelName, String def) throws URISyntaxException;
- public URI getServerURI();
+// public URI getServerURI();
public URI getSecurityDomainURI();
public URI getSystemModelURI();
Modified: branches/mgr-58/src/jar/resolver-spi/java/org/mulgara/resolver/spi/SecurityAdapterInitializer.java
===================================================================
--- branches/mgr-58/src/jar/resolver-spi/java/org/mulgara/resolver/spi/SecurityAdapterInitializer.java 2007-10-10 21:04:14 UTC (rev 468)
+++ branches/mgr-58/src/jar/resolver-spi/java/org/mulgara/resolver/spi/SecurityAdapterInitializer.java 2007-10-11 06:13:25 UTC (rev 469)
@@ -67,7 +67,7 @@
* @return the URI of the server
* @throws InitializerException if the URI can't be determined
*/
- public URI getServerURI() throws InitializerException;
+// public URI getServerURI() throws InitializerException;
/**
* @return a {@link SessionFactory} that produces {@link Session}s which
More information about the Mulgara-svn
mailing list