PageRenderTime 73ms CodeModel.GetById 43ms RepoModel.GetById 0ms app.codeStats 0ms

/guvnor-webapp/src/main/java/org/drools/guvnor/server/jaxrs/Translator.java

https://github.com/matnil/guvnor
Java | 321 lines | 165 code | 34 blank | 122 comment | 11 complexity | 51a22b1072ec7732ca94ea8ba55e51e0 MD5 | raw file
  1. /*
  2. * Copyright 2011 JBoss Inc
  3. *
  4. * Licensed under the Apache License, Version 2.0 (the "License");
  5. * you may not use this file except in compliance with the License.
  6. * You may obtain a copy of the License at
  7. *
  8. * http://www.apache.org/licenses/LICENSE-2.0
  9. *
  10. * Unless required by applicable law or agreed to in writing, software
  11. * distributed under the License is distributed on an "AS IS" BASIS,
  12. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. * See the License for the specific language governing permissions and
  14. * limitations under the License.
  15. */
  16. package org.drools.guvnor.server.jaxrs;
  17. import org.apache.abdera.Abdera;
  18. import org.apache.abdera.factory.Factory;
  19. import org.apache.abdera.model.Content.Type;
  20. import org.apache.abdera.model.Entry;
  21. import org.apache.abdera.model.ExtensibleElement;
  22. import org.drools.guvnor.server.jaxrs.jaxb.Asset;
  23. import org.drools.guvnor.server.jaxrs.jaxb.AssetMetadata;
  24. import org.drools.guvnor.server.jaxrs.jaxb.Package;
  25. import org.drools.guvnor.server.jaxrs.jaxb.PackageMetadata;
  26. import org.drools.repository.AssetItem;
  27. import org.drools.repository.CategoryItem;
  28. import org.drools.repository.PackageItem;
  29. import javax.ws.rs.core.UriBuilder;
  30. import javax.ws.rs.core.UriInfo;
  31. import javax.xml.namespace.QName;
  32. import java.net.URI;
  33. import java.util.*;
  34. public class Translator {
  35. public static final String NS = "";
  36. public static final QName METADATA = new QName(NS, "metadata");
  37. public static final QName VALUE = new QName(NS, "value");
  38. public static final QName ARCHIVED = new QName(NS, "archived");
  39. public static final QName UUID = new QName(NS, "uuid");
  40. public static final QName STATE = new QName(NS, "state");
  41. public static final QName FORMAT = new QName(NS, "format");
  42. public static final QName CATEGORIES = new QName(NS, "categories");
  43. public static Asset toAsset(AssetItem a, UriInfo uriInfo) {
  44. AssetMetadata metadata = new AssetMetadata();
  45. metadata.setUuid(a.getUUID());
  46. metadata.setTitle(a.getTitle());
  47. metadata.setLastModified(a.getLastModified().getTime());
  48. metadata.setCreated(a.getCreatedDate().getTime());
  49. metadata.setCreatedBy(a.getCreator());
  50. metadata.setDisabled(a.getDisabled());
  51. metadata.setFormat(a.getFormat());
  52. metadata.setNote("<![CDATA[ " + a.getCheckinComment() + " ]]>");
  53. List<CategoryItem> categories = a.getCategories();
  54. String[] cats = new String[categories.size()];
  55. int counter = 0;
  56. for (CategoryItem c : categories) {
  57. cats[counter++] = c.getName();
  58. }
  59. Asset ret = new Asset();
  60. ret.setMetadata(metadata);
  61. ret.setType(a.getType());
  62. ret.setCheckInComment(a.getCheckinComment());
  63. ret.setDescription(a.getDescription());
  64. UriBuilder builder = uriInfo.getBaseUriBuilder();
  65. ret.setRefLink(
  66. builder.path("/packages/" + a.getPackage().getName() + "/assets/" + a.getName()).build());
  67. builder = uriInfo.getBaseUriBuilder();
  68. ret.setBinaryLink(
  69. builder.path("/packages/" + a.getPackage().getName() + "/assets/" + a.getName() + "/binary").build());
  70. builder = uriInfo.getBaseUriBuilder();
  71. ret.setSourceLink(
  72. builder.path("/packages/" + a.getPackage().getName() + "/assets/" + a.getName() + "/source").build());
  73. ret.setVersion(a.getVersionNumber());
  74. return ret;
  75. }
  76. public static Package toPackage(PackageItem p, UriInfo uriInfo) {
  77. PackageMetadata metadata = new PackageMetadata();
  78. metadata.setUuid(p.getUUID());
  79. metadata.setCreated(p.getCreatedDate().getTime());
  80. metadata.setLastModified(p.getLastModified().getTime());
  81. metadata.setLastContributor(p.getLastContributor());
  82. metadata.setState((p.getState() != null) ? p.getState().getName() : "");
  83. Package ret = new Package();
  84. ret.setMetadata(metadata);
  85. ret.setVersion(p.getVersionNumber());
  86. ret.setTitle(p.getTitle());
  87. ret.setCheckInComment(p.getCheckinComment());
  88. ret.setDescription(p.getDescription());
  89. UriBuilder builder = uriInfo.getBaseUriBuilder();
  90. ret.setBinaryLink(
  91. builder.path("/packages/" + p.getName() + "/binary").build());
  92. builder = uriInfo.getBaseUriBuilder();
  93. ret.setSourceLink(
  94. builder.path("/packages/" + p.getName() + "/source").build());
  95. //ret.setSnapshot(p.getSnapshotName());
  96. ret.setVersion(p.getVersionNumber());
  97. Iterator<AssetItem> iter = p.getAssets();
  98. Set<URI> assets = new HashSet<URI>();
  99. while (iter.hasNext()) {
  100. AssetItem a = iter.next();
  101. Asset asset = toAsset(a, uriInfo);
  102. assets.add(asset.getRefLink());
  103. }
  104. ret.setAssets(assets);
  105. return ret;
  106. }
  107. public static Entry toPackageEntryAbdera(PackageItem p, UriInfo uriInfo) {
  108. UriBuilder base;
  109. if (p.isHistoricalVersion()) {
  110. base = uriInfo.getBaseUriBuilder().path("packages").path(p.getName()).path("versions").path(Long.toString(p.getVersionNumber()));
  111. } else {
  112. base = uriInfo.getBaseUriBuilder().path("packages").path(p.getName());
  113. }
  114. Factory factory = Abdera.getNewFactory();
  115. org.apache.abdera.model.Entry e = factory.getAbdera().newEntry();
  116. e.setTitle(p.getTitle());
  117. e.setSummary(p.getDescription());
  118. e.setPublished(new Date(p.getLastModified().getTimeInMillis()));
  119. e.setBaseUri(base.clone().build().toString());
  120. e.addAuthor(p.getLastContributor());
  121. e.setId(base.clone().build().toString());
  122. Iterator<AssetItem> i = p.getAssets();
  123. while (i.hasNext()) {
  124. AssetItem item = i.next();
  125. org.apache.abdera.model.Link l = factory.newLink();
  126. l.setHref((base.clone().path("assets").path(item.getName())).build().toString());
  127. l.setTitle(item.getTitle());
  128. l.setRel("asset");
  129. e.addLink(l);
  130. }
  131. //generate meta data
  132. ExtensibleElement extension = e.addExtension(METADATA);
  133. ExtensibleElement childExtension = extension.addExtension(ARCHIVED);
  134. //childExtension.setAttributeValue("type", ArtifactsRepository.METADATA_TYPE_STRING);
  135. childExtension.addSimpleExtension(VALUE, p.isArchived() ? "true" : "false");
  136. childExtension = extension.addExtension(UUID);
  137. childExtension.addSimpleExtension(VALUE, p.getUUID());
  138. childExtension = extension.addExtension(STATE);
  139. childExtension.addSimpleExtension(VALUE, p.getState() == null ? "" : p.getState().getName());
  140. org.apache.abdera.model.Content content = factory.newContent();
  141. content.setSrc(base.clone().path("binary").build().toString());
  142. content.setMimeType("application/octet-stream");
  143. content.setContentType(Type.MEDIA);
  144. e.setContentElement(content);
  145. return e;
  146. }
  147. /* public static Entry ToPackageEntry(PackageItem p, UriInfo uriInfo) {
  148. UriBuilder base;
  149. if(p.isHistoricalVersion()) {
  150. base = uriInfo.getBaseUriBuilder().path("packages").path(p.getName()).path("versions").path(Long.toString(p.getVersionNumber()));
  151. } else {
  152. base = uriInfo.getBaseUriBuilder().path("packages").path(p.getName());
  153. }
  154. //NOTE: Entry extension is not supported in RESTEasy. We need to either use Abdera or get extension
  155. //supported in RESTEasy
  156. //PackageMetadata metadata = new PackageMetadata();
  157. //metadata.setUuid(p.getUUID());
  158. //metadata.setCreated(p.getCreatedDate().getTime());
  159. //metadata.setLastModified(p.getLastModified().getTime());
  160. //metadata.setLastContributor(p.getLastContributor());
  161. //c.setJAXBObject(metadata);
  162. Entry e =new Entry();
  163. e.setTitle(p.getTitle());
  164. e.setSummary(p.getDescription());
  165. e.setPublished(new Date(p.getLastModified().getTimeInMillis()));
  166. e.setBase(base.clone().build());
  167. e.setId(base.clone().build());
  168. Iterator<AssetItem> i = p.getAssets();
  169. while (i.hasNext()) {
  170. AssetItem item = i.next();
  171. Link link = new Link();
  172. link.setHref((base.clone().path("assets").path(item.getName())).build());
  173. link.setTitle(item.getTitle());
  174. link.setRel("asset");
  175. e.getLinks().add(link);
  176. }
  177. Content c = new Content();
  178. c.setType(MediaType.APPLICATION_OCTET_STREAM_TYPE);
  179. c.setSrc(base.clone().path("binary").build());
  180. e.setContent(c);
  181. return e;
  182. }*/
  183. public static Entry toAssetEntryAbdera(AssetItem a, UriInfo uriInfo) {
  184. UriBuilder base;
  185. if (a.isHistoricalVersion()) {
  186. base = uriInfo.getBaseUriBuilder().path("packages").path(a.getPackageName()).path("assets").path(a.getName()).path("versions").path(Long.toString(a.getVersionNumber()));
  187. } else {
  188. base = uriInfo.getBaseUriBuilder().path("packages").path(a.getPackageName()).path("assets").path(a.getName());
  189. }
  190. Factory factory = Abdera.getNewFactory();
  191. org.apache.abdera.model.Entry e = factory.getAbdera().newEntry();
  192. e.setTitle(a.getTitle());
  193. e.setSummary(a.getDescription());
  194. e.setPublished(new Date(a.getLastModified().getTimeInMillis()));
  195. e.setBaseUri(base.clone().build().toString());
  196. e.addAuthor(a.getLastContributor());
  197. e.setId(base.clone().build().toString());
  198. /* Iterator<AssetItem> i = p.getAssets();
  199. while (i.hasNext()) {
  200. AssetItem item = i.next();
  201. org.apache.abdera.model.Link l = factory.newLink();
  202. l.setHref((base.clone().path("assets").path(item.getName())).build().toString());
  203. l.setTitle(item.getTitle());
  204. l.setRel("asset");
  205. e.addLink(l);
  206. }*/
  207. //generate meta data
  208. ExtensibleElement extension = e.addExtension(METADATA);
  209. ExtensibleElement childExtension = extension.addExtension(ARCHIVED);
  210. //childExtension.setAttributeValue("type", ArtifactsRepository.METADATA_TYPE_STRING);
  211. childExtension.addSimpleExtension(VALUE, a.isArchived() ? "true" : "false");
  212. childExtension = extension.addExtension(UUID);
  213. childExtension.addSimpleExtension(VALUE, a.getUUID());
  214. childExtension = extension.addExtension(STATE);
  215. childExtension.addSimpleExtension(VALUE, a.getState() == null ? "" : a.getState().getName());
  216. childExtension = extension.addExtension(FORMAT);
  217. childExtension.addSimpleExtension(VALUE, a.getFormat());
  218. List<CategoryItem> categories = a.getCategories();
  219. childExtension = extension.addExtension(CATEGORIES);
  220. for (CategoryItem c : categories) {
  221. childExtension.addSimpleExtension(VALUE, c.getName());
  222. }
  223. org.apache.abdera.model.Content content = factory.newContent();
  224. content.setSrc(base.clone().path("binary").build().toString());
  225. content.setMimeType("application/octet-stream");
  226. content.setContentType(Type.MEDIA);
  227. e.setContentElement(content);
  228. return e;
  229. }
  230. /* public static Entry ToAssetEntry(AssetItem a, UriInfo uriInfo) {
  231. Entry e = new Entry();
  232. e.setTitle(a.getTitle());
  233. e.setSummary(a.getDescription());
  234. Content content = new Content();
  235. content.setType(MediaType.APPLICATION_XML_TYPE);
  236. AssetMetadata metadata = new AssetMetadata();
  237. metadata.setUuid(a.getUUID());
  238. metadata.setTitle(a.getTitle());
  239. metadata.setLastModified(a.getLastModified().getTime());
  240. metadata.setCreated(a.getCreatedDate().getTime());
  241. metadata.setCreatedBy(a.getCreator());
  242. metadata.setDisabled(a.getDisabled());
  243. metadata.setFormat(a.getFormat());
  244. metadata.setNote(a.getContent());
  245. metadata.setState((a.getState() != null) ? a.getState().getName() : "");
  246. content.setJAXBObject(metadata);
  247. e.setContent(content);
  248. List<CategoryItem> categories = a.getCategories();
  249. String[] cats = new String [categories.size()];
  250. int counter = 0;
  251. for (CategoryItem c : categories) {
  252. cats [ counter++ ] = c.getName();
  253. }
  254. UriBuilder builder = uriInfo.getBaseUriBuilder();
  255. Link l = new Link();
  256. l.setHref(builder.path("/packages/" + a.getPackageName() + "/asset/" + a.getName()).build());
  257. l.setRel("self");
  258. builder = uriInfo.getBaseUriBuilder();
  259. e.setId(l.getHref());
  260. e.setPublished(new Date(a.getLastModified().getTimeInMillis()));
  261. e.setSummary(a.getDescription());
  262. e.setRights(a.getRights());
  263. builder = uriInfo.getBaseUriBuilder();
  264. l = new Link();
  265. l.setHref(builder.path("/packages/" + a.getPackageName() + "/asset/" + a.getName() + "/binary").build());
  266. l.setRel("binary");
  267. e.getLinks().add(l);
  268. builder = uriInfo.getBaseUriBuilder();
  269. l = new Link();
  270. l.setHref(builder.path("/packages/" + a.getPackageName() + "/asset/" + a.getName() + "/source").build());
  271. l.setRel("source");
  272. e.getLinks().add(l);
  273. return e;
  274. }*/
  275. }