/*
 * 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 .
 */
package org.alfresco.wcm.webproject.script;
import java.util.List;
import org.alfresco.repo.jscript.BaseScopableProcessorExtension;
import org.alfresco.repo.model.Repository;
import org.alfresco.service.ServiceRegistry;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.namespace.NamespaceService;
import org.alfresco.wcm.asset.AssetService;
import org.alfresco.wcm.sandbox.SandboxService;
import org.alfresco.wcm.webproject.WebProjectInfo;
import org.alfresco.wcm.webproject.WebProjectService;
/**
 * Script object representing the wcm web projects script object.
 * 
 * This class is the root for the script api to use wcm web projects.  
 */
public class WebProjects extends BaseScopableProcessorExtension
{
	/** Service Registry */
	private ServiceRegistry serviceRegistry;
	
    /** The web projects service */
    private WebProjectService webProjectService;
    /** The sandbox service */
    private SandboxService sandboxService;
    
    /** The asset service */
    private AssetService assetService;
    
    /** The namespace service */
    private NamespaceService namespaceService;
    
    /**
     * Sets the Service Registry
     * 
     * @param serviceRegistry
     */
    public void setServiceRegistry(ServiceRegistry serviceRegistry)
    {
    	this.serviceRegistry = serviceRegistry;
    }
    public ServiceRegistry getServiceRegistry()
    {
        return serviceRegistry;
    }
    /**
     * Set the wcm web project service 
     * 
     * @param webProjectService   the wcm web project service
     */
    public void setWebProjectService(WebProjectService webProjectService)
    {
        this.webProjectService = webProjectService;
    }
    
    public WebProjectService getWebProjectService()
    {
    	return this.webProjectService;
    }
    
    /**
     * Set the wcm sandbox service 
     * 
     * @param webProjectService   the wcm web project service
     */
    public void setSandboxService(SandboxService sandboxService)
    {
        this.sandboxService = sandboxService;
    }
    
    public SandboxService getSandboxService()
    {
    	return this.sandboxService;
    }
    
    /**
     * Set the wcm asset service 
     * 
     * @param assetService   the wcm asset service
     */
    public void setAssetService(AssetService assetService)
    {
        this.assetService = assetService;
    }
    
    public AssetService getAssetService()
    {
    	return this.assetService;
    }
    
    /**
     * Set the alfresco namespace service 
     * 
     * @param namespace service
     */
    public void setNamespaceService(NamespaceService namespaceService)
    {
        this.namespaceService = namespaceService;
    }
    
    public NamespaceService getNamespaceService()
    {
    	return this.namespaceService;
    }
    
    /**
     * create web project
     * @param name
     * @param title
     * @param description
     * @return
     */
    public WebProject createWebProject(String dnsName, String name, String title, String description )
    {
    	WebProjectInfo info = webProjectService.createWebProject(dnsName, name, title, description);    	
    	return new WebProject(this, info);
    }
    
    /**
     * Get an existing wcm web project
     * @param webProjectRef
     * @return the wcm web project
     */
    public WebProject getWebProject(String webProjectRef) 
    {	
    	WebProjectInfo info = webProjectService.getWebProject(webProjectRef);
    	
    	if(info != null){
    		WebProject retVal = new WebProject(this, info);   	
    		return retVal;
    	}
    	return null;
    }
    
    /*
     * list All Web Projects
     */
    public WebProject[] listWebProjects() 
    {
   	
    	List projects = webProjectService.listWebProjects();
    	
    	WebProject[] ret = new WebProject[projects.size()];
    	
    	int i= 0;
    	for(WebProjectInfo info : projects)
    	{
    		ret[i++] = new WebProject(this, info);   
    	}	
    	return ret;
    }
    
    /*
     * list All Web Projects which have the userName as a member
     */
    public WebProject[] listWebProjects(String userName) 
    {
   	
    	List projects = webProjectService.listWebProjects(userName);
    	
    	WebProject[] ret = new WebProject[projects.size()];
    	
    	int i= 0;
    	for(WebProjectInfo info : projects)
    	{
    		ret[i++] = new WebProject(this, info);   
    	}	
    	return ret;
    }
}