/*
* Tigase Jabber/XMPP Server
* Copyright (C) 2004-2012 "Artur Hefczyc" <artur.hefczyc@tigase.org>
*
* 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, version 3 of the License.
*
* 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. Look for COPYING file in the top folder.
* If not, see http://www.gnu.org/licenses/.
*
* $Rev$
* Last modified by $Author$
* $Date$
*/
package tigase.db.comp;
//~--- non-JDK imports --------------------------------------------------------
import tigase.server.Packet;
import tigase.xml.Element;
//~--- interfaces -------------------------------------------------------------
/**
* The interface defines a contract for a repository item handled by
* ComponentRepository implementation.
* Created: Oct 3, 2009 2:35:58 PM
*
* @author <a href="mailto:artur.hefczyc@tigase.org">Artur Hefczyc</a>
* @version $Rev$
*/
public interface RepositoryItem {
/**
* The method is used for handling ad-hoc commands. The 'empty' ad-hoc command
* packet is provided and the Item should fill it with fields for the user.
* @param packet with empty ad-hoc command to fill with fields
*/
void addCommandFields(Packet packet);
//~--- get methods ----------------------------------------------------------
/**
* Returns an array with the Item administrators, that is people IDs who can manage,
* configure and control less critical elements of the Item, like changing less critical
* configuration settings. Administrators cannot remove the Item or change the owner or
* add/remove administrators.
* @return an array with the Item administrators IDs.
*/
String[] getAdmins();
/**
* Returns a unique key for the item in the repository. All items are stored in
* a memory cache which is a Map. And the key returned by this method is the
* item identifier in the Map.
* @return an Item key.
*/
String getKey();
/**
* Returns the owner ID of the item. This is used for a management to allow fine tuned
* service administration with roles assigned to specific elements and items. Normally only
* owner can perform some critical actions like removing the item, managing item
* administrators or changing owner.<p/>
* There can be only one Item owner.
* @return an ID of the Item owner.
*/
String getOwner();
//~--- methods --------------------------------------------------------------
/**
* The method used for handling ad-hoc commands. After a user fills all given field
* the ad-hoc command packet is passed back to the item to initialize it with
* data. Similar method to initFromElement(), but the data source is different.
* @param packet with ad-hoc command filled by the user.
*/
void initFromCommand(Packet packet);
/**
* The item can be also initialized from a more complex repositories: XML repository
* or SQL database. In such a case more complex representation is prefered, possibly
* carrying more information about the item. The method is called to initialize the
* item with a data parsed from an XML representation of the repository.
*
* @param elem XML Element with all the item initialization data.
*/
void initFromElement(Element elem);
/**
* The item can be initialized based on the data loaded from a configuration file.
* In such a case the item representation is usually very simplified as a list of
* parameters separated by a marker. Please note, usually each item is separated
* from another with a comma, therefore do not use a comma in the item property
* string. Double collon is commonly used alternative.
*
* @param propString is a property string to initialize the RepositoryItem.
*/
void initFromPropertyString(String propString);
//~--- get methods ----------------------------------------------------------
/**
* The method checks whether the given id is one of the administrators set for the Item.
* @param id is an ID of a person for which we check access permissions.
* @return true of the given ID is on a list of administrators and false otherwise.
*/
boolean isAdmin(String id);
/**
* The method checks whether the person with given ID is the Item owner.
* @param id is an ID of a person for whom we check access permissions.
* @return true of the given ID is on the Item owner and false otherwise.
*/
boolean isOwner(String id);
//~--- set methods ----------------------------------------------------------
/**
* Returns an array with the Item administrators, that is people IDs who can manage,
* configure and control less critical elements of the Item, like changing less critical
* configuration settings. Administrators cannot remove the Item or change the owner or
* add/remove administrators.
*
* @param admins is an array with the Item administrators IDs to set for the Item.
*/
void setAdmins(String[] admins);
/**
* Set the Item owner. This is used for a management to allow fine tuned
* service administration with roles assigned to specific elements and items. Normally only
* owner can perform some critical actions like removing the item, managing item
* administrators or changing owner.<p/>
* There can be only one Item owner.
* @param owner is the Item owner ID.
*/
void setOwner(String owner);
//~--- methods --------------------------------------------------------------
/**
* Item data can be stored in a more comlex form than a simple property string.
* The XML Element can contain much more detailed information about the element
* than the simplified form and is used to store the repository item in more advanced
* repositories then just property file. XML repository or SQL database can keep many
* records for repository item with as much detailed information as needed.
*
* @return an XML Element with all the item initialization data.
*/
Element toElement();
/**
* The item can be initialized based on the data loaded from a configuration file.
* In such a case the item representation is usually very simplified as a list of
* parameters separated by a marker. Please note, usually each item is separated
* from another with a comma, therefore do not use a comma in the item property
* string. Double collon is commonly used alternative.
*
* @return a property string representing the repository item in a simplified form.
*/
String toPropertyString();
}
//~ Formatted in Sun Code Convention
//~ Formatted by Jindent --- http://www.jindent.com