/** * Converts an object in a folder list. */ public static JSONObject convert(final ObjectInFolderData objectInFolder, final TypeCache typeCache, final boolean succinct, final DateTimeFormat dateTimeFormat) { if ((objectInFolder == null) || (objectInFolder.getObject() == null)) { return null; } JSONObject result = new JSONObject(); result.put(JSON_OBJECTINFOLDER_OBJECT, convert(objectInFolder.getObject(), typeCache, PropertyMode.OBJECT, succinct, dateTimeFormat)); setIfNotNull(JSON_OBJECTINFOLDER_PATH_SEGMENT, objectInFolder.getPathSegment(), result); convertExtension(objectInFolder, result); return result; }
/** * Converts a type definition list. */ @SuppressWarnings({ "unchecked" }) public static List<TypeDefinitionContainer> convertTypeDescendants(final List<Object> json) { if (json == null) { return null; } if (json.isEmpty()) { return Collections.emptyList(); } List<TypeDefinitionContainer> result = new ArrayList<TypeDefinitionContainer>(); for (Object obj : json) { if (obj instanceof Map) { Map<String, Object> jsonContainer = (Map<String, Object>) obj; TypeDefinitionContainerImpl container = new TypeDefinitionContainerImpl(); container.setTypeDefinition(convertTypeDefinition(getMap(jsonContainer.get(JSON_TYPESCONTAINER_TYPE)))); Object children = jsonContainer.get(JSON_TYPESCONTAINER_CHILDREN); if (children instanceof List) { container.setChildren(convertTypeDescendants((List<Object>) children)); } else { container.setChildren(Collections.<TypeDefinitionContainer> emptyList()); } convertExtension(jsonContainer, container, TYPESCONTAINER_KEYS); result.add(container); } } return result; }
result.setAcl(convertAcl(getMap(json.get(JSON_OBJECT_ACL)))); result.setAllowableActions(convertAllowableActions(getMap(json.get(JSON_OBJECT_ALLOWABLE_ACTIONS)))); Map<String, Object> jsonChangeEventInfo = getMap(json.get(JSON_OBJECT_CHANGE_EVENT_INFO)); if (jsonChangeEventInfo != null) { ChangeEventInfoDataImpl changeEventInfo = new ChangeEventInfoDataImpl(); changeEventInfo.setChangeTime(getDateTime(jsonChangeEventInfo, JSON_CHANGE_EVENT_TIME)); changeEventInfo.setChangeType(getEnum(jsonChangeEventInfo, JSON_CHANGE_EVENT_TYPE, ChangeType.class)); convertExtension(json, result, CHANGE_EVENT_KEYS); result.setIsExactAcl(getBoolean(json, JSON_OBJECT_EXACT_ACL)); result.setPolicyIds(convertPolicyIds(getMap(json.get(JSON_OBJECT_POLICY_IDS)))); Map<String, Object> propMap = getMap(json.get(JSON_OBJECT_SUCCINCT_PROPERTIES)); if (propMap != null) { result.setProperties( convertSuccinctProperties(propMap, getMap(json.get(JSON_OBJECT_PROPERTIES_EXTENSION)), typeCache)); propMap = getMap(json.get(JSON_OBJECT_PROPERTIES)); if (propMap != null) { result.setProperties(convertProperties(propMap, getMap(json.get(JSON_OBJECT_PROPERTIES_EXTENSION)))); List<Object> jsonRelationships = getList(json.get(JSON_OBJECT_RELATIONSHIPS)); if (jsonRelationships != null) { result.setRelationships(convertObjects(jsonRelationships, typeCache)); List<Object> jsonRenditions = getList(json.get(JSON_OBJECT_RENDITIONS)); if (jsonRenditions != null) {
/** * Converts bulk update data lists. */ public static List<BulkUpdateObjectIdAndChangeToken> convertBulkUpdate(final List<Object> json) { if (json == null) { return null; } List<BulkUpdateObjectIdAndChangeToken> result = new ArrayList<BulkUpdateObjectIdAndChangeToken>(); for (Object ocJson : json) { BulkUpdateObjectIdAndChangeToken oc = convertBulkUpdate(getMap(ocJson)); if (oc != null) { result.add(oc); } } return result; }
/** * Converts an object. */ public static List<ObjectData> convertObjects(final List<Object> json, final TypeCache typeCache) { if (json == null) { return null; } List<ObjectData> result = new ArrayList<ObjectData>(); for (Object obj : json) { ObjectData relationship = convertObject(getMap(obj), typeCache); if (relationship != null) { result.add(relationship); } } return result; }
/** * Converts an object in a folder. */ public static ObjectInFolderData convertObjectInFolder(final Map<String, Object> json, final TypeCache typeCache) { if (json == null) { return null; } ObjectInFolderDataImpl result = new ObjectInFolderDataImpl(); result.setObject(convertObject(getMap(json.get(JSON_OBJECTINFOLDER_OBJECT)), typeCache)); result.setPathSegment(getString(json, JSON_OBJECTINFOLDER_PATH_SEGMENT)); convertExtension(json, result, OBJECTINFOLDER_KEYS); return result; }
@Override public TypeDefinition updateType(String repositoryId, TypeDefinition type, ExtensionsData extension) { // build URL UrlBuilder url = getRepositoryUrl(repositoryId); // prepare form data final FormDataWriter formData = new FormDataWriter(Constants.CMISACTION_UPDATE_TYPE); if (type != null) { formData.addParameter(Constants.CONTROL_TYPE, JSONConverter.convert(type, getDateTimeFormat()) .toJSONString()); } // send Response resp = post(url, formData.getContentType(), new Output() { @Override public void write(OutputStream out) throws IOException { formData.write(out); } }); Map<String, Object> json = parseObject(resp.getStream(), resp.getCharset()); return JSONConverter.convertTypeDefinition(json); }
/** * Serializes the type definition to JSON, using the format defined in the * CMIS specification. * * The JSON is UTF-8 encoded and the stream is not closed. */ public static void writeToJSON(TypeDefinition type, OutputStream stream) throws IOException { if (type == null) { throw new IllegalArgumentException("Type must be set!"); } if (stream == null) { throw new IllegalArgumentException("Output stream must be set!"); } Writer writer = new BufferedWriter(new OutputStreamWriter(stream, IOUtils.UTF8)); JSONConverter.convert(type, DateTimeFormat.SIMPLE).writeJSONString(writer); writer.flush(); }
/** * Converts a type definition container. */ public static JSONObject convert(final TypeDefinitionContainer container, final DateTimeFormat dateTimeFormat) { if (container == null) { return null; } JSONObject result = new JSONObject(); result.put(JSON_TYPESCONTAINER_TYPE, convert(container.getTypeDefinition(), dateTimeFormat)); if (isNotEmpty(container.getChildren())) { JSONArray children = new JSONArray(); for (TypeDefinitionContainer child : container.getChildren()) { children.add(convert(child, dateTimeFormat)); } result.put(JSON_TYPESCONTAINER_CHILDREN, children); } convertExtension(container, result); return result; }
@Override public ObjectData getFolderParent(String repositoryId, String folderId, String filter, ExtensionsData extension) { // build URL UrlBuilder url = getObjectUrl(repositoryId, folderId, Constants.SELECTOR_PARENT); url.addParameter(Constants.PARAM_FILTER, filter); url.addParameter(Constants.PARAM_SUCCINCT, getSuccinctParameter()); url.addParameter(Constants.PARAM_DATETIME_FORMAT, getDateTimeFormatParameter()); // read and parse Response resp = read(url); Map<String, Object> json = parseObject(resp.getStream(), resp.getCharset()); TypeCache typeCache = new ClientTypeCacheImpl(repositoryId, this); return JSONConverter.convertObject(json, typeCache); }
/** * Converts a type definition list. */ @SuppressWarnings({ "rawtypes", "unchecked" }) public static TypeDefinitionList convertTypeChildren(final Map<String, Object> json) { if (json == null) { return null; } TypeDefinitionListImpl result = new TypeDefinitionListImpl(); Object typesList = json.get(JSON_TYPESLIST_TYPES); List<TypeDefinition> types = new ArrayList<TypeDefinition>(); if (typesList instanceof List) { for (Object type : (List) typesList) { if (type instanceof Map) { types.add(convertTypeDefinition((Map<String, Object>) type)); } } } result.setList(types); result.setHasMoreItems(getBoolean(json, JSON_TYPESLIST_HAS_MORE_ITEMS)); result.setNumItems(getInteger(json, JSON_TYPESLIST_NUM_ITEMS)); convertExtension(json, result, TYPESLIST_KEYS); return result; }
@Override public Properties getProperties(String repositoryId, String objectId, String filter, ExtensionsData extension) { // build URL UrlBuilder url = getObjectUrl(repositoryId, objectId, Constants.SELECTOR_PROPERTIES); url.addParameter(Constants.PARAM_FILTER, filter); url.addParameter(Constants.PARAM_SUCCINCT, getSuccinctParameter()); url.addParameter(Constants.PARAM_DATETIME_FORMAT, getDateTimeFormatParameter()); // read and parse Response resp = read(url); Map<String, Object> json = parseObject(resp.getStream(), resp.getCharset()); if (getSuccinct()) { TypeCache typeCache = new ClientTypeCacheImpl(repositoryId, this); return JSONConverter.convertSuccinctProperties(json, null, typeCache); } else { return JSONConverter.convertProperties(json, null); } }
/** * Reads a type definition from a JSON stream. * * The stream must be UTF-8 encoded. */ @SuppressWarnings("unchecked") public static TypeDefinition readFromJSON(InputStream stream) throws IOException, JSONParseException { if (stream == null) { throw new IllegalArgumentException("Input stream must be set!"); } JSONParser parser = new JSONParser(); Object json = parser.parse(new InputStreamReader(stream, IOUtils.UTF8)); if (!(json instanceof Map)) { throw new CmisRuntimeException("Invalid stream! Not a type definition!"); } return JSONConverter.convertTypeDefinition((Map<String, Object>) json); }
@Override public Acl getAcl(String repositoryId, String objectId, Boolean onlyBasicPermissions, ExtensionsData extension) { // build URL UrlBuilder url = getObjectUrl(repositoryId, objectId, Constants.SELECTOR_ACL); url.addParameter(Constants.PARAM_ONLY_BASIC_PERMISSIONS, onlyBasicPermissions); // read and parse Response resp = read(url); Map<String, Object> json = parseObject(resp.getStream(), resp.getCharset()); return JSONConverter.convertAcl(json); }
@Override public List<ObjectData> getAppliedPolicies(String repositoryId, String objectId, String filter, ExtensionsData extension) { // build URL UrlBuilder url = getObjectUrl(repositoryId, objectId, Constants.SELECTOR_POLICIES); url.addParameter(Constants.PARAM_FILTER, filter); url.addParameter(Constants.PARAM_SUCCINCT, getSuccinctParameter()); url.addParameter(Constants.PARAM_DATETIME_FORMAT, getDateTimeFormatParameter()); // read and parse Response resp = read(url); List<Object> json = parseArray(resp.getStream(), resp.getCharset()); TypeCache typeCache = new ClientTypeCacheImpl(repositoryId, this); return JSONConverter.convertObjects(json, typeCache); } }
@Override public AllowableActions getAllowableActions(String repositoryId, String objectId, ExtensionsData extension) { // build URL UrlBuilder url = getObjectUrl(repositoryId, objectId, Constants.SELECTOR_ALLOWABLEACTIONS); // read and parse Response resp = read(url); Map<String, Object> json = parseObject(resp.getStream(), resp.getCharset()); return JSONConverter.convertAllowableActions(json); }
@Override public List<RenditionData> getRenditions(String repositoryId, String objectId, String renditionFilter, BigInteger maxItems, BigInteger skipCount, ExtensionsData extension) { // build URL UrlBuilder url = getObjectUrl(repositoryId, objectId, Constants.SELECTOR_RENDITIONS); url.addParameter(Constants.PARAM_RENDITION_FILTER, renditionFilter); url.addParameter(Constants.PARAM_MAX_ITEMS, maxItems); url.addParameter(Constants.PARAM_SKIP_COUNT, skipCount); // read and parse Response resp = read(url); List<Object> json = parseArray(resp.getStream(), resp.getCharset()); return JSONConverter.convertRenditions(json); }
@Override public List<BulkUpdateObjectIdAndChangeToken> bulkUpdateProperties(String repositoryId, List<BulkUpdateObjectIdAndChangeToken> objectIdAndChangeToken, Properties properties, List<String> addSecondaryTypeIds, List<String> removeSecondaryTypeIds, ExtensionsData extension) { // we need object ids if (isNullOrEmpty(objectIdAndChangeToken)) { throw new CmisInvalidArgumentException("Object ids must be set!"); } // build URL UrlBuilder url = getRepositoryUrl(repositoryId); // prepare form data final FormDataWriter formData = new FormDataWriter(Constants.CMISACTION_BULK_UPDATE); formData.addObjectIdsAndChangeTokens(objectIdAndChangeToken); formData.addPropertiesParameters(properties, getDateTimeFormat()); formData.addSecondaryTypeIds(addSecondaryTypeIds); formData.removeSecondaryTypeIds(removeSecondaryTypeIds); // send and parse Response resp = post(url, formData.getContentType(), new Output() { @Override public void write(OutputStream out) throws IOException { formData.write(out); } }); List<Object> json = parseArray(resp.getStream(), resp.getCharset()); return JSONConverter.convertBulkUpdate(json); }
@Override public TypeDefinition createType(String repositoryId, TypeDefinition type, ExtensionsData extension) { // build URL UrlBuilder url = getRepositoryUrl(repositoryId); // prepare form data final FormDataWriter formData = new FormDataWriter(Constants.CMISACTION_CREATE_TYPE); if (type != null) { formData.addParameter(Constants.CONTROL_TYPE, JSONConverter.convert(type, getDateTimeFormat()) .toJSONString()); } // send Response resp = post(url, formData.getContentType(), new Output() { @Override public void write(OutputStream out) throws IOException { formData.write(out); } }); Map<String, Object> json = parseObject(resp.getStream(), resp.getCharset()); return JSONConverter.convertTypeDefinition(json); }
@Override public void serve(CallContext context, CmisService service, String repositoryId, HttpServletRequest request, HttpServletResponse response) throws Exception { assert context != null; assert service != null; assert repositoryId != null; assert request != null; assert response != null; // get parameters String objectId = ((BrowserCallContextImpl) context).getObjectId(); // execute if (stopBeforeService(service)) { return; } AllowableActions allowableActions = service.getAllowableActions(repositoryId, objectId, null); if (stopAfterService(service)) { return; } JSONObject jsonAllowableActions = JSONConverter.convert(allowableActions); response.setStatus(HttpServletResponse.SC_OK); writeJSON(jsonAllowableActions, request, response); } }