All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.apache.abdera.factory.Factory Maven / Gradle / Ivy

There is a newer version: 2024.11.18751.20241128T090041Z-241100
Show newest version
/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  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.  For additional information regarding
 * copyright in this work, please see the NOTICE file in the top level
 * directory of this distribution.
 */
package org.apache.abdera.factory;

import javax.activation.MimeType;
import javax.xml.namespace.QName;
import org.apache.abdera.Abdera;
import org.apache.abdera.model.Base;
import org.apache.abdera.model.Categories;
import org.apache.abdera.model.Category;
import org.apache.abdera.model.Collection;
import org.apache.abdera.model.Content;
import org.apache.abdera.model.Control;
import org.apache.abdera.model.DateTime;
import org.apache.abdera.model.Div;
import org.apache.abdera.model.Document;
import org.apache.abdera.model.Element;
import org.apache.abdera.model.Entry;
import org.apache.abdera.model.Feed;
import org.apache.abdera.model.Generator;
import org.apache.abdera.model.IRIElement;
import org.apache.abdera.model.Link;
import org.apache.abdera.model.Person;
import org.apache.abdera.model.Service;
import org.apache.abdera.model.Source;
import org.apache.abdera.model.Text;
import org.apache.abdera.model.Workspace;
import org.apache.abdera.parser.Parser;

/**
 *  The Factory interface is the primary means by which Feed Object Model instances are built. Factories are specific to
 *  parser implementations. Users will generally not have to know anything about the Factory implementation, which will
 *  be automatically selected based on the Abdera configuration options.
 *
 * @deprecated This API is deprecated as Apache Abdera is a retired project since 2017.
 */
@Deprecated(since = "2021-07-29")
public interface Factory {

    /**
     * Create a new Parser instance.
     *
     * @return A new instance of the Parser associated with this Factory
     */
    Parser newParser();

    /**
     * Create a new Document instance with a root Element of type T.
     *
     * @return A new instance of a Document
     */
     Document newDocument();

    /**
     * Create a new Service element.
     *
     * @return A newly created Service element
     */
    Service newService();

    /**
     * Create a new Service element as a child of the given Base.
     *
     * @param parent The element or document to which the new Service should be added as a child
     * @return A newly created Service element
     */
    Service newService(Base parent);

    /**
     * Create a new Workspace element.
     *
     * @return A newly created Workspace element
     */
    Workspace newWorkspace();

    /**
     * Create a new Workspace element as a child of the given Element.
     *
     * @param parent The element to which the new Workspace should be added as a child
     * @return A newly created Workspace element
     */
    Workspace newWorkspace(Element parent);

    /**
     * Create a new Collection element.
     *
     * @return A newly created Collection element
     */
    Collection newCollection();

    /**
     * Create a new Collection element as a child of the given Element.
     *
     * @param parent The element to which the new Collection should be added as a child
     * @return A newly created Collection element
     */
    Collection newCollection(Element parent);

    /**
     * Create a new Feed element. A new Document containing the Feed will be created automatically
     *
     * @return A newly created Feed element.
     */
    Feed newFeed();

    /**
     * Create a new Feed element as a child of the given Base.
     *
     * @param parent The element or document to which the new Feed should be added as a child
     * @return A newly created Feed element
     */
    Feed newFeed(Base parent);

    /**
     * Create a new Entry element. A new Document containing the Entry will be created automatically
     *
     * @return A newly created Entry element
     */
    Entry newEntry();

    /**
     * Create a new Entry element as a child of the given Base.
     *
     * @param parent The element or document to which the new Entry should be added as a child
     * @return A newly created Entry element
     */
    Entry newEntry(Base parent);

    /**
     * Create a new Category element.
     *
     * @return A newly created Category element
     */
    Category newCategory();

    /**
     * Create a new Category element as a child of the given Element.
     *
     * @param parent The element to which the new Category should be added as a child
     * @return A newly created Category element
     */
    Category newCategory(Element parent);

    /**
     * Create a new Content element.
     *
     * @return A newly created Content element with type="text"
     */
    Content newContent();

    /**
     * Create a new Content element of the given Content.Type.
     *
     * @param type The Content.Type for the newly created Content element.
     * @return A newly created Content element using the specified type
     */
    Content newContent(Content.Type type);

    /**
     * Create a new Content element of the given Content.Type as a child of the given Element.
     *
     * @param type The Content.Type for the newly created Content element.
     * @param parent The element to which the new Content should be added as a child
     * @return A newly created Content element using the specified type
     */
    Content newContent(Content.Type type, Element parent);

    /**
     * Create a new Content element of the given MediaType.
     *
     * @param mediaType The MIME media type to be specified by the type attribute
     * @return A newly created Content element using the specified MIME type
     */
    Content newContent(MimeType mediaType);

    /**
     * Create a new Content element of the given MediaType as a child of the given Element.
     *
     * @param mediaType The MIME media type to be specified by the type attribute
     * @param parent The element to which the new Content should be added as a child
     * @return A newly created Content element using the specified mediatype.
     */
    Content newContent(MimeType mediaType, Element parent);

    /**
     * Create a new published element.
     *
     * @return A newly created atom:published element
     */
    DateTime newPublished();

    /**
     * Create a new published element as a child of the given Element.
     *
     * @param parent The element to which the new Published element should be added as a child
     * @return A newly created atom:published element
     */
    DateTime newPublished(Element parent);

    /**
     * Create a new updated element.
     *
     * @return A newly created atom:updated element
     */
    DateTime newUpdated();

    /**
     * create a new updated element as a child of the given Element.
     *
     * @param parent The element to which the new Updated element should be added as a child
     * @return A newly created atom:updated element
     */
    DateTime newUpdated(Element parent);

    /**
     * Create a new app:edited element. The app:edited element is defined by the Atom Publishing Protocol specification
     * for use in atom:entry elements created and edited using that protocol. The element should only ever appear as a
     * child of atom:entry.
     *
     * @return A newly created app:edited element
     */
    DateTime newEdited();

    /**
     * Create a new app:edited element. The app:edited element is defined by the Atom Publishing Protocol specification
     * for use in atom:entry elements created and edited using that protocol. The element should only ever appear as a
     * child of atom:entry.
     *
     * @param parent The element to which the new Edited element should be added as a child
     * @return A newly created app:edited element
     */
    DateTime newEdited(Element parent);

    /**
     * Create a new DateTime element with the given QName as a child of the given Element. RFC4287 provides the abstract
     * Atom Date Construct as a reusable component. Any extension element whose value is a Date/Time SHOULD reuse this
     * construct to maintain consistency with the base specification.
     *
     * @param qname The XML QName of the Atom Date element to create
     * @param parent The element to which the new Atom Date element should be added as a child
     * @return The newly created Atom Date Construct element
     */
    DateTime newDateTime(QName qname, Element parent);

    /**
     * Create a new Generator with Abdera's default name and version.
     *
     * @return A newly created and pre-populated atom:generator element
     */
    Generator newDefaultGenerator();

    /**
     * Create a new Generator using Abdera's default name and version as a child of the given Element.
     *
     * @param parent The element to which the new Generator element should be added as a child
     * @return A newly created and pre-populated atom:generator element
     */
    Generator newDefaultGenerator(Element parent);

    /**
     * Create a new Generator element.
     *
     * @return A newly created atom:generator element
     */
    Generator newGenerator();

    /**
     * Create a new Generator element as a child of the given Element.
     *
     * @param parent The element to which the new Generator element should be added as a child
     * @return A newly creatd atom:generator element
     */
    Generator newGenerator(Element parent);

    /**
     * Create a new id element.
     *
     * @return A newly created atom:id element
     */
    IRIElement newID();

    /**
     * Create a new id element as a child of the given Element.
     *
     * @param parent The element to which the new ID element should be added as a child
     * @return A newly created atom:id element
     */
    IRIElement newID(Element parent);

    /**
     * Create a new icon element.
     *
     * @return A newly created atom:icon element
     */
    IRIElement newIcon();

    /**
     * Create a new icon element as a child of the given Element.
     *
     * @param parent The element to which the new Icon element should be added as a child
     * @return A newly created atom:icon element
     */
    IRIElement newIcon(Element parent);

    /**
     * Create a new logo element.
     *
     * @return A newly created atom:logo element
     */
    IRIElement newLogo();

    /**
     * Create a new logo element as a child of the given Element.
     *
     * @param parent The element to which the new Logo element should be added as a child
     * @return A newly created atom:logo element
     */
    IRIElement newLogo(Element parent);

    /**
     * Create a new uri element.
     *
     * @return A newly created atom:uri element
     */
    IRIElement newUri();

    /**
     * Create a new uri element as a child of the given Element.
     *
     * @param parent The element to which the new URI element should be added as a child
     * @return A newly created atom:uri element
     */
    IRIElement newUri(Element parent);

    /**
     * Create a new IRI element with the given QName as a child of the given Element.
     *
     * @param qname The XML QName of the new IRI element
     * @param parent The element to which the new generic IRI element should be added as a child
     * @return A newly created element whose text value can be an IRI
     */
    IRIElement newIRIElement(QName qname, Element parent);

    /**
     * Create a new Link element.
     *
     * @return A newly created atom:link element
     */
    Link newLink();

    /**
     * Create a new Link element as a child of the given Element.
     *
     * @param parent The element to which the new Link element should be added as a child
     * @return A newly created atom:uri element
     */
    Link newLink(Element parent);

    /**
     * Create a new author element.
     *
     * @return A newly created atom:author element
     */
    Person newAuthor();

    /**
     * Create a new author element as a child of the given Element.
     *
     * @param parent The element to which the new Author element should be added as a child
     * @return A newly created atom:author element
     */
    Person newAuthor(Element parent);

    /**
     * Create a new contributor element.
     *
     * @return A newly created atom:contributor element
     */
    Person newContributor();

    /**
     * Create a new contributor element as a child of the given Element.
     *
     * @param parent The element to which the new Contributor element should be added as a child
     * @return A newly created atom:contributor element
     */
    Person newContributor(Element parent);

    /**
     * Create a new Person element with the given QName as a child of the given Element. RFC4287 provides the abstract
     * Atom Person Construct to represent people and other entities within an Atom Document. Extensions that wish to
     * represent people SHOULD reuse this construct.
     *
     * @param qname The XML QName of the newly created Person element
     * @param parent The element to which the new Person element should be added as a child
     * @return A newly created Atom Person Construct element
     */
    Person newPerson(QName qname, Element parent);

    /**
     * Create a new Source element.
     *
     * @return A newly created atom:source element
     */
    Source newSource();

    /**
     * Create a new Source element as a child of the given Element.
     *
     * @param parent The element to which the new Source element should be added as a child
     * @return A newly created atom:source element
     */
    Source newSource(Element parent);

    /**
     * Create a new Text element with the given QName and Text.Type. RFC4287 provides the abstract Text Construct to
     * represent simple Text, HTML or XHTML within a document. This construct is used by Atom core elements like
     * atom:title, atom:summary, atom:rights, atom:subtitle, etc and SHOULD be reused by extensions that need a way of
     * embedding text in a document.
     *
     * @param qname The XML QName of the Text element to create
     * @param type The type of text (plain text, HTML or XHTML)
     * @return A newly created Atom Text Construct element
     */
    Text newText(QName qname, Text.Type type);

    /**
     * Create a new Text element with the given QName and Text.Type as a child of the given Element.
     *
     * @param qname The XML QName of the Text element to create
     * @param type The type of text (plain text, HTML or XHTML)
     * @param parent The element to which the new Updated element should be added as a child
     * @return A newly created Atom Text Construct element
     */
    Text newText(QName qname, Text.Type type, Element parent);

    /**
     * Create a new title element.
     *
     * @return A newly created atom:title element
     */
    Text newTitle();

    /**
     * Create a new title element as a child of the given Element.
     *
     * @param parent The element to which the new Title element should be added as a child
     * @return A newly created atom:title element
     */
    Text newTitle(Element parent);

    /**
     * Create a new title element with the given Text.Type.
     *
     * @param type The type of text used in the title (plain text, HTML, XHTML)
     * @return A newly created atom:title element
     */
    Text newTitle(Text.Type type);

    /**
     * Create a new title element with the given Text.Type as a child of the given Element.
     *
     * @param type The type of text used in the title (plain text, HTML, XHTML)
     * @param parent The element to which the new Updated element should be added as a child
     * @return A newly created atom:title element
     */
    Text newTitle(Text.Type type, Element parent);

    /**
     * Create a new subtitle element.
     *
     * @return A newly created atom:subtitle element
     */
    Text newSubtitle();

    /**
     * Create a new subtitle element as a child of the given Element.
     *
     * @param parent The element to which the new Subtitle element should be added as a child
     * @return A newly created atom:subtitle element
     */
    Text newSubtitle(Element parent);

    /**
     * Create a new subtitle element with the given Text.Type.
     *
     * @param type The type of text used in the subtitle (plain text, HTML, XHTML)
     * @return A newly created atom:subtitle element
     */
    Text newSubtitle(Text.Type type);

    /**
     * Create a new subtitle element with the given Text.Type as a child of the given Element.
     *
     * @param type The type of text used i the subtitle (plain text, HTML, XHTML)
     * @param parent The element to which the new Subtitle element should be added as a child
     * @return A newly created atom:subtitle element
     */
    Text newSubtitle(Text.Type type, Element parent);

    /**
     * Create a new summary element.
     *
     * @return A newly created atom:summary element
     */
    Text newSummary();

    /**
     * Create a new summary element as a child of the given Element.
     *
     * @param parent The element to which the new Summary element should be added as a child
     * @return A newly created atom:summary element
     */
    Text newSummary(Element parent);

    /**
     * Create a new summary element with the given Text.Type.
     *
     * @param type The type of text used in the summary (plain text, HTML, XHTML)
     * @return A newly created atom:summary element
     */
    Text newSummary(Text.Type type);

    /**
     * Create a new summary element with the given Text.Type as a child of the given Element.
     *
     * @param type The type of text used in the summary (plain text, HTML, XHTML)
     * @param parent The element to which the new Summary element should be added as a child
     * @return A newly created atom:summary element
     */
    Text newSummary(Text.Type type, Element parent);

    /**
     * Create a new rights element.
     *
     * @return A newly created atom:rights element
     */
    Text newRights();

    /**
     * Create a new rights element as a child of the given Element.
     *
     * @param parent The element to which the new Rights element should be added as a child
     * @return A newly created atom:rights element
     */
    Text newRights(Element parent);

    /**
     * Create a new rights element with the given Text.Type.
     *
     * @param type The type of text used in the Rights (plain text, HTML, XHTML)
     * @return A newly created atom:rights element
     */
    Text newRights(Text.Type type);

    /**
     * Create a new rights element with the given Text.Type as a child of the given Element.
     *
     * @param type The type of text used in the Rights (plain text, HTML, XHTML)
     * @param parent The element to which the new Rights element should be added as a child
     * @return A newly created atom:rights element
     */
    Text newRights(Text.Type type, Element parent);

    /**
     * Create a new name element.
     *
     * @return A newly created atom:name element
     */
    Element newName();

    /**
     * Create a new name element as a child of the given Element.
     *
     * @param parent The element to which the new Name element should be added as a child
     * @return A newly created atom:summary element
     */
    Element newName(Element parent);

    /**
     * Create a new email element.
     *
     * @return A newly created atom:email element
     */
    Element newEmail();

    /**
     * Create a new email element as a child of the given Element.
     *
     * @param parent The element to which the new Email element should be added as a child
     * @return A newly created atom:email element
     */
    Element newEmail(Element parent);

    /**
     * Create a new Element with the given QName.
     *
     * @return A newly created element
     */
     T newElement(QName qname);

    /**
     * Create a new Element with the given QName as a child of the given Base.
     *
     * @param qname The XML QName of the element to create
     * @param parent The element or document to which the new element should be added as a child
     * @return A newly created element
     */
     T newElement(QName qname, Base parent);

    /**
     * Create a new extension element with the given QName.
     *
     * @param qname The XML QName of the element to create
     * @return A newly created element
     */
     T newExtensionElement(QName qname);

    /**
     * Create a new extension element with the given QName as a child of the given Base.
     *
     * @param qname The XML QName of the element to create
     * @param parent The element or document to which the new element should be added as a child
     * @return A newly created element
     */
     T newExtensionElement(QName qname, Base parent);

    /**
     * Create a new Control element. The app:control element is introduced by the Atom Publishing Protocol as a means of
     * allowing publishing clients to provide metadata to a server affecting the way an entry is published. The control
     * element SHOULD only ever appear as a child of the atom:entry and MUST only ever appear once.
     *
     * @return A newly app:control element
     */
    Control newControl();

    /**
     * Create a new Control element as a child of the given Element.
     *
     * @param parent The element to which the new Control element should be added as a child
     * @return A newly app:control element
     */
    Control newControl(Element parent);

    /**
     * Create a new Div element.
     *
     * @return A newly xhtml:div element
     */
    Div newDiv();

    /**
     * Create a new Div element as a child of the given Base.
     *
     * @param parent The element or document to which the new XHTML div element should be added as a child
     * @return A newly xhtml:div element
     */
    Div newDiv(Base parent);

    /**
     * Registers an extension factory for this Factory instance only
     *
     * @param extensionFactory An ExtensionFactory instance
     */
    Factory registerExtension(ExtensionFactory extensionFactory);

    /**
     * Create a new Categories element. The app:categories element is introduced by the Atom Publishing Protocol as a
     * means of providing a listing of atom:category's that can be used by entries in a collection.
     *
     * @return A newly app:categories element
     */
    Categories newCategories();

    /**
     * Create a new Categories element. The app:categories element is introduced by the Atom Publishing Protocol as a
     * means of providing a listing of atom:category's that can be used by entries in a collection.
     *
     * @param parent The element or document to which the new Categories element should be added as a child
     * @return A newly app:categories element
     */
    Categories newCategories(Base parent);

    /**
     * Generate a new random UUID URI
     */
    String newUuidUri();

    /**
     * Get the Abdera instance for this factory
     */
    Abdera getAbdera();

    /**
     * Get the mime type for the specified extension element / document
     */
     String getMimeType(T base);

    /**
     * Returns a listing of extension factories registered
     */
    String[] listExtensionFactories();
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy