001/*
002 *  Copyright 2013 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.plugins.cart;
017
018import javax.jcr.Node;
019
020import org.apache.avalon.framework.service.ServiceException;
021import org.apache.avalon.framework.service.ServiceManager;
022
023import org.ametys.cms.contenttype.ContentTypeExtensionPoint;
024import org.ametys.cms.contenttype.ContentTypesHelper;
025import org.ametys.cms.model.ModelAwareBasicTypesExtensionPoint;
026import org.ametys.core.group.GroupManager;
027import org.ametys.plugins.repository.AmetysObjectFactory;
028import org.ametys.plugins.repository.AmetysObjectResolver;
029import org.ametys.plugins.repository.AmetysRepositoryException;
030import org.ametys.plugins.repository.RepositoryConstants;
031import org.ametys.plugins.repository.jcr.DefaultAmetysObjectFactory;
032import org.ametys.plugins.repository.model.RepeaterDefinition;
033import org.ametys.runtime.model.ElementDefinition;
034import org.ametys.runtime.model.Model;
035import org.ametys.runtime.model.exception.BadItemTypeException;
036import org.ametys.runtime.model.exception.UnknownTypeException;
037import org.ametys.runtime.model.type.ModelItemTypeConstants;
038
039/**
040 * {@link AmetysObjectFactory} for handling {@link Cart}s.
041 */
042public class CartFactory extends DefaultAmetysObjectFactory
043{
044    /** JCR nodetype for cart */
045    public static final String CART_NODETYPE = RepositoryConstants.NAMESPACE_PREFIX + ":cart";
046    
047    /** Group manager */
048    protected GroupManager _groupManager;
049    
050    /** Content type extension point */
051    protected ContentTypeExtensionPoint _cTypeEP;
052    /** Helper for content types */
053    protected ContentTypesHelper _contentTypesHelper;
054    /** Extension point for content types */
055    protected ContentTypeExtensionPoint _contentTypeEP;
056
057    private Model _model;
058    
059    @Override
060    public void service(ServiceManager manager) throws ServiceException
061    {
062        super.service(manager);
063        _cTypeEP = (ContentTypeExtensionPoint) manager.lookup(ContentTypeExtensionPoint.ROLE);
064        _contentTypesHelper = (ContentTypesHelper) manager.lookup(ContentTypesHelper.ROLE);
065        _contentTypeEP = (ContentTypeExtensionPoint) manager.lookup(ContentTypeExtensionPoint.ROLE);
066        _groupManager = (GroupManager) manager.lookup(GroupManager.ROLE);
067    }
068    
069    @Override
070    public Cart getAmetysObject(Node node, String parentPath) throws AmetysRepositoryException
071    {
072        return new Cart(node, parentPath, this);
073    }
074    
075    AmetysObjectResolver getResolver()
076    {
077        return _resolver;
078    }
079    
080    /**
081     * Group manager getter.
082     * @return The group manager
083     */
084    GroupManager _getGroupsManager()
085    {
086        return _groupManager;
087    }
088    
089    /**
090     * Getter for the content types helper
091     * @return The helper for content types
092     */
093    ContentTypesHelper _getContentTypesHelper()
094    {
095        return _contentTypesHelper;
096    }
097    
098    /**
099     * Getter for the content types helper
100     * @return The helper for content types
101     */
102    ContentTypeExtensionPoint _getContentTypeEP()
103    {
104        return _contentTypeEP;
105    }
106
107    /**
108     * Retrieves the query model
109     * @return the query model
110     */
111    public Model getModel()
112    {
113        if (_model == null)
114        {
115            _model = _createQueryModel();
116        }
117        return _model;
118    }
119    
120    /**
121     * Creates the query model
122     * @return the created model
123     * @throws AmetysRepositoryException if an error occurs.
124     */
125    protected Model _createQueryModel() throws AmetysRepositoryException
126    {
127        try
128        {
129            String role = ModelAwareBasicTypesExtensionPoint.ROLE;
130
131            return Model.of(Cart.class.getName(), Cart.class.getName(),
132                    ElementDefinition.of(Cart.TITLE, false, ModelItemTypeConstants.STRING_TYPE_ID, role),
133                    ElementDefinition.of(Cart.DESCRIPTION, false, ModelItemTypeConstants.STRING_TYPE_ID, role),
134                    ElementDefinition.of(Cart.AUTHOR, false, org.ametys.cms.data.type.ModelItemTypeConstants.USER_ELEMENT_TYPE_ID, role),
135                    ElementDefinition.of(Cart.CONTENT_CART_ELEMENTS, true, ModelItemTypeConstants.STRING_TYPE_ID, role),
136                    ElementDefinition.of(Cart.RESOURCE_CART_ELEMENTS, true, ModelItemTypeConstants.STRING_TYPE_ID, role),
137                    ElementDefinition.of(Cart.QUERIES_FROM_DIRECTORY_CART_ELEMENTS, true, ModelItemTypeConstants.STRING_TYPE_ID, role),
138                    RepeaterDefinition.of(Cart.QUERIES_CART_ELEMENTS, role,
139                        ElementDefinition.of(Cart.QUERY_ID_PROPERTY, false, ModelItemTypeConstants.STRING_TYPE_ID, role),
140                        ElementDefinition.of(Cart.QUERY_DESCRIPTION_PROPERTY, false, ModelItemTypeConstants.STRING_TYPE_ID, role),
141                        ElementDefinition.of(Cart.QUERY_AUTHOR_PROPERTY, false, org.ametys.cms.data.type.ModelItemTypeConstants.USER_ELEMENT_TYPE_ID, role),
142                        ElementDefinition.of(Cart.QUERY_TITLE_PROPERTY, false, ModelItemTypeConstants.STRING_TYPE_ID, role),
143                        ElementDefinition.of(Cart.QUERY_DATE_PROPERTY, false, ModelItemTypeConstants.DATETIME_TYPE_ID, role)));
144        }
145        catch (UnknownTypeException | BadItemTypeException | ServiceException e)
146        {
147            throw new AmetysRepositoryException("An error occurred while create the query model", e);
148        }
149    }
150}