blob: b2789b0ffd555b8934227b411fabd6124346a165 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.chemistry.opencmis.client.api;
import java.io.InputStream;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.apache.chemistry.opencmis.commons.data.Ace;
import org.apache.chemistry.opencmis.commons.data.Acl;
import org.apache.chemistry.opencmis.commons.data.ContentStream;
import org.apache.chemistry.opencmis.commons.data.ObjectData;
import org.apache.chemistry.opencmis.commons.data.ObjectList;
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.PropertyDefinition;
import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
import org.apache.chemistry.opencmis.commons.enums.Updatability;
/**
* A factory to create and convert CMIS objects.
*
* Custom {@link ObjectFactory} implementations may use the convert methods to
* inject specific implementations of the interfaces when the data is transfered
* from the low level API to the high level API.
*
* @see org.apache.chemistry.opencmis.client.api.Session#getObjectFactory()
*/
public interface ObjectFactory {
void initialize(Session session, Map<String, String> parameters);
// repository info
RepositoryInfo convertRepositoryInfo(RepositoryInfo repositoryInfo);
// ACL and ACE
Acl convertAces(List<Ace> aces);
Acl createAcl(List<Ace> aces);
Ace createAce(String principal, List<String> permissions);
// policies
List<String> convertPolicies(List<Policy> policies);
// renditions
Rendition convertRendition(String objectId, RenditionData rendition);
// content stream
/**
* Creates an object that implements the {@link ContentStream} interface.
*
* @param filename
* the filename, should be set
* @param length
* the length of the stream or -1 if the length is unknown
* @param mimetype
* the MIME type, if unknown "application/octet-stream" should be
* used
* @param stream
* the stream, should not be <code>null</code>
*
* @return the {@link ContentStream} object
*/
ContentStream createContentStream(String filename, long length, String mimetype, InputStream stream);
/**
* Creates an object that implements the {@link ContentStream} interface.
*
* @param filename
* the filename, should be set
* @param length
* the length of the stream or -1 if the length is unknown
* @param mimetype
* the MIME type, if unknown "application/octet-stream" should be
* used
* @param stream
* the stream, should not be <code>null</code>
* @param partial
* if <code>false</code> the stream represents the full content,
* if <code>true</code> the stream is only a part of the content
*
* @return the {@link ContentStream} object
*/
ContentStream createContentStream(String filename, long length, String mimetype, InputStream stream, boolean partial);
/**
* Converts a high level {@link ContentStream} object into a low level
* {@link ContentStream} object.
*
* @param contentStream
* the original {@link ContentStream} object
* @return the {@link ContentStream} object
*/
ContentStream convertContentStream(ContentStream contentStream);
// types
ObjectType convertTypeDefinition(TypeDefinition typeDefinition);
ObjectType getTypeFromObjectData(ObjectData objectData);
// properties
<T> Property<T> createProperty(PropertyDefinition<T> type, List<T> values);
Map<String, Property<?>> convertProperties(ObjectType objectType, Collection<SecondaryType> secondaryTypes,
Properties properties);
Properties convertProperties(Map<String, ?> properties, ObjectType type, Collection<SecondaryType> secondaryTypes,
Set<Updatability> updatabilityFilter);
List<PropertyData<?>> convertQueryProperties(Properties properties);
// objects
CmisObject convertObject(ObjectData objectData, OperationContext context);
QueryResult convertQueryResult(ObjectData objectData);
ChangeEvent convertChangeEvent(ObjectData objectData);
ChangeEvents convertChangeEvents(String changeLogToken, ObjectList objectList);
}