Commit 2e066b76 authored by Nacho's avatar Nacho
Browse files

Initial commit

parents
Loading
Loading
Loading
Loading

.gitignore

0 → 100644
+4 −0
Original line number Diff line number Diff line
.*
!.gitignore
!.gitlab-ci.yml
target

.gitlab-ci.yml

0 → 100644
+24 −0
Original line number Diff line number Diff line
stages:
  - build

maven-build:
  stage: build
  image: redmic/maven-gitlab
  variables:
    MAVEN_OPTS: "-Dmaven.repo.local=.m2/repository"
  only:
    - branches
  cache:
    paths:
      - .m2/repository/
  script:
    - mvn deploy -B
    - "COVERAGE=$(xmllint --html --xpath '//table[@id=\"coveragetable\"]/tfoot//td[@class=\"ctr2\"][1]/text()' target/site/jacoco/index.html)"
    - 'echo "Coverage: $COVERAGE"'
  after_script:
    - rm -r .m2/repository/es
  artifacts:
    name: "$CI_PROJECT_NAME"
    expire_in: '6 months'
    paths:
      - target/*.jar

README.md

0 → 100644
+53 −0
Original line number Diff line number Diff line
[![pipeline status](https://git.redmic.net/redmic-server/reports/badges/dev/pipeline.svg)](https://git.redmic.net/redmic-server/reports/commits/dev) [![coverage report](https://git.redmic.net/redmic-server/reports/badges/dev/coverage.svg)](https://git.redmic.net/redmic-server/reports/commits/dev)

# API Reports
Este proyecto sirve de apoyo a la API de REDMIC, añadiendo la funcionalidad de generar informes personalizados.

Para ello, se sirve de la plataforma BIRT y de su API Runtime, para integrarlo en los controladores de la API de REDMIC.


## Crear un nuevo informe
Se ha intentado integrar BIRT Framework en Spring, para diseñar los informes desde el mismo IDE que usamos normalmente, pero hay fallos relacionados con la instalación.
Por el momento, descargamos la versión completa de BIRT con su Eclipse integrado, listo para funcionar.

Al crear un nuevo informe, lo primero es añadirle nuestra **RedmicLibrary** desde *Resource Explorer*, que incluye la *MasterPage*, *DataSources*, *DataSets*, etc.
Una vez añadida, podemos ir al elemento deseado dentro de ella para añadirlo al informe (no se añade todo automáticamente).
Por lo general, si queremos añadir algún recurso nuevo y es susceptible de reutilizarse en otro informe, lo añadiremos directamente en **RedmicLibrary**, para poderlo importar a otro informe posteriormente.

Nos basamos en POJO como fuente de datos, usando los modelos de ElasticSearch presentes en API (se separarán en otro proyecto a su vez).
Para que funcione todo correctamente, debemos importar las dependencias necesarias para estos modelos, que por ahora son *joda-time* y *models* (tanto para designtime como para runtime).

### Detalles a tener en cuenta

* A la hora de añadir la *MasterPage* de una librería al informe, parecerá que no funciona correctamente.
Esto es porque el informe ya incluye una por defecto, y tiene preferencia sobre la añadida. La única forma que se ha encontrado para solucionarlo es editar el código XML del informe a mano, borrando las *MasterPage* no deseadas.

* Muchas veces, aunque un *DataSet* esté disponible para un informe, no podremos acceder a los datos que contiene.
Esto sucede porque hay que hacer *Binding* de los elementos del informe con las propiedades que nos interesen del *DataSet*.
BIRT lo hace al autogenerar elementos, pero si los creamos desde cero, debemos hacerlo nosotros.

* Por lo general, BIRT no se actualiza las dependencias al cambiar el nombre de algún elemento. Por tanto, es más que recomendable dar un nombre significativo a las cosas en el momento de su creación, para no necesitar editar sus nombres posteriormente.


## Probar la generación de informes
Para agilizar las pruebas cuando se crea un nuevo diseño de informe, ejecutamos los tests del proyecto con Maven:
```
// ejecuta todos los tests que encuentre
mvn test
// ejecuta un fichero de tests concreto
mvn -Dtest=TestActivityReports test
// ejecuta un test específico de un fichero de tests concreto
mvn -Dtest=TestActivityReports#generateInfoReport test
```
Si todo ha funcionado correctamente, encontraremos los informes generados en el directorio *target* del proyecto.


## Integración con API REDMIC
Para usar este proyecto desde nuestra API, lo instalamos en el repositorio Maven local:
```
mvn install
```
El *pom.xml* de API ya está preparado para hacer uso de él, incluyendo los diseños.

Es importante recordar que, antes de usar los informes en API, se debe eliminar las dependencias importadas al diseñarlos (o importarlos en su momento de manera absoluta), ya que no son necesarios (API ya incluye en su classpath todo lo necesario) y generan errores en BIRT.
 No newline at end of file

maven-eclipse.xml

0 → 100644
+9 −0
Original line number Diff line number Diff line
<project default="copy-resources">
  <target name="init"/>
  <target name="copy-resources" depends="init">
    <copy todir="target/classes/resources" filtering="false">
      <fileset dir="resources" includes="" excludes="**/*.java"/>
    </copy>
  </target>
</project>
 No newline at end of file

pom.xml

0 → 100644
+132 −0
Original line number Diff line number Diff line
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<parent>
		<groupId>es.redmic.lib</groupId>
		<artifactId>libs</artifactId>
		<version>0.6.0</version>
	</parent>

	<modelVersion>4.0.0</modelVersion>
	<artifactId>reports</artifactId>
	<packaging>jar</packaging>
	<name>Reports</name>

	<dependencies>
		<!-- Redmic -->
		<dependency>
			<groupId>es.redmic.lib</groupId>
			<artifactId>models</artifactId>
			<version>${redmic.version}</version>
			<scope>provided</scope>
		</dependency>
		
		<dependency>
			<groupId>es.redmic.lib</groupId>
			<artifactId>exceptions</artifactId>
			<version>${redmic.version}</version>
			<scope>provided</scope>
		</dependency>

		<!-- Otros -->
		<dependency>
			<groupId>org.eclipse.birt.runtime</groupId>
			<artifactId>org.eclipse.birt.runtime</artifactId>
			<version>${org.eclipse.birt.runtime.version}</version>
			<scope>compile</scope>
			<exclusions>
				<exclusion>
					<groupId>org.eclipse.birt.runtime.3_7_1</groupId>
					<artifactId>org.apache.batik.pdf</artifactId>
				</exclusion>
			</exclusions>
		</dependency>
		<dependency>
			<groupId>org.eclipse.birt.runtime.3_7_1</groupId>
			<artifactId>org.apache.batik.pdf</artifactId>
			<version>${batik.pdf.version}</version>
			<scope>runtime</scope>
		</dependency>
	</dependencies>

	<build>
		<resources>
			<resource>
				<directory>resources</directory>
				<targetPath>resources</targetPath>
			</resource>
		</resources>
		<plugins>
			<plugin>
				<artifactId>maven-remote-resources-plugin</artifactId>
				<version>1.4</version>
				<executions>
					<execution>
						<goals>
							<goal>bundle</goal>
						</goals>
						<configuration>
							<includes>
								<include>**/*.rpt*</include>
							</includes>
						</configuration>
					</execution>
				</executions>
			</plugin>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-surefire-plugin</artifactId>
				<configuration>
					<systemProperties>
						<property>
							<name>http.agent</name>
							<value>RedmicTasks</value>
						</property>
					</systemProperties>
				</configuration>
				<dependencies>
					<dependency>
						<groupId>org.apache.maven.surefire</groupId>
						<artifactId>surefire-junit47</artifactId>
						<version>2.18.1</version>
					</dependency>
				</dependencies>
			</plugin>
		</plugins>
		<pluginManagement>
			<plugins>
				<!--This plugin's configuration is used to store Eclipse m2e settings 
					only. It has no influence on the Maven build itself. -->
				<plugin>
					<groupId>org.eclipse.m2e</groupId>
					<artifactId>lifecycle-mapping</artifactId>
					<version>1.0.0</version>
					<configuration>
						<lifecycleMappingMetadata>
							<pluginExecutions>
								<pluginExecution>
									<pluginExecutionFilter>
										<groupId>
											org.apache.maven.plugins
										</groupId>
										<artifactId>
											maven-remote-resources-plugin
										</artifactId>
										<versionRange>
											[1.4,)
										</versionRange>
										<goals>
											<goal>bundle</goal>
										</goals>
									</pluginExecutionFilter>
									<action>
										<ignore></ignore>
									</action>
								</pluginExecution>
							</pluginExecutions>
						</lifecycleMappingMetadata>
					</configuration>
				</plugin>
			</plugins>
		</pluginManagement>
	</build>
</project>