001
014
015 package com.liferay.portal.deploy.sandbox;
016
017 import com.liferay.portal.kernel.deploy.Deployer;
018 import com.liferay.portal.kernel.plugin.PluginPackage;
019 import com.liferay.portal.kernel.util.FileUtil;
020 import com.liferay.portal.kernel.util.TextFormatter;
021 import com.liferay.portal.kernel.xml.Document;
022 import com.liferay.portal.kernel.xml.Element;
023 import com.liferay.portal.kernel.xml.Namespace;
024 import com.liferay.portal.kernel.xml.QName;
025 import com.liferay.portal.kernel.xml.SAXReaderUtil;
026
027 import java.io.File;
028
029 import java.util.ArrayList;
030 import java.util.HashMap;
031 import java.util.List;
032 import java.util.Map;
033
034
038 public class PortletSandboxHandler extends BaseSandboxHandler {
039
040 public PortletSandboxHandler(Deployer deployer) {
041 super(deployer);
042
043 _deployer = deployer;
044 }
045
046 @Override
047 protected void clonePlugin(File dir, PluginPackage pluginPackage)
048 throws Exception {
049
050 Map<String, String> filterMap = new HashMap<String, String>();
051
052 filterMap.put(
053 "portlet_class", "com.liferay.util.bridges.alloy.AlloyPortlet");
054 filterMap.put("portlet_name", "1");
055 filterMap.put("portlet_title", pluginPackage.getName());
056 filterMap.put("restore_current_view", "false");
057 filterMap.put(
058 "friendly_url_mapper_class",
059 "com.liferay.util.bridges.alloy.AlloyFriendlyURLMapper");
060 filterMap.put(
061 "friendly_url_mapping",
062 TextFormatter.format(pluginPackage.getName(), TextFormatter.B));
063 filterMap.put(
064 "friendly_url_routes",
065 "com/liferay/util/bridges/alloy/alloy-friendly-url-routes.xml");
066 filterMap.put(
067 "namespace",
068 TextFormatter.format(pluginPackage.getName(), TextFormatter.D));
069 filterMap.put(
070 "package_path",
071 "com.liferay." +
072 TextFormatter.format(pluginPackage.getName(), TextFormatter.B));
073
074 _deployer.copyDependencyXml(
075 "liferay-display.xml", dir + "/WEB-INF", filterMap);
076
077 updateLiferayDisplayXML(dir);
078
079 _deployer.copyDependencyXml(
080 "liferay-portlet.xml", dir + "/WEB-INF", filterMap);
081
082 _deployer.copyDependencyXml("portlet.xml", dir + "/WEB-INF", filterMap);
083
084 updatePortletXML(dir);
085
086 _deployer.copyDependencyXml("service.xml", dir + "/WEB-INF", filterMap);
087 }
088
089 @Override
090 protected String getPluginType() {
091 return _PLUGIN_TYPE;
092 }
093
094 protected Namespace getPortletNamespace(Document document) {
095 Element rootElement = document.getRootElement();
096
097 QName qName = rootElement.getQName();
098
099 return qName.getNamespace();
100 }
101
102 protected void updateLiferayDisplayXML(File dir) throws Exception {
103 File file = new File(dir + "/WEB-INF/liferay-display.xml");
104
105 String content = FileUtil.read(file);
106
107 Document document = SAXReaderUtil.read(content);
108
109 Element rootElement = document.getRootElement();
110
111 Element categoryElement = rootElement.addElement("category");
112
113 categoryElement.addAttribute("name", "category.sandbox");
114
115 Element portletElement = categoryElement.addElement("portlet");
116
117 portletElement.addAttribute("id", "1");
118
119 FileUtil.write(file, document.formattedString());
120 }
121
122 protected void updatePortletXML(File dir) throws Exception {
123 File file = new File(dir + "/WEB-INF/portlet.xml");
124
125 String content = FileUtil.read(file);
126
127 Document document = SAXReaderUtil.read(content);
128
129 Element rootElement = document.getRootElement();
130
131 List<Element> portletElements = rootElement.elements("portlet");
132
133 for (Element portletElement : portletElements) {
134 List<Element> elements = new ArrayList<Element>();
135
136 Element resourceBundleElement = SAXReaderUtil.createElement(
137 SAXReaderUtil.createQName(
138 "resource-bundle", getPortletNamespace(document)));
139
140 resourceBundleElement.setText("content.Language");
141
142 for (Element element : portletElement.elements()) {
143 String elementName = element.getName();
144
145 if (elementName.equals("init-param") ||
146 elementName.equals("portlet-info")) {
147 }
148 else {
149 elements.add(element);
150
151 if (elementName.equals("supports")) {
152 elements.add(resourceBundleElement);
153 }
154 }
155
156 element.detach();
157 }
158
159 for (Element element : elements) {
160 portletElement.add(element);
161 }
162 }
163
164 FileUtil.write(file, document.formattedString());
165 }
166
167 private static final String _PLUGIN_TYPE = "portlet";
168
169 private Deployer _deployer;
170
171 }