Juan Hernandez has posted comments on this change. Change subject: restApi : RestApi to export volume profile to pdf ......................................................................
Patch Set 24: (16 comments) http://gerrit.ovirt.org/#/c/28340/24/backend/manager/dependencies/pom.xml File backend/manager/dependencies/pom.xml: Line 265: <groupId>commons-io</groupId> Line 266: <artifactId>commons-io</artifactId> Line 267: <version>${commons-io.version}</version> Line 268: </dependency> Line 269: Remember to fix this whitespace problem before merging. Line 270: <dependency> Line 271: <groupId>org.apache.xmlgraphics</groupId> Line 272: <artifactId>batik-util</artifactId> Line 273: <version>${batik.version}</version> http://gerrit.ovirt.org/#/c/28340/24/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/pdf/FOPMessageBodyWriter.java File backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/pdf/FOPMessageBodyWriter.java: Line 58: return true; Line 59: } Line 60: Line 61: @Override Line 62: public void writeTo(final Object data, Class<?> dataClass, Type arg2, Annotation[] annotation, MediaType mediaType, MultivaluedMap<String, Object> map, OutputStream outputStream) throws IOException, WebApplicationException { Name the parameters as in the definition of the interface: writeTo(Object data, Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType, MultivaluedMap<String, Object> httpHeaders, OutputStream entityStream) Line 63: try { Line 64: new FOPMessageBodyWriter(); Line 65: Line 66: Source source = new JAXBSource(jaxbContext, data); Line 60: Line 61: @Override Line 62: public void writeTo(final Object data, Class<?> dataClass, Type arg2, Annotation[] annotation, MediaType mediaType, MultivaluedMap<String, Object> map, OutputStream outputStream) throws IOException, WebApplicationException { Line 63: try { Line 64: new FOPMessageBodyWriter(); Don't need to create an instance here. Line 65: Line 66: Source source = new JAXBSource(jaxbContext, data); Line 67: Line 68: String xslName = "/" + dataClass.getSimpleName() + "AsPdf.xsl"; Line 70: StreamSource transformSource = new StreamSource(templateStream); Line 71: Line 72: FopFactory fopFactory = FopFactory.newInstance(); Line 73: FOUserAgent foUserAgent = fopFactory.newFOUserAgent(); Line 74: TransformerFactory transfact = TransformerFactory.newInstance(); Is it possible to create these objects in the constructor and reuse them? Can they be used from multiple threads simultaneously? Line 75: Line 76: final ByteArrayOutputStream pdfoutStream = new ByteArrayOutputStream(); Line 77: Transformer xslfoTransformer = transfact.newTransformer(transformSource); Line 78: Fop fop = fopFactory.newFop(MimeConstants.MIME_PDF, foUserAgent, pdfoutStream); Line 74: TransformerFactory transfact = TransformerFactory.newInstance(); Line 75: Line 76: final ByteArrayOutputStream pdfoutStream = new ByteArrayOutputStream(); Line 77: Transformer xslfoTransformer = transfact.newTransformer(transformSource); Line 78: Fop fop = fopFactory.newFop(MimeConstants.MIME_PDF, foUserAgent, pdfoutStream); No need for the pdfoutStream, you can generate the PDF document directly to the outputStream passed as parameter to the method: Fop fop = fopFactory.newFop(MimeConstants.MIME_PDF, foUserAgent, outputStream); Line 79: Result res = new SAXResult(fop.getDefaultHandler()); Line 80: xslfoTransformer.transform(source, res); Line 81: Line 82: StreamingOutput stream = new StreamingOutput() { Line 82: StreamingOutput stream = new StreamingOutput() { Line 83: public void write(OutputStream output) throws IOException, WebApplicationException { Line 84: output.write(pdfoutStream.toByteArray()); Line 85: } Line 86: }; This stream isn't necessary. Line 87: Response.ok(stream).type("application/pdf").header("content-disposition", "attachment; filename=\"stats.pdf\"").build(); Line 88: } catch(Exception e) { Line 89: log.error(e.toString()); Line 90: } Line 83: public void write(OutputStream output) throws IOException, WebApplicationException { Line 84: output.write(pdfoutStream.toByteArray()); Line 85: } Line 86: }; Line 87: Response.ok(stream).type("application/pdf").header("content-disposition", "attachment; filename=\"stats.pdf\"").build(); This is completely ignored, as you aren't doing anything with the created Response object. To set the headers you need to use the "map" parameter (should be named httpHeaders): httpHeaders.putSingle("Content-Disposition", "attachment; filename=\"stats.pdf\""); And this should be done at the beginning of the method, before starting to send the response content, as you can't set headers after starting to send content. You don't need to set the content-type explicitly, the JAX-RS framework takes care of that. Line 88: } catch(Exception e) { Line 89: log.error(e.toString()); Line 90: } Line 91: } http://gerrit.ovirt.org/#/c/28340/24/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/gluster/GlusterVolumeResource.java File backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/gluster/GlusterVolumeResource.java: Line 100: ApiMediaType.APPLICATION_XML, Line 101: ApiMediaType.APPLICATION_JSON, Line 102: ApiMediaType.APPLICATION_X_YAML, Line 103: ApiMediaType.APPLICATION_PDF Line 104: }) Fix the indentation of the }) , should start in the same column that @Produces. Line 105: public GlusterVolumeProfileDetails getProfileStatistics(); Line 106: Line 107: /** Line 108: * Sub-resource locator method, returns GlusterBricksResource on which the remainder of the URI is dispatched. http://gerrit.ovirt.org/#/c/28340/24/ovirt-engine.spec.in File ovirt-engine.spec.in: Line 192: Requires: %{name}-dbscripts = %{version}-%{release} Line 193: Requires: %{name}-restapi = %{version}-%{release} Line 194: Requires: %{name}-tools = %{version}-%{release} Line 195: Requires: %{name}-userportal = %{version}-%{release} Line 196: Requires: %{name}-webadmin-portal = %{version}-%{release} The "Requires: fop" should go here, as it is available in all the distributions that we support, not just Fedora. Line 197: Requires: %{name}-websocket-proxy >= %{version}-%{release} Line 198: Requires: java Line 199: Requires: java-1.7.0-openjdk >= 1:1.7.0.9-2.3.3.2 Line 200: Requires: jpackage-utils Line 223: Requires: postgresql-jdbc Line 224: Requires: quartz Line 225: Requires: snmp4j Line 226: Requires: spring-ldap Line 227: Requires: fop Use a tab to indent, no spaces, to be consistent with the rest of the "Requires". Line 228: Requires: springframework-aop Line 229: Requires: springframework-beans Line 230: Requires: springframework-context Line 231: Requires: springframework-expression Line 689: dst="%{engine_jboss_modules}/${dst}" Line 690: src="%{_javadir}/${src}" Line 691: rm -f "%{buildroot}${dst}" Line 692: ln -s "${src}" "%{buildroot}${dst}" Line 693: done << __EOF__ The line for fop should go here, as it is available in all the distributions that we support. And we should do the same for avalon, batik, xmlgraphics-commons and commons-io: org/apache/avalon/framework/main/avalon-framework-impl.jar org/apache/avalon/framework/main/avalon-framework-api.jar org/apache/commons/io/main/commons-io.jar org/apache/xmlgraphics/batik/main/batik-awt-util.jar batik/batik-awt-util.jar org/apache/xmlgraphics/batik/main/batik-bridge.jar batik/batik-bridge.jar org/apache/xmlgraphics/batik/main/batik-css.jar batik/batik-css.jar org/apache/xmlgraphics/batik/main/batik-extension.jar batik/batik-extension.jar org/apache/xmlgraphics/batik/main/batik-ext.jar batik/batik-ext.jar org/apache/xmlgraphics/batik/main/batik-gvt.jar batik/batik-gvt.jar org/apache/xmlgraphics/batik/main/batik-svg-dom.jar batik/batik-svg-dom.jar org/apache/xmlgraphics/batik/main/batik-transcoder.jar batik/batik-transcoder.jar org/apache/xmlgraphics/batik/main/batik-util.jar batik/batik-util.jar org/apache/xmlgraphics/commons/main/xmlgraphics-commons.jar org/apache/xmlgraphics/fop/main/fop.jar Not sure if this is completely correct. Please build the RPMs and check that there aren't broken symlinks. Also this needs to be checked in Fedora and CentOS. Line 694: org/apache/ws/commons/main/ws-commons-util.jar Line 695: org/ovirt/otopi/main/otopi.jar otopi/otopi.jar Line 696: org/ovirt/ovirt-host-deploy/main/ovirt-host-deploy.jar ovirt-host-deploy/ovirt-host-deploy.jar Line 697: org/ovirt/vdsm-jsonrpc-java/main/vdsm-jsonrpc-java-client.jar vdsm-jsonrpc-java/vdsm-jsonrpc-java-client.jar Line 705: com/woorea/openstack/sdk/main/openstack-client.jar openstack-java-sdk/openstack-client.jar Line 706: com/woorea/openstack/sdk/main/quantum-client.jar openstack-java-sdk/quantum-client.jar Line 707: com/woorea/openstack/sdk/main/quantum-model.jar openstack-java-sdk/quantum-model.jar Line 708: com/woorea/openstack/sdk/main/resteasy-connector.jar openstack-java-sdk/resteasy-connector.jar Line 709: org/apache/fop/main/fop.jar This is not specific to Fedora, should go in the previous section. Line 710: org/aopalliance/main/aopalliance.jar Line 711: org/apache/commons/compress/main/commons-compress.jar Line 712: org/apache/commons/configuration/main/commons-configuration.jar commons-configuration.jar Line 713: org/apache/commons/httpclient/main/commons-httpclient.jar http://gerrit.ovirt.org/#/c/28340/24/pom.xml File pom.xml: Line 95: <fop.version>1.0</fop.version> Line 96: <xmlgraphics-commons.version>1.4</xmlgraphics-commons.version> Line 97: <batik.version>1.7</batik.version> Line 98: <apache-avalon-api.version>4.3.1</apache-avalon-api.version> Line 99: <apache-avalon-impl.version>4.3.1</apache-avalon-impl.version> Use only one property for avalon: <avalon.version>4.3.1</avalon.version> Line 100: <apache-batick-all.version>1.7</apache-batick-all.version> Line 101: <xalan.version>2.6.0</xalan.version> Line 102: <servlet-api.version>2.5</servlet-api.version> Line 103: <commons-io.version>1.3</commons-io.version> Line 96: <xmlgraphics-commons.version>1.4</xmlgraphics-commons.version> Line 97: <batik.version>1.7</batik.version> Line 98: <apache-avalon-api.version>4.3.1</apache-avalon-api.version> Line 99: <apache-avalon-impl.version>4.3.1</apache-avalon-impl.version> Line 100: <apache-batick-all.version>1.7</apache-batick-all.version> I think this isn't needed, you already "have bakit.version". Line 101: <xalan.version>2.6.0</xalan.version> Line 102: <servlet-api.version>2.5</servlet-api.version> Line 103: <commons-io.version>1.3</commons-io.version> Line 104: <c3p0.version>0.9.1.1</c3p0.version> Line 97: <batik.version>1.7</batik.version> Line 98: <apache-avalon-api.version>4.3.1</apache-avalon-api.version> Line 99: <apache-avalon-impl.version>4.3.1</apache-avalon-impl.version> Line 100: <apache-batick-all.version>1.7</apache-batick-all.version> Line 101: <xalan.version>2.6.0</xalan.version> This isn't needed. Line 102: <servlet-api.version>2.5</servlet-api.version> Line 103: <commons-io.version>1.3</commons-io.version> Line 104: <c3p0.version>0.9.1.1</c3p0.version> Line 105: <aopalliance.version>1.0</aopalliance.version> Line 98: <apache-avalon-api.version>4.3.1</apache-avalon-api.version> Line 99: <apache-avalon-impl.version>4.3.1</apache-avalon-impl.version> Line 100: <apache-batick-all.version>1.7</apache-batick-all.version> Line 101: <xalan.version>2.6.0</xalan.version> Line 102: <servlet-api.version>2.5</servlet-api.version> This isn't needed. Line 103: <commons-io.version>1.3</commons-io.version> Line 104: <c3p0.version>0.9.1.1</c3p0.version> Line 105: <aopalliance.version>1.0</aopalliance.version> Line 106: <snmp4j.version>2.2.2</snmp4j.version> -- To view, visit http://gerrit.ovirt.org/28340 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: comment Gerrit-Change-Id: Ie3ff28f5cf18bd7a2bcb53a169873fe6ae3541ed Gerrit-PatchSet: 24 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: anmolbabu <anb...@redhat.com> Gerrit-Reviewer: Alexander Wels <aw...@redhat.com> Gerrit-Reviewer: Juan Hernandez <juan.hernan...@redhat.com> Gerrit-Reviewer: Kanagaraj M <kmayi...@redhat.com> Gerrit-Reviewer: Ramesh N <rnach...@redhat.com> Gerrit-Reviewer: Sahina Bose <sab...@redhat.com> Gerrit-Reviewer: Shubhendu Tripathi <shtri...@redhat.com> Gerrit-Reviewer: anmolbabu <anb...@redhat.com> Gerrit-Reviewer: automat...@ovirt.org Gerrit-Reviewer: oVirt Jenkins CI Server Gerrit-HasComments: Yes _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches