001
014
015 package com.liferay.portal.model.impl;
016
017 import com.liferay.portal.kernel.exception.PortalException;
018 import com.liferay.portal.kernel.exception.SystemException;
019 import com.liferay.portal.kernel.log.Log;
020 import com.liferay.portal.kernel.log.LogFactoryUtil;
021 import com.liferay.portal.kernel.util.StringBundler;
022 import com.liferay.portal.kernel.util.StringPool;
023 import com.liferay.portal.model.Group;
024 import com.liferay.portal.model.Layout;
025 import com.liferay.portal.model.LayoutSet;
026 import com.liferay.portal.model.LayoutWrapper;
027 import com.liferay.portal.model.VirtualLayoutConstants;
028
029 import javax.servlet.http.HttpServletRequest;
030
031
034 public class VirtualLayout extends LayoutWrapper {
035
036 public VirtualLayout(Layout sourceLayout, Group targetGroup) {
037 super(sourceLayout);
038
039 _sourceLayout = sourceLayout;
040 _targetGroup = targetGroup;
041 }
042
043 @Override
044 public Object clone() {
045 return new VirtualLayout((Layout)_sourceLayout.clone(), _targetGroup);
046 }
047
048 @Override
049 public String getFriendlyURL() {
050 StringBundler sb = new StringBundler(4);
051
052 sb.append(VirtualLayoutConstants.CANONICAL_URL_SEPARATOR);
053
054 try {
055 Group group = _sourceLayout.getGroup();
056
057 sb.append(group.getFriendlyURL());
058 }
059 catch (Exception e) {
060 _log.error(e, e);
061 }
062
063 sb.append(_sourceLayout.getFriendlyURL());
064
065 return sb.toString();
066 }
067
068 @Override
069 public Group getGroup() {
070 return getHostGroup();
071 }
072
073 @Override
074 public long getGroupId() {
075 return getVirtualGroupId();
076 }
077
078 public Group getHostGroup() {
079 return _targetGroup;
080 }
081
082 @Override
083 public LayoutSet getLayoutSet() {
084 if (isPrivateLayout()) {
085 return _targetGroup.getPrivateLayoutSet();
086 }
087
088 return _targetGroup.getPublicLayoutSet();
089 }
090
091 @Override
092 public String getRegularURL(HttpServletRequest request)
093 throws PortalException, SystemException {
094
095 String layoutURL = _sourceLayout.getRegularURL(request);
096
097 return injectVirtualGroupURL(layoutURL);
098 }
099
100 @Override
101 public String getResetLayoutURL(HttpServletRequest request)
102 throws PortalException, SystemException {
103
104 String layoutURL = _sourceLayout.getResetLayoutURL(request);
105
106 return injectVirtualGroupURL(layoutURL);
107 }
108
109 @Override
110 public String getResetMaxStateURL(HttpServletRequest request)
111 throws PortalException, SystemException {
112
113 String layoutURL = _sourceLayout.getResetMaxStateURL(request);
114
115 return injectVirtualGroupURL(layoutURL);
116 }
117
118 public long getSourceGroupId() {
119 return _sourceLayout.getGroupId();
120 }
121
122 public long getVirtualGroupId() {
123 return _targetGroup.getGroupId();
124 }
125
126 protected String injectVirtualGroupURL(String layoutURL) {
127 try {
128 Group group = _sourceLayout.getGroup();
129
130 StringBundler sb = new StringBundler(4);
131
132 int pos = layoutURL.indexOf(group.getFriendlyURL());
133
134 sb.append(layoutURL.substring(0, pos));
135 sb.append(_targetGroup.getFriendlyURL());
136 sb.append(getFriendlyURL());
137
138 pos = layoutURL.indexOf(StringPool.QUESTION);
139
140 if (pos > 0) {
141 sb.append(layoutURL.substring(pos, layoutURL.length()));
142 }
143
144 return sb.toString();
145 }
146 catch (Exception e) {
147 throw new IllegalStateException(e);
148 }
149 }
150
151 private static Log _log = LogFactoryUtil.getLog(VirtualLayout.class);
152
153 private Layout _sourceLayout;
154 private Group _targetGroup;
155
156 }