--- //depot/modules/cordoba/storage/modelstore/src/main/java/com/webify/framework/model/IThing.java 2005/11/14 14:35:48 +++ //depot/modules/cordoba/storage/modelstore/src/main/java/com/webify/framework/model/IThing.java 2005/11/22 07:28:55 @@ -1,10 +1,7 @@ package com.webify.framework.model; -import com.webify.framework.model.metadata.ClassInfo; import com.webify.framework.model.metadata.InterfaceInfo; - -import java.net.URI; -import java.util.Set; +import com.webify.wsf.modelstore.IPersisted; /** * Base interface for all model types in WSF. Corresponds to owl:Thing. @@ -15,52 +12,14 @@ * @version $Id$ * @since 2.0.0 */ -public interface IThing { +public interface IThing extends IPersisted { /** * @deprecated Should not rely on, or hardcode 3.4 base namespace in code. */ String NS_BASE_CATALOG = "http://www.webifysolutions.com/2005/06/base-catalog#"; - - /** - * @param name the property URI in string form. - * @deprecated use {@link #getProperty(URI)} instead. - */ - Object getProperty(String name); - - Object getProperty(URI name); - - /** - * @param name the property URI in string form. - * @deprecated use {@link #setProperty(URI, Object)} instead. - */ - void setProperty(String name, Object value); - - void setProperty(URI name, Object value); - - /** - * @param name the property URI in string form. - * @deprecated use {@link #removeProperty(URI, Object)} instead. - */ - void removeProperty(String name, Object value); - - void removeProperty(URI name, Object value); - - /** - * @param name the property URI in string form. - * @return true if value is associated with the specified property - * @deprecated use {@link #hasProperty(URI, Object)} instead. - */ - boolean hasProperty(String name, Object value); - boolean hasProperty(URI name, Object value); - /** - * @return a (non-null, possibly empty) set of URIs corresponding to property names. - */ - Set propertyNameSet(); - - /** * @OntProperty (uri="http://www.w3.org/2000/01/rdf-schema#comment") */ String getComment(); @@ -91,27 +50,6 @@ void setVersionInfo(String versionInfo); /** - * @return the local name within {@link #getURI()}'s namespace. - */ - String getId(); - - /** - * @return the full URI for this thing, which is unique within a model. - */ - URI getURI(); - - /** - * @return the declared type of the instance - */ - URI getDeclaredType(); - - /** - * @return a locked {@link ClassInfo} instance - * representing this thing's interface/declared type. - */ - ClassInfo getClassInfo(); - - /** * @return a locked {@link InterfaceInfo} instance * representing this thing's interface/declared type. */ --- //depot/modules/cordoba/storage/modelstore/src/main/java/com/webify/framework/model/ModelFactory.java 2005/11/21 08:58:32 +++ //depot/modules/cordoba/storage/modelstore/src/main/java/com/webify/framework/model/ModelFactory.java 2005/11/21 10:29:33 @@ -3,8 +3,8 @@ import com.webify.framework.model.changes.ModelChanges; import com.webify.framework.model.metadata.MetadataRegistry; import com.webify.framework.support.trackingmap.MultiValueMap; +import com.webify.framework.triples.TripleStore; import com.webify.framework.triples.VersionInfo; -import com.webify.framework.triples.TripleStore; import java.net.URI; import java.util.List; @@ -114,12 +114,6 @@ MultiValueMap getAllProperties(final long version, final URI subject); - /** - * Attaches disconnected instances and {@link java.util.Collection}s - * of {@link IThing}s. Other types of objects are ignored. - */ - void attachDisconnected(Object disconnected); - long getCurrentVersion(); VersionInfo getCurrentVersionInfo(); --- //depot/modules/cordoba/storage/modelstore/src/main/java/com/webify/framework/model/dbstore/HibernateModelFactory.java 2005/11/21 08:58:32 +++ //depot/modules/cordoba/storage/modelstore/src/main/java/com/webify/framework/model/dbstore/HibernateModelFactory.java 2005/11/22 07:34:00 @@ -6,7 +6,6 @@ import com.webify.framework.model.ModelQuery; import com.webify.framework.model.NotFoundException; import com.webify.framework.model.proxy.ProxyHandlerContext; -import com.webify.framework.support.collections.IdentitySet; import com.webify.framework.support.trackingmap.TrackingMap; import com.webify.framework.triples.changes.TripleChanges; import com.webify.wsf.modelstore.impl.ModelAccessImpl; @@ -168,56 +167,6 @@ return version; } - /** - * @return non-null possibly empty collection - */ - private Collection getOtherThingsInCloud(final IThing thing) { - final HibernateInvocationHandler handler = HibernateInvocationHandler.handlerForThing(thing); - final Collection others = handler.getThingsInCloud(); - others.remove(thing); - return others; - } - - /** - * @param disconnected - * can be an {@link IThing}, a {@link Collection}or regular - * {@link Object} - */ - public void attachDisconnected(Object disconnected) { - HashSet things = new HashSet(); - findAllThingsInClouds(disconnected, new IdentitySet(), things); - if (GENERAL_LOG.isDebugEnabled()) { - GENERAL_LOG.debug("Reattaching: " + things); - } - for (Iterator i = things.iterator(); i.hasNext();) { - final IThing thing = (IThing) i.next(); - HibernateInvocationHandler handler = HibernateInvocationHandler.handlerForThing(thing); - handler.reattach(this); - } - } - - private void findAllThingsInClouds(final Object disconnected, - final Set visited, - final Set target) { - if (!visited.add(disconnected)) { - // already seen this object - return; - } - - if (disconnected instanceof Collection) { - final Collection collection = (Collection) disconnected; - for (Iterator i = collection.iterator(); i.hasNext();) { - findAllThingsInClouds(i.next(), visited, target); - } - } - else if (disconnected instanceof IThing) { - final IThing thing = (IThing) disconnected; - // no need to recurse into each because they all have the same cloud - target.add(thing); - target.addAll(getOtherThingsInCloud(thing)); - } - } - long getWorkingVersion() { // TODO implement getWorkingVersion properly. return ModelFactory.CURRENT_VERSION; @@ -250,7 +199,7 @@ final HibernateProxyBuilder builder = new HibernateProxyBuilder(); builder.setContext(this); if (typeUri == null) { - final TypeComputation tc = new TypeComputation(this, iface, properties); + final TypeComputation tc = new TypeComputation(this.getMetadataRegistry(), iface, properties); builder.setInterface(tc.deriveInterface()); builder.setTypeUri(tc.deriveType()); } --- //depot/modules/cordoba/storage/modelstore/src/main/java/com/webify/framework/model/dbstore/TypeComputation.java 2005/11/21 08:58:32 +++ //depot/modules/cordoba/storage/modelstore/src/main/java/com/webify/framework/model/dbstore/TypeComputation.java 2005/11/22 07:34:00 @@ -4,7 +4,7 @@ import com.webify.framework.model.IThing; import com.webify.framework.model.PredicateConstants; import com.webify.framework.model.metadata.ClassInfo; -import com.webify.framework.model.proxy.ProxyHandlerContext; +import com.webify.framework.model.metadata.MetadataRegistry; import com.webify.framework.support.trackingmap.TrackingMap; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -21,7 +21,7 @@ * @author dranatunga * @version $Id$ */ -class TypeComputation { +public class TypeComputation { private static final int NONE = 0; @@ -44,28 +44,28 @@ private int _ifaceState = NONE; private int _typeState = NONE; - private final ProxyHandlerContext _context; + private final MetadataRegistry _registry; private final Class _ifaceIn; private Class _bestIface; private URI _bestType; private final TrackingMap _knowledge; - TypeComputation(ProxyHandlerContext context, Class ifaceIn, TrackingMap knowledge) { + public TypeComputation(MetadataRegistry registry, Class ifaceIn, TrackingMap knowledge) { // TODO an instance can have more than one type, we need to account for this in our API - _context = context; + _registry = registry; _ifaceIn = ifaceIn; _knowledge = knowledge; _bestIface = ifaceIn; } - Class deriveInterface() { + public Class deriveInterface() { determineUsingInstanceAssociation(); // TODO determineUsingClassAssocation determineUsingTypeNameGuessing(); return _bestIface; } - URI deriveType() { + public URI deriveType() { determineUsingInstanceType(); determineUsingMetadataInfo(); return _bestType; @@ -141,7 +141,7 @@ ClassInfo mostSpecificType = null; for (Iterator i = _knowledge.getAll(PredicateConstants.TYPE_OF).iterator(); i.hasNext();) { URI oneDeclaredType = (URI) i.next(); - ClassInfo oneDeclaredInfo = _context.getMetadataRegistry().getClassInfo(oneDeclaredType); + ClassInfo oneDeclaredInfo = _registry.getClassInfo(oneDeclaredType); if ((mostSpecificType == null) || oneDeclaredInfo.getSuperClasses().contains(mostSpecificType)) { mostSpecificType = oneDeclaredInfo; } @@ -163,7 +163,7 @@ if (_typeState >= FOUND_FROM_ANNOTATION) { return; } - final ClassInfo classInfo = _context.getMetadataRegistry().getInterfaceInfo(_ifaceIn).getTypeInfo(); + final ClassInfo classInfo = _registry.getInterfaceInfo(_ifaceIn).getTypeInfo(); if ((classInfo == null) || (classInfo.getTypeUri() == null)) { return; } --- //depot/modules/cordoba/storage/modelstore/src/test/java/com/webify/framework/model/kowari/KowariModelFactoryTest.java 2005/11/14 14:53:49 +++ //depot/modules/cordoba/storage/modelstore/src/test/java/com/webify/framework/model/kowari/KowariModelFactoryTest.java 2005/11/21 10:29:33 @@ -1,23 +1,22 @@ package com.webify.framework.model.kowari; +import java.net.URI; import java.util.Date; import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Set; -import java.net.URI; import com.webify.framework.model.IThing; import com.webify.framework.model.ModelFactory; import com.webify.framework.model.ModelQuery; import com.webify.framework.model.metadata.InterfaceInfo; import com.webify.framework.model.metadata.PropertyInfo; +import com.webify.framework.support.uri.URIs; import com.webify.framework.support.uuid.UUID; -import com.webify.framework.support.uri.URIs; +import com.webify.framework.test.ConfiguredCoreTest; +import com.webify.framework.test.ModelExistsCondition; import com.webify.framework.test.PreTestCondition; -import com.webify.framework.test.ModelExistsCondition; -import com.webify.framework.test.ConfiguredCoreTest; - import junit.framework.TestSuite; /** @@ -52,7 +51,6 @@ ts.addTest(new KowariModelFactoryTest("testModifyKnownSubject")); ts.addTest(new KowariModelFactoryTest("testListExisting")); ts.addTest(new KowariModelFactoryTest("testListLiterals")); - ts.addTest(new KowariModelFactoryTest("testSerializeThing")); ts.addTest(new KowariModelFactoryTest("testMetadataAccessFromThing")); return ts; } @@ -112,15 +110,6 @@ } - public void testSerializeThing() { - final IThing original = getModelFactory().load(IThing.class, EXISTING_THING); - final byte[] serialized = serialize(original); - final Object reloaded = deserialize(serialized); - assertEquals(original, reloaded); - // TODO lookup something off reloaded that would require it to be connected. - getModelFactory().attachDisconnected(reloaded); - } - public void testMetadataAccessFromThing() { final IThing created = getModelFactory().create(SampleCar.class, new UUID().toString()); final InterfaceInfo info = created.getInterfaceInfo();