/**
* Licensed to The Apereo Foundation under one or more contributor license
* agreements. See the NOTICE file distributed with this work for additional
* information regarding copyright ownership.
*
*
* The Apereo Foundation licenses this file to you 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://opensource.org/licenses/ecl2.txt
*
* 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.opencastproject.metadata.api;
import org.opencastproject.mediapackage.Catalog;
import java.io.IOException;
import java.io.InputStream;
/**
*
*/
public interface CatalogService<T extends MetadataCatalog> {
/**
* Returns a new, empty instance of the catalog
* @return a new catalog
*/
T newInstance();
/**
* Loads the catalog contents from an input stream
*
* @param in the catalog data
* @return the deserialized catalog contents
* @throws IOException if the content of the catalog can not be loaded
*/
T load(InputStream in) throws IOException;
/**
* Whether the mediapackage catalog is readable by this catalog service. A true value does not indicate that the
* catalog will be parsed correctly, only that the catalog's metadata seems to match this service.
*
* @param catalog the mediapackage catalog
* @return whether the catalog is readable
*/
boolean accepts(Catalog catalog);
/**
* Serializes a catalog
*
* @param catalog The catalog to serialize
* @return the (usually xml) stream
* @throws IOException if the catalog can not be serialized properly
*/
InputStream serialize(T catalog) throws IOException;
}