* @author Maxence Lange * * @license GNU AGPL version 3 or any later version * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ namespace OCP\FullTextSearch\Model; /** * Class IIndexDocument * * This is one of the main class of the FullTextSearch, used as a data transfer * object. An IIndexDocument is created to manage documents around FullTextSearch, * during an index and during a search. * The uniqueness of an IIndexDocument is made by the Id of the Content Provider * and the Id of the original document within the Content Provider. * * We will call original document the source from which the IIndexDocument is * generated. As an example, an original document can be a file, a mail, ... * * @since 15.0.0 */ interface IIndexDocument { public const NOT_ENCODED = 0; public const ENCODED_BASE64 = 1; /** * Returns the Id of the original document. * * @since 15.0.0 * * @return string */ public function getId(): string; /** * Returns the Id of the provider. * * @since 15.0.0 * * @return string */ public function getProviderId(): string; /** * Set the Index related to the IIndexDocument. * * @see IIndex * * @since 15.0.0 * * @param IIndex $index * * @return IIndexDocument */ public function setIndex(IIndex $index): IIndexDocument; /** * Get the Index. * * @since 15.0.0 * * @return IIndex */ public function getIndex(): IIndex; /** * return if Index is defined. * * @since 16.0.0 * * @return bool */ public function hasIndex(): bool; /** * Set the modified time of the original document. * * @since 15.0.0 * * @param int $modifiedTime * * @return IIndexDocument */ public function setModifiedTime(int $modifiedTime): IIndexDocument; /** * Get the modified time of the original document. * * @since 15.0.0 * * @return int */ public function getModifiedTime(): int; /** * Check if the original document of the IIndexDocument is older than $time. * * @since 15.0.0 * * @param int $time * * @return bool */ public function isOlderThan(int $time): bool; /** * Set the read rights of the original document using a IDocumentAccess. * * @see IDocumentAccess * * @since 15.0.0 * * @param IDocumentAccess $access * * @return $this */ public function setAccess(IDocumentAccess $access): IIndexDocument; /** * Get the IDocumentAccess related to the original document. * * @since 15.0.0 * * @return IDocumentAccess */ public function getAccess(): IDocumentAccess; /** * Add a tag to the list. * * @since 15.0.0 * * @param string $tag * * @return IIndexDocument */ public function addTag(string $tag): IIndexDocument; /** * Set the list of tags assigned to the original document. * * @since 15.0.0 * * @param array $tags * * @return IIndexDocument */ public function setTags(array $tags): IIndexDocument; /** * Get the list of tags assigned to the original document. * * @since 15.0.0 * * @return array */ public function getTags(): array; /** * Add a meta tag to the list. * * @since 15.0.0 * * @param string $tag * * @return IIndexDocument */ public function addMetaTag(string $tag): IIndexDocument; /** * Set the list of meta tags assigned to the original document. * * @since 15.0.0 * * @param array $tags * * @return IIndexDocument */ public function setMetaTags(array $tags): IIndexDocument; /** * Get the list of meta tags assigned to the original document. * * @since 15.0.0 * * @return array */ public function getMetaTags(): array; /** * Add a sub tag to the list. * * @since 15.0.0 * * @param string $sub * @param string $tag * * @return IIndexDocument */ public function addSubTag(string $sub, string $tag): IIndexDocument; /** * Set the list of sub tags assigned to the original document. * * @since 15.0.0 * * @param array $tags * * @return IIndexDocument */ public function setSubTags(array $tags): IIndexDocument; /** * Get the list of sub tags assigned to the original document. * If $formatted is true, the result will be formatted in a one * dimensional array. * * @since 15.0.0 * * @param bool $formatted * * @return array */ public function getSubTags(bool $formatted = false): array; /** * Set the source of the original document. * * @since 15.0.0 * * @param string $source * * @return IIndexDocument */ public function setSource(string $source): IIndexDocument; /** * Get the source of the original document. * * @since 15.0.0 * * @return string */ public function getSource(): string; /** * Set the title of the original document. * * @since 15.0.0 * * @param string $title * * @return IIndexDocument */ public function setTitle(string $title): IIndexDocument; /** * Get the title of the original document. * * @since 15.0.0 * * @return string */ public function getTitle(): string; /** * Set the content of the document. * $encoded can be NOT_ENCODED or ENCODED_BASE64 if the content is raw or * encoded in base64. * * @since 15.0.0 * * @param string $content * @param int $encoded * * @return IIndexDocument */ public function setContent(string $content, int $encoded = 0): IIndexDocument; /** * Get the content of the original document. * * @since 15.0.0 * * @return string */ public function getContent(): string; /** * Returns the type of the encoding on the content. * * @since 15.0.0 * * @return int */ public function isContentEncoded(): int; /** * Return the size of the content. * * @since 15.0.0 * * @return int */ public function getContentSize(): int; /** * Generate an hash, based on the content of the original document. * * @since 15.0.0 * * @return IIndexDocument */ public function initHash(): IIndexDocument; /** * Set the hash of the original document. * * @since 15.0.0 * * @param string $hash * * @return IIndexDocument */ public function setHash(string $hash): IIndexDocument; /** * Get the hash of the original document. * * @since 15.0.0 * * @return string */ public function getHash(): string; /** * Add a part, identified by a string, and its content. * * It is strongly advised to use alphanumerical chars with no space in the * $part string. * * @since 15.0.0 * * @param string $part * @param string $content * * @return IIndexDocument */ public function addPart(string $part, string $content): IIndexDocument; /** * Set all parts and their content. * * @since 15.0.0 * * @param array $parts * * @return IIndexDocument */ public function setParts(array $parts): IIndexDocument; /** * Get all parts of the IIndexDocument. * * @since 15.0.0 * * @return array */ public function getParts(): array; /** * Add a link, usable by the frontend. * * @since 15.0.0 * * @param string $link * * @return IIndexDocument */ public function setLink(string $link): IIndexDocument; /** * Get the link. * * @since 15.0.0 * * @return string */ public function getLink(): string; /** * Set more information that couldn't be set using other method. * * @since 15.0.0 * * @param array $more * * @return IIndexDocument */ public function setMore(array $more): IIndexDocument; /** * Get more information. * * @since 15.0.0 * * @return array */ public function getMore(): array; /** * Add some excerpt of the content of the original document, usually based * on the search request. * * @since 16.0.0 * * @param string $source * @param string $excerpt * * @return IIndexDocument */ public function addExcerpt(string $source, string $excerpt): IIndexDocument; /** * Set all excerpts of the content of the original document. * * @since 16.0.0 * * @param array $excerpts * * @return IIndexDocument */ public function setExcerpts(array $excerpts): IIndexDocument; /** * Get all excerpts of the content of the original document. * * @since 15.0.0 * * @return array */ public function getExcerpts(): array; /** * Set the score to the result assigned to this document during a search * request. * * @since 15.0.0 * * @param string $score * * @return IIndexDocument */ public function setScore(string $score): IIndexDocument; /** * Get the score. * * @since 15.0.0 * * @return string */ public function getScore(): string; /** * Set some information about the original document that will be available * to the front-end when displaying search result. (as string) * Because this information will not be indexed, this method can also be * used to manage some data while filling the IIndexDocument before its * indexing. * * @since 15.0.0 * * @param string $info * @param string $value * * @return IIndexDocument */ public function setInfo(string $info, string $value): IIndexDocument; /** * Get an information about a document. (string) * * @since 15.0.0 * * @param string $info * @param string $default * * @return string */ public function getInfo(string $info, string $default = ''): string; /** * Set some information about the original document that will be available * to the front-end when displaying search result. (as array) * Because this information will not be indexed, this method can also be * used to manage some data while filling the IIndexDocument before its * indexing. * * @since 15.0.0 * * @param string $info * @param array $value * * @return IIndexDocument */ public function setInfoArray(string $info, array $value): IIndexDocument; /** * Get an information about a document. (array) * * @since 15.0.0 * * @param string $info * @param array $default * * @return array */ public function getInfoArray(string $info, array $default = []): array; /** * Set some information about the original document that will be available * to the front-end when displaying search result. (as int) * Because this information will not be indexed, this method can also be * used to manage some data while filling the IIndexDocument before its * indexing. * * @since 15.0.0 * * @param string $info * @param int $value * * @return IIndexDocument */ public function setInfoInt(string $info, int $value): IIndexDocument; /** * Get an information about a document. (int) * * @since 15.0.0 * * @param string $info * @param int $default * * @return int */ public function getInfoInt(string $info, int $default = 0): int; /** * Set some information about the original document that will be available * to the front-end when displaying search result. (as bool) * Because this information will not be indexed, this method can also be * used to manage some data while filling the IIndexDocument before its * indexing. * * @since 15.0.0 * * @param string $info * @param bool $value * * @return IIndexDocument */ public function setInfoBool(string $info, bool $value): IIndexDocument; /** * Get an information about a document. (bool) * * @since 15.0.0 * * @param string $info * @param bool $default * * @return bool */ public function getInfoBool(string $info, bool $default = false): bool; /** * Get all info. * * @since 15.0.0 * * @return array */ public function getInfoAll(): array; }