/* * Copyright (C) 2005-2007 Alfresco Software Limited. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * As a special exception to the terms and conditions of version 2.0 of * the GPL, you may redistribute this Program in connection with Free/Libre * and Open Source Software ("FLOSS") applications as described in Alfresco's * FLOSS exception. You should have recieved a copy of the text describing * the FLOSS exception, and it is also available here: * http://www.alfresco.com/legal/licensing" */ package org.alfresco.web.scripts; import java.util.List; import org.alfresco.model.ContentModel; import org.alfresco.repo.security.authentication.AuthenticationUtil; import org.alfresco.repo.transaction.TransactionUtil; import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.NodeService; import org.alfresco.service.cmr.repository.StoreRef; import org.alfresco.service.cmr.search.SearchService; import org.alfresco.service.cmr.security.PersonService; import org.alfresco.service.namespace.NamespaceService; import org.alfresco.service.transaction.TransactionService; import org.alfresco.util.AbstractLifecycleBean; import org.springframework.beans.BeansException; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; import org.springframework.context.ApplicationEvent; import org.springframework.context.ApplicationListener; /** * Provision of Repository Context * * @author davidc */ public class WebScriptContext implements ApplicationContextAware, ApplicationListener { private ProcessorLifecycle lifecycle = new ProcessorLifecycle(); // dependencies private TransactionService transactionService; private NamespaceService namespaceService; private SearchService searchService; private NodeService nodeService; private PersonService personService; // company home private StoreRef companyHomeStore; private String companyHomePath; private NodeRef companyHome; /** * Sets the Company Home Store * * @param companyHomeStore */ public void setCompanyHomeStore(String companyHomeStore) { this.companyHomeStore = new StoreRef(companyHomeStore); } /** * Sets the Company Home Path * * @param companyHomePath */ public void setCompanyHomePath(String companyHomePath) { this.companyHomePath = companyHomePath; } /** * Sets the transaction service * * @param transactionService */ public void setTransactionService(TransactionService transactionService) { this.transactionService = transactionService; } /** * Sets the namespace service * * @param namespaceService */ public void setNamespaceService(NamespaceService namespaceService) { this.namespaceService = namespaceService; } /** * Sets the search service * * @param searchService */ public void setSearchService(SearchService searchService) { this.searchService = searchService; } /** * Sets the node service * * @param nodeService */ public void setNodeService(NodeService nodeService) { this.nodeService = nodeService; } /** * Sets the person service * * @param personService */ public void setPersonService(PersonService personService) { this.personService = personService; } /* (non-Javadoc) * @see org.springframework.context.ApplicationContextAware#setApplicationContext(org.springframework.context.ApplicationContext) */ public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { lifecycle.setApplicationContext(applicationContext); } /* (non-Javadoc) * @see org.springframework.context.ApplicationListener#onApplicationEvent(org.springframework.context.ApplicationEvent) */ public void onApplicationEvent(ApplicationEvent event) { lifecycle.onApplicationEvent(event); } /** * Hooks into Spring Application Lifecycle */ private class ProcessorLifecycle extends AbstractLifecycleBean { @Override protected void onBootstrap(ApplicationEvent event) { initContext(); } @Override protected void onShutdown(ApplicationEvent event) { } } /** * Initialise Repository Context */ protected void initContext() { TransactionUtil.executeInUserTransaction(transactionService, new TransactionUtil.TransactionWork() { @SuppressWarnings("synthetic-access") public Object doWork() throws Exception { List refs = searchService.selectNodes(nodeService.getRootNode(companyHomeStore), companyHomePath, null, namespaceService, false); if (refs.size() != 1) { throw new IllegalStateException("Invalid company home path: " + companyHomePath + " - found: " + refs.size()); } companyHome = refs.get(0); return null; } }); } /** * Gets the Company Home * * @return company home node ref */ public NodeRef getCompanyHome() { return companyHome; } /** * Gets the currently authenticated person * * @return person node ref */ public NodeRef getPerson() { NodeRef person = null; String currentUserName = AuthenticationUtil.getCurrentUserName(); if (personService.personExists(currentUserName)) { person = personService.getPerson(currentUserName); } return person; } /** * Gets the user home of the currently authenticated person * * @param person person * @return user home of person */ public NodeRef getUserHome(NodeRef person) { return (NodeRef)nodeService.getProperty(person, ContentModel.PROP_HOMEFOLDER); } }