/*
* Copyright (C) 2003-2007 eXo Platform SAS.
*
* 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see<http://www.gnu.org/licenses/>.
*/
package org.exoplatform.services.cms.voting;
import javax.jcr.Node;
/**
* Created by The eXo Platform SAS
* Author : Pham Xuan Hoa
* hoa.pham@exoplatform.com
* Jan 17, 2007
*/
public interface VotingService {
/**
* Voting the document is specified by the node by giving the rate, username, and language params
* Any language belongs to this document can be voted.
* This method uses variables to store values which are voted from user for all kind languages
* of this document
* @param document The node document for voting
* @param rate The number rate for voting
* @param userName The username of current user is voting.
* Can not be <code>null</code>
* @param language The language of this document for voting
* Can not be <code>null</code>
* @see Node
* @throws Exception
*/
public void vote(Node document, double rate, String userName, String language) throws Exception;
/**
* Gets total voting for all kind languages of this document is specified by node
* @param node The node document is specified to get total voting
* @see Node
* @return
* @throws Exception
*/
public long getVoteTotal(Node node) throws Exception;
/**
* Check if user had already voted on the given node or not
*
* @param node the node that will be voted
* @param userName the name of user had voted
* @param language language of to-be-voted node
* @return
* @throws Exception
*/
public boolean isVoted(Node node, String userName, String language) throws Exception;
/**
* returns user's vote value on the given node
*
* @param node the node that will be voted
* @param userName the name of user had voted
* @param language language of to-be-voted node
* @return
* @throws Exception
*/
public double getVoteValueOfUser(Node node, String userName, String language) throws Exception;
}