/**
* Licensed to Apereo under one or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information regarding copyright ownership. Apereo
* 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 the
* following location:
*
* <p>http://www.apache.org/licenses/LICENSE-2.0
*
* <p>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.apereo.portal.io.xml;
import java.util.List;
import java.util.Set;
import javax.xml.stream.XMLEventReader;
/**
* Describes a type of portal data that can be imported, exported, or deleted via the {@link
* IPortalDataHandlerService}
*
*/
public interface IPortalDataType {
/** @return The unique name of this portal data type, must be a valid XML element name. */
public String getTypeId();
/** @return Message code to use for displaying the user readable title of this data type */
public String getTitleCode();
/**
* @return Message code to use for displaying the user readable description of this data type
*/
public String getDescriptionCode();
/**
* @return The {@link PortalDataKey}s that can be imported for this data type and the order that
* the must be imported in. All data for each {@link PortalDataKey} will be imported in
* parallel.
*/
public List<PortalDataKey> getDataKeyImportOrder();
/**
* Post processes the resolved {@link PortalDataKey}, allows for data that needs to be retyped
* based on file name, returning multiple data keys for data that needs a multi-pass import, and
* other operations.
*
* @param systemId The url, file name or other system identifier for the data
* @param portalDataKey The already parsed key, must be contained in the set returned by {@link
* #getDataKeyImportOrder()}
* @param reader The XMLEventReader (set to the start of the XML event stream) to use for
* processing the input
* @return One or more PortalDataKeys that represent the data
*/
public Set<PortalDataKey> postProcessPortalDataKey(
String systemId, PortalDataKey portalDataKey, XMLEventReader reader);
}