Author: cihan
Date: Fri May  6 07:31:27 2011
New Revision: 1100114

URL: http://svn.apache.org/viewvc?rev=1100114&view=rev
Log:
STANBOL-191: Added three modes to DobjectAdapter; OFFLINE, ONLINE, 
TOLERATED_OFFLINE. In ONLINE mode when an operation that requires repository 
access fails, a exception will be thrown.In TOLERATED_OFFLINE in case of an 
exception adapter will revert to OFFLINE mode.

Added:
    incubator/stanbol/trunk/cmsadapter/core/src/test/
    incubator/stanbol/trunk/cmsadapter/core/src/test/java/
    incubator/stanbol/trunk/cmsadapter/core/src/test/java/org/
    incubator/stanbol/trunk/cmsadapter/core/src/test/java/org/apache/
    incubator/stanbol/trunk/cmsadapter/core/src/test/java/org/apache/stanbol/
    
incubator/stanbol/trunk/cmsadapter/core/src/test/java/org/apache/stanbol/cmsadapter/
    
incubator/stanbol/trunk/cmsadapter/core/src/test/java/org/apache/stanbol/cmsadapter/core/
    
incubator/stanbol/trunk/cmsadapter/core/src/test/java/org/apache/stanbol/cmsadapter/core/decorated/
    
incubator/stanbol/trunk/cmsadapter/core/src/test/java/org/apache/stanbol/cmsadapter/core/decorated/DobjectFactoryImpTest.java
    
incubator/stanbol/trunk/cmsadapter/core/src/test/java/org/apache/stanbol/cmsadapter/core/decorated/MockOfflineAccess.java
    
incubator/stanbol/trunk/cmsadapter/core/src/test/java/org/apache/stanbol/cmsadapter/core/decorated/MockOnlineAccess.java
    
incubator/stanbol/trunk/cmsadapter/servicesapi/src/main/java/org/apache/stanbol/cmsadapter/servicesapi/model/web/decorated/AdapterMode.java
Modified:
    incubator/stanbol/trunk/cmsadapter/core/pom.xml
    
incubator/stanbol/trunk/cmsadapter/core/src/main/java/org/apache/stanbol/cmsadapter/core/decorated/DChildObjectTypeImp.java
    
incubator/stanbol/trunk/cmsadapter/core/src/main/java/org/apache/stanbol/cmsadapter/core/decorated/DObjectFactoryImp.java
    
incubator/stanbol/trunk/cmsadapter/core/src/main/java/org/apache/stanbol/cmsadapter/core/decorated/DObjectImp.java
    
incubator/stanbol/trunk/cmsadapter/core/src/main/java/org/apache/stanbol/cmsadapter/core/decorated/DObjectTypeImp.java
    
incubator/stanbol/trunk/cmsadapter/core/src/main/java/org/apache/stanbol/cmsadapter/core/decorated/DPropertyImp.java
    
incubator/stanbol/trunk/cmsadapter/servicesapi/src/main/java/org/apache/stanbol/cmsadapter/servicesapi/model/web/decorated/DChildObjectType.java
    
incubator/stanbol/trunk/cmsadapter/servicesapi/src/main/java/org/apache/stanbol/cmsadapter/servicesapi/model/web/decorated/DObject.java
    
incubator/stanbol/trunk/cmsadapter/servicesapi/src/main/java/org/apache/stanbol/cmsadapter/servicesapi/model/web/decorated/DObjectAdapter.java
    
incubator/stanbol/trunk/cmsadapter/servicesapi/src/main/java/org/apache/stanbol/cmsadapter/servicesapi/model/web/decorated/DProperty.java

Modified: incubator/stanbol/trunk/cmsadapter/core/pom.xml
URL: 
http://svn.apache.org/viewvc/incubator/stanbol/trunk/cmsadapter/core/pom.xml?rev=1100114&r1=1100113&r2=1100114&view=diff
==============================================================================
--- incubator/stanbol/trunk/cmsadapter/core/pom.xml (original)
+++ incubator/stanbol/trunk/cmsadapter/core/pom.xml Fri May  6 07:31:27 2011
@@ -75,6 +75,14 @@
                        <groupId>org.slf4j</groupId>
                        <artifactId>slf4j-api</artifactId>
                </dependency>
+               <dependency>
+                       <groupId>junit</groupId>
+                       <artifactId>junit</artifactId>
+               </dependency>
+               <dependency>
+                       <groupId>org.slf4j</groupId>
+                       <artifactId>slf4j-simple</artifactId>
+               </dependency>
        </dependencies>
 </project>
 

Modified: 
incubator/stanbol/trunk/cmsadapter/core/src/main/java/org/apache/stanbol/cmsadapter/core/decorated/DChildObjectTypeImp.java
URL: 
http://svn.apache.org/viewvc/incubator/stanbol/trunk/cmsadapter/core/src/main/java/org/apache/stanbol/cmsadapter/core/decorated/DChildObjectTypeImp.java?rev=1100114&r1=1100113&r2=1100114&view=diff
==============================================================================
--- 
incubator/stanbol/trunk/cmsadapter/core/src/main/java/org/apache/stanbol/cmsadapter/core/decorated/DChildObjectTypeImp.java
 (original)
+++ 
incubator/stanbol/trunk/cmsadapter/core/src/main/java/org/apache/stanbol/cmsadapter/core/decorated/DChildObjectTypeImp.java
 Fri May  6 07:31:27 2011
@@ -7,8 +7,11 @@ import org.apache.stanbol.cmsadapter.ser
 import 
org.apache.stanbol.cmsadapter.servicesapi.model.web.decorated.DObjectType;
 import org.apache.stanbol.cmsadapter.servicesapi.repository.RepositoryAccess;
 import 
org.apache.stanbol.cmsadapter.servicesapi.repository.RepositoryAccessException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 public class DChildObjectTypeImp implements DChildObjectType {
+    private static final Logger log = 
LoggerFactory.getLogger(DChildObjectTypeImp.class);
 
     private ChildObjectDefinition instance;
     private DObjectAdapter factory;
@@ -28,11 +31,31 @@ public class DChildObjectTypeImp impleme
 
     @Override
     public DObjectType getAllowedObjectDefinitions() throws 
RepositoryAccessException {
-        ObjectTypeDefinition allowedDefinition = 
access.getAllowableTypeDef(instance, factory.getSession());
-        allowedObjectDefinition = factory.wrapAsDObjectType(allowedDefinition);
+        if (allowedObjectDefinition == null) {
+            switch (factory.getMode()) {
+                case ONLINE:
+                    allowedObjectDefinition = getAllowedOnline();
+                    break;
+                case TOLERATED_OFFLINE:
+                    try {
+                        allowedObjectDefinition = getAllowedOnline();
+                    } catch (RepositoryAccessException e) {
+                        log.debug("Can not access repository at fetching 
allowed object type d");
+                    }
+                    break;
+                case STRICT_OFFLINE:
+                    break;
+            }
+        }
+
         return allowedObjectDefinition;
     }
 
+    private DObjectType getAllowedOnline() throws RepositoryAccessException {
+        ObjectTypeDefinition allowedDefinition = 
access.getAllowableTypeDef(instance, factory.getSession());
+        return factory.wrapAsDObjectType(allowedDefinition);
+    }
+
     @Override
     public ChildObjectDefinition getInstance() {
         return instance;

Modified: 
incubator/stanbol/trunk/cmsadapter/core/src/main/java/org/apache/stanbol/cmsadapter/core/decorated/DObjectFactoryImp.java
URL: 
http://svn.apache.org/viewvc/incubator/stanbol/trunk/cmsadapter/core/src/main/java/org/apache/stanbol/cmsadapter/core/decorated/DObjectFactoryImp.java?rev=1100114&r1=1100113&r2=1100114&view=diff
==============================================================================
--- 
incubator/stanbol/trunk/cmsadapter/core/src/main/java/org/apache/stanbol/cmsadapter/core/decorated/DObjectFactoryImp.java
 (original)
+++ 
incubator/stanbol/trunk/cmsadapter/core/src/main/java/org/apache/stanbol/cmsadapter/core/decorated/DObjectFactoryImp.java
 Fri May  6 07:31:27 2011
@@ -1,11 +1,12 @@
 package org.apache.stanbol.cmsadapter.core.decorated;
 
+import org.apache.stanbol.cmsadapter.servicesapi.model.web.CMSObject;
 import 
org.apache.stanbol.cmsadapter.servicesapi.model.web.ChildObjectDefinition;
 import org.apache.stanbol.cmsadapter.servicesapi.model.web.ConnectionInfo;
-import org.apache.stanbol.cmsadapter.servicesapi.model.web.CMSObject;
 import 
org.apache.stanbol.cmsadapter.servicesapi.model.web.ObjectTypeDefinition;
 import org.apache.stanbol.cmsadapter.servicesapi.model.web.Property;
 import org.apache.stanbol.cmsadapter.servicesapi.model.web.PropertyDefinition;
+import 
org.apache.stanbol.cmsadapter.servicesapi.model.web.decorated.AdapterMode;
 import 
org.apache.stanbol.cmsadapter.servicesapi.model.web.decorated.DChildObjectType;
 import org.apache.stanbol.cmsadapter.servicesapi.model.web.decorated.DObject;
 import 
org.apache.stanbol.cmsadapter.servicesapi.model.web.decorated.DObjectAdapter;
@@ -19,15 +20,30 @@ public class DObjectFactoryImp implement
 
     private RepositoryAccess access;
     private Object session;
+    private AdapterMode mode;
 
     public DObjectFactoryImp(RepositoryAccess access, Object session) {
         this.access = access;
         this.session = session;
+        this.mode = AdapterMode.ONLINE;
     }
-    
+
     public DObjectFactoryImp(RepositoryAccess access, ConnectionInfo 
connectionInfo) throws RepositoryAccessException {
         this.access = access;
         this.session = access.getSession(connectionInfo);
+        this.mode = AdapterMode.ONLINE;
+    }
+
+    public DObjectFactoryImp(RepositoryAccess access, Object session, 
AdapterMode mode) {
+        this.access = access;
+        this.session = session;
+        this.mode = mode;
+    }
+
+    public DObjectFactoryImp(RepositoryAccess access, ConnectionInfo 
connectionInfo, AdapterMode mode) throws RepositoryAccessException {
+        this.access = access;
+        this.session = access.getSession(connectionInfo);
+        this.mode = mode;
     }
 
     @Override
@@ -60,4 +76,14 @@ public class DObjectFactoryImp implement
         return session;
     }
 
+    @Override
+    public void setMode(AdapterMode mode) {
+        this.mode = mode;
+    }
+
+    @Override
+    public AdapterMode getMode() {
+        return mode;
+    }
+
 }

Modified: 
incubator/stanbol/trunk/cmsadapter/core/src/main/java/org/apache/stanbol/cmsadapter/core/decorated/DObjectImp.java
URL: 
http://svn.apache.org/viewvc/incubator/stanbol/trunk/cmsadapter/core/src/main/java/org/apache/stanbol/cmsadapter/core/decorated/DObjectImp.java?rev=1100114&r1=1100113&r2=1100114&view=diff
==============================================================================
--- 
incubator/stanbol/trunk/cmsadapter/core/src/main/java/org/apache/stanbol/cmsadapter/core/decorated/DObjectImp.java
 (original)
+++ 
incubator/stanbol/trunk/cmsadapter/core/src/main/java/org/apache/stanbol/cmsadapter/core/decorated/DObjectImp.java
 Fri May  6 07:31:27 2011
@@ -11,9 +11,13 @@ import org.apache.stanbol.cmsadapter.ser
 import org.apache.stanbol.cmsadapter.servicesapi.model.web.decorated.DProperty;
 import org.apache.stanbol.cmsadapter.servicesapi.repository.RepositoryAccess;
 import 
org.apache.stanbol.cmsadapter.servicesapi.repository.RepositoryAccessException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 public class DObjectImp implements DObject {
 
+    private static final Logger log = 
LoggerFactory.getLogger(DObjectImp.class);
+
     private CMSObject instance;
     private DObjectAdapter factory;
     private RepositoryAccess access;
@@ -50,60 +54,141 @@ public class DObjectImp implements DObje
 
     @Override
     public List<DObject> getChildren() throws RepositoryAccessException {
-        if (children != null) {
-            return children;
+        if (children == null) {
+            switch (factory.getMode()) {
+                case ONLINE:
+                    children = getChildrenOnline();
+                    break;
+                case TOLERATED_OFFLINE:
+                    children = getChildrenTOffline();
+                    break;
+                case STRICT_OFFLINE:
+                    children = getChildrenSOffline();
+                    break;
+            }
         }
 
+        return children;
+
+    }
+
+    private List<DObject> getChildrenOnline() throws RepositoryAccessException 
{
         List<CMSObject> nodes = access.getChildren(instance, 
factory.getSession());
+        return wrapAsDObject(nodes);
+    }
 
-        children = new ArrayList<DObject>(nodes.size());
-        for (CMSObject node : nodes) {
-            children.add(this.factory.wrapAsDObject(node));
+    private List<DObject> getChildrenTOffline() {
+        try {
+            return getChildrenOnline();
+        } catch (RepositoryAccessException e) {
+            log.debug("Error accesing repository at fetching children of {}. 
Tyring offline",
+                instance.getPath());
+            return getChildrenSOffline();
         }
-        return children;
+    }
+
+    private List<DObject> getChildrenSOffline() {
+        return wrapAsDObject(instance.getChildren());
     }
 
     @Override
     public DObject getParent() throws RepositoryAccessException {
-        if (parent != null) {
-            return parent;
+        if (parent == null) {
+            switch (factory.getMode()) {
+                case ONLINE:
+                    parent = 
factory.wrapAsDObject(access.getParentByNode(instance, factory.getSession()));
+                    break;
+                case TOLERATED_OFFLINE:
+                    try {
+                        parent = factory
+                                
.wrapAsDObject(access.getParentByNode(instance, factory.getSession()));
+                    } catch (RepositoryAccessException e) {
+                        log.debug("Can not access repository at fetching 
parent of {}.", instance.getPath());
+                    }
+                    break;
+                case STRICT_OFFLINE:
+                    break;
+            }
         }
 
-        parent = factory.wrapAsDObject(access.getParentByNode(instance, 
factory.getSession()));
-
         return parent;
     }
 
     @Override
     public DObjectType getObjectType() throws RepositoryAccessException {
-        if (objectType != null) {
-            return this.objectType;
+        if (objectType == null) {
+            String typeRef = instance.getObjectTypeRef();
+            switch (factory.getMode()) {
+                case ONLINE:
+                    objectType = 
factory.wrapAsDObjectType(access.getObjectTypeDefinition(typeRef,
+                        factory.getSession()));
+                    break;
+                case TOLERATED_OFFLINE:
+                    try {
+                        objectType = 
factory.wrapAsDObjectType(access.getObjectTypeDefinition(typeRef,
+                            factory.getSession()));
+                    } catch (RepositoryAccessException e) {
+                        log.debug("Can not access repository at fetching 
object type of {}.",
+                            instance.getPath());
+                    }
+                    break;
+                case STRICT_OFFLINE:
+                    break;
+            }
         }
 
-        String typeRef = instance.getObjectTypeRef();
-        objectType = 
factory.wrapAsDObjectType(access.getObjectTypeDefinition(typeRef, 
factory.getSession()));
         return objectType;
     }
 
     @Override
     public List<DProperty> getProperties() throws RepositoryAccessException {
-        if (properties != null) {
-            return properties;
+        if (properties == null) {
+            switch (factory.getMode()) {
+                case ONLINE:
+                    properties = getPropertiesOnline();
+                    break;
+                case TOLERATED_OFFLINE:
+                    try {
+                        properties = getPropertiesOnline();
+                    } catch (RepositoryAccessException e) {
+                        log.debug("Can not access repository at fetching 
properties of {}.",
+                            instance.getPath());
+                        properties = wrapAsDProperty(instance.getProperty());
+                    }
+                    break;
+                case STRICT_OFFLINE:
+                    properties = wrapAsDProperty(instance.getProperty());
+                    break;
+            }
         }
+        return properties;
+    }
 
+    @Override
+    public CMSObject getInstance() {
+        return this.instance;
+    }
+    
+    private List<DProperty> getPropertiesOnline() throws 
RepositoryAccessException {
         List<Property> props = access.getProperties(instance, 
factory.getSession());
+        return wrapAsDProperty(props);
+    }
+
+
+    private List<DObject> wrapAsDObject(List<CMSObject> cmsObjects) {
+        List<DObject> wrappeds = new ArrayList<DObject>(cmsObjects.size());
+        for (CMSObject node : cmsObjects) {
+            wrappeds.add(this.factory.wrapAsDObject(node));
+        }
+        return wrappeds;
+    }
 
-        properties = new ArrayList<DProperty>(props.size());
+    private List<DProperty> wrapAsDProperty(List<Property> props) {
+        List<DProperty> properties = new ArrayList<DProperty>(props.size());
 
         for (Property prop : props) {
             properties.add(factory.wrapAsDProperty(prop));
         }
         return properties;
     }
-
-    @Override
-    public CMSObject getInstance() {
-        return this.instance;
-    }
-
 }

Modified: 
incubator/stanbol/trunk/cmsadapter/core/src/main/java/org/apache/stanbol/cmsadapter/core/decorated/DObjectTypeImp.java
URL: 
http://svn.apache.org/viewvc/incubator/stanbol/trunk/cmsadapter/core/src/main/java/org/apache/stanbol/cmsadapter/core/decorated/DObjectTypeImp.java?rev=1100114&r1=1100113&r2=1100114&view=diff
==============================================================================
--- 
incubator/stanbol/trunk/cmsadapter/core/src/main/java/org/apache/stanbol/cmsadapter/core/decorated/DObjectTypeImp.java
 (original)
+++ 
incubator/stanbol/trunk/cmsadapter/core/src/main/java/org/apache/stanbol/cmsadapter/core/decorated/DObjectTypeImp.java
 Fri May  6 07:31:27 2011
@@ -12,97 +12,119 @@ import org.apache.stanbol.cmsadapter.ser
 import 
org.apache.stanbol.cmsadapter.servicesapi.model.web.decorated.DPropertyDefinition;
 import org.apache.stanbol.cmsadapter.servicesapi.repository.RepositoryAccess;
 import 
org.apache.stanbol.cmsadapter.servicesapi.repository.RepositoryAccessException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 public class DObjectTypeImp implements DObjectType {
+    private static final Logger log = 
LoggerFactory.getLogger(DObjectTypeImp.class);
 
-       private ObjectTypeDefinition instance;
-       private DObjectAdapter factory;
-       private RepositoryAccess access;
-       private List<DPropertyDefinition> propertyDefinitions;
-       private List<DObjectType> parentDefinitions;
-       private List<DChildObjectType> childDefinitions;
-
-       public DObjectTypeImp(ObjectTypeDefinition instance,
-                       DObjectAdapter factory, RepositoryAccess access) {
-               this.instance = instance;
-               this.factory = factory;
-               this.access = access;
-       }
-
-       @Override
-       public String getID() {
-               return instance.getUniqueRef();
-       }
-
-       @Override
-       public String getName() {
-               return instance.getLocalname();
-       }
-
-       @Override
-       public String getNamespace() {
-               return instance.getNamespace();
-       }
-
-       @Override
-       public List<DPropertyDefinition> getPropertyDefinitions()
-                       throws RepositoryAccessException {
-               if (propertyDefinitions != null) {
-                       return propertyDefinitions;
-               } else {
-                       List<PropertyDefinition> propDefinitions = access
-                                       .getPropertyDefinitions(instance, 
factory.getSession());
-
-                       propertyDefinitions = new 
ArrayList<DPropertyDefinition>(
-                                       propDefinitions.size());
-                       for (PropertyDefinition propDefinition : 
propDefinitions) {
-                               propertyDefinitions.add(factory
-                                               
.wrapAsDPropertyDefinition(propDefinition));
-                       }
-
-                       return propertyDefinitions;
-               }
-       }
-
-       @Override
-       public List<DObjectType> getParentDefinitions()
-                       throws RepositoryAccessException {
-               if (parentDefinitions != null) {
-                       return parentDefinitions;
-               }
-
-               List<ObjectTypeDefinition> parDefinitions = access
-                               .getParentTypeDefinitions(instance, 
factory.getSession());
-               propertyDefinitions = new ArrayList<DPropertyDefinition>(
-                               parDefinitions.size());
-               for (ObjectTypeDefinition parentTypeRef : parDefinitions) {
-                       
parentDefinitions.add(factory.wrapAsDObjectType(parentTypeRef));
-               }
-
-               return parentDefinitions;
-       }
-
-       @Override
-       public List<DChildObjectType> getChildDefinitions()
-                       throws RepositoryAccessException {
-               if (childDefinitions != null) {
-                       return childDefinitions;
-               }
-
-               List<ChildObjectDefinition> childDefs = access
-                               .getChildObjectTypeDefinitions(instance, 
factory.getSession());
-
-               childDefinitions = new 
ArrayList<DChildObjectType>(childDefs.size());
-               for (ChildObjectDefinition childDef : childDefs) {
-                       
childDefinitions.add(factory.wrapAsDChildObjectType(childDef));
-               }
-
-               return childDefinitions;
-       }
-
-       @Override
-       public ObjectTypeDefinition getInstance() {
-               return instance;
-       }
+    private ObjectTypeDefinition instance;
+    private DObjectAdapter factory;
+    private RepositoryAccess access;
+    private List<DPropertyDefinition> propertyDefinitions;
+    private List<DObjectType> parentDefinitions;
+    private List<DChildObjectType> childDefinitions;
+
+    public DObjectTypeImp(ObjectTypeDefinition instance, DObjectAdapter 
factory, RepositoryAccess access) {
+        this.instance = instance;
+        this.factory = factory;
+        this.access = access;
+    }
+
+    @Override
+    public String getID() {
+        return instance.getUniqueRef();
+    }
+
+    @Override
+    public String getName() {
+        return instance.getLocalname();
+    }
+
+    @Override
+    public String getNamespace() {
+        return instance.getNamespace();
+    }
+
+    @Override
+    public List<DPropertyDefinition> getPropertyDefinitions() throws 
RepositoryAccessException {
+        if (propertyDefinitions != null) {
+            return propertyDefinitions;
+        } else {
+            List<PropertyDefinition> propDefinitions = 
access.getPropertyDefinitions(instance,
+                factory.getSession());
+
+            propertyDefinitions = new 
ArrayList<DPropertyDefinition>(propDefinitions.size());
+            for (PropertyDefinition propDefinition : propDefinitions) {
+                
propertyDefinitions.add(factory.wrapAsDPropertyDefinition(propDefinition));
+            }
+
+            return propertyDefinitions;
+        }
+    }
+
+    @Override
+    public List<DObjectType> getParentDefinitions() throws 
RepositoryAccessException {
+        if (parentDefinitions != null) {
+            return parentDefinitions;
+        }
+
+        List<ObjectTypeDefinition> parDefinitions = 
access.getParentTypeDefinitions(instance,
+            factory.getSession());
+        propertyDefinitions = new 
ArrayList<DPropertyDefinition>(parDefinitions.size());
+        for (ObjectTypeDefinition parentTypeRef : parDefinitions) {
+            parentDefinitions.add(factory.wrapAsDObjectType(parentTypeRef));
+        }
+
+        return parentDefinitions;
+    }
+
+    @Override
+    public List<DChildObjectType> getChildDefinitions() throws 
RepositoryAccessException {
+        if (childDefinitions != null) {
+            switch (factory.getMode()) {
+                case ONLINE:
+                    childDefinitions = getChildDefinitionsOnline();
+                    break;
+                case TOLERATED_OFFLINE:
+                    try {
+                        childDefinitions = getChildDefinitionsOnline();
+                    } catch (RepositoryAccessException e) {
+                        log.debug("Can not access repository while fetching 
childs definitions of type {}",
+                            instance.getUniqueRef());
+                        childDefinitions = getChildDefinitionsOffline();
+                    }
+                    break;
+                case STRICT_OFFLINE:
+                    childDefinitions = getChildDefinitionsOffline();
+                    break;
+            }
+        }
+
+        return childDefinitions;
+    }
+
+    private List<DChildObjectType> getChildDefinitionsOnline() throws 
RepositoryAccessException {
+        List<ChildObjectDefinition> childDefs = 
access.getChildObjectTypeDefinitions(instance,
+            factory.getSession());
+        return wrapChildObjectDefinitions(childDefs);
+    }
+
+    private List<DChildObjectType> getChildDefinitionsOffline() {
+        return wrapChildObjectDefinitions(instance.getChildObjectDefinition());
+    }
+
+    private List<DChildObjectType> 
wrapChildObjectDefinitions(List<ChildObjectDefinition> childDefs) {
+        List<DChildObjectType> childDefinitions = new 
ArrayList<DChildObjectType>(childDefs.size());
+        for (ChildObjectDefinition childDef : childDefs) {
+            childDefinitions.add(factory.wrapAsDChildObjectType(childDef));
+        }
+        return childDefinitions;
+    }
+
+    @Override
+    public ObjectTypeDefinition getInstance() {
+        return instance;
+    }
 
 }

Modified: 
incubator/stanbol/trunk/cmsadapter/core/src/main/java/org/apache/stanbol/cmsadapter/core/decorated/DPropertyImp.java
URL: 
http://svn.apache.org/viewvc/incubator/stanbol/trunk/cmsadapter/core/src/main/java/org/apache/stanbol/cmsadapter/core/decorated/DPropertyImp.java?rev=1100114&r1=1100113&r2=1100114&view=diff
==============================================================================
--- 
incubator/stanbol/trunk/cmsadapter/core/src/main/java/org/apache/stanbol/cmsadapter/core/decorated/DPropertyImp.java
 (original)
+++ 
incubator/stanbol/trunk/cmsadapter/core/src/main/java/org/apache/stanbol/cmsadapter/core/decorated/DPropertyImp.java
 Fri May  6 07:31:27 2011
@@ -12,18 +12,21 @@ import org.apache.stanbol.cmsadapter.ser
 import 
org.apache.stanbol.cmsadapter.servicesapi.model.web.decorated.DPropertyDefinition;
 import org.apache.stanbol.cmsadapter.servicesapi.repository.RepositoryAccess;
 import 
org.apache.stanbol.cmsadapter.servicesapi.repository.RepositoryAccessException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 public class DPropertyImp implements DProperty {
+    private static final Logger log = 
LoggerFactory.getLogger(DPropertyImp.class);
 
     private Property instance;
-    private DObjectAdapter adapter;
+    private DObjectAdapter factory;
     private RepositoryAccess access;
     private DObject sourceObject;
     private DPropertyDefinition propertyDefinition;
 
     public DPropertyImp(Property instance, DObjectAdapter adapter, 
RepositoryAccess access) {
         this.instance = instance;
-        this.adapter = adapter;
+        this.factory = adapter;
         this.access = access;
     }
 
@@ -34,24 +37,60 @@ public class DPropertyImp implements DPr
 
     @Override
     public DPropertyDefinition getDefinition() throws 
RepositoryAccessException {
-        if (propertyDefinition != null) {
-            return propertyDefinition;
-        }
+        if (propertyDefinition == null) {
+            switch (factory.getMode()) {
+                case ONLINE:
+                    propertyDefinition = getPropertyDefinitionOnline();
+                    break;
+                case TOLERATED_OFFLINE:
+                    try {
+                        propertyDefinition = getPropertyDefinitionOnline();
+                    } catch (RepositoryAccessException e) {
+                        log.debug("Can not access repository at fetching 
source object of property {}",
+                            instance.getLocalname());
+                    }
+                    break;
+                case STRICT_OFFLINE:
+                    break;
+            }
 
-        PropertyDefinition propDef = access.getPropertyDefinition(instance, 
adapter.getSession());
+        }
 
-        propertyDefinition = adapter.wrapAsDPropertyDefinition(propDef);
         return propertyDefinition;
+    }
 
+    private DPropertyDefinition getPropertyDefinitionOnline() throws 
RepositoryAccessException {
+        PropertyDefinition propDef = access.getPropertyDefinition(instance, 
factory.getSession());
+        return factory.wrapAsDPropertyDefinition(propDef);
     }
 
     @Override
     public DObject getSourceObject() throws RepositoryAccessException {
-        CMSObject source = access.getContainerObject(instance, 
adapter.getSession());
-        sourceObject = adapter.wrapAsDObject(source);
+        if (sourceObject == null) {
+            switch (factory.getMode()) {
+                case ONLINE:
+                    sourceObject = getSourceObjectOnline();
+                    break;
+                case TOLERATED_OFFLINE:
+                    try {
+                        sourceObject = getSourceObjectOnline();
+                    } catch (RepositoryAccessException e) {
+                        log.debug("Can not access repository at fetching 
source object of property {}",
+                            instance.getLocalname());
+                    }
+                    break;
+                case STRICT_OFFLINE:
+                    break;
+            }
+        }
         return sourceObject;
     }
 
+    private DObject getSourceObjectOnline() throws RepositoryAccessException {
+        CMSObject source = access.getContainerObject(instance, 
factory.getSession());
+        return factory.wrapAsDObject(source);
+    }
+
     @Override
     public List<String> getValue() {
         return instance.getValue();

Added: 
incubator/stanbol/trunk/cmsadapter/core/src/test/java/org/apache/stanbol/cmsadapter/core/decorated/DobjectFactoryImpTest.java
URL: 
http://svn.apache.org/viewvc/incubator/stanbol/trunk/cmsadapter/core/src/test/java/org/apache/stanbol/cmsadapter/core/decorated/DobjectFactoryImpTest.java?rev=1100114&view=auto
==============================================================================
--- 
incubator/stanbol/trunk/cmsadapter/core/src/test/java/org/apache/stanbol/cmsadapter/core/decorated/DobjectFactoryImpTest.java
 (added)
+++ 
incubator/stanbol/trunk/cmsadapter/core/src/test/java/org/apache/stanbol/cmsadapter/core/decorated/DobjectFactoryImpTest.java
 Fri May  6 07:31:27 2011
@@ -0,0 +1,173 @@
+package org.apache.stanbol.cmsadapter.core.decorated;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
+
+import java.util.List;
+
+import org.apache.stanbol.cmsadapter.servicesapi.model.web.CMSObject;
+import org.apache.stanbol.cmsadapter.servicesapi.model.web.ObjectFactory;
+import 
org.apache.stanbol.cmsadapter.servicesapi.model.web.decorated.AdapterMode;
+import org.apache.stanbol.cmsadapter.servicesapi.model.web.decorated.DObject;
+import 
org.apache.stanbol.cmsadapter.servicesapi.model.web.decorated.DObjectAdapter;
+import 
org.apache.stanbol.cmsadapter.servicesapi.repository.RepositoryAccessException;
+import org.junit.AfterClass;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExpectedException;
+
+public class DobjectFactoryImpTest {
+
+    public static final String LOCAL_NAME = "localname";
+    public static final String PATH = "path";
+    public static final String UNIQUE_REF = "unique_ref";
+    public static final String ROOT_PARENT_REF = null;
+    public static final String NAMESPACE = "namespace";
+    public static final String PREFIX_ROOT = "root_";
+    public static final String PREFIX_CHILD_1 = "child_1_";
+    public static final String PREFIX_CHILD_2 = "child_2_";
+
+    static DObjectAdapter tOfflineAdapter;
+    static DObjectAdapter sOfflineAdapter;
+    static DObjectAdapter onlineAdapter;
+    CMSObject rootStripped;
+    CMSObject root;
+
+    @Rule
+    public ExpectedException expectedException = ExpectedException.none();
+
+    @BeforeClass
+    public static void setUpBeforeClass() throws Exception {
+        tOfflineAdapter = new DObjectFactoryImp(new MockOfflineAccess(), null, 
AdapterMode.TOLERATED_OFFLINE);
+        sOfflineAdapter = new DObjectFactoryImp(new MockOfflineAccess(), null, 
AdapterMode.STRICT_OFFLINE);
+        onlineAdapter = new DObjectFactoryImp(new MockOnlineAccess(), null);
+    }
+
+    @AfterClass
+    public static void tearDownAfterClass() throws Exception {}
+
+    // Unnecessarily, eagerly builds objects but OK for tests.
+    public static class CMSObjectBuilder {
+        private static ObjectFactory of = new ObjectFactory();
+        private CMSObject instance = of.createCMSObject();
+        private String prefix;
+
+        public CMSObjectBuilder(String prefix) {
+            this.prefix = prefix;
+            instance.setUniqueRef(prefix + UNIQUE_REF);
+            instance.setLocalname(prefix + LOCAL_NAME);
+            instance.setPath(prefix + PATH);
+        }
+
+        public CMSObjectBuilder(String prefix, String id, String name, String 
path) {
+            this.prefix = prefix;
+            instance.setUniqueRef(prefix + id);
+            instance.setLocalname(prefix + name);
+            instance.setPath(prefix + path);
+        }
+
+        public CMSObjectBuilder namespace() {
+            instance.setNamespace(prefix + NAMESPACE);
+            return this;
+        }
+
+        public CMSObjectBuilder namespace(String namespace) {
+            instance.setNamespace(prefix + namespace);
+            return this;
+        }
+
+        public CMSObjectBuilder child(CMSObject child) {
+            instance.getChildren().add(child);
+            return this;
+        }
+
+        public CMSObject build() {
+            return instance;
+        }
+
+    }
+
+    @Before
+    public void setUp() {
+        rootStripped = new CMSObjectBuilder(PREFIX_ROOT).namespace().build();
+        CMSObject child1 = new CMSObjectBuilder(PREFIX_CHILD_1).build();
+        CMSObject child2 = new CMSObjectBuilder(PREFIX_CHILD_2).build();
+        root = new 
CMSObjectBuilder(PREFIX_ROOT).namespace().child(child1).child(child2).build();
+    }
+
+    @Test
+    public void testDObjectFieldsOnline() {
+        DObject root = onlineAdapter.wrapAsDObject(rootStripped);
+        assertEquals(PREFIX_ROOT + LOCAL_NAME, root.getName());
+        assertEquals(PREFIX_ROOT + NAMESPACE, root.getNamespace());
+        assertEquals(PREFIX_ROOT + PATH, root.getPath());
+        assertEquals(PREFIX_ROOT + UNIQUE_REF, root.getID());
+    }
+
+    @Test
+    public void testDObjectFieldsOffline() {
+        DObject root = sOfflineAdapter.wrapAsDObject(rootStripped);
+        assertEquals(PREFIX_ROOT + LOCAL_NAME, root.getName());
+        assertEquals(PREFIX_ROOT + NAMESPACE, root.getNamespace());
+        assertEquals(PREFIX_ROOT + PATH, root.getPath());
+        assertEquals(PREFIX_ROOT + UNIQUE_REF, root.getID());
+
+    }
+
+    @Test
+    public void testDObjectParentOnline() throws RepositoryAccessException {
+        DObject root = onlineAdapter.wrapAsDObject(rootStripped);
+        expectedException.expect(RepositoryAccessException.class);
+        root.getParent();
+    }
+
+    @Test
+    public void testDObjectParentOffline() throws RepositoryAccessException {
+        DObject root = sOfflineAdapter.wrapAsDObject(rootStripped);
+        assertNull(root.getParent());
+    }
+    
+    @Test
+    public void testDObjectChildsOnline() throws RepositoryAccessException{
+        DObject root = onlineAdapter.wrapAsDObject(rootStripped);
+        List<DObject> children = root.getChildren();
+        assertEquals(2, children.size());
+    }
+    
+    @Test
+    public void testDObjectChildsOffline() throws RepositoryAccessException{
+        DObject rootd = sOfflineAdapter.wrapAsDObject(root);
+        List<DObject> children = rootd.getChildren();
+        assertEquals(2, children.size());
+    }
+    
+    @Test
+    public void testDObjectChildsOfflineStripped() throws 
RepositoryAccessException{
+        DObject rootd = sOfflineAdapter.wrapAsDObject(rootStripped);
+        List<DObject> children = rootd.getChildren();
+        assertEquals(0, children.size());
+    }
+    
+    @Test
+    public void testDObjectChildsTOfflineStripped() throws 
RepositoryAccessException{
+        DObject rootd = tOfflineAdapter.wrapAsDObject(root);
+        List<DObject> children = rootd.getChildren();
+        assertEquals(2, children.size());
+    }
+    
+    @Test 
+    public void testDObjectTypeSOffline() throws RepositoryAccessException{
+        DObject rootd = sOfflineAdapter.wrapAsDObject(root);
+        assertNull(rootd.getObjectType());
+    }
+    
+    @Test 
+    public void testDObjectTypeOnline() throws RepositoryAccessException{
+        DObject rootd = onlineAdapter.wrapAsDObject(rootStripped);
+        expectedException.expect(RepositoryAccessException.class);
+        rootd.getObjectType();
+    }
+
+}

Added: 
incubator/stanbol/trunk/cmsadapter/core/src/test/java/org/apache/stanbol/cmsadapter/core/decorated/MockOfflineAccess.java
URL: 
http://svn.apache.org/viewvc/incubator/stanbol/trunk/cmsadapter/core/src/test/java/org/apache/stanbol/cmsadapter/core/decorated/MockOfflineAccess.java?rev=1100114&view=auto
==============================================================================
--- 
incubator/stanbol/trunk/cmsadapter/core/src/test/java/org/apache/stanbol/cmsadapter/core/decorated/MockOfflineAccess.java
 (added)
+++ 
incubator/stanbol/trunk/cmsadapter/core/src/test/java/org/apache/stanbol/cmsadapter/core/decorated/MockOfflineAccess.java
 Fri May  6 07:31:27 2011
@@ -0,0 +1,147 @@
+package org.apache.stanbol.cmsadapter.core.decorated;
+
+import java.util.List;
+
+import org.apache.stanbol.cmsadapter.servicesapi.model.web.CMSObject;
+import 
org.apache.stanbol.cmsadapter.servicesapi.model.web.ChildObjectDefinition;
+import org.apache.stanbol.cmsadapter.servicesapi.model.web.ConnectionInfo;
+import 
org.apache.stanbol.cmsadapter.servicesapi.model.web.ObjectTypeDefinition;
+import org.apache.stanbol.cmsadapter.servicesapi.model.web.Property;
+import org.apache.stanbol.cmsadapter.servicesapi.model.web.PropertyDefinition;
+import org.apache.stanbol.cmsadapter.servicesapi.repository.RepositoryAccess;
+import 
org.apache.stanbol.cmsadapter.servicesapi.repository.RepositoryAccessException;
+
+public class MockOfflineAccess implements RepositoryAccess {
+
+    @Override
+    public Object getSession(ConnectionInfo connectionInfo) throws 
RepositoryAccessException {
+        return null;
+    }
+
+    @Override
+    public List<CMSObject> getNodeByPath(String path, ConnectionInfo 
connectionInfo) throws RepositoryAccessException {
+        throw new RepositoryAccessException("Im just a mocker", null);
+    }
+
+    @Override
+    public List<CMSObject> getNodeById(String id, ConnectionInfo 
connectionInfo) throws RepositoryAccessException {
+        throw new RepositoryAccessException("Im just a mocker", null);
+    }
+
+    @Override
+    public List<CMSObject> getNodeByPath(String path, Object session) throws 
RepositoryAccessException {
+        throw new RepositoryAccessException("Im just a mocker", null);
+    }
+
+    @Override
+    public List<CMSObject> getNodeById(String id, Object session) throws 
RepositoryAccessException {
+        throw new RepositoryAccessException("Im just a mocker", null);
+    }
+
+    @Override
+    public List<CMSObject> getNodeByName(String name, Object session) throws 
RepositoryAccessException {
+        throw new RepositoryAccessException("Im just a mocker", null);
+    }
+
+    @Override
+    public List<CMSObject> getNodeByName(String name, ConnectionInfo 
connectionInfo) throws RepositoryAccessException {
+        throw new RepositoryAccessException("Im just a mocker", null);
+    }
+
+    @Override
+    public CMSObject getFirstNodeByPath(String path, ConnectionInfo 
connectionInfo) throws RepositoryAccessException {
+        throw new RepositoryAccessException("Im just a mocker", null);
+    }
+
+    @Override
+    public CMSObject getFirstNodeById(String id, ConnectionInfo 
connectionInfo) throws RepositoryAccessException {
+        throw new RepositoryAccessException("Im just a mocker", null);
+    }
+
+    @Override
+    public CMSObject getFirstNodeByPath(String path, Object session) throws 
RepositoryAccessException {
+        throw new RepositoryAccessException("Im just a mocker", null);
+    }
+
+    @Override
+    public CMSObject getFirstNodeById(String id, Object session) throws 
RepositoryAccessException {
+        throw new RepositoryAccessException("Im just a mocker", null);
+    }
+
+    @Override
+    public CMSObject getFirstNodeByName(String name, Object session) throws 
RepositoryAccessException {
+        throw new RepositoryAccessException("Im just a mocker", null);
+    }
+
+    @Override
+    public CMSObject getFirstNodeByName(String name, ConnectionInfo 
connectionInfo) throws RepositoryAccessException {
+        throw new RepositoryAccessException("Im just a mocker", null);
+    }
+
+    @Override
+    public List<CMSObject> getChildren(CMSObject node, Object session) throws 
RepositoryAccessException {
+        throw new RepositoryAccessException("Im just a mocker", null);
+    }
+
+    @Override
+    public ObjectTypeDefinition getObjectTypeDefinition(String typeRef, Object 
session) throws RepositoryAccessException {
+        throw new RepositoryAccessException("Im just a mocker", null);
+    }
+
+    @Override
+    public List<Property> getProperties(CMSObject node, Object session) throws 
RepositoryAccessException {
+        throw new RepositoryAccessException("Im just a mocker", null);
+    }
+
+    @Override
+    public List<PropertyDefinition> 
getPropertyDefinitions(ObjectTypeDefinition instance, Object session) throws 
RepositoryAccessException {
+        throw new RepositoryAccessException("Im just a mocker", null);
+    }
+
+    @Override
+    public List<ObjectTypeDefinition> 
getParentTypeDefinitions(ObjectTypeDefinition instance, Object session) throws 
RepositoryAccessException {
+        throw new RepositoryAccessException("Im just a mocker", null);
+    }
+
+    @Override
+    public List<ChildObjectDefinition> 
getChildObjectTypeDefinitions(ObjectTypeDefinition instance,
+                                                                     Object 
session) throws RepositoryAccessException {
+        throw new RepositoryAccessException("Im just a mocker", null);
+    }
+
+    @Override
+    public ObjectTypeDefinition getAllowableTypeDef(ChildObjectDefinition 
instance, Object session) throws RepositoryAccessException {
+        throw new RepositoryAccessException("Im just a mocker", null);
+    }
+
+    @Override
+    public CMSObject getContainerObject(Property instance, Object session) 
throws RepositoryAccessException {
+        throw new RepositoryAccessException("Im just a mocker", null);
+    }
+
+    @Override
+    public PropertyDefinition getPropertyDefinition(Property instance, Object 
session) throws RepositoryAccessException {
+        throw new RepositoryAccessException("Im just a mocker", null);
+    }
+
+    @Override
+    public String getNamespaceURI(String prefix, Object session) throws 
RepositoryAccessException {
+        throw new RepositoryAccessException("Im just a mocker", null);
+    }
+
+    @Override
+    public boolean canRetrieve(ConnectionInfo connectionInfo) {
+        return false;
+    }
+
+    @Override
+    public boolean canRetrieve(Object session) {
+        return false;
+    }
+
+    @Override
+    public CMSObject getParentByNode(CMSObject instance, Object session) 
throws RepositoryAccessException {
+        throw new RepositoryAccessException("Im just a mocker", null);
+    }
+
+}

Added: 
incubator/stanbol/trunk/cmsadapter/core/src/test/java/org/apache/stanbol/cmsadapter/core/decorated/MockOnlineAccess.java
URL: 
http://svn.apache.org/viewvc/incubator/stanbol/trunk/cmsadapter/core/src/test/java/org/apache/stanbol/cmsadapter/core/decorated/MockOnlineAccess.java?rev=1100114&view=auto
==============================================================================
--- 
incubator/stanbol/trunk/cmsadapter/core/src/test/java/org/apache/stanbol/cmsadapter/core/decorated/MockOnlineAccess.java
 (added)
+++ 
incubator/stanbol/trunk/cmsadapter/core/src/test/java/org/apache/stanbol/cmsadapter/core/decorated/MockOnlineAccess.java
 Fri May  6 07:31:27 2011
@@ -0,0 +1,204 @@
+package org.apache.stanbol.cmsadapter.core.decorated;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import 
org.apache.stanbol.cmsadapter.core.decorated.DobjectFactoryImpTest.CMSObjectBuilder;
+import org.apache.stanbol.cmsadapter.servicesapi.model.web.CMSObject;
+import 
org.apache.stanbol.cmsadapter.servicesapi.model.web.ChildObjectDefinition;
+import org.apache.stanbol.cmsadapter.servicesapi.model.web.ConnectionInfo;
+import org.apache.stanbol.cmsadapter.servicesapi.model.web.ObjectFactory;
+import 
org.apache.stanbol.cmsadapter.servicesapi.model.web.ObjectTypeDefinition;
+import org.apache.stanbol.cmsadapter.servicesapi.model.web.Property;
+import org.apache.stanbol.cmsadapter.servicesapi.model.web.PropertyDefinition;
+import org.apache.stanbol.cmsadapter.servicesapi.repository.RepositoryAccess;
+import 
org.apache.stanbol.cmsadapter.servicesapi.repository.RepositoryAccessException;
+
+public class MockOnlineAccess implements RepositoryAccess {
+
+    private ObjectFactory of = new ObjectFactory();
+
+    public MockOnlineAccess() {
+
+    }
+
+    @Override
+    public Object getSession(ConnectionInfo connectionInfo) throws 
RepositoryAccessException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public List<CMSObject> getNodeByPath(String path, ConnectionInfo 
connectionInfo) throws RepositoryAccessException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public List<CMSObject> getNodeById(String id, ConnectionInfo 
connectionInfo) throws RepositoryAccessException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public List<CMSObject> getNodeByPath(String path, Object session) throws 
RepositoryAccessException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public List<CMSObject> getNodeById(String id, Object session) throws 
RepositoryAccessException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public List<CMSObject> getNodeByName(String name, Object session) throws 
RepositoryAccessException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public List<CMSObject> getNodeByName(String name, ConnectionInfo 
connectionInfo) throws RepositoryAccessException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public CMSObject getFirstNodeByPath(String path, ConnectionInfo 
connectionInfo) throws RepositoryAccessException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public CMSObject getFirstNodeById(String id, ConnectionInfo 
connectionInfo) throws RepositoryAccessException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public CMSObject getFirstNodeByPath(String path, Object session) throws 
RepositoryAccessException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public CMSObject getFirstNodeById(String id, Object session) throws 
RepositoryAccessException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public CMSObject getFirstNodeByName(String name, Object session) throws 
RepositoryAccessException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public CMSObject getFirstNodeByName(String name, ConnectionInfo 
connectionInfo) throws RepositoryAccessException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public List<CMSObject> getChildren(CMSObject node, Object session) throws 
RepositoryAccessException {
+        if (node == null
+            || !node.getUniqueRef().equals(
+                DobjectFactoryImpTest.PREFIX_ROOT + 
DobjectFactoryImpTest.UNIQUE_REF)) {
+            return null;
+
+        } else {
+            CMSObject child1 = new 
CMSObjectBuilder(DobjectFactoryImpTest.PREFIX_CHILD_1).namespace().build();
+            CMSObject child2 = new 
CMSObjectBuilder(DobjectFactoryImpTest.PREFIX_CHILD_2).namespace().build();
+            return Arrays.asList(new CMSObject[] {child1, child2});
+        }
+    }
+
+    @Override
+    public ObjectTypeDefinition getObjectTypeDefinition(String typeRef, Object 
session) throws RepositoryAccessException {
+        // TODO Auto-generated method stub
+        if(typeRef == null){
+            throw new RepositoryAccessException("Null typeRef", null);
+        }
+        return null;
+    }
+
+    @Override
+    public List<Property> getProperties(CMSObject node, Object session) throws 
RepositoryAccessException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public List<PropertyDefinition> 
getPropertyDefinitions(ObjectTypeDefinition instance, Object session) throws 
RepositoryAccessException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public List<ObjectTypeDefinition> 
getParentTypeDefinitions(ObjectTypeDefinition instance, Object session) throws 
RepositoryAccessException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public List<ChildObjectDefinition> 
getChildObjectTypeDefinitions(ObjectTypeDefinition instance,
+                                                                     Object 
session) throws RepositoryAccessException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public ObjectTypeDefinition getAllowableTypeDef(ChildObjectDefinition 
instance, Object session) throws RepositoryAccessException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public CMSObject getContainerObject(Property instance, Object session) 
throws RepositoryAccessException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public PropertyDefinition getPropertyDefinition(Property instance, Object 
session) throws RepositoryAccessException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public String getNamespaceURI(String prefix, Object session) throws 
RepositoryAccessException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public boolean canRetrieve(ConnectionInfo connectionInfo) {
+        // TODO Auto-generated method stub
+        return false;
+    }
+
+    @Override
+    public boolean canRetrieve(Object session) {
+        // TODO Auto-generated method stub
+        return false;
+    }
+
+    @Override
+    public CMSObject getParentByNode(CMSObject instance, Object session) 
throws RepositoryAccessException {
+        // TODO Auto-generated method stub
+        if (instance.getParentRef() == null) {
+            throw new RepositoryAccessException("No parent", null);
+        } else {
+            String ref = instance.getParentRef();
+            CMSObject parent = of.createCMSObject();
+            parent.setLocalname("localname" + ref);
+            parent.setNamespace("namespace" + ref);
+            parent.setParentRef("parent" + ref);
+            parent.setUniqueRef(ref);
+            return parent;
+        }
+    }
+
+}

Added: 
incubator/stanbol/trunk/cmsadapter/servicesapi/src/main/java/org/apache/stanbol/cmsadapter/servicesapi/model/web/decorated/AdapterMode.java
URL: 
http://svn.apache.org/viewvc/incubator/stanbol/trunk/cmsadapter/servicesapi/src/main/java/org/apache/stanbol/cmsadapter/servicesapi/model/web/decorated/AdapterMode.java?rev=1100114&view=auto
==============================================================================
--- 
incubator/stanbol/trunk/cmsadapter/servicesapi/src/main/java/org/apache/stanbol/cmsadapter/servicesapi/model/web/decorated/AdapterMode.java
 (added)
+++ 
incubator/stanbol/trunk/cmsadapter/servicesapi/src/main/java/org/apache/stanbol/cmsadapter/servicesapi/model/web/decorated/AdapterMode.java
 Fri May  6 07:31:27 2011
@@ -0,0 +1,24 @@
+package org.apache.stanbol.cmsadapter.servicesapi.model.web.decorated;
+
+
+public enum AdapterMode {
+
+    /**
+     * In <b>ONLINE</b> mode all the requests that require repository access 
is expected to successfully connect to
+     * repository. Underlying objects from package {@linkplain 
org.apache.stanbol.cmsadapter.servicesapi.model.web}
+     * are not used for accessing.
+     */
+    ONLINE,
+    /**
+     * In <b>TOLERATED OFFLINE</b> mode, a repository connection error will 
not be thrown instead 
+     * existing underlying objects from package {@linkplain 
org.apache.stanbol.cmsadapter.servicesapi.model.web}
+     * will be used.
+     */
+    TOLERATED_OFFLINE,
+    /**
+     * In <b>STRICT OFFLINE</b> repository is never accessed. All the 
information is expected to provided by
+     * underlying objects from package {@linkplain 
org.apache.stanbol.cmsadapter.servicesapi.model.web}.
+     */
+    STRICT_OFFLINE
+
+}
\ No newline at end of file

Modified: 
incubator/stanbol/trunk/cmsadapter/servicesapi/src/main/java/org/apache/stanbol/cmsadapter/servicesapi/model/web/decorated/DChildObjectType.java
URL: 
http://svn.apache.org/viewvc/incubator/stanbol/trunk/cmsadapter/servicesapi/src/main/java/org/apache/stanbol/cmsadapter/servicesapi/model/web/decorated/DChildObjectType.java?rev=1100114&r1=1100113&r2=1100114&view=diff
==============================================================================
--- 
incubator/stanbol/trunk/cmsadapter/servicesapi/src/main/java/org/apache/stanbol/cmsadapter/servicesapi/model/web/decorated/DChildObjectType.java
 (original)
+++ 
incubator/stanbol/trunk/cmsadapter/servicesapi/src/main/java/org/apache/stanbol/cmsadapter/servicesapi/model/web/decorated/DChildObjectType.java
 Fri May  6 07:31:27 2011
@@ -7,6 +7,11 @@ public interface DChildObjectType {
 
     boolean isRequired();
 
+    /**
+     * 
+     * @return Allowed object type declerations, null if 
in<b>STRICT_OFFLINE</b> mode.
+     * @throws RepositoryAccessException if can not access CMS repository in 
<b>ONLINE</b> mode.
+     */
     DObjectType getAllowedObjectDefinitions() throws RepositoryAccessException;
 
     ChildObjectDefinition getInstance();

Modified: 
incubator/stanbol/trunk/cmsadapter/servicesapi/src/main/java/org/apache/stanbol/cmsadapter/servicesapi/model/web/decorated/DObject.java
URL: 
http://svn.apache.org/viewvc/incubator/stanbol/trunk/cmsadapter/servicesapi/src/main/java/org/apache/stanbol/cmsadapter/servicesapi/model/web/decorated/DObject.java?rev=1100114&r1=1100113&r2=1100114&view=diff
==============================================================================
--- 
incubator/stanbol/trunk/cmsadapter/servicesapi/src/main/java/org/apache/stanbol/cmsadapter/servicesapi/model/web/decorated/DObject.java
 (original)
+++ 
incubator/stanbol/trunk/cmsadapter/servicesapi/src/main/java/org/apache/stanbol/cmsadapter/servicesapi/model/web/decorated/DObject.java
 Fri May  6 07:31:27 2011
@@ -19,10 +19,18 @@ public interface DObject {
        
        List<DObject> getChildren() throws RepositoryAccessException;
        
-       //Make list?
+       /**
+        * Fetches parent of the item from CMS repository.
+        * @return parent of the object, null in <b>OFFLINE</b> mode. 
+        * @throws RepositoryAccessException If repository can not be accessed 
in <b>ONLINE</b> mode.
+        */
        DObject getParent() throws RepositoryAccessException;
        
-       //Make list?
+       /**
+        * Fetches object type of the item from CMS repository.
+        * @return Object type of the object, null in <b>OFFLINE</b> mode. 
+        * @throws RepositoryAccessException If repository can not be accessed 
in <b>ONLINE</b> mode.
+        */
        DObjectType getObjectType() throws RepositoryAccessException;
        
        List<DProperty> getProperties() throws RepositoryAccessException;

Modified: 
incubator/stanbol/trunk/cmsadapter/servicesapi/src/main/java/org/apache/stanbol/cmsadapter/servicesapi/model/web/decorated/DObjectAdapter.java
URL: 
http://svn.apache.org/viewvc/incubator/stanbol/trunk/cmsadapter/servicesapi/src/main/java/org/apache/stanbol/cmsadapter/servicesapi/model/web/decorated/DObjectAdapter.java?rev=1100114&r1=1100113&r2=1100114&view=diff
==============================================================================
--- 
incubator/stanbol/trunk/cmsadapter/servicesapi/src/main/java/org/apache/stanbol/cmsadapter/servicesapi/model/web/decorated/DObjectAdapter.java
 (original)
+++ 
incubator/stanbol/trunk/cmsadapter/servicesapi/src/main/java/org/apache/stanbol/cmsadapter/servicesapi/model/web/decorated/DObjectAdapter.java
 Fri May  6 07:31:27 2011
@@ -1,7 +1,7 @@
 package org.apache.stanbol.cmsadapter.servicesapi.model.web.decorated;
 
-import 
org.apache.stanbol.cmsadapter.servicesapi.model.web.ChildObjectDefinition;
 import org.apache.stanbol.cmsadapter.servicesapi.model.web.CMSObject;
+import 
org.apache.stanbol.cmsadapter.servicesapi.model.web.ChildObjectDefinition;
 import 
org.apache.stanbol.cmsadapter.servicesapi.model.web.ObjectTypeDefinition;
 import org.apache.stanbol.cmsadapter.servicesapi.model.web.Property;
 import org.apache.stanbol.cmsadapter.servicesapi.model.web.PropertyDefinition;
@@ -9,15 +9,27 @@ import org.apache.stanbol.cmsadapter.ser
 public interface DObjectAdapter {
 
        DObject wrapAsDObject(CMSObject node);
-       
+
        DObjectType wrapAsDObjectType(ObjectTypeDefinition definition);
-       
-       DPropertyDefinition wrapAsDPropertyDefinition(PropertyDefinition 
propertyDefinition);
-       
-       DChildObjectType wrapAsDChildObjectType(ChildObjectDefinition 
childObjectDefinition);
-       
+
+       DPropertyDefinition wrapAsDPropertyDefinition(
+                       PropertyDefinition propertyDefinition);
+
+       DChildObjectType wrapAsDChildObjectType(
+                       ChildObjectDefinition childObjectDefinition);
+
        DProperty wrapAsDProperty(Property property);
-       
+
        Object getSession();
-       
+
+       /**
+        * Mode must be set before fetching an object from CMS.
+        * Otherwise inconsistent/erroneous behavior can be faced. 
+        * @param mode
+        * @return
+        */
+       void setMode(AdapterMode mode);
+
+       AdapterMode getMode();
+
 }

Modified: 
incubator/stanbol/trunk/cmsadapter/servicesapi/src/main/java/org/apache/stanbol/cmsadapter/servicesapi/model/web/decorated/DProperty.java
URL: 
http://svn.apache.org/viewvc/incubator/stanbol/trunk/cmsadapter/servicesapi/src/main/java/org/apache/stanbol/cmsadapter/servicesapi/model/web/decorated/DProperty.java?rev=1100114&r1=1100113&r2=1100114&view=diff
==============================================================================
--- 
incubator/stanbol/trunk/cmsadapter/servicesapi/src/main/java/org/apache/stanbol/cmsadapter/servicesapi/model/web/decorated/DProperty.java
 (original)
+++ 
incubator/stanbol/trunk/cmsadapter/servicesapi/src/main/java/org/apache/stanbol/cmsadapter/servicesapi/model/web/decorated/DProperty.java
 Fri May  6 07:31:27 2011
@@ -12,8 +12,18 @@ public interface DProperty {
 
     PropType getType();
 
+    /**
+     * 
+     * @return Property definition of property, null if <b>STRICT_OFFLINE</b> 
mode.
+     * @throws RepositoryAccessException if can not access repository in 
<b>ONLINE</> mode.
+     */
     DPropertyDefinition getDefinition() throws RepositoryAccessException;
 
+    /**
+     * 
+     * @return source object of property, null if <b>STRICT_OFFLINE</b> mode.
+     * @throws RepositoryAccessException if can not access repository in 
<b>ONLINE</> mode.
+     */
     DObject getSourceObject() throws RepositoryAccessException;
 
     List<String> getValue();


Reply via email to