/* * Copyright (c) 2010-2016 Evolveum * * Licensed 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 com.evolveum.midpoint.prism; import com.evolveum.midpoint.prism.crypto.Protector; import com.evolveum.midpoint.prism.delta.ObjectDelta; import com.evolveum.midpoint.prism.marshaller.JaxbDomHack; import com.evolveum.midpoint.prism.path.ItemPath; import com.evolveum.midpoint.prism.polystring.PolyStringNormalizer; import com.evolveum.midpoint.prism.schema.SchemaRegistry; import com.evolveum.midpoint.prism.util.PrismMonitor; import com.evolveum.midpoint.prism.xnode.RootXNode; import com.evolveum.midpoint.util.exception.SchemaException; import org.jetbrains.annotations.NotNull; import org.w3c.dom.Element; import org.xml.sax.SAXException; import javax.xml.namespace.QName; import java.io.File; import java.io.IOException; import java.io.InputStream; /** * * @author semancik * @author mederly */ public interface PrismContext { String LANG_XML = "xml"; String LANG_JSON = "json"; String LANG_YAML = "yaml"; /** * Initializes the prism context, e.g. loads and parses all the schemas. */ void initialize() throws SchemaException, SAXException, IOException; /** * Returns the schema registry. */ @NotNull SchemaRegistry getSchemaRegistry(); /** * Returns the default PolyString normalizer. */ @NotNull PolyStringNormalizer getDefaultPolyStringNormalizer(); /** * Returns the default protector. (TODO) */ Protector getDefaultProtector(); //region Parsing /** * Creates a parser ready to process the given file. * @param file File to be parsed. * @return Parser that can be invoked to retrieve the (parsed) content of the file. */ @NotNull PrismParser parserFor(@NotNull File file); /** * Creates a parser ready to process data from the given input stream. * @param stream Input stream to be parsed. * @return Parser that can be invoked to retrieve the (parsed) content of the input stream. */ @NotNull PrismParser parserFor(@NotNull InputStream stream); /** * Creates a parser ready to process data from the given string. * @param data String with the data to be parsed. It has be in UTF-8 encoding. * (For other encodings please use InputStream or File source.) * @return Parser that can be invoked to retrieve the (parsed) content. */ @NotNull PrismParserNoIO parserFor(@NotNull String data); /** * Creates a parser ready to process data from the given XNode tree. * @param xnode XNode tree with the data to be parsed. * @return Parser that can be invoked to retrieve the (parsed) content. */ @NotNull PrismParserNoIO parserFor(@NotNull RootXNode xnode); /** * Creates a parser ready to process data from the given DOM element. * @param element Element with the data to be parsed. * @return Parser that can be invoked to retrieve the (parsed) content. */ @NotNull PrismParserNoIO parserFor(@NotNull Element element); default <T extends Objectable> PrismObject<T> parseObject(File file) throws SchemaException, IOException { return parserFor(file).parse(); } default <T extends Objectable> PrismObject<T> parseObject(String dataString) throws SchemaException { return parserFor(dataString).parse(); } //endregion //region Adopt methods <C extends Containerable> void adopt(PrismContainer<C> object, Class<C> declaredType) throws SchemaException; <T extends Containerable> void adopt(PrismContainer<T> object) throws SchemaException; void adopt(Objectable objectable) throws SchemaException; void adopt(Containerable containerable) throws SchemaException; void adopt(PrismContainerValue value) throws SchemaException; <T extends Objectable> void adopt(ObjectDelta<T> delta) throws SchemaException; <C extends Containerable, O extends Objectable> void adopt(C containerable, Class<O> type, ItemPath path) throws SchemaException; <C extends Containerable, O extends Objectable> void adopt(PrismContainerValue<C> prismContainerValue, Class<O> type, ItemPath path) throws SchemaException; <C extends Containerable, O extends Objectable> void adopt(PrismContainerValue<C> prismContainerValue, QName typeName, ItemPath path) throws SchemaException; //endregion //region Serializing /** * Creates a serializer for the given language. * @param language Language (like xml, json, yaml). * @return The serializer. */ @NotNull PrismSerializer<String> serializerFor(@NotNull String language); /** * Creates a serializer for XML language. * @return The serializer. */ @NotNull PrismSerializer<String> xmlSerializer(); /** * Creates a serializer for JSON language. * @return The serializer. */ @NotNull PrismSerializer<String> jsonSerializer(); /** * Creates a serializer for YAML language. * @return The serializer. */ @NotNull PrismSerializer<String> yamlSerializer(); /** * Creates a serializer for DOM. The difference from XML serializer is that XML produces String output * whereas this one produces a DOM Element. * @return The serializer. */ @NotNull PrismSerializer<Element> domSerializer(); /** * Creates a serializer for XNode. The output of this serializer is intermediate XNode representation. * @return The serializer. */ @NotNull PrismSerializer<RootXNode> xnodeSerializer(); @Deprecated // use serializerFor + serialize instead <O extends Objectable> String serializeObjectToString(PrismObject<O> object, String language) throws SchemaException; /** * TODO * @param value * @return */ boolean canSerialize(Object value); //endregion /** * Creates a new PrismObject of a given static type. * @param clazz Static type of the object to be created. * @return New PrismObject. * @throws SchemaException If a definition for the given class couldn't be found. */ @NotNull <O extends Objectable> PrismObject<O> createObject(@NotNull Class<O> clazz) throws SchemaException; /** * Creates a new Objectable of a given static type. * @param clazz Static type of the object to be created. * @return New PrismObject's objectable content. * @throws SchemaException If a definition for the given class couldn't be found. */ @NotNull <O extends Objectable> O createObjectable(@NotNull Class<O> clazz) throws SchemaException; /** * TODO hide this from PrismContext interface? */ XmlEntityResolver getEntityResolver(); /** * TODO eliminate this method */ @NotNull @Deprecated JaxbDomHack getJaxbDomHack(); PrismMonitor getMonitor(); void setMonitor(PrismMonitor monitor); /** * If defined, it is considered to be the same as the relation of 'null'. Currently in midPoint, it is the value of org:default. */ QName getDefaultRelation(); }