/**********************************************************************************
* $URL: https://source.sakaiproject.org/svn/kernel/trunk/api/src/main/java/org/sakaiproject/entity/api/EntityProducer.java $
* $Id: EntityProducer.java 105077 2012-02-24 22:54:29Z ottenhoff@longsight.com $
***********************************************************************************
*
* Copyright (c) 2005, 2006, 2008 Sakai Foundation
*
* Licensed under the Educational Community 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.opensource.org/licenses/ECL-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.sakaiproject.entity.api;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.Stack;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
/**
* <p>
* Services which implement EntityProducer declare themselves as producers of Sakai entities.
* </p>
*/
public interface EntityProducer
{
/**
* @return a short string identifying the resources kept here, good for a file name or label.
*/
String getLabel();
/**
* @return true if the service wants to be part of archive / merge, false if not.
*/
boolean willArchiveMerge();
/**
* Archive the resources for the given site.
*
* @param siteId
* the id of the site.
* @param doc
* The document to contain the xml.
* @param stack
* The stack of elements, the top of which will be the containing element of the "service.name" element.
* @param archivePath
* The path to the folder where we are writing auxilary files.
* @param attachments
* This should be an empty List into which the implementation will put any attachments that are needed to support the
* archived content. Implementation will may use {@see List#contains(Object)} so choice of implementation should reflect this.
* @return A log of status messages from the archive.
*/
String archive(String siteId, Document doc, Stack<Element> stack, String archivePath, List<Reference> attachments);
/**
* Merge the resources from the archive into the given site.
*
* @param siteId
* The id of the site getting imported into.
* @param root
* The XML DOM tree of content to merge.
* @param archivePath
* The path to the folder where we are reading auxilary files.
* @param fromSiteId
* The site id from which these items were archived.
* @param attachmentNames
* An empty map should be supplied and during the merge and any attachments that are renamed will be put into this map the key is the old
* attachment name (as found in the DOM) and the value is the new attachment name.
* @param userIdTrans
* A map supplied by the called containing keys of old user IDs and values of new user IDs that the content should be attributed to.
* @param userListAllowImport
* A list of user IDs for which the content should be imported. An importer should ignore content if the user ID of the creator isn't in this
* set.
* @return A log of status messages from the merge.
*/
String merge(String siteId, Element root, String archivePath, String fromSiteId, Map<String, String> attachmentNames, Map<String, String> userIdTrans,
Set<String> userListAllowImport);
/**
* If the service recognizes the reference as its own, parse it and fill in the Reference
*
* @param reference
* The reference string to examine.
* @param ref
* The Reference object to set with the results of the parse from a recognized reference.
* @return true if the reference belonged to the service, false if not.
*/
boolean parseEntityReference(String reference, Reference ref);
/**
* Create an entity description for the entity referenced - the entity will belong to the service.
*
* @param ref
* The entity reference.
* @return The entity description, or null if one cannot be made.
*/
String getEntityDescription(Reference ref);
/**
* Access the resource properties for the referenced entity - the entity will belong to the service.
*
* @param ref
* The entity reference.
* @return The ResourceProperties object for the entity, or null if it has none.
*/
ResourceProperties getEntityResourceProperties(Reference ref);
/**
* Access the referenced Entity - the entity will belong to the service.
*
* @param ref
* The entity reference.
* @return The Entity, or null if not found.
*/
Entity getEntity(Reference ref);
/**
* Access a URL for the referenced entity - the entity will belong to the service.
*
* @param ref
* The entity reference.
* @return The entity's URL, or null if it does not have one.
*/
String getEntityUrl(Reference ref);
/**
* Access a collection of authorization group ids for security on the for the referenced entity - the entity will belong to the service.
*
* @param ref
* The entity reference.
* @param userId
* The userId for a user-specific set of groups, or null for the generic set.
* @return The entity's collection of authorization group ids, or null if this cannot be done.
*/
Collection<String> getEntityAuthzGroups(Reference ref, String userId);
/**
* Get the HttpAccess object that supports entity access via the access servlet for my entities.
*
* @return The HttpAccess object for my entities, or null if I do not support access.
*/
HttpAccess getHttpAccess();
}