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 2013/05/24 14:48:22 UTC
svn commit: r1486037 [2/3] - in
/chemistry/opencmis/branches/inmemory-refactoring/src:
main/java/org/apache/chemistry/opencmis/inmemory/
main/java/org/apache/chemistry/opencmis/inmemory/query/
main/java/org/apache/chemistry/opencmis/inmemory/server/ ma...
Modified: chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/ContentStreamDataImpl.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/ContentStreamDataImpl.java?rev=1486037&r1=1486036&r2=1486037&view=diff
==============================================================================
--- chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/ContentStreamDataImpl.java (original)
+++ chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/ContentStreamDataImpl.java Fri May 24 12:48:21 2013
@@ -121,15 +121,18 @@ public class ContentStreamDataImpl imple
LOG.debug("setting content stream, new size total " + (TOTAL_LENGTH / (1024 * 1024)) + "MB.");
}
- public long getLength() {
+ @Override
+ public long getLength() {
return fLength;
}
- public BigInteger getBigLength() {
+ @Override
+ public BigInteger getBigLength() {
return BigInteger.valueOf(fLength);
}
- public String getMimeType() {
+ @Override
+ public String getMimeType() {
return fMimeType;
}
@@ -137,7 +140,8 @@ public class ContentStreamDataImpl imple
this.fMimeType = fMimeType;
}
- public String getFileName() {
+ @Override
+ public String getFileName() {
return fFileName;
}
@@ -149,7 +153,8 @@ public class ContentStreamDataImpl imple
return fFileName;
}
- public InputStream getStream() {
+ @Override
+ public InputStream getStream() {
if (null == fContent) {
return null;
} else if (fStreamLimitOffset <= 0 && fStreamLimitLength < 0) {
@@ -164,7 +169,8 @@ public class ContentStreamDataImpl imple
this.fLastModified = lastModified;
}
- public GregorianCalendar getLastModified() {
+ @Override
+ public GregorianCalendar getLastModified() {
return fLastModified;
}
@@ -184,11 +190,13 @@ public class ContentStreamDataImpl imple
return fContent;
}
- public List<CmisExtensionElement> getExtensions() {
+ @Override
+ public List<CmisExtensionElement> getExtensions() {
return null;
}
- public void setExtensions(List<CmisExtensionElement> extensions) {
+ @Override
+ public void setExtensions(List<CmisExtensionElement> extensions) {
// not implemented
}
}
Modified: chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/DocumentImpl.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/DocumentImpl.java?rev=1486037&r1=1486036&r2=1486037&view=diff
==============================================================================
--- chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/DocumentImpl.java (original)
+++ chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/DocumentImpl.java Fri May 24 12:48:21 2013
@@ -28,7 +28,6 @@ import org.apache.chemistry.opencmis.com
import org.apache.chemistry.opencmis.commons.data.ContentStream;
import org.apache.chemistry.opencmis.commons.data.PropertyData;
import org.apache.chemistry.opencmis.commons.data.RenditionData;
-import org.apache.chemistry.opencmis.commons.enums.CmisVersion;
import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
import org.apache.chemistry.opencmis.commons.exceptions.CmisStorageException;
import org.apache.chemistry.opencmis.commons.impl.dataobjects.RenditionDataImpl;
@@ -36,7 +35,6 @@ import org.apache.chemistry.opencmis.com
import org.apache.chemistry.opencmis.inmemory.ConfigConstants;
import org.apache.chemistry.opencmis.inmemory.ConfigurationSettings;
import org.apache.chemistry.opencmis.inmemory.FilterParser;
-import org.apache.chemistry.opencmis.inmemory.server.InMemoryServiceContext;
import org.apache.chemistry.opencmis.inmemory.storedobj.api.Document;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -49,7 +47,7 @@ import org.slf4j.LoggerFactory;
*
*/
-public class DocumentImpl extends AbstractMultiFilingImpl implements Document {
+public class DocumentImpl extends FilingImpl implements Document {
private ContentStreamDataImpl fContent;
private static final Logger LOG = LoggerFactory.getLogger(DocumentImpl.class.getName());
@@ -61,7 +59,8 @@ public class DocumentImpl extends Abstra
super(objStore);
}
- public ContentStream getContent(long offset, long length) {
+ @Override
+ public ContentStream getContent(long offset, long length) {
if (null == fContent) {
return null;
} else if (offset <= 0 && length < 0) {
@@ -71,7 +70,8 @@ public class DocumentImpl extends Abstra
}
}
- public void setContent(ContentStream content, boolean mustPersist) {
+ @Override
+ public void setContent(ContentStream content, boolean mustPersist) {
if (null == content) {
fContent = null;
} else {
@@ -96,7 +96,8 @@ public class DocumentImpl extends Abstra
}
}
- public void appendContent(ContentStream content) {
+ @Override
+ public void appendContent(ContentStream content) {
if (null == content) {
return;
} if (null == fContent) {
@@ -192,7 +193,8 @@ public class DocumentImpl extends Abstra
}
- public boolean hasContent() {
+ @Override
+ public boolean hasContent() {
return null != fContent;
}
Modified: chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/DocumentVersionImpl.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/DocumentVersionImpl.java?rev=1486037&r1=1486036&r2=1486037&view=diff
==============================================================================
--- chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/DocumentVersionImpl.java (original)
+++ chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/DocumentVersionImpl.java Fri May 24 12:48:21 2013
@@ -27,16 +27,13 @@ import java.util.Map.Entry;
import org.apache.chemistry.opencmis.commons.PropertyIds;
import org.apache.chemistry.opencmis.commons.data.ContentStream;
import org.apache.chemistry.opencmis.commons.data.PropertyData;
-import org.apache.chemistry.opencmis.commons.enums.CmisVersion;
import org.apache.chemistry.opencmis.commons.enums.VersioningState;
import org.apache.chemistry.opencmis.commons.exceptions.CmisStorageException;
import org.apache.chemistry.opencmis.commons.spi.BindingsObjectFactory;
import org.apache.chemistry.opencmis.inmemory.ConfigConstants;
import org.apache.chemistry.opencmis.inmemory.ConfigurationSettings;
import org.apache.chemistry.opencmis.inmemory.FilterParser;
-import org.apache.chemistry.opencmis.inmemory.server.InMemoryServiceContext;
import org.apache.chemistry.opencmis.inmemory.storedobj.api.DocumentVersion;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.Folder;
import org.apache.chemistry.opencmis.inmemory.storedobj.api.VersionedDocument;
/**
@@ -45,12 +42,12 @@ import org.apache.chemistry.opencmis.inm
* @author Jens
*
*/
-public class DocumentVersionImpl extends StoredObjectImpl implements DocumentVersion {
+public class DocumentVersionImpl extends StoredObjectImpl implements DocumentVersion, FilingMutable {
private final Long MAX_CONTENT_SIZE_KB = ConfigurationSettings.getConfigurationValueAsLong(ConfigConstants.MAX_CONTENT_SIZE_KB);
private ContentStreamDataImpl fContent;
- private final VersionedDocument fContainer; // the document this version belongs
+ private final VersionedDocumentImpl fContainer; // the document this version belongs
// to
private String fComment; // checkin comment
boolean fIsMajor;
@@ -61,7 +58,7 @@ public class DocumentVersionImpl extends
VersioningState verState, ObjectStoreImpl objStore) {
super(objStore);
setRepositoryId(repositoryId);
- fContainer = container;
+ fContainer = (VersionedDocumentImpl) container;
setContent(content, false);
fIsMajor = verState == VersioningState.MAJOR || verState == null;
fIsPwc = verState == VersioningState.CHECKEDOUT;
@@ -77,7 +74,8 @@ public class DocumentVersionImpl extends
label = createVersionLabel();
}
- public void setContent(ContentStream content, boolean mustPersist) {
+ @Override
+ public void setContent(ContentStream content, boolean mustPersist) {
if (null == content) {
fContent = null;
} else {
@@ -94,7 +92,8 @@ public class DocumentVersionImpl extends
}
}
- public void appendContent(ContentStream content) {
+ @Override
+ public void appendContent(ContentStream content) {
if (null == content) {
return;
} if (null == fContent) {
@@ -109,11 +108,13 @@ public class DocumentVersionImpl extends
}
}
- public void setCheckinComment(String comment) {
+ @Override
+ public void setCheckinComment(String comment) {
fComment = comment;
}
- public String getCheckinComment() {
+ @Override
+ public String getCheckinComment() {
return fComment;
}
@@ -136,20 +137,24 @@ public class DocumentVersionImpl extends
return label;
}
- public boolean isMajor() {
+ @Override
+ public boolean isMajor() {
return fIsMajor && !isPwc();
}
- public boolean isPwc() {
+ @Override
+ public boolean isPwc() {
return fIsPwc;
}
- public void commit(boolean isMajor) {
+ @Override
+ public void commit(boolean isMajor) {
fIsPwc = false; // unset working copy flag
fIsMajor = isMajor;
}
- public ContentStream getContent(long offset, long length) {
+ @Override
+ public ContentStream getContent(long offset, long length) {
if (offset <= 0 && length < 0) {
return fContent;
} else {
@@ -157,7 +162,8 @@ public class DocumentVersionImpl extends
}
}
- public VersionedDocument getParentDocument() {
+ @Override
+ public VersionedDocument getParentDocument() {
return fContainer;
}
@@ -289,41 +295,39 @@ public class DocumentVersionImpl extends
((StoredObjectImpl)fContainer).setAclId(id);
}
- public List<Folder> getParents(String user) {
- return fContainer.getParents(user);
+ @Override
+ public List<String> getParents() {
+ return fContainer.getParents();
}
- public String getPathSegment() {
+ @Override
+ 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);
+ @Override
+ public boolean hasContent() {
+ return null != fContent;
}
- public boolean hasContent() {
- return null != fContent;
+ @Override
+ public boolean hasParent() {
+ return fContainer.hasParent();
}
- public boolean hasParent() {
- return true;
+ @Override
+ public String getVersionLabel() {
+ return label;
}
- public void rename(String newName) {
- super.rename(newName);
- fContainer.setName(newName);
+ @Override
+ public void addParentId(String parentId) {
+ fContainer.addParentId(parentId);
}
- public String getVersionLabel() {
- return label;
+ @Override
+ public void removeParentId(String parentId) {
+ fContainer.removeParentId(parentId);
}
Added: chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/FilingImpl.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/FilingImpl.java?rev=1486037&view=auto
==============================================================================
--- chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/FilingImpl.java (added)
+++ chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/FilingImpl.java Fri May 24 12:48:21 2013
@@ -0,0 +1,59 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.chemistry.opencmis.inmemory.storedobj.impl;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.chemistry.opencmis.inmemory.storedobj.api.Fileable;
+import org.apache.chemistry.opencmis.inmemory.storedobj.api.Filing;
+
+public class FilingImpl extends StoredObjectImpl implements Fileable, FilingMutable {
+
+ private List<String> parentIds = new ArrayList<String>(1);
+
+ FilingImpl(ObjectStoreImpl objStore) {
+ super(objStore);
+ }
+
+ @Override
+ public List<String> getParents() {
+ return parentIds;
+ }
+
+ @Override
+ public boolean hasParent() {
+ return !(null == parentIds || parentIds.isEmpty());
+ }
+
+ @Override
+ public String getPathSegment() {
+ return super.getName();
+ }
+
+ @Override
+ public void addParentId(String parentId) {
+ parentIds.add(parentId);
+ }
+
+ @Override
+ public void removeParentId(String parentId) {
+ parentIds.remove(parentId);
+ }
+}
Added: chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/FilingMutable.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/FilingMutable.java?rev=1486037&view=auto
==============================================================================
--- chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/FilingMutable.java (added)
+++ chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/FilingMutable.java Fri May 24 12:48:21 2013
@@ -0,0 +1,28 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.chemistry.opencmis.inmemory.storedobj.impl;
+
+import org.apache.chemistry.opencmis.inmemory.storedobj.api.Filing;
+
+public interface FilingMutable extends Filing {
+
+ public void addParentId(String parentId);
+
+ public void removeParentId(String parentId);
+}
Modified: chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/FolderImpl.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/FolderImpl.java?rev=1486037&r1=1486036&r2=1486037&view=diff
==============================================================================
--- chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/FolderImpl.java (original)
+++ chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/FolderImpl.java Fri May 24 12:48:21 2013
@@ -25,7 +25,6 @@ import java.io.IOException;
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Collections;
-import java.util.Comparator;
import java.util.List;
import java.util.Map;
@@ -34,161 +33,28 @@ import org.apache.chemistry.opencmis.com
import org.apache.chemistry.opencmis.commons.data.PropertyData;
import org.apache.chemistry.opencmis.commons.data.RenditionData;
import org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisNameConstraintViolationException;
import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
import org.apache.chemistry.opencmis.commons.impl.dataobjects.RenditionDataImpl;
import org.apache.chemistry.opencmis.commons.spi.BindingsObjectFactory;
import org.apache.chemistry.opencmis.inmemory.FilterParser;
import org.apache.chemistry.opencmis.inmemory.NameValidator;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.Document;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.DocumentVersion;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.Filing;
import org.apache.chemistry.opencmis.inmemory.storedobj.api.Folder;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.MultiFiling;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.SingleFiling;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.StoredObject;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.VersionedDocument;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-public class FolderImpl extends AbstractSingleFilingImpl implements Folder {
- private static final Logger LOG = LoggerFactory.getLogger(AbstractSingleFilingImpl.class.getName());
-
+public class FolderImpl extends StoredObjectImpl implements Folder {
+ private static final Logger LOG = LoggerFactory.getLogger(FilingImpl.class.getName());
+ protected String parentId;
+
FolderImpl(ObjectStoreImpl objStore) {
super(objStore);
}
- public FolderImpl(ObjectStoreImpl objStore, String name, Folder parent) {
+ public FolderImpl(ObjectStoreImpl objStore, String name, String parentId) {
super(objStore);
- init(name, parent);
- }
-
- public void addChildFolder(Folder folder) {
- try {
- fObjStore.lock();
- boolean hasChild;
- String name = folder.getName();
- hasChild = hasChild(name);
- if (hasChild) {
- throw new CmisNameConstraintViolationException("Cannot create folder " + name + ". Name already exists in parent folder");
- }
- folder.setParent(this);
- } finally {
- fObjStore.unlock();
- }
- }
-
- /*
- * (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);
- }
-
- public void addChildItem(StoredObject item) {
- addChildObject(item);
+ init(name, parentId);
}
- private void addChildObject(StoredObject so) {
- try {
- fObjStore.lock();
- String name = so.getName();
-
- boolean hasChild;
- hasChild = hasChild(name);
- if (hasChild) {
- throw new CmisNameConstraintViolationException(
- "Cannot create object: " + 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 CmisInvalidArgumentException("Cannot create document, object is not fileable.");
- }
-
- } finally {
- fObjStore.unlock();
- }
- }
-
- public ChildrenResult getChildren(int maxItems, int skipCount, String user) {
- List<StoredObject> result = new ArrayList<StoredObject>();
- for (String id : fObjStore.getIds()) {
- StoredObject obj = fObjStore.getObject(id);
- if (obj instanceof Filing) {
- Filing pathObj = (Filing) obj;
- if (fObjStore.hasReadAccess(user, obj) && pathObj.getParents(user).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());
- int noItems = result.size();
-
- result = result.subList(from, to);
- return new ChildrenResult(result, noItems);
- }
-
- public ChildrenResult getFolderChildren(int maxItems, int skipCount, String user) {
- List<Folder> result = new ArrayList<Folder>();
- for (String id : fObjStore.getIds()) {
- StoredObject obj = fObjStore.getObject(id);
- if (fObjStore.hasReadAccess(user, obj) && 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());
- int noItems = result.size();
-
- result = result.subList(from, to);
- return new ChildrenResult(result, noItems);
- }
-
- 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(null).contains(this) && obj.getName().equals(name)) {
- return true;
- }
- }
- }
- return false;
- }
@Override
public void fillProperties(Map<String, PropertyData<?>> properties, BindingsObjectFactory objFactory,
@@ -199,7 +65,6 @@ public class FolderImpl extends Abstract
// add folder specific properties
if (FilterParser.isContainedInFilter(PropertyIds.PARENT_ID, requestedIds)) {
- String parentId = getParent() == null ? null : getParent().getId();
properties.put(PropertyIds.PARENT_ID, objFactory.createPropertyIdData(PropertyIds.PARENT_ID,
parentId));
}
@@ -216,59 +81,14 @@ public class FolderImpl extends Abstract
}
}
- // Helper functions
- private void init(String name, Folder parent) {
- if (!NameValidator.isValidName(name)) {
- throw new CmisInvalidArgumentException(NameValidator.ERROR_ILLEGAL_NAME);
- }
- setName(name);
- setParent(parent);
- }
-
- private static 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) {
- try {
- fObjStore.lock();
- 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);
- }
- } finally {
- fObjStore.unlock();
- }
- }
-
- public List<String> getAllowedChildObjectTypeIds() {
+ @Override
+ public List<String> getAllowedChildObjectTypeIds() {
// TODO implement this.
return null;
}
- public List<RenditionData> getRenditions(String renditionFilter, long maxItems, long skipCount) {
+ @Override
+ public List<RenditionData> getRenditions(String renditionFilter, long maxItems, long skipCount) {
if (null==renditionFilter)
return null;
String tokenizer = "[\\s;]";
@@ -294,7 +114,8 @@ public class FolderImpl extends Abstract
}
}
- public ContentStream getRenditionContent(String streamId, long offset, long length) {
+ @Override
+ public ContentStream getRenditionContent(String streamId, long offset, long length) {
try {
return getIconFromResourceDir("/folder.png");
} catch (IOException e) {
@@ -303,7 +124,65 @@ public class FolderImpl extends Abstract
}
}
- public boolean hasRendition(String user) {
+ @Override
+ public boolean hasRendition(String user) {
return true;
}
+
+ @Override
+ public List<String> getParents() {
+ if (parentId == null)
+ return Collections.emptyList();
+ else
+ return Collections.singletonList(parentId);
+ }
+
+ @Override
+ public boolean hasParent() {
+ return null != parentId;
+ }
+
+ @Override
+ public String getParentId() {
+ return parentId;
+ }
+
+ @Override
+ public String getPath() {
+ StringBuffer sb = new StringBuffer();
+ insertPathSegment(sb, this);
+ return sb.toString();
+ }
+
+ @Override
+ public String getPathSegment() {
+ return getName();
+ }
+
+ public void setParentId (String parentId) {
+ this.parentId = parentId;
+ }
+
+ private void insertPathSegment(StringBuffer sb, Folder f) {
+ if (null == f.getParentId()) {
+ if (sb.length() == 0) {
+ sb.insert(0, Folder.PATH_SEPARATOR);
+ }
+ } else {
+ sb.insert(0, f.getName());
+ sb.insert(0, Folder.PATH_SEPARATOR);
+ Folder parent = (Folder) fObjStore.getObjectById(f.getParentId());
+ insertPathSegment(sb, parent);
+ }
+ }
+
+ // Helper functions
+ private void init(String name, String parentId) {
+ if (!NameValidator.isValidName(name)) {
+ throw new CmisInvalidArgumentException(NameValidator.ERROR_ILLEGAL_NAME);
+ }
+ setName(name);
+ this.parentId = parentId;;
+ }
+
}
Modified: chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/InMemoryAcl.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/InMemoryAcl.java?rev=1486037&r1=1486036&r2=1486037&view=diff
==============================================================================
--- chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/InMemoryAcl.java (original)
+++ chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/InMemoryAcl.java Fri May 24 12:48:21 2013
@@ -35,7 +35,8 @@ public class InMemoryAcl implements Clon
private static InMemoryAcl DEFAULT_ACL = new InMemoryAcl(new ArrayList<InMemoryAce>() {{ add(InMemoryAce.getDefaultAce()); }} );
private static class AceComparator<T extends InMemoryAce> implements Comparator<T> {
- public int compare(T o1, T o2) {
+ @Override
+ public int compare(T o1, T o2) {
if (null == o1 || null == o2) {
if (o1 == o2)
return 0;
@@ -222,7 +223,8 @@ public class InMemoryAcl implements Clon
return new AccessControlListImpl(commonsAcl);
}
- public InMemoryAcl clone() {
+ @Override
+ public InMemoryAcl clone() {
InMemoryAcl newAcl = new InMemoryAcl(acl);
return newAcl;
}
Modified: chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/ItemImpl.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/ItemImpl.java?rev=1486037&r1=1486036&r2=1486037&view=diff
==============================================================================
--- chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/ItemImpl.java (original)
+++ chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/ItemImpl.java Fri May 24 12:48:21 2013
@@ -18,13 +18,14 @@
*/
package org.apache.chemistry.opencmis.inmemory.storedobj.impl;
+import org.apache.chemistry.opencmis.inmemory.storedobj.api.Filing;
import org.apache.chemistry.opencmis.inmemory.storedobj.api.Item;
/**
* itemImpl is used for CMIS:item objects. Items are fileable but do not have content
*
*/
-public class ItemImpl extends AbstractMultiFilingImpl implements Item {
+public class ItemImpl extends FilingImpl implements Item, Filing {
ItemImpl(ObjectStoreImpl objStore) {
super(objStore);
Modified: chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/ObjectStoreImpl.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/ObjectStoreImpl.java?rev=1486037&r1=1486036&r2=1486037&view=diff
==============================================================================
--- chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/ObjectStoreImpl.java (original)
+++ chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/ObjectStoreImpl.java Fri May 24 12:48:21 2013
@@ -19,6 +19,8 @@
package org.apache.chemistry.opencmis.inmemory.storedobj.impl;
import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -37,30 +39,38 @@ import org.apache.chemistry.opencmis.com
import org.apache.chemistry.opencmis.commons.enums.VersioningState;
import org.apache.chemistry.opencmis.commons.exceptions.CmisConstraintException;
import org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException;
+import org.apache.chemistry.opencmis.commons.exceptions.CmisNameConstraintViolationException;
import org.apache.chemistry.opencmis.commons.exceptions.CmisPermissionDeniedException;
import org.apache.chemistry.opencmis.inmemory.storedobj.api.Document;
import org.apache.chemistry.opencmis.inmemory.storedobj.api.DocumentVersion;
+import org.apache.chemistry.opencmis.inmemory.storedobj.api.Fileable;
+import org.apache.chemistry.opencmis.inmemory.storedobj.api.Filing;
import org.apache.chemistry.opencmis.inmemory.storedobj.api.Folder;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.MultiFiling;
import org.apache.chemistry.opencmis.inmemory.storedobj.api.ObjectStore;
+import org.apache.chemistry.opencmis.inmemory.storedobj.api.ObjectStoreMultiFiling;
import org.apache.chemistry.opencmis.inmemory.storedobj.api.Relationship;
-import org.apache.chemistry.opencmis.inmemory.storedobj.api.SingleFiling;
import org.apache.chemistry.opencmis.inmemory.storedobj.api.StoredObject;
import org.apache.chemistry.opencmis.inmemory.storedobj.api.VersionedDocument;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
/**
- * The object store is the central core of the in-memory repository. It is based on huge HashMap
- * map mapping ids to objects in memory. To allow access from multiple threads a Java concurrent
- * HashMap is used that allows parallel access methods.
+ * The object store is the central core of the in-memory repository. It is based
+ * on huge HashMap map mapping ids to objects in memory. To allow access from
+ * multiple threads a Java concurrent HashMap is used that allows parallel
+ * access methods.
* <p>
- * Certain methods in the in-memory repository must guarantee constraints. For example a folder
- * enforces that each child has a unique name. Therefore certain operations must occur in an
- * atomic manner. In the example it must be guaranteed that no write access occurs to the
- * map between acquiring the iterator to find the children and finishing the add operation when
- * no name conflicts can occur. For this purpose this class has methods to lock an unlock the
- * state of the repository. It is very important that the caller acquiring the lock enforces an
- * unlock under all circumstances. Typical code is:
+ * Certain methods in the in-memory repository must guarantee constraints. For
+ * example a folder enforces that each child has a unique name. Therefore
+ * certain operations must occur in an atomic manner. In the example it must be
+ * guaranteed that no write access occurs to the map between acquiring the
+ * iterator to find the children and finishing the add operation when no name
+ * conflicts can occur. For this purpose this class has methods to lock an
+ * unlock the state of the repository. It is very important that the caller
+ * acquiring the lock enforces an unlock under all circumstances. Typical code
+ * is:
* <p>
+ *
* <pre>
* ObjectStoreImpl os = ... ;
* try {
@@ -69,25 +79,28 @@ import org.apache.chemistry.opencmis.inm
* os.unlock();
* }
* </pre>
- *
- * The locking is very coarse-grained. Productive implementations would probably implement finer
- * grained locks on a folder or document rather than the complete repository.
+ *
+ * The locking is very coarse-grained. Productive implementations would probably
+ * implement finer grained locks on a folder or document rather than the
+ * complete repository.
*/
-public class ObjectStoreImpl implements ObjectStore {
+public class ObjectStoreImpl implements ObjectStore, ObjectStoreMultiFiling {
+
+ private static final Logger LOG = LoggerFactory.getLogger(ObjectStoreImpl.class);
-
/**
* user id for administrator always having all rights
*/
public static final String ADMIN_PRINCIPAL_ID = "Admin";
-
+
/**
* Simple id generator that uses just an integer
*/
private static int NEXT_UNUSED_ID = 100;
/**
- * a concurrent HashMap as core element to hold all objects in the repository
+ * a concurrent HashMap as core element to hold all objects in the
+ * repository
*/
private final Map<String, StoredObject> fStoredObjectMap = new ConcurrentHashMap<String, StoredObject>();
@@ -95,7 +108,7 @@ public class ObjectStoreImpl implements
* a concurrent HashMap to hold all Acls in the repository
*/
private int nextUnusedAclId = 0;
-
+
private final List<InMemoryAcl> fAcls = new ArrayList<InMemoryAcl>();
private final Lock fLock = new ReentrantLock();
@@ -115,48 +128,52 @@ public class ObjectStoreImpl implements
private synchronized Integer getNextAclId() {
return nextUnusedAclId++;
}
-
- public void lock() {
- fLock.lock();
+
+ private void lock() {
+ fLock.lock();
}
- public void unlock() {
- fLock.unlock();
+ private void unlock() {
+ fLock.unlock();
}
+ @Override
public Folder getRootFolder() {
return fRootFolder;
}
+ @Override
public StoredObject getObjectByPath(String path, String user) {
- 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(user);
- 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;
- }
+ StoredObject so = findObjectWithPathInDescendents(path, user, Folder.PATH_SEPARATOR, fRootFolder);
+ return so;
+ }
+
+ private Fileable findObjectWithPathInDescendents(String path, String user, String prefix, Fileable fo) {
+ if (path.equals(prefix)) {
+ return fo;
+ } else if (fo instanceof Folder) {
+ List<Fileable> children = getChildren((Folder) fo);
+ for (Fileable child : children) {
+ String foundPath = prefix.length() == 1 ? prefix + child.getName() : prefix + Folder.PATH_SEPARATOR
+ + child.getName();
+ if (path.startsWith(foundPath)) {
+ Fileable found = findObjectWithPathInDescendents(path, user, foundPath, child);
+ if (null != found)
+ return found; // note that there can be multiple folders with the same prefix like folder1, folder10
}
}
}
return null;
}
+ @Override
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;
}
+ @Override
public void deleteObject(String objectId, Boolean allVersions, String user) {
StoredObject obj = fStoredObjectMap.get(objectId);
@@ -165,7 +182,7 @@ public class ObjectStoreImpl implements
}
if (obj instanceof FolderImpl) {
- deleteFolder(objectId, user);
+ deleteFolder(objectId, user);
} else if (obj instanceof DocumentVersion) {
DocumentVersion vers = (DocumentVersion) obj;
VersionedDocument parentDoc = vers.getParentDocument();
@@ -180,7 +197,7 @@ public class ObjectStoreImpl implements
fStoredObjectMap.remove(objectId);
otherVersionsExists = parentDoc.deleteVersion(vers);
}
-
+
if (!otherVersionsExists) {
fStoredObjectMap.remove(parentDoc.getId());
}
@@ -193,7 +210,8 @@ public class ObjectStoreImpl implements
StoredObject found = fStoredObjectMap.remove(vers.getId());
if (null == found) {
- throw new CmisInvalidArgumentException("Cannot delete object with id " + vers.getId() + ". Object does not exist.");
+ throw new CmisInvalidArgumentException("Cannot delete object with id " + vers.getId()
+ + ". Object does not exist.");
}
}
@@ -223,6 +241,7 @@ public class ObjectStoreImpl implements
/**
* Clear repository and remove all data.
*/
+ @Override
public void clear() {
lock();
fStoredObjectMap.clear();
@@ -230,6 +249,7 @@ public class ObjectStoreImpl implements
unlock();
}
+ @Override
public long getObjectCount() {
return fStoredObjectMap.size();
}
@@ -240,7 +260,7 @@ public class ObjectStoreImpl implements
private void createRootFolder() {
FolderImpl rootFolder = new FolderImpl(this);
rootFolder.setName("RootFolder");
- rootFolder.setParent(null);
+ rootFolder.setParentId(null);
rootFolder.setTypeId(BaseTypeId.CMIS_FOLDER.value());
rootFolder.setCreatedBy("Admin");
rootFolder.setModifiedBy("Admin");
@@ -251,6 +271,7 @@ public class ObjectStoreImpl implements
fRootFolder = rootFolder;
}
+ @Override
public Document createDocument(String name, Map<String, PropertyData<?>> propMap, String user, Folder folder,
List<String> policies, Acl addACEs, Acl removeACEs) {
DocumentImpl doc = new DocumentImpl(this);
@@ -259,8 +280,10 @@ public class ObjectStoreImpl implements
doc.setRepositoryId(fRepositoryId);
doc.setName(name);
if (null != folder) {
- ((FolderImpl) folder).addChildDocument(doc); // add document to
- // folder and
+ if (hasChild(folder, name))
+ throw new CmisNameConstraintViolationException("Cannot create document an object with name " + name
+ + " already exists in folder " + folder.getPath());
+ doc.addParentId(folder.getId());
}
int aclId = getAclId(((FolderImpl) folder), addACEs, removeACEs);
doc.setAclId(aclId);
@@ -269,38 +292,46 @@ public class ObjectStoreImpl implements
return doc;
}
+ @Override
public StoredObject createItem(String name, Map<String, PropertyData<?>> propMap, String user, Folder folder,
List<String> policies, Acl addACEs, Acl removeACEs) {
- StoredObjectImpl item = new ItemImpl(this);
+ ItemImpl item = new ItemImpl(this);
item.createSystemBasePropertiesWhenCreated(propMap, user);
item.setCustomProperties(propMap);
item.setRepositoryId(fRepositoryId);
item.setName(name);
if (null != folder) {
- ((FolderImpl)folder).addChildItem(item); // add document to folder and
+ if (hasChild(folder, name))
+ throw new CmisNameConstraintViolationException("Cannot create document an object with name " + name
+ + " already exists in folder " + folder.getPath());
+ item.addParentId(folder.getId());
}
if (null != policies)
item.setAppliedPolicies(policies);
- int aclId = getAclId(((FolderImpl)folder), addACEs, removeACEs);
+ int aclId = getAclId(((FolderImpl) folder), addACEs, removeACEs);
item.setAclId(aclId);
return item;
}
-
- public DocumentVersion createVersionedDocument(String name,
- Map<String, PropertyData<?>> propMap, String user, Folder folder,
- List<String> policies, Acl addACEs, Acl removeACEs, ContentStream contentStream, VersioningState versioningState) {
- VersionedDocumentImpl doc = new VersionedDocumentImpl(this);
+
+ @Override
+ public DocumentVersion createVersionedDocument(String name, Map<String, PropertyData<?>> propMap, String user,
+ Folder folder, List<String> policies, Acl addACEs, Acl removeACEs, ContentStream contentStream,
+ VersioningState versioningState) {
+ VersionedDocumentImpl doc = new VersionedDocumentImpl(this);
doc.createSystemBasePropertiesWhenCreated(propMap, user);
doc.setCustomProperties(propMap);
doc.setRepositoryId(fRepositoryId);
doc.setName(name);
DocumentVersion version = doc.addVersion(contentStream, versioningState, user);
- if (null != folder) {
- ((FolderImpl)folder).addChildDocument(doc); // add document to folder and set
- }
version.createSystemBasePropertiesWhenCreated(propMap, user);
version.setCustomProperties(propMap);
- int aclId = getAclId(((FolderImpl)folder), addACEs, removeACEs);
+ if (null != folder) {
+ if (hasChild(folder, name))
+ throw new CmisNameConstraintViolationException("Cannot create document an object with name " + name
+ + " already exists in folder " + folder.getPath());
+ doc.addParentId(folder.getId());
+ }
+ int aclId = getAclId(((FolderImpl) folder), addACEs, removeACEs);
doc.setAclId(aclId);
if (null != policies)
doc.setAppliedPolicies(policies);
@@ -308,21 +339,21 @@ public class ObjectStoreImpl implements
return version;
}
- public Folder createFolder(String name,
- Map<String, PropertyData<?>> propMap, String user, Folder parent,
- List<String> policies, Acl addACEs, Acl removeACEs) {
-
- FolderImpl folder = new FolderImpl(this, name, null);
+ @Override
+ public Folder createFolder(String name, Map<String, PropertyData<?>> propMap, String user, Folder parent,
+ List<String> policies, Acl addACEs, Acl removeACEs) {
+
+ if (null != parent && hasChild(parent, name)) {
+ throw new CmisNameConstraintViolationException("Cannot create folder, this name already exists in parent folder.");
+ }
+ FolderImpl folder = new FolderImpl(this, name, parent.getId());
if (null != propMap) {
- folder.createSystemBasePropertiesWhenCreated(propMap, user);
- folder.setCustomProperties(propMap);
+ folder.createSystemBasePropertiesWhenCreated(propMap, user);
+ folder.setCustomProperties(propMap);
}
folder.setRepositoryId(fRepositoryId);
- if (null != parent) {
- ((FolderImpl)parent).addChildFolder(folder); // add document to folder and set
- }
- int aclId = getAclId(((FolderImpl)parent), addACEs, removeACEs);
+ int aclId = getAclId(((FolderImpl) parent), addACEs, removeACEs);
folder.setAclId(aclId);
if (null != policies)
folder.setAppliedPolicies(policies);
@@ -334,8 +365,9 @@ public class ObjectStoreImpl implements
Folder folder = new FolderImpl(this, name, null);
folder.setRepositoryId(fRepositoryId);
return folder;
- }
-
+ }
+
+ @Override
public StoredObject createPolicy(String name, String policyText, Map<String, PropertyData<?>> propMap, String user) {
PolicyImpl policy = new PolicyImpl(this);
policy.createSystemBasePropertiesWhenCreated(propMap, user);
@@ -346,10 +378,11 @@ public class ObjectStoreImpl implements
policy.persist();
return policy;
}
-
- public List<StoredObject> getCheckedOutDocuments(String orderBy,
- String user, IncludeRelationships includeRelationships) {
- List<StoredObject> res = new ArrayList<StoredObject>();
+
+ @Override
+ public List<StoredObject> getCheckedOutDocuments(String orderBy, String user,
+ IncludeRelationships includeRelationships) {
+ List<StoredObject> res = new ArrayList<StoredObject>();
for (StoredObject so : fStoredObjectMap.values()) {
if (so instanceof VersionedDocument) {
@@ -363,9 +396,9 @@ public class ObjectStoreImpl implements
return res;
}
- public StoredObject createRelationship(String name, StoredObject sourceObject,
- StoredObject targetObject, Map<String, PropertyData<?>> propMap,
- String user, Acl addACEs, Acl removeACEs) {
+ @Override
+ public StoredObject createRelationship(String name, StoredObject sourceObject, StoredObject targetObject,
+ Map<String, PropertyData<?>> propMap, String user, Acl addACEs, Acl removeACEs) {
RelationshipImpl rel = new RelationshipImpl(this);
rel.createSystemBasePropertiesWhenCreated(propMap, user);
@@ -380,66 +413,70 @@ public class ObjectStoreImpl implements
rel.setAclId(aclId);
rel.persist();
return rel;
- }
+ }
+ @Override
public List<StoredObject> getRelationships(String objectId, List<String> typeIds, RelationshipDirection direction) {
-
+
List<StoredObject> res = new ArrayList<StoredObject>();
-
+
if (typeIds != null && typeIds.size() > 0) {
for (String typeId : typeIds) {
for (StoredObject so : fStoredObjectMap.values()) {
if (so instanceof Relationship && so.getTypeId().equals(typeId)) {
Relationship ro = (Relationship) so;
- if (ro.getSourceObjectId().equals(objectId) && (RelationshipDirection.EITHER == direction || RelationshipDirection.SOURCE == direction)) {
- res.add(so);
- } else if (ro.getTargetObjectId().equals(objectId) && (RelationshipDirection.EITHER == direction
- || RelationshipDirection.TARGET == direction)) {
+ if (ro.getSourceObjectId().equals(objectId)
+ && (RelationshipDirection.EITHER == direction || RelationshipDirection.SOURCE == direction)) {
+ res.add(so);
+ } else if (ro.getTargetObjectId().equals(objectId)
+ && (RelationshipDirection.EITHER == direction || RelationshipDirection.TARGET == direction)) {
res.add(so);
}
}
}
- }
+ }
} else
res = getAllRelationships(objectId, direction);
return res;
}
+ @Override
public Acl applyAcl(StoredObject so, Acl addAces, Acl removeAces, AclPropagation aclPropagation, String principalId) {
- if (aclPropagation==AclPropagation.OBJECTONLY || !(so instanceof Folder)) {
+ if (aclPropagation == AclPropagation.OBJECTONLY || !(so instanceof Folder)) {
return applyAcl(so, addAces, removeAces);
} else {
- return applyAclRecursive(((Folder)so), addAces, removeAces, principalId);
+ return applyAclRecursive(((Folder) so), addAces, removeAces, principalId);
}
}
-
+
+ @Override
public Acl applyAcl(StoredObject so, Acl acl, AclPropagation aclPropagation, String principalId) {
- if (aclPropagation==AclPropagation.OBJECTONLY || !(so instanceof Folder)) {
+ if (aclPropagation == AclPropagation.OBJECTONLY || !(so instanceof Folder)) {
return applyAcl(so, acl);
} else {
- return applyAclRecursive(((Folder)so), acl, principalId);
+ return applyAclRecursive(((Folder) so), acl, principalId);
}
}
public List<Integer> getAllAclsForUser(String principalId, Permission permission) {
List<Integer> acls = new ArrayList<Integer>();
- for (InMemoryAcl acl: fAcls) {
+ for (InMemoryAcl acl : fAcls) {
if (acl.hasPermission(principalId, permission))
acls.add(acl.getId());
}
return acls;
}
-
+
public Acl getAcl(int aclId) {
InMemoryAcl acl = getInMemoryAcl(aclId);
- return acl==null ? InMemoryAcl.getDefaultAcl().toCommonsAcl() : acl.toCommonsAcl();
+ return acl == null ? InMemoryAcl.getDefaultAcl().toCommonsAcl() : acl.toCommonsAcl();
}
-
+
public int getAclId(StoredObjectImpl so, Acl addACEs, Acl removeACEs) {
InMemoryAcl newAcl;
boolean removeDefaultAcl = false;
int aclId = 0;
-
+
if (so == null) {
newAcl = new InMemoryAcl();
} else {
@@ -448,35 +485,38 @@ public class ObjectStoreImpl implements
if (null == newAcl)
newAcl = new InMemoryAcl();
else
- // copy list so that we can safely change it without effecting the original
- newAcl = new InMemoryAcl(newAcl.getAces());
+ // copy list so that we can safely change it without effecting
+ // the original
+ newAcl = new InMemoryAcl(newAcl.getAces());
}
if (newAcl.size() == 0 && addACEs == null && removeACEs == null)
return 0;
if (null != removeACEs)
- for (Ace ace: removeACEs.getAces()) {
- InMemoryAce inMemAce = new InMemoryAce(ace);
- if (inMemAce.equals(InMemoryAce.getDefaultAce()))
- removeDefaultAcl = true;
- }
-
- if ( so!= null && 0 == aclId && !removeDefaultAcl)
- return 0; // if object grants full access to everyone and it will not be removed we do nothing
+ for (Ace ace : removeACEs.getAces()) {
+ InMemoryAce inMemAce = new InMemoryAce(ace);
+ if (inMemAce.equals(InMemoryAce.getDefaultAce()))
+ removeDefaultAcl = true;
+ }
+
+ if (so != null && 0 == aclId && !removeDefaultAcl)
+ return 0; // if object grants full access to everyone and it will
+ // not be removed we do nothing
// add ACEs
if (null != addACEs)
- for (Ace ace: addACEs.getAces()) {
+ for (Ace ace : addACEs.getAces()) {
InMemoryAce inMemAce = new InMemoryAce(ace);
if (inMemAce.equals(InMemoryAce.getDefaultAce()))
- return 0; // if everyone has full access there is no need to add additional ACLs.
+ return 0; // if everyone has full access there is no need to
+ // add additional ACLs.
newAcl.addAce(inMemAce);
}
-
+
// remove ACEs
if (null != removeACEs)
- for (Ace ace: removeACEs.getAces()) {
+ for (Ace ace : removeACEs.getAces()) {
InMemoryAce inMemAce = new InMemoryAce(ace);
newAcl.removeAce(inMemAce);
}
@@ -486,7 +526,7 @@ public class ObjectStoreImpl implements
else
return 0;
}
-
+
private void deleteFolder(String folderId, String user) {
StoredObject folder = fStoredObjectMap.get(folderId);
if (folder == null) {
@@ -499,7 +539,7 @@ public class ObjectStoreImpl implements
}
// check if children exist
- List<? extends StoredObject> children = ((Folder) folder).getChildren(-1, -1, user).getChildren();
+ List<Fileable> children = getChildren((Folder) folder, -1, -1, user).getChildren();
if (children != null && !children.isEmpty()) {
throw new CmisConstraintException("Cannot delete folder with id: " + folderId + ". Folder is not empty.");
}
@@ -507,33 +547,157 @@ public class ObjectStoreImpl implements
fStoredObjectMap.remove(folderId);
}
- public boolean hasReadAccess(String principalId, StoredObject so) {
+ @Override
+ public ChildrenResult getChildren(Folder folder, int maxItems, int skipCount, String user) {
+ List<Fileable> children = getChildren(folder, user);
+ sortFolderList(children);
+
+ if (maxItems < 0) {
+ maxItems = children.size();
+ }
+ if (skipCount < 0) {
+ skipCount = 0;
+ }
+
+ int from = Math.min(skipCount, children.size());
+ int to = Math.min(maxItems + from, children.size());
+ int noItems = children.size();
+
+ children = children.subList(from, to);
+ return new ChildrenResult(children, noItems);
+ }
+
+ private List<Fileable> getChildren(Folder folder) {
+ return getChildren(folder, null);
+ }
+
+ private List<Fileable> getChildren(Folder folder, String user) {
+ List<Fileable> children = new ArrayList<Fileable>();
+ for (String id : getIds()) {
+ StoredObject obj = getObject(id);
+ if (obj instanceof Fileable) {
+ Fileable pathObj = (Fileable) obj;
+ if ((null == user || hasReadAccess(user, obj)) && pathObj.getParents().contains(folder.getId())) {
+ if (pathObj instanceof VersionedDocument) {
+ DocumentVersion ver = ((VersionedDocument) pathObj).getLatestVersion(false);
+ children.add(ver);
+ } else if (!(pathObj instanceof DocumentVersion)) { // ignore
+ // DocumentVersion
+ children.add(pathObj);
+ }
+ }
+ }
+ }
+ return children;
+ }
+
+ @Override
+ public ChildrenResult getFolderChildren(Folder folder, int maxItems, int skipCount, String user) {
+ List<Fileable> folderChildren = new ArrayList<Fileable>();
+ for (String id : getIds()) {
+ StoredObject obj = getObject(id);
+ if (hasReadAccess(user, obj) && obj instanceof Folder) {
+ Folder childFolder = (Folder) obj;
+ if (childFolder.getParents().contains(folder.getId()) ) {
+ folderChildren.add(childFolder);
+ }
+ }
+ }
+ sortFolderList(folderChildren);
+ int from = Math.min(skipCount, folderChildren.size());
+ int to = Math.min(maxItems + from, folderChildren.size());
+ int noItems = folderChildren.size();
+
+ folderChildren = folderChildren.subList(from, to);
+
+ return new ChildrenResult(folderChildren, noItems);
+ }
+
+ @Override
+ public void move(StoredObject so, Folder oldParent, Folder newParent) {
+ try {
+ if (hasChild(newParent, so.getName())) {
+ throw new CmisInvalidArgumentException("Cannot move object " + so.getName() + " to folder "
+ + newParent.getPath() + ". A child with this name already exists.");
+ }
+ lock();
+ if (so instanceof FilingMutable) {
+ FilingMutable fi = (FilingMutable) so;
+ addParentIntern(fi, newParent);
+ removeParentIntern(fi, oldParent);
+ } else if (so instanceof FolderImpl) {
+ ((FolderImpl) so).setParentId(newParent.getId());
+ }
+ } finally {
+ unlock();
+ }
+ }
+
+ @Override
+ public void rename(Fileable so, String newName) {
+ try {
+ lock();
+ if (so.getId().equals(fRootFolder.getId())) {
+ throw new CmisInvalidArgumentException("Root folder cannot be renamed.");
+ }
+ for (String folderId : so.getParents()) {
+ Folder folder = (Folder) getObjectById(folderId);
+ if (hasChild(folder, newName))
+ throw new CmisNameConstraintViolationException("Cannot rename object to " + newName
+ + ". This path already exists in parent " + folder.getPath() + ".");
+ }
+ so.setName(newName);
+ } finally {
+ unlock();
+ }
+ }
+
+ private boolean hasChild(Folder folder, String name) {
+ List<Fileable> children = getChildren(folder);
+ for (Fileable child : children)
+ if (child.getName().equals(name)) {
+ return true;
+ }
+ return false;
+ }
+
+ @Override
+ public List<String> getParentIds(Filing fileable, String user) {
+ List<String> visibleParents = new ArrayList<String>();
+ List<String> parents = fileable.getParents();
+ for (String id: parents) {
+ StoredObject so = getObjectById(id);
+ if (hasReadAccess(user, so)) {
+ visibleParents.add(id);
+ }
+ }
+ return visibleParents;
+ }
+
+ public boolean hasReadAccess(String principalId, StoredObject so) {
return hasAccess(principalId, so, Permission.READ);
}
-
- public boolean hasWriteAccess(String principalId, StoredObject so) {
+ public boolean hasWriteAccess(String principalId, StoredObject so) {
return hasAccess(principalId, so, Permission.WRITE);
}
-
- public boolean hasAllAccess(String principalId, StoredObject so) {
+ public boolean hasAllAccess(String principalId, StoredObject so) {
return hasAccess(principalId, so, Permission.ALL);
}
-
public void checkReadAccess(String principalId, StoredObject so) {
checkAccess(principalId, so, Permission.READ);
}
-
+
public void checkWriteAccess(String principalId, StoredObject so) {
checkAccess(principalId, so, Permission.WRITE);
}
-
+
public void checkAllAccess(String principalId, StoredObject so) {
checkAccess(principalId, so, Permission.ALL);
}
-
+
private void checkAccess(String principalId, StoredObject so, Permission permission) {
if (!hasAccess(principalId, so, permission))
throw new CmisPermissionDeniedException("Object with id " + so.getId() + " and name " + so.getName()
@@ -543,12 +707,12 @@ public class ObjectStoreImpl implements
private boolean hasAccess(String principalId, StoredObject so, Permission permission) {
if (null != principalId && principalId.equals(ADMIN_PRINCIPAL_ID))
return true;
- List<Integer> aclIds = getAllAclsForUser(principalId, permission);
- return aclIds.contains(((StoredObjectImpl)so).getAclId());
+ List<Integer> aclIds = getAllAclsForUser(principalId, permission);
+ return aclIds.contains(((StoredObjectImpl) so).getAclId());
}
private InMemoryAcl getInMemoryAcl(int aclId) {
-
+
for (InMemoryAcl acl : fAcls) {
if (aclId == acl.getId())
return acl;
@@ -566,28 +730,28 @@ public class ObjectStoreImpl implements
so.setAclId(aclId);
return aclId;
}
-
- /**
- * check if an Acl is already known
- * @param acl
- * acl to be checked
- * @return
- * 0 if Acl is not known, id of Acl otherwise
- */
- private int hasAcl(InMemoryAcl acl) {
- for (InMemoryAcl acl2: fAcls) {
- if (acl2.equals(acl))
- return acl2.getId();
- }
- return -1;
- }
+
+ /**
+ * check if an Acl is already known
+ *
+ * @param acl
+ * acl to be checked
+ * @return 0 if Acl is not known, id of Acl otherwise
+ */
+ private int hasAcl(InMemoryAcl acl) {
+ for (InMemoryAcl acl2 : fAcls) {
+ if (acl2.equals(acl))
+ return acl2.getId();
+ }
+ return -1;
+ }
private int addAcl(InMemoryAcl acl) {
int aclId = -1;
-
+
if (null == acl)
return 0;
-
+
lock();
try {
aclId = hasAcl(acl);
@@ -601,7 +765,7 @@ public class ObjectStoreImpl implements
}
return aclId;
}
-
+
private Acl applyAcl(StoredObject so, Acl acl) {
int aclId = setAcl((StoredObjectImpl) so, acl);
return getAcl(aclId);
@@ -614,60 +778,60 @@ public class ObjectStoreImpl implements
}
private Acl applyAclRecursive(Folder folder, Acl addAces, Acl removeAces, String principalId) {
- List<? extends StoredObject> children = folder.getChildren(-1, -1, ADMIN_PRINCIPAL_ID).getChildren();
-
- Acl result = applyAcl(folder, addAces, removeAces);
+ List<Fileable> children = getChildren(folder, -1, -1, ADMIN_PRINCIPAL_ID).getChildren();
+ Acl result = applyAcl(folder, addAces, removeAces);
if (null == children) {
return result;
}
-
- for (StoredObject child : children) {
+
+ for (Fileable child : children) {
if (hasAllAccess(principalId, child)) {
if (child instanceof Folder) {
- applyAclRecursive((Folder) child, addAces, removeAces, principalId);
+ applyAclRecursive((Folder) child, addAces, removeAces, principalId);
} else {
- applyAcl(child, addAces, removeAces);
+ applyAcl(child, addAces, removeAces);
}
}
}
-
+
return result;
}
-
+
private Acl applyAclRecursive(Folder folder, Acl acl, String principalId) {
- List<? extends StoredObject> children = folder.getChildren(-1, -1, ADMIN_PRINCIPAL_ID).getChildren();
+ List<Fileable> children = getChildren(folder, -1, -1, ADMIN_PRINCIPAL_ID).getChildren();
- Acl result = applyAcl(folder, acl);
+ Acl result = applyAcl(folder, acl);
if (null == children) {
return result;
}
- for (StoredObject child : children) {
+ for (Fileable child : children) {
if (hasAllAccess(principalId, child)) {
if (child instanceof Folder) {
- applyAclRecursive((Folder) child, acl, principalId);
+ applyAclRecursive((Folder) child, acl, principalId);
} else {
- applyAcl(child, acl);
+ applyAcl(child, acl);
}
}
}
-
+
return result;
}
private List<StoredObject> getAllRelationships(String objectId, RelationshipDirection direction) {
-
+
List<StoredObject> res = new ArrayList<StoredObject>();
-
+
for (StoredObject so : fStoredObjectMap.values()) {
if (so instanceof Relationship) {
Relationship ro = (Relationship) so;
- if (ro.getSourceObjectId().equals(objectId) && (RelationshipDirection.EITHER == direction || RelationshipDirection.SOURCE == direction)) {
+ if (ro.getSourceObjectId().equals(objectId)
+ && (RelationshipDirection.EITHER == direction || RelationshipDirection.SOURCE == direction)) {
res.add(so);
- } else if (ro.getTargetObjectId().equals(objectId) && (RelationshipDirection.EITHER == direction
- || RelationshipDirection.TARGET == direction)) {
+ } else if (ro.getTargetObjectId().equals(objectId)
+ && (RelationshipDirection.EITHER == direction || RelationshipDirection.TARGET == direction)) {
res.add(so);
}
}
@@ -675,6 +839,7 @@ public class ObjectStoreImpl implements
return res;
}
+ @Override
public boolean isTypeInUse(String typeId) {
// iterate over all the objects and check for each if the type matches
for (String objectId : getIds()) {
@@ -685,5 +850,64 @@ public class ObjectStoreImpl implements
return false;
}
+ @Override
+ public void addParent(StoredObject so, Folder parent) {
+ try {
+ lock();
+ if (hasChild(parent, so.getName())) {
+ throw new IllegalArgumentException(
+ "Cannot assign new parent folder, this name already exists in target folder.");
+ }
+ FilingMutable fi;
+ if (so instanceof FilingMutable)
+ fi = (FilingMutable) so;
+ else
+ throw new IllegalArgumentException("Object " + so.getId() + "is not fileable");
+
+ addParentIntern(fi, parent);
+ } finally {
+ unlock();
+ }
+ }
+
+ @Override
+ public void removeParent(StoredObject so, Folder parent) {
+ try {
+ lock();
+ FilingMutable fi;
+ if (so instanceof FilingMutable)
+ fi = (FilingMutable) so;
+ else
+ throw new IllegalArgumentException("Object " + so.getId() + "is not fileable");
+
+ removeParentIntern(fi, parent);
+ } finally {
+ unlock();
+ }
+ }
+
+ private void addParentIntern(FilingMutable so, Folder parent) {
+ so.addParentId(parent.getId());
+ }
+
+ private void removeParentIntern(FilingMutable so, Folder parent) {
+ so.removeParentId(parent.getId());
+ }
+
+ private static void sortFolderList(List<? extends StoredObject> list) {
+ // TODO evaluate orderBy, for now sort by path segment
+ class FolderComparator implements Comparator<StoredObject> {
+
+ @Override
+ public int compare(StoredObject f1, StoredObject f2) {
+ String segment1 = f1.getName();
+ String segment2 = f2.getName();
+
+ return segment1.compareTo(segment2);
+ }
+ }
+
+ Collections.sort(list, new FolderComparator());
+ }
}
Modified: chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/PolicyImpl.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/PolicyImpl.java?rev=1486037&r1=1486036&r2=1486037&view=diff
==============================================================================
--- chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/PolicyImpl.java (original)
+++ chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/PolicyImpl.java Fri May 24 12:48:21 2013
@@ -40,7 +40,8 @@ public class PolicyImpl extends StoredOb
policyText = text;
}
- public String getPolicyText() {
+ @Override
+ public String getPolicyText() {
return policyText;
}
Modified: chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/RelationshipImpl.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/RelationshipImpl.java?rev=1486037&r1=1486036&r2=1486037&view=diff
==============================================================================
--- chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/RelationshipImpl.java (original)
+++ chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/RelationshipImpl.java Fri May 24 12:48:21 2013
@@ -36,7 +36,8 @@ public class RelationshipImpl extends St
super(objStore);
}
- public String getSourceObjectId() {
+ @Override
+ public String getSourceObjectId() {
return sourceObjId;
}
@@ -44,7 +45,8 @@ public class RelationshipImpl extends St
this.sourceObjId = id;
}
- public String getTargetObjectId() {
+ @Override
+ public String getTargetObjectId() {
return targetObjId;
}
Modified: chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/StoreManagerImpl.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/StoreManagerImpl.java?rev=1486037&r1=1486036&r2=1486037&view=diff
==============================================================================
--- chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/StoreManagerImpl.java (original)
+++ chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/StoreManagerImpl.java Fri May 24 12:48:21 2013
@@ -120,19 +120,22 @@ public class StoreManagerImpl implements
fObjectFactory = new BindingsObjectFactoryImpl();
}
- public List<String> getAllRepositoryIds() {
+ @Override
+ public List<String> getAllRepositoryIds() {
Set<String> repIds = fMapRepositoryToObjectStore.keySet();
List<String> result = new ArrayList<String>();
result.addAll(repIds);
return result;
}
- public void initRepository(String repositoryId) {
+ @Override
+ public void initRepository(String repositoryId) {
fMapRepositoryToObjectStore.put(repositoryId, new ObjectStoreImpl(repositoryId));
fMapRepositoryToTypeManager.put(repositoryId, new TypeManagerImpl());
}
- public void createAndInitRepository(String repositoryId, String typeCreatorClassName) {
+ @Override
+ public void createAndInitRepository(String repositoryId, String typeCreatorClassName) {
if (fMapRepositoryToObjectStore.containsKey(repositoryId)
|| fMapRepositoryToTypeManager.containsKey(repositoryId)) {
throw new RuntimeException("Cannot add repository, repository " + repositoryId + " already exists.");
@@ -145,19 +148,23 @@ public class StoreManagerImpl implements
initTypeSystem(repositoryId, typeCreatorClassName);
}
- public ObjectStore getObjectStore(String repositoryId) {
+ @Override
+ public ObjectStore getObjectStore(String repositoryId) {
return fMapRepositoryToObjectStore.get(repositoryId);
}
- public CmisServiceValidator getServiceValidator() {
+ @Override
+ public CmisServiceValidator getServiceValidator() {
return new InMemoryServiceValidatorImpl(this);
}
- public BindingsObjectFactory getObjectFactory() {
+ @Override
+ public BindingsObjectFactory getObjectFactory() {
return fObjectFactory;
}
- public TypeDefinitionContainer getTypeById(String repositoryId, String typeId) {
+ @Override
+ public TypeDefinitionContainer getTypeById(String repositoryId, String typeId) {
TypeManager typeManager = fMapRepositoryToTypeManager.get(repositoryId);
if (null == typeManager) {
throw new RuntimeException("Unknown repository " + repositoryId);
@@ -176,7 +183,8 @@ public class StoreManagerImpl implements
return tdc;
}
- public TypeDefinitionContainer getTypeById(String repositoryId, String typeId, boolean includePropertyDefinitions,
+ @Override
+ public TypeDefinitionContainer getTypeById(String repositoryId, String typeId, boolean includePropertyDefinitions,
int depth) {
TypeManager typeManager = fMapRepositoryToTypeManager.get(repositoryId);
if (null == typeManager) {
@@ -199,7 +207,8 @@ public class StoreManagerImpl implements
return null;
}
- public Collection<TypeDefinitionContainer> getTypeDefinitionList(String repositoryId,
+ @Override
+ public Collection<TypeDefinitionContainer> getTypeDefinitionList(String repositoryId,
boolean includePropertyDefinitions) {
// Collection<TypeDefinitionContainer> result;
TypeManager typeManager = fMapRepositoryToTypeManager.get(repositoryId);
@@ -224,7 +233,8 @@ public class StoreManagerImpl implements
return typeColl;
}
- public List<TypeDefinitionContainer> getRootTypes(String repositoryId, boolean includePropertyDefinitions) {
+ @Override
+ public List<TypeDefinitionContainer> getRootTypes(String repositoryId, boolean includePropertyDefinitions) {
List<TypeDefinitionContainer> result;
TypeManager typeManager = fMapRepositoryToTypeManager.get(repositoryId);
if (null == typeManager) {
@@ -265,7 +275,8 @@ public class StoreManagerImpl implements
return result;
}
- public RepositoryInfo getRepositoryInfo(String repositoryId) {
+ @Override
+ public RepositoryInfo getRepositoryInfo(String repositoryId) {
ObjectStore sm = fMapRepositoryToObjectStore.get(repositoryId);
if (null == sm) {
return null;
@@ -575,12 +586,26 @@ public class StoreManagerImpl implements
return tdcClone;
}
- public TypeManagerCreatable getTypeManager(String repositoryId) {
+ @Override
+ public TypeManagerCreatable getTypeManager(String repositoryId) {
TypeManagerCreatable typeManager = fMapRepositoryToTypeManager.get(repositoryId);
return typeManager;
}
- public ObjectList query(String user, String repositoryId, String statement, Boolean searchAllVersions,
+ @Override
+ public
+ boolean supportsSingleFiling(String repositoryId) {
+ return false;
+ }
+
+ @Override
+ public
+ boolean supportsMultiFilings(String repositoryId) {
+ return true;
+ }
+
+ @Override
+ public ObjectList query(String user, String repositoryId, String statement, Boolean searchAllVersions,
Boolean includeAllowableActions, IncludeRelationships includeRelationships, String renditionFilter,
BigInteger maxItems, BigInteger skipCount) {
TypeManager tm = getTypeManager(repositoryId);
Modified: chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/StoredObjectImpl.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/StoredObjectImpl.java?rev=1486037&r1=1486036&r2=1486037&view=diff
==============================================================================
--- chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/StoredObjectImpl.java (original)
+++ chemistry/opencmis/branches/inmemory-refactoring/src/main/java/org/apache/chemistry/opencmis/inmemory/storedobj/impl/StoredObjectImpl.java Fri May 24 12:48:21 2013
@@ -88,67 +88,83 @@ public class StoredObjectImpl implements
policyIds = null;
}
- public String getId() {
+ @Override
+ public String getId() {
return fId;
}
- public String getName() {
+ @Override
+ public String getName() {
return fName;
}
- public void setName(String name) {
+ @Override
+ public void setName(String name) {
fName = name;
}
- public String getTypeId() {
+ @Override
+ public String getTypeId() {
return fTypeId;
}
- public void setTypeId(String type) {
+ @Override
+ public void setTypeId(String type) {
fTypeId = type;
}
- public String getCreatedBy() {
+ @Override
+ public String getCreatedBy() {
return fCreatedBy;
}
- public void setCreatedBy(String createdBy) {
+ @Override
+ public void setCreatedBy(String createdBy) {
this.fCreatedBy = createdBy;
}
- public String getModifiedBy() {
+ @Override
+ public String getModifiedBy() {
return fModifiedBy;
}
- public void setModifiedBy(String modifiedBy) {
+ @Override
+ public void setModifiedBy(String modifiedBy) {
this.fModifiedBy = modifiedBy;
}
- public GregorianCalendar getCreatedAt() {
+ @Override
+ public GregorianCalendar getCreatedAt() {
return fCreatedAt;
}
- public void setCreatedAt(GregorianCalendar createdAt) {
+ @Override
+ public void setCreatedAt(GregorianCalendar createdAt) {
this.fCreatedAt = createdAt;
}
- public GregorianCalendar getModifiedAt() {
+ @Override
+ public GregorianCalendar getModifiedAt() {
return fModifiedAt;
}
- public void setModifiedAtNow() {
+ @Override
+ public void setModifiedAtNow() {
this.fModifiedAt = getNow();
}
- public void setRepositoryId(String repositoryId) {
+ @Override
+ public void setRepositoryId(String repositoryId) {
fRepositoryId = repositoryId;
}
- public String getRepositoryId() {
+ @Override
+ public String getRepositoryId() {
return fRepositoryId;
}
- public List<String> getAppliedPolicies() {
+ @Override
+ public List<String> getAppliedPolicies() {
if (null == policyIds)
return null;
else
@@ -166,7 +182,8 @@ public class StoredObjectImpl implements
}
}
- public void addAppliedPolicy(String policyId) {
+ @Override
+ public void addAppliedPolicy(String policyId) {
if (null == policyIds) {
policyIds = new ArrayList<String>();
}
@@ -175,7 +192,8 @@ public class StoredObjectImpl implements
}
}
- public void removePolicy(String policyId) {
+ @Override
+ public void removePolicy(String policyId) {
if (null != policyIds && policyIds.contains(policyId)) {
policyIds.remove(policyId);
if (policyIds.isEmpty()) {
@@ -185,46 +203,51 @@ public class StoredObjectImpl implements
}
// CMIS 1.1:
- public void setDescription(String descr) {
+ @Override
+ public void setDescription(String descr) {
description = descr;
}
// CMIS 1.1:
- public String getDescription() {
+ @Override
+ public String getDescription() {
return description;
}
- public List<String> getSecondaryTypeIds() {
+ @Override
+ public List<String> getSecondaryTypeIds() {
return Collections.unmodifiableList(secondaryTypeIds);
}
- public void setProperties(Map<String, PropertyData<?>> props) {
+ @Override
+ public void setProperties(Map<String, PropertyData<?>> props) {
fProperties = props;
}
- public Map<String, PropertyData<?>> getProperties() {
+ @Override
+ public Map<String, PropertyData<?>> getProperties() {
return fProperties;
}
- public String getChangeToken() {
+ @Override
+ public String getChangeToken() {
GregorianCalendar lastModified = getModifiedAt();
String token = Long.valueOf(lastModified.getTimeInMillis()).toString();
return token;
}
- public void rename(String newName) {
- setName(newName);
- }
-
- public void createSystemBasePropertiesWhenCreated(Map<String, PropertyData<?>> properties, String user) {
+ @Override
+ public void createSystemBasePropertiesWhenCreated(Map<String, PropertyData<?>> properties, String user) {
addSystemBaseProperties(properties, user, true);
}
- public void updateSystemBasePropertiesWhenModified(Map<String, PropertyData<?>> properties, String user) {
+ @Override
+ public void updateSystemBasePropertiesWhenModified(Map<String, PropertyData<?>> properties, String user) {
addSystemBaseProperties(properties, user, false);
}
- public void fillProperties(Map<String, PropertyData<?>> properties, BindingsObjectFactory objFactory,
+ @Override
+ public void fillProperties(Map<String, PropertyData<?>> properties, BindingsObjectFactory objFactory,
List<String> requestedIds) {
if (FilterParser.isContainedInFilter(PropertyIds.NAME, requestedIds)) {
@@ -289,7 +312,8 @@ public class StoredObjectImpl implements
// ///////////////////////////////////////////
// private helper methods
- public void setCustomProperties(Map<String, PropertyData<?>> properties) {
+ @Override
+ public void setCustomProperties(Map<String, PropertyData<?>> properties) {
properties = new HashMap<String, PropertyData<?>>(properties); // get a
// writable
// collection
@@ -463,12 +487,14 @@ public class StoredObjectImpl implements
}
}
- public void persist() {
+ @Override
+ public void persist() {
// in-memory implementation does not need to to anything to persist,
// but after this call the id should be set.
fId = fObjStore.storeObject(this);
}
+ @Override
public Acl getAcl() {
return fObjStore.getAcl(fAclId);
}
@@ -481,26 +507,31 @@ public class StoredObjectImpl implements
fAclId = aclId;
}
- public List<StoredObject> getObjectRelationships(RelationshipDirection relationshipDirection, String user) {
+ @Override
+ public List<StoredObject> getObjectRelationships(RelationshipDirection relationshipDirection, String user) {
List<StoredObject> rels = fObjStore.getRelationships(getId(), null, relationshipDirection);
return rels;
}
+ @Override
public AllowableActions getAllowableActions(String user) {
AllowableActions actions = DataObjectCreator.fillAllowableActions(this, user);
return actions;
}
- public List<RenditionData> getRenditions(String renditionFilter, long maxItems, long skipCount) {
+ @Override
+ public List<RenditionData> getRenditions(String renditionFilter, long maxItems, long skipCount) {
return null;
}
- public ContentStream getRenditionContent(String streamId, long offset, long length) {
+ @Override
+ public ContentStream getRenditionContent(String streamId, long offset, long length) {
return null;
}
- public boolean hasRendition(String user) {
+ @Override
+ public boolean hasRendition(String user) {
return false;
}