001
014
015 package com.liferay.portlet;
016
017 import com.liferay.portal.kernel.security.pacl.DoPrivileged;
018 import com.liferay.portal.model.Portlet;
019 import com.liferay.portal.security.lang.DoPrivilegedUtil;
020
021 import java.util.Map;
022 import java.util.concurrent.ConcurrentHashMap;
023
024 import javax.portlet.PortletConfig;
025 import javax.portlet.PortletContext;
026
027 import javax.servlet.ServletContext;
028
029
032 @DoPrivileged
033 public class PortletConfigFactoryImpl implements PortletConfigFactory {
034
035 public PortletConfigFactoryImpl() {
036 _pool = new ConcurrentHashMap<>();
037 }
038
039 @Override
040 public PortletConfig create(
041 Portlet portlet, ServletContext servletContext) {
042
043 Map<String, PortletConfig> portletConfigs = _pool.get(
044 portlet.getRootPortletId());
045
046 if (portletConfigs == null) {
047 portletConfigs = new ConcurrentHashMap<>();
048
049 _pool.put(portlet.getRootPortletId(), portletConfigs);
050 }
051
052 PortletConfig portletConfig = portletConfigs.get(
053 portlet.getPortletId());
054
055 if (portletConfig == null) {
056 PortletContext portletContext = PortletContextFactory.create(
057 portlet, servletContext);
058
059 portletConfig = new PortletConfigImpl(portlet, portletContext);
060
061 portletConfigs.put(portlet.getPortletId(), portletConfig);
062 }
063
064 return DoPrivilegedUtil.wrap(portletConfig);
065 }
066
067 @Override
068 public void destroy(Portlet portlet) {
069 _pool.remove(portlet.getRootPortletId());
070 }
071
072 @Override
073 public PortletConfig get(Portlet portlet) {
074 return get(portlet.getPortletId());
075 }
076
077 @Override
078 public PortletConfig get(String portletId) {
079 Map<String, PortletConfig> portletConfigs = _pool.get(portletId);
080
081 if (portletConfigs == null) {
082 return null;
083 }
084
085 return portletConfigs.get(portletId);
086 }
087
088 @Override
089 public PortletConfig update(Portlet portlet) {
090 Map<String, PortletConfig> portletConfigs = _pool.get(
091 portlet.getRootPortletId());
092
093 if (portletConfigs == null) {
094 return null;
095 }
096
097 PortletConfig portletConfig = portletConfigs.get(
098 portlet.getPortletId());
099
100 PortletContext portletContext = portletConfig.getPortletContext();
101
102 portletConfig = new PortletConfigImpl(portlet, portletContext);
103
104 portletConfigs.put(portlet.getPortletId(), portletConfig);
105
106 return DoPrivilegedUtil.wrap(portletConfig);
107 }
108
109 private final Map<String, Map<String, PortletConfig>> _pool;
110
111 }