You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@chemistry.apache.org by je...@apache.org on 2010/04/16 16:00:25 UTC

svn commit: r934878 [6/13] - in /incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src: main/java/org/apache/chemistry/opencmis/inmemory/ main/java/org/apache/chemistry/opencmis/inmemory/clientprovider/ mai...

Modified: incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/api/Version.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/api/Version.java?rev=934878&r1=934877&r2=934878&view=diff
==============================================================================
--- incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/api/Version.java (original)
+++ incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/api/Version.java Fri Apr 16 14:00:23 2010
@@ -19,27 +19,28 @@
 package org.apache.chemistry.opencmis.inmemory.storedobj.api;
 
 /**
- * The interface version adds the version specific functionality to an object. It 
- * has minor and major versions, stores a comment and has a label
+ * The interface version adds the version specific functionality to an object.
+ * It has minor and major versions, stores a comment and has a label
+ * 
  * @author Jens
- *
+ * 
  */
 public interface Version {
 
-  boolean isMajor();
-  
-  boolean isPwc();
-  
-  /**
-   * make the private working copy an official version.
-   */
-  void commit(boolean isMajor);
-
-  void setCheckinComment(String comment);
-  
-  String getCheckinComment();
-  
-  String getVersionLabel();
-  
-  VersionedDocument getParentDocument();
+	boolean isMajor();
+
+	boolean isPwc();
+
+	/**
+	 * make the private working copy an official version.
+	 */
+	void commit(boolean isMajor);
+
+	void setCheckinComment(String comment);
+
+	String getCheckinComment();
+
+	String getVersionLabel();
+
+	VersionedDocument getParentDocument();
 }

Modified: incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/api/VersionedDocument.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/api/VersionedDocument.java?rev=934878&r1=934877&r2=934878&view=diff
==============================================================================
--- incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/api/VersionedDocument.java (original)
+++ incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/api/VersionedDocument.java Fri Apr 16 14:00:23 2010
@@ -24,43 +24,43 @@ import org.apache.chemistry.opencmis.com
 import org.apache.chemistry.opencmis.commons.enums.VersioningState;
 
 /**
- * A version series is a concrete object (meaning it can be stored) and has 
+ * A version series is a concrete object (meaning it can be stored) and has
  * methods for check-out and checkin. It has a path (is contained in a folder)
  * In contrast to a non-versioned document it has no content, but versions
  * instead.
  * 
  * @author Jens
- *
+ * 
  */
 public interface VersionedDocument extends MultiFiling, StoredObject {
-  
-  DocumentVersion addVersion(ContentStream content, VersioningState verState, String user);
-  
-  /**
-   * delete a version from this object, throw exception if document is checked out
-   * or document does not contain this version
-   * @param version
-   *    version to be removed
-   * @return
-   *    true if version could be removed, and other versions exist,
-   *    false if the deleted version was the last version in this document
-   */
-  boolean deleteVersion(DocumentVersion version);
-  
-  boolean isCheckedOut();
-  
-  void cancelCheckOut(String user);
-  
-  DocumentVersion checkOut(ContentStream content, String user);
-  
-  void checkIn(boolean isMajor, String checkinComment, String user);
-  
-  List<DocumentVersion> getAllVersions();
-  
-  DocumentVersion getLatestVersion(boolean major);
-  
-  String getCheckedOutBy();
-   
-  DocumentVersion getPwc();
+
+	DocumentVersion addVersion(ContentStream content, VersioningState verState, String user);
+
+	/**
+	 * delete a version from this object, throw exception if document is checked
+	 * out or document does not contain this version
+	 * 
+	 * @param version
+	 *            version to be removed
+	 * @return true if version could be removed, and other versions exist, false
+	 *         if the deleted version was the last version in this document
+	 */
+	boolean deleteVersion(DocumentVersion version);
+
+	boolean isCheckedOut();
+
+	void cancelCheckOut(String user);
+
+	DocumentVersion checkOut(ContentStream content, String user);
+
+	void checkIn(boolean isMajor, String checkinComment, String user);
+
+	List<DocumentVersion> getAllVersions();
+
+	DocumentVersion getLatestVersion(boolean major);
+
+	String getCheckedOutBy();
+
+	DocumentVersion getPwc();
 
 }

Modified: incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/AbstractMultiFilingImpl.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/AbstractMultiFilingImpl.java?rev=934878&r1=934877&r2=934878&view=diff
==============================================================================
--- incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/AbstractMultiFilingImpl.java (original)
+++ incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/AbstractMultiFilingImpl.java Fri Apr 16 14:00:23 2010
@@ -29,65 +29,81 @@ import org.apache.chemistry.opencmis.inm
 /**
  * @author Jens
  * 
- * AbstractMultiPathImpl is the common superclass of all objects hold in the repository that 
- * have multiple parent folders, these are: Folders
+ *         AbstractMultiPathImpl is the common superclass of all objects hold in
+ *         the repository that have multiple parent folders, these are: Folders
  */
 public abstract class AbstractMultiFilingImpl extends StoredObjectImpl implements MultiFiling {
 
-  protected List<Folder> fParents = new ArrayList<Folder>(1);
+	protected List<Folder> fParents = new ArrayList<Folder>(1);
 
-  AbstractMultiFilingImpl(ObjectStoreImpl objStore) {
-    super(objStore);
-  }
-
-  /* (non-Javadoc)
-   * @see org.apache.opencmis.inmemory.storedobj.api.MultiParentPath#addParent(org.apache.opencmis.inmemory.storedobj.api.Folder)
-   */
-  public void addParent(Folder parent) {
-    
-    if (parent.hasChild(getName()))
-      throw new IllegalArgumentException(
-          "Cannot assign new parent folder, this name already exists in target folder.");
-
-    if (null == fParents)
-      fParents = new ArrayList<Folder>();
-    
-    fParents.add(parent);
-  }
-
-  
-  /* (non-Javadoc)
-   * @see org.apache.opencmis.inmemory.storedobj.api.MultiParentPath#removeParent(org.apache.opencmis.inmemory.storedobj.api.Folder)
-   */
-  public void removeParent(Folder parent){
-    fParents.remove(parent);
-    if (fParents.isEmpty())
-      fParents = null;
-  }
-  
-  
-  /* (non-Javadoc)
-   * @see org.apache.opencmis.inmemory.storedobj.api.MultiParentPath#getParents()
-   */
-  public List<Folder> getParents() {
-    return fParents;
-  }
-
-  
-  /* (non-Javadoc)
-   * @see org.apache.opencmis.inmemory.storedobj.api.MultiParentPath#getPathSegment()
-   */
-  public String getPathSegment() {
-    return getName();
-  }
-
-  
-  /* (non-Javadoc)
-   * @see org.apache.opencmis.inmemory.storedobj.api.Path#move(org.apache.opencmis.inmemory.storedobj.api.Folder, org.apache.opencmis.inmemory.storedobj.api.Folder)
-   */
-  public void move(Folder oldParent, Folder newParent) {
-    addParent(newParent);
-    removeParent(oldParent);
-  }
+	AbstractMultiFilingImpl(ObjectStoreImpl objStore) {
+		super(objStore);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.apache.opencmis.inmemory.storedobj.api.MultiParentPath#addParent(
+	 * org.apache.opencmis.inmemory.storedobj.api.Folder)
+	 */
+	public void addParent(Folder parent) {
+
+		if (parent.hasChild(getName()))
+			throw new IllegalArgumentException(
+					"Cannot assign new parent folder, this name already exists in target folder.");
+
+		if (null == fParents)
+			fParents = new ArrayList<Folder>();
+
+		fParents.add(parent);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.apache.opencmis.inmemory.storedobj.api.MultiParentPath#removeParent
+	 * (org.apache.opencmis.inmemory.storedobj.api.Folder)
+	 */
+	public void removeParent(Folder parent) {
+		fParents.remove(parent);
+		if (fParents.isEmpty())
+			fParents = null;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.apache.opencmis.inmemory.storedobj.api.MultiParentPath#getParents()
+	 */
+	public List<Folder> getParents() {
+		return fParents;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.apache.opencmis.inmemory.storedobj.api.MultiParentPath#getPathSegment
+	 * ()
+	 */
+	public String getPathSegment() {
+		return getName();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.apache.opencmis.inmemory.storedobj.api.Path#move(org.apache.opencmis
+	 * .inmemory.storedobj.api.Folder,
+	 * org.apache.opencmis.inmemory.storedobj.api.Folder)
+	 */
+	public void move(Folder oldParent, Folder newParent) {
+		addParent(newParent);
+		removeParent(oldParent);
+	}
 
 }

Modified: incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/AbstractSingleFilingImpl.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/AbstractSingleFilingImpl.java?rev=934878&r1=934877&r2=934878&view=diff
==============================================================================
--- incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/AbstractSingleFilingImpl.java (original)
+++ incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/AbstractSingleFilingImpl.java Fri Apr 16 14:00:23 2010
@@ -33,94 +33,100 @@ import org.apache.chemistry.opencmis.inm
  * 
  * @author Jens
  * 
- * AbstractPathImpl is the common superclass of all objects hold in the repository that
- * have a single parent, these are: Folders
+ *         AbstractPathImpl is the common superclass of all objects hold in the
+ *         repository that have a single parent, these are: Folders
  * 
  */
 
-public abstract class AbstractSingleFilingImpl extends StoredObjectImpl implements
-    SingleFiling {
+public abstract class AbstractSingleFilingImpl extends StoredObjectImpl implements SingleFiling {
 
-  protected FolderImpl fParent;
-
-  protected AbstractSingleFilingImpl(ObjectStoreImpl objStore) {
-    super(objStore);
-  }
-    
-  /*
-   * (non-Javadoc)
-   * 
-   * @see org.opencmis.client.provider.spi.inmemory.StoredObjectWithPath#getPath()
-   */
-  public String getPath() {
-    StringBuffer path= new StringBuffer(getName());
-    if (null == getParent())
-      path.replace(0, path.length(), PATH_SEPARATOR); // root folder--> set /
-    else {
-      Folder f = getParent();
-      while (f.getParent() != null) {
-        path.insert(0,  PATH_SEPARATOR);
-        path.insert(0,  f.getName());
-        f = f.getParent();
-      }
-      path.insert(0,  PATH_SEPARATOR);
-    }
-//    if (LOG.isDebugEnabled())
-//      LOG.debug("getPath() returns: " + path.toString());
-    return path.toString();    
-  }
-
-  /*
-   * (non-Javadoc)
-   * 
-   * @see org.opencmis.client.provider.spi.inmemory.StoredObjectWithPath#getParent()
-   */
-  public Folder getParent() {
-    return fParent;
-  }
-  
-  public List<Folder> getParents() {
-    if (null==fParent)
-      return Collections.emptyList();
-    else
-      return Collections.singletonList((Folder)fParent);
-  }
-
-  /* (non-Javadoc)
-   * @see org.opencmis.client.provider.spi.inmemory.storedobj.api.StoredObjectWithPath#setParent(org.opencmis.client.provider.spi.inmemory.storedobj.api.Folder)
-   */
-  public void setParent(Folder parent) {
-    fParent = (FolderImpl) parent;
-  }
-  
-  public void rename(String newName) {
-    if (!NameValidator.isValidId(newName))
-      throw new CmisInvalidArgumentException(NameValidator.ERROR_ILLEGAL_NAME);
-    if (getParent() == null)
-      throw new CmisInvalidArgumentException("Root folder cannot be renamed.");
-    if (getParent().hasChild(newName))
-      throw new CmisNameConstraintViolationException("Cannot rename object to " + newName
-          + ". This path already exists.");
-
-    setName(newName);
-  }
-  
-  public void move(Folder oldParent, Folder newParent) {
-    
-    if (this instanceof Document || this instanceof VersionedDocument)
-      fParent.moveChildDocument(this, oldParent, newParent);    
-    else {// it must be a folder
-      if (getParent() == null)
-        throw new IllegalArgumentException("Root folder cannot be moved.");
-      if (newParent == null)
-        throw new IllegalArgumentException("null is not a valid move target.");
-      if (newParent.hasChild(getName()))
-        throw new IllegalArgumentException(
-            "Cannot move folder, this name already exists in target.");
-
-      setParent(newParent);
-    }
-  }
+	protected FolderImpl fParent;
 
+	protected AbstractSingleFilingImpl(ObjectStoreImpl objStore) {
+		super(objStore);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.opencmis.client.provider.spi.inmemory.StoredObjectWithPath#getPath()
+	 */
+	public String getPath() {
+		StringBuffer path = new StringBuffer(getName());
+		if (null == getParent())
+			path.replace(0, path.length(), PATH_SEPARATOR); // root folder-->
+															// set /
+		else {
+			Folder f = getParent();
+			while (f.getParent() != null) {
+				path.insert(0, PATH_SEPARATOR);
+				path.insert(0, f.getName());
+				f = f.getParent();
+			}
+			path.insert(0, PATH_SEPARATOR);
+		}
+		// if (LOG.isDebugEnabled())
+		// LOG.debug("getPath() returns: " + path.toString());
+		return path.toString();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.opencmis.client.provider.spi.inmemory.StoredObjectWithPath#getParent
+	 * ()
+	 */
+	public Folder getParent() {
+		return fParent;
+	}
+
+	public List<Folder> getParents() {
+		if (null == fParent)
+			return Collections.emptyList();
+		else
+			return Collections.singletonList((Folder) fParent);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.opencmis.client.provider.spi.inmemory.storedobj.api.StoredObjectWithPath
+	 * #
+	 * setParent(org.opencmis.client.provider.spi.inmemory.storedobj.api.Folder)
+	 */
+	public void setParent(Folder parent) {
+		fParent = (FolderImpl) parent;
+	}
+
+	public void rename(String newName) {
+		if (!NameValidator.isValidId(newName))
+			throw new CmisInvalidArgumentException(NameValidator.ERROR_ILLEGAL_NAME);
+		if (getParent() == null)
+			throw new CmisInvalidArgumentException("Root folder cannot be renamed.");
+		if (getParent().hasChild(newName))
+			throw new CmisNameConstraintViolationException("Cannot rename object to " + newName
+					+ ". This path already exists.");
+
+		setName(newName);
+	}
+
+	public void move(Folder oldParent, Folder newParent) {
+
+		if (this instanceof Document || this instanceof VersionedDocument)
+			fParent.moveChildDocument(this, oldParent, newParent);
+		else {// it must be a folder
+			if (getParent() == null)
+				throw new IllegalArgumentException("Root folder cannot be moved.");
+			if (newParent == null)
+				throw new IllegalArgumentException("null is not a valid move target.");
+			if (newParent.hasChild(getName()))
+				throw new IllegalArgumentException("Cannot move folder, this name already exists in target.");
+
+			setParent(newParent);
+		}
+	}
 
 }

Modified: incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/ContentStreamDataImpl.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/ContentStreamDataImpl.java?rev=934878&r1=934877&r2=934878&view=diff
==============================================================================
--- incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/ContentStreamDataImpl.java (original)
+++ incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/ContentStreamDataImpl.java Fri Apr 16 14:00:23 2010
@@ -11,92 +11,91 @@ import org.apache.chemistry.opencmis.com
 
 public class ContentStreamDataImpl implements ContentStream {
 
-  private int fLength;
+	private int fLength;
 
-  private String fMimeType;
+	private String fMimeType;
 
-  private String fFileName;
+	private String fFileName;
 
-  private byte[] fContent;
+	private byte[] fContent;
 
-  private long fStreamLimitOffset;
-
-  private long fStreamLimitLength;
-
-  public void setContent (InputStream in) throws IOException {
-    fStreamLimitOffset = fStreamLimitLength = -1;
-    if (null == in) {
-      fContent = null; // delete content
-      fLength = 0;
-    } else {
-      byte[] buffer = new byte[ 0xFFFF ];
-      ByteArrayOutputStream contentStream = new ByteArrayOutputStream();
-      for ( int len=0; (len = in.read(buffer)) != -1; )  {
-        contentStream.write( buffer, 0, len );
-        fLength += len;
-      }
-      fContent = contentStream.toByteArray();
-      fLength = contentStream.size();
-      contentStream.close();
-      in.close();
-    }
-  }
-
-  public long getLength() {
-    return fLength;
-  }
-
-  public BigInteger getBigLength() {
-    return BigInteger.valueOf(fLength);
-  }
-
-  public String getMimeType() {
-    return fMimeType;
-  }
-
-  public void setMimeType(String fMimeType) {
-    this.fMimeType = fMimeType;
-  }
-
-  public String getFileName() {
-    return fFileName;
-  }
-
-  public void setFileName(String fileName) {
-    this.fFileName = fileName;
-  }
-
-  public String getFilename() {
-    return fFileName;
-  }
-
-  public InputStream getStream() {
-    if (null == fContent)
-      return null;
-    else if (fStreamLimitOffset <= 0 && fStreamLimitLength < 0)
-      return new ByteArrayInputStream(fContent);
-    else
-      return new ByteArrayInputStream(fContent, (int)(fStreamLimitOffset<0 ? 0 : fStreamLimitOffset),
-          (int)(fStreamLimitLength<0 ? fLength : fStreamLimitLength));
-  }
-
-  public ContentStream getCloneWithLimits(long offset, long length) {
-    ContentStreamDataImpl clone = new ContentStreamDataImpl();
-    clone.fFileName = fFileName;
-    clone.fLength = fLength;
-    clone.fContent = fContent;
-    clone.fMimeType = fMimeType;
-    clone.fStreamLimitOffset = offset;
-    clone.fStreamLimitLength = length;
-    return clone;
-  }
-
-
-  public List<Object> getExtensions() {
-    return null;
-  }
-
-  public void setExtensions(List<Object> extensions) {
-    // not implemented
-  }
+	private long fStreamLimitOffset;
+
+	private long fStreamLimitLength;
+
+	public void setContent(InputStream in) throws IOException {
+		fStreamLimitOffset = fStreamLimitLength = -1;
+		if (null == in) {
+			fContent = null; // delete content
+			fLength = 0;
+		} else {
+			byte[] buffer = new byte[0xFFFF];
+			ByteArrayOutputStream contentStream = new ByteArrayOutputStream();
+			for (int len = 0; (len = in.read(buffer)) != -1;) {
+				contentStream.write(buffer, 0, len);
+				fLength += len;
+			}
+			fContent = contentStream.toByteArray();
+			fLength = contentStream.size();
+			contentStream.close();
+			in.close();
+		}
+	}
+
+	public long getLength() {
+		return fLength;
+	}
+
+	public BigInteger getBigLength() {
+		return BigInteger.valueOf(fLength);
+	}
+
+	public String getMimeType() {
+		return fMimeType;
+	}
+
+	public void setMimeType(String fMimeType) {
+		this.fMimeType = fMimeType;
+	}
+
+	public String getFileName() {
+		return fFileName;
+	}
+
+	public void setFileName(String fileName) {
+		this.fFileName = fileName;
+	}
+
+	public String getFilename() {
+		return fFileName;
+	}
+
+	public InputStream getStream() {
+		if (null == fContent)
+			return null;
+		else if (fStreamLimitOffset <= 0 && fStreamLimitLength < 0)
+			return new ByteArrayInputStream(fContent);
+		else
+			return new ByteArrayInputStream(fContent, (int) (fStreamLimitOffset < 0 ? 0 : fStreamLimitOffset),
+					(int) (fStreamLimitLength < 0 ? fLength : fStreamLimitLength));
+	}
+
+	public ContentStream getCloneWithLimits(long offset, long length) {
+		ContentStreamDataImpl clone = new ContentStreamDataImpl();
+		clone.fFileName = fFileName;
+		clone.fLength = fLength;
+		clone.fContent = fContent;
+		clone.fMimeType = fMimeType;
+		clone.fStreamLimitOffset = offset;
+		clone.fStreamLimitLength = length;
+		return clone;
+	}
+
+	public List<Object> getExtensions() {
+		return null;
+	}
+
+	public void setExtensions(List<Object> extensions) {
+		// not implemented
+	}
 }

Modified: incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/DocumentImpl.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/DocumentImpl.java?rev=934878&r1=934877&r2=934878&view=diff
==============================================================================
--- incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/DocumentImpl.java (original)
+++ incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/DocumentImpl.java Fri Apr 16 14:00:23 2010
@@ -32,94 +32,94 @@ import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
 /**
- * InMemory Stored Document A document is a stored object that has a path and (optional) content
- *
+ * InMemory Stored Document A document is a stored object that has a path and
+ * (optional) content
+ * 
  * @author Jens
- *
+ * 
  */
 
 public class DocumentImpl extends AbstractMultiFilingImpl implements Document {
-  private ContentStreamDataImpl fContent;
+	private ContentStreamDataImpl fContent;
 
-  private static final Log LOG = LogFactory.getLog(AbstractSingleFilingImpl.class.getName());
-
-  DocumentImpl(ObjectStoreImpl objStore) { // visibility should be package
-    super(objStore);
-  }
-
-  /*
-   * (non-Javadoc)
-   *
-   * @see org.opencmis.client.provider.spi.inmemory.IDocument#getContent()
-   */
-  public ContentStream getContent(long offset, long length) {
-    if (null == fContent)
-      return null;
-    else if (offset<=0 && length<0)
-      return fContent;
-    else
-      return fContent.getCloneWithLimits(offset, length);
-  }
-
-  /*
-   * (non-Javadoc)
-   *
-   * @see
-   * org.opencmis.client.provider.spi.inmemory.IDocument#setContent(org.opencmis.client.provider
-   * .ContentStreamData)
-   */
-  public void setContent(ContentStream content, boolean mustPersist) {
-
-    if (null == content) {
-      fContent = null;
-    } else {
-      fContent = new ContentStreamDataImpl();
-      fContent.setFileName(content.getFileName());
-      fContent.setMimeType(content.getMimeType());
-      try {
-        fContent.setContent(content.getStream());
-      }
-      catch (IOException e) {
-        e.printStackTrace();
-        throw new RuntimeException("Failed to get content from InputStream" , e);
-      }
-    }
-  }
-
-  public void fillProperties(Map<String, PropertyData<?>> properties, BindingsObjectFactory objFactory,
-      List<String> requestedIds) {
-
-    super.fillProperties(properties, objFactory, requestedIds);
-
-    // fill the version related properties (versions should override this but the spec requires some
-    // properties always to be set
-
-    if (FilterParser.isContainedInFilter(PropertyIds.IS_IMMUTABLE, requestedIds)) {
-      properties.put(PropertyIds.IS_IMMUTABLE, objFactory.createPropertyBooleanData(PropertyIds.IS_IMMUTABLE, false));
-    }
-
-    // Set the content related properties
-    if (null != fContent) {
-      if (FilterParser.isContainedInFilter(PropertyIds.CONTENT_STREAM_FILE_NAME, requestedIds)) {
-        properties.put(PropertyIds.CONTENT_STREAM_FILE_NAME, objFactory
-            .createPropertyStringData(PropertyIds.CONTENT_STREAM_FILE_NAME, fContent
-                .getFileName()));
-      }
-      // omit: PropertyIds.CMIS_CONTENT_STREAM_ID
-      if (FilterParser.isContainedInFilter(PropertyIds.CONTENT_STREAM_LENGTH, requestedIds)) {
-        properties.put(PropertyIds.CONTENT_STREAM_LENGTH, objFactory
-            .createPropertyIntegerData(PropertyIds.CONTENT_STREAM_LENGTH, fContent.getBigLength()));
-      }
-      if (FilterParser.isContainedInFilter(PropertyIds.CONTENT_STREAM_MIME_TYPE, requestedIds)) {
-        properties.put(PropertyIds.CONTENT_STREAM_MIME_TYPE, objFactory
-            .createPropertyStringData(PropertyIds.CONTENT_STREAM_MIME_TYPE, fContent.getMimeType()));
-      }
-    }
-  }
-
-  public boolean hasContent() {
-    return null != fContent;
-  }
+	private static final Log LOG = LogFactory.getLog(AbstractSingleFilingImpl.class.getName());
 
+	DocumentImpl(ObjectStoreImpl objStore) { // visibility should be package
+		super(objStore);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.opencmis.client.provider.spi.inmemory.IDocument#getContent()
+	 */
+	public ContentStream getContent(long offset, long length) {
+		if (null == fContent)
+			return null;
+		else if (offset <= 0 && length < 0)
+			return fContent;
+		else
+			return fContent.getCloneWithLimits(offset, length);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.opencmis.client.provider.spi.inmemory.IDocument#setContent(org.opencmis
+	 * .client.provider .ContentStreamData)
+	 */
+	public void setContent(ContentStream content, boolean mustPersist) {
+
+		if (null == content) {
+			fContent = null;
+		} else {
+			fContent = new ContentStreamDataImpl();
+			fContent.setFileName(content.getFileName());
+			fContent.setMimeType(content.getMimeType());
+			try {
+				fContent.setContent(content.getStream());
+			} catch (IOException e) {
+				e.printStackTrace();
+				throw new RuntimeException("Failed to get content from InputStream", e);
+			}
+		}
+	}
+
+	public void fillProperties(Map<String, PropertyData<?>> properties, BindingsObjectFactory objFactory,
+			List<String> requestedIds) {
+
+		super.fillProperties(properties, objFactory, requestedIds);
+
+		// fill the version related properties (versions should override this
+		// but the spec requires some
+		// properties always to be set
+
+		if (FilterParser.isContainedInFilter(PropertyIds.IS_IMMUTABLE, requestedIds)) {
+			properties.put(PropertyIds.IS_IMMUTABLE, objFactory.createPropertyBooleanData(PropertyIds.IS_IMMUTABLE,
+					false));
+		}
+
+		// Set the content related properties
+		if (null != fContent) {
+			if (FilterParser.isContainedInFilter(PropertyIds.CONTENT_STREAM_FILE_NAME, requestedIds)) {
+				properties.put(PropertyIds.CONTENT_STREAM_FILE_NAME, objFactory.createPropertyStringData(
+						PropertyIds.CONTENT_STREAM_FILE_NAME, fContent.getFileName()));
+			}
+			// omit: PropertyIds.CMIS_CONTENT_STREAM_ID
+			if (FilterParser.isContainedInFilter(PropertyIds.CONTENT_STREAM_LENGTH, requestedIds)) {
+				properties.put(PropertyIds.CONTENT_STREAM_LENGTH, objFactory.createPropertyIntegerData(
+						PropertyIds.CONTENT_STREAM_LENGTH, fContent.getBigLength()));
+			}
+			if (FilterParser.isContainedInFilter(PropertyIds.CONTENT_STREAM_MIME_TYPE, requestedIds)) {
+				properties.put(PropertyIds.CONTENT_STREAM_MIME_TYPE, objFactory.createPropertyStringData(
+						PropertyIds.CONTENT_STREAM_MIME_TYPE, fContent.getMimeType()));
+			}
+		}
+	}
+
+	public boolean hasContent() {
+		return null != fContent;
+	}
 
 }

Modified: incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/DocumentVersionImpl.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/DocumentVersionImpl.java?rev=934878&r1=934877&r2=934878&view=diff
==============================================================================
--- incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/DocumentVersionImpl.java (original)
+++ incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/DocumentVersionImpl.java Fri Apr 16 14:00:23 2010
@@ -35,207 +35,218 @@ import org.apache.chemistry.opencmis.inm
 
 /**
  * A class representing a single version of a document
- *
+ * 
  * @author Jens
- *
+ * 
  */
 public class DocumentVersionImpl extends StoredObjectImpl implements DocumentVersion {
 
-  private ContentStreamDataImpl fContent;
-  private VersionedDocument fContainer; // the document this version belongs to
-  private String fComment; // checkin comment
-  boolean fIsMajor;
-  boolean fIsPwc; // true if this is the PWC
-
-  public DocumentVersionImpl(String repositoryId, VersionedDocument container, ContentStream content,
-      VersioningState verState, ObjectStoreImpl objStore) {
-    super(objStore);
-    setRepositoryId(repositoryId);
-    fContainer = container;
-    setContent(content, false);
-    fIsMajor = verState == VersioningState.MAJOR;
-    fIsPwc = verState == VersioningState.CHECKEDOUT;
-    fProperties = new HashMap<String, PropertyData<?>>(); // ensure that we have a map
-  }
-
-  public void setContent(ContentStream content, boolean mustPersist) {
-    if (null == content) {
-      fContent = null;
-    } else {
-      fContent = new ContentStreamDataImpl();
-      fContent.setFileName(content.getFileName());
-      fContent.setMimeType(content.getMimeType());
-      try {
-        fContent.setContent(content.getStream());
-      }
-      catch (IOException e) {
-        e.printStackTrace();
-        throw new RuntimeException("Failed to get content from InputStream" , e);
-      }
-    }
-  }
-
-  public void setCheckinComment(String comment) {
-    fComment = comment;
-  }
-
-  public String getCheckinComment() {
-    return fComment;
-  }
-
-  public String getVersionLabel() {
-    int majorNo = 0;
-    int minorNo = 0;
-    List<DocumentVersion> allVersions = fContainer.getAllVersions();
-    for (DocumentVersion ver : allVersions) {
-      if (ver.isMajor()) {
-        ++majorNo;
-        minorNo = 0;
-      } else
-        ++minorNo;
-    }
-    String label = "V " + majorNo + "." + minorNo;
-    return label;
-  }
-
-  public boolean isMajor() {
-    return fIsMajor && !isPwc();
-  }
-
-  public boolean isPwc() {
-    return fIsPwc;
-  }
-
-  public void commit(boolean isMajor) {
-    fIsPwc = false; // unset working copy flag
-    fIsMajor = isMajor;
-  }
-
-  public ContentStream getContent(long offset, long length) {
-    if (offset<=0 && length<0)
-      return fContent;
-    else
-      return fContent.getCloneWithLimits(offset, length);
-  }
-
-  public VersionedDocument getParentDocument() {
-    return fContainer;
-  }
-
-  private boolean isLatestVersion() {
-    List<DocumentVersion> allVers = fContainer.getAllVersions();
-    boolean isLatestVersion;
-    if (isPwc())
-      isLatestVersion = allVers.size()>1 && allVers.get(allVers.size()-2).equals(this);
-    else
-      isLatestVersion = allVers.get(allVers.size()-1).equals(this);
-    return isLatestVersion;
-  }
-
-  private boolean isLatestMajorVersion() {
-    if (!fIsMajor)
-      return false;
-
-    List<DocumentVersion> allVersions = fContainer.getAllVersions();
-    DocumentVersion latestMajor=null;
-
-    for (DocumentVersion ver : allVersions)
-      if (ver.isMajor() && !ver.isPwc())
-        latestMajor = ver;
-
-    boolean isLatestMajorVersion = latestMajor == this;
-    return isLatestMajorVersion;
-  }
-
-//  public void persist() {
-//    if (null==fId)
-//      fId = UUID.randomUUID().toString();
-//  }
-
-  public void fillProperties(Map<String, PropertyData<?>> properties, BindingsObjectFactory objFactory,
-      List<String> requestedIds) {
-
-    DocumentVersion pwc = fContainer.getPwc();
-
-    // First get the properties of the container (like custom type properties, etc)
-    fContainer.fillProperties(properties, objFactory, requestedIds);
-
-    // overwrite the version specific properties (like modification date, user, etc.)
-    // and set some properties specific to the version
-    super.fillProperties(properties, objFactory, requestedIds);
-
-    // fill the version related properties
-    if (FilterParser.isContainedInFilter(PropertyIds.IS_LATEST_VERSION, requestedIds)) {
-      properties.put(PropertyIds.IS_LATEST_VERSION, objFactory.createPropertyBooleanData(PropertyIds.IS_LATEST_VERSION, isLatestVersion()));
-    }
-    if (FilterParser.isContainedInFilter(PropertyIds.IS_MAJOR_VERSION, requestedIds)) {
-      properties.put(PropertyIds.IS_MAJOR_VERSION, objFactory.createPropertyBooleanData(PropertyIds.IS_MAJOR_VERSION, fIsMajor));
-    }
-    if (FilterParser.isContainedInFilter(PropertyIds.IS_LATEST_MAJOR_VERSION, requestedIds)) {
-      properties.put(PropertyIds.IS_LATEST_MAJOR_VERSION, objFactory.createPropertyBooleanData(PropertyIds.IS_LATEST_MAJOR_VERSION, isLatestMajorVersion()));
-    }
-    if (FilterParser.isContainedInFilter(PropertyIds.VERSION_SERIES_ID, requestedIds)) {
-      properties.put(PropertyIds.VERSION_SERIES_ID, objFactory.createPropertyIdData(PropertyIds.VERSION_SERIES_ID, fContainer.getId()));
-    }
-    if (FilterParser.isContainedInFilter(PropertyIds.IS_VERSION_SERIES_CHECKED_OUT, requestedIds)) {
-      properties.put(PropertyIds.IS_VERSION_SERIES_CHECKED_OUT, objFactory.createPropertyBooleanData(PropertyIds.IS_VERSION_SERIES_CHECKED_OUT, fContainer.isCheckedOut()));
-    }
-    if (FilterParser.isContainedInFilter(PropertyIds.VERSION_SERIES_CHECKED_OUT_BY, requestedIds)) {
-      properties.put(PropertyIds.VERSION_SERIES_CHECKED_OUT_BY, objFactory.createPropertyStringData(PropertyIds.VERSION_SERIES_CHECKED_OUT_BY, fContainer.getCheckedOutBy()));
-    }
-    if (FilterParser.isContainedInFilter(PropertyIds.VERSION_SERIES_CHECKED_OUT_ID, requestedIds)) {
-      properties.put(PropertyIds.VERSION_SERIES_CHECKED_OUT_ID, objFactory.createPropertyIdData(PropertyIds.VERSION_SERIES_CHECKED_OUT_ID, pwc == null ? null : pwc.getId()));
-    }
-    if (FilterParser.isContainedInFilter(PropertyIds.CHECKIN_COMMENT, requestedIds)) {
-      properties.put(PropertyIds.CHECKIN_COMMENT, objFactory.createPropertyStringData(PropertyIds.CHECKIN_COMMENT, fComment));
-    }
-    if (FilterParser.isContainedInFilter(PropertyIds.VERSION_LABEL, requestedIds)) {
-      properties.put(PropertyIds.VERSION_LABEL, objFactory.createPropertyStringData(PropertyIds.VERSION_LABEL, getVersionLabel()));
-    }
-
-    // Set the content related properties
-    if (null != fContent) {
-      if (FilterParser.isContainedInFilter(PropertyIds.CONTENT_STREAM_FILE_NAME, requestedIds)) {
-        properties.put(PropertyIds.CONTENT_STREAM_FILE_NAME, objFactory
-            .createPropertyStringData(PropertyIds.CONTENT_STREAM_FILE_NAME, fContent
-                .getFileName()));
-      }
-
-      // omit: PropertyIds.CMIS_CONTENT_STREAM_ID
-
-      if (FilterParser.isContainedInFilter(PropertyIds.CONTENT_STREAM_LENGTH, requestedIds)) {
-        properties.put(PropertyIds.CONTENT_STREAM_LENGTH, objFactory
-            .createPropertyIntegerData(PropertyIds.CONTENT_STREAM_LENGTH, fContent.getBigLength()));
-      }
-      if (FilterParser.isContainedInFilter(PropertyIds.CONTENT_STREAM_MIME_TYPE, requestedIds)) {
-        properties.put(PropertyIds.CONTENT_STREAM_MIME_TYPE, objFactory
-            .createPropertyStringData(PropertyIds.CONTENT_STREAM_MIME_TYPE, fContent.getMimeType()));
-      }
-    }
-  }
-
-  public List<Folder> getParents() {
-    return fContainer.getParents();
-  }
-
-  public String getPathSegment() {
-    return fContainer.getPathSegment();
-  }
-
-  public void move(Folder oldParent, Folder newParent) {
-    fContainer.move(oldParent, newParent);
-  }
-
-  public void addParent(Folder parent) {
-    fContainer.addParent(parent);
-  }
-
-  public void removeParent(Folder parent) {
-    fContainer.removeParent(parent);
-  }
-
-  public boolean hasContent() {
-    return null != fContent;
-  }
+	private ContentStreamDataImpl fContent;
+	private VersionedDocument fContainer; // the document this version belongs
+											// to
+	private String fComment; // checkin comment
+	boolean fIsMajor;
+	boolean fIsPwc; // true if this is the PWC
+
+	public DocumentVersionImpl(String repositoryId, VersionedDocument container, ContentStream content,
+			VersioningState verState, ObjectStoreImpl objStore) {
+		super(objStore);
+		setRepositoryId(repositoryId);
+		fContainer = container;
+		setContent(content, false);
+		fIsMajor = verState == VersioningState.MAJOR;
+		fIsPwc = verState == VersioningState.CHECKEDOUT;
+		fProperties = new HashMap<String, PropertyData<?>>(); // ensure that we
+																// have a map
+	}
+
+	public void setContent(ContentStream content, boolean mustPersist) {
+		if (null == content) {
+			fContent = null;
+		} else {
+			fContent = new ContentStreamDataImpl();
+			fContent.setFileName(content.getFileName());
+			fContent.setMimeType(content.getMimeType());
+			try {
+				fContent.setContent(content.getStream());
+			} catch (IOException e) {
+				e.printStackTrace();
+				throw new RuntimeException("Failed to get content from InputStream", e);
+			}
+		}
+	}
+
+	public void setCheckinComment(String comment) {
+		fComment = comment;
+	}
+
+	public String getCheckinComment() {
+		return fComment;
+	}
+
+	public String getVersionLabel() {
+		int majorNo = 0;
+		int minorNo = 0;
+		List<DocumentVersion> allVersions = fContainer.getAllVersions();
+		for (DocumentVersion ver : allVersions) {
+			if (ver.isMajor()) {
+				++majorNo;
+				minorNo = 0;
+			} else
+				++minorNo;
+		}
+		String label = "V " + majorNo + "." + minorNo;
+		return label;
+	}
+
+	public boolean isMajor() {
+		return fIsMajor && !isPwc();
+	}
+
+	public boolean isPwc() {
+		return fIsPwc;
+	}
+
+	public void commit(boolean isMajor) {
+		fIsPwc = false; // unset working copy flag
+		fIsMajor = isMajor;
+	}
+
+	public ContentStream getContent(long offset, long length) {
+		if (offset <= 0 && length < 0)
+			return fContent;
+		else
+			return fContent.getCloneWithLimits(offset, length);
+	}
+
+	public VersionedDocument getParentDocument() {
+		return fContainer;
+	}
+
+	private boolean isLatestVersion() {
+		List<DocumentVersion> allVers = fContainer.getAllVersions();
+		boolean isLatestVersion;
+		if (isPwc())
+			isLatestVersion = allVers.size() > 1 && allVers.get(allVers.size() - 2).equals(this);
+		else
+			isLatestVersion = allVers.get(allVers.size() - 1).equals(this);
+		return isLatestVersion;
+	}
+
+	private boolean isLatestMajorVersion() {
+		if (!fIsMajor)
+			return false;
+
+		List<DocumentVersion> allVersions = fContainer.getAllVersions();
+		DocumentVersion latestMajor = null;
+
+		for (DocumentVersion ver : allVersions)
+			if (ver.isMajor() && !ver.isPwc())
+				latestMajor = ver;
+
+		boolean isLatestMajorVersion = latestMajor == this;
+		return isLatestMajorVersion;
+	}
+
+	// public void persist() {
+	// if (null==fId)
+	// fId = UUID.randomUUID().toString();
+	// }
+
+	public void fillProperties(Map<String, PropertyData<?>> properties, BindingsObjectFactory objFactory,
+			List<String> requestedIds) {
+
+		DocumentVersion pwc = fContainer.getPwc();
+
+		// First get the properties of the container (like custom type
+		// properties, etc)
+		fContainer.fillProperties(properties, objFactory, requestedIds);
+
+		// overwrite the version specific properties (like modification date,
+		// user, etc.)
+		// and set some properties specific to the version
+		super.fillProperties(properties, objFactory, requestedIds);
+
+		// fill the version related properties
+		if (FilterParser.isContainedInFilter(PropertyIds.IS_LATEST_VERSION, requestedIds)) {
+			properties.put(PropertyIds.IS_LATEST_VERSION, objFactory.createPropertyBooleanData(
+					PropertyIds.IS_LATEST_VERSION, isLatestVersion()));
+		}
+		if (FilterParser.isContainedInFilter(PropertyIds.IS_MAJOR_VERSION, requestedIds)) {
+			properties.put(PropertyIds.IS_MAJOR_VERSION, objFactory.createPropertyBooleanData(
+					PropertyIds.IS_MAJOR_VERSION, fIsMajor));
+		}
+		if (FilterParser.isContainedInFilter(PropertyIds.IS_LATEST_MAJOR_VERSION, requestedIds)) {
+			properties.put(PropertyIds.IS_LATEST_MAJOR_VERSION, objFactory.createPropertyBooleanData(
+					PropertyIds.IS_LATEST_MAJOR_VERSION, isLatestMajorVersion()));
+		}
+		if (FilterParser.isContainedInFilter(PropertyIds.VERSION_SERIES_ID, requestedIds)) {
+			properties.put(PropertyIds.VERSION_SERIES_ID, objFactory.createPropertyIdData(
+					PropertyIds.VERSION_SERIES_ID, fContainer.getId()));
+		}
+		if (FilterParser.isContainedInFilter(PropertyIds.IS_VERSION_SERIES_CHECKED_OUT, requestedIds)) {
+			properties.put(PropertyIds.IS_VERSION_SERIES_CHECKED_OUT, objFactory.createPropertyBooleanData(
+					PropertyIds.IS_VERSION_SERIES_CHECKED_OUT, fContainer.isCheckedOut()));
+		}
+		if (FilterParser.isContainedInFilter(PropertyIds.VERSION_SERIES_CHECKED_OUT_BY, requestedIds)) {
+			properties.put(PropertyIds.VERSION_SERIES_CHECKED_OUT_BY, objFactory.createPropertyStringData(
+					PropertyIds.VERSION_SERIES_CHECKED_OUT_BY, fContainer.getCheckedOutBy()));
+		}
+		if (FilterParser.isContainedInFilter(PropertyIds.VERSION_SERIES_CHECKED_OUT_ID, requestedIds)) {
+			properties.put(PropertyIds.VERSION_SERIES_CHECKED_OUT_ID, objFactory.createPropertyIdData(
+					PropertyIds.VERSION_SERIES_CHECKED_OUT_ID, pwc == null ? null : pwc.getId()));
+		}
+		if (FilterParser.isContainedInFilter(PropertyIds.CHECKIN_COMMENT, requestedIds)) {
+			properties.put(PropertyIds.CHECKIN_COMMENT, objFactory.createPropertyStringData(
+					PropertyIds.CHECKIN_COMMENT, fComment));
+		}
+		if (FilterParser.isContainedInFilter(PropertyIds.VERSION_LABEL, requestedIds)) {
+			properties.put(PropertyIds.VERSION_LABEL, objFactory.createPropertyStringData(PropertyIds.VERSION_LABEL,
+					getVersionLabel()));
+		}
+
+		// Set the content related properties
+		if (null != fContent) {
+			if (FilterParser.isContainedInFilter(PropertyIds.CONTENT_STREAM_FILE_NAME, requestedIds)) {
+				properties.put(PropertyIds.CONTENT_STREAM_FILE_NAME, objFactory.createPropertyStringData(
+						PropertyIds.CONTENT_STREAM_FILE_NAME, fContent.getFileName()));
+			}
+
+			// omit: PropertyIds.CMIS_CONTENT_STREAM_ID
+
+			if (FilterParser.isContainedInFilter(PropertyIds.CONTENT_STREAM_LENGTH, requestedIds)) {
+				properties.put(PropertyIds.CONTENT_STREAM_LENGTH, objFactory.createPropertyIntegerData(
+						PropertyIds.CONTENT_STREAM_LENGTH, fContent.getBigLength()));
+			}
+			if (FilterParser.isContainedInFilter(PropertyIds.CONTENT_STREAM_MIME_TYPE, requestedIds)) {
+				properties.put(PropertyIds.CONTENT_STREAM_MIME_TYPE, objFactory.createPropertyStringData(
+						PropertyIds.CONTENT_STREAM_MIME_TYPE, fContent.getMimeType()));
+			}
+		}
+	}
+
+	public List<Folder> getParents() {
+		return fContainer.getParents();
+	}
+
+	public String getPathSegment() {
+		return fContainer.getPathSegment();
+	}
+
+	public void move(Folder oldParent, Folder newParent) {
+		fContainer.move(oldParent, newParent);
+	}
+
+	public void addParent(Folder parent) {
+		fContainer.addParent(parent);
+	}
+
+	public void removeParent(Folder parent) {
+		fContainer.removeParent(parent);
+	}
+
+	public boolean hasContent() {
+		return null != fContent;
+	}
 
 }

Modified: incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/FolderImpl.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/FolderImpl.java?rev=934878&r1=934877&r2=934878&view=diff
==============================================================================
--- incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/FolderImpl.java (original)
+++ incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/FolderImpl.java Fri Apr 16 14:00:23 2010
@@ -24,207 +24,206 @@ import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
 public class FolderImpl extends AbstractSingleFilingImpl implements Folder {
-  private static final Log LOG = LogFactory.getLog(AbstractSingleFilingImpl.class.getName());
+	private static final Log LOG = LogFactory.getLog(AbstractSingleFilingImpl.class.getName());
 
-  FolderImpl(ObjectStoreImpl objStore) {
-    super(objStore);
-  }
-
-  public FolderImpl(ObjectStoreImpl objStore, String name, Folder parent) {
-    super(objStore);
-    init(name, parent);
-  }
-
-  public void addChildFolder(Folder folder) {
-    boolean hasChild;
-    String name = folder.getName();
-    hasChild = hasChild(name);
-    if (hasChild)
-      throw new RuntimeException("Cannot create folder " + name
-          + ". Name already exists in parent folder");
-    folder.setParent(this);
-    folder.persist();
-  }
-
-  /*
-   * (non-Javadoc)
-   * 
-   * @see
-   * org.opencmis.client.provider.spi.inmemory.IFolder#addChildDocument(org.opencmis.client.provider
-   * .spi.inmemory.storedobj.impl.DocumentImpl)
-   */
-  public void addChildDocument(Document doc) {
-    addChildObject(doc);
-  }
-
-  public void addChildDocument(VersionedDocument doc) {
-    addChildObject(doc);
-  }
-  
-  private void addChildObject(StoredObject so) {
-    String name = so.getName();
-    if (!NameValidator.isValidId(name))
-      throw new CmisInvalidArgumentException(NameValidator.ERROR_ILLEGAL_NAME);
-
-    boolean hasChild;
-    hasChild = hasChild(name);
-    if (hasChild)
-      throw new RuntimeException("Cannot create document " + name
-          + ". Name already exists in parent folder");
-
-    if (so instanceof SingleFiling)
-      ((SingleFiling)so).setParent(this);
-    else if (so instanceof MultiFiling)
-      ((MultiFiling)so).addParent(this);
-    else 
-      throw new RuntimeException("Cannot create document, object is not fileable.");
-      
-    so.persist();
-  }
-  
-  /*
-   * (non-Javadoc)
-   * 
-   * @see org.opencmis.client.provider.spi.inmemory.IFolder#getChildren()
-   */
-  public List<StoredObject> getChildren(int maxItems, int skipCount) {
-    List<StoredObject> result = new ArrayList<StoredObject>();
-    for (String id : fObjStore.getIds()) {
-      StoredObject obj = fObjStore.getObject(id);
-      Filing pathObj = (Filing) obj;
-      if (pathObj.getParents().contains(this)) {
-        if (pathObj instanceof VersionedDocument) {
-          DocumentVersion ver = ((VersionedDocument) pathObj).getLatestVersion(false);
-          result.add(ver);
-          } else if (pathObj instanceof DocumentVersion) {
-          // ignore
-        } else {
-          result.add(obj);
-        }
-      }
-    }
-    sortFolderList(result);
-
-    if (maxItems < 0)
-      maxItems = result.size();
-    if (skipCount < 0)
-      skipCount = 0;
-    int from = Math.min(skipCount, result.size());
-    int to = Math.min(maxItems + from, result.size());
-    result = result.subList(from, to);
-    return result;
-  }
-
-  /*
-   * (non-Javadoc)
-   * 
-   * @see org.opencmis.client.provider.spi.inmemory.IFolder#getFolderChildren()
-   */
-  public List<Folder> getFolderChildren(int maxItems, int skipCount) {
-    List<Folder> result = new ArrayList<Folder>();
-    for (String id : fObjStore.getIds()) {
-      StoredObject obj = fObjStore.getObject(id);
-      if (obj instanceof SingleFiling) {
-        SingleFiling pathObj = (SingleFiling) obj;
-        if (pathObj.getParent() == this && pathObj instanceof Folder)
-          result.add((Folder)obj);
-      }
-    }
-    sortFolderList(result);
-    int from = Math.min(skipCount, result.size());
-    int to = Math.min(maxItems + from, result.size());
-    result = result.subList(from, to);
-    return result;
-  }
-
-  /*
-   * (non-Javadoc)
-   * 
-   * @see org.opencmis.client.provider.spi.inmemory.IFolder#hasChild(java.lang.String)
-   */
-  public boolean hasChild(String name) {
-    for (String id : fObjStore.getIds()) {
-      StoredObject obj = fObjStore.getObject(id);
-      if (obj instanceof Filing) {
-        Filing pathObj = (Filing) obj;
-        if (pathObj.getParents().contains(this) && obj.getName().equals(name))
-          return true;
-      }
-    }
-    return false;
-  }
-
-  public void fillProperties(Map<String, PropertyData<?>> properties, BindingsObjectFactory objFactory,
-      List<String> requestedIds) {
-
-    super.fillProperties(properties, objFactory, requestedIds);
-
-    // add folder specific properties
-
-    if (FilterParser.isContainedInFilter(PropertyIds.PARENT_ID, requestedIds)) {
-      String parentId = getParent() == null ? null : getParent().getId();
-      if ( parentId != null )
-        properties.put(PropertyIds.PARENT_ID, objFactory.createPropertyStringData(PropertyIds.PARENT_ID, parentId));
-    }
-
-    if (FilterParser.isContainedInFilter(PropertyIds.ALLOWED_CHILD_OBJECT_TYPE_IDS,
-        requestedIds)) {
-      String allowedChildObjects = "*"; // TODO: not yet supported
-      properties.put(PropertyIds.ALLOWED_CHILD_OBJECT_TYPE_IDS, objFactory.createPropertyStringData(
-          PropertyIds.ALLOWED_CHILD_OBJECT_TYPE_IDS, allowedChildObjects));
-    }
-
-    if (FilterParser.isContainedInFilter(PropertyIds.PATH, requestedIds)) {
-      String path = getPath();
-      properties.put(PropertyIds.PATH, objFactory.createPropertyStringData(PropertyIds.PATH, path));
-    }
-  }
-
-  // Helper functions
-  private void init(String name, Folder parent) {
-    if (!NameValidator.isValidId(name))
-      throw new CmisInvalidArgumentException(NameValidator.ERROR_ILLEGAL_NAME);
-    setName(name);
-    setParent(parent);
-  }
-
-  private void sortFolderList(List<? extends StoredObject> list) {
-
-    // TODO evaluate orderBy, for now sort by path segment
-    class FolderComparator implements Comparator<StoredObject> {
-
-      public int compare(StoredObject f1, StoredObject f2) {
-        String segment1 = f1.getName();
-        String segment2 = f2.getName();
-
-        return segment1.compareTo(segment2);
-      }
-    }
-
-    Collections.sort(list, new FolderComparator());
-  }
-
-  public void moveChildDocument(StoredObject so, Folder oldParent, Folder newParent) {
-    if (newParent.hasChild(so.getName()))
-      throw new IllegalArgumentException(
-          "Cannot move object, this name already exists in target.");
-    if (!(so instanceof Filing))
-      throw new IllegalArgumentException(
-      "Cannot move object, object does not have a path.");
-    
-    if (so instanceof SingleFiling) {
-      SingleFiling pathObj = (SingleFiling) so;
-      pathObj.setParent(newParent);
-    } else if (so instanceof MultiFiling) {
-      MultiFiling pathObj = (MultiFiling) so;
-      pathObj.addParent(newParent);
-      pathObj.removeParent(oldParent);      
-    }
-  }
-
-  public List<String> getAllowedChildObjectTypeIds() {
-    // TODO implement this.
-    return null;
-  }
+	FolderImpl(ObjectStoreImpl objStore) {
+		super(objStore);
+	}
+
+	public FolderImpl(ObjectStoreImpl objStore, String name, Folder parent) {
+		super(objStore);
+		init(name, parent);
+	}
+
+	public void addChildFolder(Folder folder) {
+		boolean hasChild;
+		String name = folder.getName();
+		hasChild = hasChild(name);
+		if (hasChild)
+			throw new RuntimeException("Cannot create folder " + name + ". Name already exists in parent folder");
+		folder.setParent(this);
+		folder.persist();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.opencmis.client.provider.spi.inmemory.IFolder#addChildDocument(org
+	 * .opencmis.client.provider .spi.inmemory.storedobj.impl.DocumentImpl)
+	 */
+	public void addChildDocument(Document doc) {
+		addChildObject(doc);
+	}
+
+	public void addChildDocument(VersionedDocument doc) {
+		addChildObject(doc);
+	}
+
+	private void addChildObject(StoredObject so) {
+		String name = so.getName();
+		if (!NameValidator.isValidId(name))
+			throw new CmisInvalidArgumentException(NameValidator.ERROR_ILLEGAL_NAME);
+
+		boolean hasChild;
+		hasChild = hasChild(name);
+		if (hasChild)
+			throw new RuntimeException("Cannot create document " + name + ". Name already exists in parent folder");
+
+		if (so instanceof SingleFiling)
+			((SingleFiling) so).setParent(this);
+		else if (so instanceof MultiFiling)
+			((MultiFiling) so).addParent(this);
+		else
+			throw new RuntimeException("Cannot create document, object is not fileable.");
+
+		so.persist();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.opencmis.client.provider.spi.inmemory.IFolder#getChildren()
+	 */
+	public List<StoredObject> getChildren(int maxItems, int skipCount) {
+		List<StoredObject> result = new ArrayList<StoredObject>();
+		for (String id : fObjStore.getIds()) {
+			StoredObject obj = fObjStore.getObject(id);
+			Filing pathObj = (Filing) obj;
+			if (pathObj.getParents().contains(this)) {
+				if (pathObj instanceof VersionedDocument) {
+					DocumentVersion ver = ((VersionedDocument) pathObj).getLatestVersion(false);
+					result.add(ver);
+				} else if (pathObj instanceof DocumentVersion) {
+					// ignore
+				} else {
+					result.add(obj);
+				}
+			}
+		}
+		sortFolderList(result);
+
+		if (maxItems < 0)
+			maxItems = result.size();
+		if (skipCount < 0)
+			skipCount = 0;
+		int from = Math.min(skipCount, result.size());
+		int to = Math.min(maxItems + from, result.size());
+		result = result.subList(from, to);
+		return result;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.opencmis.client.provider.spi.inmemory.IFolder#getFolderChildren()
+	 */
+	public List<Folder> getFolderChildren(int maxItems, int skipCount) {
+		List<Folder> result = new ArrayList<Folder>();
+		for (String id : fObjStore.getIds()) {
+			StoredObject obj = fObjStore.getObject(id);
+			if (obj instanceof SingleFiling) {
+				SingleFiling pathObj = (SingleFiling) obj;
+				if (pathObj.getParent() == this && pathObj instanceof Folder)
+					result.add((Folder) obj);
+			}
+		}
+		sortFolderList(result);
+		int from = Math.min(skipCount, result.size());
+		int to = Math.min(maxItems + from, result.size());
+		result = result.subList(from, to);
+		return result;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.opencmis.client.provider.spi.inmemory.IFolder#hasChild(java.lang.
+	 * String)
+	 */
+	public boolean hasChild(String name) {
+		for (String id : fObjStore.getIds()) {
+			StoredObject obj = fObjStore.getObject(id);
+			if (obj instanceof Filing) {
+				Filing pathObj = (Filing) obj;
+				if (pathObj.getParents().contains(this) && obj.getName().equals(name))
+					return true;
+			}
+		}
+		return false;
+	}
+
+	public void fillProperties(Map<String, PropertyData<?>> properties, BindingsObjectFactory objFactory,
+			List<String> requestedIds) {
+
+		super.fillProperties(properties, objFactory, requestedIds);
+
+		// add folder specific properties
+
+		if (FilterParser.isContainedInFilter(PropertyIds.PARENT_ID, requestedIds)) {
+			String parentId = getParent() == null ? null : getParent().getId();
+			if (parentId != null)
+				properties.put(PropertyIds.PARENT_ID, objFactory.createPropertyStringData(PropertyIds.PARENT_ID,
+						parentId));
+		}
+
+		if (FilterParser.isContainedInFilter(PropertyIds.ALLOWED_CHILD_OBJECT_TYPE_IDS, requestedIds)) {
+			String allowedChildObjects = "*"; // TODO: not yet supported
+			properties.put(PropertyIds.ALLOWED_CHILD_OBJECT_TYPE_IDS, objFactory.createPropertyStringData(
+					PropertyIds.ALLOWED_CHILD_OBJECT_TYPE_IDS, allowedChildObjects));
+		}
+
+		if (FilterParser.isContainedInFilter(PropertyIds.PATH, requestedIds)) {
+			String path = getPath();
+			properties.put(PropertyIds.PATH, objFactory.createPropertyStringData(PropertyIds.PATH, path));
+		}
+	}
+
+	// Helper functions
+	private void init(String name, Folder parent) {
+		if (!NameValidator.isValidId(name))
+			throw new CmisInvalidArgumentException(NameValidator.ERROR_ILLEGAL_NAME);
+		setName(name);
+		setParent(parent);
+	}
+
+	private void sortFolderList(List<? extends StoredObject> list) {
+
+		// TODO evaluate orderBy, for now sort by path segment
+		class FolderComparator implements Comparator<StoredObject> {
+
+			public int compare(StoredObject f1, StoredObject f2) {
+				String segment1 = f1.getName();
+				String segment2 = f2.getName();
+
+				return segment1.compareTo(segment2);
+			}
+		}
+
+		Collections.sort(list, new FolderComparator());
+	}
+
+	public void moveChildDocument(StoredObject so, Folder oldParent, Folder newParent) {
+		if (newParent.hasChild(so.getName()))
+			throw new IllegalArgumentException("Cannot move object, this name already exists in target.");
+		if (!(so instanceof Filing))
+			throw new IllegalArgumentException("Cannot move object, object does not have a path.");
+
+		if (so instanceof SingleFiling) {
+			SingleFiling pathObj = (SingleFiling) so;
+			pathObj.setParent(newParent);
+		} else if (so instanceof MultiFiling) {
+			MultiFiling pathObj = (MultiFiling) so;
+			pathObj.addParent(newParent);
+			pathObj.removeParent(oldParent);
+		}
+	}
+
+	public List<String> getAllowedChildObjectTypeIds() {
+		// TODO implement this.
+		return null;
+	}
 
 }
\ No newline at end of file

Modified: incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/ObjectStoreImpl.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/ObjectStoreImpl.java?rev=934878&r1=934877&r2=934878&view=diff
==============================================================================
--- incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/ObjectStoreImpl.java (original)
+++ incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/ObjectStoreImpl.java Fri Apr 16 14:00:23 2010
@@ -47,241 +47,242 @@ import org.apache.chemistry.opencmis.inm
 
 public class ObjectStoreImpl implements ObjectStore {
 
-  /**
-   * Simple id generator that uses just an integer 
-   */
-  private static int NEXT_UNUSED_ID = 100;
-  
-  /**
-   * Maps the absolute folder path to the corresponding folder object
-   */
-  private Map<String, StoredObject> fStoredObjectMap = new HashMap<String, StoredObject>();
-  final String fRepositoryId; 
-  FolderImpl fRootFolder = null;
-
-  public ObjectStoreImpl(String repositoryId) {
-    fRepositoryId = repositoryId;
-    createRootFolder();
-  }
-
-  private static synchronized Integer getNextId() {
-    return NEXT_UNUSED_ID++;
-  }
-  
-
-  /*
-   * (non-Javadoc)
-   * 
-   * @see org.opencmis.client.provider.spi.inmemory.storedobj.impl.ObjectStore#getRootFolder()
-   */
-  public Folder getRootFolder() {
-    return fRootFolder;
-  }
-
-  /*
-   * (non-Javadoc)
-   * 
-   * @see
-   * org.opencmis.client.provider.spi.inmemory.storedobj.impl.ObjectStore#getFolderByPath(java.lang
-   * .String)
-   */
-  public StoredObject getObjectByPath(String path) {
-    
-    for (StoredObject so : fStoredObjectMap.values()) {
-      if (so instanceof SingleFiling) {
-        String soPath = ((SingleFiling) so).getPath();
-        if (soPath.equals(path))
-          return so;
-      }
-      else if (so instanceof MultiFiling) {
-        MultiFiling mfo = (MultiFiling)so;
-        List<Folder> parents = mfo.getParents();
-        for (Folder parent : parents) {
-          String parentPath = parent.getPath();
-          String mfPath = parentPath.equals(Folder.PATH_SEPARATOR) ? parentPath
-              + mfo.getPathSegment() : parentPath + Folder.PATH_SEPARATOR + mfo.getPathSegment();
-          if (mfPath.equals(path))
-            return so;
-        }
-      }
-      else
-        return null;
-    }
-    return null;
-  }
-
-  /*
-   * (non-Javadoc)
-   * 
-   * @see
-   * org.opencmis.client.provider.spi.inmemory.storedobj.impl.ObjectStore#getObjectById(java.lang
-   * .String)
-   */
-  public StoredObject getObjectById(String objectId) {
-    // we use path as id so we just can look it up in the map
-    StoredObject so = fStoredObjectMap.get(objectId);
-    return so;
-  }
-
- /*
-   * (non-Javadoc)
-   * 
-   * @see
-   * org.opencmis.client.provider.spi.inmemory.storedobj.impl.ObjectStore#deleteObject(java.lang
-   * .String)
-   */
-  public void deleteObject(String objectId) {
-    String path = objectId; // currently the same
-    StoredObject obj = fStoredObjectMap.get(path);
-
-    if (null == obj)
-      throw new RuntimeException("Cannot delete object with id  " + objectId
-          + ". Object does not exist.");
-
-    if (obj instanceof FolderImpl) {
-      deleteFolder(objectId);
-    }
-    else if (obj instanceof DocumentVersion ){
-      DocumentVersion vers = (DocumentVersion) obj;
-      VersionedDocument parentDoc = vers.getParentDocument();
-      fStoredObjectMap.remove(path);
-      boolean otherVersionsExist =  vers.getParentDocument().deleteVersion(vers);
-      if (!otherVersionsExist)
-        fStoredObjectMap.remove(parentDoc.getId());
-    }
-    else {
-      fStoredObjectMap.remove(path);
-    }
-  }
-  public void removeVersion(DocumentVersion vers) {
-    StoredObject found = fStoredObjectMap.remove(vers.getId());
-
-    if (null == found)
-      throw new RuntimeException("Cannot delete object with id  " + vers.getId()
-          + ". Object does not exist.");    
-  }
-  
-//  public void changePath(StoredObject obj, String oldPath, String newPath) {
-//    fStoredObjectMap.remove(oldPath);
-//    fStoredObjectMap.put(newPath, obj);
-//  }
-
-  // /////////////////////////////////////////
-  // methods used by folders and documents, but not for public use
-  
-//  void storeObject(String id, StoredObject sop) {
-//    fStoredObjectMap.put(id, sop);
-//  }
-
-  public String storeObject(StoredObject so) {    
-    String id = so.getId();
-    // check if update or create
-    if (null == id)
-      id = getNextId().toString();
-    fStoredObjectMap.put(id, so);
-    return id;
-  }
-  
-  StoredObject getObject(String id) {
-    return fStoredObjectMap.get(id);
-  }
-
-  void removeObject(String id) {
-    fStoredObjectMap.remove(id);
-  }
-  
-  Set<String> getIds() {
-   Set<String> entries = fStoredObjectMap.keySet();
-   return entries;
-  }
-  
-//  void renameAllIdsWithPrefix(String oldPath, String newPath) {
-//    Iterator<Entry<String, StoredObject>> it = fStoredObjectMap.entrySet().iterator();
-//    Map<String, StoredObject> newMap = new HashMap<String, StoredObject>();
-//    while (it.hasNext()) {
-//      Map.Entry<String, StoredObject> entry = (Map.Entry<String, StoredObject>) it
-//          .next();
-//
-//      if (entry.getKey().startsWith(oldPath)) {
-//        if (entry.getValue() instanceof Path) {
-//          newPath = ((Path)entry.getValue()).getPath();
-//          it.remove(); // the only safe way to modify while iteration
-//          newMap.put(newPath, entry.getValue()); // we can't add to the current collection while
-//                                                 // iterating          
-//        }
-//      }
-//    }
-//    fStoredObjectMap.putAll(newMap); // add all at once when iteration is complete  
-//  }
-  
-  // /////////////////////////////////////////
-  // private helper methods
-
-  private void createRootFolder() {
-    FolderImpl rootFolder = new FolderImpl(this);
-    rootFolder.setName("RootFolder");
-    rootFolder.setParent(null);
-    rootFolder.setTypeId(BaseTypeId.CMIS_FOLDER.value());
-    rootFolder.setCreatedBy("Admin");
-    rootFolder.setModifiedBy("Admin");
-    rootFolder.setModifiedAtNow();
-    rootFolder.setRepositoryId(fRepositoryId);
-    rootFolder.persist();
-    fRootFolder =  rootFolder;
-  }
-
-  public Document createDocument(String name) {
-    Document doc = new DocumentImpl(this);
-    doc.setRepositoryId(fRepositoryId);
-    doc.setName(name);
-    return doc;
-  }
-
-  public VersionedDocument createVersionedDocument(String name) {
-    VersionedDocument doc = new VersionedDocumentImpl(this);
-    doc.setRepositoryId(fRepositoryId);
-    doc.setName(name);
-    return doc;
-  }
-
-  public Folder createFolder(String name) {
-    Folder folder = new FolderImpl(this, name, null);;
-    folder.setRepositoryId(fRepositoryId);
-    return folder;
-  }
-
-  public List<VersionedDocument> getCheckedOutDocuments(String orderBy) {
-    List<VersionedDocument> res = new ArrayList<VersionedDocument>();
-    
-    for (StoredObject so : fStoredObjectMap.values() ) {
-      if (so instanceof VersionedDocument) {
-        VersionedDocument verDoc = (VersionedDocument) so;
-        if (verDoc.isCheckedOut()) {
-          res.add(verDoc);
-        }
-      }
-    }
-    
-    return res;
-  }
-  
-  private void deleteFolder(String folderId) {
-    StoredObject folder = fStoredObjectMap.get(folderId);
-    if (folder == null)
-      throw new RuntimeException("Unknown object with id:  " + folderId);
-
-    if (!(folder instanceof FolderImpl)) {
-        throw new RuntimeException("Cannot delete folder with id:  " + folderId
-            + ". Object exists but is not a folder.");
-    }
-
-    // check if children exist
-    List<StoredObject> children = ((Folder)folder).getChildren(-1, -1);
-    if (children!=null && !children.isEmpty())
-      throw new CmisConstraintException("Cannot delete folder with id:  " + folderId
-          + ". Folder is not empty.");
-      
-    fStoredObjectMap.remove(folderId);    
-  }
+	/**
+	 * Simple id generator that uses just an integer
+	 */
+	private static int NEXT_UNUSED_ID = 100;
+
+	/**
+	 * Maps the absolute folder path to the corresponding folder object
+	 */
+	private Map<String, StoredObject> fStoredObjectMap = new HashMap<String, StoredObject>();
+	final String fRepositoryId;
+	FolderImpl fRootFolder = null;
+
+	public ObjectStoreImpl(String repositoryId) {
+		fRepositoryId = repositoryId;
+		createRootFolder();
+	}
+
+	private static synchronized Integer getNextId() {
+		return NEXT_UNUSED_ID++;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.opencmis.client.provider.spi.inmemory.storedobj.impl.ObjectStore#
+	 * getRootFolder()
+	 */
+	public Folder getRootFolder() {
+		return fRootFolder;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.opencmis.client.provider.spi.inmemory.storedobj.impl.ObjectStore#
+	 * getFolderByPath(java.lang .String)
+	 */
+	public StoredObject getObjectByPath(String path) {
+
+		for (StoredObject so : fStoredObjectMap.values()) {
+			if (so instanceof SingleFiling) {
+				String soPath = ((SingleFiling) so).getPath();
+				if (soPath.equals(path))
+					return so;
+			} else if (so instanceof MultiFiling) {
+				MultiFiling mfo = (MultiFiling) so;
+				List<Folder> parents = mfo.getParents();
+				for (Folder parent : parents) {
+					String parentPath = parent.getPath();
+					String mfPath = parentPath.equals(Folder.PATH_SEPARATOR) ? parentPath + mfo.getPathSegment()
+							: parentPath + Folder.PATH_SEPARATOR + mfo.getPathSegment();
+					if (mfPath.equals(path))
+						return so;
+				}
+			} else
+				return null;
+		}
+		return null;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.opencmis.client.provider.spi.inmemory.storedobj.impl.ObjectStore#
+	 * getObjectById(java.lang .String)
+	 */
+	public StoredObject getObjectById(String objectId) {
+		// we use path as id so we just can look it up in the map
+		StoredObject so = fStoredObjectMap.get(objectId);
+		return so;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.opencmis.client.provider.spi.inmemory.storedobj.impl.ObjectStore#
+	 * deleteObject(java.lang .String)
+	 */
+	public void deleteObject(String objectId) {
+		String path = objectId; // currently the same
+		StoredObject obj = fStoredObjectMap.get(path);
+
+		if (null == obj)
+			throw new RuntimeException("Cannot delete object with id  " + objectId + ". Object does not exist.");
+
+		if (obj instanceof FolderImpl) {
+			deleteFolder(objectId);
+		} else if (obj instanceof DocumentVersion) {
+			DocumentVersion vers = (DocumentVersion) obj;
+			VersionedDocument parentDoc = vers.getParentDocument();
+			fStoredObjectMap.remove(path);
+			boolean otherVersionsExist = vers.getParentDocument().deleteVersion(vers);
+			if (!otherVersionsExist)
+				fStoredObjectMap.remove(parentDoc.getId());
+		} else {
+			fStoredObjectMap.remove(path);
+		}
+	}
+
+	public void removeVersion(DocumentVersion vers) {
+		StoredObject found = fStoredObjectMap.remove(vers.getId());
+
+		if (null == found)
+			throw new RuntimeException("Cannot delete object with id  " + vers.getId() + ". Object does not exist.");
+	}
+
+	// public void changePath(StoredObject obj, String oldPath, String newPath)
+	// {
+	// fStoredObjectMap.remove(oldPath);
+	// fStoredObjectMap.put(newPath, obj);
+	// }
+
+	// /////////////////////////////////////////
+	// methods used by folders and documents, but not for public use
+
+	// void storeObject(String id, StoredObject sop) {
+	// fStoredObjectMap.put(id, sop);
+	// }
+
+	public String storeObject(StoredObject so) {
+		String id = so.getId();
+		// check if update or create
+		if (null == id)
+			id = getNextId().toString();
+		fStoredObjectMap.put(id, so);
+		return id;
+	}
+
+	StoredObject getObject(String id) {
+		return fStoredObjectMap.get(id);
+	}
+
+	void removeObject(String id) {
+		fStoredObjectMap.remove(id);
+	}
+
+	Set<String> getIds() {
+		Set<String> entries = fStoredObjectMap.keySet();
+		return entries;
+	}
+
+	// void renameAllIdsWithPrefix(String oldPath, String newPath) {
+	// Iterator<Entry<String, StoredObject>> it =
+	// fStoredObjectMap.entrySet().iterator();
+	// Map<String, StoredObject> newMap = new HashMap<String, StoredObject>();
+	// while (it.hasNext()) {
+	// Map.Entry<String, StoredObject> entry = (Map.Entry<String, StoredObject>)
+	// it
+	// .next();
+	//
+	// if (entry.getKey().startsWith(oldPath)) {
+	// if (entry.getValue() instanceof Path) {
+	// newPath = ((Path)entry.getValue()).getPath();
+	// it.remove(); // the only safe way to modify while iteration
+	// newMap.put(newPath, entry.getValue()); // we can't add to the current
+	// collection while
+	// // iterating
+	// }
+	// }
+	// }
+	// fStoredObjectMap.putAll(newMap); // add all at once when iteration is
+	// complete
+	// }
+
+	// /////////////////////////////////////////
+	// private helper methods
+
+	private void createRootFolder() {
+		FolderImpl rootFolder = new FolderImpl(this);
+		rootFolder.setName("RootFolder");
+		rootFolder.setParent(null);
+		rootFolder.setTypeId(BaseTypeId.CMIS_FOLDER.value());
+		rootFolder.setCreatedBy("Admin");
+		rootFolder.setModifiedBy("Admin");
+		rootFolder.setModifiedAtNow();
+		rootFolder.setRepositoryId(fRepositoryId);
+		rootFolder.persist();
+		fRootFolder = rootFolder;
+	}
+
+	public Document createDocument(String name) {
+		Document doc = new DocumentImpl(this);
+		doc.setRepositoryId(fRepositoryId);
+		doc.setName(name);
+		return doc;
+	}
+
+	public VersionedDocument createVersionedDocument(String name) {
+		VersionedDocument doc = new VersionedDocumentImpl(this);
+		doc.setRepositoryId(fRepositoryId);
+		doc.setName(name);
+		return doc;
+	}
+
+	public Folder createFolder(String name) {
+		Folder folder = new FolderImpl(this, name, null);
+		;
+		folder.setRepositoryId(fRepositoryId);
+		return folder;
+	}
+
+	public List<VersionedDocument> getCheckedOutDocuments(String orderBy) {
+		List<VersionedDocument> res = new ArrayList<VersionedDocument>();
+
+		for (StoredObject so : fStoredObjectMap.values()) {
+			if (so instanceof VersionedDocument) {
+				VersionedDocument verDoc = (VersionedDocument) so;
+				if (verDoc.isCheckedOut()) {
+					res.add(verDoc);
+				}
+			}
+		}
+
+		return res;
+	}
+
+	private void deleteFolder(String folderId) {
+		StoredObject folder = fStoredObjectMap.get(folderId);
+		if (folder == null)
+			throw new RuntimeException("Unknown object with id:  " + folderId);
+
+		if (!(folder instanceof FolderImpl)) {
+			throw new RuntimeException("Cannot delete folder with id:  " + folderId
+					+ ". Object exists but is not a folder.");
+		}
+
+		// check if children exist
+		List<StoredObject> children = ((Folder) folder).getChildren(-1, -1);
+		if (children != null && !children.isEmpty())
+			throw new CmisConstraintException("Cannot delete folder with id:  " + folderId + ". Folder is not empty.");
+
+		fStoredObjectMap.remove(folderId);
+	}
 
 }

Modified: incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/StoreManagerFactory.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/StoreManagerFactory.java?rev=934878&r1=934877&r2=934878&view=diff
==============================================================================
--- incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/StoreManagerFactory.java (original)
+++ incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-inmemory/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/StoreManagerFactory.java Fri Apr 16 14:00:23 2010
@@ -29,41 +29,38 @@ import org.apache.commons.logging.LogFac
  */
 
 public class StoreManagerFactory {
-  private static Log log = LogFactory.getLog(StoreManagerFactory.class);
+	private static Log log = LogFactory.getLog(StoreManagerFactory.class);
 
-  public static StoreManager createInstance(String className) {
+	public static StoreManager createInstance(String className) {
 
-    Class<?> clazz = null;
-    try {
-      clazz = Class.forName(className);
-    }
-    catch (ClassNotFoundException e) {
-      String msg = "Failed to create StoredObjectCreator, class " + className + " does not exist.";
-      log.error(msg, e);
-      e.printStackTrace();
-      throw new RuntimeException(msg, e);
-    }
-
-    Object obj = null;
-    try {
-      obj = clazz.newInstance();
-    }
-    catch (InstantiationException e) {
-      log.error("Failed to create StoredObjectCreator from class " + className, e);
-      e.printStackTrace();
-    }
-    catch (IllegalAccessException e) {
-      log.error("Failed to create StoredObjectCreator from class " + className, e);
-      e.printStackTrace();
-    }
-
-    if (obj instanceof StoreManager)
-      return (StoreManager) obj;
-    else {
-      log.error("Failed to create StoredObjectCreator, class " + className
-          + " does not implement interface StoredObjectCreator");
-      return null;
-    }
-  }
+		Class<?> clazz = null;
+		try {
+			clazz = Class.forName(className);
+		} catch (ClassNotFoundException e) {
+			String msg = "Failed to create StoredObjectCreator, class " + className + " does not exist.";
+			log.error(msg, e);
+			e.printStackTrace();
+			throw new RuntimeException(msg, e);
+		}
+
+		Object obj = null;
+		try {
+			obj = clazz.newInstance();
+		} catch (InstantiationException e) {
+			log.error("Failed to create StoredObjectCreator from class " + className, e);
+			e.printStackTrace();
+		} catch (IllegalAccessException e) {
+			log.error("Failed to create StoredObjectCreator from class " + className, e);
+			e.printStackTrace();
+		}
+
+		if (obj instanceof StoreManager)
+			return (StoreManager) obj;
+		else {
+			log.error("Failed to create StoredObjectCreator, class " + className
+					+ " does not implement interface StoredObjectCreator");
+			return null;
+		}
+	}
 
 }