001
014
015 package com.liferay.portal.kernel.search;
016
017 import com.liferay.portal.kernel.util.FastDateFormatFactoryUtil;
018 import com.liferay.portal.kernel.util.HttpUtil;
019 import com.liferay.portal.kernel.xml.Element;
020 import com.liferay.portal.kernel.xml.Namespace;
021 import com.liferay.portal.kernel.xml.QName;
022 import com.liferay.portal.kernel.xml.SAXReaderUtil;
023
024 import java.text.Format;
025
026 import java.util.Date;
027
028
032 public class OpenSearchUtil {
033
034 public static final int DEFAULT_NAMESPACE = 0;
035
036 public static final int LIFERAY_NAMESPACE = 4;
037
038 public static final int NO_NAMESPACE = 3;
039
040 public static final int OS_NAMESPACE = 1;
041
042 public static final int RELEVANCE_NAMESPACE = 2;
043
044 public static Element addElement(
045 Element el, String name, int namespaceType) {
046
047 return el.addElement(getQName(name, namespaceType));
048 }
049
050 public static Element addElement(
051 Element el, String name, int namespaceType, Date value) {
052
053 return addElement(el, name, namespaceType, _dateFormat.format(value));
054 }
055
056 public static Element addElement(
057 Element el, String name, int namespaceType, double value) {
058
059 return addElement(el, name, namespaceType, String.valueOf(value));
060 }
061
062 public static Element addElement(
063 Element el, String name, int namespaceType, int value) {
064
065 return addElement(el, name, namespaceType, String.valueOf(value));
066 }
067
068 public static Element addElement(
069 Element el, String name, int namespaceType, long value) {
070
071 return addElement(el, name, namespaceType, String.valueOf(value));
072 }
073
074 public static Element addElement(
075 Element el, String name, int namespaceType, String value) {
076
077 Element returnElement = el.addElement(getQName(name, namespaceType));
078
079 returnElement.addCDATA(value);
080
081 return returnElement;
082 }
083
084 public static void addLink(
085 Element root, String searchURL, String rel, String keywords, int page,
086 int itemsPerPage) {
087
088 Element link = addElement(root, "link", DEFAULT_NAMESPACE);
089
090 link.addAttribute("rel", rel);
091
092 searchURL = HttpUtil.addParameter(
093 searchURL, "keywords", HttpUtil.encodeURL(keywords));
094 searchURL = HttpUtil.addParameter(searchURL, "p", page);
095 searchURL = HttpUtil.addParameter(searchURL, "c", itemsPerPage);
096 searchURL = HttpUtil.addParameter(searchURL, "format", "atom");
097
098 link.addAttribute("href", searchURL);
099
100 link.addAttribute("type", "application/atom+xml");
101 }
102
103 public static Namespace getNamespace(int namespaceType) {
104 Namespace namespace = null;
105
106 if (namespaceType == DEFAULT_NAMESPACE) {
107 namespace = SAXReaderUtil.createNamespace(
108 "", "http:
109 }
110 else if (namespaceType == LIFERAY_NAMESPACE) {
111 namespace = SAXReaderUtil.createNamespace(
112 "liferay", "http:
113 }
114 else if (namespaceType == OS_NAMESPACE) {
115 namespace = SAXReaderUtil.createNamespace(
116 "opensearch", "http:
117 }
118 else if (namespaceType == RELEVANCE_NAMESPACE) {
119 namespace = SAXReaderUtil.createNamespace(
120 "relevance",
121 "http:
122 }
123
124 return namespace;
125 }
126
127 public static QName getQName(String name, int namespaceType) {
128 if (NO_NAMESPACE == namespaceType) {
129 return SAXReaderUtil.createQName(name);
130 }
131 else {
132 return SAXReaderUtil.createQName(name, getNamespace(namespaceType));
133 }
134 }
135
136 private static final Format _dateFormat =
137 FastDateFormatFactoryUtil.getSimpleDateFormat(
138 "yyyy-MM-dd'T'HH:mm:sszzz");
139
140 }