/*
 * Copyright (C) 2005-2010 Alfresco Software Limited.
 *
 * This file is part of Alfresco
 *
 * Alfresco is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * Alfresco 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 Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * along with Alfresco. If not, see 
* The site short name will be used to uniquely identify the site so it must be unique. * * @param sitePreset site preset * @param shortName site short name * @param title site title * @param description site description * @param visibility visibility of the site (public|moderated|private) * @return Site the created site */ public Site createSite(String sitePreset, String shortName, String title, String description, String visibility) { ParameterCheck.mandatoryString("visibility", visibility); SiteVisibility siteVisibility = SiteVisibility.valueOf(visibility); SiteInfo siteInfo = this.siteService.createSite(sitePreset, shortName, title, description, siteVisibility); return new Site(siteInfo, this.serviceRegistry, this.siteService, getScope()); } /** * Create a new site. *
     * The site short name will be used to uniquely identify the site so it must be unique.
     * 
     * @param sitePreset    site preset
     * @param shortName     site short name
     * @param title         site title
     * @param description   site description
     * @param visibility    visibility of the site (public|moderated|private)
     * @param siteType      qname of site type to create
     * @return Site         the created site
     */
    public Site createSite(String sitePreset, String shortName, String title, String description, String visibility, String siteType)
    {     	
        ParameterCheck.mandatoryString("visibility", visibility);
        SiteVisibility siteVisibility = SiteVisibility.valueOf(visibility);
        QName siteTypeQName = QName.createQName(siteType);
        SiteInfo siteInfo = this.siteService.createSite(sitePreset, shortName, title, description, siteVisibility, siteTypeQName);
        return new Site(siteInfo, this.serviceRegistry, this.siteService, getScope());
    }
    
    /**
     * This method checks if the currently authenticated user has permission to create sites.
     * 
     * @return true if the current user is a Contributor to "Sites" node, else false.
     * @since 3.4
     */
    public boolean hasCreateSitePermissions()
    {
    	return siteService.hasCreateSitePermissions();
    }
    
    /**
     * Determines if the current user is a manager of the given site.
     * 
     * @param siteId The short name of the site to check
     * @return true if the current user is a manager of the given site
     */
    public boolean isSiteManager(String siteId)
    {
        String role = siteService.getMembersRole(siteId, AuthenticationUtil.getFullyAuthenticatedUser());
        return (SiteServiceImpl.SITE_MANAGER.equals(role));
    }
    
    /**
     * List the sites available in the repository.  The returned list can optionally be filtered by name and site
     * preset.
     * 
* If no filters are specified then all the available sites are returned. * * @param filter inclusion filter for returned sites. Only sites whose cm:name OR cm:title * OR cm:description CONTAIN the filter string will be returned. * @param sitePresetFilter site preset filter * @return Site[] a list of the site filtered as appropriate * * @see SiteService#findSites(String, String, int) for a description of the limitations of this method. */ public Site[] listSites(String filter, String sitePresetFilter) { return listSites(filter, sitePresetFilter, 0); } /** * List the sites available in the repository. The returned list can optionally be filtered by name and site * preset. *
* If no filters are specified then all the available sites are returned. * * @param filter inclusion filter for returned sites. Only sites whose cm:name OR cm:title * OR cm:description CONTAIN the filter string will be returned. * @param sitePresetFilter site preset filter * @param size max results size crop if >0 * * @return Site[] a list of the site filtered as appropriate * * @see SiteService#findSites(String, String, int) for a description of the limitations of this method. */ public Site[] listSites(String filter, String sitePresetFilter, int size) { List
     * Returns null if the site does not exist.
     * 
     * @param shortName     short name of the site
     * @return Site         the site, null if does not exist
     */
    public Site getSite(String shortName)
    {
        Site site = null;
        SiteInfo siteInfo = this.siteService.getSite(shortName);
        if (siteInfo != null)
        {
            site = new Site(siteInfo, this.serviceRegistry, this.siteService, getScope());
        }
        return site;
    }
    
    /**
     * Returns an array of all the roles that can be assigned to a member of a site.
     * 
     * @return  String[]    roles available to assign to a member of a site
     */
    public String[] listSiteRoles()
    {
        List