001
014
015 package com.liferay.portal.tools.deploy;
016
017 import com.liferay.portal.kernel.plugin.PluginPackage;
018 import com.liferay.portal.kernel.util.FileUtil;
019 import com.liferay.portal.kernel.util.GetterUtil;
020 import com.liferay.portal.kernel.util.PropsKeys;
021 import com.liferay.portal.kernel.util.ServerDetector;
022 import com.liferay.portal.kernel.util.StringBundler;
023 import com.liferay.portal.kernel.util.StringUtil;
024 import com.liferay.portal.kernel.util.Validator;
025 import com.liferay.portal.kernel.xml.Document;
026 import com.liferay.portal.kernel.xml.Element;
027 import com.liferay.portal.kernel.xml.SAXReaderUtil;
028 import com.liferay.portal.model.Plugin;
029 import com.liferay.portal.util.InitUtil;
030 import com.liferay.portal.util.Portal;
031 import com.liferay.portal.util.PortalUtil;
032 import com.liferay.portal.util.PrefsPropsUtil;
033 import com.liferay.portal.util.PropsValues;
034 import com.liferay.portal.xml.DocumentImpl;
035 import com.liferay.util.bridges.mvc.MVCPortlet;
036 import com.liferay.util.xml.XMLMerger;
037 import com.liferay.util.xml.descriptor.FacesXMLDescriptor;
038
039 import java.io.File;
040
041 import java.util.ArrayList;
042 import java.util.List;
043
044
048 public class PortletDeployer extends BaseDeployer {
049
050 public static final String JSF_MYFACES =
051 "org.apache.myfaces.portlet.MyFacesGenericPortlet";
052
053 public static final String JSF_STANDARD =
054 "javax.portlet.faces.GenericFacesPortlet";
055
056 public static final String JSF_SUN = "com.sun.faces.portlet.FacesPortlet";
057
058 public static final String LIFERAY_RENDER_KIT_FACTORY =
059 "com.liferay.util.jsf.sun.faces.renderkit.LiferayRenderKitFactoryImpl";
060
061 public static final String MYFACES_CONTEXT_FACTORY =
062 "com.liferay.util.bridges.jsf.myfaces.MyFacesContextFactoryImpl";
063
064 public static void main(String[] args) {
065 InitUtil.initWithSpring();
066
067 List<String> wars = new ArrayList<String>();
068 List<String> jars = new ArrayList<String>();
069
070 for (String arg : args) {
071 if (arg.endsWith(".war")) {
072 wars.add(arg);
073 }
074 else if (arg.endsWith(".jar")) {
075 jars.add(arg);
076 }
077 }
078
079 new PortletDeployer(wars, jars);
080 }
081
082 public PortletDeployer() {
083 }
084
085 public PortletDeployer(List<String> wars, List<String> jars) {
086 super(wars, jars);
087 }
088
089 @Override
090 public void checkArguments() {
091 super.checkArguments();
092
093 if (Validator.isNull(portletTaglibDTD)) {
094 throw new IllegalArgumentException(
095 "The system property deployer.portlet.taglib.dtd is not set");
096 }
097 }
098
099 @Override
100 public void copyXmls(
101 File srcFile, String displayName, PluginPackage pluginPackage)
102 throws Exception {
103
104 super.copyXmls(srcFile, displayName, pluginPackage);
105
106 copyTomcatContextXml(srcFile);
107
108 copyDependencyXml(
109 "_servlet_context_include.jsp", srcFile + "/WEB-INF/jsp");
110 }
111
112 @Override
113 public String getExtraContent(
114 double webXmlVersion, File srcFile, String displayName)
115 throws Exception {
116
117 StringBundler sb = new StringBundler();
118
119 if (ServerDetector.isWebSphere()) {
120 sb.append("<context-param>");
121 sb.append("<param-name>");
122 sb.append("com.ibm.websphere.portletcontainer.");
123 sb.append("PortletDeploymentEnabled");
124 sb.append("</param-name>");
125 sb.append("<param-value>false</param-value>");
126 sb.append("</context-param>");
127 }
128
129 File facesXML = new File(srcFile + "/WEB-INF/faces-config.xml");
130 File portletXML = new File(
131 srcFile + "/WEB-INF/" + Portal.PORTLET_XML_FILE_NAME_STANDARD);
132 File webXML = new File(srcFile + "/WEB-INF/web.xml");
133
134 updatePortletXML(portletXML);
135
136 sb.append(getServletContent(portletXML, webXML));
137
138 setupJSF(facesXML, portletXML);
139
140 if (_sunFacesPortlet) {
141
142
143
144 sb.append("<listener>");
145 sb.append("<listener-class>");
146 sb.append("com.liferay.util.bridges.jsf.sun.");
147 sb.append("LiferayConfigureListener");
148 sb.append("</listener-class>");
149 sb.append("</listener>");
150 }
151
152 String extraContent = super.getExtraContent(
153 webXmlVersion, srcFile, displayName);
154
155 sb.append(extraContent);
156
157 return sb.toString();
158 }
159
160 @Override
161 public String getExtraFiltersContent(double webXmlVersion, File srcFile)
162 throws Exception {
163
164 StringBundler sb = new StringBundler(4);
165
166 String extraFiltersContent = super.getExtraFiltersContent(
167 webXmlVersion, srcFile);
168
169 sb.append(extraFiltersContent);
170
171
172
173 sb.append(getIgnoreFiltersContent(srcFile));
174
175
176
177 sb.append(getSpeedFiltersContent(srcFile));
178
179
180
181 sb.append(
182 getServletContextIncludeFiltersContent(webXmlVersion, srcFile));
183
184 return sb.toString();
185 }
186
187 @Override
188 public String getPluginType() {
189 return Plugin.TYPE_PORTLET;
190 }
191
192 public String getServletContent(File portletXML, File webXML)
193 throws Exception {
194
195 StringBundler sb = new StringBundler();
196
197 Document document = SAXReaderUtil.read(portletXML);
198
199 Element rootElement = document.getRootElement();
200
201 List<Element> portletElements = rootElement.elements("portlet");
202
203 for (Element portletElement : portletElements) {
204 String portletName = PortalUtil.getJsSafePortletId(
205 portletElement.elementText("portlet-name"));
206 String portletClass = portletElement.elementText("portlet-class");
207
208 String servletName = portletName + " Servlet";
209
210 sb.append("<servlet>");
211 sb.append("<servlet-name>");
212 sb.append(servletName);
213 sb.append("</servlet-name>");
214 sb.append("<servlet-class>");
215 sb.append("com.liferay.portal.kernel.servlet.PortletServlet");
216 sb.append("</servlet-class>");
217 sb.append("<init-param>");
218 sb.append("<param-name>portlet-class</param-name>");
219 sb.append("<param-value>");
220 sb.append(portletClass);
221 sb.append("</param-value>");
222 sb.append("</init-param>");
223 sb.append("<load-on-startup>1</load-on-startup>");
224 sb.append("</servlet>");
225
226 sb.append("<servlet-mapping>");
227 sb.append("<servlet-name>");
228 sb.append(servletName);
229 sb.append("</servlet-name>");
230 sb.append("<url-pattern>/");
231 sb.append(portletName);
232 sb.append("