You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@chemistry.apache.org by je...@apache.org on 2010/04/16 16:14:02 UTC
svn commit: r934896 [4/12] - in
/incubator/chemistry/opencmis/trunk/chemistry-opencmis-server:
chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/
chemistry-opencmis-server-bindings/src/main/java/org/apache/chemi...
Modified: incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/atompub/ObjectService.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/atompub/ObjectService.java?rev=934896&r1=934895&r2=934896&view=diff
==============================================================================
--- incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/atompub/ObjectService.java (original)
+++ incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/atompub/ObjectService.java Fri Apr 16 14:14:00 2010
@@ -72,491 +72,465 @@ import org.apache.chemistry.opencmis.ser
*/
public final class ObjectService {
- private static final int BUFFER_SIZE = 64 * 1024;
+ private static final int BUFFER_SIZE = 64 * 1024;
- /**
- * Create*.
- */
- public static void create(CallContext context, AbstractServicesFactory factory,
- String repositoryId, HttpServletRequest request, HttpServletResponse response)
- throws Exception {
-
- // get parameters
- String folderId = getStringParameter(request, Constants.PARAM_ID);
- String sourceFolderId = getStringParameter(request, Constants.PARAM_SOURCE_FOLDER_ID);
- VersioningState versioningState = getEnumParameter(request, Constants.PARAM_VERSIONIG_STATE,
- VersioningState.class);
-
- AtomEntryParser parser = new AtomEntryParser(request.getInputStream());
- String objectId = parser.getId();
-
- // execute
- ObjectInfoHolder objectInfoHolder = new ObjectInfoHolderImpl();
- ObjectData object = null;
-
- if (objectId == null) {
- // create
- CmisObjectService service = factory.getObjectService();
- object = service.create(context, repositoryId, parser.getProperties(), folderId, parser
- .getContentStream(), versioningState, parser.getPolicyIds(), null, objectInfoHolder);
- }
- else {
- if ((sourceFolderId == null) || (sourceFolderId.trim().length() == 0)) {
- // addObjectToFolder
- CmisMultiFilingService service = factory.getMultiFilingService();
- object = service.addObjectToFolder(context, repositoryId, objectId, sourceFolderId, null,
- null, objectInfoHolder);
- }
- else {
- // move
- CmisObjectService service = factory.getObjectService();
- object = service.moveObject(context, repositoryId, new Holder<String>(objectId), folderId,
- sourceFolderId, null, objectInfoHolder);
- }
- }
-
- if (object == null) {
- throw new CmisRuntimeException("Object is null!");
- }
-
- if (object.getId() == null) {
- throw new CmisRuntimeException("Object Id is null!");
- }
-
- // set headers
- UrlBuilder baseUrl = compileBaseUrl(request, repositoryId);
-
- response.setStatus(HttpServletResponse.SC_CREATED);
- response.setContentType(Constants.MEDIATYPE_ENTRY);
- response.setHeader("Location", compileUrl(baseUrl, RESOURCE_ENTRY, object.getId()));
-
- // write XML
- AtomEntry entry = new AtomEntry();
- entry.startDocument(response.getOutputStream());
- writeObjectEntry(entry, object, objectInfoHolder, null, repositoryId, null, null, baseUrl, true);
- entry.endDocument();
- }
-
- /**
- * Create relationship.
- */
- public static void createRelationship(CallContext context, AbstractServicesFactory factory,
- String repositoryId, HttpServletRequest request, HttpServletResponse response)
- throws Exception {
- CmisObjectService service = factory.getObjectService();
-
- // get parameters
- AtomEntryParser parser = new AtomEntryParser(request.getInputStream());
-
- // execute
- ObjectInfoHolder objectInfoHolder = new ObjectInfoHolderImpl();
- ObjectData object = service.create(context, repositoryId, parser.getProperties(), null, null,
- null, parser.getPolicyIds(), null, objectInfoHolder);
-
- // set headers
- UrlBuilder baseUrl = compileBaseUrl(request, repositoryId);
-
- response.setStatus(HttpServletResponse.SC_CREATED);
- response.setContentType(Constants.MEDIATYPE_ENTRY);
- response.setHeader("Location", compileUrl(baseUrl, RESOURCE_ENTRY, object.getId()));
-
- // write XML
- AtomEntry entry = new AtomEntry();
- entry.startDocument(response.getOutputStream());
- writeObjectEntry(entry, object, objectInfoHolder, null, repositoryId, null, null, baseUrl, true);
- entry.endDocument();
- }
-
- /**
- * Delete object.
- */
- public static void deleteObject(CallContext context, AbstractServicesFactory factory,
- String repositoryId, HttpServletRequest request, HttpServletResponse response)
- throws Exception {
- CmisObjectService service = factory.getObjectService();
-
- // get parameters
- String objectId = getStringParameter(request, Constants.PARAM_ID);
- Boolean allVersions = getBooleanParameter(request, Constants.PARAM_ALL_VERSIONS);
-
- // execute
- service.deleteObjectOrCancelCheckOut(context, repositoryId, objectId, allVersions, null);
-
- // set headers
- response.setStatus(HttpServletResponse.SC_NO_CONTENT);
- }
-
- /**
- * Delete content stream.
- */
- public static void deleteContentStream(CallContext context, AbstractServicesFactory factory,
- String repositoryId, HttpServletRequest request, HttpServletResponse response)
- throws Exception {
- CmisObjectService service = factory.getObjectService();
-
- // get parameters
- String objectId = getStringParameter(request, Constants.PARAM_ID);
- String changeToken = getStringParameter(request, Constants.PARAM_CHANGE_TOKEN);
-
- // execute
- service.deleteContentStream(context, repositoryId, new Holder<String>(objectId),
- changeToken == null ? null : new Holder<String>(changeToken), null);
-
- // set headers
- response.setStatus(HttpServletResponse.SC_NO_CONTENT);
- }
-
- /**
- * Set content stream.
- */
- public static void setContentStream(CallContext context, AbstractServicesFactory factory,
- String repositoryId, HttpServletRequest request, HttpServletResponse response)
- throws Exception {
- CmisObjectService service = factory.getObjectService();
-
- // get parameters
- String objectId = getStringParameter(request, Constants.PARAM_ID);
- String changeToken = getStringParameter(request, Constants.PARAM_CHANGE_TOKEN);
- Boolean overwriteFlag = getBooleanParameter(request, Constants.PARAM_OVERWRITE_FLAG);
-
- ContentStreamImpl contentStream = new ContentStreamImpl();
- contentStream.setStream(request.getInputStream());
- contentStream.setMimeType(request.getHeader("Content-Type"));
- String lengthStr = request.getHeader("Content-Length");
- if (lengthStr != null) {
- try {
- contentStream.setLength(new BigInteger(lengthStr));
- }
- catch (NumberFormatException e) {
- }
- }
-
- // execute
- Holder<String> objectIdHolder = new Holder<String>(objectId);
- service.setContentStream(context, repositoryId, objectIdHolder, overwriteFlag,
- changeToken == null ? null : new Holder<String>(changeToken), contentStream, null);
-
- // set headers
- String newObjectId = (objectIdHolder.getValue() == null ? objectId : objectIdHolder.getValue());
- String location = compileUrl(compileBaseUrl(request, repositoryId), RESOURCE_CONTENT,
- newObjectId);
-
- response.setStatus(HttpServletResponse.SC_CREATED);
- response.setHeader("Content-Location", location);
- response.setHeader("Location", location);
- }
-
- /**
- * Delete tree.
- */
- public static void deleteTree(CallContext context, AbstractServicesFactory factory,
- String repositoryId, HttpServletRequest request, HttpServletResponse response)
- throws Exception {
- CmisObjectService service = factory.getObjectService();
-
- // get parameters
- String folderId = getStringParameter(request, Constants.PARAM_ID);
- Boolean allVersions = getBooleanParameter(request, Constants.PARAM_ALL_VERSIONS);
- UnfileObject unfileObjects = getEnumParameter(request, Constants.PARAM_UNFILE_OBJECTS,
- UnfileObject.class);
- Boolean continueOnFailure = getBooleanParameter(request, Constants.PARAM_CONTINUE_ON_FAILURE);
-
- // execute
- FailedToDeleteData ftd = service.deleteTree(context, repositoryId, folderId, allVersions,
- unfileObjects, continueOnFailure, null);
-
- if ((ftd != null) && (ftd.getIds() != null) && (ftd.getIds().size() > 0)) {
- // print ids that could not be deleted
- response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
- response.setContentType("text/plain");
-
- PrintWriter pw = response.getWriter();
-
- pw.println("Failed to delete the following objects:");
- for (String id : ftd.getIds()) {
- pw.println(id);
- }
-
- pw.flush();
-
- return;
- }
-
- // set headers
- response.setStatus(HttpServletResponse.SC_NO_CONTENT);
- }
-
- /**
- * getObject.
- */
- public static void getObject(CallContext context, AbstractServicesFactory factory,
- String repositoryId, HttpServletRequest request, HttpServletResponse response)
- throws Exception {
-
- // get parameters
- String objectId = getStringParameter(request, Constants.PARAM_ID);
- ReturnVersion returnVersion = getEnumParameter(request, Constants.PARAM_RETURN_VERSION,
- ReturnVersion.class);
- String filter = getStringParameter(request, Constants.PARAM_FILTER);
- Boolean includeAllowableActions = getBooleanParameter(request,
- Constants.PARAM_ALLOWABLE_ACTIONS);
- IncludeRelationships includeRelationships = getEnumParameter(request,
- Constants.PARAM_RELATIONSHIPS, IncludeRelationships.class);
- String renditionFilter = getStringParameter(request, Constants.PARAM_RENDITION_FILTER);
- Boolean includePolicyIds = getBooleanParameter(request, Constants.PARAM_POLICY_IDS);
- Boolean includeAcl = getBooleanParameter(request, Constants.PARAM_ACL);
-
- // execute
- ObjectInfoHolder objectInfoHolder = new ObjectInfoHolderImpl();
- ObjectData object = null;
-
- if ((returnVersion == ReturnVersion.LATEST) || (returnVersion == ReturnVersion.LASTESTMAJOR)) {
- CmisVersioningService service = factory.getVersioningService();
- object = service.getObjectOfLatestVersion(context, repositoryId, objectId,
- returnVersion == ReturnVersion.LASTESTMAJOR, filter, includeAllowableActions,
- includeRelationships, renditionFilter, includePolicyIds, includeAcl, null,
- objectInfoHolder);
- }
- else {
- CmisObjectService service = factory.getObjectService();
- object = service.getObject(context, repositoryId, objectId, filter, includeAllowableActions,
- includeRelationships, renditionFilter, includePolicyIds, includeAcl, null,
- objectInfoHolder);
- }
-
- if (object == null) {
- throw new CmisRuntimeException("Object is null!");
- }
-
- ObjectInfo objectInfo = objectInfoHolder.getObjectInfo(object.getId());
- if (objectInfo == null) {
- throw new CmisRuntimeException("Object Info is missing!");
- }
-
- // set headers
- response.setStatus(HttpServletResponse.SC_OK);
- response.setContentType(Constants.MEDIATYPE_ENTRY);
-
- // write XML
- UrlBuilder baseUrl = compileBaseUrl(request, repositoryId);
-
- AtomEntry entry = new AtomEntry();
- entry.startDocument(response.getOutputStream());
- writeObjectEntry(entry, object, objectInfoHolder, null, repositoryId, null, null, baseUrl, true);
- entry.endDocument();
- }
-
- /**
- * objectByPath URI template.
- */
- public static void getObjectByPath(CallContext context, AbstractServicesFactory factory,
- String repositoryId, HttpServletRequest request, HttpServletResponse response)
- throws Exception {
- CmisObjectService service = factory.getObjectService();
-
- // get parameters
- String path = getStringParameter(request, Constants.PARAM_PATH);
- String filter = getStringParameter(request, Constants.PARAM_FILTER);
- Boolean includeAllowableActions = getBooleanParameter(request,
- Constants.PARAM_ALLOWABLE_ACTIONS);
- IncludeRelationships includeRelationships = getEnumParameter(request,
- Constants.PARAM_RELATIONSHIPS, IncludeRelationships.class);
- String renditionFilter = getStringParameter(request, Constants.PARAM_RENDITION_FILTER);
- Boolean includePolicyIds = getBooleanParameter(request, Constants.PARAM_POLICY_IDS);
- Boolean includeAcl = getBooleanParameter(request, Constants.PARAM_ACL);
-
- // execute
- ObjectInfoHolder objectInfoHolder = new ObjectInfoHolderImpl();
- ObjectData object = service.getObjectByPath(context, repositoryId, path, filter,
- includeAllowableActions, includeRelationships, renditionFilter, includePolicyIds,
- includeAcl, null, objectInfoHolder);
-
- if (object == null) {
- throw new CmisRuntimeException("Object is null!");
- }
-
- ObjectInfo objectInfo = objectInfoHolder.getObjectInfo(object.getId());
- if (objectInfo == null) {
- throw new CmisRuntimeException("Object Info is missing!");
- }
-
- // set headers
- response.setStatus(HttpServletResponse.SC_OK);
- response.setContentType(Constants.MEDIATYPE_ENTRY);
-
- // write XML
- UrlBuilder baseUrl = compileBaseUrl(request, repositoryId);
-
- AtomEntry entry = new AtomEntry();
- entry.startDocument(response.getOutputStream());
- writeObjectEntry(entry, object, objectInfoHolder, null, repositoryId, null, null, baseUrl, true);
- entry.endDocument();
- }
-
- /**
- * Allowable Actions.
- */
- public static void getAllowableActions(CallContext context, AbstractServicesFactory factory,
- String repositoryId, HttpServletRequest request, HttpServletResponse response)
- throws Exception {
- CmisObjectService service = factory.getObjectService();
-
- // get parameters
- String objectId = getStringParameter(request, Constants.PARAM_ID);
-
- // execute
- AllowableActions allowableActions = service.getAllowableActions(context, repositoryId,
- objectId, null);
-
- if (allowableActions == null) {
- throw new CmisRuntimeException("Allowable Actions is null!");
- }
-
- // set headers
- response.setStatus(HttpServletResponse.SC_OK);
- response.setContentType(Constants.MEDIATYPE_ALLOWABLEACTION);
-
- // write XML
- AllowableActionsDocument allowableActionsDocument = new AllowableActionsDocument();
- allowableActionsDocument.writeAllowableActions(allowableActions, response.getOutputStream());
- }
-
- /**
- * getContentStream.
- */
- public static void getContentStream(CallContext context, AbstractServicesFactory factory,
- String repositoryId, HttpServletRequest request, HttpServletResponse response)
- throws Exception {
- CmisObjectService service = factory.getObjectService();
-
- // get parameters
- String objectId = getStringParameter(request, Constants.PARAM_ID);
- String streamId = getStringParameter(request, Constants.PARAM_STREAM_ID);
-
- BigInteger offset = null;
- String offsetStr = context.get(CallContext.OFFSET);
- if (offsetStr != null) {
- offset = new BigInteger(offsetStr);
- }
-
- BigInteger length = null;
- String lengthStr = context.get(CallContext.LENGTH);
- if (lengthStr != null) {
- length = new BigInteger(offsetStr);
- }
-
- // execute
- ContentStream content = service.getContentStream(context, repositoryId, objectId, streamId,
- offset, length, null);
-
- if ((content == null) || (content.getStream() == null)) {
- throw new CmisRuntimeException("Content stream is null!");
- }
-
- String contentType = content.getMimeType();
- if (contentType == null) {
- contentType = Constants.MEDIATYPE_OCTETSTREAM;
- }
-
- // set headers
- if ((offset == null) && (length == null)) {
- response.setStatus(HttpServletResponse.SC_OK);
- }
- else {
- response.setStatus(HttpServletResponse.SC_PARTIAL_CONTENT);
- }
- response.setContentType(contentType);
-
- // send content
- InputStream in = new BufferedInputStream(content.getStream(), BUFFER_SIZE);
- OutputStream out = new BufferedOutputStream(response.getOutputStream());
-
- byte[] buffer = new byte[BUFFER_SIZE];
- int b;
- while ((b = in.read(buffer)) > -1) {
- out.write(buffer, 0, b);
- }
-
- in.close();
- out.flush();
- }
-
- /**
- * UpdateProperties.
- */
- public static void updateProperties(CallContext context, AbstractServicesFactory factory,
- String repositoryId, HttpServletRequest request, HttpServletResponse response)
- throws Exception {
-
- // get parameters
- String objectId = getStringParameter(request, Constants.PARAM_ID);
- Boolean checkin = getBooleanParameter(request, Constants.PARAM_CHECK_IN);
- String checkinComment = getStringParameter(request, Constants.PARAM_CHECKIN_COMMENT);
- Boolean major = getBooleanParameter(request, Constants.PARAM_MAJOR);
-
- AtomEntryParser parser = new AtomEntryParser(request.getInputStream());
-
- // execute
- ObjectInfoHolder objectInfoHolder = new ObjectInfoHolderImpl();
- ObjectData object = null;
-
- if ((checkin != null) && (checkin.booleanValue())) {
- CmisVersioningService service = factory.getVersioningService();
- object = service.checkIn(context, repositoryId, new Holder<String>(objectId), major, parser
- .getProperties(), parser.getContentStream(), checkinComment, parser.getPolicyIds(), null,
- null, null, objectInfoHolder);
- }
- else {
- String changeToken = extractChangeToken(parser.getProperties());
-
- CmisObjectService service = factory.getObjectService();
- object = service.updateProperties(context, repositoryId, new Holder<String>(objectId),
- changeToken == null ? null : new Holder<String>(changeToken), parser.getProperties(),
- parser.getAcl(), null, objectInfoHolder);
- }
-
- if (object == null) {
- throw new CmisRuntimeException("Object is null!");
- }
-
- if (object.getId() == null) {
- throw new CmisRuntimeException("Object Id is null!");
- }
-
- // set headers
- UrlBuilder baseUrl = compileBaseUrl(request, repositoryId);
- String location = compileUrl(baseUrl, RESOURCE_ENTRY, object.getId());
-
- response.setStatus(HttpServletResponse.SC_CREATED);
- response.setContentType(Constants.MEDIATYPE_ENTRY);
- response.setHeader("Content-Location", location);
- response.setHeader("Location", location);
-
- // write XML
- AtomEntry entry = new AtomEntry();
- entry.startDocument(response.getOutputStream());
- writeObjectEntry(entry, object, objectInfoHolder, null, repositoryId, null, null, baseUrl, true);
- entry.endDocument();
- }
-
- /**
- * Gets the change token from a property set.
- */
- private static String extractChangeToken(Properties properties) {
- if (properties == null) {
- return null;
- }
-
- Map<String, PropertyData<?>> propertiesMap = properties.getProperties();
- if (propertiesMap == null) {
- return null;
- }
-
- PropertyData<?> changeLogProperty = propertiesMap.get(PropertyIds.CHANGE_TOKEN);
- if (!(changeLogProperty instanceof PropertyString)) {
- return null;
- }
+ /**
+ * Create*.
+ */
+ public static void create(CallContext context, AbstractServicesFactory factory, String repositoryId,
+ HttpServletRequest request, HttpServletResponse response) throws Exception {
+
+ // get parameters
+ String folderId = getStringParameter(request, Constants.PARAM_ID);
+ String sourceFolderId = getStringParameter(request, Constants.PARAM_SOURCE_FOLDER_ID);
+ VersioningState versioningState = getEnumParameter(request, Constants.PARAM_VERSIONIG_STATE,
+ VersioningState.class);
+
+ AtomEntryParser parser = new AtomEntryParser(request.getInputStream());
+ String objectId = parser.getId();
+
+ // execute
+ ObjectInfoHolder objectInfoHolder = new ObjectInfoHolderImpl();
+ ObjectData object = null;
+
+ if (objectId == null) {
+ // create
+ CmisObjectService service = factory.getObjectService();
+ object = service.create(context, repositoryId, parser.getProperties(), folderId, parser.getContentStream(),
+ versioningState, parser.getPolicyIds(), null, objectInfoHolder);
+ } else {
+ if ((sourceFolderId == null) || (sourceFolderId.trim().length() == 0)) {
+ // addObjectToFolder
+ CmisMultiFilingService service = factory.getMultiFilingService();
+ object = service.addObjectToFolder(context, repositoryId, objectId, sourceFolderId, null, null,
+ objectInfoHolder);
+ } else {
+ // move
+ CmisObjectService service = factory.getObjectService();
+ object = service.moveObject(context, repositoryId, new Holder<String>(objectId), folderId,
+ sourceFolderId, null, objectInfoHolder);
+ }
+ }
+
+ if (object == null) {
+ throw new CmisRuntimeException("Object is null!");
+ }
+
+ if (object.getId() == null) {
+ throw new CmisRuntimeException("Object Id is null!");
+ }
+
+ // set headers
+ UrlBuilder baseUrl = compileBaseUrl(request, repositoryId);
+
+ response.setStatus(HttpServletResponse.SC_CREATED);
+ response.setContentType(Constants.MEDIATYPE_ENTRY);
+ response.setHeader("Location", compileUrl(baseUrl, RESOURCE_ENTRY, object.getId()));
+
+ // write XML
+ AtomEntry entry = new AtomEntry();
+ entry.startDocument(response.getOutputStream());
+ writeObjectEntry(entry, object, objectInfoHolder, null, repositoryId, null, null, baseUrl, true);
+ entry.endDocument();
+ }
+
+ /**
+ * Create relationship.
+ */
+ public static void createRelationship(CallContext context, AbstractServicesFactory factory, String repositoryId,
+ HttpServletRequest request, HttpServletResponse response) throws Exception {
+ CmisObjectService service = factory.getObjectService();
+
+ // get parameters
+ AtomEntryParser parser = new AtomEntryParser(request.getInputStream());
+
+ // execute
+ ObjectInfoHolder objectInfoHolder = new ObjectInfoHolderImpl();
+ ObjectData object = service.create(context, repositoryId, parser.getProperties(), null, null, null, parser
+ .getPolicyIds(), null, objectInfoHolder);
+
+ // set headers
+ UrlBuilder baseUrl = compileBaseUrl(request, repositoryId);
+
+ response.setStatus(HttpServletResponse.SC_CREATED);
+ response.setContentType(Constants.MEDIATYPE_ENTRY);
+ response.setHeader("Location", compileUrl(baseUrl, RESOURCE_ENTRY, object.getId()));
+
+ // write XML
+ AtomEntry entry = new AtomEntry();
+ entry.startDocument(response.getOutputStream());
+ writeObjectEntry(entry, object, objectInfoHolder, null, repositoryId, null, null, baseUrl, true);
+ entry.endDocument();
+ }
+
+ /**
+ * Delete object.
+ */
+ public static void deleteObject(CallContext context, AbstractServicesFactory factory, String repositoryId,
+ HttpServletRequest request, HttpServletResponse response) throws Exception {
+ CmisObjectService service = factory.getObjectService();
+
+ // get parameters
+ String objectId = getStringParameter(request, Constants.PARAM_ID);
+ Boolean allVersions = getBooleanParameter(request, Constants.PARAM_ALL_VERSIONS);
+
+ // execute
+ service.deleteObjectOrCancelCheckOut(context, repositoryId, objectId, allVersions, null);
+
+ // set headers
+ response.setStatus(HttpServletResponse.SC_NO_CONTENT);
+ }
+
+ /**
+ * Delete content stream.
+ */
+ public static void deleteContentStream(CallContext context, AbstractServicesFactory factory, String repositoryId,
+ HttpServletRequest request, HttpServletResponse response) throws Exception {
+ CmisObjectService service = factory.getObjectService();
+
+ // get parameters
+ String objectId = getStringParameter(request, Constants.PARAM_ID);
+ String changeToken = getStringParameter(request, Constants.PARAM_CHANGE_TOKEN);
+
+ // execute
+ service.deleteContentStream(context, repositoryId, new Holder<String>(objectId), changeToken == null ? null
+ : new Holder<String>(changeToken), null);
+
+ // set headers
+ response.setStatus(HttpServletResponse.SC_NO_CONTENT);
+ }
+
+ /**
+ * Set content stream.
+ */
+ public static void setContentStream(CallContext context, AbstractServicesFactory factory, String repositoryId,
+ HttpServletRequest request, HttpServletResponse response) throws Exception {
+ CmisObjectService service = factory.getObjectService();
+
+ // get parameters
+ String objectId = getStringParameter(request, Constants.PARAM_ID);
+ String changeToken = getStringParameter(request, Constants.PARAM_CHANGE_TOKEN);
+ Boolean overwriteFlag = getBooleanParameter(request, Constants.PARAM_OVERWRITE_FLAG);
+
+ ContentStreamImpl contentStream = new ContentStreamImpl();
+ contentStream.setStream(request.getInputStream());
+ contentStream.setMimeType(request.getHeader("Content-Type"));
+ String lengthStr = request.getHeader("Content-Length");
+ if (lengthStr != null) {
+ try {
+ contentStream.setLength(new BigInteger(lengthStr));
+ } catch (NumberFormatException e) {
+ }
+ }
+
+ // execute
+ Holder<String> objectIdHolder = new Holder<String>(objectId);
+ service.setContentStream(context, repositoryId, objectIdHolder, overwriteFlag, changeToken == null ? null
+ : new Holder<String>(changeToken), contentStream, null);
+
+ // set headers
+ String newObjectId = (objectIdHolder.getValue() == null ? objectId : objectIdHolder.getValue());
+ String location = compileUrl(compileBaseUrl(request, repositoryId), RESOURCE_CONTENT, newObjectId);
+
+ response.setStatus(HttpServletResponse.SC_CREATED);
+ response.setHeader("Content-Location", location);
+ response.setHeader("Location", location);
+ }
+
+ /**
+ * Delete tree.
+ */
+ public static void deleteTree(CallContext context, AbstractServicesFactory factory, String repositoryId,
+ HttpServletRequest request, HttpServletResponse response) throws Exception {
+ CmisObjectService service = factory.getObjectService();
+
+ // get parameters
+ String folderId = getStringParameter(request, Constants.PARAM_ID);
+ Boolean allVersions = getBooleanParameter(request, Constants.PARAM_ALL_VERSIONS);
+ UnfileObject unfileObjects = getEnumParameter(request, Constants.PARAM_UNFILE_OBJECTS, UnfileObject.class);
+ Boolean continueOnFailure = getBooleanParameter(request, Constants.PARAM_CONTINUE_ON_FAILURE);
+
+ // execute
+ FailedToDeleteData ftd = service.deleteTree(context, repositoryId, folderId, allVersions, unfileObjects,
+ continueOnFailure, null);
+
+ if ((ftd != null) && (ftd.getIds() != null) && (ftd.getIds().size() > 0)) {
+ // print ids that could not be deleted
+ response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+ response.setContentType("text/plain");
+
+ PrintWriter pw = response.getWriter();
+
+ pw.println("Failed to delete the following objects:");
+ for (String id : ftd.getIds()) {
+ pw.println(id);
+ }
+
+ pw.flush();
+
+ return;
+ }
+
+ // set headers
+ response.setStatus(HttpServletResponse.SC_NO_CONTENT);
+ }
+
+ /**
+ * getObject.
+ */
+ public static void getObject(CallContext context, AbstractServicesFactory factory, String repositoryId,
+ HttpServletRequest request, HttpServletResponse response) throws Exception {
+
+ // get parameters
+ String objectId = getStringParameter(request, Constants.PARAM_ID);
+ ReturnVersion returnVersion = getEnumParameter(request, Constants.PARAM_RETURN_VERSION, ReturnVersion.class);
+ String filter = getStringParameter(request, Constants.PARAM_FILTER);
+ Boolean includeAllowableActions = getBooleanParameter(request, Constants.PARAM_ALLOWABLE_ACTIONS);
+ IncludeRelationships includeRelationships = getEnumParameter(request, Constants.PARAM_RELATIONSHIPS,
+ IncludeRelationships.class);
+ String renditionFilter = getStringParameter(request, Constants.PARAM_RENDITION_FILTER);
+ Boolean includePolicyIds = getBooleanParameter(request, Constants.PARAM_POLICY_IDS);
+ Boolean includeAcl = getBooleanParameter(request, Constants.PARAM_ACL);
+
+ // execute
+ ObjectInfoHolder objectInfoHolder = new ObjectInfoHolderImpl();
+ ObjectData object = null;
+
+ if ((returnVersion == ReturnVersion.LATEST) || (returnVersion == ReturnVersion.LASTESTMAJOR)) {
+ CmisVersioningService service = factory.getVersioningService();
+ object = service.getObjectOfLatestVersion(context, repositoryId, objectId,
+ returnVersion == ReturnVersion.LASTESTMAJOR, filter, includeAllowableActions, includeRelationships,
+ renditionFilter, includePolicyIds, includeAcl, null, objectInfoHolder);
+ } else {
+ CmisObjectService service = factory.getObjectService();
+ object = service.getObject(context, repositoryId, objectId, filter, includeAllowableActions,
+ includeRelationships, renditionFilter, includePolicyIds, includeAcl, null, objectInfoHolder);
+ }
+
+ if (object == null) {
+ throw new CmisRuntimeException("Object is null!");
+ }
+
+ ObjectInfo objectInfo = objectInfoHolder.getObjectInfo(object.getId());
+ if (objectInfo == null) {
+ throw new CmisRuntimeException("Object Info is missing!");
+ }
+
+ // set headers
+ response.setStatus(HttpServletResponse.SC_OK);
+ response.setContentType(Constants.MEDIATYPE_ENTRY);
+
+ // write XML
+ UrlBuilder baseUrl = compileBaseUrl(request, repositoryId);
+
+ AtomEntry entry = new AtomEntry();
+ entry.startDocument(response.getOutputStream());
+ writeObjectEntry(entry, object, objectInfoHolder, null, repositoryId, null, null, baseUrl, true);
+ entry.endDocument();
+ }
+
+ /**
+ * objectByPath URI template.
+ */
+ public static void getObjectByPath(CallContext context, AbstractServicesFactory factory, String repositoryId,
+ HttpServletRequest request, HttpServletResponse response) throws Exception {
+ CmisObjectService service = factory.getObjectService();
+
+ // get parameters
+ String path = getStringParameter(request, Constants.PARAM_PATH);
+ String filter = getStringParameter(request, Constants.PARAM_FILTER);
+ Boolean includeAllowableActions = getBooleanParameter(request, Constants.PARAM_ALLOWABLE_ACTIONS);
+ IncludeRelationships includeRelationships = getEnumParameter(request, Constants.PARAM_RELATIONSHIPS,
+ IncludeRelationships.class);
+ String renditionFilter = getStringParameter(request, Constants.PARAM_RENDITION_FILTER);
+ Boolean includePolicyIds = getBooleanParameter(request, Constants.PARAM_POLICY_IDS);
+ Boolean includeAcl = getBooleanParameter(request, Constants.PARAM_ACL);
+
+ // execute
+ ObjectInfoHolder objectInfoHolder = new ObjectInfoHolderImpl();
+ ObjectData object = service.getObjectByPath(context, repositoryId, path, filter, includeAllowableActions,
+ includeRelationships, renditionFilter, includePolicyIds, includeAcl, null, objectInfoHolder);
+
+ if (object == null) {
+ throw new CmisRuntimeException("Object is null!");
+ }
+
+ ObjectInfo objectInfo = objectInfoHolder.getObjectInfo(object.getId());
+ if (objectInfo == null) {
+ throw new CmisRuntimeException("Object Info is missing!");
+ }
+
+ // set headers
+ response.setStatus(HttpServletResponse.SC_OK);
+ response.setContentType(Constants.MEDIATYPE_ENTRY);
+
+ // write XML
+ UrlBuilder baseUrl = compileBaseUrl(request, repositoryId);
+
+ AtomEntry entry = new AtomEntry();
+ entry.startDocument(response.getOutputStream());
+ writeObjectEntry(entry, object, objectInfoHolder, null, repositoryId, null, null, baseUrl, true);
+ entry.endDocument();
+ }
+
+ /**
+ * Allowable Actions.
+ */
+ public static void getAllowableActions(CallContext context, AbstractServicesFactory factory, String repositoryId,
+ HttpServletRequest request, HttpServletResponse response) throws Exception {
+ CmisObjectService service = factory.getObjectService();
+
+ // get parameters
+ String objectId = getStringParameter(request, Constants.PARAM_ID);
+
+ // execute
+ AllowableActions allowableActions = service.getAllowableActions(context, repositoryId, objectId, null);
+
+ if (allowableActions == null) {
+ throw new CmisRuntimeException("Allowable Actions is null!");
+ }
+
+ // set headers
+ response.setStatus(HttpServletResponse.SC_OK);
+ response.setContentType(Constants.MEDIATYPE_ALLOWABLEACTION);
+
+ // write XML
+ AllowableActionsDocument allowableActionsDocument = new AllowableActionsDocument();
+ allowableActionsDocument.writeAllowableActions(allowableActions, response.getOutputStream());
+ }
+
+ /**
+ * getContentStream.
+ */
+ public static void getContentStream(CallContext context, AbstractServicesFactory factory, String repositoryId,
+ HttpServletRequest request, HttpServletResponse response) throws Exception {
+ CmisObjectService service = factory.getObjectService();
+
+ // get parameters
+ String objectId = getStringParameter(request, Constants.PARAM_ID);
+ String streamId = getStringParameter(request, Constants.PARAM_STREAM_ID);
+
+ BigInteger offset = null;
+ String offsetStr = context.get(CallContext.OFFSET);
+ if (offsetStr != null) {
+ offset = new BigInteger(offsetStr);
+ }
+
+ BigInteger length = null;
+ String lengthStr = context.get(CallContext.LENGTH);
+ if (lengthStr != null) {
+ length = new BigInteger(offsetStr);
+ }
+
+ // execute
+ ContentStream content = service.getContentStream(context, repositoryId, objectId, streamId, offset, length,
+ null);
+
+ if ((content == null) || (content.getStream() == null)) {
+ throw new CmisRuntimeException("Content stream is null!");
+ }
+
+ String contentType = content.getMimeType();
+ if (contentType == null) {
+ contentType = Constants.MEDIATYPE_OCTETSTREAM;
+ }
+
+ // set headers
+ if ((offset == null) && (length == null)) {
+ response.setStatus(HttpServletResponse.SC_OK);
+ } else {
+ response.setStatus(HttpServletResponse.SC_PARTIAL_CONTENT);
+ }
+ response.setContentType(contentType);
+
+ // send content
+ InputStream in = new BufferedInputStream(content.getStream(), BUFFER_SIZE);
+ OutputStream out = new BufferedOutputStream(response.getOutputStream());
+
+ byte[] buffer = new byte[BUFFER_SIZE];
+ int b;
+ while ((b = in.read(buffer)) > -1) {
+ out.write(buffer, 0, b);
+ }
+
+ in.close();
+ out.flush();
+ }
+
+ /**
+ * UpdateProperties.
+ */
+ public static void updateProperties(CallContext context, AbstractServicesFactory factory, String repositoryId,
+ HttpServletRequest request, HttpServletResponse response) throws Exception {
+
+ // get parameters
+ String objectId = getStringParameter(request, Constants.PARAM_ID);
+ Boolean checkin = getBooleanParameter(request, Constants.PARAM_CHECK_IN);
+ String checkinComment = getStringParameter(request, Constants.PARAM_CHECKIN_COMMENT);
+ Boolean major = getBooleanParameter(request, Constants.PARAM_MAJOR);
+
+ AtomEntryParser parser = new AtomEntryParser(request.getInputStream());
+
+ // execute
+ ObjectInfoHolder objectInfoHolder = new ObjectInfoHolderImpl();
+ ObjectData object = null;
+
+ if ((checkin != null) && (checkin.booleanValue())) {
+ CmisVersioningService service = factory.getVersioningService();
+ object = service.checkIn(context, repositoryId, new Holder<String>(objectId), major,
+ parser.getProperties(), parser.getContentStream(), checkinComment, parser.getPolicyIds(), null,
+ null, null, objectInfoHolder);
+ } else {
+ String changeToken = extractChangeToken(parser.getProperties());
+
+ CmisObjectService service = factory.getObjectService();
+ object = service.updateProperties(context, repositoryId, new Holder<String>(objectId),
+ changeToken == null ? null : new Holder<String>(changeToken), parser.getProperties(), parser
+ .getAcl(), null, objectInfoHolder);
+ }
+
+ if (object == null) {
+ throw new CmisRuntimeException("Object is null!");
+ }
+
+ if (object.getId() == null) {
+ throw new CmisRuntimeException("Object Id is null!");
+ }
+
+ // set headers
+ UrlBuilder baseUrl = compileBaseUrl(request, repositoryId);
+ String location = compileUrl(baseUrl, RESOURCE_ENTRY, object.getId());
+
+ response.setStatus(HttpServletResponse.SC_CREATED);
+ response.setContentType(Constants.MEDIATYPE_ENTRY);
+ response.setHeader("Content-Location", location);
+ response.setHeader("Location", location);
+
+ // write XML
+ AtomEntry entry = new AtomEntry();
+ entry.startDocument(response.getOutputStream());
+ writeObjectEntry(entry, object, objectInfoHolder, null, repositoryId, null, null, baseUrl, true);
+ entry.endDocument();
+ }
+
+ /**
+ * Gets the change token from a property set.
+ */
+ private static String extractChangeToken(Properties properties) {
+ if (properties == null) {
+ return null;
+ }
+
+ Map<String, PropertyData<?>> propertiesMap = properties.getProperties();
+ if (propertiesMap == null) {
+ return null;
+ }
+
+ PropertyData<?> changeLogProperty = propertiesMap.get(PropertyIds.CHANGE_TOKEN);
+ if (!(changeLogProperty instanceof PropertyString)) {
+ return null;
+ }
- return ((PropertyString) changeLogProperty).getFirstValue();
- }
+ return ((PropertyString) changeLogProperty).getFirstValue();
+ }
}
Modified: incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/atompub/PolicyService.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/atompub/PolicyService.java?rev=934896&r1=934895&r2=934896&view=diff
==============================================================================
--- incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/atompub/PolicyService.java (original)
+++ incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/atompub/PolicyService.java Fri Apr 16 14:14:00 2010
@@ -50,153 +50,150 @@ import org.apache.chemistry.opencmis.ser
*/
public class PolicyService {
- /**
- * Get applied policies.
- */
- public static void getAppliedPolicies(CallContext context, AbstractServicesFactory factory,
- String repositoryId, HttpServletRequest request, HttpServletResponse response)
- throws Exception {
- CmisPolicyService service = factory.getPolicyService();
-
- // get parameters
- String objectId = getStringParameter(request, Constants.PARAM_ID);
- String filter = getStringParameter(request, Constants.PARAM_FILTER);
-
- // execute
- ObjectInfoHolder objectInfoHolder = new ObjectInfoHolderImpl();
- List<ObjectData> policies = service.getAppliedPolicies(context, repositoryId, objectId, filter,
- null, objectInfoHolder);
-
- if (policies == null) {
- throw new CmisRuntimeException("Policies are null!");
- }
-
- ObjectInfo objectInfo = objectInfoHolder.getObjectInfo(objectId);
- if (objectInfo == null) {
- throw new CmisRuntimeException("Object Info is missing!");
- }
-
- // set headers
- response.setStatus(HttpServletResponse.SC_OK);
- response.setContentType(Constants.MEDIATYPE_FEED);
-
- // write XML
- AtomFeed feed = new AtomFeed();
- feed.startDocument(response.getOutputStream());
- feed.startFeed(true);
-
- // write basic Atom feed elements
- feed.writeFeedElements(objectInfo.getId(), objectInfo.getCreatedBy(), objectInfo.getName(),
- objectInfo.getLastModificationDate(), null, null);
-
- // write links
- UrlBuilder baseUrl = compileBaseUrl(request, repositoryId);
-
- feed.writeServiceLink(baseUrl.toString(), repositoryId);
-
- feed.writeSelfLink(compileUrl(baseUrl, RESOURCE_POLICIES, objectInfo.getId()), null);
-
- // write entries
- if (policies != null) {
- AtomEntry entry = new AtomEntry(feed.getWriter());
- for (ObjectData policy : policies) {
- if (policy == null) {
- continue;
- }
- writePolicyEntry(entry, objectInfo.getId(), policy, objectInfoHolder, baseUrl);
- }
- }
-
- // we are done
- feed.endFeed();
- feed.endDocument();
- }
-
- /**
- * Apply policy.
- */
- public static void applyPolicy(CallContext context, AbstractServicesFactory factory,
- String repositoryId, HttpServletRequest request, HttpServletResponse response)
- throws Exception {
- CmisPolicyService service = factory.getPolicyService();
-
- // get parameters
- String objectId = getStringParameter(request, Constants.PARAM_ID);
-
- AtomEntryParser parser = new AtomEntryParser(request.getInputStream());
-
- // execute
- ObjectInfoHolder objectInfoHolder = new ObjectInfoHolderImpl();
- ObjectData policy = service.applyPolicy(context, repositoryId, parser.getId(), objectId, null,
- objectInfoHolder);
-
- if (policy == null) {
- throw new CmisRuntimeException("Policy is null!");
- }
-
- // set headers
- UrlBuilder baseUrl = compileBaseUrl(request, repositoryId);
- UrlBuilder location = compileUrlBuilder(baseUrl, RESOURCE_POLICIES, objectId);
- location.addParameter(Constants.PARAM_POLICY_ID, policy.getId());
-
- response.setStatus(HttpServletResponse.SC_CREATED);
- response.setContentType(Constants.MEDIATYPE_ENTRY);
- response.setHeader("Content-Location", location.toString());
- response.setHeader("Location", location.toString());
-
- // write XML
- AtomEntry entry = new AtomEntry();
- entry.startDocument(response.getOutputStream());
- writePolicyEntry(entry, objectId, policy, objectInfoHolder, baseUrl);
- entry.endDocument();
- }
-
- /**
- * Remove policy.
- */
- public static void removePolicy(CallContext context, AbstractServicesFactory factory,
- String repositoryId, HttpServletRequest request, HttpServletResponse response)
- throws Exception {
- CmisPolicyService service = factory.getPolicyService();
-
- // get parameters
- String objectId = getStringParameter(request, Constants.PARAM_ID);
- String policyId = getStringParameter(request, Constants.PARAM_POLICY_ID);
-
- // execute
- service.removePolicy(context, repositoryId, policyId, objectId, null);
-
- // set headers
- response.setStatus(HttpServletResponse.SC_NO_CONTENT);
- }
-
- /**
- * Writes an entry that is attached to an object.
- */
- private static void writePolicyEntry(AtomEntry entry, String objectId, ObjectData policy,
- ObjectInfoHolder infoHolder, UrlBuilder baseUrl) throws Exception {
- CmisObjectType resultJaxb = convert(policy);
- if (resultJaxb == null) {
- return;
- }
-
- ObjectInfo info = infoHolder.getObjectInfo(policy.getId());
- if (info == null) {
- throw new CmisRuntimeException("Object Info not found!");
- }
-
- // start
- entry.startEntry(false);
-
- // write the object
- entry.writeObject(policy, info, null, null, null, null);
-
- // write links
- UrlBuilder selfLink = compileUrlBuilder(baseUrl, RESOURCE_POLICIES, objectId);
- selfLink.addParameter(Constants.PARAM_POLICY_ID, info.getId());
- entry.writeSelfLink(selfLink.toString(), null);
-
- // we are done
- entry.endEntry();
- }
+ /**
+ * Get applied policies.
+ */
+ public static void getAppliedPolicies(CallContext context, AbstractServicesFactory factory, String repositoryId,
+ HttpServletRequest request, HttpServletResponse response) throws Exception {
+ CmisPolicyService service = factory.getPolicyService();
+
+ // get parameters
+ String objectId = getStringParameter(request, Constants.PARAM_ID);
+ String filter = getStringParameter(request, Constants.PARAM_FILTER);
+
+ // execute
+ ObjectInfoHolder objectInfoHolder = new ObjectInfoHolderImpl();
+ List<ObjectData> policies = service.getAppliedPolicies(context, repositoryId, objectId, filter, null,
+ objectInfoHolder);
+
+ if (policies == null) {
+ throw new CmisRuntimeException("Policies are null!");
+ }
+
+ ObjectInfo objectInfo = objectInfoHolder.getObjectInfo(objectId);
+ if (objectInfo == null) {
+ throw new CmisRuntimeException("Object Info is missing!");
+ }
+
+ // set headers
+ response.setStatus(HttpServletResponse.SC_OK);
+ response.setContentType(Constants.MEDIATYPE_FEED);
+
+ // write XML
+ AtomFeed feed = new AtomFeed();
+ feed.startDocument(response.getOutputStream());
+ feed.startFeed(true);
+
+ // write basic Atom feed elements
+ feed.writeFeedElements(objectInfo.getId(), objectInfo.getCreatedBy(), objectInfo.getName(), objectInfo
+ .getLastModificationDate(), null, null);
+
+ // write links
+ UrlBuilder baseUrl = compileBaseUrl(request, repositoryId);
+
+ feed.writeServiceLink(baseUrl.toString(), repositoryId);
+
+ feed.writeSelfLink(compileUrl(baseUrl, RESOURCE_POLICIES, objectInfo.getId()), null);
+
+ // write entries
+ if (policies != null) {
+ AtomEntry entry = new AtomEntry(feed.getWriter());
+ for (ObjectData policy : policies) {
+ if (policy == null) {
+ continue;
+ }
+ writePolicyEntry(entry, objectInfo.getId(), policy, objectInfoHolder, baseUrl);
+ }
+ }
+
+ // we are done
+ feed.endFeed();
+ feed.endDocument();
+ }
+
+ /**
+ * Apply policy.
+ */
+ public static void applyPolicy(CallContext context, AbstractServicesFactory factory, String repositoryId,
+ HttpServletRequest request, HttpServletResponse response) throws Exception {
+ CmisPolicyService service = factory.getPolicyService();
+
+ // get parameters
+ String objectId = getStringParameter(request, Constants.PARAM_ID);
+
+ AtomEntryParser parser = new AtomEntryParser(request.getInputStream());
+
+ // execute
+ ObjectInfoHolder objectInfoHolder = new ObjectInfoHolderImpl();
+ ObjectData policy = service
+ .applyPolicy(context, repositoryId, parser.getId(), objectId, null, objectInfoHolder);
+
+ if (policy == null) {
+ throw new CmisRuntimeException("Policy is null!");
+ }
+
+ // set headers
+ UrlBuilder baseUrl = compileBaseUrl(request, repositoryId);
+ UrlBuilder location = compileUrlBuilder(baseUrl, RESOURCE_POLICIES, objectId);
+ location.addParameter(Constants.PARAM_POLICY_ID, policy.getId());
+
+ response.setStatus(HttpServletResponse.SC_CREATED);
+ response.setContentType(Constants.MEDIATYPE_ENTRY);
+ response.setHeader("Content-Location", location.toString());
+ response.setHeader("Location", location.toString());
+
+ // write XML
+ AtomEntry entry = new AtomEntry();
+ entry.startDocument(response.getOutputStream());
+ writePolicyEntry(entry, objectId, policy, objectInfoHolder, baseUrl);
+ entry.endDocument();
+ }
+
+ /**
+ * Remove policy.
+ */
+ public static void removePolicy(CallContext context, AbstractServicesFactory factory, String repositoryId,
+ HttpServletRequest request, HttpServletResponse response) throws Exception {
+ CmisPolicyService service = factory.getPolicyService();
+
+ // get parameters
+ String objectId = getStringParameter(request, Constants.PARAM_ID);
+ String policyId = getStringParameter(request, Constants.PARAM_POLICY_ID);
+
+ // execute
+ service.removePolicy(context, repositoryId, policyId, objectId, null);
+
+ // set headers
+ response.setStatus(HttpServletResponse.SC_NO_CONTENT);
+ }
+
+ /**
+ * Writes an entry that is attached to an object.
+ */
+ private static void writePolicyEntry(AtomEntry entry, String objectId, ObjectData policy,
+ ObjectInfoHolder infoHolder, UrlBuilder baseUrl) throws Exception {
+ CmisObjectType resultJaxb = convert(policy);
+ if (resultJaxb == null) {
+ return;
+ }
+
+ ObjectInfo info = infoHolder.getObjectInfo(policy.getId());
+ if (info == null) {
+ throw new CmisRuntimeException("Object Info not found!");
+ }
+
+ // start
+ entry.startEntry(false);
+
+ // write the object
+ entry.writeObject(policy, info, null, null, null, null);
+
+ // write links
+ UrlBuilder selfLink = compileUrlBuilder(baseUrl, RESOURCE_POLICIES, objectId);
+ selfLink.addParameter(Constants.PARAM_POLICY_ID, info.getId());
+ entry.writeSelfLink(selfLink.toString(), null);
+
+ // we are done
+ entry.endEntry();
+ }
}
Modified: incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/atompub/RelationshipService.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/atompub/RelationshipService.java?rev=934896&r1=934895&r2=934896&view=diff
==============================================================================
--- incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/atompub/RelationshipService.java (original)
+++ incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/atompub/RelationshipService.java Fri Apr 16 14:14:00 2010
@@ -54,86 +54,81 @@ import org.apache.chemistry.opencmis.ser
*/
public class RelationshipService {
- /**
- * Get object relationships.
- */
- public static void getObjectRelationships(CallContext context, AbstractServicesFactory factory,
- String repositoryId, HttpServletRequest request, HttpServletResponse response)
- throws Exception {
- CmisRelationshipService service = factory.getRelationshipService();
-
- // get parameters
- String objectId = getStringParameter(request, Constants.PARAM_ID);
- Boolean includeSubRelationshipTypes = getBooleanParameter(request,
- Constants.PARAM_SUB_RELATIONSHIP_TYPES);
- RelationshipDirection relationshipDirection = getEnumParameter(request,
- Constants.PARAM_RELATIONSHIP_DIRECTION, RelationshipDirection.class);
- String typeId = getStringParameter(request, Constants.PARAM_TYPE_ID);
- String filter = getStringParameter(request, Constants.PARAM_FILTER);
- Boolean includeAllowableActions = getBooleanParameter(request,
- Constants.PARAM_ALLOWABLE_ACTIONS);
- BigInteger maxItems = getBigIntegerParameter(request, Constants.PARAM_MAX_ITEMS);
- BigInteger skipCount = getBigIntegerParameter(request, Constants.PARAM_SKIP_COUNT);
-
- // execute
- ObjectInfoHolder objectInfoHolder = new ObjectInfoHolderImpl();
- ObjectList relationships = service.getObjectRelationships(context, repositoryId, objectId,
- includeSubRelationshipTypes, relationshipDirection, typeId, filter,
- includeAllowableActions, maxItems, skipCount, null, objectInfoHolder);
-
- if (relationships == null) {
- throw new CmisRuntimeException("Relationships are null!");
- }
-
- ObjectInfo objectInfo = objectInfoHolder.getObjectInfo(objectId);
- if (objectInfo == null) {
- throw new CmisRuntimeException("Object Info is missing!");
- }
-
- // set headers
- response.setStatus(HttpServletResponse.SC_OK);
- response.setContentType(Constants.MEDIATYPE_FEED);
-
- // write XML
- AtomFeed feed = new AtomFeed();
- feed.startDocument(response.getOutputStream());
- feed.startFeed(true);
-
- // write basic Atom feed elements
- feed.writeFeedElements(objectInfo.getId(), objectInfo.getCreatedBy(), objectInfo.getName(),
- objectInfo.getLastModificationDate(), null, relationships.getNumItems());
-
- // write links
- UrlBuilder baseUrl = compileBaseUrl(request, repositoryId);
-
- feed.writeServiceLink(baseUrl.toString(), repositoryId);
-
- feed.writeSelfLink(compileUrl(baseUrl, RESOURCE_RELATIONSHIPS, objectInfo.getId()), null);
-
- UrlBuilder pagingUrl = new UrlBuilder(compileUrlBuilder(baseUrl, RESOURCE_RELATIONSHIPS,
- objectInfo.getId()));
- pagingUrl.addParameter(Constants.PARAM_SUB_RELATIONSHIP_TYPES, includeSubRelationshipTypes);
- pagingUrl.addParameter(Constants.PARAM_RELATIONSHIP_DIRECTION, relationshipDirection);
- pagingUrl.addParameter(Constants.PARAM_TYPE_ID, typeId);
- pagingUrl.addParameter(Constants.PARAM_FILTER, filter);
- pagingUrl.addParameter(Constants.PARAM_ALLOWABLE_ACTIONS, includeAllowableActions);
- feed.writePagingLinks(pagingUrl, maxItems, skipCount, relationships.getNumItems(),
- relationships.hasMoreItems(), AtomPubUtils.PAGE_SIZE);
-
- // write entries
- if (relationships != null) {
- AtomEntry entry = new AtomEntry(feed.getWriter());
- for (ObjectData object : relationships.getObjects()) {
- if (object == null) {
- continue;
- }
- writeObjectEntry(entry, object, objectInfoHolder, null, repositoryId, null, null, baseUrl,
- false);
- }
- }
-
- // we are done
- feed.endFeed();
- feed.endDocument();
- }
+ /**
+ * Get object relationships.
+ */
+ public static void getObjectRelationships(CallContext context, AbstractServicesFactory factory,
+ String repositoryId, HttpServletRequest request, HttpServletResponse response) throws Exception {
+ CmisRelationshipService service = factory.getRelationshipService();
+
+ // get parameters
+ String objectId = getStringParameter(request, Constants.PARAM_ID);
+ Boolean includeSubRelationshipTypes = getBooleanParameter(request, Constants.PARAM_SUB_RELATIONSHIP_TYPES);
+ RelationshipDirection relationshipDirection = getEnumParameter(request, Constants.PARAM_RELATIONSHIP_DIRECTION,
+ RelationshipDirection.class);
+ String typeId = getStringParameter(request, Constants.PARAM_TYPE_ID);
+ String filter = getStringParameter(request, Constants.PARAM_FILTER);
+ Boolean includeAllowableActions = getBooleanParameter(request, Constants.PARAM_ALLOWABLE_ACTIONS);
+ BigInteger maxItems = getBigIntegerParameter(request, Constants.PARAM_MAX_ITEMS);
+ BigInteger skipCount = getBigIntegerParameter(request, Constants.PARAM_SKIP_COUNT);
+
+ // execute
+ ObjectInfoHolder objectInfoHolder = new ObjectInfoHolderImpl();
+ ObjectList relationships = service.getObjectRelationships(context, repositoryId, objectId,
+ includeSubRelationshipTypes, relationshipDirection, typeId, filter, includeAllowableActions, maxItems,
+ skipCount, null, objectInfoHolder);
+
+ if (relationships == null) {
+ throw new CmisRuntimeException("Relationships are null!");
+ }
+
+ ObjectInfo objectInfo = objectInfoHolder.getObjectInfo(objectId);
+ if (objectInfo == null) {
+ throw new CmisRuntimeException("Object Info is missing!");
+ }
+
+ // set headers
+ response.setStatus(HttpServletResponse.SC_OK);
+ response.setContentType(Constants.MEDIATYPE_FEED);
+
+ // write XML
+ AtomFeed feed = new AtomFeed();
+ feed.startDocument(response.getOutputStream());
+ feed.startFeed(true);
+
+ // write basic Atom feed elements
+ feed.writeFeedElements(objectInfo.getId(), objectInfo.getCreatedBy(), objectInfo.getName(), objectInfo
+ .getLastModificationDate(), null, relationships.getNumItems());
+
+ // write links
+ UrlBuilder baseUrl = compileBaseUrl(request, repositoryId);
+
+ feed.writeServiceLink(baseUrl.toString(), repositoryId);
+
+ feed.writeSelfLink(compileUrl(baseUrl, RESOURCE_RELATIONSHIPS, objectInfo.getId()), null);
+
+ UrlBuilder pagingUrl = new UrlBuilder(compileUrlBuilder(baseUrl, RESOURCE_RELATIONSHIPS, objectInfo.getId()));
+ pagingUrl.addParameter(Constants.PARAM_SUB_RELATIONSHIP_TYPES, includeSubRelationshipTypes);
+ pagingUrl.addParameter(Constants.PARAM_RELATIONSHIP_DIRECTION, relationshipDirection);
+ pagingUrl.addParameter(Constants.PARAM_TYPE_ID, typeId);
+ pagingUrl.addParameter(Constants.PARAM_FILTER, filter);
+ pagingUrl.addParameter(Constants.PARAM_ALLOWABLE_ACTIONS, includeAllowableActions);
+ feed.writePagingLinks(pagingUrl, maxItems, skipCount, relationships.getNumItems(),
+ relationships.hasMoreItems(), AtomPubUtils.PAGE_SIZE);
+
+ // write entries
+ if (relationships != null) {
+ AtomEntry entry = new AtomEntry(feed.getWriter());
+ for (ObjectData object : relationships.getObjects()) {
+ if (object == null) {
+ continue;
+ }
+ writeObjectEntry(entry, object, objectInfoHolder, null, repositoryId, null, null, baseUrl, false);
+ }
+ }
+
+ // we are done
+ feed.endFeed();
+ feed.endDocument();
+ }
}
Modified: incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/atompub/RepositoryService.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/atompub/RepositoryService.java?rev=934896&r1=934895&r2=934896&view=diff
==============================================================================
--- incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/atompub/RepositoryService.java (original)
+++ incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/atompub/RepositoryService.java Fri Apr 16 14:14:00 2010
@@ -69,370 +69,357 @@ import org.apache.chemistry.opencmis.ser
*/
public final class RepositoryService {
- /**
- * Private constructor.
- */
- private RepositoryService() {
- }
-
- /**
- * Renders the service document.
- */
- public static void getRepositories(CallContext context, AbstractServicesFactory factory,
- HttpServletRequest request, HttpServletResponse response) throws Exception {
- CmisRepositoryService service = factory.getRepositoryService();
-
- // get parameters
- String repositoryId = getStringParameter(request, Constants.PARAM_REPOSITORY_ID);
-
- // execute
- List<RepositoryInfo> infoDataList = null;
-
- if (repositoryId == null) {
- infoDataList = service.getRepositoryInfos(context, null);
- }
- else {
- infoDataList = Collections.singletonList(service.getRepositoryInfo(context, repositoryId,
- null));
- }
-
- // set headers
- response.setStatus(HttpServletResponse.SC_OK);
- response.setContentType(Constants.MEDIATYPE_SERVICE);
-
- // write XML
- ServiceDocument serviceDoc = new ServiceDocument();
-
- serviceDoc.startDocument(response.getOutputStream());
- serviceDoc.startServiceDocument();
-
- if (infoDataList != null) {
- for (RepositoryInfo infoData : infoDataList) {
- if (infoData == null) {
- continue;
- }
-
- String repId = infoData.getId();
- UrlBuilder baseUrl = compileBaseUrl(request, repId);
-
- boolean supportsQuery = false;
- boolean supportsUnFiling = false;
- boolean supportsMultifiling = false;
- boolean supportsFolderTree = false;
- boolean supportsRootDescendants = false;
- boolean supportsChanges = false;
-
- if (infoData.getCapabilities() != null) {
- RepositoryCapabilities cap = infoData.getCapabilities();
-
- if (cap.getQueryCapability() != null) {
- supportsQuery = (cap.getQueryCapability() != CapabilityQuery.NONE);
- }
-
- if (cap.isUnfilingSupported() != null) {
- supportsUnFiling = cap.isUnfilingSupported();
- }
-
- if (cap.isMultifilingSupported() != null) {
- supportsMultifiling = cap.isMultifilingSupported();
- }
-
- if (cap.isGetFolderTreeSupported() != null) {
- supportsFolderTree = cap.isGetFolderTreeSupported();
- }
-
- if (cap.isGetDescendantsSupported() != null) {
- supportsRootDescendants = cap.isGetDescendantsSupported();
- }
-
- if (cap.getChangesCapability() != null) {
- supportsChanges = (cap.getChangesCapability() != CapabilityChanges.NONE);
- }
- }
-
- serviceDoc.startWorkspace(infoData.getId());
-
- // add collections
-
- // - root collection
- serviceDoc.writeCollection(compileUrl(baseUrl, RESOURCE_CHILDREN, infoData
- .getRootFolderId()), Constants.COLLECTION_ROOT, "Root Collection",
- Constants.MEDIATYPE_ENTRY, Constants.MEDIATYPE_CMISATOM);
-
- // - types collection
- serviceDoc.writeCollection(compileUrl(baseUrl, RESOURCE_TYPES, null),
- Constants.COLLECTION_TYPES, "Types Collection", "");
-
- // - query collection
- if (supportsQuery) {
- serviceDoc.writeCollection(compileUrl(baseUrl, RESOURCE_QUERY, null),
- Constants.COLLECTION_QUERY, "Query Collection", Constants.MEDIATYPE_QUERY);
- }
-
- // - checked out collection collection
- serviceDoc
- .writeCollection(compileUrl(baseUrl, RESOURCE_CHECKEDOUT, null),
- Constants.COLLECTION_CHECKEDOUT, "Checked Out Collection",
- Constants.MEDIATYPE_CMISATOM);
-
- // - unfiled collection collection
- if (supportsUnFiling || supportsMultifiling) {
- serviceDoc.writeCollection(compileUrl(baseUrl, RESOURCE_UNFILED, null),
- Constants.COLLECTION_UNFILED, "Unfiled Collection", Constants.MEDIATYPE_CMISATOM);
-
- }
-
- // add repository info
- serviceDoc.writeRepositoryInfo(infoData);
-
- // add links
-
- // - types descendants
- serviceDoc.writeLink(Constants.REP_REL_TYPEDESC, compileUrl(baseUrl, RESOURCE_TYPESDESC,
- null), Constants.MEDIATYPE_FEED, null);
-
- // - folder tree
- if (supportsFolderTree) {
- serviceDoc.writeLink(Constants.REP_REL_FOLDERTREE, compileUrl(baseUrl,
- RESOURCE_FOLDERTREE, infoData.getRootFolderId()), Constants.MEDIATYPE_DESCENDANTS,
- null);
- }
-
- // - root descendants
- if (supportsRootDescendants) {
- serviceDoc.writeLink(Constants.REP_REL_ROOTDESC, compileUrl(baseUrl,
- RESOURCE_DESCENDANTS, infoData.getRootFolderId()), Constants.MEDIATYPE_DESCENDANTS,
- infoData.getRootFolderId());
- }
-
- // - changes
- if (supportsChanges) {
- serviceDoc.writeLink(Constants.REP_REL_CHANGES, compileUrl(baseUrl, RESOURCE_CHANGES,
- null), Constants.MEDIATYPE_FEED, null);
- }
-
- // add URI templates
-
- // - object by id
- String url = compileUrl(baseUrl, RESOURCE_OBJECTBYID, null)
- + "?id={id}&filter={filter}&includeAllowableActions={includeAllowableActions}&includeACL={includeACL}";
- serviceDoc
- .writeUriTemplate(url, Constants.TEMPLATE_OBJECT_BY_ID, Constants.MEDIATYPE_ENTRY);
-
- // - object by path
- url = compileUrl(baseUrl, RESOURCE_OBJECTBYPATH, null)
- + "?path={path}&filter={filter}&includeAllowableActions={includeAllowableActions}&includeACL={includeACL}";
- serviceDoc.writeUriTemplate(url, Constants.TEMPLATE_OBJECT_BY_PATH,
- Constants.MEDIATYPE_ENTRY);
-
- // - type by id
- url = compileUrl(baseUrl, RESOURCE_TYPE, null) + "?id={id}";
- serviceDoc.writeUriTemplate(url, Constants.TEMPLATE_TYPE_BY_ID, Constants.MEDIATYPE_ENTRY);
-
- // - query
- if (supportsQuery) {
- url = compileUrl(baseUrl, RESOURCE_QUERY, null)
- + "?q={q}&searchAllVersions={searchAllVersions}&includeAllowableActions={includeAllowableActions}&includeRelationships={includeRelationships}&maxItems={maxItems}&skipCount={skipCount}";
- serviceDoc.writeUriTemplate(url, Constants.TEMPLATE_QUERY, Constants.MEDIATYPE_FEED);
- }
-
- serviceDoc.endWorkspace();
- }
- }
-
- serviceDoc.endServiceDocument();
- serviceDoc.endDocument();
- }
-
- /**
- * Renders a type children collection.
- */
- public static void getTypeChildren(CallContext context, AbstractServicesFactory factory,
- String repositoryId, HttpServletRequest request, HttpServletResponse response)
- throws Exception {
- CmisRepositoryService service = factory.getRepositoryService();
-
- // get parameters
- String typeId = getStringParameter(request, Constants.PARAM_TYPE_ID);
- boolean includePropertyDefinitions = getBooleanParameter(request,
- Constants.PARAM_PROPERTY_DEFINITIONS, false);
- BigInteger maxItems = getBigIntegerParameter(request, Constants.PARAM_MAX_ITEMS);
- BigInteger skipCount = getBigIntegerParameter(request, Constants.PARAM_SKIP_COUNT);
-
- // execute
- TypeDefinitionList typeList = service.getTypeChildren(context, repositoryId, typeId,
- includePropertyDefinitions, maxItems, skipCount, null);
-
- BigInteger numItems = (typeList == null ? null : typeList.getNumItems());
- Boolean hasMoreItems = (typeList == null ? null : typeList.hasMoreItems());
-
- String parentTypeId = null;
- String typeName = "Type Children";
-
- // in order to get the parent type, we need the type definition of this type as well
- if (typeId != null) {
- TypeDefinition typeDefinition = service
- .getTypeDefinition(context, repositoryId, typeId, null);
-
- parentTypeId = (typeDefinition == null ? null : typeDefinition.getParentTypeId());
- typeName = (typeDefinition == null ? typeId : typeDefinition.getDisplayName());
- }
-
- // write XML
- response.setStatus(HttpServletResponse.SC_OK);
- response.setContentType(Constants.MEDIATYPE_FEED);
-
- AtomFeed feed = new AtomFeed();
- feed.startDocument(response.getOutputStream());
- feed.startFeed(true);
-
- // write basic Atom feed elements
- feed.writeFeedElements(typeId, TYPE_AUTHOR, typeName, new GregorianCalendar(), null, numItems);
-
- // write links
- UrlBuilder baseUrl = compileBaseUrl(request, repositoryId);
-
- feed.writeServiceLink(baseUrl.toString(), repositoryId);
-
- UrlBuilder selfLink = compileUrlBuilder(baseUrl, RESOURCE_TYPES, null);
- selfLink.addParameter(Constants.PARAM_TYPE_ID, typeId);
- selfLink.addParameter(Constants.PARAM_PROPERTY_DEFINITIONS, includePropertyDefinitions);
- feed.writeSelfLink(selfLink.toString(), typeId);
-
- feed.writeViaLink(compileUrl(baseUrl, RESOURCE_TYPE, typeId));
-
- UrlBuilder downLink = compileUrlBuilder(baseUrl, RESOURCE_TYPESDESC, null);
- downLink.addParameter(Constants.PARAM_TYPE_ID, typeId);
- feed.writeDownLink(downLink.toString(), Constants.MEDIATYPE_DESCENDANTS);
-
- if (parentTypeId != null) {
- feed.writeUpLink(compileUrl(baseUrl, RESOURCE_TYPE, parentTypeId), Constants.MEDIATYPE_ENTRY);
- }
-
- // write paging links
- UrlBuilder pagingUrl = compileUrlBuilder(baseUrl, RESOURCE_TYPES, null);
- pagingUrl.addParameter(Constants.PARAM_TYPE_ID, typeId);
- pagingUrl.addParameter(Constants.PARAM_PROPERTY_DEFINITIONS, includePropertyDefinitions);
- feed.writePagingLinks(pagingUrl, maxItems, skipCount, numItems, hasMoreItems, PAGE_SIZE);
-
- // write collection
- UrlBuilder collectionUrl = compileUrlBuilder(baseUrl, RESOURCE_TYPES, null);
- collectionUrl.addParameter(Constants.PARAM_TYPE_ID, typeId);
- feed.writeCollection(collectionUrl.toString(), null, "Types Collection", "");
-
- // write type entries
- if ((typeList != null) && (typeList.getList() != null)) {
- AtomEntry entry = new AtomEntry(feed.getWriter());
- for (TypeDefinition type : typeList.getList()) {
- writeTypeEntry(entry, type, null, repositoryId, baseUrl, false);
- }
- }
-
- // we are done
- feed.endFeed();
- feed.endDocument();
- }
-
- /**
- * Renders a type descendants feed.
- */
- public static void getTypeDescendants(CallContext context, AbstractServicesFactory factory,
- String repositoryId, HttpServletRequest request, HttpServletResponse response)
- throws Exception {
- CmisRepositoryService service = factory.getRepositoryService();
-
- // get parameters
- String typeId = getStringParameter(request, Constants.PARAM_TYPE_ID);
- BigInteger depth = getBigIntegerParameter(request, Constants.PARAM_DEPTH);
- boolean includePropertyDefinitions = getBooleanParameter(request,
- Constants.PARAM_PROPERTY_DEFINITIONS, false);
-
- // execute
- List<TypeDefinitionContainer> typeTree = service.getTypeDescendants(context, repositoryId,
- typeId, depth, includePropertyDefinitions, null);
-
- String parentTypeId = null;
- String typeName = "Type Children";
-
- // in order to get the parent type, we need the type definition of this type as well
- if (typeId != null) {
- TypeDefinition typeDefinition = service
- .getTypeDefinition(context, repositoryId, typeId, null);
-
- parentTypeId = (typeDefinition == null ? null : typeDefinition.getParentTypeId());
- typeName = (typeDefinition == null ? typeId : typeDefinition.getDisplayName());
- }
-
- // write XML
- response.setStatus(HttpServletResponse.SC_OK);
- response.setContentType(Constants.MEDIATYPE_FEED);
-
- AtomFeed feed = new AtomFeed();
- feed.startDocument(response.getOutputStream());
- feed.startFeed(true);
-
- // write basic Atom feed elements
- feed.writeFeedElements(typeId, TYPE_AUTHOR, typeName, new GregorianCalendar(), null, null);
-
- // write links
- UrlBuilder baseUrl = compileBaseUrl(request, repositoryId);
-
- feed.writeServiceLink(baseUrl.toString(), repositoryId);
-
- UrlBuilder selfLink = compileUrlBuilder(baseUrl, RESOURCE_TYPESDESC, null);
- selfLink.addParameter(Constants.PARAM_TYPE_ID, typeId);
- selfLink.addParameter(Constants.PARAM_DEPTH, depth);
- selfLink.addParameter(Constants.PARAM_PROPERTY_DEFINITIONS, includePropertyDefinitions);
- feed.writeSelfLink(selfLink.toString(), typeId);
-
- feed.writeViaLink(compileUrl(baseUrl, RESOURCE_TYPE, typeId));
-
- UrlBuilder downLink = compileUrlBuilder(baseUrl, RESOURCE_TYPES, null);
- downLink.addParameter(Constants.PARAM_TYPE_ID, typeId);
- feed.writeDownLink(downLink.toString(), Constants.MEDIATYPE_FEED);
-
- if (parentTypeId != null) {
- feed.writeUpLink(compileUrl(baseUrl, RESOURCE_TYPE, parentTypeId), Constants.MEDIATYPE_ENTRY);
- }
-
- // write tree
- if (typeTree != null) {
- AtomEntry entry = new AtomEntry(feed.getWriter());
-
- for (TypeDefinitionContainer container : typeTree) {
- if ((container != null) && (container.getTypeDefinition() != null)) {
- writeTypeEntry(entry, container.getTypeDefinition(), container.getChildren(),
- repositoryId, baseUrl, false);
- }
- }
- }
-
- // we are done
- feed.endFeed();
- feed.endDocument();
- }
-
- /**
- * Renders a type definition.
- */
- public static void getTypeDefinition(CallContext context, AbstractServicesFactory factory,
- String repositoryId, HttpServletRequest request, HttpServletResponse response)
- throws Exception {
- CmisRepositoryService service = factory.getRepositoryService();
-
- // get parameters
- String typeId = getStringParameter(request, Constants.PARAM_ID);
-
- // execute
- TypeDefinition type = service.getTypeDefinition(context, repositoryId, typeId, null);
-
- // write XML
- response.setStatus(HttpServletResponse.SC_OK);
- response.setContentType(Constants.MEDIATYPE_ENTRY);
-
- AtomEntry entry = new AtomEntry();
- entry.startDocument(response.getOutputStream());
- writeTypeEntry(entry, type, null, repositoryId, compileBaseUrl(request, repositoryId), true);
- entry.endDocument();
- }
+ /**
+ * Private constructor.
+ */
+ private RepositoryService() {
+ }
+
+ /**
+ * Renders the service document.
+ */
+ public static void getRepositories(CallContext context, AbstractServicesFactory factory,
+ HttpServletRequest request, HttpServletResponse response) throws Exception {
+ CmisRepositoryService service = factory.getRepositoryService();
+
+ // get parameters
+ String repositoryId = getStringParameter(request, Constants.PARAM_REPOSITORY_ID);
+
+ // execute
+ List<RepositoryInfo> infoDataList = null;
+
+ if (repositoryId == null) {
+ infoDataList = service.getRepositoryInfos(context, null);
+ } else {
+ infoDataList = Collections.singletonList(service.getRepositoryInfo(context, repositoryId, null));
+ }
+
+ // set headers
+ response.setStatus(HttpServletResponse.SC_OK);
+ response.setContentType(Constants.MEDIATYPE_SERVICE);
+
+ // write XML
+ ServiceDocument serviceDoc = new ServiceDocument();
+
+ serviceDoc.startDocument(response.getOutputStream());
+ serviceDoc.startServiceDocument();
+
+ if (infoDataList != null) {
+ for (RepositoryInfo infoData : infoDataList) {
+ if (infoData == null) {
+ continue;
+ }
+
+ String repId = infoData.getId();
+ UrlBuilder baseUrl = compileBaseUrl(request, repId);
+
+ boolean supportsQuery = false;
+ boolean supportsUnFiling = false;
+ boolean supportsMultifiling = false;
+ boolean supportsFolderTree = false;
+ boolean supportsRootDescendants = false;
+ boolean supportsChanges = false;
+
+ if (infoData.getCapabilities() != null) {
+ RepositoryCapabilities cap = infoData.getCapabilities();
+
+ if (cap.getQueryCapability() != null) {
+ supportsQuery = (cap.getQueryCapability() != CapabilityQuery.NONE);
+ }
+
+ if (cap.isUnfilingSupported() != null) {
+ supportsUnFiling = cap.isUnfilingSupported();
+ }
+
+ if (cap.isMultifilingSupported() != null) {
+ supportsMultifiling = cap.isMultifilingSupported();
+ }
+
+ if (cap.isGetFolderTreeSupported() != null) {
+ supportsFolderTree = cap.isGetFolderTreeSupported();
+ }
+
+ if (cap.isGetDescendantsSupported() != null) {
+ supportsRootDescendants = cap.isGetDescendantsSupported();
+ }
+
+ if (cap.getChangesCapability() != null) {
+ supportsChanges = (cap.getChangesCapability() != CapabilityChanges.NONE);
+ }
+ }
+
+ serviceDoc.startWorkspace(infoData.getId());
+
+ // add collections
+
+ // - root collection
+ serviceDoc.writeCollection(compileUrl(baseUrl, RESOURCE_CHILDREN, infoData.getRootFolderId()),
+ Constants.COLLECTION_ROOT, "Root Collection", Constants.MEDIATYPE_ENTRY,
+ Constants.MEDIATYPE_CMISATOM);
+
+ // - types collection
+ serviceDoc.writeCollection(compileUrl(baseUrl, RESOURCE_TYPES, null), Constants.COLLECTION_TYPES,
+ "Types Collection", "");
+
+ // - query collection
+ if (supportsQuery) {
+ serviceDoc.writeCollection(compileUrl(baseUrl, RESOURCE_QUERY, null), Constants.COLLECTION_QUERY,
+ "Query Collection", Constants.MEDIATYPE_QUERY);
+ }
+
+ // - checked out collection collection
+ serviceDoc.writeCollection(compileUrl(baseUrl, RESOURCE_CHECKEDOUT, null),
+ Constants.COLLECTION_CHECKEDOUT, "Checked Out Collection", Constants.MEDIATYPE_CMISATOM);
+
+ // - unfiled collection collection
+ if (supportsUnFiling || supportsMultifiling) {
+ serviceDoc.writeCollection(compileUrl(baseUrl, RESOURCE_UNFILED, null),
+ Constants.COLLECTION_UNFILED, "Unfiled Collection", Constants.MEDIATYPE_CMISATOM);
+
+ }
+
+ // add repository info
+ serviceDoc.writeRepositoryInfo(infoData);
+
+ // add links
+
+ // - types descendants
+ serviceDoc.writeLink(Constants.REP_REL_TYPEDESC, compileUrl(baseUrl, RESOURCE_TYPESDESC, null),
+ Constants.MEDIATYPE_FEED, null);
+
+ // - folder tree
+ if (supportsFolderTree) {
+ serviceDoc.writeLink(Constants.REP_REL_FOLDERTREE, compileUrl(baseUrl, RESOURCE_FOLDERTREE,
+ infoData.getRootFolderId()), Constants.MEDIATYPE_DESCENDANTS, null);
+ }
+
+ // - root descendants
+ if (supportsRootDescendants) {
+ serviceDoc.writeLink(Constants.REP_REL_ROOTDESC, compileUrl(baseUrl, RESOURCE_DESCENDANTS, infoData
+ .getRootFolderId()), Constants.MEDIATYPE_DESCENDANTS, infoData.getRootFolderId());
+ }
+
+ // - changes
+ if (supportsChanges) {
+ serviceDoc.writeLink(Constants.REP_REL_CHANGES, compileUrl(baseUrl, RESOURCE_CHANGES, null),
+ Constants.MEDIATYPE_FEED, null);
+ }
+
+ // add URI templates
+
+ // - object by id
+ String url = compileUrl(baseUrl, RESOURCE_OBJECTBYID, null)
+ + "?id={id}&filter={filter}&includeAllowableActions={includeAllowableActions}&includeACL={includeACL}";
+ serviceDoc.writeUriTemplate(url, Constants.TEMPLATE_OBJECT_BY_ID, Constants.MEDIATYPE_ENTRY);
+
+ // - object by path
+ url = compileUrl(baseUrl, RESOURCE_OBJECTBYPATH, null)
+ + "?path={path}&filter={filter}&includeAllowableActions={includeAllowableActions}&includeACL={includeACL}";
+ serviceDoc.writeUriTemplate(url, Constants.TEMPLATE_OBJECT_BY_PATH, Constants.MEDIATYPE_ENTRY);
+
+ // - type by id
+ url = compileUrl(baseUrl, RESOURCE_TYPE, null) + "?id={id}";
+ serviceDoc.writeUriTemplate(url, Constants.TEMPLATE_TYPE_BY_ID, Constants.MEDIATYPE_ENTRY);
+
+ // - query
+ if (supportsQuery) {
+ url = compileUrl(baseUrl, RESOURCE_QUERY, null)
+ + "?q={q}&searchAllVersions={searchAllVersions}&includeAllowableActions={includeAllowableActions}&includeRelationships={includeRelationships}&maxItems={maxItems}&skipCount={skipCount}";
+ serviceDoc.writeUriTemplate(url, Constants.TEMPLATE_QUERY, Constants.MEDIATYPE_FEED);
+ }
+
+ serviceDoc.endWorkspace();
+ }
+ }
+
+ serviceDoc.endServiceDocument();
+ serviceDoc.endDocument();
+ }
+
+ /**
+ * Renders a type children collection.
+ */
+ public static void getTypeChildren(CallContext context, AbstractServicesFactory factory, String repositoryId,
+ HttpServletRequest request, HttpServletResponse response) throws Exception {
+ CmisRepositoryService service = factory.getRepositoryService();
+
+ // get parameters
+ String typeId = getStringParameter(request, Constants.PARAM_TYPE_ID);
+ boolean includePropertyDefinitions = getBooleanParameter(request, Constants.PARAM_PROPERTY_DEFINITIONS, false);
+ BigInteger maxItems = getBigIntegerParameter(request, Constants.PARAM_MAX_ITEMS);
+ BigInteger skipCount = getBigIntegerParameter(request, Constants.PARAM_SKIP_COUNT);
+
+ // execute
+ TypeDefinitionList typeList = service.getTypeChildren(context, repositoryId, typeId,
+ includePropertyDefinitions, maxItems, skipCount, null);
+
+ BigInteger numItems = (typeList == null ? null : typeList.getNumItems());
+ Boolean hasMoreItems = (typeList == null ? null : typeList.hasMoreItems());
+
+ String parentTypeId = null;
+ String typeName = "Type Children";
+
+ // in order to get the parent type, we need the type definition of this
+ // type as well
+ if (typeId != null) {
+ TypeDefinition typeDefinition = service.getTypeDefinition(context, repositoryId, typeId, null);
+
+ parentTypeId = (typeDefinition == null ? null : typeDefinition.getParentTypeId());
+ typeName = (typeDefinition == null ? typeId : typeDefinition.getDisplayName());
+ }
+
+ // write XML
+ response.setStatus(HttpServletResponse.SC_OK);
+ response.setContentType(Constants.MEDIATYPE_FEED);
+
+ AtomFeed feed = new AtomFeed();
+ feed.startDocument(response.getOutputStream());
+ feed.startFeed(true);
+
+ // write basic Atom feed elements
+ feed.writeFeedElements(typeId, TYPE_AUTHOR, typeName, new GregorianCalendar(), null, numItems);
+
+ // write links
+ UrlBuilder baseUrl = compileBaseUrl(request, repositoryId);
+
+ feed.writeServiceLink(baseUrl.toString(), repositoryId);
+
+ UrlBuilder selfLink = compileUrlBuilder(baseUrl, RESOURCE_TYPES, null);
+ selfLink.addParameter(Constants.PARAM_TYPE_ID, typeId);
+ selfLink.addParameter(Constants.PARAM_PROPERTY_DEFINITIONS, includePropertyDefinitions);
+ feed.writeSelfLink(selfLink.toString(), typeId);
+
+ feed.writeViaLink(compileUrl(baseUrl, RESOURCE_TYPE, typeId));
+
+ UrlBuilder downLink = compileUrlBuilder(baseUrl, RESOURCE_TYPESDESC, null);
+ downLink.addParameter(Constants.PARAM_TYPE_ID, typeId);
+ feed.writeDownLink(downLink.toString(), Constants.MEDIATYPE_DESCENDANTS);
+
+ if (parentTypeId != null) {
+ feed.writeUpLink(compileUrl(baseUrl, RESOURCE_TYPE, parentTypeId), Constants.MEDIATYPE_ENTRY);
+ }
+
+ // write paging links
+ UrlBuilder pagingUrl = compileUrlBuilder(baseUrl, RESOURCE_TYPES, null);
+ pagingUrl.addParameter(Constants.PARAM_TYPE_ID, typeId);
+ pagingUrl.addParameter(Constants.PARAM_PROPERTY_DEFINITIONS, includePropertyDefinitions);
+ feed.writePagingLinks(pagingUrl, maxItems, skipCount, numItems, hasMoreItems, PAGE_SIZE);
+
+ // write collection
+ UrlBuilder collectionUrl = compileUrlBuilder(baseUrl, RESOURCE_TYPES, null);
+ collectionUrl.addParameter(Constants.PARAM_TYPE_ID, typeId);
+ feed.writeCollection(collectionUrl.toString(), null, "Types Collection", "");
+
+ // write type entries
+ if ((typeList != null) && (typeList.getList() != null)) {
+ AtomEntry entry = new AtomEntry(feed.getWriter());
+ for (TypeDefinition type : typeList.getList()) {
+ writeTypeEntry(entry, type, null, repositoryId, baseUrl, false);
+ }
+ }
+
+ // we are done
+ feed.endFeed();
+ feed.endDocument();
+ }
+
+ /**
+ * Renders a type descendants feed.
+ */
+ public static void getTypeDescendants(CallContext context, AbstractServicesFactory factory, String repositoryId,
+ HttpServletRequest request, HttpServletResponse response) throws Exception {
+ CmisRepositoryService service = factory.getRepositoryService();
+
+ // get parameters
+ String typeId = getStringParameter(request, Constants.PARAM_TYPE_ID);
+ BigInteger depth = getBigIntegerParameter(request, Constants.PARAM_DEPTH);
+ boolean includePropertyDefinitions = getBooleanParameter(request, Constants.PARAM_PROPERTY_DEFINITIONS, false);
+
+ // execute
+ List<TypeDefinitionContainer> typeTree = service.getTypeDescendants(context, repositoryId, typeId, depth,
+ includePropertyDefinitions, null);
+
+ String parentTypeId = null;
+ String typeName = "Type Children";
+
+ // in order to get the parent type, we need the type definition of this
+ // type as well
+ if (typeId != null) {
+ TypeDefinition typeDefinition = service.getTypeDefinition(context, repositoryId, typeId, null);
+
+ parentTypeId = (typeDefinition == null ? null : typeDefinition.getParentTypeId());
+ typeName = (typeDefinition == null ? typeId : typeDefinition.getDisplayName());
+ }
+
+ // write XML
+ response.setStatus(HttpServletResponse.SC_OK);
+ response.setContentType(Constants.MEDIATYPE_FEED);
+
+ AtomFeed feed = new AtomFeed();
+ feed.startDocument(response.getOutputStream());
+ feed.startFeed(true);
+
+ // write basic Atom feed elements
+ feed.writeFeedElements(typeId, TYPE_AUTHOR, typeName, new GregorianCalendar(), null, null);
+
+ // write links
+ UrlBuilder baseUrl = compileBaseUrl(request, repositoryId);
+
+ feed.writeServiceLink(baseUrl.toString(), repositoryId);
+
+ UrlBuilder selfLink = compileUrlBuilder(baseUrl, RESOURCE_TYPESDESC, null);
+ selfLink.addParameter(Constants.PARAM_TYPE_ID, typeId);
+ selfLink.addParameter(Constants.PARAM_DEPTH, depth);
+ selfLink.addParameter(Constants.PARAM_PROPERTY_DEFINITIONS, includePropertyDefinitions);
+ feed.writeSelfLink(selfLink.toString(), typeId);
+
+ feed.writeViaLink(compileUrl(baseUrl, RESOURCE_TYPE, typeId));
+
+ UrlBuilder downLink = compileUrlBuilder(baseUrl, RESOURCE_TYPES, null);
+ downLink.addParameter(Constants.PARAM_TYPE_ID, typeId);
+ feed.writeDownLink(downLink.toString(), Constants.MEDIATYPE_FEED);
+
+ if (parentTypeId != null) {
+ feed.writeUpLink(compileUrl(baseUrl, RESOURCE_TYPE, parentTypeId), Constants.MEDIATYPE_ENTRY);
+ }
+
+ // write tree
+ if (typeTree != null) {
+ AtomEntry entry = new AtomEntry(feed.getWriter());
+
+ for (TypeDefinitionContainer container : typeTree) {
+ if ((container != null) && (container.getTypeDefinition() != null)) {
+ writeTypeEntry(entry, container.getTypeDefinition(), container.getChildren(), repositoryId,
+ baseUrl, false);
+ }
+ }
+ }
+
+ // we are done
+ feed.endFeed();
+ feed.endDocument();
+ }
+
+ /**
+ * Renders a type definition.
+ */
+ public static void getTypeDefinition(CallContext context, AbstractServicesFactory factory, String repositoryId,
+ HttpServletRequest request, HttpServletResponse response) throws Exception {
+ CmisRepositoryService service = factory.getRepositoryService();
+
+ // get parameters
+ String typeId = getStringParameter(request, Constants.PARAM_ID);
+
+ // execute
+ TypeDefinition type = service.getTypeDefinition(context, repositoryId, typeId, null);
+
+ // write XML
+ response.setStatus(HttpServletResponse.SC_OK);
+ response.setContentType(Constants.MEDIATYPE_ENTRY);
+
+ AtomEntry entry = new AtomEntry();
+ entry.startDocument(response.getOutputStream());
+ writeTypeEntry(entry, type, null, repositoryId, compileBaseUrl(request, repositoryId), true);
+ entry.endDocument();
+ }
}
Modified: incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/atompub/ServiceDocument.java
URL: http://svn.apache.org/viewvc/incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/atompub/ServiceDocument.java?rev=934896&r1=934895&r2=934896&view=diff
==============================================================================
--- incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/atompub/ServiceDocument.java (original)
+++ incubator/chemistry/opencmis/trunk/chemistry-opencmis-server/chemistry-opencmis-server-bindings/src/main/java/org/apache/chemistry/opencmis/server/impl/atompub/ServiceDocument.java Fri Apr 16 14:14:00 2010
@@ -37,50 +37,47 @@ import org.apache.chemistry.opencmis.com
*/
public class ServiceDocument extends AtomDocumentBase {
- public ServiceDocument() {
- }
+ public ServiceDocument() {
+ }
- public void startServiceDocument() throws XMLStreamException {
- XMLStreamWriter xsw = getWriter();
- xsw.writeStartElement(Constants.NAMESPACE_APP, "service");
- writeNamespace(Constants.NAMESPACE_APP);
- writeNamespace(Constants.NAMESPACE_ATOM);
- writeNamespace(Constants.NAMESPACE_CMIS);
- writeNamespace(Constants.NAMESPACE_RESTATOM);
- }
-
- public void endServiceDocument() throws XMLStreamException {
- getWriter().writeEndElement();
- }
-
- public void startWorkspace(String title) throws XMLStreamException {
- getWriter().writeStartElement(Constants.NAMESPACE_APP, "workspace");
- writeSimpleTag(Constants.NAMESPACE_ATOM, "title", title);
- }
-
- public void endWorkspace() throws XMLStreamException {
- getWriter().writeEndElement();
- }
-
- public void writeRepositoryInfo(RepositoryInfo repInfo) throws XMLStreamException,
- JAXBException {
- CmisRepositoryInfoType repInfoJaxb = convert(repInfo);
- if (repInfoJaxb == null) {
- return;
- }
-
- JaxBHelper.marshal(JaxBHelper.CMIS_EXTRA_OBJECT_FACTORY.createRepositoryInfo(repInfoJaxb),
- getWriter(), true);
- }
-
- public void writeUriTemplate(String template, String type, String mediatype)
- throws XMLStreamException {
- XMLStreamWriter xsw = getWriter();
-
- xsw.writeStartElement(Constants.NAMESPACE_RESTATOM, "uritemplate");
- writeSimpleTag(Constants.NAMESPACE_RESTATOM, "template", template);
- writeSimpleTag(Constants.NAMESPACE_RESTATOM, "type", type);
- writeSimpleTag(Constants.NAMESPACE_RESTATOM, "mediatype", mediatype);
- xsw.writeEndElement();
- }
+ public void startServiceDocument() throws XMLStreamException {
+ XMLStreamWriter xsw = getWriter();
+ xsw.writeStartElement(Constants.NAMESPACE_APP, "service");
+ writeNamespace(Constants.NAMESPACE_APP);
+ writeNamespace(Constants.NAMESPACE_ATOM);
+ writeNamespace(Constants.NAMESPACE_CMIS);
+ writeNamespace(Constants.NAMESPACE_RESTATOM);
+ }
+
+ public void endServiceDocument() throws XMLStreamException {
+ getWriter().writeEndElement();
+ }
+
+ public void startWorkspace(String title) throws XMLStreamException {
+ getWriter().writeStartElement(Constants.NAMESPACE_APP, "workspace");
+ writeSimpleTag(Constants.NAMESPACE_ATOM, "title", title);
+ }
+
+ public void endWorkspace() throws XMLStreamException {
+ getWriter().writeEndElement();
+ }
+
+ public void writeRepositoryInfo(RepositoryInfo repInfo) throws XMLStreamException, JAXBException {
+ CmisRepositoryInfoType repInfoJaxb = convert(repInfo);
+ if (repInfoJaxb == null) {
+ return;
+ }
+
+ JaxBHelper.marshal(JaxBHelper.CMIS_EXTRA_OBJECT_FACTORY.createRepositoryInfo(repInfoJaxb), getWriter(), true);
+ }
+
+ public void writeUriTemplate(String template, String type, String mediatype) throws XMLStreamException {
+ XMLStreamWriter xsw = getWriter();
+
+ xsw.writeStartElement(Constants.NAMESPACE_RESTATOM, "uritemplate");
+ writeSimpleTag(Constants.NAMESPACE_RESTATOM, "template", template);
+ writeSimpleTag(Constants.NAMESPACE_RESTATOM, "type", type);
+ writeSimpleTag(Constants.NAMESPACE_RESTATOM, "mediatype", mediatype);
+ xsw.writeEndElement();
+ }
}