001    /**
002     * Copyright (c) 2000-2013 Liferay, Inc. All rights reserved.
003     *
004     * This library is free software; you can redistribute it and/or modify it under
005     * the terms of the GNU Lesser General Public License as published by the Free
006     * Software Foundation; either version 2.1 of the License, or (at your option)
007     * any later version.
008     *
009     * This library is distributed in the hope that it will be useful, but WITHOUT
010     * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
011     * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
012     * details.
013     */
014    
015    package com.liferay.portal.asset;
016    
017    import com.liferay.portal.kernel.log.Log;
018    import com.liferay.portal.kernel.log.LogFactoryUtil;
019    import com.liferay.portal.kernel.util.ListUtil;
020    import com.liferay.portlet.asset.AssetRendererFactoryRegistry;
021    import com.liferay.portlet.asset.model.AssetRendererFactory;
022    
023    import java.util.List;
024    import java.util.Map;
025    import java.util.concurrent.ConcurrentHashMap;
026    
027    /**
028     * @author Bruno Farache
029     * @author Marcellus Tavares
030     */
031    public class AssetRendererFactoryRegistryImpl
032            implements AssetRendererFactoryRegistry {
033    
034            /**
035             * @deprecated As of 6.2.0, replaced by {@link #getAssetRendererFactories(
036             *             long)}
037             */
038            @Override
039            public List<AssetRendererFactory> getAssetRendererFactories() {
040                    return ListUtil.fromMapValues(_assetRenderFactoriesMapByClassName);
041            }
042    
043            @Override
044            public List<AssetRendererFactory> getAssetRendererFactories(
045                    long companyId) {
046    
047                    return ListUtil.fromMapValues(
048                            filterAssetRendererFactories(
049                                    companyId, _assetRenderFactoriesMapByClassName));
050            }
051    
052            @Override
053            public AssetRendererFactory getAssetRendererFactoryByClassName(
054                    String className) {
055    
056                    return _assetRenderFactoriesMapByClassName.get(className);
057            }
058    
059            @Override
060            public AssetRendererFactory getAssetRendererFactoryByType(String type) {
061                    return _assetRenderFactoriesMapByClassType.get(type);
062            }
063    
064            /**
065             * @deprecated As of 6.2.0, replaced by {@link #getClassNameIds( long)}
066             */
067            @Override
068            public long[] getClassNameIds() {
069                    return getClassNameIds(0);
070            }
071    
072            @Override
073            public long[] getClassNameIds(long companyId) {
074                    Map<String, AssetRendererFactory> assetRenderFactories =
075                            _assetRenderFactoriesMapByClassName;
076    
077                    if (companyId > 0) {
078                            assetRenderFactories = filterAssetRendererFactories(
079                                    companyId, _assetRenderFactoriesMapByClassName);
080                    }
081    
082                    long[] classNameIds = new long[assetRenderFactories.size()];
083    
084                    int i = 0;
085    
086                    for (AssetRendererFactory assetRendererFactory :
087                                    assetRenderFactories.values()) {
088    
089                            classNameIds[i] = assetRendererFactory.getClassNameId();
090    
091                            i++;
092                    }
093    
094                    return classNameIds;
095            }
096    
097            @Override
098            public void register(AssetRendererFactory assetRendererFactory) {
099                    String className = assetRendererFactory.getClassName();
100    
101                    AssetRendererFactory classNameAssetRendererFactory =
102                            _assetRenderFactoriesMapByClassName.put(
103                                    className, assetRendererFactory);
104    
105                    if (_log.isWarnEnabled() && (classNameAssetRendererFactory != null)) {
106                            _log.warn(
107                                    "Replacing " + classNameAssetRendererFactory +
108                                            " for class name " + className + " with " +
109                                                    assetRendererFactory);
110                    }
111    
112                    String type = assetRendererFactory.getType();
113    
114                    AssetRendererFactory typeAssetRendererFactory =
115                            _assetRenderFactoriesMapByClassType.put(type, assetRendererFactory);
116    
117                    if (_log.isWarnEnabled() && (typeAssetRendererFactory != null)) {
118                            _log.warn(
119                                    "Replacing " + typeAssetRendererFactory + " for type " + type +
120                                            " with " + assetRendererFactory);
121                    }
122            }
123    
124            @Override
125            public void unregister(AssetRendererFactory assetRendererFactory) {
126                    _assetRenderFactoriesMapByClassName.remove(
127                            assetRendererFactory.getClassName());
128                    _assetRenderFactoriesMapByClassType.remove(
129                            assetRendererFactory.getType());
130            }
131    
132            private Map<String, AssetRendererFactory> filterAssetRendererFactories(
133                    long companyId,
134                    Map<String, AssetRendererFactory> assetRendererFactories) {
135    
136                    Map<String, AssetRendererFactory> filteredAssetRendererFactories =
137                            new ConcurrentHashMap<String, AssetRendererFactory>();
138    
139                    for (String className : assetRendererFactories.keySet()) {
140                            AssetRendererFactory assetRendererFactory =
141                                    assetRendererFactories.get(className);
142    
143                            if (assetRendererFactory.isActive(companyId)) {
144                                    filteredAssetRendererFactories.put(
145                                            className, assetRendererFactory);
146                            }
147                    }
148    
149                    return filteredAssetRendererFactories;
150            }
151    
152            private static Log _log = LogFactoryUtil.getLog(
153                    AssetRendererFactoryRegistryImpl.class);
154    
155            private Map<String, AssetRendererFactory>
156                    _assetRenderFactoriesMapByClassName =
157                            new ConcurrentHashMap<String, AssetRendererFactory>();
158            private Map<String, AssetRendererFactory>
159                    _assetRenderFactoriesMapByClassType =
160                            new ConcurrentHashMap<String, AssetRendererFactory>();
161    
162    }