1
22
23 package com.liferay.portal.tools;
24
25 import com.liferay.portal.kernel.util.FileUtil;
26 import com.liferay.portal.kernel.util.ListUtil;
27 import com.liferay.portal.kernel.util.StringUtil;
28 import com.liferay.portal.kernel.xml.Document;
29 import com.liferay.portal.kernel.xml.Element;
30 import com.liferay.portal.kernel.xml.SAXReaderUtil;
31 import com.liferay.portal.util.InitUtil;
32
33 import java.io.File;
34 import java.io.StringReader;
35
36 import java.util.ArrayList;
37 import java.util.List;
38 import java.util.Map;
39 import java.util.TreeMap;
40
41 import org.apache.tools.ant.DirectoryScanner;
42
43
49 public class TLDFormatter {
50
51 public static void main(String[] args) {
52 try {
53 InitUtil.initWithSpring();
54
55 _formatTLD();
56 }
57 catch (Exception e) {
58 e.printStackTrace();
59 }
60 }
61
62 private static void _formatTLD() throws Exception {
63 String basedir = "./util-taglib/src/META-INF/";
64
65 if (!FileUtil.exists(basedir)) {
66 return;
67 }
68
69 List<File> list = new ArrayList<File>();
70
71 DirectoryScanner ds = new DirectoryScanner();
72
73 ds.setBasedir(basedir);
74 ds.setExcludes(new String[] {"**\\liferay-portlet-ext.tld"});
75 ds.setIncludes(new String[] {"**\\*.tld"});
76
77 ds.scan();
78
79 list.addAll(ListUtil.fromArray(ds.getIncludedFiles()));
80
81 String[] files = list.toArray(new String[list.size()]);
82
83 for (int i = 0; i < files.length; i++) {
84 File file = new File(basedir + files[i]);
85
86 String content = FileUtil.read(file);
87
88 Document document = SAXReaderUtil.read(
89 new StringReader(
90 StringUtil.replace(
91 content, "xml/ns/j2ee/web-jsptaglibrary_2_0.xsd",
92 "dtd/web-jsptaglibrary_1_2.dtd")));
93
94 Element root = document.getRootElement();
95
96 _sortElements(root, "tag", "name");
97
98 List<Element> tagEls = root.elements("tag");
99
100 for (Element tagEl : tagEls) {
101 _sortElements(tagEl, "attribute", "name");
102
103 Element dynamicAttributesEl = tagEl.element(
104 "dynamic-attributes");
105
106 if (dynamicAttributesEl != null) {
107 dynamicAttributesEl.detach();
108
109 tagEl.add(dynamicAttributesEl);
110 }
111 }
112
113 String newContent = document.formattedString();
114
115 int x = newContent.indexOf("<tlib-version");
116 int y = newContent.indexOf("</taglib>");
117
118 newContent = newContent.substring(x, y);
119
120 x = content.indexOf("<tlib-version");
121 y = content.indexOf("</taglib>");
122
123 newContent =
124 content.substring(0, x) + newContent + content.substring(y);
125
126 if (!content.equals(newContent)) {
127 FileUtil.write(file, newContent);
128
129 System.out.println(file);
130 }
131 }
132 }
133
134 private static void _sortElements(
135 Element parentElement, String name, String sortBy) {
136
137 Map<String, Element> map = new TreeMap<String, Element>();
138
139 List<Element> elements = parentElement.elements(name);
140
141 for (Element element : elements) {
142 map.put(element.elementText(sortBy), element);
143
144 element.detach();
145 }
146
147 for (Map.Entry<String, Element> entry : map.entrySet()) {
148 Element element = entry.getValue();
149
150 parentElement.add(element);
151 }
152 }
153
154 }