/*
* 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.i18n;
import java.util.List;
import java.util.Map;
import javax.jcr.Node;
import javax.jcr.Value;
/**
* Author : Hung Nguyen Quang
* nguyenkequanghung@yahoo.com
*/
public interface MultiLanguageService {
/**
* Node name as LANGUAGES
*/
final static public String LANGUAGES = "languages";
/**
* Property name as EXO_LANGUAGE
*/
final static public String EXO_LANGUAGE = "exo:language";
/**
* Node name as COMMENTS
*/
final static public String COMMENTS = "comments";
/**
* Get list of value in exo:language property in child node of current node
* @param node current node
* @return value of exo:language property
*/
public List<String> getSupportedLanguages(Node node) throws Exception;
/**
* Set data for current node
* @param node current node
* @param language language name
* @param repositoryName repository name
* @throws Exception
*/
public void setDefault(Node node, String language, String repositoryName) throws Exception;
/**
* Add new language for current node
* Set value of property in inputs Map to new language node
* @param node current node
* @param inputs Map includes key and value of property
* @param language language name
* @param isDefault flag to define default language is used or not
* @throws Exception
*/
public void addLanguage(Node node, Map inputs, String language, boolean isDefault) throws Exception;
/**
* Add new language for current node
* Processing for some new added node
* Set value of property in inputs Map to new language node
* Processing for nodeType in child node of current node and some new added node
* @param node current node
* @param inputs Map includes key and value of property
* @param language language name
* @param isDefault flag to define default language is used or not
* @param nodeType node name
* @throws Exception
*/
public void addLanguage(Node node, Map inputs, String language, boolean isDefault, String nodeType) throws Exception;
/**
* Add newLanguageNode node, then add new file to newLanguageNode
* @param node current node
* @param fileName name of file
* @param value value of file
* @param mimeType mimiType
* @param language language name
* @param repositoryName repository name
* @param isDefault flag to use new language or default language
* @throws Exception
*/
public void addFileLanguage(Node node,
String fileName,
Value value,
String mimeType,
String language,
String repositoryName,
boolean isDefault) throws Exception;
/**
* Add newLanguageNode node, then set property in mapping to newLanguageNode
* @param node current node
* @param language language name
* @param mappings Map includes property and value
* @param isDefault flag to use new language or default language
* @throws Exception
*/
public void addFileLanguage(Node node, String language, Map mappings, boolean isDefault) throws Exception;
/**
* Add newLanguageNode node with a symlink, based on exo:language targetNode property
* @param node current node
* @param translationNode target translation node
* @throws Exception
*/
public void addLinkedLanguage(Node node, Node translationNode) throws Exception;
/**
* Add newLanguageNode node with a symlink, based on exo:language targetNode property
* @param node current node
* @param translationNode target translation node
* @param overrideExistence true if override existing symlink pointing to other translation, else throw ItemExistsException
* @throws Exception
*/
public void addLinkedLanguage(Node node, Node translationNode, boolean overrideExistence) throws Exception;
/**
* Add new translation for one node and synchronize all related translation nodes.
*
* @param selectedNode Selected Node
* @param newTranslationNode New Translation Node
* @throws Exception
*/
public void addSynchronizedLinkedLanguage(Node selectedNode, Node newTranslationNode) throws Exception;
/**
* Add new language node as a folder
* @param node
* @param inputs
* @param language
* @param isDefault
* @param nodeType
* @param repositoryName
* @throws Exception
*/
public void addFolderLanguage(Node node,
Map inputs,
String language,
boolean isDefault,
String nodeType,
String repositoryName) throws Exception;
/**
* Get value of property exo:language in current node
* @param node current node
* @return value of exo:language property
*/
public String getDefault(Node node) throws Exception;
/**
* Get node following relative path = "languages/" + language
* @param node
* @param language
* @return node if exist node with relative path = "languages/" + language with current node
* null if not exist
*/
public Node getLanguage(Node node, String language) throws Exception;
}