001/*
002 *  Copyright 2018 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.odf.contenttype;
017
018import java.util.Arrays;
019import java.util.Map;
020
021import org.apache.avalon.framework.service.ServiceException;
022import org.apache.avalon.framework.service.ServiceManager;
023
024import org.ametys.cms.CmsConstants;
025import org.ametys.cms.contenttype.DefaultContentType;
026import org.ametys.cms.model.restrictions.RestrictedModelItem;
027import org.ametys.cms.repository.Content;
028import org.ametys.odf.ProgramItem;
029import org.ametys.odf.course.Course;
030import org.ametys.odf.course.ShareableCourseHelper;
031import org.ametys.odf.course.ShareableCourseStatusHelper;
032import org.ametys.odf.course.ShareableCourseStatusHelper.ShareableStatus;
033import org.ametys.odf.skill.ODFSkillsHelper;
034import org.ametys.plugins.repository.AmetysRepositoryException;
035import org.ametys.plugins.repository.version.VersionableAmetysObject;
036
037/**
038 * The ODF content type
039 */
040public class ODFContentType extends DefaultContentType
041{
042    /** The ODF content type metadata manager */
043    protected ODFContentTypeMetadataManager _odfContentTypeMetadataManager;
044    
045    /** The shareable course status helper */
046    protected ShareableCourseStatusHelper _shareableCourseStatusHelper;
047    
048    /** The shareable course helper */
049    protected ShareableCourseHelper _shareableCourseHelper;
050    
051    /** The ODF skills helper */
052    protected ODFSkillsHelper _odfSkillsHelper;
053    
054    @Override
055    public void service(ServiceManager manager) throws ServiceException
056    {
057        super.service(manager);
058        _odfContentTypeMetadataManager = (ODFContentTypeMetadataManager) manager.lookup(ODFContentTypeMetadataManager.ROLE);
059        _shareableCourseStatusHelper = (ShareableCourseStatusHelper) manager.lookup(ShareableCourseStatusHelper.ROLE);
060        _shareableCourseHelper = (ShareableCourseHelper) manager.lookup(ShareableCourseHelper.ROLE);
061        _odfSkillsHelper = (ODFSkillsHelper) manager.lookup(ODFSkillsHelper.ROLE);
062    }
063    
064    public boolean canRead(Content content, RestrictedModelItem<Content> definition) throws AmetysRepositoryException
065    {
066        return super.canRead(content, definition) && _odfContentTypeMetadataManager.canRead(content, definition);
067    }
068    
069    public boolean canWrite(Content content, RestrictedModelItem<Content> definition) throws AmetysRepositoryException
070    {
071        return super.canWrite(content, definition) && _odfContentTypeMetadataManager.canWrite(content, definition);
072    }
073    
074    @Override
075    public Map<String, Object> getAdditionalData(Content content)
076    {
077        Map<String, Object> additionalData = super.getAdditionalData(content);
078        
079        if (_shareableCourseHelper.handleShareableCourse())
080        {
081            if (content instanceof Course)
082            {
083                ShareableStatus shareableStatus = _shareableCourseStatusHelper.getShareableStatus(content);
084                additionalData.put("shareableCourseStatus", shareableStatus.name());
085            }
086        }
087        
088        if (content instanceof ProgramItem)
089        {
090            additionalData.put("excludedFromSkills", _odfSkillsHelper.isExcluded((ProgramItem) content));
091            if (content instanceof VersionableAmetysObject)
092            {
093                String[] allLabels = ((VersionableAmetysObject) content).getAllLabels();
094                additionalData.put("hasLiveVersion", Arrays.asList(allLabels).contains(CmsConstants.LIVE_LABEL));
095            }
096        }
097        
098        return additionalData;
099    }
100}