/* * Jitsi, the OpenSource Java VoIP and Instant Messaging client. * * Copyright @ 2015 Atlassian Pty Ltd * * 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 net.java.sip.communicator.service.history; import java.io.*; import java.util.*; import net.java.sip.communicator.service.history.records.*; /** * This service provides the functionality to store history records. The records * are called <tt>HistoryRecord</tt>s and are grouped by ID. * * The ID may be used to set hierarchical structure. In a typical usage one may * set the first string to be the userID, and the second - the service name. * * @author Alexander Pelov */ public interface HistoryService { /** * Property and values used to be set in configuration * Used in implementation to cache every opened history document * or not to cache them and to access them on every read */ public static String CACHE_ENABLED_PROPERTY = "net.java.sip.communicator.service.history.CACHE_ENABLED"; /** * Date format used in the XML history database. */ public static final String DATE_FORMAT = "yyyy-MM-dd'T'HH:mm:ss.SSSZ"; /** * Returns the IDs of all existing histories. * * @return An iterator to a list of IDs. */ public Iterator<HistoryID> getExistingIDs(); /** * Returns the history associated with this ID. * * @param id * The ID of the history. * @return Returns the history with this ID. * @throws IllegalArgumentException * Thrown if there is no such history. */ public History getHistory(HistoryID id) throws IllegalArgumentException; /** * Enumerates existing histories. * @param rawid the start of the HistoryID of all the histories that will be * returned. * @return list of histories which HistoryID starts with <tt>rawid</tt>. * @throws IllegalArgumentException if the <tt>rawid</tt> contains ids * which are missing in current history. */ public List<HistoryID> getExistingHistories(String[] rawid) throws IllegalArgumentException; /** * Tests if a history with the given ID exists and is loaded. * * @param id * The ID to test. * @return True if a history with this ID exists. False otherwise. */ public boolean isHistoryExisting(HistoryID id); /** * Creates a new history for this ID. * * @param id * The ID of the history to be created. * @param recordStructure * The structure of the data. * @return Returns the history with this ID. * @throws IllegalArgumentException * Thrown if such history already exists. * @throws IOException * Thrown if the history could not be created due to a IO error. */ public History createHistory(HistoryID id, HistoryRecordStructure recordStructure) throws IllegalArgumentException, IOException; /** * Permanently removes local stored History * * @param id HistoryID * @throws IOException * Thrown if the history could not be removed due to a IO error. */ public void purgeLocallyStoredHistory(HistoryID id) throws IOException; /** * Clears locally(in memory) cached histories. */ public void purgeLocallyCachedHistories(); /** * Moves the content of oldId history to the content of the newId. * * @param oldId id of the old and existing history * @param newId the place where content of oldId will be moved * @throws java.io.IOException problem moving content to newId. */ public void moveHistory(HistoryID oldId, HistoryID newId) throws IOException; /** * Checks whether a history is created and stored. * @param id the history to check * @return whether a history is created and stored. */ public boolean isHistoryCreated(HistoryID id); }