You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@chemistry.apache.org by fg...@apache.org on 2009/08/05 22:48:40 UTC
svn commit: r801408 - in /incubator/chemistry/trunk/chemistry:
chemistry-api/src/main/java/org/apache/chemistry/
chemistry-atompub-client/src/main/java/org/apache/chemistry/atompub/client/
chemistry-atompub-client/src/test/resources/ chemistry-atompub-...
Author: fguillaume
Date: Wed Aug 5 20:48:40 2009
New Revision: 801408
URL: http://svn.apache.org/viewvc?rev=801408&view=rev
Log:
CMIS-44: updated types XML (cmisra:type), implemented types descendants and service link to it
Modified:
incubator/chemistry/trunk/chemistry/chemistry-api/src/main/java/org/apache/chemistry/CMIS.java
incubator/chemistry/trunk/chemistry/chemistry-atompub-client/src/main/java/org/apache/chemistry/atompub/client/TypeEntryReader.java
incubator/chemistry/trunk/chemistry/chemistry-atompub-client/src/test/resources/feed-types.xml
incubator/chemistry/trunk/chemistry/chemistry-atompub-server/src/main/java/org/apache/chemistry/atompub/server/CMISProvider.java
incubator/chemistry/trunk/chemistry/chemistry-atompub-server/src/main/java/org/apache/chemistry/atompub/server/CMISServiceResponse.java
incubator/chemistry/trunk/chemistry/chemistry-atompub-server/src/main/java/org/apache/chemistry/atompub/server/CMISTypesCollection.java
incubator/chemistry/trunk/chemistry/chemistry-atompub-server/src/main/java/org/apache/chemistry/atompub/server/CMISWorkspaceManager.java
incubator/chemistry/trunk/chemistry/chemistry-atompub/src/main/java/org/apache/chemistry/atompub/AtomPubCMIS.java
incubator/chemistry/trunk/chemistry/chemistry-commons/src/main/java/org/apache/chemistry/impl/simple/SimpleTypeManager.java
incubator/chemistry/trunk/chemistry/chemistry-commons/src/test/java/org/apache/chemistry/impl/simple/TestSimpleRepository.java
incubator/chemistry/trunk/chemistry/chemistry-tests/src/main/java/org/apache/chemistry/test/MainServlet.java
Modified: incubator/chemistry/trunk/chemistry/chemistry-api/src/main/java/org/apache/chemistry/CMIS.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/chemistry/chemistry-api/src/main/java/org/apache/chemistry/CMIS.java?rev=801408&r1=801407&r2=801408&view=diff
==============================================================================
--- incubator/chemistry/trunk/chemistry/chemistry-api/src/main/java/org/apache/chemistry/CMIS.java (original)
+++ incubator/chemistry/trunk/chemistry/chemistry-api/src/main/java/org/apache/chemistry/CMIS.java Wed Aug 5 20:48:40 2009
@@ -105,14 +105,6 @@
public static final QName REPOSITORY_SPECIFIC_INFORMATION = CMISName("repositorySpecificInformation");
- public static final QName DOCUMENT_TYPE = CMISName("documentType");
-
- public static final QName FOLDER_TYPE = CMISName("folderType");
-
- public static final QName RELATIONSHIP_TYPE = CMISName("relationshipType");
-
- public static final QName POLICY_TYPE = CMISName("policyType");
-
public static final QName BASE_TYPE_ID = CMISName("baseTypeId");
public static final QName ID = CMISName("id");
Modified: incubator/chemistry/trunk/chemistry/chemistry-atompub-client/src/main/java/org/apache/chemistry/atompub/client/TypeEntryReader.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/chemistry/chemistry-atompub-client/src/main/java/org/apache/chemistry/atompub/client/TypeEntryReader.java?rev=801408&r1=801407&r2=801408&view=diff
==============================================================================
--- incubator/chemistry/trunk/chemistry/chemistry-atompub-client/src/main/java/org/apache/chemistry/atompub/client/TypeEntryReader.java (original)
+++ incubator/chemistry/trunk/chemistry/chemistry-atompub-client/src/main/java/org/apache/chemistry/atompub/client/TypeEntryReader.java Wed Aug 5 20:48:40 2009
@@ -28,6 +28,7 @@
import org.apache.chemistry.CMIS;
import org.apache.chemistry.PropertyDefinition;
import org.apache.chemistry.atompub.AtomPub;
+import org.apache.chemistry.atompub.AtomPubCMIS;
import org.apache.chemistry.atompub.client.stax.AbstractEntryReader;
import org.apache.chemistry.atompub.client.stax.ReadContext;
import org.apache.chemistry.xml.stax.ChildrenNavigator;
@@ -64,12 +65,7 @@
@Override
protected void readCmisElement(ReadContext context, StaxReader reader,
APPType entry) throws XMLStreamException {
- String localName = reader.getLocalName();
- if (CMIS.DOCUMENT_TYPE.getLocalPart().equals(localName)
- || CMIS.FOLDER_TYPE.getLocalPart().equals(localName)
- || CMIS.RELATIONSHIP_TYPE.getLocalPart().equals(
- localName)
- || CMIS.POLICY_TYPE.getLocalPart().equals(localName)) {
+ if (AtomPubCMIS.TYPE.getLocalPart().equals(reader.getLocalName())) {
ChildrenNavigator children = reader.getChildren();
Map<String, String> map = new HashMap<String, String>();
Map<String, PropertyDefinition> pdefs = null;
@@ -93,16 +89,6 @@
log.error("Cannot read text element for: " + name, e);
continue;
}
- if (name.equals(CMIS.BASE_TYPE_ID.getLocalPart())) {
- // check base type coherent with base element
- // eg "cmis:folder" for a <cmis:folderType>
- if (!("cmis:" + localName).startsWith(text)) {
- throw new IllegalArgumentException(
- String.format(
- "Type element <cmis:%s> cannot have base type: %s",
- localName, text));
- }
- }
map.put(name, text);
}
}
Modified: incubator/chemistry/trunk/chemistry/chemistry-atompub-client/src/test/resources/feed-types.xml
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/chemistry/chemistry-atompub-client/src/test/resources/feed-types.xml?rev=801408&r1=801407&r2=801408&view=diff
==============================================================================
--- incubator/chemistry/trunk/chemistry/chemistry-atompub-client/src/test/resources/feed-types.xml (original)
+++ incubator/chemistry/trunk/chemistry/chemistry-atompub-client/src/test/resources/feed-types.xml Wed Aug 5 20:48:40 2009
@@ -1,5 +1,6 @@
<?xml version='1.0' encoding='utf-8'?>
-<feed xmlns="http://www.w3.org/2005/Atom" xmlns:cmis="http://docs.oasis-open.org/ns/cmis/core/200901">
+<feed xmlns="http://www.w3.org/2005/Atom" xmlns:cmis="http://docs.oasis-open.org/ns/cmis/core/200901"
+ xmlns:cmisra="http://docs.oasis-open.org/ns/cmis/restatom/200901">
<id>urn:x-id:types</id>
<title type="text">Types</title>
<author>
@@ -14,7 +15,7 @@
<link href="http://127.0.0.1:8080/cmis/type/document" rel="edit" />
<link href="http://127.0.0.1:8080/cmis/type/document" rel="alternate" />
<link href="http://127.0.0.1:8080/cmis/repository" rel="repository" />
- <cmis:documentType>
+ <cmisra:type>
<cmis:id>cmis:document</cmis:id>
<cmis:localName>cmis:document</cmis:localName>
<cmis:queryName>Document</cmis:queryName>
@@ -29,8 +30,9 @@
<cmis:controllablePolicy>true</cmis:controllablePolicy>
<cmis:controllableACL>true</cmis:controllableACL>
<cmis:fulltextindexed>true</cmis:fulltextindexed>
- <cmis:includedInSupertypeQuery>true</cmis:includedInSupertypeQuery>
- </cmis:documentType>
+ <cmis:includedInSupertypeQuery>true
+ </cmis:includedInSupertypeQuery>
+ </cmisra:type>
</entry>
<entry>
<id>urn:x-tid:folder</id>
@@ -40,7 +42,7 @@
<link href="http://127.0.0.1:8080/cmis/type/folder" rel="edit" />
<link href="http://127.0.0.1:8080/cmis/type/folder" rel="alternate" />
<link href="http://127.0.0.1:8080/cmis/repository" rel="repository" />
- <cmis:folderType>
+ <cmisra:type>
<cmis:id>cmis:folder</cmis:id>
<cmis:localName>cmis:folder</cmis:localName>
<cmis:queryName>Folder</cmis:queryName>
@@ -55,8 +57,9 @@
<cmis:controllablePolicy>true</cmis:controllablePolicy>
<cmis:controllableACL>true</cmis:controllableACL>
<cmis:fulltextindexed>true</cmis:fulltextindexed>
- <cmis:includedInSupertypeQuery>true</cmis:includedInSupertypeQuery>
- </cmis:folderType>
+ <cmis:includedInSupertypeQuery>true
+ </cmis:includedInSupertypeQuery>
+ </cmisra:type>
</entry>
<entry>
<id>urn:x-tid:relationship</id>
@@ -66,7 +69,7 @@
<link href="http://127.0.0.1:8080/cmis/type/relationship" rel="edit" />
<link href="http://127.0.0.1:8080/cmis/type/relationship" rel="alternate" />
<link href="http://127.0.0.1:8080/cmis/repository" rel="repository" />
- <cmis:relationshipType>
+ <cmisra:type>
<cmis:id>cmis:relationship</cmis:id>
<cmis:localName>cmis:relationship</cmis:localName>
<cmis:queryName>Relationship</cmis:queryName>
@@ -81,8 +84,9 @@
<cmis:controllablePolicy>false</cmis:controllablePolicy>
<cmis:controllableACL>false</cmis:controllableACL>
<cmis:fulltextindexed>false</cmis:fulltextindexed>
- <cmis:includedInSupertypeQuery>true</cmis:includedInSupertypeQuery>
- </cmis:relationshipType>
+ <cmis:includedInSupertypeQuery>true
+ </cmis:includedInSupertypeQuery>
+ </cmisra:type>
</entry>
<entry>
<id>urn:x-tid:policy</id>
@@ -92,7 +96,7 @@
<link href="http://127.0.0.1:8080/cmis/type/policy" rel="edit" />
<link href="http://127.0.0.1:8080/cmis/type/policy" rel="alternate" />
<link href="http://127.0.0.1:8080/cmis/repository" rel="repository" />
- <cmis:policyType>
+ <cmisra:type>
<cmis:id>cmis:policy</cmis:id>
<cmis:localName>cmis:policy</cmis:localName>
<cmis:queryName>Policy</cmis:queryName>
@@ -107,8 +111,9 @@
<cmis:controllablePolicy>false</cmis:controllablePolicy>
<cmis:controllableACL>false</cmis:controllableACL>
<cmis:fulltextindexed>false</cmis:fulltextindexed>
- <cmis:includedInSupertypeQuery>true</cmis:includedInSupertypeQuery>
- </cmis:policyType>
+ <cmis:includedInSupertypeQuery>true
+ </cmis:includedInSupertypeQuery>
+ </cmisra:type>
</entry>
<entry>
<id>urn:x-tid:Root</id>
@@ -118,7 +123,7 @@
<link href="http://127.0.0.1:8080/cmis/type/Root" rel="edit" />
<link href="http://127.0.0.1:8080/cmis/type/Root" rel="alternate" />
<link href="http://127.0.0.1:8080/cmis/repository" rel="repository" />
- <cmis:folderType>
+ <cmisra:type>
<cmis:id>Root</cmis:id>
<cmis:localName>Root</cmis:localName>
<cmis:queryName>Root</cmis:queryName>
@@ -133,7 +138,8 @@
<cmis:controllablePolicy>false</cmis:controllablePolicy>
<cmis:controllableACL>false</cmis:controllableACL>
<cmis:fulltextindexed>false</cmis:fulltextindexed>
- <cmis:includedInSupertypeQuery>false</cmis:includedInSupertypeQuery>
- </cmis:folderType>
+ <cmis:includedInSupertypeQuery>false
+ </cmis:includedInSupertypeQuery>
+ </cmisra:type>
</entry>
</feed>
Modified: incubator/chemistry/trunk/chemistry/chemistry-atompub-server/src/main/java/org/apache/chemistry/atompub/server/CMISProvider.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/chemistry/chemistry-atompub-server/src/main/java/org/apache/chemistry/atompub/server/CMISProvider.java?rev=801408&r1=801407&r2=801408&view=diff
==============================================================================
--- incubator/chemistry/trunk/chemistry/chemistry-atompub-server/src/main/java/org/apache/chemistry/atompub/server/CMISProvider.java (original)
+++ incubator/chemistry/trunk/chemistry/chemistry-atompub-server/src/main/java/org/apache/chemistry/atompub/server/CMISProvider.java Wed Aug 5 20:48:40 2009
@@ -106,6 +106,8 @@
// ?
targetResolver.setPattern("/types/([^/?]+)",
TargetType.TYPE_COLLECTION, "typeid");
+ targetResolver.setPattern("/typesdescendants/([^/?]*)",
+ TargetType.TYPE_COLLECTION, "typeid");
// CMIS workspaces available
@@ -127,10 +129,10 @@
AtomPubCMIS.COL_CHECKED_OUT, "checkedout", null, repository));
workspaceInfo.addCollection(new CMISTypesCollection(
- AtomPubCMIS.COL_TYPES_CHILDREN, repository));
+ AtomPubCMIS.COL_TYPES_CHILDREN, null, repository));
workspaceInfo.addCollection(new CMISTypesCollection(
- AtomPubCMIS.COL_TYPES_DESCENDANTS, repository));
+ AtomPubCMIS.COL_TYPES_DESCENDANTS, null, repository));
workspaceInfo.addCollection(new CMISQueryFeed(repository));
Modified: incubator/chemistry/trunk/chemistry/chemistry-atompub-server/src/main/java/org/apache/chemistry/atompub/server/CMISServiceResponse.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/chemistry/chemistry-atompub-server/src/main/java/org/apache/chemistry/atompub/server/CMISServiceResponse.java?rev=801408&r1=801407&r2=801408&view=diff
==============================================================================
--- incubator/chemistry/trunk/chemistry/chemistry-atompub-server/src/main/java/org/apache/chemistry/atompub/server/CMISServiceResponse.java (original)
+++ incubator/chemistry/trunk/chemistry/chemistry-atompub-server/src/main/java/org/apache/chemistry/atompub/server/CMISServiceResponse.java Wed Aug 5 20:48:40 2009
@@ -23,6 +23,7 @@
import org.apache.abdera.parser.stax.StaxStreamWriter;
import org.apache.abdera.protocol.server.CollectionInfo;
import org.apache.abdera.protocol.server.RequestContext;
+import org.apache.abdera.protocol.server.TargetType;
import org.apache.abdera.protocol.server.WorkspaceInfo;
import org.apache.abdera.protocol.server.context.StreamWriterResponseContext;
import org.apache.abdera.writer.StreamWriter;
@@ -31,6 +32,7 @@
import org.apache.chemistry.Repository;
import org.apache.chemistry.RepositoryCapabilities;
import org.apache.chemistry.RepositoryInfo;
+import org.apache.chemistry.atompub.AtomPub;
import org.apache.chemistry.atompub.AtomPubCMIS;
import org.apache.chemistry.atompub.URITemplate;
import org.w3c.dom.Document;
@@ -65,7 +67,9 @@
request)) {
sw.startWorkspace();
sw.writeTitle(wi.getTitle(request));
+ // repository info
RepositoryInfoWriter.write(sw, provider);
+ // collections
for (CollectionInfo ci : wi.getCollections(request)) {
sw.startCollection(ci.getHref(request));
sw.writeAttribute(AtomPubCMIS.COLLECTION_TYPE,
@@ -75,6 +79,14 @@
// no AtomPub categories
sw.endCollection();
}
+ // CMIS links
+ sw.startElement(AtomPub.ATOM_LINK);
+ sw.writeAttribute("type", "application/cmistree+xml");
+ sw.writeAttribute("rel", AtomPubCMIS.LINK_TYPES_DESCENDANTS);
+ String tdurl = request.absoluteUrlFor(TargetType.TYPE_SERVICE, null);
+ tdurl = tdurl.replaceFirst("/repository$", "/typesdescendants/"); // XXX
+ sw.writeAttribute("href", tdurl);
+ sw.endElement();
// URI templates
for (URITemplate info : provider.getURITemplates(request)) {
sw.startElement(AtomPubCMIS.URI_TEMPLATE);
Modified: incubator/chemistry/trunk/chemistry/chemistry-atompub-server/src/main/java/org/apache/chemistry/atompub/server/CMISTypesCollection.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/chemistry/chemistry-atompub-server/src/main/java/org/apache/chemistry/atompub/server/CMISTypesCollection.java?rev=801408&r1=801407&r2=801408&view=diff
==============================================================================
--- incubator/chemistry/trunk/chemistry/chemistry-atompub-server/src/main/java/org/apache/chemistry/atompub/server/CMISTypesCollection.java (original)
+++ incubator/chemistry/trunk/chemistry/chemistry-atompub-server/src/main/java/org/apache/chemistry/atompub/server/CMISTypesCollection.java Wed Aug 5 20:48:40 2009
@@ -18,6 +18,7 @@
import java.io.Serializable;
import java.net.URI;
+import java.util.Collection;
import java.util.Date;
import java.util.List;
@@ -37,6 +38,7 @@
import org.apache.chemistry.PropertyType;
import org.apache.chemistry.Repository;
import org.apache.chemistry.Type;
+import org.apache.chemistry.atompub.AtomPubCMIS;
import org.apache.chemistry.atompub.abdera.PropertiesElement;
/**
@@ -44,8 +46,8 @@
*/
public class CMISTypesCollection extends CMISCollection<Type> {
- public CMISTypesCollection(String type, Repository repository) {
- super(type, "types", null, repository);
+ public CMISTypesCollection(String type, String id, Repository repository) {
+ super(type, "types", id, repository);
}
/*
@@ -67,6 +69,7 @@
@Override
public String getId(RequestContext request) {
+ // TODO when descendants
return "urn:x-id:types";
}
@@ -84,8 +87,9 @@
*/
@Override
- protected String addEntryDetails(RequestContext request, Entry entry,
+ public String addEntryDetails(RequestContext request, Entry entry,
IRI feedIri, Type type) throws ResponseContextException {
+ boolean includePropertyDefinitions = "true".equals(request.getParameter("includePropertyDefinitions"));
Factory factory = request.getAbdera().getFactory();
entry.setId(getId(type));
@@ -105,67 +109,49 @@
// CMIS links
// CMIS-specific
- // TODO refactor this to be a proper ExtensibleElement
- QName typeElementQName;
- switch (type.getBaseType()) {
- case DOCUMENT:
- typeElementQName = CMIS.DOCUMENT_TYPE;
- break;
- case FOLDER:
- typeElementQName = CMIS.FOLDER_TYPE;
- break;
- case RELATIONSHIP:
- typeElementQName = CMIS.RELATIONSHIP_TYPE;
- break;
- case POLICY:
- typeElementQName = CMIS.POLICY_TYPE;
- break;
- default:
- throw new AssertionError(type.getBaseType().getId());
- }
- Element dt = factory.newElement(typeElementQName, entry);
+ Element te = factory.newElement(AtomPubCMIS.TYPE, entry);
Element el;
// note: setText is called in a separate statement as JDK 5 has problems
// compiling when it's on one line (compiler generics bug)
- el = factory.newElement(CMIS.ID, dt);
+ el = factory.newElement(CMIS.ID, te);
el.setText(type.getId());
- el = factory.newElement(CMIS.LOCAL_NAME, dt);
+ el = factory.newElement(CMIS.LOCAL_NAME, te);
el.setText(type.getLocalName());
URI localNamespace = type.getLocalNamespace();
if (localNamespace != null) {
- el = factory.newElement(CMIS.LOCAL_NAMESPACE, dt);
+ el = factory.newElement(CMIS.LOCAL_NAMESPACE, te);
el.setText(localNamespace.toString());
}
- el = factory.newElement(CMIS.QUERY_NAME, dt);
+ el = factory.newElement(CMIS.QUERY_NAME, te);
el.setText(type.getQueryName());
- el = factory.newElement(CMIS.DISPLAY_NAME, dt);
+ el = factory.newElement(CMIS.DISPLAY_NAME, te);
el.setText(type.getDisplayName());
- el = factory.newElement(CMIS.BASE_TYPE_ID, dt);
+ el = factory.newElement(CMIS.BASE_TYPE_ID, te);
el.setText(type.getBaseType().getId());
- el = factory.newElement(CMIS.PARENT_ID, dt);
+ el = factory.newElement(CMIS.PARENT_ID, te);
el.setText(type.getParentId());
- el = factory.newElement(CMIS.DESCRIPTION, dt);
+ el = factory.newElement(CMIS.DESCRIPTION, te);
el.setText(type.getDescription());
- el = factory.newElement(CMIS.CREATABLE, dt);
+ el = factory.newElement(CMIS.CREATABLE, te);
el.setText(bool(type.isCreatable()));
- el = factory.newElement(CMIS.FILEABLE, dt);
+ el = factory.newElement(CMIS.FILEABLE, te);
el.setText(bool(type.isFileable()));
- el = factory.newElement(CMIS.QUERYABLE, dt);
+ el = factory.newElement(CMIS.QUERYABLE, te);
el.setText(bool(type.isQueryable()));
- el = factory.newElement(CMIS.CONTROLLABLE_POLICY, dt);
+ el = factory.newElement(CMIS.CONTROLLABLE_POLICY, te);
el.setText(bool(type.isControllablePolicy()));
- el = factory.newElement(CMIS.CONTROLLABLE_ACL, dt);
+ el = factory.newElement(CMIS.CONTROLLABLE_ACL, te);
el.setText(bool(type.isControllableACL()));
- el = factory.newElement(CMIS.FULLTEXT_INDEXED, dt);
+ el = factory.newElement(CMIS.FULLTEXT_INDEXED, te);
el.setText(bool(type.isFulltextIndexed()));
- el = factory.newElement(CMIS.INCLUDED_IN_SUPERTYPE_QUERY, dt);
+ el = factory.newElement(CMIS.INCLUDED_IN_SUPERTYPE_QUERY, te);
el.setText(bool(type.isIncludedInSuperTypeQuery()));
- el = factory.newElement(CMIS.VERSIONABLE, dt); // docs only
+ el = factory.newElement(CMIS.VERSIONABLE, te); // docs only
el.setText(bool(type.isVersionable()));
- el = factory.newElement(CMIS.CONTENT_STREAM_ALLOWED, dt); // docs only
+ el = factory.newElement(CMIS.CONTENT_STREAM_ALLOWED, te); // docs only
el.setText(type.getContentStreamAllowed().toString()); // TODO null
// TODO allowedSourceTypes, allowedTargetTypes
- if ("true".equals(request.getParameter("includePropertyDefinitions"))) {
+ if (includePropertyDefinitions) {
for (PropertyDefinition pd : type.getPropertyDefinitions()) {
QName qname;
switch (pd.getType().ordinal()) {
@@ -202,7 +188,7 @@
default:
throw new AssertionError(pd.getType().name());
}
- Element def = factory.newElement(qname, dt);
+ Element def = factory.newElement(qname, te);
el = factory.newElement(CMIS.ID, def);
el.setText(pd.getId());
String localName = pd.getLocalName();
@@ -271,6 +257,31 @@
default:
throw new AssertionError(pd.getType().name());
}
+ // end property definition
+ }
+ }
+ // end property definitions
+ if ("typesdescendants".equals(getType())) {
+ Collection<Type> subTypes = repository.getTypes(type.getId(), 1,
+ includePropertyDefinitions);
+ if (!subTypes.isEmpty()) {
+ Element che = factory.newElement(AtomPubCMIS.CHILDREN, entry);
+ // TODO basic feed info
+ // AbstractCollectionAdapter.createFeedBase:
+ factory.newID(che).setValue(
+ "urn:x-id:typesdecendants-" + type.getId());
+ // che.setTitle(getTitle(request));
+ // che.addLink("");
+ // che.addLink("", "self");
+ // che.addAuthor(getAuthor(request));
+ // che.setUpdated(new Date());
+ // AbstractEntityCollectionAdapter.addFeedDetails
+ // che.setUpdated(new Date());
+ for (Type subType : subTypes) {
+ Entry subEntry = factory.newEntry(che);
+ addEntryDetails(request, subEntry, null, subType);
+ }
+ // end children entry
}
}
return link;
@@ -283,7 +294,7 @@
@Override
public Iterable<Type> getEntries(RequestContext request)
throws ResponseContextException {
- return repository.getTypes(null);
+ return repository.getTypes(id);
}
@Override
@@ -319,6 +330,10 @@
}
@Override
+ public String getResourceName(RequestContext request) {
+ return request.getTarget().getParameter("typeid");
+ }
+ @Override
protected String getLink(Type type, IRI feedIri, RequestContext request) {
return getTypeLink(type.getId(), request);
}
Modified: incubator/chemistry/trunk/chemistry/chemistry-atompub-server/src/main/java/org/apache/chemistry/atompub/server/CMISWorkspaceManager.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/chemistry/chemistry-atompub-server/src/main/java/org/apache/chemistry/atompub/server/CMISWorkspaceManager.java?rev=801408&r1=801407&r2=801408&view=diff
==============================================================================
--- incubator/chemistry/trunk/chemistry/chemistry-atompub-server/src/main/java/org/apache/chemistry/atompub/server/CMISWorkspaceManager.java (original)
+++ incubator/chemistry/trunk/chemistry/chemistry-atompub-server/src/main/java/org/apache/chemistry/atompub/server/CMISWorkspaceManager.java Wed Aug 5 20:48:40 2009
@@ -20,6 +20,7 @@
import org.apache.abdera.protocol.server.RequestContext;
import org.apache.abdera.protocol.server.impl.AbstractWorkspaceManager;
import org.apache.chemistry.Repository;
+import org.apache.chemistry.atompub.AtomPubCMIS;
/**
* Workspace manager that correctly finds the appropriate collection adapter by
@@ -40,10 +41,19 @@
String path = spath == null ? uri : uri.substring(spath.length());
String paths = path + '/';
if (paths.startsWith("/types/") || paths.startsWith("/types?")) {
- return new CMISTypesCollection(null, repository);
+ return new CMISTypesCollection(null, null, repository);
+ }
+ if (paths.startsWith("/typesdescendants/")) {
+ String id = request.getTarget().getParameter("typeid");
+ if (id.equals("")) {
+ id = null;
+ }
+ return new CMISTypesCollection(AtomPubCMIS.COL_TYPES_DESCENDANTS,
+ id, repository);
}
if (paths.startsWith("/type/")) {
- return new CMISTypesCollection(null, repository);
+ return new CMISTypesCollection(AtomPubCMIS.COL_TYPES_CHILDREN,
+ null, repository);
}
if (paths.startsWith("/children/")) {
String id = request.getTarget().getParameter("objectid");
Modified: incubator/chemistry/trunk/chemistry/chemistry-atompub/src/main/java/org/apache/chemistry/atompub/AtomPubCMIS.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/chemistry/chemistry-atompub/src/main/java/org/apache/chemistry/atompub/AtomPubCMIS.java?rev=801408&r1=801407&r2=801408&view=diff
==============================================================================
--- incubator/chemistry/trunk/chemistry/chemistry-atompub/src/main/java/org/apache/chemistry/atompub/AtomPubCMIS.java (original)
+++ incubator/chemistry/trunk/chemistry/chemistry-atompub/src/main/java/org/apache/chemistry/atompub/AtomPubCMIS.java Wed Aug 5 20:48:40 2009
@@ -60,6 +60,8 @@
public static final QName OBJECT = CMISRAName("object");
+ public static final QName CHILDREN = CMISRAName("children");
+
/*
* ----- AtomPub Collection Types -----
*/
Modified: incubator/chemistry/trunk/chemistry/chemistry-commons/src/main/java/org/apache/chemistry/impl/simple/SimpleTypeManager.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/chemistry/chemistry-commons/src/main/java/org/apache/chemistry/impl/simple/SimpleTypeManager.java?rev=801408&r1=801407&r2=801408&view=diff
==============================================================================
--- incubator/chemistry/trunk/chemistry/chemistry-commons/src/main/java/org/apache/chemistry/impl/simple/SimpleTypeManager.java (original)
+++ incubator/chemistry/trunk/chemistry/chemistry-commons/src/main/java/org/apache/chemistry/impl/simple/SimpleTypeManager.java Wed Aug 5 20:48:40 2009
@@ -87,6 +87,9 @@
}
// TODO spec unclear on depth 0
List<Type> list = new LinkedList<Type>();
+ if (depth < 0) {
+ list.add(types.get(typeId));
+ }
collectSubTypes(typeId, depth, returnPropertyDefinitions, list,
new HashSet<String>());
return list;
@@ -94,20 +97,20 @@
protected void collectSubTypes(String typeId, int depth,
boolean returnPropertyDefinitions, List<Type> list, Set<String> done) {
- if (done.contains(typeId)) {
- // TODO move cycles check to addType
- throw new IllegalStateException("Types contain a cycle involving: "
- + typeId);
- }
// TODO returnPropertyDefinitions
- list.add(types.get(typeId));
- done.add(typeId);
if (depth == 0) {
return;
}
- Collection<Type> children = typesChildren.get(typeId);
- for (Type type : children) {
- collectSubTypes(type.getId(), depth - 1, returnPropertyDefinitions,
+ for (Type subType : typesChildren.get(typeId)) {
+ String subTypeId = subType.getId();
+ if (done.contains(subTypeId)) {
+ // TODO move cycles check to addType
+ throw new IllegalStateException(
+ "Types contain a cycle involving: " + subTypeId);
+ }
+ done.add(subTypeId);
+ list.add(subType);
+ collectSubTypes(subTypeId, depth - 1, returnPropertyDefinitions,
list, done);
}
}
Modified: incubator/chemistry/trunk/chemistry/chemistry-commons/src/test/java/org/apache/chemistry/impl/simple/TestSimpleRepository.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/chemistry/chemistry-commons/src/test/java/org/apache/chemistry/impl/simple/TestSimpleRepository.java?rev=801408&r1=801407&r2=801408&view=diff
==============================================================================
--- incubator/chemistry/trunk/chemistry/chemistry-commons/src/test/java/org/apache/chemistry/impl/simple/TestSimpleRepository.java (original)
+++ incubator/chemistry/trunk/chemistry/chemistry-commons/src/test/java/org/apache/chemistry/impl/simple/TestSimpleRepository.java Wed Aug 5 20:48:40 2009
@@ -111,19 +111,19 @@
assertNull(repo.getType("no-such-type"));
assertEquals(3,
repo.getTypes(BaseType.DOCUMENT.getId(), -1, false).size());
- assertEquals(1, // TODO spec unclear on depth 0
+ assertEquals(0, // TODO spec unclear on depth 0
repo.getTypes(BaseType.DOCUMENT.getId(), 0, false).size());
- assertEquals(2,
+ assertEquals(1,
repo.getTypes(BaseType.DOCUMENT.getId(), 1, false).size());
- assertEquals(3,
+ assertEquals(2,
repo.getTypes(BaseType.DOCUMENT.getId(), 2, false).size());
- assertEquals(3,
+ assertEquals(2,
repo.getTypes(BaseType.DOCUMENT.getId(), 3, false).size());
assertEquals(2, repo.getTypes("doc", -1, false).size());
- assertEquals(1, repo.getTypes("doc", 0, false).size());
- assertEquals(2, repo.getTypes("doc", 1, false).size());
- assertEquals(2, repo.getTypes("doc", 2, false).size());
- assertEquals(2, repo.getTypes("doc", 3, false).size());
+ assertEquals(0, repo.getTypes("doc", 0, false).size());
+ assertEquals(1, repo.getTypes("doc", 1, false).size());
+ assertEquals(1, repo.getTypes("doc", 2, false).size());
+ assertEquals(1, repo.getTypes("doc", 3, false).size());
}
public void testRoot() throws Exception {
Modified: incubator/chemistry/trunk/chemistry/chemistry-tests/src/main/java/org/apache/chemistry/test/MainServlet.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/trunk/chemistry/chemistry-tests/src/main/java/org/apache/chemistry/test/MainServlet.java?rev=801408&r1=801407&r2=801408&view=diff
==============================================================================
--- incubator/chemistry/trunk/chemistry/chemistry-tests/src/main/java/org/apache/chemistry/test/MainServlet.java (original)
+++ incubator/chemistry/trunk/chemistry/chemistry-tests/src/main/java/org/apache/chemistry/test/MainServlet.java Wed Aug 5 20:48:40 2009
@@ -39,7 +39,7 @@
// use a fixed root id, this helps with caching in some clients
public static final String ROOT_ID = "b7666828-f1aa-41e1-9d0a-94a7898ae569";
- private static final int MINUTES = 60 * 1000; // in ms
+ private static final int MINUTES = 60;
public static final String HOST = "0.0.0.0";
@@ -56,7 +56,7 @@
for (int i = 0; i < args.length; i++) {
String arg = args[i];
if ("--help".equals(arg)) {
- System.err.println("Usage: ... [-h HOST] [-p PORT] [-t TIME(minutes)]");
+ System.err.println("Usage: ... [-h HOST] [-p PORT] [-t TIME (minutes)]");
System.exit(0);
}
if (i == args.length - 1) {
@@ -85,7 +85,7 @@
String url = "http://" + host + ':' + port + SERVLET_PATH
+ CMIS_SERVICE;
log.info("CMIS server started, AtomPub service url: " + url);
- Thread.sleep(60 * minutes);
+ Thread.sleep(1000 * 60 * minutes);
server.stop();
log.info("CMIS server stopped");
}