Support TOSCA in verigraph (gRPC service)
[parser.git] / verigraph / build.xml
1 <?xml version="1.0" encoding="UTF-8"?>
2 <!--
3  Copyright (c) 2017/18 Politecnico di Torino and others.
4
5  All rights reserved. This program and the accompanying materials
6  are made available under the terms of the Apache License, Version 2.0
7  which accompanies this distribution, and is available at
8  http://www.apache.org/licenses/LICENSE-2.0
9 -->
10 <project name="Verigraph" default="generate-war" basedir="." xmlns:artifact="antlib:org.apache.maven.artifact.ant">
11   <description>
12       Script for Verigraph
13   </description>
14
15   <property name="root.location" location="." />
16   <!-- The location to be used for class files -->
17   <property name="docker-grpc.dir" value="${root.location}/docker/gRPC" />
18   <property name="docker-rest.dir" value="${root.location}/docker/REST" />
19   <property name="cli.dir" value="${root.location}/VerigraphCLI" />
20   <property name="src.dir" location="${root.location}/src" />
21   <property name="gen.dir" location="${root.location}/gen-src" />
22   <property name="war.dir" location="${root.location}/war" />
23   <property name="grpc.dir" value="${src.dir}/it/polito/verigraph/grpc" />
24   <property name="path.prefix" value="it/polito" />
25   <property name="build.dir" location="${root.location}/build" />
26   <property name="lib.dir" location="${root.location}/lib" />
27   <property name="schemadir" location="${root.location}/schema" />
28   <property name="schemafile" value="xml_components.xsd" />
29   <property name="toscaschemadir" location="${root.location}/schema/tosca" />
30   <property name="toscaschemafile" value="TOSCA-v1.0.xsd" />
31   <property name="toscaverigraphschemafile" value="ToscaTypes_XMLconfig.xsd" />
32   <property name="testfile" value="test.py" />
33   <property name="target" value="1.8" />
34   <property name="source" value="1.8" />
35   <property name="gen-tomcat-service.dir" location="${root.location}/target" />
36   <property name="resources.dir" location="${root.location}/webapp" />
37   <property name="gen-war.dir" location="${root.location}/war" />
38   <property name="jsonschemafolder.dir" location="${root.location}/jsonschema" />
39   <property name="test.dir" location="${root.location}/tester" />
40   <property name="iteration" value="1" />
41
42   <path id="z3.classpath">
43     <pathelement location="${lib.dir}/com.microsoft.z3.jar" />
44   </path>
45
46
47   <import file="tomcat-build.xml" />
48
49   <target name="mvn-init" unless="compile.classpath" xmlns:artifact="urn:maven-artifact-ant">
50     <typedef resource="org/apache/maven/artifact/ant/antlib.xml" uri="urn:maven-artifact-ant" classpath="lib/maven-ant-tasks-2.1.3.jar" />
51     <condition property="maven.repo.local" value="${maven.repo.local}" else="${user.home}/.m2/repository">
52       <isset property="maven.repo.local" />
53     </condition>
54     <echo>maven.repo.local=${maven.repo.local}</echo>
55     <artifact:localRepository id="local.repository" path="${maven.repo.local}" />
56     <artifact:pom file="pom.xml" id="maven.project" />
57     <artifact:dependencies pathId="compile.classpath" filesetId="compile.fileset" useScope="compile">
58       <pom refid="maven.project" />
59       <localRepository refid="local.repository" />
60     </artifact:dependencies>
61     <artifact:dependencies pathId="test.classpath" filesetId="test.fileset" useScope="test">
62       <pom refid="maven.project" />
63       <localRepository refid="local.repository" />
64     </artifact:dependencies>
65     <artifact:dependencies pathId="runtime.classpath" filesetId="runtime.fileset" useScope="runtime">
66       <pom refid="maven.project" />
67       <localRepository refid="local.repository" />
68     </artifact:dependencies>
69     <artifact:dependencies pathId="build.classpath" filesetId="build.fileset">
70       <pom refid="maven.project" />
71       <localRepository refid="local.repository" />
72     </artifact:dependencies>
73   </target>
74
75
76   <target name="init">
77     <mkdir dir="${build.dir}" />
78     <mkdir dir="${gen-tomcat-service.dir}" />
79     <mkdir dir="${gen-war.dir}" />
80     <mkdir dir="${gen.dir}" />
81     <mkdir dir="${lib.dir}" />
82     <get dest="${lib.dir}">
83       <url url="https://github.com/Z3Prover/z3/releases/download/z3-4.5.0/z3-4.5.0-x86-win.zip" />
84       <url url="http://central.maven.org/maven2/org/apache/maven/maven-ant-tasks/2.1.3/maven-ant-tasks-2.1.3.jar" />
85     </get>
86     <unzip src="${lib.dir}/z3-4.5.0-x86-win.zip" dest="${lib.dir}" overwrite="true">
87       <patternset>
88         <include name="**/**/com.microsoft.z3.jar" />
89       </patternset>
90       <mapper type="flatten" />
91     </unzip>
92     <delete file="${lib.dir}/z3-4.5.0-x86-win.zip" />
93   </target>
94
95
96   <target name="chk-bindings">
97     <uptodate property="generate-bindings.notRequired" targetfile="${gen.dir}/.flagfile">
98       <srcresources>
99         <fileset dir="${schemadir}" includes="${schemafile}" />
100         <fileset dir="${toscaschemadir}" includes="${toscaschemafile}" />
101         <fileset dir="${toscaschemadir}" includes="${toscaverigraphschemafile}" />
102       </srcresources>
103     </uptodate>
104   </target>
105
106   <target name="generate-bindings" unless="generate-bindings.notRequired" depends="init, chk-bindings" description="Create the value classes">
107     <exec executable="xjc" failonerror="true">
108       <arg line="-d ${gen.dir} -p it.polito.neo4j.jaxb ${schemadir}/${schemafile}" />
109     </exec>
110     <exec executable="xjc" failonerror="true">
111       <arg line="-d ${gen.dir} -p it.polito.tosca.jaxb ${toscaschemadir}/${toscaschemafile}" />
112     </exec>
113     <mkdir dir="${root.location}/temp-gen" />
114     <exec executable="xjc" failonerror="true">
115       <arg line="-d ${root.location}/temp-gen -p it.polito.tosca.jaxb ${toscaschemadir}/${toscaverigraphschemafile}" />
116     </exec>
117
118     <copy toDir="${gen.dir}/it/polito/tosca/jaxb" overwrite="true">
119       <file name="${root.location}/temp-gen/it/polito/tosca/jaxb/Configuration.java" />
120     </copy>
121     <delete dir="${root.location}/temp-gen" />
122
123     <touch file="${gen.dir}/.flagfile" />
124   </target>
125
126
127   <!-- The target for compiling the Verigraph application -->
128   <target name="build-service" depends="init, generate-bindings, mvn-init">
129     <echo>Building verigraph (if needed)...</echo>
130     <javac destdir="${build.dir}" debug="${debug}" debuglevel="${debuglevel}" source="${source}" target="${target}" includeantruntime="false">
131       <classpath>
132         <path id="compile.classpath" />
133         <path id="z3.classpath" />
134       </classpath>
135       <src path="${src.dir}" />
136       <src path="${gen.dir}" />
137       <src path="${basedir}/gen-protobuf" />
138       <include name="${path.prefix}/**/*.java" />
139       <exclude name="main/proto/" />
140     </javac>
141     <echo>Done.</echo>
142   </target>
143
144
145   <macrodef name="war-exploded">
146     <sequential>
147       <copy toDir="${gen-tomcat-service.dir}" overwrite="true">
148         <fileset dir="${resources.dir}" />
149       </copy>
150       <copy toDir="${gen-tomcat-service.dir}" overwrite="true">
151         <fileset dir=".">
152           <include name="server.properties" />
153         </fileset>
154       </copy>
155       <!-- copy class files to WEB-INF/classes directory -->
156       <copy toDir="${gen-tomcat-service.dir}/WEB-INF/classes" overwrite="true">
157         <fileset dir="${build.dir}">
158           <exclude name="verigraph.proto" />
159           <exclude name="src/main/proto" />
160         </fileset>
161       </copy>
162       <!-- copy jsonschema folder to WEB-INF/classes directory -->
163       <copy toDir="${gen-tomcat-service.dir}/jsonschema" overwrite="true">
164         <fileset dir="${jsonschemafolder.dir}" />
165       </copy>
166       <!-- copy lib files to WEB-INF/lib directory -->
167       <copy toDir="${gen-tomcat-service.dir}/maven-lib" overwrite="true">
168         <fileset refid="runtime.fileset">
169         </fileset>
170       </copy>
171       <copy toDir="${gen-tomcat-service.dir}/WEB-INF/lib" overwrite="true" flatten="true">
172         <fileset dir="${gen-tomcat-service.dir}/maven-lib">
173           <include name="**/**/*.jar" />
174         </fileset>
175       </copy>
176       <delete dir="${gen-tomcat-service.dir}/maven-lib" />
177
178       <!-- Make the jar that includes only the classes needed for verigraph models -->
179       <jar destfile="${gen-tomcat-service.dir}/WEB-INF/lib/mcnet.jar">
180         <fileset dir="${build.dir}">
181           <include name="it/polito/verigraph/mcnet/**/*.class" />
182         </fileset>
183       </jar>
184       <!-- Copy the z3 library -->
185       <copy toDir="${gen-tomcat-service.dir}/WEB-INF/lib" overwrite="true" flatten="true">
186         <file name="${lib.dir}/com.microsoft.z3.jar" />
187       </copy>
188     </sequential>
189   </macrodef>
190
191   <target name="war-exploded" depends="build-service">
192     <war-exploded />
193   </target>
194
195   <target name="generate-war" depends="war-exploded">
196     <war destfile="${gen-war.dir}/${serviceName}.war" basedir="${gen-tomcat-service.dir}">
197       <exclude name="protoc-dependencies/" />
198       <exclude name="protoc-plugins/" />
199       <exclude name="classes/" />
200       <exclude />
201     </war>
202   </target>
203
204   <target name="docker-rest-build" depends="generate-war">
205     <delete file="${docker-rest.dir}/verigraph.war" />
206
207     <copy file="${gen-war.dir}/verigraph.war" toDir="${docker-rest.dir}" />
208   </target>
209
210   <target name="docker-grpc-build" depends="build-service">
211     <delete dir="${docker-grpc.dir}/service_lib" />
212     <mkdir dir="${docker-grpc.dir}/service_lib" />
213
214     <copy toDir="${docker-grpc.dir}/service_lib" flatten="true" overwrite="true">
215       <fileset refid="runtime.fileset" />
216     </copy>
217     <copy file="${lib.dir}/com.microsoft.z3.jar" todir="${docker-grpc.dir}/service_lib" />
218
219     <delete file="${docker-grpc.dir}/server.properties" />
220     <delete dir="${docker-grpc.dir}/jsonschema" />
221     <copy file="${root.location}/server.properties" todir="${docker-grpc.dir}" />
222     <copydir src="${root.location}/jsonschema" dest="${docker-grpc.dir}/jsonschema" />
223
224     <path id="jars.path">
225       <fileset dir="${docker-grpc.dir}">
226         <include name="service_lib/*.jar" />
227       </fileset>
228     </path>
229
230     <pathconvert property="jars.mf" pathsep=" ">
231       <path refid="jars.path" />
232       <flattenmapper />
233       <map from="" to="service_lib/" />
234     </pathconvert>
235
236     <delete file="${docker-grpc.dir}/service.jar"/>
237     <jar destfile="${docker-grpc.dir}/service.jar">
238       <manifest>
239         <attribute name="Main-Class" value="it.polito.verigraph.grpc.server.Service"/>
240         <attribute name="Class-Path" value="${jars.mf}"/>
241       </manifest>
242       <fileset dir="${root.location}/build"/>
243     </jar>
244   </target>
245
246
247   <target name="build-cli-jar" depends="build-service">
248     <delete dir="${cli.dir}" />
249     <mkdir dir="${cli.dir}" />
250
251     <copy toDir="${cli.dir}/service_lib" flatten="true" overwrite="true">
252       <fileset refid="runtime.fileset" />
253     </copy>
254     <copy file="${src.dir}/it/polito/verigraph/tosca/README_CLI.txt" todir="${cli.dir}" />
255
256     <path id="jars.path">
257       <fileset dir="${cli.dir}">
258         <include name="service_lib/*.jar" />
259       </fileset>
260     </path>
261
262     <pathconvert property="jars.mf" pathsep=" ">
263       <path refid="jars.path" />
264       <flattenmapper />
265       <map from="" to="service_lib/" />
266     </pathconvert>
267
268     <delete file="${cli.dir}/VerigraphCLI.jar"/>
269     <jar destfile="${cli.dir}/VerigraphCLI.jar">
270       <manifest>
271         <attribute name="Main-Class" value="it.polito.verigraph.tosca.ToscaCLI"/>
272         <attribute name="Class-Path" value="${jars.mf}"/>
273       </manifest>
274       <fileset dir="${root.location}/build"/>
275     </jar>
276   </target>
277
278   <!-- launch test python test -->
279   <target name="run-test">
280     <exec dir="${test.dir}" executable="python">
281       <arg value="${testfile}" />
282       <arg value="-iteration " />
283       <arg value="${iteration}" />
284     </exec>
285   </target>
286
287   <!-- target for cleaning -->
288   <target name="clean">
289     <delete dir="${build.dir}" />
290     <delete dir="${gen.dir}" />
291     <delete dir="${gen-tomcat-service.dir}" />
292     <delete dir="${war.dir}" />
293     <delete dir="${lib.dir}" />
294     <delete dir="${docker-grpc.dir}/service_lib" />
295     <delete dir="${docker-grpc.dir}/jsonschema" />
296     <delete file="${docker-grpc.dir}/server.properties" />
297     <delete file="${docker-grpc.dir}/service.jar" />
298     <delete file="${docker-rest.dir}/verigraph.war" />
299     <delete dir="${cli.dir}" />
300   </target>
301
302 </project>