001/*
002 *  Copyright 2010 Anyware Services
003 *
004 *  Licensed under the Apache License, Version 2.0 (the "License");
005 *  you may not use this file except in compliance with the License.
006 *  You may obtain a copy of the License at
007 *
008 *      http://www.apache.org/licenses/LICENSE-2.0
009 *
010 *  Unless required by applicable law or agreed to in writing, software
011 *  distributed under the License is distributed on an "AS IS" BASIS,
012 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 *  See the License for the specific language governing permissions and
014 *  limitations under the License.
015 */
016package org.ametys.web.repository.page.jcr;
017
018import javax.jcr.Node;
019import javax.jcr.RepositoryException;
020
021import org.apache.avalon.framework.service.ServiceException;
022import org.apache.avalon.framework.service.ServiceManager;
023
024import org.ametys.plugins.repository.AmetysObject;
025import org.ametys.plugins.repository.AmetysObjectFactory;
026import org.ametys.plugins.repository.AmetysRepositoryException;
027import org.ametys.plugins.repository.jcr.DefaultTraversableAmetysObjectFactory;
028import org.ametys.web.data.type.ModelItemTypeExtensionPoint;
029import org.ametys.web.parameters.view.ViewParametersManager;
030
031/**
032 * {@link AmetysObjectFactory} for creating {@link AbstractSitemapElement}.
033 */
034public abstract class AbstractSitemapElementFactory extends DefaultTraversableAmetysObjectFactory
035{
036    private ViewParametersManager _viewParametersManager;
037    private ModelItemTypeExtensionPoint _pageDataTypeExtensionPoint;
038    
039    @Override
040    public void service(ServiceManager serviceManager) throws ServiceException
041    {
042        super.service(serviceManager);
043        _viewParametersManager = (ViewParametersManager) serviceManager.lookup(ViewParametersManager.ROLE);
044        _pageDataTypeExtensionPoint = (ModelItemTypeExtensionPoint) serviceManager.lookup(ModelItemTypeExtensionPoint.ROLE_PAGE_DATA);
045    }
046    
047    /**
048     * Resolves an {@link AmetysObject} from a node.
049     * @param <A> the actual type of {@link AmetysObject}.
050     * @param node the node.
051     * @return the {@link AmetysObject} resolved.
052     * @throws AmetysRepositoryException if an error occurs.
053     * @throws RepositoryException if a JCR error occurs.
054     */
055    public <A extends AmetysObject> A resolveAmetysObject(Node node) throws AmetysRepositoryException, RepositoryException
056    {
057        return _resolver.<A>resolve(node, false);
058    }
059
060    /**
061     * Retrieves the extension point of page data types
062     * @return the extension point of page data types
063     */
064    public ModelItemTypeExtensionPoint getPageDataTypeExtensionPoint()
065    {
066        return _pageDataTypeExtensionPoint;
067    }
068    
069    /**
070     * Get the view parameters manager
071     * @return the view parameters manager
072     */
073    public ViewParametersManager getViewParametersManager()
074    {
075        return _viewParametersManager;
076    }
077}