You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@chemistry.apache.org by jm...@apache.org on 2013/05/22 09:49:35 UTC
svn commit: r1485107 [2/5] - in
/chemistry/opencmis/trunk/chemistry-opencmis-android/chemistry-opencmis-android-client:
./ src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/
src/main/java/org/apache/chemistry/opencmis/client/bindi...
Modified: chemistry/opencmis/trunk/chemistry-opencmis-android/chemistry-opencmis-android-client/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/AtomPubParser.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-android/chemistry-opencmis-android-client/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/AtomPubParser.java?rev=1485107&r1=1485106&r2=1485107&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-android/chemistry-opencmis-android-client/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/AtomPubParser.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-android/chemistry-opencmis-android-client/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/AtomPubParser.java Wed May 22 07:49:35 2013
@@ -18,29 +18,11 @@
*/
package org.apache.chemistry.opencmis.client.bindings.spi.atompub;
-import static org.apache.chemistry.opencmis.client.bindings.spi.atompub.CmisAtomPubConstants.ATTR_DOCUMENT_TYPE;
-import static org.apache.chemistry.opencmis.client.bindings.spi.atompub.CmisAtomPubConstants.ATTR_FOLDER_TYPE;
-import static org.apache.chemistry.opencmis.client.bindings.spi.atompub.CmisAtomPubConstants.ATTR_POLICY_TYPE;
-import static org.apache.chemistry.opencmis.client.bindings.spi.atompub.CmisAtomPubConstants.ATTR_PROPERTY_DEFINITION_ID;
-import static org.apache.chemistry.opencmis.client.bindings.spi.atompub.CmisAtomPubConstants.ATTR_PROPERTY_DISPLAYNAME;
-import static org.apache.chemistry.opencmis.client.bindings.spi.atompub.CmisAtomPubConstants.ATTR_PROPERTY_LOCALNAME;
-import static org.apache.chemistry.opencmis.client.bindings.spi.atompub.CmisAtomPubConstants.ATTR_PROPERTY_QUERYNAME;
-import static org.apache.chemistry.opencmis.client.bindings.spi.atompub.CmisAtomPubConstants.ATTR_PROPERTY_VALUE;
-import static org.apache.chemistry.opencmis.client.bindings.spi.atompub.CmisAtomPubConstants.ATTR_RELATIONSHIP_TYPE;
import static org.apache.chemistry.opencmis.client.bindings.spi.atompub.CmisAtomPubConstants.CONTENT_SRC;
import static org.apache.chemistry.opencmis.client.bindings.spi.atompub.CmisAtomPubConstants.LINK_HREF;
import static org.apache.chemistry.opencmis.client.bindings.spi.atompub.CmisAtomPubConstants.LINK_REL;
import static org.apache.chemistry.opencmis.client.bindings.spi.atompub.CmisAtomPubConstants.LINK_TYPE;
-import static org.apache.chemistry.opencmis.client.bindings.spi.atompub.CmisAtomPubConstants.TAG_ACE_DIRECT;
-import static org.apache.chemistry.opencmis.client.bindings.spi.atompub.CmisAtomPubConstants.TAG_ACE_PRINCIPAL;
-import static org.apache.chemistry.opencmis.client.bindings.spi.atompub.CmisAtomPubConstants.TAG_ACE_PRINCIPAL_ID;
import static org.apache.chemistry.opencmis.client.bindings.spi.atompub.CmisAtomPubConstants.TAG_ACL;
-import static org.apache.chemistry.opencmis.client.bindings.spi.atompub.CmisAtomPubConstants.TAG_ACLCAP_MAPPING;
-import static org.apache.chemistry.opencmis.client.bindings.spi.atompub.CmisAtomPubConstants.TAG_ACLCAP_MAPPING_KEY;
-import static org.apache.chemistry.opencmis.client.bindings.spi.atompub.CmisAtomPubConstants.TAG_ACLCAP_MAPPING_PERMISSION;
-import static org.apache.chemistry.opencmis.client.bindings.spi.atompub.CmisAtomPubConstants.TAG_ACLCAP_PERMISSIONS;
-import static org.apache.chemistry.opencmis.client.bindings.spi.atompub.CmisAtomPubConstants.TAG_ACLCAP_PERMISSION_DESCRIPTION;
-import static org.apache.chemistry.opencmis.client.bindings.spi.atompub.CmisAtomPubConstants.TAG_ACLCAP_PERMISSION_PERMISSION;
import static org.apache.chemistry.opencmis.client.bindings.spi.atompub.CmisAtomPubConstants.TAG_ALLOWABLEACTIONS;
import static org.apache.chemistry.opencmis.client.bindings.spi.atompub.CmisAtomPubConstants.TAG_CHILDREN;
import static org.apache.chemistry.opencmis.client.bindings.spi.atompub.CmisAtomPubConstants.TAG_COLLECTION;
@@ -48,20 +30,12 @@ import static org.apache.chemistry.openc
import static org.apache.chemistry.opencmis.client.bindings.spi.atompub.CmisAtomPubConstants.TAG_CONTENT;
import static org.apache.chemistry.opencmis.client.bindings.spi.atompub.CmisAtomPubConstants.TAG_ENTRY;
import static org.apache.chemistry.opencmis.client.bindings.spi.atompub.CmisAtomPubConstants.TAG_FEED;
+import static org.apache.chemistry.opencmis.client.bindings.spi.atompub.CmisAtomPubConstants.TAG_HTML;
import static org.apache.chemistry.opencmis.client.bindings.spi.atompub.CmisAtomPubConstants.TAG_LINK;
import static org.apache.chemistry.opencmis.client.bindings.spi.atompub.CmisAtomPubConstants.TAG_NUM_ITEMS;
import static org.apache.chemistry.opencmis.client.bindings.spi.atompub.CmisAtomPubConstants.TAG_OBJECT;
-import static org.apache.chemistry.opencmis.client.bindings.spi.atompub.CmisAtomPubConstants.TAG_OBJECT_ACL;
-import static org.apache.chemistry.opencmis.client.bindings.spi.atompub.CmisAtomPubConstants.TAG_OBJECT_ALLOWABLE_ACTIONS;
-import static org.apache.chemistry.opencmis.client.bindings.spi.atompub.CmisAtomPubConstants.TAG_OBJECT_PROPERTIES;
-import static org.apache.chemistry.opencmis.client.bindings.spi.atompub.CmisAtomPubConstants.TAG_OBJECT_RENDITION;
import static org.apache.chemistry.opencmis.client.bindings.spi.atompub.CmisAtomPubConstants.TAG_PATH_SEGMENT;
-import static org.apache.chemistry.opencmis.client.bindings.spi.atompub.CmisAtomPubConstants.TAG_PROPERTY;
import static org.apache.chemistry.opencmis.client.bindings.spi.atompub.CmisAtomPubConstants.TAG_RELATIVE_PATH_SEGMENT;
-import static org.apache.chemistry.opencmis.client.bindings.spi.atompub.CmisAtomPubConstants.TAG_RENDITION;
-import static org.apache.chemistry.opencmis.client.bindings.spi.atompub.CmisAtomPubConstants.TAG_REPINFO_ACL_CAPABILITY;
-import static org.apache.chemistry.opencmis.client.bindings.spi.atompub.CmisAtomPubConstants.TAG_REPINFO_CAPABILITIES;
-import static org.apache.chemistry.opencmis.client.bindings.spi.atompub.CmisAtomPubConstants.TAG_REPINFO_CHANGES_ON_TYPE;
import static org.apache.chemistry.opencmis.client.bindings.spi.atompub.CmisAtomPubConstants.TAG_REPOSITORY_INFO;
import static org.apache.chemistry.opencmis.client.bindings.spi.atompub.CmisAtomPubConstants.TAG_SERVICE;
import static org.apache.chemistry.opencmis.client.bindings.spi.atompub.CmisAtomPubConstants.TAG_TEMPLATE_TEMPLATE;
@@ -69,15 +43,13 @@ import static org.apache.chemistry.openc
import static org.apache.chemistry.opencmis.client.bindings.spi.atompub.CmisAtomPubConstants.TAG_TYPE;
import static org.apache.chemistry.opencmis.client.bindings.spi.atompub.CmisAtomPubConstants.TAG_URI_TEMPLATE;
import static org.apache.chemistry.opencmis.client.bindings.spi.atompub.CmisAtomPubConstants.TAG_WORKSPACE;
+import static org.apache.chemistry.opencmis.commons.impl.XMLUtils.next;
+import static org.apache.chemistry.opencmis.commons.impl.XMLUtils.skip;
-import java.io.IOException;
import java.io.InputStream;
import java.math.BigInteger;
-import java.util.ArrayList;
import java.util.HashMap;
-import java.util.List;
import java.util.Map;
-import java.util.Stack;
import javax.xml.namespace.QName;
@@ -88,1203 +60,492 @@ import org.apache.chemistry.opencmis.cli
import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.AtomEntry;
import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.AtomFeed;
import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.AtomLink;
+import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.HtmlDoc;
import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.RepositoryWorkspace;
import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.ServiceDoc;
-import org.apache.chemistry.opencmis.commons.data.Ace;
-import org.apache.chemistry.opencmis.commons.data.Acl;
-import org.apache.chemistry.opencmis.commons.data.AclCapabilities;
-import org.apache.chemistry.opencmis.commons.data.AllowableActions;
-import org.apache.chemistry.opencmis.commons.data.CmisExtensionElement;
import org.apache.chemistry.opencmis.commons.data.ObjectData;
-import org.apache.chemistry.opencmis.commons.data.PermissionMapping;
-import org.apache.chemistry.opencmis.commons.data.Properties;
-import org.apache.chemistry.opencmis.commons.data.PropertyData;
-import org.apache.chemistry.opencmis.commons.data.RenditionData;
import org.apache.chemistry.opencmis.commons.data.RepositoryInfo;
-import org.apache.chemistry.opencmis.commons.definitions.PermissionDefinition;
-import org.apache.chemistry.opencmis.commons.definitions.PropertyDefinition;
import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
-import org.apache.chemistry.opencmis.commons.enums.BaseTypeId;
-import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
-import org.apache.chemistry.opencmis.commons.impl.AtomPubConverter;
-import org.apache.chemistry.opencmis.commons.impl.Constants;
+import org.apache.chemistry.opencmis.commons.impl.XMLConverter;
+import org.apache.chemistry.opencmis.commons.impl.XMLUtils;
import org.apache.chemistry.opencmis.commons.impl.XMLConstants;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.AccessControlEntryImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.AccessControlListImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.AccessControlPrincipalDataImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.CmisExtensionElementImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PermissionDefinitionDataImpl;
-import org.apache.chemistry.opencmis.commons.impl.dataobjects.PermissionMappingDataImpl;
+import org.apache.chemistry.opencmis.commons.impl.XMLConstraints;
import org.xmlpull.v1.XmlPullParser;
-import org.xmlpull.v1.XmlPullParserException;
-
-import android.util.Xml;
/**
* AtomPub Parser.
*/
public class AtomPubParser {
- //private static final Logger log = LoggerFactory.getLogger(AtomPubParser.class);
-
- // public constants
- public static final String LINK_REL_CONTENT = "@@content@@";
-
- private final InputStream stream;
- private AtomBase parseResult;
-
- public AtomPubParser(InputStream stream) {
- if (stream == null) {
- throw new IllegalArgumentException("No stream.");
- }
-
- this.stream = stream;
- }
-
- /**
- * Parses the stream.
- */
- public void parse() throws Exception {
- XmlPullParser parser = Xml.newPullParser();
- parser.setInput(stream, null);
-
- try {
- while (true) {
- int event = parser.getEventType();
- if (event == XmlPullParser.START_TAG) {
- QName name = new QName(parser.getNamespace(), parser.getName());
-
- if (XMLConstants.NAMESPACE_ATOM.equals(name.getNamespaceURI())) {
- if (TAG_FEED.equals(name.getLocalPart())) {
- parseResult = parseFeed(parser);
- break;
- } else if (TAG_ENTRY.equals(name.getLocalPart())) {
- parseResult = parseEntry(parser);
- break;
- }
- } else if (XMLConstants.NAMESPACE_CMIS.equals(name.getNamespaceURI())) {
- if (TAG_ALLOWABLEACTIONS.equals(name.getLocalPart())) {
- parseResult = new AtomAllowableActions(parseAllowableActions(parser));
- break;
- } else if (TAG_ACL.equals(name.getLocalPart())) {
- parseResult = new AtomAcl(parseACL(parser));
- break;
- }
- } else if (XMLConstants.NAMESPACE_APP.equals(name.getNamespaceURI())) {
- if (TAG_SERVICE.equals(name.getLocalPart())) {
- parseResult = parseServiceDoc(parser);
- break;
- }
- }
- }
-
- if (!next(parser)) {
- break;
- }
- }
-
- } finally {
- // make sure the stream is read and closed in all cases
- try {
- byte[] buffer = new byte[4096];
- while (stream.read(buffer) > -1) {
- }
- } catch (Exception e) {
- }
-
- try {
- stream.close();
- } catch (Exception e) {
- }
- }
- }
-
- /**
- * Return the parse results.
- */
- public AtomBase getResults() {
- return parseResult;
- }
-
- /**
- * Parses a service document.
- */
- private static ServiceDoc parseServiceDoc(XmlPullParser parser) throws Exception {
- ServiceDoc result = new ServiceDoc();
-
- next(parser);
-
- while (true) {
- int event = parser.getEventType();
- if (event == XmlPullParser.START_TAG) {
- QName name = new QName(parser.getNamespace(), parser.getName());
-
- if (XMLConstants.NAMESPACE_APP.equals(name.getNamespaceURI())) {
- if (TAG_WORKSPACE.equals(name.getLocalPart())) {
- result.addWorkspace(parseWorkspace(parser));
- } else {
- skip(parser);
- }
- } else {
- skip(parser);
- }
- } else if (event == XmlPullParser.END_TAG) {
- break;
- } else {
- if (!next(parser)) {
- break;
- }
- }
- }
-
- return result;
- }
-
- /**
- * Parses a workspace element in a service document.
- */
- private static RepositoryWorkspace parseWorkspace(XmlPullParser parser) throws Exception {
- RepositoryWorkspace workspace = new RepositoryWorkspace();
-
- next(parser);
-
- while (true) {
- int event = parser.getEventType();
- if (event == XmlPullParser.START_TAG) {
- AtomElement element = parseWorkspaceElement(parser);
-
- // check if we can extract the workspace id
- if ((element != null) && (element.getObject() instanceof RepositoryInfo)) {
- workspace.setId(((RepositoryInfo) element.getObject()).getId());
- }
-
- // add to workspace
- workspace.addElement(element);
- } else if (event == XmlPullParser.END_TAG) {
- break;
- } else {
- if (!next(parser)) {
- break;
- }
- }
- }
-
- next(parser);
-
- return workspace;
- }
-
- /**
- * Parses an Atom feed.
- */
- private AtomFeed parseFeed(XmlPullParser parser) throws Exception {
- AtomFeed result = new AtomFeed();
-
- next(parser);
-
- while (true) {
- int event = parser.getEventType();
- if (event == XmlPullParser.START_TAG) {
- QName name = new QName(parser.getNamespace(), parser.getName());
-
- if (XMLConstants.NAMESPACE_ATOM.equals(name.getNamespaceURI())) {
- if (TAG_LINK.equals(name.getLocalPart())) {
- result.addElement(parseLink(parser));
- } else if (TAG_ENTRY.equals(name.getLocalPart())) {
- result.addEntry(parseEntry(parser));
- } else {
- skip(parser);
- }
- } else if (XMLConstants.NAMESPACE_RESTATOM.equals(name.getNamespaceURI())) {
- if (TAG_NUM_ITEMS.equals(name.getLocalPart())) {
- result.addElement(parseBigInteger(parser));
- } else {
- skip(parser);
- }
- } else {
- skip(parser);
- }
- } else if (event == XmlPullParser.END_TAG) {
- break;
- } else {
- if (!next(parser)) {
- break;
- }
- }
- }
-
- next(parser);
-
- return result;
- }
-
- /**
- * Parses an Atom entry.
- */
- private AtomEntry parseEntry(XmlPullParser parser) throws Exception {
- AtomEntry result = new AtomEntry();
-
- next(parser);
-
- // walk through all tags in entry
- while (true) {
- int event = parser.getEventType();
- if (event == XmlPullParser.START_TAG) {
- AtomElement element = parseElement(parser);
- if (element != null) {
- // add to entry
- result.addElement(element);
-
- // find and set object id
- if (element.getObject() instanceof ObjectData) {
- result.setId(((ObjectData) element.getObject()).getId());
- } else if (element.getObject() instanceof TypeDefinition) {
- result.setId(((TypeDefinition) element.getObject()).getId());
- }
- }
- } else if (event == XmlPullParser.END_TAG) {
- break;
- } else {
- if (!next(parser)) {
- break;
- }
- }
- }
-
- next(parser);
-
- return result;
- }
-
- /**
- * Parses an element.
- */
- private AtomElement parseElement(XmlPullParser parser) throws Exception {
- QName name = new QName(parser.getNamespace(), parser.getName());
-
- if (XMLConstants.NAMESPACE_RESTATOM.equals(name.getNamespaceURI())) {
- if (TAG_OBJECT.equals(name.getLocalPart())) {
- return new AtomElement(name, parseObject(parser));
- } else if (TAG_PATH_SEGMENT.equals(name.getLocalPart()) || TAG_RELATIVE_PATH_SEGMENT.equals(name.getLocalPart())) {
- return parseText(parser);
- } else if (TAG_TYPE.equals(name.getLocalPart())) {
- // workaround for old Chemistry code - ignore the type namespace
- String typeAttr = parser.getAttributeValue(XMLConstants.NAMESPACE_XSI, "type");
- if (typeAttr == null) {
- return new AtomElement(name, parseTypeDefinition(parser, null));
- } else if (typeAttr.endsWith(ATTR_DOCUMENT_TYPE)) {
- return new AtomElement(name, parseTypeDefinition(parser, BaseTypeId.CMIS_DOCUMENT));
- } else if (typeAttr.endsWith(ATTR_FOLDER_TYPE)) {
- return new AtomElement(name, parseTypeDefinition(parser, BaseTypeId.CMIS_FOLDER));
- } else if (typeAttr.endsWith(ATTR_RELATIONSHIP_TYPE)) {
- return new AtomElement(name, parseTypeDefinition(parser, BaseTypeId.CMIS_RELATIONSHIP));
- } else if (typeAttr.endsWith(ATTR_POLICY_TYPE)) {
- return new AtomElement(name, parseTypeDefinition(parser, BaseTypeId.CMIS_POLICY));
- }
- throw new CmisRuntimeException("Cannot read type definition!");
- } else if (TAG_CHILDREN.equals(name.getLocalPart())) {
- return parseChildren(parser);
- }
- } else if (XMLConstants.NAMESPACE_ATOM.equals(name.getNamespaceURI())) {
- if (TAG_LINK.equals(name.getLocalPart())) {
- return parseLink(parser);
- } else if (TAG_CONTENT.equals(name.getLocalPart())) {
- return parseAtomContentSrc(parser);
- }
- }
-
- // we don't know it - skip it
- skip(parser);
-
- return null;
- }
-
- /**
- * Parses a children element.
- */
- private AtomElement parseChildren(XmlPullParser parser) throws Exception {
- AtomElement result = null;
- QName childName = new QName(parser.getNamespace(), parser.getName());
-
- next(parser);
-
- // walk through the children tag
- while (true) {
- int event = parser.getEventType();
- if (event == XmlPullParser.START_TAG) {
- QName name = new QName(parser.getNamespace(), parser.getName());
-
- if (XMLConstants.NAMESPACE_ATOM.equals(name.getNamespaceURI())) {
- if (TAG_FEED.equals(name.getLocalPart())) {
- result = new AtomElement(childName, parseFeed(parser));
- } else {
- skip(parser);
- }
- } else {
- skip(parser);
- }
- } else if (event == XmlPullParser.END_TAG) {
- break;
- } else {
- if (!next(parser)) {
- break;
- }
- }
- }
-
- next(parser);
-
- return result;
- }
-
- /**
- * Parses a workspace element.
- */
- private static AtomElement parseWorkspaceElement(XmlPullParser parser) throws Exception {
- QName name = new QName(parser.getNamespace(), parser.getName());
-
- if (XMLConstants.NAMESPACE_RESTATOM.equals(name.getNamespaceURI())) {
- if (TAG_REPOSITORY_INFO.equals(name.getLocalPart())) {
- return new AtomElement(name, parseRepositoryInfo(parser));
- } else if (TAG_URI_TEMPLATE.equals(name.getLocalPart())) {
- return parseTemplate(parser);
- }
- } else if (XMLConstants.NAMESPACE_ATOM.equals(name.getNamespaceURI())) {
- if (TAG_LINK.equals(name.getLocalPart())) {
- return parseLink(parser);
- }
- } else if (XMLConstants.NAMESPACE_APP.equals(name.getNamespaceURI())) {
- if (TAG_COLLECTION.equals(name.getLocalPart())) {
- return parseCollection(parser);
- }
- }
-
- // we don't know it - skip it
- skip(parser);
-
- return null;
- }
-
- /**
- * Parses a collection tag.
- */
- private static AtomElement parseCollection(XmlPullParser parser) throws Exception {
- QName name = new QName(parser.getNamespace(), parser.getName());
- Map<String, String> result = new HashMap<String, String>();
-
- result.put("href", parser.getAttributeValue(null, "href"));
-
- next(parser);
-
- while (true) {
- int event = parser.getEventType();
- if (event == XmlPullParser.START_TAG) {
- QName tagName = new QName(parser.getNamespace(), parser.getName());
- if (XMLConstants.NAMESPACE_RESTATOM.equals(tagName.getNamespaceURI()) && TAG_COLLECTION_TYPE.equals(tagName.getLocalPart())) {
- result.put("collectionType", readText(parser));
- } else {
- skip(parser);
- }
- } else if (event == XmlPullParser.END_TAG) {
- break;
- } else {
- if (!next(parser)) {
- break;
- }
- }
- }
-
- next(parser);
-
- return new AtomElement(name, result);
- }
-
- /**
- * Parses a template tag.
- */
- private static AtomElement parseTemplate(XmlPullParser parser) throws Exception {
- QName name = new QName(parser.getNamespace(), parser.getName());
- Map<String, String> result = new HashMap<String, String>();
-
- next(parser);
-
- while (true) {
- int event = parser.getEventType();
- if (event == XmlPullParser.START_TAG) {
- QName tagName = new QName(parser.getNamespace(), parser.getName());
- if (XMLConstants.NAMESPACE_RESTATOM.equals(tagName.getNamespaceURI())) {
- if (TAG_TEMPLATE_TEMPLATE.equals(tagName.getLocalPart())) {
- result.put("template", readText(parser));
- } else if (TAG_TEMPLATE_TYPE.equals(tagName.getLocalPart())) {
- result.put("type", readText(parser));
- } else {
- skip(parser);
- }
- } else {
- skip(parser);
- }
- } else if (event == XmlPullParser.END_TAG) {
- break;
- } else {
- if (!next(parser)) {
- break;
- }
- }
- }
-
- next(parser);
-
- return new AtomElement(name, result);
- }
-
- /**
- * Parses a link tag.
- */
- private static AtomElement parseLink(XmlPullParser parser) throws Exception {
- QName name = new QName(parser.getNamespace(), parser.getName());
- AtomLink result = new AtomLink();
-
- // save attributes
- for (int i = 0; i < parser.getAttributeCount(); i++) {
- if (LINK_REL.equals(parser.getAttributeName(i))) {
- result.setRel(parser.getAttributeValue(i));
- } else if (LINK_HREF.equals(parser.getAttributeName(i))) {
- result.setHref(parser.getAttributeValue(i));
- } else if (LINK_TYPE.equals(parser.getAttributeName(i))) {
- result.setType(parser.getAttributeValue(i));
- }
- }
-
- // skip enclosed tags, if any
- skip(parser);
-
- return new AtomElement(name, result);
- }
-
- /**
- * Parses a link tag.
- */
- private static AtomElement parseAtomContentSrc(XmlPullParser parser) throws Exception {
- QName name = new QName(parser.getNamespace(), parser.getName());
- AtomLink result = new AtomLink();
- result.setRel(LINK_REL_CONTENT);
-
- // save attributes
- for (int i = 0; i < parser.getAttributeCount(); i++) {
- if (CONTENT_SRC.equals(parser.getAttributeName(i))) {
- result.setHref(parser.getAttributeValue(i));
- }
- }
-
- // skip enclosed tags, if any
- skip(parser);
-
- return new AtomElement(name, result);
- }
-
- /**
- * Parses a text tag.
- */
- private static AtomElement parseText(XmlPullParser parser) throws Exception {
- QName name = new QName(parser.getNamespace(), parser.getName());
- return new AtomElement(name, readText(parser));
- }
-
- /**
- * Parses a text tag and convert it into an integer.
- */
- private static AtomElement parseBigInteger(XmlPullParser parser) throws Exception {
- QName name = new QName(parser.getNamespace(), parser.getName());
- return new AtomElement(name, new BigInteger(readText(parser)));
- }
-
- /**
- * Parses a tag that contains text.
- */
- private static String readText(XmlPullParser parser) throws Exception {
- StringBuilder sb = new StringBuilder();
-
- next(parser);
-
- while (true) {
- int event = parser.getEventType();
- if (event == XmlPullParser.END_TAG) {
- break;
- } else if (event == XmlPullParser.TEXT) {
- String s = parser.getText();
- if (s != null) {
- sb.append(s);
- }
- } else if (event == XmlPullParser.START_TAG) {
- throw new RuntimeException("Unexpected tag: " + parser.getName());
- }
-
- if (!next(parser)) {
- break;
- }
- }
-
- next(parser);
-
- return sb.toString();
- }
-
- /**
- * Skips a tag or subtree.
- */
- private static void skip(XmlPullParser parser) throws Exception {
- int level = 1;
- while (next(parser)) {
- int event = parser.getEventType();
- if (event == XmlPullParser.START_TAG) {
- level++;
- } else if (event == XmlPullParser.END_TAG) {
- level--;
- if (level == 0) {
- break;
- }
- }
- }
-
- next(parser);
- }
-
- private static boolean next(XmlPullParser parser) throws Exception {
- int event = parser.getEventType();
- if (event == XmlPullParser.END_DOCUMENT) {
- return false;
- } else {
- parser.next();
- return true;
- }
- }
-
- // -----------------------------------------------------------------------------------
- // ------------- NEW ANDROID METHOD
- // -----------------------------------------------------------------------------------
-
- private static RepositoryInfo parseRepositoryInfo(XmlPullParser parser) throws Exception {
- //log.debug("[START] parseRepositoryInfo...");
- int eventType = parser.next();
- String name = parser.getName();
- String namespace = parser.getNamespace();
- Map<String, String> repositoryInfoRawValues = new HashMap<String, String>(15);
- Map<String, String> repositoryCapabilitiesRawValues = new HashMap<String, String>(15);
- AclCapabilities aclCapabilities = null;
- List<String> changesOnType = new ArrayList<String>();
- List<CmisExtensionElement> extensions = new ArrayList<CmisExtensionElement>();
-
- while (!(eventType == XmlPullParser.END_TAG && Constants.SELECTOR_REPOSITORY_INFO.equals(name))) {
- switch (eventType) {
- case XmlPullParser.START_TAG:
-
- if (!CmisAtomPubConstants.REPINFO_KEYS.contains(name)) {
- extensions.addAll(parseExtensions(parser));
- eventType = parser.next();
- if (XmlPullParser.TEXT == eventType) {
- eventType = parser.next();
- }
- name = parser.getName();
- continue;
- }
-
- if (TAG_REPINFO_CAPABILITIES.equals(name)) {
- eventType = parser.next();
- name = parser.getName();
- while (!(eventType == XmlPullParser.END_TAG && TAG_REPINFO_CAPABILITIES.equals(name))) {
- switch (eventType) {
- case XmlPullParser.START_TAG:
- parser.next();
- repositoryCapabilitiesRawValues.put(name, parser.getText());
- break;
- }
- eventType = parser.next();
- name = parser.getName();
- }
- } else if (TAG_REPINFO_ACL_CAPABILITY.equals(name)) {
- aclCapabilities = parseAclCapabilities(parser);
- } else if (TAG_REPINFO_CHANGES_ON_TYPE.equals(name)) {
- parser.next();
- changesOnType.add(parser.getText());
- } else if (XMLConstants.NAMESPACE_CMIS.equals(namespace)) {
- parser.next();
- repositoryInfoRawValues.put(name, parser.getText());
- }
-
- break;
-
- }
- eventType = parser.next();
- name = parser.getName();
- namespace = parser.getNamespace();
- }
-
- parser.next();
- // log.debug("[STOP] parseRepositoryInfo...");
- return AtomPubConverter.convertRepositoryInfo(repositoryInfoRawValues, repositoryCapabilitiesRawValues, aclCapabilities, changesOnType, extensions);
- }
-
- private static TypeDefinition parseTypeDefinition(XmlPullParser parser, BaseTypeId type) throws Exception {
- // log.debug("[START] parseTypeDefinition...");
- Map<String, String> definitionRawValues = new HashMap<String, String>(15);
- List<PropertyDefinition<?>> propertyDefinitionList = new ArrayList<PropertyDefinition<?>>(10);
-
- int eventType = parser.next();
- String name = parser.getName();
- String namespace = parser.getNamespace();
- List<CmisExtensionElement> extensions = new ArrayList<CmisExtensionElement>();
-
- while (!(eventType == XmlPullParser.END_TAG && TAG_TEMPLATE_TYPE.equals(name))) {
- switch (eventType) {
- case XmlPullParser.START_TAG:
- if (name.startsWith(TAG_PROPERTY)) {
- propertyDefinitionList.add(parsePropertyDefinition(parser));
- } else if (XMLConstants.NAMESPACE_CMIS.equals(namespace)) {
- parser.next();
- definitionRawValues.put(name, parser.getText());
- } else {
- // Parse Extensions
- extensions.addAll(parseExtensions(parser));
- eventType = parser.next();
- if (XmlPullParser.TEXT == eventType) {
- eventType = parser.next();
- }
- name = parser.getName();
- continue;
- }
-
- break;
-
- }
- eventType = parser.next();
- name = parser.getName();
- namespace = parser.getNamespace();
- }
-
- parser.next();
- // log.debug("[STOP] parseTypeDefinition...");
-
- return AtomPubConverter.convertTypeDefinition(type, definitionRawValues, propertyDefinitionList, extensions);
- }
-
- private static PropertyDefinition<?> parsePropertyDefinition(XmlPullParser parser) throws Exception {
- // log.debug("[START] parsePropertyDefinition...");
-
- String id = null;
- Map<String, String> propertyTypeRawValues = new HashMap<String, String>(15);
- id = parser.getName();
- int eventType = parser.next();
- String name = parser.getName();
- String namespace = parser.getNamespace();
- List<CmisExtensionElement> extensions = new ArrayList<CmisExtensionElement>();
-
- while (!(eventType == XmlPullParser.END_TAG && id.equals(name))) {
- switch (eventType) {
- case XmlPullParser.START_TAG:
- if (XMLConstants.NAMESPACE_CMIS.equals(namespace)) {
- parser.next();
- propertyTypeRawValues.put(name, parser.getText());
- } else {
- // Parse Extensions
- extensions.addAll(parseExtensions(parser));
- eventType = parser.next();
- if (XmlPullParser.TEXT == eventType) {
- eventType = parser.next();
- }
- name = parser.getName();
- continue;
- }
- break;
- }
- eventType = parser.next();
- name = parser.getName();
- namespace = parser.getNamespace();
- }
-
- // log.debug("[STOP] parsePropertyDefinition...");
- return AtomPubConverter.convertPropertyDefinition(id, propertyTypeRawValues, extensions);
- }
-
- private static ObjectData parseObject(XmlPullParser parser) throws Exception {
-
- // log.debug("[START] parseObject...");
-
- List<RenditionData> renditions = new ArrayList<RenditionData>(3);
- Properties properties = null;
- AllowableActions allowableActions = null;
- Acl acl = null;
- List<CmisExtensionElement> extensions = new ArrayList<CmisExtensionElement>(2);
-
- int eventType = parser.next();
- String name = parser.getName();
-
- while (!(eventType == XmlPullParser.END_TAG && Constants.SELECTOR_OBJECT.equals(name))) {
- switch (eventType) {
- case XmlPullParser.START_TAG:
-
- // EXTENSIONS
- if (!CmisAtomPubConstants.OBJECT_KEYS.contains(name)) {
- extensions.addAll(parseExtensions(parser));
- eventType = parser.next();
- if (XmlPullParser.TEXT == eventType) {
- eventType = parser.next();
- }
- name = parser.getName();
- continue;
- }
-
- if (TAG_OBJECT_PROPERTIES.equals(name)) {
- properties = parseProperties(parser);
- } else if (TAG_OBJECT_ALLOWABLE_ACTIONS.equals(name)) {
- allowableActions = parseAllowableActions(parser);
- } else if (TAG_OBJECT_ACL.equals(name)) {
- acl = parseACL(parser);
- } else if (TAG_OBJECT_RENDITION.equals(name)) {
- renditions.add(parseRenditions(parser));
- } else {
- skip(parser);
- }
- break;
- }
-
-
- eventType = parser.getEventType();
- name = parser.getName();
- if(!(eventType == XmlPullParser.END_TAG && Constants.SELECTOR_OBJECT.equals(name))){
- eventType = parser.next();
- name = parser.getName();
- }
- }
-
- // Important !
- parser.next();
-
- // log.debug("[END] parseObject...");
- return AtomPubConverter.convertObject(properties, allowableActions, acl, renditions, extensions);
- }
-
- /**
- * Converts properties.
- *
- * @throws IOException
- * @throws XmlPullParserException
- */
- private static Properties parseProperties(XmlPullParser parser) throws Exception {
- // log.debug("[START] parseProperties...");
-
- if (parser == null) {
- return null;
- }
-
- int eventType = parser.next();
- String name = parser.getName();
- String nameSpace = parser.getNamespace();
- int countParam = 0;
- String id = null, displayName = null, queryName = null, localName = null, paramName = null, tag = null;
- List<String> values = null;
- List<PropertyData<?>> properties = new ArrayList<PropertyData<?>>();
- List<CmisExtensionElement> extensions = new ArrayList<CmisExtensionElement>();
-
- while (!(eventType == XmlPullParser.END_TAG && TAG_OBJECT_PROPERTIES.equals(name))) {
- switch (eventType) {
- case XmlPullParser.START_TAG:
-
- // Extension
- if (!XMLConstants.NAMESPACE_CMIS.equals(nameSpace)) {
- extensions.addAll(parseExtensions(parser));
- eventType = parser.next();
- if (XmlPullParser.TEXT == eventType) {
- eventType = parser.next();
- }
- name = parser.getName();
- nameSpace = parser.getNamespace();
- continue;
- }
-
- tag = name;
-
- // attributes
- countParam = parser.getAttributeCount();
- displayName = null;
- queryName = null;
- localName = null;
- paramName = null;
- for (int i = 0; i < countParam; i++) {
- paramName = parser.getAttributeName(i);
- if (ATTR_PROPERTY_DISPLAYNAME.equals(paramName)) {
- displayName = parser.getAttributeValue(i);
- } else if (ATTR_PROPERTY_QUERYNAME.equals(paramName)) {
- queryName = parser.getAttributeValue(i);
- } else if (ATTR_PROPERTY_LOCALNAME.equals(paramName)) {
- localName = parser.getAttributeValue(i);
- } else if (ATTR_PROPERTY_DEFINITION_ID.equals(paramName)) {
- id = parser.getAttributeValue(i);
- }
- }
-
- // Values
- values = new ArrayList<String>(2);
- while (!(eventType == XmlPullParser.END_TAG && tag.equals(name))) {
- switch (eventType) {
- case XmlPullParser.START_TAG:
- if (ATTR_PROPERTY_VALUE.equals(name)) {
- parser.next();
- values.add(parser.getText());
- }
- break;
- }
- eventType = parser.next();
- name = parser.getName();
- }
-
- // Convert
- properties.add(AtomPubConverter.convertProperty(tag, id, displayName, queryName, localName, values));
- break;
-
- }
- eventType = parser.next();
- name = parser.getName();
- nameSpace = parser.getNamespace();
- }
- // log.debug("[END] parseProperties...");
- return AtomPubConverter.convertProperties(properties, extensions);
- }
-
- private static Map<String, String> getAttributes(XmlPullParser parser) {
- Map<String, String> attributes = null;
- int attributeCount = parser.getAttributeCount();
- if (parser.getAttributeCount() > 0) {
- attributes = new HashMap<String, String>(attributeCount);
- for (int i = 0; i < attributeCount; i++) {
- attributes.put(parser.getAttributeName(i), parser.getAttributeValue(i));
- }
- }
- return attributes;
- }
-
- private static List<CmisExtensionElement> parseExtensions(XmlPullParser parser) throws Exception {
-
- // log.debug("[START] parseExtensions...");
-
- List<CmisExtensionElement> extensions = new ArrayList<CmisExtensionElement>();
-
- Stack<String> names = new Stack<String>();
- Stack<String> namespaces = new Stack<String>();
- Stack<Map<String, String>> attributes = new Stack<Map<String, String>>();
- Stack<List<CmisExtensionElement>> childrenStack = new Stack<List<CmisExtensionElement>>();
-
- String name = parser.getName();
- String id = parser.getName();
- int eventType = parser.getEventType();
-
- while (!(eventType == XmlPullParser.END_TAG && id.equals(name))) {
- switch (eventType) {
- case XmlPullParser.START_TAG:
-
- // parse tag info
- names.push(parser.getName());
- namespaces.push(parser.getNamespace());
- attributes.push(getAttributes(parser));
-
- int beforeEventType = parser.getEventType();
- eventType = parser.next();
- switch (eventType) {
- case XmlPullParser.START_TAG:
- childrenStack.add(new ArrayList<CmisExtensionElement>());
- break;
- case XmlPullParser.TEXT:
- String value = parser.getText();
- if ("\n".equals(value)) {
- if (beforeEventType == XmlPullParser.START_TAG) {
- childrenStack.add(new ArrayList<CmisExtensionElement>());
- } else if (eventType == XmlPullParser.END_TAG) {
- childrenStack.get(childrenStack.size() - 1).add(new CmisExtensionElementImpl(namespaces.pop(), names.pop(), attributes.pop(), (String) null));
- }
- parser.next();
- } else {
- if (childrenStack.size() != 0) {
- childrenStack.get(childrenStack.size() - 1).add(new CmisExtensionElementImpl(namespaces.pop(), names.pop(), attributes.pop(), value));
- parser.next();
- } else if (id.equals(parser.getName())) {
- extensions.add(new CmisExtensionElementImpl(namespaces.pop(), names.pop(), attributes.pop(), value));
- return extensions;
- } else {
- parser.next();
- if (id.equals(parser.getName())) {
- extensions.add(new CmisExtensionElementImpl(namespaces.pop(), names.pop(), attributes.pop(), value));
- return extensions;
- }
- }
- }
-
- break;
- case XmlPullParser.END_TAG:
- // case empty tag leaf
- if (childrenStack.size() != 0) {
- childrenStack.get(childrenStack.size() - 1).add(new CmisExtensionElementImpl(namespaces.pop(), names.pop(), attributes.pop(), (String) null));
- } else if (id.equals(parser.getName())) {
- extensions.add(new CmisExtensionElementImpl(namespaces.pop(), names.pop(), attributes.pop(), (String) null));
- return extensions;
- }
- break;
- }
- break;
- case XmlPullParser.END_TAG:
- eventType = parser.next();
- if (XmlPullParser.TEXT == eventType) {
- eventType = parser.next();
- }
-
- if (XmlPullParser.END_TAG == eventType) {
- CmisExtensionElementImpl ext = new CmisExtensionElementImpl(namespaces.pop(), names.pop(), attributes.pop(), childrenStack.pop());
- if (childrenStack.size() == 0) {
- extensions.add(ext);
- } else {
- childrenStack.get(childrenStack.size() - 1).add(ext);
- }
- }
- break;
- }
-
- eventType = parser.getEventType();
- name = parser.getName();
- }
-
- if (extensions.isEmpty() && childrenStack.size() == 1) {
- extensions.addAll(childrenStack.pop());
- }
-
- // log.debug("[END] parseExtensions...");
-
- return extensions;
- }
-
- private static RenditionData parseRenditions(XmlPullParser parser) throws Exception {
- // log.debug("[START] parseRenditions...");
- Map<String, String> rendition = new HashMap<String, String>(15);
- int eventType = parser.next();
- String name = parser.getName();
- String namespace = parser.getNamespace();
- List<CmisExtensionElement> extensions = new ArrayList<CmisExtensionElement>();
-
- while (!(eventType == XmlPullParser.END_TAG && TAG_RENDITION.equals(name))) {
- switch (eventType) {
- case XmlPullParser.START_TAG:
- if (XMLConstants.NAMESPACE_CMIS.equals(namespace)) {
- parser.next();
- rendition.put(name, parser.getText());
- } else {
- // Parse Extensions
- extensions.addAll(parseExtensions(parser));
- eventType = parser.next();
- if (XmlPullParser.TEXT == eventType) {
- eventType = parser.next();
- }
- name = parser.getName();
- namespace = parser.getNamespace();
- continue;
- }
- break;
- }
- eventType = parser.next();
- name = parser.getName();
- namespace = parser.getNamespace();
- }
-
- // log.debug("[STOP] parseRenditions...");
- return AtomPubConverter.convertRendition(rendition, extensions);
- }
-
- private static AllowableActions parseAllowableActions(XmlPullParser parser) throws Exception {
- // log.debug("[START] parseAllowableActions...");
- Map<String, String> allowableActionsRawValues = new HashMap<String, String>(15);
- int eventType = parser.next();
- String name = parser.getName();
- String namespace = parser.getNamespace();
- List<CmisExtensionElement> extensions = new ArrayList<CmisExtensionElement>();
-
- while (!(eventType == XmlPullParser.END_TAG && Constants.SELECTOR_ALLOWABLEACTIONS.equals(name))) {
- switch (eventType) {
- case XmlPullParser.START_TAG:
- if (XMLConstants.NAMESPACE_CMIS.equals(namespace)) {
- parser.next();
- allowableActionsRawValues.put(name, parser.getText());
- } else {
- // Parse Extensions
- extensions.addAll(parseExtensions(parser));
- eventType = parser.next();
- if (XmlPullParser.TEXT == eventType) {
- eventType = parser.next();
- }
- name = parser.getName();
- namespace = parser.getNamespace();
- continue;
- }
- break;
- }
- eventType = parser.next();
- name = parser.getName();
- namespace = parser.getNamespace();
- }
-
- // log.debug("[STOP] parseAllowableActions...");
- return AtomPubConverter.convertAllowableActions(allowableActionsRawValues, extensions);
- }
-
- private static AclCapabilities parseAclCapabilities(XmlPullParser parser) throws Exception {
- // log.debug("[START] parseAclCapabilities...");
-
- Map<String, String> AclCapabilitiesRawValues = new HashMap<String, String>(15);
- List<PermissionDefinition> permissionDefinitionList = new ArrayList<PermissionDefinition>();
- Map<String, PermissionMapping> permMap = new HashMap<String, PermissionMapping>();
-
- int eventType = parser.next();
- String name = parser.getName();
- String namespace = parser.getNamespace();
-
- while (!(eventType == XmlPullParser.END_TAG && TAG_REPINFO_ACL_CAPABILITY.equals(name))) {
- switch (eventType) {
- case XmlPullParser.START_TAG:
- if (XMLConstants.NAMESPACE_CMIS.equals(namespace) && TAG_ACLCAP_PERMISSIONS.equals(name)) {
-
- String permission = null, description = null;
- // Permissions
- while (!(eventType == XmlPullParser.END_TAG && TAG_ACLCAP_PERMISSIONS.equals(name))) {
- switch (eventType) {
- case XmlPullParser.START_TAG:
- if (XMLConstants.NAMESPACE_CMIS.equals(namespace) && TAG_ACLCAP_PERMISSION_PERMISSION.equals(name)) {
- parser.next();
- permission = parser.getText();
- } else if (XMLConstants.NAMESPACE_CMIS.equals(namespace) && TAG_ACLCAP_PERMISSION_DESCRIPTION.equals(name)) {
- parser.next();
- description = parser.getText();
- }
- break;
- }
- eventType = parser.next();
- name = parser.getName();
- }
- PermissionDefinitionDataImpl permDef = new PermissionDefinitionDataImpl();
- permDef.setPermission(permission);
- permDef.setDescription(description);
-
- // convertExtension(permissionMap, permDef,
- // ACLCAP_PERMISSION_KEYS);
-
- permissionDefinitionList.add(permDef);
-
- } else if (XMLConstants.NAMESPACE_CMIS.equals(namespace) && TAG_ACLCAP_MAPPING.equals(name)) {
-
- String key = null;
- List<String> permList = new ArrayList<String>();
- // MAPPINGS
- while (!(eventType == XmlPullParser.END_TAG && TAG_ACLCAP_MAPPING.equals(name))) {
- switch (eventType) {
- case XmlPullParser.START_TAG:
- if (XMLConstants.NAMESPACE_CMIS.equals(namespace) && TAG_ACLCAP_MAPPING_KEY.equals(name)) {
- parser.next();
- key = parser.getText();
- } else if (XMLConstants.NAMESPACE_CMIS.equals(namespace) && TAG_ACLCAP_MAPPING_PERMISSION.equals(name)) {
- parser.next();
- permList.add(parser.getText());
- }
- break;
- }
- eventType = parser.next();
- name = parser.getName();
- }
- PermissionMappingDataImpl mapping = new PermissionMappingDataImpl();
- mapping.setKey(key);
- mapping.setPermissions(permList);
-
- // convertExtension(permissionMap, mapping,
- // ACLCAP_MAPPING_KEYS);
-
- permMap.put(key, mapping);
-
- } else if (XMLConstants.NAMESPACE_CMIS.equals(namespace)) {
- parser.next();
- AclCapabilitiesRawValues.put(name, parser.getText());
- }
- break;
- }
- eventType = parser.next();
- name = parser.getName();
- namespace = parser.getNamespace();
- }
-
- // log.debug("[STOP] parseAclCapabilities...");
- return AtomPubConverter.convertAclCapabilities(AclCapabilitiesRawValues, permissionDefinitionList, permMap);
- }
-
- private static Acl parseACL(XmlPullParser parser) throws Exception {
- // log.debug("[START] parseACL...");
- int eventType = parser.next();
- String name = parser.getName();
- String namespace = parser.getNamespace();
- boolean isPermissionRootTag = false;
- List<Ace> aces = new ArrayList<Ace>();
- List<String> permissions = null;
- AccessControlEntryImpl ace = null;
-
- while (!(eventType == XmlPullParser.END_TAG && Constants.SELECTOR_ACL.equals(name))) {
- switch (eventType) {
- case XmlPullParser.START_TAG:
- if (XMLConstants.NAMESPACE_CMIS.equals(namespace) && TAG_ACLCAP_PERMISSION_PERMISSION.equals(name)) {
- if (isPermissionRootTag == false) {
- isPermissionRootTag = true;
- permissions = new ArrayList<String>();
- ace = new AccessControlEntryImpl();
- } else {
- parser.next();
- permissions.add(parser.getText());
- parser.next();
- }
- } else if (XMLConstants.NAMESPACE_CMIS.equals(namespace) && TAG_ACE_PRINCIPAL.equals(name)) {
- AccessControlPrincipalDataImpl principal = null;
- while (!(eventType == XmlPullParser.END_TAG && TAG_ACE_PRINCIPAL.equals(name))) {
- switch (eventType) {
- case XmlPullParser.START_TAG:
- if (XMLConstants.NAMESPACE_CMIS.equals(namespace) && TAG_ACE_PRINCIPAL_ID.equals(name)) {
- parser.next();
- principal = new AccessControlPrincipalDataImpl();
- principal.setPrincipalId(parser.getText());
- }
- break;
- }
- eventType = parser.next();
- name = parser.getName();
- namespace = parser.getNamespace();
- }
- // convertExtension(jsonPrincipal, principal,
- // PRINCIPAL_KEYS);
- ace.setPrincipal(principal);
- } else if (XMLConstants.NAMESPACE_CMIS.equals(namespace) && TAG_ACE_DIRECT.equals(name)) {
- parser.next();
- Boolean isDirect = Boolean.parseBoolean(parser.getText());
- ace.setDirect(isDirect != null ? isDirect.booleanValue() : true);
- }
- break;
- case XmlPullParser.END_TAG:
- if (XMLConstants.NAMESPACE_CMIS.equals(namespace) && TAG_ACLCAP_PERMISSION_PERMISSION.equals(name)) {
- isPermissionRootTag = false;
- ace.setPermissions(permissions);
- aces.add(ace);
- }
- break;
- }
- eventType = parser.next();
- name = parser.getName();
- namespace = parser.getNamespace();
- }
-
- AccessControlListImpl result = new AccessControlListImpl();
- result.setAces(aces);
- // result.setExact(isExact);
-
- // convertExtension(json, result, ACL_KEYS);
+ // public constants
+ public static final String LINK_REL_CONTENT = "@@content@@";
- return result;
- }
+ private final InputStream stream;
+ private AtomBase parseResult;
+ public AtomPubParser(InputStream stream) {
+ if (stream == null) {
+ throw new IllegalArgumentException("No stream.");
+ }
+
+ this.stream = stream;
+ }
+
+ /**
+ * Parses the stream.
+ */
+ public void parse() throws Exception {
+ XmlPullParser parser = XMLUtils.createParser(stream);
+
+ try {
+ while (true) {
+ int event = parser.getEventType();
+ if (event == XmlPullParser.START_TAG) {
+ QName name = new QName(parser.getNamespace(), parser.getName());
+
+ if (XMLConstants.NAMESPACE_ATOM.equals(name.getNamespaceURI())) {
+ if (TAG_FEED.equals(name.getLocalPart())) {
+ parseResult = parseFeed(parser);
+ break;
+ } else if (TAG_ENTRY.equals(name.getLocalPart())) {
+ parseResult = parseEntry(parser);
+ break;
+ }
+ } else if (XMLConstants.NAMESPACE_CMIS.equals(name.getNamespaceURI())) {
+ if (TAG_ALLOWABLEACTIONS.equals(name.getLocalPart())) {
+ parseResult = parseAllowableActions(parser);
+ break;
+ } else if (TAG_ACL.equals(name.getLocalPart())) {
+ parseResult = parseACL(parser);
+ break;
+ }
+ } else if (XMLConstants.NAMESPACE_APP.equals(name.getNamespaceURI())) {
+ if (TAG_SERVICE.equals(name.getLocalPart())) {
+ parseResult = parseServiceDoc(parser);
+ break;
+ }
+ }
+ }
+
+ if (!XMLUtils.next(parser)) {
+ break;
+ }
+ }
+ } finally {
+ // make sure the stream is read and closed in all cases
+ try {
+ byte[] buffer = new byte[4096];
+ while (stream.read(buffer) > -1) {
+ }
+ } catch (Exception e) {
+ }
+
+ try {
+ stream.close();
+ } catch (Exception e) {
+ }
+ }
+ }
+
+ /**
+ * Return the parse results.
+ */
+ public AtomBase getResults() {
+ return parseResult;
+ }
+
+ /**
+ * Parses a service document.
+ */
+ private static ServiceDoc parseServiceDoc(XmlPullParser parser) throws Exception {
+ ServiceDoc result = new ServiceDoc();
+
+ next(parser);
+
+ while (true) {
+ int event = parser.getEventType();
+ if (event == XmlPullParser.START_TAG) {
+ QName name = new QName(parser.getNamespace(), parser.getName());
+
+ if (XMLConstants.NAMESPACE_APP.equals(name.getNamespaceURI())) {
+ if (TAG_WORKSPACE.equals(name.getLocalPart())) {
+ result.addWorkspace(parseWorkspace(parser));
+ } else {
+ skip(parser);
+ }
+ } else {
+ skip(parser);
+ }
+ } else if (event == XmlPullParser.END_TAG) {
+ break;
+ } else {
+ if (!XMLUtils.next(parser)) {
+ break;
+ }
+ }
+ }
+
+ return result;
+ }
+
+ /**
+ * Parses a workspace element in a service document.
+ */
+ private static RepositoryWorkspace parseWorkspace(XmlPullParser parser) throws Exception {
+ RepositoryWorkspace workspace = new RepositoryWorkspace();
+
+ next(parser);
+
+ while (true) {
+ int event = parser.getEventType();
+ if (event == XmlPullParser.START_TAG) {
+ AtomElement element = parseWorkspaceElement(parser);
+
+ // check if we can extract the workspace id
+ if ((element != null) && (element.getObject() instanceof RepositoryInfo)) {
+ workspace.setId(((RepositoryInfo) element.getObject()).getId());
+ }
+
+ // add to workspace
+ workspace.addElement(element);
+ } else if (event == XmlPullParser.END_TAG) {
+ break;
+ } else {
+ if (!next(parser)) {
+ break;
+ }
+ }
+ }
+
+ next(parser);
+
+ return workspace;
+ }
+
+ /**
+ * Parses an Atom feed.
+ */
+ private AtomFeed parseFeed(XmlPullParser parser) throws Exception {
+ AtomFeed result = new AtomFeed();
+
+ next(parser);
+
+ while (true) {
+ int event = parser.getEventType();
+ if (event == XmlPullParser.START_TAG) {
+ QName name = new QName(parser.getNamespace(), parser.getName());
+
+ if (XMLConstants.NAMESPACE_ATOM.equals(name.getNamespaceURI())) {
+ if (TAG_LINK.equals(name.getLocalPart())) {
+ result.addElement(parseLink(parser));
+ } else if (TAG_ENTRY.equals(name.getLocalPart())) {
+ result.addEntry(parseEntry(parser));
+ } else {
+ skip(parser);
+ }
+ } else if (XMLConstants.NAMESPACE_RESTATOM.equals(name.getNamespaceURI())) {
+ if (TAG_NUM_ITEMS.equals(name.getLocalPart())) {
+ result.addElement(parseBigInteger(parser));
+ } else {
+ skip(parser);
+ }
+ } else {
+ skip(parser);
+ }
+ } else if (event == XmlPullParser.END_TAG) {
+ break;
+ } else {
+ if (!next(parser)) {
+ break;
+ }
+ }
+ }
+
+ next(parser);
+
+ return result;
+ }
+
+ /**
+ * Parses an Atom entry.
+ */
+ private AtomEntry parseEntry(XmlPullParser parser) throws Exception {
+ AtomEntry result = new AtomEntry();
+
+ next(parser);
+
+ // walk through all tags in entry
+ while (true) {
+ int event = parser.getEventType();
+ if (event == XmlPullParser.START_TAG) {
+ AtomElement element = parseElement(parser);
+ if (element != null) {
+ // add to entry
+ result.addElement(element);
+
+ // find and set object id
+ if (element.getObject() instanceof ObjectData) {
+ result.setId(((ObjectData) element.getObject()).getId());
+ } else if (element.getObject() instanceof TypeDefinition) {
+ result.setId(((TypeDefinition) element.getObject()).getId());
+ }
+ }
+ } else if (event == XmlPullParser.END_TAG) {
+ break;
+ } else {
+ if (!next(parser)) {
+ break;
+ }
+ }
+ }
+
+ next(parser);
+
+ return result;
+ }
+
+ /**
+ * Parses an Allowable Actions document.
+ */
+ private static AtomAllowableActions parseAllowableActions(XmlPullParser parser) throws Exception {
+ return new AtomAllowableActions(XMLConverter.convertAllowableActions(parser));
+ }
+
+ /**
+ * Parses an ACL document.
+ */
+ private static AtomAcl parseACL(XmlPullParser parser) throws Exception {
+ return new AtomAcl(XMLConverter.convertAcl(parser));
+ }
+
+ /**
+ * Parses an element.
+ */
+ private AtomElement parseElement(XmlPullParser parser) throws Exception {
+ QName name = new QName(parser.getNamespace(), parser.getName());
+
+ if (XMLConstants.NAMESPACE_RESTATOM.equals(name.getNamespaceURI())) {
+ if (TAG_OBJECT.equals(name.getLocalPart())) {
+ return new AtomElement(name, XMLConverter.convertObject(parser));
+ } else if (TAG_PATH_SEGMENT.equals(name.getLocalPart())
+ || TAG_RELATIVE_PATH_SEGMENT.equals(name.getLocalPart())) {
+ return parseText(parser);
+ } else if (TAG_TYPE.equals(name.getLocalPart())) {
+ return new AtomElement(name, XMLConverter.convertTypeDefinition(parser));
+ } else if (TAG_CHILDREN.equals(name.getLocalPart())) {
+ return parseChildren(parser);
+ }
+ } else if (XMLConstants.NAMESPACE_ATOM.equals(name.getNamespaceURI())) {
+ if (TAG_LINK.equals(name.getLocalPart())) {
+ return parseLink(parser);
+ } else if (TAG_CONTENT.equals(name.getLocalPart())) {
+ return parseAtomContentSrc(parser);
+ }
+ }
+
+ // we don't know it - skip it
+ skip(parser);
+
+ return null;
+ }
+
+ /**
+ * Parses a children element.
+ */
+ private AtomElement parseChildren(XmlPullParser parser) throws Exception {
+ AtomElement result = null;
+ QName childName = new QName(parser.getNamespace(), parser.getName());
+
+ next(parser);
+
+ // walk through the children tag
+ while (true) {
+ int event = parser.getEventType();
+ if (event == XmlPullParser.START_TAG) {
+ QName name = new QName(parser.getNamespace(), parser.getName());
+
+ if (XMLConstants.NAMESPACE_ATOM.equals(name.getNamespaceURI())) {
+ if (TAG_FEED.equals(name.getLocalPart())) {
+ result = new AtomElement(childName, parseFeed(parser));
+ } else {
+ skip(parser);
+ }
+ } else {
+ skip(parser);
+ }
+ } else if (event == XmlPullParser.END_TAG) {
+ break;
+ } else {
+ if (!next(parser)) {
+ break;
+ }
+ }
+ }
+
+ next(parser);
+
+ return result;
+ }
+
+ /**
+ * Parses a workspace element.
+ */
+ private static AtomElement parseWorkspaceElement(XmlPullParser parser) throws Exception {
+ QName name = new QName(parser.getNamespace(), parser.getName());
+
+ if (XMLConstants.NAMESPACE_RESTATOM.equals(name.getNamespaceURI())) {
+ if (TAG_REPOSITORY_INFO.equals(name.getLocalPart())) {
+ return new AtomElement(name, XMLConverter.convertRepositoryInfo(parser));
+ } else if (TAG_URI_TEMPLATE.equals(name.getLocalPart())) {
+ return parseTemplate(parser);
+ }
+ } else if (XMLConstants.NAMESPACE_ATOM.equals(name.getNamespaceURI())) {
+ if (TAG_LINK.equals(name.getLocalPart())) {
+ return parseLink(parser);
+ }
+ } else if (XMLConstants.NAMESPACE_APP.equals(name.getNamespaceURI())) {
+ if (TAG_COLLECTION.equals(name.getLocalPart())) {
+ return parseCollection(parser);
+ }
+ }
+
+ // we don't know it - skip it
+ skip(parser);
+
+ return null;
+ }
+
+ /**
+ * Parses a collection tag.
+ */
+ private static AtomElement parseCollection(XmlPullParser parser) throws Exception {
+ QName name = new QName(parser.getNamespace(), parser.getName());
+ Map<String, String> result = new HashMap<String, String>();
+
+ result.put("href", parser.getAttributeValue(null, "href"));
+
+ next(parser);
+
+ while (true) {
+ int event = parser.getEventType();
+ if (event == XmlPullParser.START_TAG) {
+ QName tagName = new QName(parser.getNamespace(), parser.getName());
+ if (XMLConstants.NAMESPACE_RESTATOM.equals(tagName.getNamespaceURI())
+ && TAG_COLLECTION_TYPE.equals(tagName.getLocalPart())) {
+ result.put("collectionType", XMLUtils.readText(parser, XMLConstraints.MAX_STRING_LENGTH));
+ } else {
+ skip(parser);
+ }
+ } else if (event == XmlPullParser.END_TAG) {
+ break;
+ } else {
+ if (!next(parser)) {
+ break;
+ }
+ }
+ }
+
+ next(parser);
+
+ return new AtomElement(name, result);
+ }
+
+ /**
+ * Parses a template tag.
+ */
+ private static AtomElement parseTemplate(XmlPullParser parser) throws Exception {
+ QName name = new QName(parser.getNamespace(), parser.getName());
+ Map<String, String> result = new HashMap<String, String>();
+
+ next(parser);
+
+ while (true) {
+ int event = parser.getEventType();
+ if (event == XmlPullParser.START_TAG) {
+ QName tagName = new QName(parser.getNamespace(), parser.getName());
+ if (XMLConstants.NAMESPACE_RESTATOM.equals(tagName.getNamespaceURI())) {
+ if (TAG_TEMPLATE_TEMPLATE.equals(tagName.getLocalPart())) {
+ result.put("template", XMLUtils.readText(parser, XMLConstraints.MAX_STRING_LENGTH));
+ } else if (TAG_TEMPLATE_TYPE.equals(tagName.getLocalPart())) {
+ result.put("type", XMLUtils.readText(parser, XMLConstraints.MAX_STRING_LENGTH));
+ } else {
+ skip(parser);
+ }
+ } else {
+ skip(parser);
+ }
+ } else if (event == XmlPullParser.END_TAG) {
+ break;
+ } else {
+ if (!next(parser)) {
+ break;
+ }
+ }
+ }
+
+ next(parser);
+
+ return new AtomElement(name, result);
+ }
+
+ /**
+ * Parses a link tag.
+ */
+ private static AtomElement parseLink(XmlPullParser parser) throws Exception {
+ QName name = new QName(parser.getNamespace(), parser.getName());
+ AtomLink result = new AtomLink();
+
+ // save attributes
+ for (int i = 0; i < parser.getAttributeCount(); i++) {
+ if (LINK_REL.equals(parser.getAttributeName(i))) {
+ result.setRel(parser.getAttributeValue(i));
+ } else if (LINK_HREF.equals(parser.getAttributeName(i))) {
+ result.setHref(parser.getAttributeValue(i));
+ } else if (LINK_TYPE.equals(parser.getAttributeName(i))) {
+ result.setType(parser.getAttributeValue(i));
+ }
+ }
+
+ // skip enclosed tags, if any
+ skip(parser);
+
+ return new AtomElement(name, result);
+ }
+
+ /**
+ * Parses a link tag.
+ */
+ private static AtomElement parseAtomContentSrc(XmlPullParser parser) throws Exception {
+ QName name = new QName(parser.getNamespace(), parser.getName());
+ AtomLink result = new AtomLink();
+ result.setRel(LINK_REL_CONTENT);
+
+ // save attributes
+ for (int i = 0; i < parser.getAttributeCount(); i++) {
+ if (CONTENT_SRC.equals(parser.getAttributeName(i))) {
+ result.setHref(parser.getAttributeValue(i));
+ }
+ }
+
+ // skip enclosed tags, if any
+ skip(parser);
+
+ return new AtomElement(name, result);
+ }
+
+ /**
+ * Parses a text tag.
+ */
+ private static AtomElement parseText(XmlPullParser parser) throws Exception {
+ QName name = new QName(parser.getNamespace(), parser.getName());
+ return new AtomElement(name, XMLUtils.readText(parser, XMLConstraints.MAX_STRING_LENGTH));
+ }
+
+ /**
+ * Parses a text tag and convert it into an integer.
+ */
+ private static AtomElement parseBigInteger(XmlPullParser parser) throws Exception {
+ QName name = new QName(parser.getNamespace(), parser.getName());
+ return new AtomElement(name, new BigInteger(XMLUtils.readText(parser, XMLConstraints.MAX_STRING_LENGTH)));
+ }
}
Modified: chemistry/opencmis/trunk/chemistry-opencmis-android/chemistry-opencmis-android-client/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/CmisAtomPubConstants.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-android/chemistry-opencmis-android-client/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/CmisAtomPubConstants.java?rev=1485107&r1=1485106&r2=1485107&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-android/chemistry-opencmis-android-client/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/CmisAtomPubConstants.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-android/chemistry-opencmis-android-client/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/CmisAtomPubConstants.java Wed May 22 07:49:35 2013
@@ -59,11 +59,14 @@ public final class CmisAtomPubConstants
public static final String TAG_CONTENT = "content";
public static final String TAG_CONTENT_MEDIATYPE = "mediatype";
public static final String TAG_CONTENT_BASE64 = "base64";
+ public static final String TAG_CONTENT_FILENAME = "filename";
public static final String ATTR_DOCUMENT_TYPE = "cmisTypeDocumentDefinitionType";
public static final String ATTR_FOLDER_TYPE = "cmisTypeFolderDefinitionType";
public static final String ATTR_RELATIONSHIP_TYPE = "cmisTypeRelationshipDefinitionType";
public static final String ATTR_POLICY_TYPE = "cmisTypePolicyDefinitionType";
+ public static final String ATTR_ITEM_TYPE = "cmisTypeItemDefinitionType";
+ public static final String ATTR_SECONDARY_TYPE = "cmisTypeSecondaryDefinitionType";
// allowable actions
public static final String TAG_ALLOWABLEACTIONS = "allowableActions";
@@ -71,6 +74,9 @@ public final class CmisAtomPubConstants
// ACL
public static final String TAG_ACL = "acl";
+ // HTML
+ public static final String TAG_HTML = "html";
+
// links
public static final String LINK_REL = "rel";
public static final String LINK_HREF = "href";
Modified: chemistry/opencmis/trunk/chemistry-opencmis-android/chemistry-opencmis-android-client/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/CmisAtomPubSpi.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-android/chemistry-opencmis-android-client/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/CmisAtomPubSpi.java?rev=1485107&r1=1485106&r2=1485107&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-android/chemistry-opencmis-android-client/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/CmisAtomPubSpi.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-android/chemistry-opencmis-android-client/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/CmisAtomPubSpi.java Wed May 22 07:49:35 2013
@@ -37,7 +37,7 @@ import org.slf4j.LoggerFactory;
*/
public class CmisAtomPubSpi implements CmisSpi {
- private static final Logger log = LoggerFactory.getLogger(CmisAtomPubSpi.class);
+ private static final Logger LOG = LoggerFactory.getLogger(CmisAtomPubSpi.class);
private final BindingSession session;
@@ -55,8 +55,8 @@ public class CmisAtomPubSpi implements C
* Constructor.
*/
public CmisAtomPubSpi(BindingSession session) {
- if (log.isDebugEnabled()) {
- log.debug("Initializing AtomPub SPI...");
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("Initializing AtomPub SPI...");
}
this.session = session;
Modified: chemistry/opencmis/trunk/chemistry-opencmis-android/chemistry-opencmis-android-client/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/DiscoveryServiceImpl.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-android/chemistry-opencmis-android-client/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/DiscoveryServiceImpl.java?rev=1485107&r1=1485106&r2=1485107&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-android/chemistry-opencmis-android-client/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/DiscoveryServiceImpl.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-android/chemistry-opencmis-android-client/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/DiscoveryServiceImpl.java Wed May 22 07:49:35 2013
@@ -21,8 +21,6 @@ package org.apache.chemistry.opencmis.cl
import java.io.OutputStream;
import java.math.BigInteger;
import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Map;
import org.apache.chemistry.opencmis.client.bindings.spi.BindingSession;
import org.apache.chemistry.opencmis.client.bindings.spi.atompub.objects.AtomElement;
@@ -34,13 +32,20 @@ import org.apache.chemistry.opencmis.cli
import org.apache.chemistry.opencmis.commons.data.ExtensionsData;
import org.apache.chemistry.opencmis.commons.data.ObjectData;
import org.apache.chemistry.opencmis.commons.data.ObjectList;
+import org.apache.chemistry.opencmis.commons.enums.CmisVersion;
import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;
import org.apache.chemistry.opencmis.commons.exceptions.CmisObjectNotFoundException;
+import org.apache.chemistry.opencmis.commons.impl.XMLConverter;
+import org.apache.chemistry.opencmis.commons.impl.XMLUtils;
import org.apache.chemistry.opencmis.commons.impl.Constants;
import org.apache.chemistry.opencmis.commons.impl.UrlBuilder;
import org.apache.chemistry.opencmis.commons.impl.dataobjects.ObjectListImpl;
+import org.apache.chemistry.opencmis.commons.impl.dataobjects.QueryTypeImpl;
import org.apache.chemistry.opencmis.commons.spi.DiscoveryService;
import org.apache.chemistry.opencmis.commons.spi.Holder;
+import org.xmlpull.v1.XmlSerializer;
+
+import android.util.Xml;
/**
* Discovery Service AtomPub client.
@@ -110,7 +115,7 @@ public class DiscoveryServiceImpl extend
return result;
}
-
+
public ObjectList query(String repositoryId, String statement, Boolean searchAllVersions,
Boolean includeAllowableActions, IncludeRelationships includeRelationships, String renditionFilter,
BigInteger maxItems, BigInteger skipCount, ExtensionsData extension) {
@@ -125,19 +130,26 @@ public class DiscoveryServiceImpl extend
UrlBuilder url = new UrlBuilder(link);
- final Map<String, String> queryParameters = new HashMap<String, String>(6);
- queryParameters.put(CmisAtomPubConstants.TAG_QUERY_STATEMENT, statement);
- queryParameters.put(Constants.PARAM_ALLOWABLE_ACTIONS, (includeAllowableActions == null) ? null : includeAllowableActions.toString());
- queryParameters.put(Constants.PARAM_ALL_VERSIONS, (searchAllVersions == null) ? null :searchAllVersions.toString());
- queryParameters.put(Constants.PARAM_RELATIONSHIPS, (includeRelationships == null) ? null : includeRelationships.toString());
- queryParameters.put(Constants.PARAM_RENDITION_FILTER, renditionFilter);
- queryParameters.put(Constants.PARAM_MAX_ITEMS, (maxItems == null) ? null : maxItems.toString());
- queryParameters.put(Constants.PARAM_SKIP_COUNT, (skipCount == null) ? null : skipCount.toString());
+ // compile query request
+ final QueryTypeImpl query = new QueryTypeImpl();
+ query.setStatement(statement);
+ query.setSearchAllVersions(searchAllVersions);
+ query.setIncludeAllowableActions(includeAllowableActions);
+ query.setIncludeRelationships(includeRelationships);
+ query.setRenditionFilter(renditionFilter);
+ query.setMaxItems(maxItems);
+ query.setSkipCount(skipCount);
+
+ final CmisVersion cmisVersion = getCmisVersion(repositoryId);
// post the query and parse results
Response resp = post(url, Constants.MEDIATYPE_QUERY, new Output() {
public void write(OutputStream out) throws Exception {
- AtomEntryWriter.writeQuery(out, queryParameters);
+ XmlSerializer writer = Xml.newSerializer();
+ writer.setOutput(out, AtomEntryWriter.ENCODING);
+ XMLUtils.startXmlDocument(writer);
+ XMLConverter.writeQuery(writer, cmisVersion, query);
+ XMLUtils.endXmlDocument(writer);
}
});
AtomFeed feed = parse(resp.getStream(), AtomFeed.class);
@@ -175,5 +187,4 @@ public class DiscoveryServiceImpl extend
return result;
}
-
}
Modified: chemistry/opencmis/trunk/chemistry-opencmis-android/chemistry-opencmis-android-client/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/MultiFilingServiceImpl.java
URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-android/chemistry-opencmis-android-client/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/MultiFilingServiceImpl.java?rev=1485107&r1=1485106&r2=1485107&view=diff
==============================================================================
--- chemistry/opencmis/trunk/chemistry-opencmis-android/chemistry-opencmis-android-client/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/MultiFilingServiceImpl.java (original)
+++ chemistry/opencmis/trunk/chemistry-opencmis-android/chemistry-opencmis-android-client/src/main/java/org/apache/chemistry/opencmis/client/bindings/spi/atompub/MultiFilingServiceImpl.java Wed May 22 07:49:35 2013
@@ -58,7 +58,7 @@ public class MultiFilingServiceImpl exte
url.addParameter(Constants.PARAM_ALL_VERSIONS, allVersions);
// set up object and writer
- final AtomEntryWriter entryWriter = new AtomEntryWriter(createIdObject(objectId));
+ final AtomEntryWriter entryWriter = new AtomEntryWriter(createIdObject(objectId), getCmisVersion(repositoryId));
// post addObjectToFolder request
post(url, Constants.MEDIATYPE_ENTRY, new Output() {
@@ -84,7 +84,7 @@ public class MultiFilingServiceImpl exte
url.addParameter(Constants.PARAM_REMOVE_FROM, folderId);
// set up object and writer
- final AtomEntryWriter entryWriter = new AtomEntryWriter(createIdObject(objectId));
+ final AtomEntryWriter entryWriter = new AtomEntryWriter(createIdObject(objectId), getCmisVersion(repositoryId));
// post removeObjectFromFolder request
post(url, Constants.MEDIATYPE_ENTRY, new Output() {