001/*
002 *  Copyright 2019 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.cms.content.type;
017
018import org.apache.avalon.framework.service.ServiceException;
019import org.apache.avalon.framework.service.ServiceManager;
020
021import org.ametys.cms.content.references.OutgoingReferences;
022import org.ametys.cms.content.references.Referencer;
023import org.ametys.cms.content.references.RichTextOutgoingReferencesExtractor;
024import org.ametys.cms.data.RichText;
025import org.ametys.cms.data.type.impl.RichTextRepositoryElementType;
026import org.ametys.cms.transformation.docbook.DocbookOutgoingReferencesExtractor;
027
028/**
029 * Class for rich text type of elements stored in the repository
030 */
031public class RichTextContentElementType extends RichTextRepositoryElementType implements Referencer
032{
033    /** Rich text outgoing references extractor */
034    protected RichTextOutgoingReferencesExtractor _richTextOutgoingReferencesExtractor;
035
036    @Override
037    public void service(ServiceManager manager) throws ServiceException
038    {
039        super.service(manager);
040        _richTextOutgoingReferencesExtractor = (RichTextOutgoingReferencesExtractor) manager.lookup(DocbookOutgoingReferencesExtractor.ROLE);
041    }
042    
043    public OutgoingReferences getOutgoingReferences(Object value)
044    {
045        if (value != null)
046        {
047            if (value instanceof RichText)
048            {
049                return _richTextOutgoingReferencesExtractor.getOutgoingReferences((RichText) value);
050            }
051            else if (value instanceof RichText[])
052            {
053                OutgoingReferences references = new OutgoingReferences();
054                for (RichText richText : (RichText[]) value)
055                {
056                    OutgoingReferences richTextReferences = _richTextOutgoingReferencesExtractor.getOutgoingReferences(richText);
057                    references.merge(richTextReferences);
058                }
059                return references;
060            }
061            else
062            {
063                throw new IllegalArgumentException("Try to get outgoing references of the non rich text value '" + value + "'");
064            }
065        }
066        else
067        {
068            return OutgoingReferences.EMPTY;
069        }
070    }
071}